@endora-commerce/platform 0.100.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/LICENSE +21 -0
- package/README.md +58 -0
- package/dist/cli/dispatch.d.ts +146 -0
- package/dist/cli/dispatch.d.ts.map +1 -0
- package/dist/cli/dispatch.js +259 -0
- package/dist/cli/dispatch.js.map +1 -0
- package/dist/cli/index.d.ts +58 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +58 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/module-commands.d.ts +118 -0
- package/dist/cli/module-commands.d.ts.map +1 -0
- package/dist/cli/module-commands.js +120 -0
- package/dist/cli/module-commands.js.map +1 -0
- package/dist/commands/actor.d.ts +19 -0
- package/dist/commands/actor.d.ts.map +1 -0
- package/dist/commands/actor.js +45 -0
- package/dist/commands/actor.js.map +1 -0
- package/dist/commands/audit-from-context.d.ts +24 -0
- package/dist/commands/audit-from-context.d.ts.map +1 -0
- package/dist/commands/audit-from-context.js +28 -0
- package/dist/commands/audit-from-context.js.map +1 -0
- package/dist/commands/command-bus.d.ts +40 -0
- package/dist/commands/command-bus.d.ts.map +1 -0
- package/dist/commands/command-bus.js +46 -0
- package/dist/commands/command-bus.js.map +1 -0
- package/dist/commands/command.d.ts +76 -0
- package/dist/commands/command.d.ts.map +1 -0
- package/dist/commands/command.js +2 -0
- package/dist/commands/command.js.map +1 -0
- package/dist/commands/index.d.ts +65 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +57 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/reversible.d.ts +66 -0
- package/dist/commands/reversible.d.ts.map +1 -0
- package/dist/commands/reversible.js +41 -0
- package/dist/commands/reversible.js.map +1 -0
- package/dist/composition/compose-app.d.ts +305 -0
- package/dist/composition/compose-app.d.ts.map +1 -0
- package/dist/composition/compose-app.js +939 -0
- package/dist/composition/compose-app.js.map +1 -0
- package/dist/composition/index.d.ts +92 -0
- package/dist/composition/index.d.ts.map +1 -0
- package/dist/composition/index.js +175 -0
- package/dist/composition/index.js.map +1 -0
- package/dist/composition/newsletter-token-secret.d.ts +19 -0
- package/dist/composition/newsletter-token-secret.d.ts.map +1 -0
- package/dist/composition/newsletter-token-secret.js +24 -0
- package/dist/composition/newsletter-token-secret.js.map +1 -0
- package/dist/composition/process-runs-workers.d.ts +17 -0
- package/dist/composition/process-runs-workers.d.ts.map +1 -0
- package/dist/composition/process-runs-workers.js +19 -0
- package/dist/composition/process-runs-workers.js.map +1 -0
- package/dist/db/baseline-migration-inventory.d.ts +15 -0
- package/dist/db/baseline-migration-inventory.d.ts.map +1 -0
- package/dist/db/baseline-migration-inventory.js +115 -0
- package/dist/db/baseline-migration-inventory.js.map +1 -0
- package/dist/db/configured-entities.d.ts +74 -0
- package/dist/db/configured-entities.d.ts.map +1 -0
- package/dist/db/configured-entities.js +20 -0
- package/dist/db/configured-entities.js.map +1 -0
- package/dist/db/configured-migrations.d.ts +199 -0
- package/dist/db/configured-migrations.d.ts.map +1 -0
- package/dist/db/configured-migrations.js +181 -0
- package/dist/db/configured-migrations.js.map +1 -0
- package/dist/db/index.d.ts +54 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +54 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +21 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +48 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/migration-order.d.ts +159 -0
- package/dist/db/migration-order.d.ts.map +1 -0
- package/dist/db/migration-order.js +273 -0
- package/dist/db/migration-order.js.map +1 -0
- package/dist/db/mikro-orm.config.d.ts +51 -0
- package/dist/db/mikro-orm.config.d.ts.map +1 -0
- package/dist/db/mikro-orm.config.js +64 -0
- package/dist/db/mikro-orm.config.js.map +1 -0
- package/dist/db/orm.d.ts +40 -0
- package/dist/db/orm.d.ts.map +1 -0
- package/dist/db/orm.js +25 -0
- package/dist/db/orm.js.map +1 -0
- package/dist/db/platform-schema.d.ts +102 -0
- package/dist/db/platform-schema.d.ts.map +1 -0
- package/dist/db/platform-schema.js +79 -0
- package/dist/db/platform-schema.js.map +1 -0
- package/dist/db/pluralizing-naming-strategy.d.ts +16 -0
- package/dist/db/pluralizing-naming-strategy.d.ts.map +1 -0
- package/dist/db/pluralizing-naming-strategy.js +66 -0
- package/dist/db/pluralizing-naming-strategy.js.map +1 -0
- package/dist/demo/guard.d.ts +101 -0
- package/dist/demo/guard.d.ts.map +1 -0
- package/dist/demo/guard.js +168 -0
- package/dist/demo/guard.js.map +1 -0
- package/dist/demo/host-command.d.ts +133 -0
- package/dist/demo/host-command.d.ts.map +1 -0
- package/dist/demo/host-command.js +113 -0
- package/dist/demo/host-command.js.map +1 -0
- package/dist/demo/index.d.ts +82 -0
- package/dist/demo/index.d.ts.map +1 -0
- package/dist/demo/index.js +82 -0
- package/dist/demo/index.js.map +1 -0
- package/dist/demo/packages.d.ts +67 -0
- package/dist/demo/packages.d.ts.map +1 -0
- package/dist/demo/packages.js +132 -0
- package/dist/demo/packages.js.map +1 -0
- package/dist/demo/plan.d.ts +111 -0
- package/dist/demo/plan.d.ts.map +1 -0
- package/dist/demo/plan.js +74 -0
- package/dist/demo/plan.js.map +1 -0
- package/dist/demo/report.d.ts +17 -0
- package/dist/demo/report.d.ts.map +1 -0
- package/dist/demo/report.js +85 -0
- package/dist/demo/report.js.map +1 -0
- package/dist/demo/runner.d.ts +207 -0
- package/dist/demo/runner.d.ts.map +1 -0
- package/dist/demo/runner.js +169 -0
- package/dist/demo/runner.js.map +1 -0
- package/dist/demo/scope.d.ts +44 -0
- package/dist/demo/scope.d.ts.map +1 -0
- package/dist/demo/scope.js +44 -0
- package/dist/demo/scope.js.map +1 -0
- package/dist/env/index.d.ts +68 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +427 -0
- package/dist/env/index.js.map +1 -0
- package/dist/events/bus.d.ts +29 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +67 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/index.d.ts +19 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +19 -0
- package/dist/events/index.js.map +1 -0
- package/dist/http/cursor.d.ts +10 -0
- package/dist/http/cursor.d.ts.map +1 -0
- package/dist/http/cursor.js +20 -0
- package/dist/http/cursor.js.map +1 -0
- package/dist/http/error-envelope.d.ts +127 -0
- package/dist/http/error-envelope.d.ts.map +1 -0
- package/dist/http/error-envelope.js +402 -0
- package/dist/http/error-envelope.js.map +1 -0
- package/dist/http/health.d.ts +88 -0
- package/dist/http/health.d.ts.map +1 -0
- package/dist/http/health.js +77 -0
- package/dist/http/health.js.map +1 -0
- package/dist/http/index.d.ts +50 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +50 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/interceptors/dispatch.d.ts +14 -0
- package/dist/http/interceptors/dispatch.d.ts.map +1 -0
- package/dist/http/interceptors/dispatch.js +113 -0
- package/dist/http/interceptors/dispatch.js.map +1 -0
- package/dist/http/interceptors/index.d.ts +6 -0
- package/dist/http/interceptors/index.d.ts.map +1 -0
- package/dist/http/interceptors/index.js +5 -0
- package/dist/http/interceptors/index.js.map +1 -0
- package/dist/http/interceptors/registry.d.ts +44 -0
- package/dist/http/interceptors/registry.d.ts.map +1 -0
- package/dist/http/interceptors/registry.js +123 -0
- package/dist/http/interceptors/registry.js.map +1 -0
- package/dist/http/interceptors/route-table.d.ts +33 -0
- package/dist/http/interceptors/route-table.d.ts.map +1 -0
- package/dist/http/interceptors/route-table.js +39 -0
- package/dist/http/interceptors/route-table.js.map +1 -0
- package/dist/http/interceptors/types.d.ts +101 -0
- package/dist/http/interceptors/types.d.ts.map +1 -0
- package/dist/http/interceptors/types.js +2 -0
- package/dist/http/interceptors/types.js.map +1 -0
- package/dist/http/interceptors/validation.d.ts +22 -0
- package/dist/http/interceptors/validation.d.ts.map +1 -0
- package/dist/http/interceptors/validation.js +39 -0
- package/dist/http/interceptors/validation.js.map +1 -0
- package/dist/http/logger.d.ts +9 -0
- package/dist/http/logger.d.ts.map +1 -0
- package/dist/http/logger.js +25 -0
- package/dist/http/logger.js.map +1 -0
- package/dist/http/openapi.d.ts +21 -0
- package/dist/http/openapi.d.ts.map +1 -0
- package/dist/http/openapi.js +114 -0
- package/dist/http/openapi.js.map +1 -0
- package/dist/http/product-audience.d.ts +78 -0
- package/dist/http/product-audience.d.ts.map +1 -0
- package/dist/http/product-audience.js +92 -0
- package/dist/http/product-audience.js.map +1 -0
- package/dist/http/request-actor.d.ts +82 -0
- package/dist/http/request-actor.d.ts.map +1 -0
- package/dist/http/request-actor.js +2 -0
- package/dist/http/request-actor.js.map +1 -0
- package/dist/http/server.d.ts +60 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +117 -0
- package/dist/http/server.js.map +1 -0
- package/dist/http/storefront-revalidator.d.ts +29 -0
- package/dist/http/storefront-revalidator.d.ts.map +1 -0
- package/dist/http/storefront-revalidator.js +34 -0
- package/dist/http/storefront-revalidator.js.map +1 -0
- package/dist/http/test-actor-carrier.d.ts +28 -0
- package/dist/http/test-actor-carrier.d.ts.map +1 -0
- package/dist/http/test-actor-carrier.js +10 -0
- package/dist/http/test-actor-carrier.js.map +1 -0
- package/dist/http/trusted-proxy.d.ts +48 -0
- package/dist/http/trusted-proxy.d.ts.map +1 -0
- package/dist/http/trusted-proxy.js +136 -0
- package/dist/http/trusted-proxy.js.map +1 -0
- package/dist/kernel/audit/audit-log-entry.entity.d.ts +33 -0
- package/dist/kernel/audit/audit-log-entry.entity.d.ts.map +1 -0
- package/dist/kernel/audit/audit-log-entry.entity.js +102 -0
- package/dist/kernel/audit/audit-log-entry.entity.js.map +1 -0
- package/dist/kernel/audit/audit-log-service.d.ts +63 -0
- package/dist/kernel/audit/audit-log-service.d.ts.map +1 -0
- package/dist/kernel/audit/audit-log-service.js +107 -0
- package/dist/kernel/audit/audit-log-service.js.map +1 -0
- package/dist/kernel/cache/in-process-cache-registry.d.ts +93 -0
- package/dist/kernel/cache/in-process-cache-registry.d.ts.map +1 -0
- package/dist/kernel/cache/in-process-cache-registry.js +78 -0
- package/dist/kernel/cache/in-process-cache-registry.js.map +1 -0
- package/dist/kernel/cache/shared-drop-marks.d.ts +39 -0
- package/dist/kernel/cache/shared-drop-marks.d.ts.map +1 -0
- package/dist/kernel/cache/shared-drop-marks.js +68 -0
- package/dist/kernel/cache/shared-drop-marks.js.map +1 -0
- package/dist/kernel/compose.d.ts +234 -0
- package/dist/kernel/compose.d.ts.map +1 -0
- package/dist/kernel/compose.js +279 -0
- package/dist/kernel/compose.js.map +1 -0
- package/dist/kernel/container.d.ts +95 -0
- package/dist/kernel/container.d.ts.map +1 -0
- package/dist/kernel/container.js +90 -0
- package/dist/kernel/container.js.map +1 -0
- package/dist/kernel/contribution-sinks.d.ts +106 -0
- package/dist/kernel/contribution-sinks.d.ts.map +1 -0
- package/dist/kernel/contribution-sinks.js +153 -0
- package/dist/kernel/contribution-sinks.js.map +1 -0
- package/dist/kernel/crypto/password-hasher.d.ts +3 -0
- package/dist/kernel/crypto/password-hasher.d.ts.map +1 -0
- package/dist/kernel/crypto/password-hasher.js +44 -0
- package/dist/kernel/crypto/password-hasher.js.map +1 -0
- package/dist/kernel/i18n/error-envelope-options.d.ts +56 -0
- package/dist/kernel/i18n/error-envelope-options.d.ts.map +1 -0
- package/dist/kernel/i18n/error-envelope-options.js +46 -0
- package/dist/kernel/i18n/error-envelope-options.js.map +1 -0
- package/dist/kernel/i18n/error-translation.d.ts +144 -0
- package/dist/kernel/i18n/error-translation.d.ts.map +1 -0
- package/dist/kernel/i18n/error-translation.js +84 -0
- package/dist/kernel/i18n/error-translation.js.map +1 -0
- package/dist/kernel/i18n/request-language.d.ts +80 -0
- package/dist/kernel/i18n/request-language.d.ts.map +1 -0
- package/dist/kernel/i18n/request-language.js +168 -0
- package/dist/kernel/i18n/request-language.js.map +1 -0
- package/dist/kernel/index.d.ts +142 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +160 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/kernel/lazy-port.d.ts +59 -0
- package/dist/kernel/lazy-port.d.ts.map +1 -0
- package/dist/kernel/lazy-port.js +78 -0
- package/dist/kernel/lazy-port.js.map +1 -0
- package/dist/kernel/lifecycle/activation-resolver.d.ts +63 -0
- package/dist/kernel/lifecycle/activation-resolver.d.ts.map +1 -0
- package/dist/kernel/lifecycle/activation-resolver.js +70 -0
- package/dist/kernel/lifecycle/activation-resolver.js.map +1 -0
- package/dist/kernel/lifecycle/capability-registry.d.ts +145 -0
- package/dist/kernel/lifecycle/capability-registry.d.ts.map +1 -0
- package/dist/kernel/lifecycle/capability-registry.js +170 -0
- package/dist/kernel/lifecycle/capability-registry.js.map +1 -0
- package/dist/kernel/lifecycle/effective-state.d.ts +126 -0
- package/dist/kernel/lifecycle/effective-state.d.ts.map +1 -0
- package/dist/kernel/lifecycle/effective-state.js +111 -0
- package/dist/kernel/lifecycle/effective-state.js.map +1 -0
- package/dist/kernel/lifecycle/module-registration.entity.d.ts +57 -0
- package/dist/kernel/lifecycle/module-registration.entity.d.ts.map +1 -0
- package/dist/kernel/lifecycle/module-registration.entity.js +111 -0
- package/dist/kernel/lifecycle/module-registration.entity.js.map +1 -0
- package/dist/kernel/lifecycle/plugin-helpers.d.ts +165 -0
- package/dist/kernel/lifecycle/plugin-helpers.d.ts.map +1 -0
- package/dist/kernel/lifecycle/plugin-helpers.js +395 -0
- package/dist/kernel/lifecycle/plugin-helpers.js.map +1 -0
- package/dist/kernel/lifecycle/registry-cache.d.ts +318 -0
- package/dist/kernel/lifecycle/registry-cache.d.ts.map +1 -0
- package/dist/kernel/lifecycle/registry-cache.js +509 -0
- package/dist/kernel/lifecycle/registry-cache.js.map +1 -0
- package/dist/kernel/lifecycle/required-modules.d.ts +137 -0
- package/dist/kernel/lifecycle/required-modules.d.ts.map +1 -0
- package/dist/kernel/lifecycle/required-modules.js +80 -0
- package/dist/kernel/lifecycle/required-modules.js.map +1 -0
- package/dist/kernel/lifecycle/unique-module-ids.d.ts +58 -0
- package/dist/kernel/lifecycle/unique-module-ids.d.ts.map +1 -0
- package/dist/kernel/lifecycle/unique-module-ids.js +82 -0
- package/dist/kernel/lifecycle/unique-module-ids.js.map +1 -0
- package/dist/kernel/logging.d.ts +116 -0
- package/dist/kernel/logging.d.ts.map +1 -0
- package/dist/kernel/logging.js +71 -0
- package/dist/kernel/logging.js.map +1 -0
- package/dist/kernel/module-context.d.ts +563 -0
- package/dist/kernel/module-context.d.ts.map +1 -0
- package/dist/kernel/module-context.js +670 -0
- package/dist/kernel/module-context.js.map +1 -0
- package/dist/kernel/ports/audit.d.ts +115 -0
- package/dist/kernel/ports/audit.d.ts.map +1 -0
- package/dist/kernel/ports/audit.js +2 -0
- package/dist/kernel/ports/audit.js.map +1 -0
- package/dist/kernel/ports/organizations.d.ts +56 -0
- package/dist/kernel/ports/organizations.d.ts.map +1 -0
- package/dist/kernel/ports/organizations.js +2 -0
- package/dist/kernel/ports/organizations.js.map +1 -0
- package/dist/kernel/ports/provide.d.ts +14 -0
- package/dist/kernel/ports/provide.d.ts.map +1 -0
- package/dist/kernel/ports/provide.js +50 -0
- package/dist/kernel/ports/provide.js.map +1 -0
- package/dist/kernel/ports/require-admin.d.ts +61 -0
- package/dist/kernel/ports/require-admin.d.ts.map +1 -0
- package/dist/kernel/ports/require-admin.js +2 -0
- package/dist/kernel/ports/require-admin.js.map +1 -0
- package/dist/kernel/ports/require-customer.d.ts +17 -0
- package/dist/kernel/ports/require-customer.d.ts.map +1 -0
- package/dist/kernel/ports/require-customer.js +2 -0
- package/dist/kernel/ports/require-customer.js.map +1 -0
- package/dist/kernel/ports/sales-channel.d.ts +84 -0
- package/dist/kernel/ports/sales-channel.d.ts.map +1 -0
- package/dist/kernel/ports/sales-channel.js +2 -0
- package/dist/kernel/ports/sales-channel.js.map +1 -0
- package/dist/kernel/ports/settings.d.ts +59 -0
- package/dist/kernel/ports/settings.d.ts.map +1 -0
- package/dist/kernel/ports/settings.js +2 -0
- package/dist/kernel/ports/settings.js.map +1 -0
- package/dist/kernel/public-api-base-url.d.ts +98 -0
- package/dist/kernel/public-api-base-url.d.ts.map +1 -0
- package/dist/kernel/public-api-base-url.js +144 -0
- package/dist/kernel/public-api-base-url.js.map +1 -0
- package/dist/kernel/request-scope-hook.d.ts +63 -0
- package/dist/kernel/request-scope-hook.d.ts.map +1 -0
- package/dist/kernel/request-scope-hook.js +67 -0
- package/dist/kernel/request-scope-hook.js.map +1 -0
- package/dist/kernel/sales-channels/channel-bridge-registry.d.ts +109 -0
- package/dist/kernel/sales-channels/channel-bridge-registry.d.ts.map +1 -0
- package/dist/kernel/sales-channels/channel-bridge-registry.js +75 -0
- package/dist/kernel/sales-channels/channel-bridge-registry.js.map +1 -0
- package/dist/kernel/sales-channels/compose.d.ts +69 -0
- package/dist/kernel/sales-channels/compose.d.ts.map +1 -0
- package/dist/kernel/sales-channels/compose.js +43 -0
- package/dist/kernel/sales-channels/compose.js.map +1 -0
- package/dist/kernel/sales-channels/default-channel-reconciler.d.ts +66 -0
- package/dist/kernel/sales-channels/default-channel-reconciler.d.ts.map +1 -0
- package/dist/kernel/sales-channels/default-channel-reconciler.js +91 -0
- package/dist/kernel/sales-channels/default-channel-reconciler.js.map +1 -0
- package/dist/kernel/sales-channels/no-system-default-channel.error.d.ts +28 -0
- package/dist/kernel/sales-channels/no-system-default-channel.error.d.ts.map +1 -0
- package/dist/kernel/sales-channels/no-system-default-channel.error.js +33 -0
- package/dist/kernel/sales-channels/no-system-default-channel.error.js.map +1 -0
- package/dist/kernel/sales-channels/request-channel-assortment.d.ts +72 -0
- package/dist/kernel/sales-channels/request-channel-assortment.d.ts.map +1 -0
- package/dist/kernel/sales-channels/request-channel-assortment.js +83 -0
- package/dist/kernel/sales-channels/request-channel-assortment.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-membership.service.d.ts +157 -0
- package/dist/kernel/sales-channels/sales-channel-membership.service.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-membership.service.js +302 -0
- package/dist/kernel/sales-channels/sales-channel-membership.service.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.middleware.d.ts +76 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.middleware.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.middleware.js +184 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.middleware.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.service.d.ts +82 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.service.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.service.js +126 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.service.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channel.entity.d.ts +50 -0
- package/dist/kernel/sales-channels/sales-channel.entity.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channel.entity.js +132 -0
- package/dist/kernel/sales-channels/sales-channel.entity.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channels-cache.d.ts +170 -0
- package/dist/kernel/sales-channels/sales-channels-cache.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channels-cache.js +243 -0
- package/dist/kernel/sales-channels/sales-channels-cache.js.map +1 -0
- package/dist/kernel/scope.d.ts +153 -0
- package/dist/kernel/scope.d.ts.map +1 -0
- package/dist/kernel/scope.js +172 -0
- package/dist/kernel/scope.js.map +1 -0
- package/dist/kernel/settings/compose.d.ts +49 -0
- package/dist/kernel/settings/compose.d.ts.map +1 -0
- package/dist/kernel/settings/compose.js +21 -0
- package/dist/kernel/settings/compose.js.map +1 -0
- package/dist/kernel/settings/manifest-reconciler.d.ts +78 -0
- package/dist/kernel/settings/manifest-reconciler.d.ts.map +1 -0
- package/dist/kernel/settings/manifest-reconciler.js +343 -0
- package/dist/kernel/settings/manifest-reconciler.js.map +1 -0
- package/dist/kernel/settings/secret-value-codec.d.ts +52 -0
- package/dist/kernel/settings/secret-value-codec.d.ts.map +1 -0
- package/dist/kernel/settings/secret-value-codec.js +102 -0
- package/dist/kernel/settings/secret-value-codec.js.map +1 -0
- package/dist/kernel/settings/setting-group.entity.d.ts +25 -0
- package/dist/kernel/settings/setting-group.entity.d.ts.map +1 -0
- package/dist/kernel/settings/setting-group.entity.js +79 -0
- package/dist/kernel/settings/setting-group.entity.js.map +1 -0
- package/dist/kernel/settings/setting-value.entity.d.ts +23 -0
- package/dist/kernel/settings/setting-value.entity.d.ts.map +1 -0
- package/dist/kernel/settings/setting-value.entity.js +66 -0
- package/dist/kernel/settings/setting-value.entity.js.map +1 -0
- package/dist/kernel/settings/setting.entity.d.ts +56 -0
- package/dist/kernel/settings/setting.entity.d.ts.map +1 -0
- package/dist/kernel/settings/setting.entity.js +147 -0
- package/dist/kernel/settings/setting.entity.js.map +1 -0
- package/dist/kernel/settings/settings-cache.d.ts +158 -0
- package/dist/kernel/settings/settings-cache.d.ts.map +1 -0
- package/dist/kernel/settings/settings-cache.js +253 -0
- package/dist/kernel/settings/settings-cache.js.map +1 -0
- package/dist/kernel/settings/settings.service.d.ts +142 -0
- package/dist/kernel/settings/settings.service.d.ts.map +1 -0
- package/dist/kernel/settings/settings.service.js +294 -0
- package/dist/kernel/settings/settings.service.js.map +1 -0
- package/dist/lifecycle/backend.d.ts +51 -0
- package/dist/lifecycle/backend.d.ts.map +1 -0
- package/dist/lifecycle/backend.js +40 -0
- package/dist/lifecycle/backend.js.map +1 -0
- package/dist/lifecycle/commands/activation.commands.d.ts +97 -0
- package/dist/lifecycle/commands/activation.commands.d.ts.map +1 -0
- package/dist/lifecycle/commands/activation.commands.js +142 -0
- package/dist/lifecycle/commands/activation.commands.js.map +1 -0
- package/dist/lifecycle/commands/disable.d.ts +3 -0
- package/dist/lifecycle/commands/disable.d.ts.map +1 -0
- package/dist/lifecycle/commands/disable.js +126 -0
- package/dist/lifecycle/commands/disable.js.map +1 -0
- package/dist/lifecycle/commands/enable.d.ts +3 -0
- package/dist/lifecycle/commands/enable.d.ts.map +1 -0
- package/dist/lifecycle/commands/enable.js +102 -0
- package/dist/lifecycle/commands/enable.js.map +1 -0
- package/dist/lifecycle/commands/install.d.ts +3 -0
- package/dist/lifecycle/commands/install.d.ts.map +1 -0
- package/dist/lifecycle/commands/install.js +263 -0
- package/dist/lifecycle/commands/install.js.map +1 -0
- package/dist/lifecycle/commands/operator-entry.d.ts +104 -0
- package/dist/lifecycle/commands/operator-entry.d.ts.map +1 -0
- package/dist/lifecycle/commands/operator-entry.js +127 -0
- package/dist/lifecycle/commands/operator-entry.js.map +1 -0
- package/dist/lifecycle/commands/operator-runtime.d.ts +147 -0
- package/dist/lifecycle/commands/operator-runtime.d.ts.map +1 -0
- package/dist/lifecycle/commands/operator-runtime.js +40 -0
- package/dist/lifecycle/commands/operator-runtime.js.map +1 -0
- package/dist/lifecycle/commands/status.d.ts +3 -0
- package/dist/lifecycle/commands/status.d.ts.map +1 -0
- package/dist/lifecycle/commands/status.js +108 -0
- package/dist/lifecycle/commands/status.js.map +1 -0
- package/dist/lifecycle/commands/uninstall.d.ts +3 -0
- package/dist/lifecycle/commands/uninstall.d.ts.map +1 -0
- package/dist/lifecycle/commands/uninstall.js +223 -0
- package/dist/lifecycle/commands/uninstall.js.map +1 -0
- package/dist/lifecycle/divergence-declaration.d.ts +74 -0
- package/dist/lifecycle/divergence-declaration.d.ts.map +1 -0
- package/dist/lifecycle/divergence-declaration.js +92 -0
- package/dist/lifecycle/divergence-declaration.js.map +1 -0
- package/dist/lifecycle/i18n/en.json +4 -0
- package/dist/lifecycle/i18n/pl.json +4 -0
- package/dist/lifecycle/index.d.ts +110 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +189 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/manifest-registry.d.ts +244 -0
- package/dist/lifecycle/manifest-registry.d.ts.map +1 -0
- package/dist/lifecycle/manifest-registry.js +223 -0
- package/dist/lifecycle/manifest-registry.js.map +1 -0
- package/dist/lifecycle/manifest.d.ts +166 -0
- package/dist/lifecycle/manifest.d.ts.map +1 -0
- package/dist/lifecycle/manifest.js +121 -0
- package/dist/lifecycle/manifest.js.map +1 -0
- package/dist/lifecycle/plugin.d.ts +56 -0
- package/dist/lifecycle/plugin.d.ts.map +1 -0
- package/dist/lifecycle/plugin.js +59 -0
- package/dist/lifecycle/plugin.js.map +1 -0
- package/dist/lifecycle/resident.d.ts +16 -0
- package/dist/lifecycle/resident.d.ts.map +1 -0
- package/dist/lifecycle/resident.js +59 -0
- package/dist/lifecycle/resident.js.map +1 -0
- package/dist/lifecycle/routes.admin.d.ts +57 -0
- package/dist/lifecycle/routes.admin.d.ts.map +1 -0
- package/dist/lifecycle/routes.admin.js +162 -0
- package/dist/lifecycle/routes.admin.js.map +1 -0
- package/dist/lifecycle/routes.storefront.d.ts +26 -0
- package/dist/lifecycle/routes.storefront.d.ts.map +1 -0
- package/dist/lifecycle/routes.storefront.js +36 -0
- package/dist/lifecycle/routes.storefront.js.map +1 -0
- package/dist/lifecycle/services/deactivation-ledger.d.ts +216 -0
- package/dist/lifecycle/services/deactivation-ledger.d.ts.map +1 -0
- package/dist/lifecycle/services/deactivation-ledger.js +171 -0
- package/dist/lifecycle/services/deactivation-ledger.js.map +1 -0
- package/dist/lifecycle/services/dep-graph.d.ts +119 -0
- package/dist/lifecycle/services/dep-graph.d.ts.map +1 -0
- package/dist/lifecycle/services/dep-graph.js +334 -0
- package/dist/lifecycle/services/dep-graph.js.map +1 -0
- package/dist/lifecycle/services/gating-graph.d.ts +164 -0
- package/dist/lifecycle/services/gating-graph.d.ts.map +1 -0
- package/dist/lifecycle/services/gating-graph.js +203 -0
- package/dist/lifecycle/services/gating-graph.js.map +1 -0
- package/dist/lifecycle/services/lock.d.ts +27 -0
- package/dist/lifecycle/services/lock.d.ts.map +1 -0
- package/dist/lifecycle/services/lock.js +82 -0
- package/dist/lifecycle/services/lock.js.map +1 -0
- package/dist/lifecycle/services/manifest-loader.d.ts +125 -0
- package/dist/lifecycle/services/manifest-loader.d.ts.map +1 -0
- package/dist/lifecycle/services/manifest-loader.js +210 -0
- package/dist/lifecycle/services/manifest-loader.js.map +1 -0
- package/dist/lifecycle/services/migration-ownership.d.ts +36 -0
- package/dist/lifecycle/services/migration-ownership.d.ts.map +1 -0
- package/dist/lifecycle/services/migration-ownership.js +15 -0
- package/dist/lifecycle/services/migration-ownership.js.map +1 -0
- package/dist/lifecycle/services/module-id-claims.d.ts +38 -0
- package/dist/lifecycle/services/module-id-claims.d.ts.map +1 -0
- package/dist/lifecycle/services/module-id-claims.js +123 -0
- package/dist/lifecycle/services/module-id-claims.js.map +1 -0
- package/dist/lifecycle/services/module-origin.d.ts +55 -0
- package/dist/lifecycle/services/module-origin.d.ts.map +1 -0
- package/dist/lifecycle/services/module-origin.js +47 -0
- package/dist/lifecycle/services/module-origin.js.map +1 -0
- package/dist/lifecycle/services/orchestrator.d.ts +235 -0
- package/dist/lifecycle/services/orchestrator.d.ts.map +1 -0
- package/dist/lifecycle/services/orchestrator.js +954 -0
- package/dist/lifecycle/services/orchestrator.js.map +1 -0
- package/dist/lifecycle/services/presence-load.d.ts +281 -0
- package/dist/lifecycle/services/presence-load.d.ts.map +1 -0
- package/dist/lifecycle/services/presence-load.js +437 -0
- package/dist/lifecycle/services/presence-load.js.map +1 -0
- package/dist/lifecycle/services/static-registry.d.ts +47 -0
- package/dist/lifecycle/services/static-registry.d.ts.map +1 -0
- package/dist/lifecycle/services/static-registry.js +41 -0
- package/dist/lifecycle/services/static-registry.js.map +1 -0
- package/dist/migrations/20260424T165847_core_foundation_init.d.ts +25 -0
- package/dist/migrations/20260424T165847_core_foundation_init.d.ts.map +1 -0
- package/dist/migrations/20260424T165847_core_foundation_init.js +238 -0
- package/dist/migrations/20260424T165847_core_foundation_init.js.map +1 -0
- package/dist/migrations/20260425T050720_core_commerce_init.d.ts +19 -0
- package/dist/migrations/20260425T050720_core_commerce_init.d.ts.map +1 -0
- package/dist/migrations/20260425T050720_core_commerce_init.js +200 -0
- package/dist/migrations/20260425T050720_core_commerce_init.js.map +1 -0
- package/dist/migrations/20260430T101450_core_settings_init.d.ts +25 -0
- package/dist/migrations/20260430T101450_core_settings_init.d.ts.map +1 -0
- package/dist/migrations/20260430T101450_core_settings_init.js +113 -0
- package/dist/migrations/20260430T101450_core_settings_init.js.map +1 -0
- package/dist/migrations/20260430T170044_core_sales_channels_promote.d.ts +67 -0
- package/dist/migrations/20260430T170044_core_sales_channels_promote.d.ts.map +1 -0
- package/dist/migrations/20260430T170044_core_sales_channels_promote.js +101 -0
- package/dist/migrations/20260430T170044_core_sales_channels_promote.js.map +1 -0
- package/dist/migrations/20260506T200657_core_module_lifecycle_init.d.ts +21 -0
- package/dist/migrations/20260506T200657_core_module_lifecycle_init.d.ts.map +1 -0
- package/dist/migrations/20260506T200657_core_module_lifecycle_init.js +41 -0
- package/dist/migrations/20260506T200657_core_module_lifecycle_init.js.map +1 -0
- package/dist/migrations/20260514T111329_core_settings_global_value.d.ts +30 -0
- package/dist/migrations/20260514T111329_core_settings_global_value.d.ts.map +1 -0
- package/dist/migrations/20260514T111329_core_settings_global_value.js +34 -0
- package/dist/migrations/20260514T111329_core_settings_global_value.js.map +1 -0
- package/dist/migrations/20260611T140411_core_settings_secret_value_type.d.ts +26 -0
- package/dist/migrations/20260611T140411_core_settings_secret_value_type.d.ts.map +1 -0
- package/dist/migrations/20260611T140411_core_settings_secret_value_type.js +63 -0
- package/dist/migrations/20260611T140411_core_settings_secret_value_type.js.map +1 -0
- package/dist/migrations/20260611T140419_core_settings_enum_options.d.ts +19 -0
- package/dist/migrations/20260611T140419_core_settings_enum_options.d.ts.map +1 -0
- package/dist/migrations/20260611T140419_core_settings_enum_options.js +23 -0
- package/dist/migrations/20260611T140419_core_settings_enum_options.js.map +1 -0
- package/dist/migrations/20260629T090100_core_settings_hidden_flag.d.ts +20 -0
- package/dist/migrations/20260629T090100_core_settings_hidden_flag.d.ts.map +1 -0
- package/dist/migrations/20260629T090100_core_settings_hidden_flag.js +24 -0
- package/dist/migrations/20260629T090100_core_settings_hidden_flag.js.map +1 -0
- package/dist/migrations/20260717T134752_core_tenant_scope_indexes.d.ts +27 -0
- package/dist/migrations/20260717T134752_core_tenant_scope_indexes.d.ts.map +1 -0
- package/dist/migrations/20260717T134752_core_tenant_scope_indexes.js +32 -0
- package/dist/migrations/20260717T134752_core_tenant_scope_indexes.js.map +1 -0
- package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.d.ts +24 -0
- package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.d.ts.map +1 -0
- package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.js +57 -0
- package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.js.map +1 -0
- package/dist/migrations/20260816T203339_core_retire_core_activation_settings.d.ts +39 -0
- package/dist/migrations/20260816T203339_core_retire_core_activation_settings.d.ts.map +1 -0
- package/dist/migrations/20260816T203339_core_retire_core_activation_settings.js +59 -0
- package/dist/migrations/20260816T203339_core_retire_core_activation_settings.js.map +1 -0
- package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.d.ts +34 -0
- package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.d.ts.map +1 -0
- package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.js +38 -0
- package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.js.map +1 -0
- package/dist/migrations/baseline-migrations.generated.d.ts +2 -0
- package/dist/migrations/baseline-migrations.generated.d.ts.map +1 -0
- package/dist/migrations/baseline-migrations.generated.js +136 -0
- package/dist/migrations/baseline-migrations.generated.js.map +1 -0
- package/dist/migrations/index.d.ts +62 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +75 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/overlay/deployment-roots.d.ts +37 -0
- package/dist/overlay/deployment-roots.d.ts.map +1 -0
- package/dist/overlay/deployment-roots.js +90 -0
- package/dist/overlay/deployment-roots.js.map +1 -0
- package/dist/overlay/index.d.ts +62 -0
- package/dist/overlay/index.d.ts.map +1 -0
- package/dist/overlay/index.js +62 -0
- package/dist/overlay/index.js.map +1 -0
- package/dist/overlay/overlay-runtime.d.ts +173 -0
- package/dist/overlay/overlay-runtime.d.ts.map +1 -0
- package/dist/overlay/overlay-runtime.js +281 -0
- package/dist/overlay/overlay-runtime.js.map +1 -0
- package/dist/overlay/resolve-overlay.d.ts +41 -0
- package/dist/overlay/resolve-overlay.d.ts.map +1 -0
- package/dist/overlay/resolve-overlay.js +72 -0
- package/dist/overlay/resolve-overlay.js.map +1 -0
- package/dist/packages/index.d.ts +57 -0
- package/dist/packages/index.d.ts.map +1 -0
- package/dist/packages/index.js +57 -0
- package/dist/packages/index.js.map +1 -0
- package/dist/packages/installed-packages.d.ts +79 -0
- package/dist/packages/installed-packages.d.ts.map +1 -0
- package/dist/packages/installed-packages.js +312 -0
- package/dist/packages/installed-packages.js.map +1 -0
- package/dist/packages/package-entity-lookup.d.ts +120 -0
- package/dist/packages/package-entity-lookup.d.ts.map +1 -0
- package/dist/packages/package-entity-lookup.js +17 -0
- package/dist/packages/package-entity-lookup.js.map +1 -0
- package/dist/packages/package-runtime.d.ts +177 -0
- package/dist/packages/package-runtime.d.ts.map +1 -0
- package/dist/packages/package-runtime.js +386 -0
- package/dist/packages/package-runtime.js.map +1 -0
- package/dist/tenancy/derived-scope.d.ts +43 -0
- package/dist/tenancy/derived-scope.d.ts.map +1 -0
- package/dist/tenancy/derived-scope.js +76 -0
- package/dist/tenancy/derived-scope.js.map +1 -0
- package/dist/tenancy/escape-hatch.d.ts +30 -0
- package/dist/tenancy/escape-hatch.d.ts.map +1 -0
- package/dist/tenancy/escape-hatch.js +50 -0
- package/dist/tenancy/escape-hatch.js.map +1 -0
- package/dist/tenancy/filters.d.ts +87 -0
- package/dist/tenancy/filters.d.ts.map +1 -0
- package/dist/tenancy/filters.js +126 -0
- package/dist/tenancy/filters.js.map +1 -0
- package/dist/tenancy/index.d.ts +63 -0
- package/dist/tenancy/index.d.ts.map +1 -0
- package/dist/tenancy/index.js +61 -0
- package/dist/tenancy/index.js.map +1 -0
- package/dist/tenancy/org-scoped.decorator.d.ts +150 -0
- package/dist/tenancy/org-scoped.decorator.d.ts.map +1 -0
- package/dist/tenancy/org-scoped.decorator.js +339 -0
- package/dist/tenancy/org-scoped.decorator.js.map +1 -0
- package/dist/tenancy/org-write-guard.d.ts +106 -0
- package/dist/tenancy/org-write-guard.d.ts.map +1 -0
- package/dist/tenancy/org-write-guard.js +141 -0
- package/dist/tenancy/org-write-guard.js.map +1 -0
- package/dist/tenancy/resolve-tenant-context.d.ts +91 -0
- package/dist/tenancy/resolve-tenant-context.d.ts.map +1 -0
- package/dist/tenancy/resolve-tenant-context.js +85 -0
- package/dist/tenancy/resolve-tenant-context.js.map +1 -0
- package/dist/tenancy/scoped-em.d.ts +10 -0
- package/dist/tenancy/scoped-em.d.ts.map +1 -0
- package/dist/tenancy/scoped-em.js +11 -0
- package/dist/tenancy/scoped-em.js.map +1 -0
- package/dist/tenancy/tenant-context.d.ts +154 -0
- package/dist/tenancy/tenant-context.d.ts.map +1 -0
- package/dist/tenancy/tenant-context.js +109 -0
- package/dist/tenancy/tenant-context.js.map +1 -0
- package/package.json +123 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { EntityManager } from '@mikro-orm/postgresql';
|
|
2
|
+
import type { FastifyInstance } from 'fastify';
|
|
3
|
+
import type { Redis } from 'ioredis';
|
|
4
|
+
import type { EventBus } from '../../events/bus.js';
|
|
5
|
+
import type { AuditPort } from '../ports/audit.js';
|
|
6
|
+
import { SalesChannelsCache } from './sales-channels-cache.js';
|
|
7
|
+
import { SalesChannelResolverService } from './sales-channel-resolver.service.js';
|
|
8
|
+
import { SalesChannelMembershipService } from './sales-channel-membership.service.js';
|
|
9
|
+
import { type ChannelBridgeRegistry } from './channel-bridge-registry.js';
|
|
10
|
+
/**
|
|
11
|
+
* The sales-channel resolution machinery, composed as kernel infrastructure
|
|
12
|
+
* rather than as part of the `sales_channels` module (feature 072, T110).
|
|
13
|
+
*
|
|
14
|
+
* The split follows what the code already was after T019 moved these files
|
|
15
|
+
* into `kernel/`: resolving which channel a request belongs to is something
|
|
16
|
+
* every channel-scoped read depends on (Principle XII), and it has to keep
|
|
17
|
+
* working whether or not an operator wants the channel *administration*
|
|
18
|
+
* screens. Gating the middleware behind the module would mean switching
|
|
19
|
+
* `sales_channels` off leaves every storefront request with no resolved
|
|
20
|
+
* channel — not a smaller platform, a broken one.
|
|
21
|
+
*
|
|
22
|
+
* So the module keeps what is genuinely its own — the admin CRUD service, its
|
|
23
|
+
* routes, its migrations and its settings — and this function composes the
|
|
24
|
+
* rest for a composition root.
|
|
25
|
+
*/
|
|
26
|
+
export interface SalesChannelsKernelOptions {
|
|
27
|
+
readonly emFactory: () => EntityManager;
|
|
28
|
+
readonly eventBus: EventBus;
|
|
29
|
+
readonly redis: Redis;
|
|
30
|
+
readonly auditLogService?: AuditPort;
|
|
31
|
+
/**
|
|
32
|
+
* The bridge registry the owning modules contribute into (feature 120,
|
|
33
|
+
* FR-015). Defaults to the process-level one, which is what every
|
|
34
|
+
* composition root in this repository uses; a caller supplies its own only
|
|
35
|
+
* to compose an isolated platform.
|
|
36
|
+
*/
|
|
37
|
+
readonly bridgeRegistry?: ChannelBridgeRegistry;
|
|
38
|
+
/**
|
|
39
|
+
* Forwarded to the resolver middleware. Defaults to `false` so admin routes
|
|
40
|
+
* keep working without `X-Sales-Channel`.
|
|
41
|
+
*/
|
|
42
|
+
readonly strictAdmin?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface SalesChannelsKernel {
|
|
45
|
+
readonly cache: SalesChannelsCache;
|
|
46
|
+
readonly resolver: SalesChannelResolverService;
|
|
47
|
+
readonly membershipService: SalesChannelMembershipService;
|
|
48
|
+
/**
|
|
49
|
+
* The channel-bridge contribution registry (feature 120, FR-015).
|
|
50
|
+
*
|
|
51
|
+
* A composition root contributes it to the container as
|
|
52
|
+
* `salesChannelBridgeRegistry`, which is the name each owning module resolves
|
|
53
|
+
* from its boot hook to declare the one bridge it owns. The platform holds no
|
|
54
|
+
* map of its own: a member no module registered refuses rather than reaching
|
|
55
|
+
* a relation an instance that omits that module does not have.
|
|
56
|
+
*/
|
|
57
|
+
readonly bridgeRegistry: ChannelBridgeRegistry;
|
|
58
|
+
/**
|
|
59
|
+
* Withdraws this process's cache from the operator-facing clear. Released
|
|
60
|
+
* for tests; in production it lives until process exit.
|
|
61
|
+
*/
|
|
62
|
+
readonly cacheRegistration: {
|
|
63
|
+
readonly dispose: () => void;
|
|
64
|
+
};
|
|
65
|
+
/** The resolver middleware, mounted by the root and never module-gated. */
|
|
66
|
+
readonly plugin: (app: FastifyInstance) => Promise<void>;
|
|
67
|
+
}
|
|
68
|
+
export declare function composeSalesChannelsKernel(options: SalesChannelsKernelOptions): SalesChannelsKernel;
|
|
69
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../../src/kernel/sales-channels/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAEL,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAG1F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,aAAa,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;IAC1D;;;;;;;;OAQG;IACH,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC7D,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAyCrB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { inProcessCaches } from '../cache/in-process-cache-registry.js';
|
|
2
|
+
import { SALES_CHANNELS_CACHE_NAMESPACE, SalesChannelsCache, } from './sales-channels-cache.js';
|
|
3
|
+
import { SalesChannelResolverService } from './sales-channel-resolver.service.js';
|
|
4
|
+
import { SalesChannelMembershipService } from './sales-channel-membership.service.js';
|
|
5
|
+
import { channelBridges } from './channel-bridge-registry.js';
|
|
6
|
+
import { registerSalesChannelResolverMiddleware } from './sales-channel-resolver.middleware.js';
|
|
7
|
+
export function composeSalesChannelsKernel(options) {
|
|
8
|
+
const cache = new SalesChannelsCache(options.redis);
|
|
9
|
+
const resolver = new SalesChannelResolverService(options.emFactory, cache);
|
|
10
|
+
const bridgeRegistry = options.bridgeRegistry ?? channelBridges;
|
|
11
|
+
const membershipService = new SalesChannelMembershipService(options.emFactory, options.eventBus, options.auditLogService, bridgeRegistry);
|
|
12
|
+
/**
|
|
13
|
+
* The one thing composing the cache still has to *do*: announce it to the
|
|
14
|
+
* operator-facing "clear cache" action (issue #33). The clear runs in this
|
|
15
|
+
* process and has to reach the object that owns both layers, or it drops the
|
|
16
|
+
* Redis keys while every warm process keeps serving — and re-pinning — the
|
|
17
|
+
* channel it had already resolved.
|
|
18
|
+
*
|
|
19
|
+
* It used to ride on `attachSalesChannelsCacheInvalidator`, which also
|
|
20
|
+
* subscribed to `sales_channels.identity_changed` and
|
|
21
|
+
* `sales_channels.lifecycle_changed`. Those subscriptions are gone (D-93);
|
|
22
|
+
* the registration is not, because it never had anything to do with the bus.
|
|
23
|
+
*/
|
|
24
|
+
const unregister = inProcessCaches.register(SALES_CHANNELS_CACHE_NAMESPACE, cache);
|
|
25
|
+
return {
|
|
26
|
+
cache,
|
|
27
|
+
resolver,
|
|
28
|
+
membershipService,
|
|
29
|
+
bridgeRegistry,
|
|
30
|
+
cacheRegistration: { dispose: unregister },
|
|
31
|
+
plugin: async (app) => {
|
|
32
|
+
await registerSalesChannelResolverMiddleware(app, {
|
|
33
|
+
resolver,
|
|
34
|
+
...(options.strictAdmin !== undefined ? { strictAdmin: options.strictAdmin } : {}),
|
|
35
|
+
// Feature 062 — audit sink for bound-key channel-mismatch refusals.
|
|
36
|
+
...(options.auditLogService !== undefined
|
|
37
|
+
? { auditLogService: options.auditLogService }
|
|
38
|
+
: {}),
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/kernel/sales-channels/compose.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,cAAc,EAA8B,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,sCAAsC,EAAE,MAAM,wCAAwC,CAAC;AA4DhG,MAAM,UAAU,0BAA0B,CACxC,OAAmC;IAEnC,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,cAAc,CAAC;IAChE,MAAM,iBAAiB,GAAG,IAAI,6BAA6B,CACzD,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,eAAe,EACvB,cAAc,CACf,CAAC;IACF;;;;;;;;;;;OAWG;IACH,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IAEnF,OAAO;QACL,KAAK;QACL,QAAQ;QACR,iBAAiB;QACjB,cAAc;QACd,iBAAiB,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;QAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,sCAAsC,CAAC,GAAG,EAAE;gBAChD,QAAQ;gBACR,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClF,oEAAoE;gBACpE,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;oBAC9C,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { EntityManager } from '@mikro-orm/postgresql';
|
|
2
|
+
import type { AuditPort } from '../ports/audit.js';
|
|
3
|
+
import { SalesChannel } from './sales-channel.entity.js';
|
|
4
|
+
/**
|
|
5
|
+
* DefaultChannelReconciler — feature 005 / T013.
|
|
6
|
+
*
|
|
7
|
+
* Boot-time idempotent guarantee that the platform has exactly one
|
|
8
|
+
* `system_default = true` Sales Channel (FR-002, research R-4). The
|
|
9
|
+
* partial unique index on `system_default` (migration 025) prevents two
|
|
10
|
+
* winners; this service handles the "zero winners" case across all
|
|
11
|
+
* possible startup states.
|
|
12
|
+
*
|
|
13
|
+
* Decision tree (run on every backend boot):
|
|
14
|
+
*
|
|
15
|
+
* 1. Zero rows in `sales_channels`
|
|
16
|
+
* → INSERT a fresh `Default` row with `system_default = true`,
|
|
17
|
+
* sourced from env var `DEFAULT_SALES_CHANNEL_CODE` (default
|
|
18
|
+
* `default`). Audit `lifecycle.changed{op:'system-default-promoted'}`.
|
|
19
|
+
*
|
|
20
|
+
* 2. ≥1 rows AND none has `system_default = true`
|
|
21
|
+
* → Promote the lexically-first row by `code` (with a tie-break
|
|
22
|
+
* toward `code = 'default'`). This handles the upgrade-from-002
|
|
23
|
+
* case where the seed inserted a channel before this feature
|
|
24
|
+
* existed. Audit the promotion.
|
|
25
|
+
*
|
|
26
|
+
* 3. Exactly one row has `system_default = true`
|
|
27
|
+
* → No-op. Idempotent re-runs land here.
|
|
28
|
+
*
|
|
29
|
+
* The reconciler NEVER DEMOTES an already-promoted row, never deletes,
|
|
30
|
+
* and never edits identity. A platform that finds itself with multiple
|
|
31
|
+
* system-default rows (only possible if the partial unique index is
|
|
32
|
+
* missing, e.g. on a partially-migrated DB) leaves the rows alone and
|
|
33
|
+
* emits a critical warning so the operator can intervene — see
|
|
34
|
+
* {@link DefaultChannelReconciliationResult.warning}.
|
|
35
|
+
*/
|
|
36
|
+
export interface DefaultChannelReconciliationResult {
|
|
37
|
+
/** Action taken in this run. */
|
|
38
|
+
action: 'inserted' | 'promoted' | 'no_change' | 'warning';
|
|
39
|
+
/** The system-default channel after reconciliation, when known. */
|
|
40
|
+
systemDefault?: SalesChannel;
|
|
41
|
+
/** Operator-actionable warning text when the partial unique index is missing or multiple defaults are observed. */
|
|
42
|
+
warning?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface DefaultChannelReconcilerOptions {
|
|
45
|
+
/**
|
|
46
|
+
* Used by tests whose `languages` / `currencies` seed differs from the
|
|
47
|
+
* `en` / `EUR` fallbacks. Production always uses the env-driven
|
|
48
|
+
* fallbacks (research R-4); these overrides are not exposed in
|
|
49
|
+
* `composition.ts`.
|
|
50
|
+
*/
|
|
51
|
+
bootstrapDefaults?: {
|
|
52
|
+
code?: string;
|
|
53
|
+
language?: string;
|
|
54
|
+
currency?: string;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
export declare class DefaultChannelReconciler {
|
|
58
|
+
private readonly emFactory;
|
|
59
|
+
private readonly auditLogService?;
|
|
60
|
+
private readonly options;
|
|
61
|
+
constructor(emFactory: () => EntityManager, auditLogService?: AuditPort | undefined, options?: DefaultChannelReconcilerOptions);
|
|
62
|
+
run(): Promise<DefaultChannelReconciliationResult>;
|
|
63
|
+
private insertDefault;
|
|
64
|
+
private audit;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=default-channel-reconciler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-channel-reconciler.d.ts","sourceRoot":"","sources":["../../../src/kernel/sales-channels/default-channel-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,WAAW,kCAAkC;IACjD,gCAAgC;IAChC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC1D,mEAAmE;IACnE,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,mHAAmH;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,+BAA+B;IAC9C;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,SAAS,EAAE,MAAM,aAAa,EAC9B,eAAe,CAAC,EAAE,SAAS,YAAA,EAC3B,OAAO,GAAE,+BAAoC;IAG1D,GAAG,IAAI,OAAO,CAAC,kCAAkC,CAAC;YAoD1C,aAAa;YAmCb,KAAK;CAUpB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { SALES_CHANNEL_AUDIT_ACTIONS } from '@endora-commerce/contracts';
|
|
2
|
+
import { SalesChannel } from './sales-channel.entity.js';
|
|
3
|
+
const DEFAULT_CODE_FALLBACK = 'default';
|
|
4
|
+
const DEFAULT_LANGUAGE_FALLBACK = 'en';
|
|
5
|
+
const DEFAULT_CURRENCY_FALLBACK = 'EUR';
|
|
6
|
+
export class DefaultChannelReconciler {
|
|
7
|
+
emFactory;
|
|
8
|
+
auditLogService;
|
|
9
|
+
options;
|
|
10
|
+
constructor(emFactory, auditLogService, options = {}) {
|
|
11
|
+
this.emFactory = emFactory;
|
|
12
|
+
this.auditLogService = auditLogService;
|
|
13
|
+
this.options = options;
|
|
14
|
+
}
|
|
15
|
+
async run() {
|
|
16
|
+
const em = this.emFactory();
|
|
17
|
+
const all = await em.find(SalesChannel, {});
|
|
18
|
+
// Branch 1 — empty table. Insert Default.
|
|
19
|
+
if (all.length === 0) {
|
|
20
|
+
const inserted = await this.insertDefault(em);
|
|
21
|
+
return { action: 'inserted', systemDefault: inserted };
|
|
22
|
+
}
|
|
23
|
+
const defaults = all.filter((c) => c.systemDefault);
|
|
24
|
+
// Branch 3 — exactly one already promoted: no-op.
|
|
25
|
+
if (defaults.length === 1) {
|
|
26
|
+
return { action: 'no_change', systemDefault: defaults[0] };
|
|
27
|
+
}
|
|
28
|
+
// Branch warning — multiple defaults observed (only possible if the
|
|
29
|
+
// partial unique index is missing). Leave them alone, emit a warning.
|
|
30
|
+
if (defaults.length > 1) {
|
|
31
|
+
return {
|
|
32
|
+
action: 'warning',
|
|
33
|
+
warning: `[sales_channels] expected at most one row with system_default = true, ` +
|
|
34
|
+
`observed ${defaults.length}. The partial unique index ` +
|
|
35
|
+
`"sales_channels_one_system_default" is likely missing or migration 025 ` +
|
|
36
|
+
`has not been applied. Manual intervention is required.`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Branch 2 — no defaults. Promote the lexically-first row, tie-breaking
|
|
40
|
+
// toward `code = 'default'`.
|
|
41
|
+
const candidates = [...all].sort((a, b) => {
|
|
42
|
+
const aIsDefault = a.code === DEFAULT_CODE_FALLBACK ? 0 : 1;
|
|
43
|
+
const bIsDefault = b.code === DEFAULT_CODE_FALLBACK ? 0 : 1;
|
|
44
|
+
if (aIsDefault !== bIsDefault)
|
|
45
|
+
return aIsDefault - bIsDefault;
|
|
46
|
+
return a.code.localeCompare(b.code);
|
|
47
|
+
});
|
|
48
|
+
const winner = candidates[0];
|
|
49
|
+
winner.systemDefault = true;
|
|
50
|
+
winner.version += 1;
|
|
51
|
+
await em.persistAndFlush(winner);
|
|
52
|
+
await this.audit(winner.id, 'system-default-promoted', `boot-time reconciler promoted "${winner.code}" to system default`);
|
|
53
|
+
return { action: 'promoted', systemDefault: winner };
|
|
54
|
+
}
|
|
55
|
+
async insertDefault(em) {
|
|
56
|
+
const code = this.options.bootstrapDefaults?.code ??
|
|
57
|
+
process.env['DEFAULT_SALES_CHANNEL_CODE'] ??
|
|
58
|
+
DEFAULT_CODE_FALLBACK;
|
|
59
|
+
const language = this.options.bootstrapDefaults?.language ?? DEFAULT_LANGUAGE_FALLBACK;
|
|
60
|
+
const currency = this.options.bootstrapDefaults?.currency ?? DEFAULT_CURRENCY_FALLBACK;
|
|
61
|
+
const channel = em.create(SalesChannel, {
|
|
62
|
+
code,
|
|
63
|
+
name: { en: 'Default' },
|
|
64
|
+
languages: [language],
|
|
65
|
+
defaultLanguage: language,
|
|
66
|
+
currencies: [currency],
|
|
67
|
+
defaultCurrency: currency,
|
|
68
|
+
active: true,
|
|
69
|
+
systemDefault: true,
|
|
70
|
+
version: 1,
|
|
71
|
+
// Legacy columns preserved for one release (research R-12).
|
|
72
|
+
isPublic: false,
|
|
73
|
+
status: 'active',
|
|
74
|
+
});
|
|
75
|
+
await em.persistAndFlush(channel);
|
|
76
|
+
await this.audit(channel.id, 'system-default-promoted', `boot-time reconciler inserted fresh "${code}" as system default`);
|
|
77
|
+
return channel;
|
|
78
|
+
}
|
|
79
|
+
async audit(channelId, op, reason) {
|
|
80
|
+
if (!this.auditLogService)
|
|
81
|
+
return;
|
|
82
|
+
await this.auditLogService.record({
|
|
83
|
+
actorAdminUserId: null,
|
|
84
|
+
action: SALES_CHANNEL_AUDIT_ACTIONS.LIFECYCLE_CHANGED,
|
|
85
|
+
objectType: 'sales_channel',
|
|
86
|
+
objectId: channelId,
|
|
87
|
+
stateAfter: { op, reason },
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=default-channel-reconciler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-channel-reconciler.js","sourceRoot":"","sources":["../../../src/kernel/sales-channels/default-channel-reconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { HttpError } from '../../http/error-envelope.js';
|
|
2
|
+
/**
|
|
3
|
+
* The platform has no sales channel holding `system_default` (feature 072,
|
|
4
|
+
* D-47 / D-48).
|
|
5
|
+
*
|
|
6
|
+
* This is a **platform fault, not a caller error**, and it is unreachable on a
|
|
7
|
+
* booted deployment: the boot reconciler
|
|
8
|
+
* (`kernel/sales-channels/default-channel-reconciler.ts`) inserts or promotes a
|
|
9
|
+
* default on every serving path, a partial unique index forbids a second one,
|
|
10
|
+
* and `SalesChannelsService` refuses every delete, deactivate and `active:false`
|
|
11
|
+
* that would take the flag away. The only way to observe it is to read a
|
|
12
|
+
* channel before composition has run the reconciler.
|
|
13
|
+
*
|
|
14
|
+
* It exists so that state has **one** spelling. Before D-48 it had four — a
|
|
15
|
+
* `'default'` channel code where an id was wanted, a nil UUID, a `randomUUID()`
|
|
16
|
+
* persisted into an order, and a silent switch to the platform-wide settings
|
|
17
|
+
* tier — because `getSystemDefault()` returned `null` and every author had to
|
|
18
|
+
* invent a value for a branch that cannot be taken.
|
|
19
|
+
*
|
|
20
|
+
* 500 `INTERNAL` is deliberate and matches what the resolver middleware already
|
|
21
|
+
* answered on this condition: no request can be blamed for it and no client can
|
|
22
|
+
* retry into a fix. The one surface that *renders* the condition rather than
|
|
23
|
+
* failing on it is `/sales-channels` (D-51); every consumer propagates.
|
|
24
|
+
*/
|
|
25
|
+
export declare class NoSystemDefaultChannel extends HttpError {
|
|
26
|
+
constructor();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=no-system-default-channel.error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-system-default-channel.error.d.ts","sourceRoot":"","sources":["../../../src/kernel/sales-channels/no-system-default-channel.error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;;CAUpD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ERROR_CODES } from '@endora-commerce/contracts';
|
|
2
|
+
import { HttpError } from '../../http/error-envelope.js';
|
|
3
|
+
/**
|
|
4
|
+
* The platform has no sales channel holding `system_default` (feature 072,
|
|
5
|
+
* D-47 / D-48).
|
|
6
|
+
*
|
|
7
|
+
* This is a **platform fault, not a caller error**, and it is unreachable on a
|
|
8
|
+
* booted deployment: the boot reconciler
|
|
9
|
+
* (`kernel/sales-channels/default-channel-reconciler.ts`) inserts or promotes a
|
|
10
|
+
* default on every serving path, a partial unique index forbids a second one,
|
|
11
|
+
* and `SalesChannelsService` refuses every delete, deactivate and `active:false`
|
|
12
|
+
* that would take the flag away. The only way to observe it is to read a
|
|
13
|
+
* channel before composition has run the reconciler.
|
|
14
|
+
*
|
|
15
|
+
* It exists so that state has **one** spelling. Before D-48 it had four — a
|
|
16
|
+
* `'default'` channel code where an id was wanted, a nil UUID, a `randomUUID()`
|
|
17
|
+
* persisted into an order, and a silent switch to the platform-wide settings
|
|
18
|
+
* tier — because `getSystemDefault()` returned `null` and every author had to
|
|
19
|
+
* invent a value for a branch that cannot be taken.
|
|
20
|
+
*
|
|
21
|
+
* 500 `INTERNAL` is deliberate and matches what the resolver middleware already
|
|
22
|
+
* answered on this condition: no request can be blamed for it and no client can
|
|
23
|
+
* retry into a fix. The one surface that *renders* the condition rather than
|
|
24
|
+
* failing on it is `/sales-channels` (D-51); every consumer propagates.
|
|
25
|
+
*/
|
|
26
|
+
export class NoSystemDefaultChannel extends HttpError {
|
|
27
|
+
constructor() {
|
|
28
|
+
super(500, ERROR_CODES.INTERNAL, 'No sales channel holds the system-default flag; the boot-time default-channel ' +
|
|
29
|
+
'reconciler has not run or could not repair the registry.');
|
|
30
|
+
this.name = 'NoSystemDefaultChannel';
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=no-system-default-channel.error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-system-default-channel.error.js","sourceRoot":"","sources":["../../../src/kernel/sales-channels/no-system-default-channel.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,sBAAuB,SAAQ,SAAS;IACnD;QACE,KAAK,CACH,GAAG,EACH,WAAW,CAAC,QAAQ,EACpB,gFAAgF;YAC9E,0DAA0D,CAC7D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { SalesChannelMembershipPort } from '../ports/sales-channel.js';
|
|
2
|
+
/**
|
|
3
|
+
* The assortment gate the **product acquisition seams** owe (issue #259,
|
|
4
|
+
* Constitution XII).
|
|
5
|
+
*
|
|
6
|
+
* ## What was wrong
|
|
7
|
+
*
|
|
8
|
+
* Issue #227 taught every buyer-facing product path to ask
|
|
9
|
+
* `isProductVisibleTo(product, audience)`, and that predicate says in writing
|
|
10
|
+
* that it is *not* the channel answer — the channel is "a second filter every
|
|
11
|
+
* buyer-facing path owes on top of this one". The view side pays it: a listing
|
|
12
|
+
* page and a product detail both narrow to
|
|
13
|
+
* `sales_channel_products` before they answer. The **acquisition** side did
|
|
14
|
+
* not. A product published on one channel only was still reachable by id and by
|
|
15
|
+
* SKU through cart add, comparison add, a quote-request line, a saved list and
|
|
16
|
+
* a pasted quick-order SKU list — every one of them holding an identifier the
|
|
17
|
+
* caller supplied, and every one of them applying the audience filter and no
|
|
18
|
+
* channel test at all.
|
|
19
|
+
*
|
|
20
|
+
* ## Why this is not folded into `isProductVisibleTo`
|
|
21
|
+
*
|
|
22
|
+
* Owner ruling, 2026-08-21. The channel is a property of the **request**, not
|
|
23
|
+
* of the viewer's relationship to the product: `isProductVisibleTo(product,
|
|
24
|
+
* audience)` answers "may this audience see this product at all", and it is
|
|
25
|
+
* pure, synchronous and shared by two SQL restatements with derived parity
|
|
26
|
+
* tests. Folding an asynchronous membership read into it would merge two
|
|
27
|
+
* questions, change a published contract shape and rewrite every parity test to
|
|
28
|
+
* answer for a dimension neither SQL site has. The two filters stay separate
|
|
29
|
+
* and every seam applies both.
|
|
30
|
+
*
|
|
31
|
+
* ## `null` is a real answer, and it is not "no channel"
|
|
32
|
+
*
|
|
33
|
+
* The resolver middleware runs as an `onRequest` hook on every `/api/v1/*` path
|
|
34
|
+
* and falls back to the system-default channel, so **inside a request there is
|
|
35
|
+
* always a channel** — including an anonymous one, including an admin one. The
|
|
36
|
+
* scope slot is empty only where there is no request at all: a CLI entry point,
|
|
37
|
+
* a BullMQ worker, a seed, a fixture calling the service directly. There, the
|
|
38
|
+
* honest answer is that this acquisition is happening on no channel, so there
|
|
39
|
+
* is nothing to narrow against — and {@link productIdsInRequestChannel} says so
|
|
40
|
+
* with `null` rather than with an empty set or with a channel it made up.
|
|
41
|
+
*
|
|
42
|
+
* Narrowing against the system-default channel instead would be the fabrication
|
|
43
|
+
* D-47…D-51 drained under four spellings (`'default'`, the nil UUID, the empty
|
|
44
|
+
* string, `randomUUID()`): it would refuse an operator's own action because a
|
|
45
|
+
* channel nobody named happens not to publish the row. The return type is what
|
|
46
|
+
* keeps the two apart — `ReadonlySet` and `null` are different types, so a
|
|
47
|
+
* caller cannot mistake "the channel publishes none of these" for "there was no
|
|
48
|
+
* channel to ask about", which is the mistake an empty set invites. It is the
|
|
49
|
+
* same shape, and for the same reason, as `allowedIdsFor(): Promise<string[] |
|
|
50
|
+
* null>`.
|
|
51
|
+
*
|
|
52
|
+
* ## The read itself
|
|
53
|
+
*
|
|
54
|
+
* Through {@link SalesChannelMembershipPort.filterEntityIdsInChannel} — the
|
|
55
|
+
* sanctioned bridge accessor (Constitution XII), the same one
|
|
56
|
+
* `catalog.filterByChannel` narrows a listing page with. No statement against
|
|
57
|
+
* `sales_channel_products` is written here; `check:module-boundary`'s SQL
|
|
58
|
+
* predicate would be right to report one.
|
|
59
|
+
*/
|
|
60
|
+
export declare function productIdsInRequestChannel(membership: SalesChannelMembershipPort, productIds: readonly string[]): Promise<ReadonlySet<string> | null>;
|
|
61
|
+
/**
|
|
62
|
+
* `true` when the request's channel does **not** publish `productId` — the
|
|
63
|
+
* single-product spelling of {@link productIdsInRequestChannel}, for the seams
|
|
64
|
+
* that acquire one product at a time.
|
|
65
|
+
*
|
|
66
|
+
* Reads as the refusal it guards (`if (await outOfRequestChannel(…)) throw`),
|
|
67
|
+
* which is what keeps the `null` arm from being written as a silent `true` at
|
|
68
|
+
* five call sites: outside a request there is no channel to be out of, so the
|
|
69
|
+
* answer is `false` and the seam proceeds on the audience filter alone.
|
|
70
|
+
*/
|
|
71
|
+
export declare function outOfRequestChannel(membership: SalesChannelMembershipPort, productId: string): Promise<boolean>;
|
|
72
|
+
//# sourceMappingURL=request-channel-assortment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-channel-assortment.d.ts","sourceRoot":"","sources":["../../../src/kernel/sales-channels/request-channel-assortment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAG5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,0BAA0B,EACtC,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAUrC;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,0BAA0B,EACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAGlB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { currentSalesChannel } from './sales-channel-resolver.middleware.js';
|
|
2
|
+
/**
|
|
3
|
+
* The assortment gate the **product acquisition seams** owe (issue #259,
|
|
4
|
+
* Constitution XII).
|
|
5
|
+
*
|
|
6
|
+
* ## What was wrong
|
|
7
|
+
*
|
|
8
|
+
* Issue #227 taught every buyer-facing product path to ask
|
|
9
|
+
* `isProductVisibleTo(product, audience)`, and that predicate says in writing
|
|
10
|
+
* that it is *not* the channel answer — the channel is "a second filter every
|
|
11
|
+
* buyer-facing path owes on top of this one". The view side pays it: a listing
|
|
12
|
+
* page and a product detail both narrow to
|
|
13
|
+
* `sales_channel_products` before they answer. The **acquisition** side did
|
|
14
|
+
* not. A product published on one channel only was still reachable by id and by
|
|
15
|
+
* SKU through cart add, comparison add, a quote-request line, a saved list and
|
|
16
|
+
* a pasted quick-order SKU list — every one of them holding an identifier the
|
|
17
|
+
* caller supplied, and every one of them applying the audience filter and no
|
|
18
|
+
* channel test at all.
|
|
19
|
+
*
|
|
20
|
+
* ## Why this is not folded into `isProductVisibleTo`
|
|
21
|
+
*
|
|
22
|
+
* Owner ruling, 2026-08-21. The channel is a property of the **request**, not
|
|
23
|
+
* of the viewer's relationship to the product: `isProductVisibleTo(product,
|
|
24
|
+
* audience)` answers "may this audience see this product at all", and it is
|
|
25
|
+
* pure, synchronous and shared by two SQL restatements with derived parity
|
|
26
|
+
* tests. Folding an asynchronous membership read into it would merge two
|
|
27
|
+
* questions, change a published contract shape and rewrite every parity test to
|
|
28
|
+
* answer for a dimension neither SQL site has. The two filters stay separate
|
|
29
|
+
* and every seam applies both.
|
|
30
|
+
*
|
|
31
|
+
* ## `null` is a real answer, and it is not "no channel"
|
|
32
|
+
*
|
|
33
|
+
* The resolver middleware runs as an `onRequest` hook on every `/api/v1/*` path
|
|
34
|
+
* and falls back to the system-default channel, so **inside a request there is
|
|
35
|
+
* always a channel** — including an anonymous one, including an admin one. The
|
|
36
|
+
* scope slot is empty only where there is no request at all: a CLI entry point,
|
|
37
|
+
* a BullMQ worker, a seed, a fixture calling the service directly. There, the
|
|
38
|
+
* honest answer is that this acquisition is happening on no channel, so there
|
|
39
|
+
* is nothing to narrow against — and {@link productIdsInRequestChannel} says so
|
|
40
|
+
* with `null` rather than with an empty set or with a channel it made up.
|
|
41
|
+
*
|
|
42
|
+
* Narrowing against the system-default channel instead would be the fabrication
|
|
43
|
+
* D-47…D-51 drained under four spellings (`'default'`, the nil UUID, the empty
|
|
44
|
+
* string, `randomUUID()`): it would refuse an operator's own action because a
|
|
45
|
+
* channel nobody named happens not to publish the row. The return type is what
|
|
46
|
+
* keeps the two apart — `ReadonlySet` and `null` are different types, so a
|
|
47
|
+
* caller cannot mistake "the channel publishes none of these" for "there was no
|
|
48
|
+
* channel to ask about", which is the mistake an empty set invites. It is the
|
|
49
|
+
* same shape, and for the same reason, as `allowedIdsFor(): Promise<string[] |
|
|
50
|
+
* null>`.
|
|
51
|
+
*
|
|
52
|
+
* ## The read itself
|
|
53
|
+
*
|
|
54
|
+
* Through {@link SalesChannelMembershipPort.filterEntityIdsInChannel} — the
|
|
55
|
+
* sanctioned bridge accessor (Constitution XII), the same one
|
|
56
|
+
* `catalog.filterByChannel` narrows a listing page with. No statement against
|
|
57
|
+
* `sales_channel_products` is written here; `check:module-boundary`'s SQL
|
|
58
|
+
* predicate would be right to report one.
|
|
59
|
+
*/
|
|
60
|
+
export async function productIdsInRequestChannel(membership, productIds) {
|
|
61
|
+
const channel = currentSalesChannel();
|
|
62
|
+
if (!channel)
|
|
63
|
+
return null;
|
|
64
|
+
if (productIds.length === 0)
|
|
65
|
+
return new Set();
|
|
66
|
+
const published = await membership.filterEntityIdsInChannel(channel.id, 'product', Array.from(new Set(productIds)));
|
|
67
|
+
return new Set(published);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* `true` when the request's channel does **not** publish `productId` — the
|
|
71
|
+
* single-product spelling of {@link productIdsInRequestChannel}, for the seams
|
|
72
|
+
* that acquire one product at a time.
|
|
73
|
+
*
|
|
74
|
+
* Reads as the refusal it guards (`if (await outOfRequestChannel(…)) throw`),
|
|
75
|
+
* which is what keeps the `null` arm from being written as a silent `true` at
|
|
76
|
+
* five call sites: outside a request there is no channel to be out of, so the
|
|
77
|
+
* answer is `false` and the seam proceeds on the audience filter alone.
|
|
78
|
+
*/
|
|
79
|
+
export async function outOfRequestChannel(membership, productId) {
|
|
80
|
+
const published = await productIdsInRequestChannel(membership, [productId]);
|
|
81
|
+
return published !== null && !published.has(productId);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=request-channel-assortment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-channel-assortment.js","sourceRoot":"","sources":["../../../src/kernel/sales-channels/request-channel-assortment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAAsC,EACtC,UAA6B;IAE7B,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAU,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,wBAAwB,CACzD,OAAO,CAAC,EAAE,EACV,SAAS,EACT,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAChC,CAAC;IACF,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAsC,EACtC,SAAiB;IAEjB,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,OAAO,SAAS,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC"}
|