@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,386 @@
|
|
|
1
|
+
// Installed extension packages — the composition half (feature 080, T031).
|
|
2
|
+
//
|
|
3
|
+
// `loadPackageModuleEntries` is the sibling of `loadOverlayModuleEntries`
|
|
4
|
+
// (`src/overlay/overlay-runtime.ts`) and the second caller of the seam !716
|
|
5
|
+
// built: a composition root appends what it returns to the one
|
|
6
|
+
// `composeModules([...MODULES, ...overlay, ...packages], …)` call, so an
|
|
7
|
+
// installed package receives an ordinary `ModuleContext` and reaches every seam
|
|
8
|
+
// a core module reaches. There is no second registration pass, no second
|
|
9
|
+
// contribution window and no second `runBootHooks()` (D-45).
|
|
10
|
+
//
|
|
11
|
+
// **Discovered at runtime, and the committed registries stay bare core**
|
|
12
|
+
// (D-119, confirmed as D-155). D-104's predicate decides it, and it yields
|
|
13
|
+
// three consistent answers rather than two: an artefact is committed when its
|
|
14
|
+
// content is a fact about *the tree*, and resolved at runtime when it is a fact
|
|
15
|
+
// about *the process*. A workspace-member module package is a fact about the
|
|
16
|
+
// tree (D-149). Which deployment a process is, is a fact about the process
|
|
17
|
+
// (D-104). Which packages are installed in an instance's `node_modules` is a
|
|
18
|
+
// fact about the process too — so it is discovered here, and
|
|
19
|
+
// `composition.generated.ts`, `manifest-index.generated.ts` and both `db/`
|
|
20
|
+
// registries stay a walk of the shared core tree.
|
|
21
|
+
//
|
|
22
|
+
// What discovery can and cannot see is written out in `installed-packages.ts`;
|
|
23
|
+
// read that header before assuming this finds a linked directory (it does not).
|
|
24
|
+
//
|
|
25
|
+
// ## Two things it deliberately does not do
|
|
26
|
+
//
|
|
27
|
+
// 1. **It does not mark a package `overlay: true`.** That flag exempts a
|
|
28
|
+
// module from the rule that it may decorate only what it registered (issue
|
|
29
|
+
// #203), and an overlay module earns it from the root it was found under:
|
|
30
|
+
// the deployment authored the module and owns the decision. A package is a
|
|
31
|
+
// third party. **D-156 rules it**, and the answer is the one this file
|
|
32
|
+
// ships: a package's `ctx.di.decorate` over a registration it does not own
|
|
33
|
+
// is refused like any core module's. The load-bearing half of that ruling
|
|
34
|
+
// is about the mechanism — `ModuleEntry.overlay` is a per-module boolean
|
|
35
|
+
// and the condition it feeds is name-unscoped, so setting it from an
|
|
36
|
+
// instance's declaration would hand a stranger `commandBus` and
|
|
37
|
+
// `auditLogService` along with whatever it asked for. Any future grant is
|
|
38
|
+
// keyed by (package, registration name) and refused outright for a name no
|
|
39
|
+
// module owns; it is never this flag.
|
|
40
|
+
// 2. **It reads a package's schema; it does not configure one.** T033 added
|
|
41
|
+
// `packageSchemaContributionsUnder` at the bottom of this file: it resolves
|
|
42
|
+
// `./migrations` and `./backend` and reads them into registry entries and
|
|
43
|
+
// entity classes. Merging those into the execution order and into the ORM
|
|
44
|
+
// configuration is `src/db/configured-migrations.ts` and
|
|
45
|
+
// `src/db/configured-entities.ts` — so the merge has exactly one
|
|
46
|
+
// implementation, and this file still knows nothing about a database.
|
|
47
|
+
import { createRequire } from 'node:module';
|
|
48
|
+
import { dirname, join } from 'node:path';
|
|
49
|
+
import { pathToFileURL } from 'node:url';
|
|
50
|
+
import { nodeModulesRootsFor, scanNodeModulesRoots, } from './installed-packages.js';
|
|
51
|
+
import { assertNoModuleIdCollisions, } from '../lifecycle/services/module-id-claims.js';
|
|
52
|
+
/**
|
|
53
|
+
* The scan, memoised per root list.
|
|
54
|
+
*
|
|
55
|
+
* An instance's `node_modules` does not change while the platform runs, and
|
|
56
|
+
* both `resolvedManifestEntries()` and `loadPackageModuleEntries()` ask the
|
|
57
|
+
* same question during one boot. Keyed by the roots so a test driving explicit
|
|
58
|
+
* roots never reads another test's answer.
|
|
59
|
+
*
|
|
60
|
+
* There is deliberately no reset seam: a fixture that needs a fresh scan writes
|
|
61
|
+
* itself under a fresh root, which is what a test asking a different question
|
|
62
|
+
* has to do anyway.
|
|
63
|
+
*/
|
|
64
|
+
const scans = new Map();
|
|
65
|
+
function scan(roots) {
|
|
66
|
+
// `\0` because it is the one byte a POSIX path cannot contain, so no two
|
|
67
|
+
// distinct root lists can key the same entry. Written as the **escape**, not
|
|
68
|
+
// as the byte: a raw NUL makes git classify the file as binary, and every
|
|
69
|
+
// diff of it renders as `Binary files differ` — the artefact that would show
|
|
70
|
+
// the byte is the one the byte switches off (issues #182, #190).
|
|
71
|
+
const key = roots.join('\0');
|
|
72
|
+
const cached = scans.get(key);
|
|
73
|
+
if (cached)
|
|
74
|
+
return cached;
|
|
75
|
+
const fresh = scanNodeModulesRoots(roots);
|
|
76
|
+
scans.set(key, fresh);
|
|
77
|
+
return fresh;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The module-id claims of every installed module package under `roots`.
|
|
81
|
+
*
|
|
82
|
+
* Exported so the *overlay* seams can be held to one collision rule over one
|
|
83
|
+
* claimed set (feature 103, FR-004) without a second enumeration of what is
|
|
84
|
+
* installed: the scan below is memoised per root list, so asking here costs a
|
|
85
|
+
* map lookup on a boot that has already asked.
|
|
86
|
+
*/
|
|
87
|
+
export function installedPackageModuleIdClaims(roots) {
|
|
88
|
+
return claimsFor(scan(roots).packages);
|
|
89
|
+
}
|
|
90
|
+
function claimsFor(packages) {
|
|
91
|
+
return packages.map((installed) => ({
|
|
92
|
+
id: installed.id,
|
|
93
|
+
origin: 'package',
|
|
94
|
+
claimedBy: installed.manifestPath,
|
|
95
|
+
name: installed.name,
|
|
96
|
+
}));
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve one of the package's `exports` subpaths, the way anything in the
|
|
100
|
+
* instance would.
|
|
101
|
+
*
|
|
102
|
+
* Rooted at the directory that *holds* the `node_modules` the package was found
|
|
103
|
+
* under, so Node's own resolver — `exports` map, conditions and all — answers
|
|
104
|
+
* rather than a hand-rolled read of the map. `null` means the package publishes
|
|
105
|
+
* no such subpath, which for `./backend` is an ordinary answer (an admin- or
|
|
106
|
+
* storefront-only module).
|
|
107
|
+
*/
|
|
108
|
+
function resolveSubpath(installed, subpath) {
|
|
109
|
+
const require = createRequire(join(dirname(installed.foundUnder), 'noop.js'));
|
|
110
|
+
const specifier = subpath === '.' ? installed.name : `${installed.name}/${subpath}`;
|
|
111
|
+
try {
|
|
112
|
+
return require.resolve(specifier);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Narrow by construction: the only thing inside the `try` is a resolution,
|
|
116
|
+
// and a resolution either finds a path or the package does not publish one.
|
|
117
|
+
// Nothing here can reach a port, so nothing here can swallow a
|
|
118
|
+
// `ModuleDisabledError`.
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async function importSubpath(installed, subpath) {
|
|
123
|
+
const resolved = resolveSubpath(installed, subpath);
|
|
124
|
+
if (resolved === null)
|
|
125
|
+
return null;
|
|
126
|
+
return (await import(pathToFileURL(resolved).href));
|
|
127
|
+
}
|
|
128
|
+
function manifestFrom(module) {
|
|
129
|
+
const named = module['manifest'];
|
|
130
|
+
if (named !== undefined)
|
|
131
|
+
return named;
|
|
132
|
+
const fallback = module['default'];
|
|
133
|
+
return fallback === undefined ? undefined : fallback;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Read one package's root export and check that it agrees with `package.json`.
|
|
137
|
+
*
|
|
138
|
+
* The id is taken from `endora.id`, because that is the field the platform can
|
|
139
|
+
* read without importing anything — which is what lets discovery refuse a
|
|
140
|
+
* collision before a stranger's code has run. The manifest carries the id too,
|
|
141
|
+
* and a disagreement is refused rather than silently resolved: whichever half
|
|
142
|
+
* the reader believed, the other one is what some part of the platform would
|
|
143
|
+
* have used.
|
|
144
|
+
*/
|
|
145
|
+
async function manifestEntryFor(installed) {
|
|
146
|
+
const module = await importSubpath(installed, '.');
|
|
147
|
+
if (module === null) {
|
|
148
|
+
throw new Error(`[packages] ${installed.name} declares endora.id "${installed.id}" but publishes no root ` +
|
|
149
|
+
`export, so it has no manifest. A module package's "." export is its manifest ` +
|
|
150
|
+
`(specs/071-modular-packaging/contracts/module-manifest.md). Resolved from ` +
|
|
151
|
+
`${installed.manifestPath}.`);
|
|
152
|
+
}
|
|
153
|
+
const manifest = manifestFrom(module);
|
|
154
|
+
if (manifest === undefined) {
|
|
155
|
+
throw new Error(`[packages] the root export of ${installed.name} exports no "manifest", so the module has ` +
|
|
156
|
+
`no version and no declarations to compose it under. Resolved from ` +
|
|
157
|
+
`${installed.manifestPath}.`);
|
|
158
|
+
}
|
|
159
|
+
if (manifest.id !== installed.id) {
|
|
160
|
+
throw new Error(`[packages] ${installed.name} disagrees with itself about its module id: its package.json ` +
|
|
161
|
+
`says endora.id "${installed.id}" and its manifest says "${manifest.id}". The two name ` +
|
|
162
|
+
`the same thing and the platform reads both — package.json before anything is imported, ` +
|
|
163
|
+
`the manifest for everything afterwards — so a disagreement makes the module's identity ` +
|
|
164
|
+
`depend on which half a caller looked at. Fix it at ${installed.manifestPath}.`);
|
|
165
|
+
}
|
|
166
|
+
// `exactOptionalPropertyTypes`: an absent key is not `{ hook: undefined }`,
|
|
167
|
+
// and the lifecycle asks `entry.installHook !== undefined`.
|
|
168
|
+
const installHook = module['installHook'];
|
|
169
|
+
const uninstallHook = module['uninstallHook'];
|
|
170
|
+
const lifecycleParticipant = module['lifecycleParticipant'];
|
|
171
|
+
const cliCommands = module['cliCommands'];
|
|
172
|
+
const recentActivity = module['recentActivity'];
|
|
173
|
+
return {
|
|
174
|
+
id: installed.id,
|
|
175
|
+
manifest,
|
|
176
|
+
filePath: installed.manifestPath,
|
|
177
|
+
packageName: installed.name,
|
|
178
|
+
...(installHook ? { installHook } : {}),
|
|
179
|
+
...(uninstallHook ? { uninstallHook } : {}),
|
|
180
|
+
...(lifecycleParticipant ? { lifecycleParticipant } : {}),
|
|
181
|
+
...(cliCommands ? { cliCommands } : {}),
|
|
182
|
+
...(recentActivity ? { recentActivity } : {}),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* The manifests of every installed module package, refusing an id two of them
|
|
187
|
+
* claim.
|
|
188
|
+
*
|
|
189
|
+
* A package with no `./backend` export still appears here: an admin- or
|
|
190
|
+
* storefront-only module has permissions, an activation control and i18n
|
|
191
|
+
* bundles, and dropping the manifest would take all three with it.
|
|
192
|
+
*/
|
|
193
|
+
export async function packageModuleManifestsUnder(roots) {
|
|
194
|
+
const found = scan(roots);
|
|
195
|
+
assertNoModuleIdCollisions(claimsFor(found.packages));
|
|
196
|
+
const out = [];
|
|
197
|
+
for (const installed of found.packages) {
|
|
198
|
+
const entry = await manifestEntryFor(installed);
|
|
199
|
+
if (entry !== null)
|
|
200
|
+
out.push(entry);
|
|
201
|
+
}
|
|
202
|
+
return out;
|
|
203
|
+
}
|
|
204
|
+
/** {@link packageModuleManifestsUnder} over the roots this platform reads. */
|
|
205
|
+
export async function discoverPackageModuleManifests(env = process.env) {
|
|
206
|
+
return packageModuleManifestsUnder(nodeModulesRootsFor(env));
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* The composer entries of every installed module package, against explicit
|
|
210
|
+
* roots.
|
|
211
|
+
*
|
|
212
|
+
* Exported so the loader can be driven over a fixture instance that enters at
|
|
213
|
+
* the top of the analysis — a `node_modules` tree on disk, enumerated,
|
|
214
|
+
* `exports`-resolved and imported by the same code the deployment path runs —
|
|
215
|
+
* rather than by handing the last function a pre-built entry (issue #130).
|
|
216
|
+
*/
|
|
217
|
+
export async function packageModuleEntriesUnder(roots) {
|
|
218
|
+
const found = scan(roots);
|
|
219
|
+
assertNoModuleIdCollisions(claimsFor(found.packages));
|
|
220
|
+
const entries = [];
|
|
221
|
+
for (const installed of found.packages) {
|
|
222
|
+
const backend = await importSubpath(installed, 'backend');
|
|
223
|
+
// No `./backend` export at all is an ordinary answer and is skipped, the
|
|
224
|
+
// same way an overlay directory with no `backend.ts` is. A `./backend` that
|
|
225
|
+
// resolves and exports no `registerModule` is a different thing and is
|
|
226
|
+
// refused: skipping it composes nothing, and the first symptom is a 404
|
|
227
|
+
// nobody connects to this file.
|
|
228
|
+
if (backend === null)
|
|
229
|
+
continue;
|
|
230
|
+
const registerModule = backend['registerModule'];
|
|
231
|
+
if (typeof registerModule !== 'function') {
|
|
232
|
+
throw new Error(`[packages] the "./backend" export of ${installed.name} exports no 'registerModule'. ` +
|
|
233
|
+
`A module package's backend entry point is what composes it ` +
|
|
234
|
+
`(specs/071-modular-packaging/contracts/module-manifest.md); remove the export if the ` +
|
|
235
|
+
`package has no server half. It is not composed as written, and a module that composes ` +
|
|
236
|
+
`nothing is a 404 with no error behind it. Resolved from ${installed.manifestPath}.`);
|
|
237
|
+
}
|
|
238
|
+
const manifestEntry = await manifestEntryFor(installed);
|
|
239
|
+
if (manifestEntry === null)
|
|
240
|
+
continue;
|
|
241
|
+
entries.push({
|
|
242
|
+
id: installed.id,
|
|
243
|
+
version: manifestEntry.manifest.version,
|
|
244
|
+
registerModule: registerModule,
|
|
245
|
+
// No `overlay: true`. See this file's header — a package is a stranger,
|
|
246
|
+
// and the decoration exemption is the deployment's alone until something
|
|
247
|
+
// rules otherwise.
|
|
248
|
+
//
|
|
249
|
+
// `installedPackage: true` is the mirror image of that flag and is set
|
|
250
|
+
// from where this loader found the package, never from anything the
|
|
251
|
+
// package declares: it is what makes the kernel refuse a *deployment's*
|
|
252
|
+
// overlay wrapping a registration this package owns (D-176 Q3). Until the
|
|
253
|
+
// decoration drain landed, that case was refused by accident — the root
|
|
254
|
+
// composes overlays before packages, so the name was not in the container
|
|
255
|
+
// yet — and the drain would otherwise have granted a capability the owner
|
|
256
|
+
// declined.
|
|
257
|
+
installedPackage: true,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
return entries;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Every installed module package this platform composes.
|
|
264
|
+
*
|
|
265
|
+
* Empty for an instance that installed none, which is every developer checkout
|
|
266
|
+
* and every test run — and empty is the whole story there: the composition is
|
|
267
|
+
* byte-for-byte what it was before this loader existed.
|
|
268
|
+
*/
|
|
269
|
+
export async function loadPackageModuleEntries(env = process.env) {
|
|
270
|
+
return packageModuleEntriesUnder(nodeModulesRootsFor(env));
|
|
271
|
+
}
|
|
272
|
+
function isConstructor(value) {
|
|
273
|
+
return typeof value === 'function';
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Read a package's `./migrations` export into registry entries.
|
|
277
|
+
*
|
|
278
|
+
* Two published shapes are accepted, because the contract's wording ("exports
|
|
279
|
+
* the migration class array") and the acceptance fixture disagree about which
|
|
280
|
+
* one it means: a bare array of migration classes, and an array of
|
|
281
|
+
* `{ name, class }` — MikroORM's own `MigrationObject` shape. Anything else is
|
|
282
|
+
* **refused rather than skipped**: a migration the host silently drops is a
|
|
283
|
+
* table that never gets created, and the first symptom is a query error nobody
|
|
284
|
+
* connects to this file.
|
|
285
|
+
*
|
|
286
|
+
* The name is always `cls.name`. A declared `name` that disagrees with it is
|
|
287
|
+
* refused for the reason `mikro_orm_migrations` gives: the class name is what
|
|
288
|
+
* is persisted, so the host would record one string and revert by another.
|
|
289
|
+
*/
|
|
290
|
+
function migrationEntriesFrom(installed, exported) {
|
|
291
|
+
const declared = exported['migrations'] ?? exported['default'];
|
|
292
|
+
if (!Array.isArray(declared)) {
|
|
293
|
+
throw new Error(`[packages] the "./migrations" export of ${installed.name} exports no 'migrations' array. ` +
|
|
294
|
+
`A module package's migrations entry point is the array of its migration classes ` +
|
|
295
|
+
`(specs/071-modular-packaging/contracts/module-manifest.md); drop the export if the ` +
|
|
296
|
+
`package ships no schema. Resolved from ${installed.manifestPath}.`);
|
|
297
|
+
}
|
|
298
|
+
return declared.map((entry, index) => {
|
|
299
|
+
const candidate = isConstructor(entry)
|
|
300
|
+
? entry
|
|
301
|
+
: entry?.class;
|
|
302
|
+
if (!isConstructor(candidate)) {
|
|
303
|
+
throw new Error(`[packages] entry ${index} of the "./migrations" export of ${installed.name} is neither ` +
|
|
304
|
+
`a migration class nor a { name, class } pair. Resolved from ${installed.manifestPath}.`);
|
|
305
|
+
}
|
|
306
|
+
const declaredName = isConstructor(entry)
|
|
307
|
+
? undefined
|
|
308
|
+
: entry.name;
|
|
309
|
+
if (typeof declaredName === 'string' && declaredName !== candidate.name) {
|
|
310
|
+
throw new Error(`[packages] the "./migrations" export of ${installed.name} declares migration ` +
|
|
311
|
+
`"${declaredName}" for a class named "${candidate.name}". mikro_orm_migrations ` +
|
|
312
|
+
`persists the class name, so the host would record one string and revert by another. ` +
|
|
313
|
+
`Resolved from ${installed.manifestPath}.`);
|
|
314
|
+
}
|
|
315
|
+
return {
|
|
316
|
+
moduleId: installed.id,
|
|
317
|
+
cls: candidate,
|
|
318
|
+
// Never omitted and never 'core'. The baseline block is a claim about
|
|
319
|
+
// *our* history (`migration-order.ts`), and an entry that lies about its
|
|
320
|
+
// origin joins a frozen prefix it has no business in.
|
|
321
|
+
origin: 'external',
|
|
322
|
+
};
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
/** Read a package's `./backend` export for the entity classes it declares. */
|
|
326
|
+
function entityClassesFrom(installed, exported) {
|
|
327
|
+
const declared = exported['entities'];
|
|
328
|
+
if (declared === undefined)
|
|
329
|
+
return [];
|
|
330
|
+
if (!Array.isArray(declared)) {
|
|
331
|
+
throw new Error(`[packages] the "./backend" export of ${installed.name} exports 'entities' that is not an ` +
|
|
332
|
+
`array. It is the list of entity classes the host's ORM registers. Resolved from ` +
|
|
333
|
+
`${installed.manifestPath}.`);
|
|
334
|
+
}
|
|
335
|
+
return declared.map((entry, index) => {
|
|
336
|
+
if (!isConstructor(entry)) {
|
|
337
|
+
throw new Error(`[packages] entry ${index} of the 'entities' export of ${installed.name} is not a class. ` +
|
|
338
|
+
`Resolved from ${installed.manifestPath}.`);
|
|
339
|
+
}
|
|
340
|
+
return entry;
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Every installed package's schema contribution, against explicit roots.
|
|
345
|
+
*
|
|
346
|
+
* Exported so a test can drive it over a `node_modules` tree on disk — the same
|
|
347
|
+
* entry point the deployment path takes, enumerated, `exports`-resolved and
|
|
348
|
+
* imported by the same code — rather than by handing a downstream function a
|
|
349
|
+
* pre-built entry (issue #130).
|
|
350
|
+
*/
|
|
351
|
+
export async function packageSchemaContributionsUnder(roots) {
|
|
352
|
+
const found = scan(roots);
|
|
353
|
+
assertNoModuleIdCollisions(claimsFor(found.packages));
|
|
354
|
+
const out = [];
|
|
355
|
+
for (const installed of found.packages) {
|
|
356
|
+
const migrationsEntry = resolveSubpath(installed, 'migrations');
|
|
357
|
+
const migrations = migrationsEntry === null
|
|
358
|
+
? []
|
|
359
|
+
: migrationEntriesFrom(installed, (await import(pathToFileURL(migrationsEntry).href)));
|
|
360
|
+
const backend = await importSubpath(installed, 'backend');
|
|
361
|
+
// The root export again — the same dynamic import the composer path makes,
|
|
362
|
+
// so the ESM cache answers it and this costs no second read.
|
|
363
|
+
const manifestEntry = await manifestEntryFor(installed);
|
|
364
|
+
out.push({
|
|
365
|
+
id: installed.id,
|
|
366
|
+
packageName: installed.name,
|
|
367
|
+
version: installed.version,
|
|
368
|
+
migrationsDirectory: migrationsEntry === null ? null : dirname(migrationsEntry),
|
|
369
|
+
migrations,
|
|
370
|
+
entities: backend === null ? [] : entityClassesFrom(installed, backend),
|
|
371
|
+
dependencies: manifestEntry?.manifest.dependencies ?? [],
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
return out;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* {@link packageSchemaContributionsUnder} over the roots this platform reads.
|
|
378
|
+
*
|
|
379
|
+
* Empty for an instance that installed no module package — every developer
|
|
380
|
+
* checkout and every test run — and empty means the ORM configuration is what
|
|
381
|
+
* it was before a package could ship schema at all.
|
|
382
|
+
*/
|
|
383
|
+
export async function discoverPackageSchema(env = process.env) {
|
|
384
|
+
return packageSchemaContributionsUnder(nodeModulesRootsFor(env));
|
|
385
|
+
}
|
|
386
|
+
//# sourceMappingURL=package-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-runtime.js","sourceRoot":"","sources":["../../src/packages/package-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { type TenantContext } from './tenant-context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derived-scope helpers for entities with no direct tenant column
|
|
4
|
+
* (feature 050, research.md §R7):
|
|
5
|
+
* - transitively-scoped (e.g. Invoice → Order.organizationId), and
|
|
6
|
+
* - rule-scoped (e.g. price_lists targeted via applicationRule),
|
|
7
|
+
* whose admin queries must intersect the actor's org scope explicitly because the
|
|
8
|
+
* automatic column filter cannot reach them.
|
|
9
|
+
*/
|
|
10
|
+
/** The org restriction implied by the ambient context, as a discriminated union. */
|
|
11
|
+
export type OrgConstraint = {
|
|
12
|
+
readonly kind: 'all';
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: 'single';
|
|
15
|
+
readonly organizationId: string | null;
|
|
16
|
+
} | {
|
|
17
|
+
readonly kind: 'set';
|
|
18
|
+
readonly organizationIds: readonly string[];
|
|
19
|
+
};
|
|
20
|
+
/** Compute the org constraint from a context (defaults to the ambient one). */
|
|
21
|
+
export declare function orgConstraintFor(ctx?: TenantContext | undefined): OrgConstraint;
|
|
22
|
+
/**
|
|
23
|
+
* Build a MikroORM `where` fragment that constrains an organization-id field to
|
|
24
|
+
* the ambient scope, for transitively/rule-scoped entities. `field` is the path
|
|
25
|
+
* to the org id (e.g. `'order.organizationId'` for Invoice, or `'organizationId'`).
|
|
26
|
+
* Returns `{}` (no restriction) for platform-admin / system scope.
|
|
27
|
+
*/
|
|
28
|
+
export declare function orgScopeWhere(field: string, ctx?: TenantContext): Record<string, unknown>;
|
|
29
|
+
/**
|
|
30
|
+
* Whether the ambient scope may act on `organizationId`. Platform-admin/system
|
|
31
|
+
* see all; a single-org actor only their org; a scoped admin only assigned orgs.
|
|
32
|
+
* Use to gate writes (inserts) that the column filter cannot reach — respond
|
|
33
|
+
* indistinguishably from "not found" (FR-008) when this returns false.
|
|
34
|
+
*/
|
|
35
|
+
export declare function isOrgInScope(organizationId: string, ctx?: TenantContext): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* For rule-scoped entities (price_lists): given the set of organizations a rule
|
|
38
|
+
* targets, decide whether the ambient scope may see it. Platform-admin/system
|
|
39
|
+
* see everything; a scoped admin sees a rule only if it targets at least one of
|
|
40
|
+
* their assigned orgs (or targets no org at all — a channel/global rule).
|
|
41
|
+
*/
|
|
42
|
+
export declare function ruleVisibleForScope(ruleTargetOrgIds: readonly string[], ctx?: TenantContext): boolean;
|
|
43
|
+
//# sourceMappingURL=derived-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derived-scope.d.ts","sourceRoot":"","sources":["../../src/tenancy/derived-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEtG;;;;;;;GAOG;AAEH,oFAAoF;AACpF,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAE1E,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,aAAa,GAAG,SAA8B,GAAG,aAAa,CAgBnG;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAUjF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAarG"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { getTenantContext, MissingTenantContextError } from './tenant-context.js';
|
|
2
|
+
/** Compute the org constraint from a context (defaults to the ambient one). */
|
|
3
|
+
export function orgConstraintFor(ctx = getTenantContext()) {
|
|
4
|
+
if (!ctx)
|
|
5
|
+
throw new MissingTenantContextError('derived-scope');
|
|
6
|
+
switch (ctx.mode) {
|
|
7
|
+
case 'all':
|
|
8
|
+
case 'system':
|
|
9
|
+
return { kind: 'all' };
|
|
10
|
+
case 'single-org':
|
|
11
|
+
// Null since D-178 only where `TenantContext`'s optional field is unset:
|
|
12
|
+
// a signed-in customer always carries an organisation, because
|
|
13
|
+
// `customer_accounts.organization_id` is `NOT NULL`. See
|
|
14
|
+
// `orgFilterCond`'s note in `filters.ts` — same coalesce, same reason it
|
|
15
|
+
// has no reachable caller.
|
|
16
|
+
return { kind: 'single', organizationId: ctx.organizationId ?? null };
|
|
17
|
+
case 'allowed-set':
|
|
18
|
+
return { kind: 'set', organizationIds: ctx.allowedOrganizationIds ?? [] };
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Build a MikroORM `where` fragment that constrains an organization-id field to
|
|
23
|
+
* the ambient scope, for transitively/rule-scoped entities. `field` is the path
|
|
24
|
+
* to the org id (e.g. `'order.organizationId'` for Invoice, or `'organizationId'`).
|
|
25
|
+
* Returns `{}` (no restriction) for platform-admin / system scope.
|
|
26
|
+
*/
|
|
27
|
+
export function orgScopeWhere(field, ctx) {
|
|
28
|
+
const constraint = orgConstraintFor(ctx);
|
|
29
|
+
switch (constraint.kind) {
|
|
30
|
+
case 'all':
|
|
31
|
+
return {};
|
|
32
|
+
case 'single':
|
|
33
|
+
return { [field]: constraint.organizationId };
|
|
34
|
+
case 'set':
|
|
35
|
+
return { [field]: { $in: [...constraint.organizationIds] } };
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Whether the ambient scope may act on `organizationId`. Platform-admin/system
|
|
40
|
+
* see all; a single-org actor only their org; a scoped admin only assigned orgs.
|
|
41
|
+
* Use to gate writes (inserts) that the column filter cannot reach — respond
|
|
42
|
+
* indistinguishably from "not found" (FR-008) when this returns false.
|
|
43
|
+
*/
|
|
44
|
+
export function isOrgInScope(organizationId, ctx) {
|
|
45
|
+
const constraint = orgConstraintFor(ctx);
|
|
46
|
+
switch (constraint.kind) {
|
|
47
|
+
case 'all':
|
|
48
|
+
return true;
|
|
49
|
+
case 'single':
|
|
50
|
+
return constraint.organizationId === organizationId;
|
|
51
|
+
case 'set':
|
|
52
|
+
return constraint.organizationIds.includes(organizationId);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* For rule-scoped entities (price_lists): given the set of organizations a rule
|
|
57
|
+
* targets, decide whether the ambient scope may see it. Platform-admin/system
|
|
58
|
+
* see everything; a scoped admin sees a rule only if it targets at least one of
|
|
59
|
+
* their assigned orgs (or targets no org at all — a channel/global rule).
|
|
60
|
+
*/
|
|
61
|
+
export function ruleVisibleForScope(ruleTargetOrgIds, ctx) {
|
|
62
|
+
const constraint = orgConstraintFor(ctx);
|
|
63
|
+
switch (constraint.kind) {
|
|
64
|
+
case 'all':
|
|
65
|
+
return true;
|
|
66
|
+
case 'single':
|
|
67
|
+
return ruleTargetOrgIds.length === 0 || (constraint.organizationId != null && ruleTargetOrgIds.includes(constraint.organizationId));
|
|
68
|
+
case 'set': {
|
|
69
|
+
if (ruleTargetOrgIds.length === 0)
|
|
70
|
+
return true;
|
|
71
|
+
const allowed = new Set(constraint.organizationIds);
|
|
72
|
+
return ruleTargetOrgIds.some((id) => allowed.has(id));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=derived-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derived-scope.js","sourceRoot":"","sources":["../../src/tenancy/derived-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAsB,MAAM,qBAAqB,CAAC;AAiBtG,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,MAAiC,gBAAgB,EAAE;IAClF,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAC/D,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACzB,KAAK,YAAY;YACf,yEAAyE;YACzE,+DAA+D;YAC/D,yDAAyD;YACzD,yEAAyE;YACzE,2BAA2B;YAC3B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;QACxE,KAAK,aAAa;YAChB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,sBAAsB,IAAI,EAAE,EAAE,CAAC;IAC9E,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,GAAmB;IAC9D,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,EAAE,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,cAAc,EAAE,CAAC;QAChD,KAAK,KAAK;YACR,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,cAAsB,EAAE,GAAmB;IACtE,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,UAAU,CAAC,cAAc,KAAK,cAAc,CAAC;QACtD,KAAK,KAAK;YACR,OAAO,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,gBAAmC,EAAE,GAAmB;IAC1F,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QACtI,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACpD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONLY sanctioned way to cross organizations (feature 050, FR-005 / FR-013).
|
|
3
|
+
*
|
|
4
|
+
* `withSystemScope` / `withOrgScope` are the single greppable tokens for
|
|
5
|
+
* scope-widening; the CI check forbids any other means (raw `setFilterParams`
|
|
6
|
+
* / `disableFilter` outside this layer). Every call requires a non-empty
|
|
7
|
+
* `reason` and emits one audit record so cross-org access is observable.
|
|
8
|
+
*/
|
|
9
|
+
export interface EscapeHatchAuditRecord {
|
|
10
|
+
readonly scope: 'system' | 'org';
|
|
11
|
+
readonly reason: string;
|
|
12
|
+
readonly organizationId?: string;
|
|
13
|
+
}
|
|
14
|
+
export type EscapeHatchAuditSink = (record: EscapeHatchAuditRecord) => void;
|
|
15
|
+
/** Wire the escape hatch to a real audit sink (e.g. AuditLogService). */
|
|
16
|
+
export declare function setEscapeHatchAuditSink(sink: EscapeHatchAuditSink): void;
|
|
17
|
+
/**
|
|
18
|
+
* Emit one escape-hatch audit record without entering a context.
|
|
19
|
+
*
|
|
20
|
+
* The kernel's `enterSystemScope` (feature 072) *starts* an execution that
|
|
21
|
+
* crosses organisations, where `withSystemScope` widens one that already exists.
|
|
22
|
+
* Both are cross-org access and both have to be observable, so the entry point
|
|
23
|
+
* reports through the same sink instead of growing a second, quieter one.
|
|
24
|
+
*/
|
|
25
|
+
export declare function recordEscapeHatchAudit(record: EscapeHatchAuditRecord): void;
|
|
26
|
+
/** Run `fn` crossing ALL organizations (reporting, reconciliation, migrations). */
|
|
27
|
+
export declare function withSystemScope<T>(reason: string, fn: () => Promise<T>): Promise<T>;
|
|
28
|
+
/** Run `fn` pinned to a single organization (e.g. a per-org background job). */
|
|
29
|
+
export declare function withOrgScope<T>(organizationId: string, reason: string, fn: () => Promise<T>): Promise<T>;
|
|
30
|
+
//# sourceMappingURL=escape-hatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape-hatch.d.ts","sourceRoot":"","sources":["../../src/tenancy/escape-hatch.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAmB5E,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAExE;AAQD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAG3E;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAInF;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAIxG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { runWithTenantContext } from './tenant-context.js';
|
|
2
|
+
import { systemTenantContext, orgPinnedTenantContext } from './resolve-tenant-context.js';
|
|
3
|
+
/**
|
|
4
|
+
* Default sink: one structured line on **stderr**. Composition may replace it
|
|
5
|
+
* with one that writes to AuditLogService (FR-013).
|
|
6
|
+
*
|
|
7
|
+
* stderr and not stdout, since feature 072 (T035): the CLI scripts now open
|
|
8
|
+
* their scope through `enterSystemScope`, which reports here, and several of
|
|
9
|
+
* them (`module:install --json` and friends) treat stdout as a machine-readable
|
|
10
|
+
* data channel. An audit line printed there is not a log entry, it is corrupt
|
|
11
|
+
* output. Nothing consumes this on stdout — in the server both streams land in
|
|
12
|
+
* the same log.
|
|
13
|
+
*/
|
|
14
|
+
let auditSink = (record) => {
|
|
15
|
+
process.stderr.write(`${JSON.stringify({ level: 'info', msg: 'tenant.escape_hatch', ...record })}\n`);
|
|
16
|
+
};
|
|
17
|
+
/** Wire the escape hatch to a real audit sink (e.g. AuditLogService). */
|
|
18
|
+
export function setEscapeHatchAuditSink(sink) {
|
|
19
|
+
auditSink = sink;
|
|
20
|
+
}
|
|
21
|
+
function requireReason(reason) {
|
|
22
|
+
if (!reason || reason.trim().length === 0) {
|
|
23
|
+
throw new Error('withSystemScope/withOrgScope requires a non-empty reason (feature 050, FR-005).');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Emit one escape-hatch audit record without entering a context.
|
|
28
|
+
*
|
|
29
|
+
* The kernel's `enterSystemScope` (feature 072) *starts* an execution that
|
|
30
|
+
* crosses organisations, where `withSystemScope` widens one that already exists.
|
|
31
|
+
* Both are cross-org access and both have to be observable, so the entry point
|
|
32
|
+
* reports through the same sink instead of growing a second, quieter one.
|
|
33
|
+
*/
|
|
34
|
+
export function recordEscapeHatchAudit(record) {
|
|
35
|
+
requireReason(record.reason);
|
|
36
|
+
auditSink(record);
|
|
37
|
+
}
|
|
38
|
+
/** Run `fn` crossing ALL organizations (reporting, reconciliation, migrations). */
|
|
39
|
+
export function withSystemScope(reason, fn) {
|
|
40
|
+
requireReason(reason);
|
|
41
|
+
auditSink({ scope: 'system', reason });
|
|
42
|
+
return runWithTenantContext(systemTenantContext(reason), fn);
|
|
43
|
+
}
|
|
44
|
+
/** Run `fn` pinned to a single organization (e.g. a per-org background job). */
|
|
45
|
+
export function withOrgScope(organizationId, reason, fn) {
|
|
46
|
+
requireReason(reason);
|
|
47
|
+
auditSink({ scope: 'org', reason, organizationId });
|
|
48
|
+
return runWithTenantContext(orgPinnedTenantContext(organizationId, reason), fn);
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=escape-hatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escape-hatch.js","sourceRoot":"","sources":["../../src/tenancy/escape-hatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAmB1F;;;;;;;;;;GAUG;AACH,IAAI,SAAS,GAAyB,CAAC,MAAM,EAAE,EAAE;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAChF,CAAC;AACJ,CAAC,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CAAC,IAA0B;IAChE,SAAS,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA8B;IACnE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAI,MAAc,EAAE,EAAoB;IACrE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAI,cAAsB,EAAE,MAAc,EAAE,EAAoB;IAC1F,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IACpD,OAAO,oBAAoB,CAAC,sBAAsB,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC"}
|