@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,253 @@
|
|
|
1
|
+
import { SharedDropMarks } from '../cache/shared-drop-marks.js';
|
|
2
|
+
/**
|
|
3
|
+
* Read-through cache for `SettingsService.get` — feature 004 / US3 (T050).
|
|
4
|
+
*
|
|
5
|
+
* Two layers, in this order on read:
|
|
6
|
+
* 1. Per-process LRU (cheap; absorbs intra-request bursts).
|
|
7
|
+
* 2. Redis (`settings:v1:<code>:<channelId>`, TTL 1h; survives restarts).
|
|
8
|
+
*
|
|
9
|
+
* Invalidation goes the other way: write → drop in Redis → drop in LRU. The
|
|
10
|
+
* write seam calls {@link SettingsCacheInvalidation} itself and awaits it
|
|
11
|
+
* (issue #45); until then the drop rode an EventBus notification, which made it
|
|
12
|
+
* a function of *which handler the bus reached first*.
|
|
13
|
+
*
|
|
14
|
+
* Dropping the shared layer first is deliberate: it is the layer that outlives
|
|
15
|
+
* this process and would otherwise be re-pulled into every other process's
|
|
16
|
+
* LRU. Dropping it is also the step that can fail (network, closed
|
|
17
|
+
* connection), and a half-done invalidation must degrade to "slower but
|
|
18
|
+
* correct", never to "fast and wrong". {@link SharedDropMarks} holds the two
|
|
19
|
+
* guards that enforce it.
|
|
20
|
+
*
|
|
21
|
+
* **The local layer expires.** The EventBus is in-process (`events/bus.ts`),
|
|
22
|
+
* so a second API instance learns about a write only through the shared layer:
|
|
23
|
+
* invalidation is, across processes, a broadcast that can be missed. Redis
|
|
24
|
+
* expires its entries after an hour; without {@link SETTINGS_LRU_TTL_MS} the
|
|
25
|
+
* LRU expired nothing and was bounded only by its capacity, so a process that
|
|
26
|
+
* missed a notification served the pre-write value indefinitely — the one case
|
|
27
|
+
* the operator's "clear cache" button cannot fix, because clearing rides the
|
|
28
|
+
* same in-process path that already failed. The window is on the value's age,
|
|
29
|
+
* never refreshed by a read: a setting read on every request is exactly the
|
|
30
|
+
* entry a sliding window would pin forever.
|
|
31
|
+
*
|
|
32
|
+
* Stored values are JSON-serialised so structured types (objects, arrays)
|
|
33
|
+
* survive the Redis hop. The `null` sentinel is never stored — absence of a
|
|
34
|
+
* key means "cache miss"; falsy values like `false`, `0`, `""` are valid.
|
|
35
|
+
*/
|
|
36
|
+
/** Shared with the operator-facing cache-clear surface, so the two cannot drift. */
|
|
37
|
+
export const SETTINGS_CACHE_KEY_PREFIX = 'settings:v1:';
|
|
38
|
+
export const SETTINGS_CACHE_NAMESPACE = 'settings';
|
|
39
|
+
/**
|
|
40
|
+
* Maximum age of an entry in the per-process layer.
|
|
41
|
+
*
|
|
42
|
+
* 30 s is chosen from both ends. The layer exists to remove the Redis hop from
|
|
43
|
+
* a path read several times per request, and a request burst — a page load, a
|
|
44
|
+
* checkout step, a worker's batch — lives well inside 30 s, so the hit rate
|
|
45
|
+
* that justifies the layer is untouched; a 5 s window (what `custom_fields`
|
|
46
|
+
* uses for a far colder key space) would put a Redis round trip back on the
|
|
47
|
+
* hot path many times a second. At the other end, 30 s is a bound an operator
|
|
48
|
+
* experiences as "reload the page and it is right" rather than as a defect,
|
|
49
|
+
* and it is two orders of magnitude below the hour Redis keeps its own copy —
|
|
50
|
+
* which is what makes the self-healing real rather than theoretical.
|
|
51
|
+
*/
|
|
52
|
+
export const SETTINGS_LRU_TTL_MS = 30_000;
|
|
53
|
+
const KEY_PREFIX = SETTINGS_CACHE_KEY_PREFIX;
|
|
54
|
+
/**
|
|
55
|
+
* The channel segment of a **platform-wide** read's key (feature 072, D-41).
|
|
56
|
+
* A uuid can never spell it, so it cannot collide with a real channel; using
|
|
57
|
+
* the nil UUID here would have re-introduced the ambiguity the null read exists
|
|
58
|
+
* to remove. `invalidate(code)` drops by the `<prefix><code>:` prefix, so this
|
|
59
|
+
* segment needs no invalidator of its own.
|
|
60
|
+
*/
|
|
61
|
+
const GLOBAL_KEY_SEGMENT = '__global__';
|
|
62
|
+
const TTL_SECONDS = 60 * 60;
|
|
63
|
+
const LRU_MAX = 1024;
|
|
64
|
+
const NOT_REGISTERED = '__settings_not_registered__';
|
|
65
|
+
export class SettingsCache {
|
|
66
|
+
redis;
|
|
67
|
+
now;
|
|
68
|
+
lru = new Map();
|
|
69
|
+
marks = new SharedDropMarks();
|
|
70
|
+
constructor(redis,
|
|
71
|
+
/** Injectable so a test can advance the TTL window without a real clock. */
|
|
72
|
+
now = () => Date.now()) {
|
|
73
|
+
this.redis = redis;
|
|
74
|
+
this.now = now;
|
|
75
|
+
}
|
|
76
|
+
static composeKey(code, channelId) {
|
|
77
|
+
return `${KEY_PREFIX}${code}:${channelId ?? GLOBAL_KEY_SEGMENT}`;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Returns:
|
|
81
|
+
* - { hit: true; value: unknown } when the value (or "not registered" sentinel) is cached
|
|
82
|
+
* - { hit: false } when the caller must fall through to Postgres
|
|
83
|
+
* The "not registered" sentinel is encoded as `{ __settings_not_registered__: true }`.
|
|
84
|
+
*/
|
|
85
|
+
async get(code, channelId) {
|
|
86
|
+
const key = SettingsCache.composeKey(code, channelId);
|
|
87
|
+
if (await this.isBypassed(key))
|
|
88
|
+
return { hit: false };
|
|
89
|
+
const entry = this.lru.get(key);
|
|
90
|
+
if (entry !== undefined) {
|
|
91
|
+
if (this.now() - entry.storedAt < SETTINGS_LRU_TTL_MS) {
|
|
92
|
+
// Touch the LRU for eviction order — but not `storedAt`: the bound is
|
|
93
|
+
// on the value's age, and a hot key must still age out.
|
|
94
|
+
this.lru.delete(key);
|
|
95
|
+
this.lru.set(key, entry);
|
|
96
|
+
if (this.isNotRegisteredSentinel(entry.value)) {
|
|
97
|
+
return { hit: true, value: undefined, notRegistered: true };
|
|
98
|
+
}
|
|
99
|
+
return { hit: true, value: entry.value };
|
|
100
|
+
}
|
|
101
|
+
this.lru.delete(key);
|
|
102
|
+
}
|
|
103
|
+
const raw = await this.redis.get(key);
|
|
104
|
+
if (raw === null)
|
|
105
|
+
return { hit: false };
|
|
106
|
+
const decoded = JSON.parse(raw);
|
|
107
|
+
this.touchLru(key, decoded);
|
|
108
|
+
if (this.isNotRegisteredSentinel(decoded)) {
|
|
109
|
+
return { hit: true, value: undefined, notRegistered: true };
|
|
110
|
+
}
|
|
111
|
+
return { hit: true, value: decoded };
|
|
112
|
+
}
|
|
113
|
+
async set(code, channelId, value) {
|
|
114
|
+
const key = SettingsCache.composeKey(code, channelId);
|
|
115
|
+
// A read that started before the write resolved the pre-invalidation value
|
|
116
|
+
// from Postgres. Caching it now would undo the invalidation in flight.
|
|
117
|
+
if (await this.isBypassed(key))
|
|
118
|
+
return;
|
|
119
|
+
this.touchLru(key, value);
|
|
120
|
+
await this.redis.set(key, JSON.stringify(value), 'EX', TTL_SECONDS);
|
|
121
|
+
}
|
|
122
|
+
/** Cache the "not registered" outcome so repeated typos don't hammer Postgres. */
|
|
123
|
+
async setNotRegistered(code, channelId) {
|
|
124
|
+
const key = SettingsCache.composeKey(code, channelId);
|
|
125
|
+
if (await this.isBypassed(key))
|
|
126
|
+
return;
|
|
127
|
+
const sentinel = { [NOT_REGISTERED]: true };
|
|
128
|
+
this.touchLru(key, sentinel);
|
|
129
|
+
await this.redis.set(key, JSON.stringify(sentinel), 'EX', TTL_SECONDS);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Drop every cached entry for a given setting code (across every channel).
|
|
133
|
+
* Returns how many shared keys were deleted.
|
|
134
|
+
*/
|
|
135
|
+
async invalidate(code) {
|
|
136
|
+
return this.drop(`${KEY_PREFIX}${code}:`, 200);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Used after group-level changes that may affect many codes, and by the
|
|
140
|
+
* operator-facing cache clear. Returns how many shared keys were deleted.
|
|
141
|
+
*/
|
|
142
|
+
async invalidateAll() {
|
|
143
|
+
return this.drop(KEY_PREFIX, 500);
|
|
144
|
+
}
|
|
145
|
+
/** {@inheritDoc SettingsCacheInvalidation.invalidateAfterWrite} */
|
|
146
|
+
async invalidateAfterWrite(code) {
|
|
147
|
+
return this.afterWrite(() => this.invalidate(code));
|
|
148
|
+
}
|
|
149
|
+
/** {@inheritDoc SettingsCacheInvalidation.invalidateAllAfterWrite} */
|
|
150
|
+
async invalidateAllAfterWrite() {
|
|
151
|
+
return this.afterWrite(() => this.invalidateAll());
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* The one place the write seam's tolerance is written down.
|
|
155
|
+
*
|
|
156
|
+
* `drop` has already marked the prefix failed by the time it re-throws, so
|
|
157
|
+
* every read in this process bypasses both layers for those keys and retries
|
|
158
|
+
* the drop until Redis answers — the invariant is intact and the answer is
|
|
159
|
+
* "slower but correct". What is left of the throw is a report, and a report
|
|
160
|
+
* must not undo the write that produced it.
|
|
161
|
+
*/
|
|
162
|
+
async afterWrite(drop) {
|
|
163
|
+
try {
|
|
164
|
+
return await drop();
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Drop both layers for a key prefix, shared layer first. The prefix is
|
|
172
|
+
* marked for the whole operation so concurrent reads and writes cannot
|
|
173
|
+
* observe or restore the pre-invalidation state; the mark is only released
|
|
174
|
+
* once the shared layer is known to be clean.
|
|
175
|
+
*/
|
|
176
|
+
async drop(prefix, scanCount) {
|
|
177
|
+
this.marks.begin(prefix);
|
|
178
|
+
try {
|
|
179
|
+
const deleted = await this.dropShared(prefix, scanCount);
|
|
180
|
+
this.marks.retireFailedUnder(prefix);
|
|
181
|
+
return deleted;
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
// Fail closed: Redis may still serve the pre-invalidation value to this
|
|
185
|
+
// process, so keep reads off the cache until a later drop succeeds.
|
|
186
|
+
this.marks.markFailed(prefix);
|
|
187
|
+
throw err;
|
|
188
|
+
}
|
|
189
|
+
finally {
|
|
190
|
+
this.dropLocal(prefix);
|
|
191
|
+
this.marks.finish(prefix);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/** SCAN + DEL, to avoid blocking on KEYS in production-sized databases. */
|
|
195
|
+
async dropShared(prefix, scanCount) {
|
|
196
|
+
let cursor = '0';
|
|
197
|
+
let deleted = 0;
|
|
198
|
+
do {
|
|
199
|
+
const [next, keys] = await this.redis.scan(cursor, 'MATCH', `${prefix}*`, 'COUNT', scanCount);
|
|
200
|
+
cursor = next;
|
|
201
|
+
if (keys.length > 0) {
|
|
202
|
+
deleted += await this.redis.del(...keys);
|
|
203
|
+
}
|
|
204
|
+
} while (cursor !== '0');
|
|
205
|
+
return deleted;
|
|
206
|
+
}
|
|
207
|
+
dropLocal(prefix) {
|
|
208
|
+
for (const k of this.lru.keys()) {
|
|
209
|
+
if (k.startsWith(prefix))
|
|
210
|
+
this.lru.delete(k);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* True when neither layer may be trusted for this key: a drop is in flight,
|
|
215
|
+
* or an earlier drop failed and Redis was never cleaned. In the failed case
|
|
216
|
+
* the drop is retried here, so a transient outage costs the affected codes
|
|
217
|
+
* their caching until Redis answers again — not for the process lifetime.
|
|
218
|
+
*/
|
|
219
|
+
async isBypassed(key) {
|
|
220
|
+
if (this.marks.isClean)
|
|
221
|
+
return false;
|
|
222
|
+
if (this.marks.isDraining(key))
|
|
223
|
+
return true;
|
|
224
|
+
const failed = this.marks.failedPrefixFor(key);
|
|
225
|
+
if (failed === undefined)
|
|
226
|
+
return false;
|
|
227
|
+
try {
|
|
228
|
+
await this.drop(failed, 200);
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
// Still unreachable — stay off the cache and read through to Postgres.
|
|
232
|
+
}
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
touchLru(key, value) {
|
|
236
|
+
if (this.lru.has(key))
|
|
237
|
+
this.lru.delete(key);
|
|
238
|
+
this.lru.set(key, { value, storedAt: this.now() });
|
|
239
|
+
while (this.lru.size > LRU_MAX) {
|
|
240
|
+
const oldest = this.lru.keys().next().value;
|
|
241
|
+
if (oldest === undefined)
|
|
242
|
+
break;
|
|
243
|
+
this.lru.delete(oldest);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
isNotRegisteredSentinel(v) {
|
|
247
|
+
return (typeof v === 'object' &&
|
|
248
|
+
v !== null &&
|
|
249
|
+
Object.prototype.hasOwnProperty.call(v, NOT_REGISTERED) &&
|
|
250
|
+
v[NOT_REGISTERED] === true);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=settings-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings-cache.js","sourceRoot":"","sources":["../../../src/kernel/settings/settings-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import type { EntityManager } from '@mikro-orm/postgresql';
|
|
2
|
+
import type { z } from 'zod';
|
|
3
|
+
import type { SettingsCache } from './settings-cache.js';
|
|
4
|
+
/**
|
|
5
|
+
* SettingsService — the universal getter (US3 / T049).
|
|
6
|
+
*
|
|
7
|
+
* The single read mechanism every other module uses to retrieve a setting's
|
|
8
|
+
* value. A read either **names a real sales channel** or says it has **none**;
|
|
9
|
+
* nothing in between is spellable (feature 072, D-41).
|
|
10
|
+
*
|
|
11
|
+
* Resolution order for a channel-scoped read (`salesChannelId` is a uuid):
|
|
12
|
+
*
|
|
13
|
+
* 0. Channel-id shape check; a non-uuid → throw {@link SettingsChannelIdInvalid}.
|
|
14
|
+
* 1. Cache hit (read-through Redis + per-process LRU).
|
|
15
|
+
* 2. Setting lookup by code; absent → throw {@link SettingNotRegistered}.
|
|
16
|
+
* 3. Scope check; the channel must be in the setting's `salesChannels`
|
|
17
|
+
* collection (or the collection must be empty = "all channels").
|
|
18
|
+
* Otherwise → throw {@link SettingOutOfScopeForChannel}.
|
|
19
|
+
* 4. Per-channel `setting_values` row → return its `value`.
|
|
20
|
+
* 5. Else → `setting.globalValue`, else `setting.defaultValue`.
|
|
21
|
+
*
|
|
22
|
+
* For a **platform-wide** read (`salesChannelId === null`) step 4 is skipped:
|
|
23
|
+
* the answer is `globalValue ?? defaultValue`, the tier the admin service has
|
|
24
|
+
* always written ("Platform-wide global override") and `resolveEffectiveValue`
|
|
25
|
+
* has always resolved, but which had no read API. Three modules independently
|
|
26
|
+
* invented the nil UUID as its spelling and a fourth inlined it — it worked by
|
|
27
|
+
* accident, being well-formed enough for Postgres and matching no row. A
|
|
28
|
+
* setting scoped to a *subset* of channels has no platform-wide answer, so it
|
|
29
|
+
* throws {@link SettingOutOfScopeForChannel} with a `null` channel.
|
|
30
|
+
*
|
|
31
|
+
* No schema change: `setting_values.sales_channel_id` stays `uuid NOT NULL`.
|
|
32
|
+
* The null lives in the read signature, not in a column.
|
|
33
|
+
*
|
|
34
|
+
* The optional caller-supplied schema is validated AFTER the resolved value
|
|
35
|
+
* is materialised; mismatches surface as {@link SettingValueShapeMismatch}.
|
|
36
|
+
*/
|
|
37
|
+
export declare class SettingNotRegistered extends Error {
|
|
38
|
+
readonly settingCode: string;
|
|
39
|
+
readonly name = "SettingNotRegistered";
|
|
40
|
+
readonly code: "SETTING_NOT_REGISTERED";
|
|
41
|
+
constructor(settingCode: string);
|
|
42
|
+
}
|
|
43
|
+
export declare class SettingOutOfScopeForChannel extends Error {
|
|
44
|
+
readonly settingCode: string;
|
|
45
|
+
/** `null` = the read was platform-wide, and this setting is not. */
|
|
46
|
+
readonly salesChannelId: string | null;
|
|
47
|
+
readonly name = "SettingOutOfScopeForChannel";
|
|
48
|
+
readonly code: "SETTING_OUT_OF_SCOPE_FOR_CHANNEL";
|
|
49
|
+
constructor(settingCode: string,
|
|
50
|
+
/** `null` = the read was platform-wide, and this setting is not. */
|
|
51
|
+
salesChannelId: string | null);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The caller passed something that is not a sales-channel id (feature 072,
|
|
55
|
+
* D-42 layer 3).
|
|
56
|
+
*
|
|
57
|
+
* `setting_values.sales_channel_id` is `uuid`, so a channel **code**, an empty
|
|
58
|
+
* string or any other id-shaped string cannot address a row: PostgreSQL rejects
|
|
59
|
+
* the comparison outright. Before this guard the failure surfaced as a driver
|
|
60
|
+
* error naming a column, which every caller's `catch` read as "not configured
|
|
61
|
+
* yet" — that is the whole of the defect family this error exists to end.
|
|
62
|
+
*
|
|
63
|
+
* Thrown **before** the `EntityManager` is touched, and deliberately outside
|
|
64
|
+
* the set of errors a settings read may absorb (D-43): a malformed channel id
|
|
65
|
+
* is a code defect, not a missing value. "No channel" is spelled `null`.
|
|
66
|
+
*/
|
|
67
|
+
export declare class SettingsChannelIdInvalid extends Error {
|
|
68
|
+
readonly settingCode: string;
|
|
69
|
+
readonly salesChannelId: string;
|
|
70
|
+
readonly name = "SettingsChannelIdInvalid";
|
|
71
|
+
readonly code: "SETTINGS_CHANNEL_ID_INVALID";
|
|
72
|
+
constructor(settingCode: string, salesChannelId: string);
|
|
73
|
+
}
|
|
74
|
+
export declare class SettingValueShapeMismatch extends Error {
|
|
75
|
+
readonly settingCode: string;
|
|
76
|
+
readonly issues: unknown;
|
|
77
|
+
readonly name = "SettingValueShapeMismatch";
|
|
78
|
+
readonly code: "SETTING_VALUE_SHAPE_MISMATCH";
|
|
79
|
+
constructor(settingCode: string, issues: unknown);
|
|
80
|
+
}
|
|
81
|
+
export type SettingsReadResult<T> = {
|
|
82
|
+
ok: true;
|
|
83
|
+
value: T;
|
|
84
|
+
} | {
|
|
85
|
+
ok: false;
|
|
86
|
+
error: 'not_registered' | 'out_of_scope' | 'shape_mismatch';
|
|
87
|
+
details?: unknown;
|
|
88
|
+
};
|
|
89
|
+
export declare class SettingsService {
|
|
90
|
+
private readonly emFactory;
|
|
91
|
+
private readonly cache?;
|
|
92
|
+
/**
|
|
93
|
+
* Base64 32-byte key for the `secret` value type (feature 043). The
|
|
94
|
+
* cache stores ciphertext envelopes; decryption happens per read in this
|
|
95
|
+
* process so plaintext never sits in Redis.
|
|
96
|
+
*/
|
|
97
|
+
private readonly secretEncryptionKey?;
|
|
98
|
+
constructor(emFactory: () => EntityManager, cache?: SettingsCache | undefined,
|
|
99
|
+
/**
|
|
100
|
+
* Base64 32-byte key for the `secret` value type (feature 043). The
|
|
101
|
+
* cache stores ciphertext envelopes; decryption happens per read in this
|
|
102
|
+
* process so plaintext never sits in Redis.
|
|
103
|
+
*/
|
|
104
|
+
secretEncryptionKey?: string | undefined);
|
|
105
|
+
get<T>(code: string, salesChannelId: string | null, schema: z.ZodType<T>): Promise<T>;
|
|
106
|
+
/**
|
|
107
|
+
* Batch read. Every code is resolved independently; per-code errors are
|
|
108
|
+
* returned as `{ ok: false, error: ... }` instead of throwing, so a single
|
|
109
|
+
* missing code does not poison the whole batch.
|
|
110
|
+
*/
|
|
111
|
+
getMany(codes: string[], salesChannelId: string | null): Promise<Map<string, SettingsReadResult<unknown>>>;
|
|
112
|
+
/** Raw-read variant used by `getMany` — no caller schema, returns `unknown`. */
|
|
113
|
+
private getRaw;
|
|
114
|
+
/**
|
|
115
|
+
* The seam guard (D-42 layer 3). Runs before the cache and before the
|
|
116
|
+
* `EntityManager`, so a caller learns it passed a non-id rather than the
|
|
117
|
+
* driver reporting a column it has never heard of.
|
|
118
|
+
*/
|
|
119
|
+
private assertChannelId;
|
|
120
|
+
private validate;
|
|
121
|
+
/**
|
|
122
|
+
* Secret settings (feature 043) resolve to a ciphertext envelope; backend
|
|
123
|
+
* consumers receive the plaintext. Non-envelope values (every other value
|
|
124
|
+
* type, plus legacy plaintext secrets) pass through untouched.
|
|
125
|
+
*/
|
|
126
|
+
private maybeDecrypt;
|
|
127
|
+
/**
|
|
128
|
+
* Feature 058 (US2) — delete-integrity lookup for the credentials module.
|
|
129
|
+
*
|
|
130
|
+
* Returns every `credential_ref` setting whose resolved value (global
|
|
131
|
+
* override OR a per-channel `SettingValue`) equals `configurationCode`. The
|
|
132
|
+
* credentials module calls this through its port interface (Principle I)
|
|
133
|
+
* before deleting a configuration; a non-empty result blocks the delete
|
|
134
|
+
* (`CREDENTIAL_IN_USE`, FR-012). The manifest `defaultValue` is intentionally
|
|
135
|
+
* ignored — a manifest never ships a real configuration code.
|
|
136
|
+
*/
|
|
137
|
+
listReferencesToConfiguration(configurationCode: string): Promise<{
|
|
138
|
+
settingCode: string;
|
|
139
|
+
salesChannelCode?: string;
|
|
140
|
+
}[]>;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=settings.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.service.d.ts","sourceRoot":"","sources":["../../../src/kernel/settings/settings.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAI7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,qBAAa,oBAAqB,SAAQ,KAAK;aAGjB,WAAW,EAAE,MAAM;IAF/C,SAAkB,IAAI,0BAA0B;IAChD,QAAQ,CAAC,IAAI,EAAG,wBAAwB,CAAU;gBACtB,WAAW,EAAE,MAAM;CAGhD;AAED,qBAAa,2BAA4B,SAAQ,KAAK;aAIlC,WAAW,EAAE,MAAM;IACnC,oEAAoE;aACpD,cAAc,EAAE,MAAM,GAAG,IAAI;IAL/C,SAAkB,IAAI,iCAAiC;IACvD,QAAQ,CAAC,IAAI,EAAG,kCAAkC,CAAU;gBAE1C,WAAW,EAAE,MAAM;IACnC,oEAAoE;IACpD,cAAc,EAAE,MAAM,GAAG,IAAI;CAQhD;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;aAI/B,WAAW,EAAE,MAAM;aACnB,cAAc,EAAE,MAAM;IAJxC,SAAkB,IAAI,8BAA8B;IACpD,QAAQ,CAAC,IAAI,EAAG,6BAA6B,CAAU;gBAErC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM;CAOzC;AAUD,qBAAa,yBAA0B,SAAQ,KAAK;aAIhC,WAAW,EAAE,MAAM;aACnB,MAAM,EAAE,OAAO;IAJjC,SAAkB,IAAI,+BAA+B;IACrD,QAAQ,CAAC,IAAI,EAAG,8BAA8B,CAAU;gBAEtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO;CAIlC;AAED,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IACE,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,gBAAgB,GAAG,cAAc,GAAG,gBAAgB,CAAC;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEN,qBAAa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IACvB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBAPpB,SAAS,EAAE,MAAM,aAAa,EAC9B,KAAK,CAAC,EAAE,aAAa,YAAA;IACtC;;;;OAIG;IACc,mBAAmB,CAAC,EAAE,MAAM,YAAA;IAGzC,GAAG,CAAC,CAAC,EACT,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC;IA2Cb;;;;OAIG;IACG,OAAO,CACX,KAAK,EAAE,MAAM,EAAE,EACf,cAAc,EAAE,MAAM,GAAG,IAAI,GAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IA4BpD,gFAAgF;YAClE,MAAM;IAuCpB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,QAAQ;IAMhB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAKpB;;;;;;;;;OASG;IACG,6BAA6B,CACjC,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAqBjE"}
|