@open-mercato/core 0.9.1-develop.7474.1.51db10479d → 0.9.1-develop.7475.1.28ca93ed97
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/.turbo/turbo-build.log +2 -2
- package/dist/generated/entities/catalog_price_history_entry/index.js +53 -0
- package/dist/generated/entities/catalog_price_history_entry/index.js.map +7 -0
- package/dist/generated/entities/customer_group_terms/index.js +2 -0
- package/dist/generated/entities/customer_group_terms/index.js.map +2 -2
- package/dist/generated/entities/ecommerce_store/index.js +33 -0
- package/dist/generated/entities/ecommerce_store/index.js.map +7 -0
- package/dist/generated/entities/ecommerce_store_channel_binding/index.js +29 -0
- package/dist/generated/entities/ecommerce_store_channel_binding/index.js.map +7 -0
- package/dist/generated/entities/ecommerce_store_domain_binding/index.js +23 -0
- package/dist/generated/entities/ecommerce_store_domain_binding/index.js.map +7 -0
- package/dist/generated/entities.ids.generated.js +8 -1
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +72 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/customerGroupsFixtures.js.map +2 -2
- package/dist/modules/catalog/acl.js +8 -1
- package/dist/modules/catalog/acl.js.map +2 -2
- package/dist/modules/catalog/api/config/omnibus/route.js +184 -0
- package/dist/modules/catalog/api/config/omnibus/route.js.map +7 -0
- package/dist/modules/catalog/api/prices/history/route.js +131 -0
- package/dist/modules/catalog/api/prices/history/route.js.map +7 -0
- package/dist/modules/catalog/api/prices/omnibus-preview/route.js +184 -0
- package/dist/modules/catalog/api/prices/omnibus-preview/route.js.map +7 -0
- package/dist/modules/catalog/api/products/route.js +54 -245
- package/dist/modules/catalog/api/products/route.js.map +3 -3
- package/dist/modules/catalog/api/tags/route.js +6 -0
- package/dist/modules/catalog/api/tags/route.js.map +2 -2
- package/dist/modules/catalog/backend/config/catalog/page.js +3 -1
- package/dist/modules/catalog/backend/config/catalog/page.js.map +2 -2
- package/dist/modules/catalog/cli.js +80 -2
- package/dist/modules/catalog/cli.js.map +2 -2
- package/dist/modules/catalog/commands/categories.js +51 -2
- package/dist/modules/catalog/commands/categories.js.map +2 -2
- package/dist/modules/catalog/commands/prices.js +43 -1
- package/dist/modules/catalog/commands/prices.js.map +2 -2
- package/dist/modules/catalog/commands/products.js +71 -0
- package/dist/modules/catalog/commands/products.js.map +2 -2
- package/dist/modules/catalog/commands/variants.js +7 -0
- package/dist/modules/catalog/commands/variants.js.map +2 -2
- package/dist/modules/catalog/components/OmnibusSettings.js +703 -0
- package/dist/modules/catalog/components/OmnibusSettings.js.map +7 -0
- package/dist/modules/catalog/components/PriceEditorOmnibusRow.js +152 -0
- package/dist/modules/catalog/components/PriceEditorOmnibusRow.js.map +7 -0
- package/dist/modules/catalog/components/lookupSources.js +31 -0
- package/dist/modules/catalog/components/lookupSources.js.map +7 -0
- package/dist/modules/catalog/components/prices/PriceScopeSelectors.js +8 -2
- package/dist/modules/catalog/components/prices/PriceScopeSelectors.js.map +2 -2
- package/dist/modules/catalog/components/products/VariantBuilder.js +11 -1
- package/dist/modules/catalog/components/products/VariantBuilder.js.map +2 -2
- package/dist/modules/catalog/data/entities.js +122 -1
- package/dist/modules/catalog/data/entities.js.map +2 -2
- package/dist/modules/catalog/data/validators.js +78 -0
- package/dist/modules/catalog/data/validators.js.map +2 -2
- package/dist/modules/catalog/di.js +18 -0
- package/dist/modules/catalog/di.js.map +2 -2
- package/dist/modules/catalog/lib/omnibus.js +285 -0
- package/dist/modules/catalog/lib/omnibus.js.map +7 -0
- package/dist/modules/catalog/lib/omnibusBackfill.js +146 -0
- package/dist/modules/catalog/lib/omnibusBackfill.js.map +7 -0
- package/dist/modules/catalog/lib/omnibusCache.js +89 -0
- package/dist/modules/catalog/lib/omnibusCache.js.map +7 -0
- package/dist/modules/catalog/lib/omnibusConfig.js +64 -0
- package/dist/modules/catalog/lib/omnibusConfig.js.map +7 -0
- package/dist/modules/catalog/lib/omnibusHistoryQueries.js +191 -0
- package/dist/modules/catalog/lib/omnibusHistoryQueries.js.map +7 -0
- package/dist/modules/catalog/lib/omnibusPresentedEntry.js +73 -0
- package/dist/modules/catalog/lib/omnibusPresentedEntry.js.map +7 -0
- package/dist/modules/catalog/lib/omnibusProductListEnrichment.js +94 -0
- package/dist/modules/catalog/lib/omnibusProductListEnrichment.js.map +7 -0
- package/dist/modules/catalog/lib/omnibusTypes.js +115 -0
- package/dist/modules/catalog/lib/omnibusTypes.js.map +7 -0
- package/dist/modules/catalog/lib/optionSchemaTranslations.js +55 -0
- package/dist/modules/catalog/lib/optionSchemaTranslations.js.map +7 -0
- package/dist/modules/catalog/lib/priceHistoryQuery.js +103 -0
- package/dist/modules/catalog/lib/priceHistoryQuery.js.map +7 -0
- package/dist/modules/catalog/lib/pricing.js +26 -2
- package/dist/modules/catalog/lib/pricing.js.map +2 -2
- package/dist/modules/catalog/lib/productFilters.js +273 -0
- package/dist/modules/catalog/lib/productFilters.js.map +7 -0
- package/dist/modules/catalog/lib/productScopeKeys.js +105 -0
- package/dist/modules/catalog/lib/productScopeKeys.js.map +7 -0
- package/dist/modules/catalog/lib/productScopeReindex.js +73 -0
- package/dist/modules/catalog/lib/productScopeReindex.js.map +7 -0
- package/dist/modules/catalog/migrations/Migration20261005105352_catalog.js +39 -0
- package/dist/modules/catalog/migrations/Migration20261005105352_catalog.js.map +7 -0
- package/dist/modules/catalog/migrations/Migration20261005150824_catalog.js +39 -0
- package/dist/modules/catalog/migrations/Migration20261005150824_catalog.js.map +7 -0
- package/dist/modules/catalog/services/catalogOmnibusService.js +480 -0
- package/dist/modules/catalog/services/catalogOmnibusService.js.map +7 -0
- package/dist/modules/catalog/setup.js +3 -1
- package/dist/modules/catalog/setup.js.map +2 -2
- package/dist/modules/catalog/subscribers/product-scope-keys-category-deleted.js +16 -0
- package/dist/modules/catalog/subscribers/product-scope-keys-category-deleted.js.map +7 -0
- package/dist/modules/catalog/subscribers/product-scope-keys-category-updated.js +17 -0
- package/dist/modules/catalog/subscribers/product-scope-keys-category-updated.js.map +7 -0
- package/dist/modules/catalog/translations.js +10 -0
- package/dist/modules/catalog/translations.js.map +2 -2
- package/dist/modules/configs/lib/upgrade-actions.js +28 -0
- package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
- package/dist/modules/customer_groups/api/customer-groups/[id]/terms/route.js +5 -0
- package/dist/modules/customer_groups/api/customer-groups/[id]/terms/route.js.map +2 -2
- package/dist/modules/customer_groups/components/CustomerGroupTermsSection.js +111 -3
- package/dist/modules/customer_groups/components/CustomerGroupTermsSection.js.map +2 -2
- package/dist/modules/customer_groups/components/customerGroupAssortmentScope.js +43 -0
- package/dist/modules/customer_groups/components/customerGroupAssortmentScope.js.map +7 -0
- package/dist/modules/customer_groups/data/entities.js +3 -0
- package/dist/modules/customer_groups/data/entities.js.map +2 -2
- package/dist/modules/customer_groups/data/validators.js +9 -0
- package/dist/modules/customer_groups/data/validators.js.map +2 -2
- package/dist/modules/customer_groups/migrations/Migration20261005110250_customer_groups.js +17 -0
- package/dist/modules/customer_groups/migrations/Migration20261005110250_customer_groups.js.map +7 -0
- package/dist/modules/customer_groups/services/customerGroupsService.js +62 -15
- package/dist/modules/customer_groups/services/customerGroupsService.js.map +2 -2
- package/dist/modules/ecommerce/acl.js +13 -0
- package/dist/modules/ecommerce/acl.js.map +7 -0
- package/dist/modules/ecommerce/api/domain-mappings/route.js +72 -0
- package/dist/modules/ecommerce/api/domain-mappings/route.js.map +7 -0
- package/dist/modules/ecommerce/api/openapi.js +27 -0
- package/dist/modules/ecommerce/api/openapi.js.map +7 -0
- package/dist/modules/ecommerce/api/store-channel-bindings/[id]/assortment-count/route.js +109 -0
- package/dist/modules/ecommerce/api/store-channel-bindings/[id]/assortment-count/route.js.map +7 -0
- package/dist/modules/ecommerce/api/store-channel-bindings/crud.js +265 -0
- package/dist/modules/ecommerce/api/store-channel-bindings/crud.js.map +7 -0
- package/dist/modules/ecommerce/api/store-channel-bindings/route.js +67 -0
- package/dist/modules/ecommerce/api/store-channel-bindings/route.js.map +7 -0
- package/dist/modules/ecommerce/api/store-domain-bindings/crud.js +296 -0
- package/dist/modules/ecommerce/api/store-domain-bindings/crud.js.map +7 -0
- package/dist/modules/ecommerce/api/store-domain-bindings/route.js +73 -0
- package/dist/modules/ecommerce/api/store-domain-bindings/route.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/categories/[slug]/route.js +87 -0
- package/dist/modules/ecommerce/api/storefront/categories/[slug]/route.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/categories/openapiSchemas.js +50 -0
- package/dist/modules/ecommerce/api/storefront/categories/openapiSchemas.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/categories/route.js +75 -0
- package/dist/modules/ecommerce/api/storefront/categories/route.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/context/route.js +163 -0
- package/dist/modules/ecommerce/api/storefront/context/route.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/products/[idOrHandle]/route.js +87 -0
- package/dist/modules/ecommerce/api/storefront/products/[idOrHandle]/route.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/products/openapiSchemas.js +177 -0
- package/dist/modules/ecommerce/api/storefront/products/openapiSchemas.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/products/route.js +78 -0
- package/dist/modules/ecommerce/api/storefront/products/route.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/search/suggest/openapiSchemas.js +25 -0
- package/dist/modules/ecommerce/api/storefront/search/suggest/openapiSchemas.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/search/suggest/route.js +75 -0
- package/dist/modules/ecommerce/api/storefront/search/suggest/route.js.map +7 -0
- package/dist/modules/ecommerce/api/storefront/storefrontRouteSupport.js +58 -0
- package/dist/modules/ecommerce/api/storefront/storefrontRouteSupport.js.map +7 -0
- package/dist/modules/ecommerce/api/stores/[id]/branding/route.js +183 -0
- package/dist/modules/ecommerce/api/stores/[id]/branding/route.js.map +7 -0
- package/dist/modules/ecommerce/api/stores/[id]/preview-branding/route.js +92 -0
- package/dist/modules/ecommerce/api/stores/[id]/preview-branding/route.js.map +7 -0
- package/dist/modules/ecommerce/api/stores/crud.js +401 -0
- package/dist/modules/ecommerce/api/stores/crud.js.map +7 -0
- package/dist/modules/ecommerce/api/stores/route.js +64 -0
- package/dist/modules/ecommerce/api/stores/route.js.map +7 -0
- package/dist/modules/ecommerce/backend/config/ecommerce/[id]/page.js +9 -0
- package/dist/modules/ecommerce/backend/config/ecommerce/[id]/page.js.map +7 -0
- package/dist/modules/ecommerce/backend/config/ecommerce/[id]/page.meta.js +16 -0
- package/dist/modules/ecommerce/backend/config/ecommerce/[id]/page.meta.js.map +7 -0
- package/dist/modules/ecommerce/backend/config/ecommerce/page.js +9 -0
- package/dist/modules/ecommerce/backend/config/ecommerce/page.js.map +7 -0
- package/dist/modules/ecommerce/backend/config/ecommerce/page.meta.js +16 -0
- package/dist/modules/ecommerce/backend/config/ecommerce/page.meta.js.map +7 -0
- package/dist/modules/ecommerce/commands/stores.js +110 -0
- package/dist/modules/ecommerce/commands/stores.js.map +7 -0
- package/dist/modules/ecommerce/components/ChannelAssortmentCount.js +90 -0
- package/dist/modules/ecommerce/components/ChannelAssortmentCount.js.map +7 -0
- package/dist/modules/ecommerce/components/ChannelBindingFormSections.js +33 -0
- package/dist/modules/ecommerce/components/ChannelBindingFormSections.js.map +7 -0
- package/dist/modules/ecommerce/components/ChannelLookupPicker.js +11 -0
- package/dist/modules/ecommerce/components/ChannelLookupPicker.js.map +7 -0
- package/dist/modules/ecommerce/components/DomainStatusWarning.js +24 -0
- package/dist/modules/ecommerce/components/DomainStatusWarning.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreAvailabilityDefaultsSection.js +190 -0
- package/dist/modules/ecommerce/components/StoreAvailabilityDefaultsSection.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreBrandingControls.js +67 -0
- package/dist/modules/ecommerce/components/StoreBrandingControls.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreBrandingPreview.js +69 -0
- package/dist/modules/ecommerce/components/StoreBrandingPreview.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreBrandingTab.js +218 -0
- package/dist/modules/ecommerce/components/StoreBrandingTab.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreChannelBindingDialog.js +270 -0
- package/dist/modules/ecommerce/components/StoreChannelBindingDialog.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreChannelsTab.js +313 -0
- package/dist/modules/ecommerce/components/StoreChannelsTab.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreCreateDialog.js +164 -0
- package/dist/modules/ecommerce/components/StoreCreateDialog.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreDomainBindingDialog.js +162 -0
- package/dist/modules/ecommerce/components/StoreDomainBindingDialog.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreDomainsTab.js +357 -0
- package/dist/modules/ecommerce/components/StoreDomainsTab.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreEditPage.js +155 -0
- package/dist/modules/ecommerce/components/StoreEditPage.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreGeneralTab.js +167 -0
- package/dist/modules/ecommerce/components/StoreGeneralTab.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreListPage.js +290 -0
- package/dist/modules/ecommerce/components/StoreListPage.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreSeoTab.js +132 -0
- package/dist/modules/ecommerce/components/StoreSeoTab.js.map +7 -0
- package/dist/modules/ecommerce/components/StoreStatusBadge.js +20 -0
- package/dist/modules/ecommerce/components/StoreStatusBadge.js.map +7 -0
- package/dist/modules/ecommerce/components/channelLookups.js +28 -0
- package/dist/modules/ecommerce/components/channelLookups.js.map +7 -0
- package/dist/modules/ecommerce/components/storeAdmin.js +41 -0
- package/dist/modules/ecommerce/components/storeAdmin.js.map +7 -0
- package/dist/modules/ecommerce/components/storeBrandingForm.js +197 -0
- package/dist/modules/ecommerce/components/storeBrandingForm.js.map +7 -0
- package/dist/modules/ecommerce/components/storeChannels.js +140 -0
- package/dist/modules/ecommerce/components/storeChannels.js.map +7 -0
- package/dist/modules/ecommerce/components/storeDomains.js +167 -0
- package/dist/modules/ecommerce/components/storeDomains.js.map +7 -0
- package/dist/modules/ecommerce/components/storeEditTabs.js +62 -0
- package/dist/modules/ecommerce/components/storeEditTabs.js.map +7 -0
- package/dist/modules/ecommerce/components/storeGeneral.js +95 -0
- package/dist/modules/ecommerce/components/storeGeneral.js.map +7 -0
- package/dist/modules/ecommerce/components/storeSeo.js +69 -0
- package/dist/modules/ecommerce/components/storeSeo.js.map +7 -0
- package/dist/modules/ecommerce/components/useChannelAssortmentCount.js +45 -0
- package/dist/modules/ecommerce/components/useChannelAssortmentCount.js.map +7 -0
- package/dist/modules/ecommerce/components/useStoreAccess.js +28 -0
- package/dist/modules/ecommerce/components/useStoreAccess.js.map +7 -0
- package/dist/modules/ecommerce/data/enrichers.js +157 -0
- package/dist/modules/ecommerce/data/enrichers.js.map +7 -0
- package/dist/modules/ecommerce/data/entities.js +197 -0
- package/dist/modules/ecommerce/data/entities.js.map +7 -0
- package/dist/modules/ecommerce/data/validators.js +406 -0
- package/dist/modules/ecommerce/data/validators.js.map +7 -0
- package/dist/modules/ecommerce/di.js +11 -0
- package/dist/modules/ecommerce/di.js.map +7 -0
- package/dist/modules/ecommerce/events.js +27 -0
- package/dist/modules/ecommerce/events.js.map +7 -0
- package/dist/modules/ecommerce/index.js +16 -0
- package/dist/modules/ecommerce/index.js.map +7 -0
- package/dist/modules/ecommerce/lib/assortmentCount.js +112 -0
- package/dist/modules/ecommerce/lib/assortmentCount.js.map +7 -0
- package/dist/modules/ecommerce/lib/brandingStyles.js +184 -0
- package/dist/modules/ecommerce/lib/brandingStyles.js.map +7 -0
- package/dist/modules/ecommerce/lib/buyerContext.js +284 -0
- package/dist/modules/ecommerce/lib/buyerContext.js.map +7 -0
- package/dist/modules/ecommerce/lib/cacheInvalidation.js +186 -0
- package/dist/modules/ecommerce/lib/cacheInvalidation.js.map +7 -0
- package/dist/modules/ecommerce/lib/cacheKeys.js +236 -0
- package/dist/modules/ecommerce/lib/cacheKeys.js.map +7 -0
- package/dist/modules/ecommerce/lib/createConflictRecheck.js +29 -0
- package/dist/modules/ecommerce/lib/createConflictRecheck.js.map +7 -0
- package/dist/modules/ecommerce/lib/crudEvents.js +94 -0
- package/dist/modules/ecommerce/lib/crudEvents.js.map +7 -0
- package/dist/modules/ecommerce/lib/crudSupport.js +64 -0
- package/dist/modules/ecommerce/lib/crudSupport.js.map +7 -0
- package/dist/modules/ecommerce/lib/domainBindingRebind.js +99 -0
- package/dist/modules/ecommerce/lib/domainBindingRebind.js.map +7 -0
- package/dist/modules/ecommerce/lib/domainMappingSummaries.js +39 -0
- package/dist/modules/ecommerce/lib/domainMappingSummaries.js.map +7 -0
- package/dist/modules/ecommerce/lib/exclusiveFlag.js +57 -0
- package/dist/modules/ecommerce/lib/exclusiveFlag.js.map +7 -0
- package/dist/modules/ecommerce/lib/references.js +70 -0
- package/dist/modules/ecommerce/lib/references.js.map +7 -0
- package/dist/modules/ecommerce/lib/seedDraftStore.js +99 -0
- package/dist/modules/ecommerce/lib/seedDraftStore.js.map +7 -0
- package/dist/modules/ecommerce/lib/storeBindingCascade.js +109 -0
- package/dist/modules/ecommerce/lib/storeBindingCascade.js.map +7 -0
- package/dist/modules/ecommerce/lib/storeBranding.js +40 -0
- package/dist/modules/ecommerce/lib/storeBranding.js.map +7 -0
- package/dist/modules/ecommerce/lib/storeBrandingRoute.js +76 -0
- package/dist/modules/ecommerce/lib/storeBrandingRoute.js.map +7 -0
- package/dist/modules/ecommerce/lib/storeContext.js +393 -0
- package/dist/modules/ecommerce/lib/storeContext.js.map +7 -0
- package/dist/modules/ecommerce/lib/storeContextService.js +43 -0
- package/dist/modules/ecommerce/lib/storeContextService.js.map +7 -0
- package/dist/modules/ecommerce/lib/storeLocale.js +60 -0
- package/dist/modules/ecommerce/lib/storeLocale.js.map +7 -0
- package/dist/modules/ecommerce/lib/storeNotifications.js +41 -0
- package/dist/modules/ecommerce/lib/storeNotifications.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontCatalogSupport.js +248 -0
- package/dist/modules/ecommerce/lib/storefrontCatalogSupport.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontCategories.js +241 -0
- package/dist/modules/ecommerce/lib/storefrontCategories.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontCategoryCache.js +71 -0
- package/dist/modules/ecommerce/lib/storefrontCategoryCache.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontDetail.js +447 -0
- package/dist/modules/ecommerce/lib/storefrontDetail.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontFacets.js +441 -0
- package/dist/modules/ecommerce/lib/storefrontFacets.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontOptionFilter.js +15 -0
- package/dist/modules/ecommerce/lib/storefrontOptionFilter.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontPricing.js +393 -0
- package/dist/modules/ecommerce/lib/storefrontPricing.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontProductCache.js +90 -0
- package/dist/modules/ecommerce/lib/storefrontProductCache.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontProductScope.js +107 -0
- package/dist/modules/ecommerce/lib/storefrontProductScope.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontProducts.js +670 -0
- package/dist/modules/ecommerce/lib/storefrontProducts.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontQuery.js +156 -0
- package/dist/modules/ecommerce/lib/storefrontQuery.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontRateLimit.js +99 -0
- package/dist/modules/ecommerce/lib/storefrontRateLimit.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontSearch.js +303 -0
- package/dist/modules/ecommerce/lib/storefrontSearch.js.map +7 -0
- package/dist/modules/ecommerce/lib/storefrontSearchCache.js +35 -0
- package/dist/modules/ecommerce/lib/storefrontSearchCache.js.map +7 -0
- package/dist/modules/ecommerce/lib/subscriberSupport.js +33 -0
- package/dist/modules/ecommerce/lib/subscriberSupport.js.map +7 -0
- package/dist/modules/ecommerce/lib/types.js +1 -0
- package/dist/modules/ecommerce/lib/types.js.map +7 -0
- package/dist/modules/ecommerce/migrations/Migration20261005113233_ecommerce.js +32 -0
- package/dist/modules/ecommerce/migrations/Migration20261005113233_ecommerce.js.map +7 -0
- package/dist/modules/ecommerce/migrations/Migration20261006112733_ecommerce.js +17 -0
- package/dist/modules/ecommerce/migrations/Migration20261006112733_ecommerce.js.map +7 -0
- package/dist/modules/ecommerce/notifications.client.js +47 -0
- package/dist/modules/ecommerce/notifications.client.js.map +7 -0
- package/dist/modules/ecommerce/notifications.js +48 -0
- package/dist/modules/ecommerce/notifications.js.map +7 -0
- package/dist/modules/ecommerce/search.js +83 -0
- package/dist/modules/ecommerce/search.js.map +7 -0
- package/dist/modules/ecommerce/setup.js +17 -0
- package/dist/modules/ecommerce/setup.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/assortment-empty-notifications.js +14 -0
- package/dist/modules/ecommerce/subscribers/assortment-empty-notifications.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/availability-policy-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/availability-policy-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/catalog-category-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/catalog-category-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/catalog-price-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/catalog-price-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/catalog-product-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/catalog-product-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/catalog-variant-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/catalog-variant-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/customer-group-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/customer-group-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/customer-group-membership-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/customer-group-membership-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/customer-group-terms-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/customer-group-terms-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/customer-user-deleted-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/customer-user-deleted-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/customer-user-updated-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/customer-user-updated-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/domain-binding-rebind.js +16 -0
- package/dist/modules/ecommerce/subscribers/domain-binding-rebind.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/domain-mapping-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/domain-mapping-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/store-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/store-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/store-channel-binding-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/store-channel-binding-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/store-domain-binding-cache-invalidation.js +14 -0
- package/dist/modules/ecommerce/subscribers/store-domain-binding-cache-invalidation.js.map +7 -0
- package/dist/modules/ecommerce/subscribers/store-notifications.js +14 -0
- package/dist/modules/ecommerce/subscribers/store-notifications.js.map +7 -0
- package/dist/modules/query_index/lib/batch.js +23 -9
- package/dist/modules/query_index/lib/batch.js.map +2 -2
- package/dist/modules/query_index/lib/doc-enrichers.js +212 -0
- package/dist/modules/query_index/lib/doc-enrichers.js.map +7 -0
- package/dist/modules/query_index/lib/document.js +2 -0
- package/dist/modules/query_index/lib/document.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +68 -1
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/lib/indexer.js +7 -0
- package/dist/modules/query_index/lib/indexer.js.map +2 -2
- package/dist/modules/query_index/lib/search-tokens.js +2 -0
- package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
- package/dist/modules/query_index/migrations/Migration20261005201500_query_index.js +17 -0
- package/dist/modules/query_index/migrations/Migration20261005201500_query_index.js.map +7 -0
- package/dist/modules/translations/components/TranslationManager.js +3 -3
- package/dist/modules/translations/components/TranslationManager.js.map +2 -2
- package/dist/modules/translations/data/validators.js +1 -1
- package/dist/modules/translations/data/validators.js.map +1 -1
- package/dist/modules/translations/lib/batch.js +21 -1
- package/dist/modules/translations/lib/batch.js.map +2 -2
- package/dist/modules/translations/lib/helpers.js +3 -0
- package/dist/modules/translations/lib/helpers.js.map +2 -2
- package/dist/modules/translations/lib/resolve-field-list.js +14 -2
- package/dist/modules/translations/lib/resolve-field-list.js.map +2 -2
- package/generated/entities/catalog_price_history_entry/index.ts +25 -0
- package/generated/entities/customer_group_terms/index.ts +1 -0
- package/generated/entities/ecommerce_store/index.ts +15 -0
- package/generated/entities/ecommerce_store_channel_binding/index.ts +13 -0
- package/generated/entities/ecommerce_store_domain_binding/index.ts +10 -0
- package/generated/entities.ids.generated.ts +8 -1
- package/generated/entity-fields-registry.ts +72 -0
- package/package.json +7 -7
- package/src/helpers/integration/customerGroupsFixtures.ts +2 -0
- package/src/modules/auth/i18n/de.json +8 -0
- package/src/modules/auth/i18n/en.json +8 -0
- package/src/modules/auth/i18n/es.json +8 -0
- package/src/modules/auth/i18n/ko.json +8 -0
- package/src/modules/auth/i18n/pl.json +8 -0
- package/src/modules/catalog/AGENTS.md +5 -2
- package/src/modules/catalog/acl.ts +7 -0
- package/src/modules/catalog/api/config/omnibus/route.ts +204 -0
- package/src/modules/catalog/api/prices/history/route.ts +139 -0
- package/src/modules/catalog/api/prices/omnibus-preview/route.ts +202 -0
- package/src/modules/catalog/api/products/route.ts +53 -308
- package/src/modules/catalog/api/tags/route.ts +6 -0
- package/src/modules/catalog/backend/config/catalog/page.tsx +2 -0
- package/src/modules/catalog/cli.ts +84 -1
- package/src/modules/catalog/commands/categories.ts +54 -2
- package/src/modules/catalog/commands/prices.ts +43 -1
- package/src/modules/catalog/commands/products.ts +84 -1
- package/src/modules/catalog/commands/variants.ts +7 -0
- package/src/modules/catalog/components/OmnibusSettings.tsx +832 -0
- package/src/modules/catalog/components/PriceEditorOmnibusRow.tsx +219 -0
- package/src/modules/catalog/components/lookupSources.ts +29 -0
- package/src/modules/catalog/components/prices/PriceScopeSelectors.tsx +9 -0
- package/src/modules/catalog/components/products/VariantBuilder.tsx +9 -0
- package/src/modules/catalog/data/entities.ts +123 -1
- package/src/modules/catalog/data/validators.ts +118 -0
- package/src/modules/catalog/di.ts +23 -0
- package/src/modules/catalog/i18n/de.json +77 -0
- package/src/modules/catalog/i18n/en.json +77 -0
- package/src/modules/catalog/i18n/es.json +77 -0
- package/src/modules/catalog/i18n/ko.json +77 -0
- package/src/modules/catalog/i18n/pl.json +77 -0
- package/src/modules/catalog/lib/omnibus.ts +406 -0
- package/src/modules/catalog/lib/omnibusBackfill.ts +198 -0
- package/src/modules/catalog/lib/omnibusCache.ts +111 -0
- package/src/modules/catalog/lib/omnibusConfig.ts +73 -0
- package/src/modules/catalog/lib/omnibusHistoryQueries.ts +248 -0
- package/src/modules/catalog/lib/omnibusPresentedEntry.ts +76 -0
- package/src/modules/catalog/lib/omnibusProductListEnrichment.ts +125 -0
- package/src/modules/catalog/lib/omnibusTypes.ts +202 -0
- package/src/modules/catalog/lib/optionSchemaTranslations.ts +55 -0
- package/src/modules/catalog/lib/priceHistoryQuery.ts +155 -0
- package/src/modules/catalog/lib/pricing.ts +42 -4
- package/src/modules/catalog/lib/productFilters.ts +349 -0
- package/src/modules/catalog/lib/productScopeKeys.ts +162 -0
- package/src/modules/catalog/lib/productScopeReindex.ts +139 -0
- package/src/modules/catalog/migrations/.snapshot-open-mercato.json +572 -0
- package/src/modules/catalog/migrations/Migration20261005105352_catalog.ts +39 -0
- package/src/modules/catalog/migrations/Migration20261005150824_catalog.ts +39 -0
- package/src/modules/catalog/services/catalogOmnibusService.ts +642 -0
- package/src/modules/catalog/setup.ts +2 -0
- package/src/modules/catalog/subscribers/product-scope-keys-category-deleted.ts +18 -0
- package/src/modules/catalog/subscribers/product-scope-keys-category-updated.ts +19 -0
- package/src/modules/catalog/translations.ts +12 -0
- package/src/modules/configs/i18n/de.json +5 -1
- package/src/modules/configs/i18n/en.json +5 -1
- package/src/modules/configs/i18n/es.json +5 -1
- package/src/modules/configs/i18n/ko.json +5 -1
- package/src/modules/configs/i18n/pl.json +5 -1
- package/src/modules/configs/lib/upgrade-actions.ts +35 -0
- package/src/modules/customer_groups/api/customer-groups/[id]/terms/route.ts +7 -0
- package/src/modules/customer_groups/components/CustomerGroupTermsSection.tsx +124 -2
- package/src/modules/customer_groups/components/customerGroupAssortmentScope.ts +46 -0
- package/src/modules/customer_groups/data/entities.ts +4 -0
- package/src/modules/customer_groups/data/validators.ts +14 -0
- package/src/modules/customer_groups/i18n/de.json +12 -0
- package/src/modules/customer_groups/i18n/en.json +12 -0
- package/src/modules/customer_groups/i18n/es.json +12 -0
- package/src/modules/customer_groups/i18n/ko.json +12 -0
- package/src/modules/customer_groups/i18n/pl.json +12 -0
- package/src/modules/customer_groups/migrations/.snapshot-open-mercato.json +17 -0
- package/src/modules/customer_groups/migrations/Migration20261005110250_customer_groups.ts +15 -0
- package/src/modules/customer_groups/services/customerGroupsService.ts +74 -23
- package/src/modules/ecommerce/acl.ts +9 -0
- package/src/modules/ecommerce/api/domain-mappings/route.ts +76 -0
- package/src/modules/ecommerce/api/openapi.ts +28 -0
- package/src/modules/ecommerce/api/store-channel-bindings/[id]/assortment-count/route.ts +141 -0
- package/src/modules/ecommerce/api/store-channel-bindings/crud.ts +283 -0
- package/src/modules/ecommerce/api/store-channel-bindings/route.ts +67 -0
- package/src/modules/ecommerce/api/store-domain-bindings/crud.ts +324 -0
- package/src/modules/ecommerce/api/store-domain-bindings/route.ts +73 -0
- package/src/modules/ecommerce/api/storefront/categories/[slug]/route.ts +94 -0
- package/src/modules/ecommerce/api/storefront/categories/openapiSchemas.ts +63 -0
- package/src/modules/ecommerce/api/storefront/categories/route.ts +78 -0
- package/src/modules/ecommerce/api/storefront/context/route.ts +203 -0
- package/src/modules/ecommerce/api/storefront/products/[idOrHandle]/route.ts +94 -0
- package/src/modules/ecommerce/api/storefront/products/openapiSchemas.ts +193 -0
- package/src/modules/ecommerce/api/storefront/products/route.ts +81 -0
- package/src/modules/ecommerce/api/storefront/search/suggest/openapiSchemas.ts +25 -0
- package/src/modules/ecommerce/api/storefront/search/suggest/route.ts +78 -0
- package/src/modules/ecommerce/api/storefront/storefrontRouteSupport.ts +68 -0
- package/src/modules/ecommerce/api/stores/[id]/branding/route.ts +205 -0
- package/src/modules/ecommerce/api/stores/[id]/preview-branding/route.ts +99 -0
- package/src/modules/ecommerce/api/stores/crud.ts +457 -0
- package/src/modules/ecommerce/api/stores/route.ts +66 -0
- package/src/modules/ecommerce/backend/config/ecommerce/[id]/page.meta.ts +12 -0
- package/src/modules/ecommerce/backend/config/ecommerce/[id]/page.tsx +5 -0
- package/src/modules/ecommerce/backend/config/ecommerce/page.meta.ts +12 -0
- package/src/modules/ecommerce/backend/config/ecommerce/page.tsx +5 -0
- package/src/modules/ecommerce/commands/stores.ts +154 -0
- package/src/modules/ecommerce/components/ChannelAssortmentCount.tsx +138 -0
- package/src/modules/ecommerce/components/ChannelBindingFormSections.tsx +40 -0
- package/src/modules/ecommerce/components/ChannelLookupPicker.tsx +5 -0
- package/src/modules/ecommerce/components/DomainStatusWarning.tsx +32 -0
- package/src/modules/ecommerce/components/StoreAvailabilityDefaultsSection.tsx +219 -0
- package/src/modules/ecommerce/components/StoreBrandingControls.tsx +73 -0
- package/src/modules/ecommerce/components/StoreBrandingPreview.tsx +77 -0
- package/src/modules/ecommerce/components/StoreBrandingTab.tsx +242 -0
- package/src/modules/ecommerce/components/StoreChannelBindingDialog.tsx +306 -0
- package/src/modules/ecommerce/components/StoreChannelsTab.tsx +375 -0
- package/src/modules/ecommerce/components/StoreCreateDialog.tsx +204 -0
- package/src/modules/ecommerce/components/StoreDomainBindingDialog.tsx +198 -0
- package/src/modules/ecommerce/components/StoreDomainsTab.tsx +426 -0
- package/src/modules/ecommerce/components/StoreEditPage.tsx +193 -0
- package/src/modules/ecommerce/components/StoreGeneralTab.tsx +189 -0
- package/src/modules/ecommerce/components/StoreListPage.tsx +326 -0
- package/src/modules/ecommerce/components/StoreSeoTab.tsx +152 -0
- package/src/modules/ecommerce/components/StoreStatusBadge.tsx +22 -0
- package/src/modules/ecommerce/components/channelLookups.ts +24 -0
- package/src/modules/ecommerce/components/storeAdmin.ts +56 -0
- package/src/modules/ecommerce/components/storeBrandingForm.ts +230 -0
- package/src/modules/ecommerce/components/storeChannels.ts +210 -0
- package/src/modules/ecommerce/components/storeDomains.ts +221 -0
- package/src/modules/ecommerce/components/storeEditTabs.tsx +76 -0
- package/src/modules/ecommerce/components/storeGeneral.ts +155 -0
- package/src/modules/ecommerce/components/storeSeo.ts +78 -0
- package/src/modules/ecommerce/components/useChannelAssortmentCount.ts +67 -0
- package/src/modules/ecommerce/components/useStoreAccess.ts +36 -0
- package/src/modules/ecommerce/data/enrichers.ts +213 -0
- package/src/modules/ecommerce/data/entities.ts +168 -0
- package/src/modules/ecommerce/data/validators.ts +587 -0
- package/src/modules/ecommerce/di.ts +9 -0
- package/src/modules/ecommerce/events.ts +27 -0
- package/src/modules/ecommerce/i18n/de.json +341 -0
- package/src/modules/ecommerce/i18n/en.json +341 -0
- package/src/modules/ecommerce/i18n/es.json +341 -0
- package/src/modules/ecommerce/i18n/ko.json +341 -0
- package/src/modules/ecommerce/i18n/pl.json +341 -0
- package/src/modules/ecommerce/index.ts +14 -0
- package/src/modules/ecommerce/lib/assortmentCount.ts +175 -0
- package/src/modules/ecommerce/lib/brandingStyles.ts +215 -0
- package/src/modules/ecommerce/lib/buyerContext.ts +401 -0
- package/src/modules/ecommerce/lib/cacheInvalidation.ts +302 -0
- package/src/modules/ecommerce/lib/cacheKeys.ts +340 -0
- package/src/modules/ecommerce/lib/createConflictRecheck.ts +31 -0
- package/src/modules/ecommerce/lib/crudEvents.ts +128 -0
- package/src/modules/ecommerce/lib/crudSupport.ts +85 -0
- package/src/modules/ecommerce/lib/domainBindingRebind.ts +138 -0
- package/src/modules/ecommerce/lib/domainMappingSummaries.ts +71 -0
- package/src/modules/ecommerce/lib/exclusiveFlag.ts +90 -0
- package/src/modules/ecommerce/lib/references.ts +93 -0
- package/src/modules/ecommerce/lib/seedDraftStore.ts +125 -0
- package/src/modules/ecommerce/lib/storeBindingCascade.ts +138 -0
- package/src/modules/ecommerce/lib/storeBranding.ts +48 -0
- package/src/modules/ecommerce/lib/storeBrandingRoute.ts +91 -0
- package/src/modules/ecommerce/lib/storeContext.ts +669 -0
- package/src/modules/ecommerce/lib/storeContextService.ts +71 -0
- package/src/modules/ecommerce/lib/storeLocale.ts +88 -0
- package/src/modules/ecommerce/lib/storeNotifications.ts +55 -0
- package/src/modules/ecommerce/lib/storefrontCatalogSupport.ts +427 -0
- package/src/modules/ecommerce/lib/storefrontCategories.ts +419 -0
- package/src/modules/ecommerce/lib/storefrontCategoryCache.ts +113 -0
- package/src/modules/ecommerce/lib/storefrontDetail.ts +654 -0
- package/src/modules/ecommerce/lib/storefrontFacets.ts +697 -0
- package/src/modules/ecommerce/lib/storefrontOptionFilter.ts +44 -0
- package/src/modules/ecommerce/lib/storefrontPricing.ts +583 -0
- package/src/modules/ecommerce/lib/storefrontProductCache.ts +126 -0
- package/src/modules/ecommerce/lib/storefrontProductScope.ts +181 -0
- package/src/modules/ecommerce/lib/storefrontProducts.ts +963 -0
- package/src/modules/ecommerce/lib/storefrontQuery.ts +215 -0
- package/src/modules/ecommerce/lib/storefrontRateLimit.ts +126 -0
- package/src/modules/ecommerce/lib/storefrontSearch.ts +454 -0
- package/src/modules/ecommerce/lib/storefrontSearchCache.ts +49 -0
- package/src/modules/ecommerce/lib/subscriberSupport.ts +41 -0
- package/src/modules/ecommerce/lib/types.ts +69 -0
- package/src/modules/ecommerce/migrations/.snapshot-open-mercato.json +829 -0
- package/src/modules/ecommerce/migrations/Migration20261005113233_ecommerce.ts +32 -0
- package/src/modules/ecommerce/migrations/Migration20261006112733_ecommerce.ts +15 -0
- package/src/modules/ecommerce/notifications.client.ts +46 -0
- package/src/modules/ecommerce/notifications.ts +46 -0
- package/src/modules/ecommerce/search.ts +93 -0
- package/src/modules/ecommerce/setup.ts +15 -0
- package/src/modules/ecommerce/subscribers/assortment-empty-notifications.ts +12 -0
- package/src/modules/ecommerce/subscribers/availability-policy-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/catalog-category-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/catalog-price-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/catalog-product-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/catalog-variant-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/customer-group-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/customer-group-membership-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/customer-group-terms-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/customer-user-deleted-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/customer-user-updated-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/domain-binding-rebind.ts +14 -0
- package/src/modules/ecommerce/subscribers/domain-mapping-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/store-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/store-channel-binding-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/store-domain-binding-cache-invalidation.ts +12 -0
- package/src/modules/ecommerce/subscribers/store-notifications.ts +12 -0
- package/src/modules/query_index/lib/batch.ts +25 -9
- package/src/modules/query_index/lib/doc-enrichers.ts +306 -0
- package/src/modules/query_index/lib/document.ts +2 -0
- package/src/modules/query_index/lib/engine.ts +58 -1
- package/src/modules/query_index/lib/indexer.ts +8 -0
- package/src/modules/query_index/lib/search-tokens.ts +2 -0
- package/src/modules/query_index/migrations/Migration20261005201500_query_index.ts +42 -0
- package/src/modules/translations/components/TranslationManager.tsx +3 -3
- package/src/modules/translations/data/validators.ts +1 -1
- package/src/modules/translations/lib/batch.ts +47 -0
- package/src/modules/translations/lib/helpers.ts +4 -0
- package/src/modules/translations/lib/resolve-field-list.ts +16 -2
|
@@ -62,6 +62,7 @@ const MAX_ANCESTOR_DEPTH = CUSTOMER_GROUP_MAX_ANCESTOR_DEPTH
|
|
|
62
62
|
// tenant/organization scoping").
|
|
63
63
|
export type ResolveGroupsInput = {
|
|
64
64
|
customerId: string | null
|
|
65
|
+
customerIds?: string[]
|
|
65
66
|
tenantId: string
|
|
66
67
|
at?: Date
|
|
67
68
|
}
|
|
@@ -73,6 +74,7 @@ export type ResolveGroupsInput = {
|
|
|
73
74
|
// since `resolveGroups` never returns those.
|
|
74
75
|
export type ResolveTermsInput = {
|
|
75
76
|
customerId: string | null
|
|
77
|
+
customerIds?: string[]
|
|
76
78
|
tenantId: string
|
|
77
79
|
at?: Date
|
|
78
80
|
groupIds?: string[]
|
|
@@ -100,14 +102,22 @@ export interface CustomerGroupsService {
|
|
|
100
102
|
resolveAssortmentScope(input: ResolveAssortmentScopeInput): Promise<ResolvedAssortmentScope>
|
|
101
103
|
}
|
|
102
104
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
105
|
+
const AUTHORED_ASSORTMENT_SCOPE_KEYS = [
|
|
106
|
+
'categoryIds',
|
|
107
|
+
'tagIds',
|
|
108
|
+
'excludeProductIds',
|
|
109
|
+
'excludeCategoryIds',
|
|
110
|
+
'excludeTagIds',
|
|
111
|
+
] as const
|
|
112
|
+
|
|
113
|
+
export function normalizeAuthoredAssortmentScope(scope: AssortmentScope | null | undefined): AssortmentScope | null {
|
|
114
|
+
if (!scope) return null
|
|
115
|
+
const normalized: AssortmentScope = {}
|
|
116
|
+
for (const key of AUTHORED_ASSORTMENT_SCOPE_KEYS) {
|
|
117
|
+
const ids = scope[key]
|
|
118
|
+
if (Array.isArray(ids) && ids.length > 0) normalized[key] = ids
|
|
119
|
+
}
|
|
120
|
+
return Object.keys(normalized).length > 0 ? normalized : null
|
|
111
121
|
}
|
|
112
122
|
|
|
113
123
|
async function loadGroupCached(
|
|
@@ -149,6 +159,26 @@ export async function loadCustomerGroupAncestorChain(
|
|
|
149
159
|
return chain
|
|
150
160
|
}
|
|
151
161
|
|
|
162
|
+
export function resolveEffectiveCustomerIds(input: Pick<ResolveGroupsInput, 'customerId' | 'customerIds'>): string[] {
|
|
163
|
+
const distinctIds: string[] = []
|
|
164
|
+
for (const customerId of input.customerIds ?? []) {
|
|
165
|
+
if (typeof customerId !== 'string' || !customerId.length) continue
|
|
166
|
+
if (!distinctIds.includes(customerId)) distinctIds.push(customerId)
|
|
167
|
+
}
|
|
168
|
+
if (distinctIds.length) return distinctIds
|
|
169
|
+
return input.customerId == null ? [] : [input.customerId]
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
type RankedMembership = {
|
|
173
|
+
membership: CustomerGroupMembership
|
|
174
|
+
customerIndex: number
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function compareRankedMemberships(left: RankedMembership, right: RankedMembership): number {
|
|
178
|
+
if (left.customerIndex !== right.customerIndex) return left.customerIndex - right.customerIndex
|
|
179
|
+
return right.membership.createdAt.getTime() - left.membership.createdAt.getTime()
|
|
180
|
+
}
|
|
181
|
+
|
|
152
182
|
function toGroupSummary(group: CustomerGroup): GroupResolution['groups'][number] {
|
|
153
183
|
return { id: group.id, code: group.code, name: group.name, kind: group.kind, priority: group.priority }
|
|
154
184
|
}
|
|
@@ -236,30 +266,36 @@ export class DefaultCustomerGroupsService implements CustomerGroupsService {
|
|
|
236
266
|
|
|
237
267
|
async resolveGroups(input: ResolveGroupsInput): Promise<GroupResolution> {
|
|
238
268
|
const at = input.at ?? new Date()
|
|
269
|
+
const customerIds = resolveEffectiveCustomerIds(input)
|
|
239
270
|
|
|
240
|
-
if (
|
|
271
|
+
if (!customerIds.length) return this.resolveDefaultGroup(input.tenantId)
|
|
241
272
|
|
|
242
273
|
const memberships = await this.em.find(CustomerGroupMembership, {
|
|
243
274
|
tenantId: input.tenantId,
|
|
244
|
-
customerId:
|
|
275
|
+
customerId: customerIds.length === 1 ? customerIds[0] : { $in: customerIds },
|
|
245
276
|
deletedAt: null,
|
|
246
277
|
})
|
|
247
278
|
|
|
248
279
|
const validMemberships = memberships.filter((membership) => isMembershipValidAt(membership, at))
|
|
249
280
|
if (!validMemberships.length) return this.resolveDefaultGroup(input.tenantId)
|
|
250
281
|
|
|
251
|
-
// Precedence rule
|
|
252
|
-
//
|
|
253
|
-
// one
|
|
254
|
-
const
|
|
282
|
+
// Precedence rule (spec §6.0): one membership represents each group — the one of
|
|
283
|
+
// the earliest buyer identity (person before company), then the most recently
|
|
284
|
+
// created one (e.g. re-added after a prior removal).
|
|
285
|
+
const bestMembershipByGroupId = new Map<string, RankedMembership>()
|
|
255
286
|
for (const membership of validMemberships) {
|
|
256
|
-
const
|
|
257
|
-
|
|
258
|
-
|
|
287
|
+
const customerIndex = customerIds.indexOf(membership.customerId)
|
|
288
|
+
const candidate: RankedMembership = {
|
|
289
|
+
membership,
|
|
290
|
+
customerIndex: customerIndex === -1 ? customerIds.length : customerIndex,
|
|
291
|
+
}
|
|
292
|
+
const existing = bestMembershipByGroupId.get(membership.groupId)
|
|
293
|
+
if (!existing || compareRankedMemberships(candidate, existing) < 0) {
|
|
294
|
+
bestMembershipByGroupId.set(membership.groupId, candidate)
|
|
259
295
|
}
|
|
260
296
|
}
|
|
261
297
|
|
|
262
|
-
const groupIds = Array.from(
|
|
298
|
+
const groupIds = Array.from(bestMembershipByGroupId.keys())
|
|
263
299
|
const groups = await this.em.find(CustomerGroup, {
|
|
264
300
|
id: { $in: groupIds },
|
|
265
301
|
tenantId: input.tenantId,
|
|
@@ -269,9 +305,7 @@ export class DefaultCustomerGroupsService implements CustomerGroupsService {
|
|
|
269
305
|
|
|
270
306
|
const sortedGroups = groups.slice().sort((a, b) => {
|
|
271
307
|
if (b.priority !== a.priority) return b.priority - a.priority
|
|
272
|
-
|
|
273
|
-
const membershipB = latestMembershipByGroupId.get(b.id)!
|
|
274
|
-
return membershipB.createdAt.getTime() - membershipA.createdAt.getTime()
|
|
308
|
+
return compareRankedMemberships(bestMembershipByGroupId.get(a.id)!, bestMembershipByGroupId.get(b.id)!)
|
|
275
309
|
})
|
|
276
310
|
|
|
277
311
|
if (!sortedGroups.length) return this.resolveDefaultGroup(input.tenantId)
|
|
@@ -296,7 +330,12 @@ export class DefaultCustomerGroupsService implements CustomerGroupsService {
|
|
|
296
330
|
async resolveTerms(input: ResolveTermsInput): Promise<ResolvedTerms> {
|
|
297
331
|
const groupIds = input.groupIds
|
|
298
332
|
?? (
|
|
299
|
-
await this.resolveGroups({
|
|
333
|
+
await this.resolveGroups({
|
|
334
|
+
customerId: input.customerId,
|
|
335
|
+
customerIds: input.customerIds,
|
|
336
|
+
tenantId: input.tenantId,
|
|
337
|
+
at: input.at,
|
|
338
|
+
})
|
|
300
339
|
).groupIds
|
|
301
340
|
|
|
302
341
|
if (!groupIds.length) return tenantDefaultTerms()
|
|
@@ -337,7 +376,19 @@ export class DefaultCustomerGroupsService implements CustomerGroupsService {
|
|
|
337
376
|
|
|
338
377
|
async resolveAssortmentScope(input: ResolveAssortmentScopeInput): Promise<ResolvedAssortmentScope> {
|
|
339
378
|
const { groupIds } = await this.resolveGroups(input)
|
|
340
|
-
const
|
|
379
|
+
const termsRows = groupIds.length
|
|
380
|
+
? await this.em.find(CustomerGroupTerms, {
|
|
381
|
+
groupId: { $in: groupIds },
|
|
382
|
+
tenantId: input.tenantId,
|
|
383
|
+
deletedAt: null,
|
|
384
|
+
})
|
|
385
|
+
: []
|
|
386
|
+
const ownScopeByGroupId = new Map<string, AssortmentScope | null>()
|
|
387
|
+
for (const terms of termsRows) {
|
|
388
|
+
ownScopeByGroupId.set(terms.groupId, normalizeAuthoredAssortmentScope(terms.assortmentScope))
|
|
389
|
+
}
|
|
390
|
+
const groupOwnScopes = groupIds.map((groupId) => ownScopeByGroupId.get(groupId) ?? null)
|
|
391
|
+
const scope = unionScopes(groupOwnScopes)
|
|
341
392
|
return { scope, sourceGroupIds: groupIds, sourceCustomerOverrideId: null }
|
|
342
393
|
}
|
|
343
394
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const features = [
|
|
2
|
+
{ id: 'ecommerce.stores.view', title: 'View stores', module: 'ecommerce' },
|
|
3
|
+
{ id: 'ecommerce.stores.manage', title: 'Manage stores', module: 'ecommerce', dependsOn: ['ecommerce.stores.view'] },
|
|
4
|
+
{ id: 'ecommerce.branding.manage', title: 'Manage store branding', module: 'ecommerce', dependsOn: ['ecommerce.stores.view'] },
|
|
5
|
+
{ id: 'ecommerce.domains.manage', title: 'Manage store domain bindings', module: 'ecommerce', dependsOn: ['ecommerce.stores.view'] },
|
|
6
|
+
{ id: 'ecommerce.channels.manage', title: 'Manage store channel bindings', module: 'ecommerce', dependsOn: ['ecommerce.stores.view'] },
|
|
7
|
+
]
|
|
8
|
+
|
|
9
|
+
export default features
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server'
|
|
2
|
+
import { z } from 'zod'
|
|
3
|
+
import { isCrudHttpError } from '@open-mercato/shared/lib/crud/errors'
|
|
4
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
5
|
+
import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
6
|
+
import { loadOrganizationDomainMappings } from '../../lib/domainMappingSummaries'
|
|
7
|
+
import { resolveBrandingRouteContext } from '../../lib/storeBrandingRoute'
|
|
8
|
+
import { ecommerceInternalErrorBody, translateEcommerceError } from '../../lib/crudSupport'
|
|
9
|
+
|
|
10
|
+
export const metadata = {
|
|
11
|
+
GET: { requireAuth: true, requireFeatures: ['ecommerce.stores.view'] },
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const logger = createLogger('ecommerce').child({ component: 'domain-mappings-route' })
|
|
15
|
+
|
|
16
|
+
export async function GET(req: Request) {
|
|
17
|
+
try {
|
|
18
|
+
const context = await resolveBrandingRouteContext(req)
|
|
19
|
+
const mappings = await loadOrganizationDomainMappings(context.container, {
|
|
20
|
+
organizationId: context.organizationId,
|
|
21
|
+
tenantId: context.tenantId,
|
|
22
|
+
})
|
|
23
|
+
if (!mappings) {
|
|
24
|
+
const error = await translateEcommerceError(
|
|
25
|
+
'ecommerce.errors.domainMappingsUnavailable',
|
|
26
|
+
'Domains are unavailable right now. Try again later.',
|
|
27
|
+
)
|
|
28
|
+
return NextResponse.json({ error }, { status: 503 })
|
|
29
|
+
}
|
|
30
|
+
const items = [...mappings].sort((left, right) => left.hostname.localeCompare(right.hostname))
|
|
31
|
+
return NextResponse.json({ items, total: items.length }, { headers: { 'Cache-Control': 'no-store' } })
|
|
32
|
+
} catch (err) {
|
|
33
|
+
if (isCrudHttpError(err)) return NextResponse.json(err.body, { status: err.status })
|
|
34
|
+
logger.error('ecommerce.domain-mappings.GET failed', { err })
|
|
35
|
+
return NextResponse.json(await ecommerceInternalErrorBody(), { status: 500 })
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const domainMappingItemSchema = z.object({
|
|
40
|
+
id: z.string().uuid(),
|
|
41
|
+
hostname: z.string(),
|
|
42
|
+
status: z
|
|
43
|
+
.string()
|
|
44
|
+
.describe('customer_accounts domain status: pending, verified, active, dns_failed or tls_failed. Only active serves.'),
|
|
45
|
+
lastDnsCheckAt: z.string().nullable(),
|
|
46
|
+
dnsFailureReason: z.string().nullable(),
|
|
47
|
+
tlsFailureReason: z.string().nullable(),
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
const errorSchema = z.object({ error: z.string() }).passthrough()
|
|
51
|
+
|
|
52
|
+
export const openApi: OpenApiRouteDoc = {
|
|
53
|
+
tag: 'Ecommerce',
|
|
54
|
+
summary: 'Domain mappings available to store bindings',
|
|
55
|
+
methods: {
|
|
56
|
+
GET: {
|
|
57
|
+
summary: 'List the domain mappings of the selected organization',
|
|
58
|
+
description:
|
|
59
|
+
'Read-only list of the customer_accounts domain mappings (any status) of the selected organization, read through domainMappingService. Backs the domain picker of the store Domains tab, so that managing store bindings does not require the customer_accounts domain permission. Requires ecommerce.stores.view.',
|
|
60
|
+
tags: ['Ecommerce'],
|
|
61
|
+
responses: [
|
|
62
|
+
{
|
|
63
|
+
status: 200,
|
|
64
|
+
description: 'Domain mappings of the selected organization',
|
|
65
|
+
schema: z.object({ items: z.array(domainMappingItemSchema), total: z.number().int() }),
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
errors: [
|
|
69
|
+
{ status: 400, description: 'No organization is selected', schema: errorSchema },
|
|
70
|
+
{ status: 401, description: 'Unauthorized', schema: errorSchema },
|
|
71
|
+
{ status: 403, description: 'Missing ecommerce.stores.view', schema: errorSchema },
|
|
72
|
+
{ status: 503, description: 'The domain mapping service is not available', schema: errorSchema },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type ZodTypeAny } from 'zod'
|
|
2
|
+
import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
3
|
+
import {
|
|
4
|
+
createCrudOpenApiFactory,
|
|
5
|
+
createPagedListResponseSchema as createSharedPagedListResponseSchema,
|
|
6
|
+
defaultCreateResponseSchema as sharedDefaultCreateResponseSchema,
|
|
7
|
+
defaultOkResponseSchema as sharedDefaultOkResponseSchema,
|
|
8
|
+
type CrudOpenApiOptions,
|
|
9
|
+
} from '@open-mercato/shared/lib/openapi/crud'
|
|
10
|
+
|
|
11
|
+
export const defaultCreateResponseSchema = sharedDefaultCreateResponseSchema
|
|
12
|
+
export const defaultOkResponseSchema = sharedDefaultOkResponseSchema
|
|
13
|
+
|
|
14
|
+
export function createPagedListResponseSchema(itemSchema: ZodTypeAny) {
|
|
15
|
+
return createSharedPagedListResponseSchema(itemSchema, { paginationMetaOptional: true })
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const buildEcommerceCrudOpenApi = createCrudOpenApiFactory({
|
|
19
|
+
defaultTag: 'Ecommerce',
|
|
20
|
+
defaultCreateResponseSchema,
|
|
21
|
+
defaultOkResponseSchema,
|
|
22
|
+
makeListDescription: ({ pluralLower }) =>
|
|
23
|
+
`Returns a paginated collection of ${pluralLower} scoped to the authenticated tenant and organization.`,
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
export function createEcommerceCrudOpenApi(options: CrudOpenApiOptions): OpenApiRouteDoc {
|
|
27
|
+
return buildEcommerceCrudOpenApi(options)
|
|
28
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server'
|
|
2
|
+
import { z } from 'zod'
|
|
3
|
+
import type { EntityManager } from '@mikro-orm/postgresql'
|
|
4
|
+
import { isCrudHttpError } from '@open-mercato/shared/lib/crud/errors'
|
|
5
|
+
import { findOneWithDecryption } from '@open-mercato/shared/lib/encryption/find'
|
|
6
|
+
import { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'
|
|
7
|
+
import { createLogger } from '@open-mercato/shared/lib/logger'
|
|
8
|
+
import type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'
|
|
9
|
+
import { EcommerceStoreChannelBinding } from '../../../../data/entities'
|
|
10
|
+
import {
|
|
11
|
+
countChannelAssortment,
|
|
12
|
+
DRAFT_REQUIRE_AUTHENTICATION_PARAM,
|
|
13
|
+
DRAFT_SCOPE_PARAM,
|
|
14
|
+
parseAssortmentCountDraft,
|
|
15
|
+
} from '../../../../lib/assortmentCount'
|
|
16
|
+
import { resolveBrandingRouteContext, storeIdParamSchema } from '../../../../lib/storeBrandingRoute'
|
|
17
|
+
import { ecommerceInternalErrorBody } from '../../../../lib/crudSupport'
|
|
18
|
+
|
|
19
|
+
export const metadata = {
|
|
20
|
+
GET: { requireAuth: true, requireFeatures: ['ecommerce.stores.view'] },
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const logger = createLogger('ecommerce').child({ component: 'assortment-count-route' })
|
|
24
|
+
|
|
25
|
+
type RouteParams = { params?: { id?: string } | Promise<{ id?: string }> }
|
|
26
|
+
|
|
27
|
+
export async function GET(req: Request, ctx: RouteParams) {
|
|
28
|
+
try {
|
|
29
|
+
const context = await resolveBrandingRouteContext(req)
|
|
30
|
+
const { translate } = await resolveTranslations()
|
|
31
|
+
const notFound = () =>
|
|
32
|
+
NextResponse.json(
|
|
33
|
+
{
|
|
34
|
+
error: translate(
|
|
35
|
+
'ecommerce.errors.channelBindingNotFound',
|
|
36
|
+
'The selected channel binding does not exist in this organization.',
|
|
37
|
+
),
|
|
38
|
+
},
|
|
39
|
+
{ status: 404 },
|
|
40
|
+
)
|
|
41
|
+
const params = await ctx.params
|
|
42
|
+
const bindingId = storeIdParamSchema.safeParse(params?.id)
|
|
43
|
+
if (!bindingId.success) return notFound()
|
|
44
|
+
|
|
45
|
+
const em = (context.container.resolve('em') as EntityManager).fork()
|
|
46
|
+
const binding = await findOneWithDecryption(
|
|
47
|
+
em,
|
|
48
|
+
EcommerceStoreChannelBinding,
|
|
49
|
+
{ id: bindingId.data, tenantId: context.tenantId, organizationId: context.organizationId, deletedAt: null },
|
|
50
|
+
undefined,
|
|
51
|
+
{ tenantId: context.tenantId, organizationId: context.organizationId },
|
|
52
|
+
)
|
|
53
|
+
if (!binding) return notFound()
|
|
54
|
+
|
|
55
|
+
const parsed = parseAssortmentCountDraft(new URL(req.url).searchParams, translate)
|
|
56
|
+
if (!parsed.ok) {
|
|
57
|
+
const [message] = Object.values(parsed.fieldErrors)
|
|
58
|
+
return NextResponse.json({ error: message, fieldErrors: parsed.fieldErrors }, { status: 400 })
|
|
59
|
+
}
|
|
60
|
+
const { draft } = parsed
|
|
61
|
+
|
|
62
|
+
const response = await countChannelAssortment(context.container, {
|
|
63
|
+
tenantId: binding.tenantId,
|
|
64
|
+
organizationId: binding.organizationId,
|
|
65
|
+
channelAssortmentScope: draft.scope !== undefined ? draft.scope : (binding.assortmentScope ?? null),
|
|
66
|
+
requireAuthentication: draft.requireAuthentication ?? binding.requireAuthentication,
|
|
67
|
+
scopeSource: draft.scope !== undefined ? 'draft' : 'saved',
|
|
68
|
+
})
|
|
69
|
+
return NextResponse.json(response, { headers: { 'Cache-Control': 'no-store' } })
|
|
70
|
+
} catch (err) {
|
|
71
|
+
if (isCrudHttpError(err)) return NextResponse.json(err.body, { status: err.status })
|
|
72
|
+
logger.error('ecommerce.store-channel-bindings.assortment-count.GET failed', { err })
|
|
73
|
+
return NextResponse.json(await ecommerceInternalErrorBody(), { status: 500 })
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const countResponseSchema = z.object({
|
|
78
|
+
count: z
|
|
79
|
+
.number()
|
|
80
|
+
.int()
|
|
81
|
+
.describe('Products an anonymous buyer sees on this channel. 0 while require_authentication is on.'),
|
|
82
|
+
scopeSource: z
|
|
83
|
+
.enum(['saved', 'draft'])
|
|
84
|
+
.describe('draft when the count used the draftScope query parameter, saved when it used the stored assortment_scope.'),
|
|
85
|
+
requireAuthentication: z
|
|
86
|
+
.boolean()
|
|
87
|
+
.describe('The require_authentication value the count used: draftRequireAuthentication when sent, otherwise the stored value.'),
|
|
88
|
+
reducedByAuthentication: z
|
|
89
|
+
.boolean()
|
|
90
|
+
.describe('True when require_authentication brings the count to 0 although the scope matches products for a signed-in buyer.'),
|
|
91
|
+
countWithoutAuthentication: z
|
|
92
|
+
.number()
|
|
93
|
+
.int()
|
|
94
|
+
.describe('The count the same scope would give an anonymous buyer with require_authentication off.'),
|
|
95
|
+
unindexedCount: z
|
|
96
|
+
.number()
|
|
97
|
+
.int()
|
|
98
|
+
.describe('Active products with no scope index yet. They fail closed under a restricted scope, so they are excluded from count.'),
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
const errorSchema = z.object({ error: z.string() }).passthrough()
|
|
102
|
+
|
|
103
|
+
const fieldErrorsSchema = z.object({
|
|
104
|
+
error: z.string(),
|
|
105
|
+
fieldErrors: z.record(z.string(), z.string()),
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
const countQuerySchema = z.object({
|
|
109
|
+
[DRAFT_SCOPE_PARAM]: z
|
|
110
|
+
.string()
|
|
111
|
+
.optional()
|
|
112
|
+
.describe(
|
|
113
|
+
'JSON-encoded assortment_scope for unsaved form state, validated like the channel binding write (allOf is rejected); null means unrestricted.',
|
|
114
|
+
),
|
|
115
|
+
[DRAFT_REQUIRE_AUTHENTICATION_PARAM]: z
|
|
116
|
+
.string()
|
|
117
|
+
.optional()
|
|
118
|
+
.describe('true or false: the unsaved require_authentication switch. Defaults to the stored value.'),
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
export const openApi: OpenApiRouteDoc = {
|
|
122
|
+
tag: 'Ecommerce',
|
|
123
|
+
summary: 'Channel binding assortment count',
|
|
124
|
+
pathParams: z.object({ id: z.string().uuid() }),
|
|
125
|
+
methods: {
|
|
126
|
+
GET: {
|
|
127
|
+
summary: 'Count the products a channel binding shows an anonymous buyer',
|
|
128
|
+
description:
|
|
129
|
+
'Backs the live product count of the Channels tab. Counts the products the storefront would list for an anonymous buyer on this channel binding, using the stored assortment_scope or, when draftScope is given, the unsaved one. The effective assortment is the channel scope intersected with the default customer group scope and counted through the same scope query as the storefront listing. A binding that requires authentication counts 0 and reports reducedByAuthentication. Requires ecommerce.stores.view.',
|
|
130
|
+
tags: ['Ecommerce'],
|
|
131
|
+
query: countQuerySchema,
|
|
132
|
+
responses: [{ status: 200, description: 'Product count', schema: countResponseSchema }],
|
|
133
|
+
errors: [
|
|
134
|
+
{ status: 400, description: 'draftScope is not valid JSON or not a valid assortment scope, or draftRequireAuthentication is not a boolean', schema: fieldErrorsSchema },
|
|
135
|
+
{ status: 401, description: 'Unauthorized', schema: errorSchema },
|
|
136
|
+
{ status: 403, description: 'Missing ecommerce.stores.view', schema: errorSchema },
|
|
137
|
+
{ status: 404, description: 'The channel binding does not exist in the selected organization', schema: errorSchema },
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
}
|