@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,77 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const healthResponseSchema = z.object({
|
|
3
|
+
status: z.enum(['ok', 'degraded']),
|
|
4
|
+
checks: z.object({
|
|
5
|
+
database: z.boolean(),
|
|
6
|
+
redis: z.boolean(),
|
|
7
|
+
meilisearch: z.boolean(),
|
|
8
|
+
}),
|
|
9
|
+
version: z.string(),
|
|
10
|
+
uptimeSeconds: z.number(),
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* The three probes, over the values a composition already holds. Carried across
|
|
14
|
+
* from the dissolved module's `registerModule` unchanged.
|
|
15
|
+
*/
|
|
16
|
+
export function platformHealthProbes(sources) {
|
|
17
|
+
return {
|
|
18
|
+
pingDatabase: async () => {
|
|
19
|
+
await sources.orm.em.getConnection().execute('select 1');
|
|
20
|
+
return true;
|
|
21
|
+
},
|
|
22
|
+
// No Redis in this deployment is not "healthy by omission": the endpoint
|
|
23
|
+
// reports what is reachable, and an absent client is not.
|
|
24
|
+
pingRedis: async () => sources.redis !== undefined && (await sources.redis.ping()) === 'PONG',
|
|
25
|
+
pingMeilisearch: async () => {
|
|
26
|
+
const base = process.env['MEILISEARCH_URL'] ?? 'http://localhost:7700';
|
|
27
|
+
const res = await fetch(`${base}/health`, { signal: AbortSignal.timeout(2000) });
|
|
28
|
+
return res.ok;
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* The probe as a plugin, ready to go into a composition's `modules` array.
|
|
34
|
+
*
|
|
35
|
+
* There are two composition roots — `composeApp` and the test kit's
|
|
36
|
+
* `composeTestServer` — and each assembles that array itself. They both call
|
|
37
|
+
* this, for the reason the test kit already gives about
|
|
38
|
+
* `registerRequestScopeHook`: one factory with two call sites is a shared
|
|
39
|
+
* seam, two hand-written registrations are a drift waiting to happen. The
|
|
40
|
+
* module this replaced existed in production and nowhere else for exactly that
|
|
41
|
+
* reason, its route having been wired by an inline plugin in one root only.
|
|
42
|
+
*/
|
|
43
|
+
export function healthRoutePlugin(sources) {
|
|
44
|
+
const deps = platformHealthProbes(sources);
|
|
45
|
+
return async (app) => {
|
|
46
|
+
await registerHealthRoutes(app, deps);
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
export async function registerHealthRoutes(app, deps) {
|
|
50
|
+
app.get('/api/v1/_health', async (_req, reply) => {
|
|
51
|
+
const [database, redis, meilisearch] = await Promise.all([
|
|
52
|
+
runCheck(deps.pingDatabase),
|
|
53
|
+
runCheck(deps.pingRedis),
|
|
54
|
+
runCheck(deps.pingMeilisearch),
|
|
55
|
+
]);
|
|
56
|
+
const allOk = database && redis && meilisearch;
|
|
57
|
+
const body = {
|
|
58
|
+
status: allOk ? 'ok' : 'degraded',
|
|
59
|
+
checks: { database, redis, meilisearch },
|
|
60
|
+
version: process.env['npm_package_version'] ?? '0.0.0',
|
|
61
|
+
uptimeSeconds: Math.round(process.uptime()),
|
|
62
|
+
};
|
|
63
|
+
// Return the reply (not a bare `reply.send()` in an async handler) — Fastify
|
|
64
|
+
// v5 otherwise treats the resolved `undefined` as a second payload and the
|
|
65
|
+
// onSend chain double-writes headers (ERR_HTTP_HEADERS_SENT → process crash).
|
|
66
|
+
return reply.status(allOk ? 200 : 503).send(body);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async function runCheck(fn) {
|
|
70
|
+
try {
|
|
71
|
+
return await fn();
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/http/health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The HTTP layer's published surface. Peer of `kernel/`, `events/`, `tenancy/`,
|
|
3
|
+
* `commands/`; becomes the `./http` subpath of `@endora-commerce/platform`
|
|
4
|
+
* (feature 080, D-160.1/D-160.7), and that subpath is the boundary a future
|
|
5
|
+
* `@endora-commerce/http` would take (D-160.6).
|
|
6
|
+
*
|
|
7
|
+
* **This barrel is a package boundary in waiting, so it carries this
|
|
8
|
+
* directory's symbols and nothing else.** Re-exporting a kernel or tenancy
|
|
9
|
+
* symbol here to save a consumer one import line spends the split option for a
|
|
10
|
+
* convenience.
|
|
11
|
+
*
|
|
12
|
+
* What is deliberately absent, and why — `contracts/host-package.md` §1.3/§1.4
|
|
13
|
+
* classifies each of these as host-internal reach that no packaged module may
|
|
14
|
+
* have:
|
|
15
|
+
*
|
|
16
|
+
* - `registerErrorEnvelope` / `ErrorEnvelopeOptions` (`error-envelope.ts`) — a
|
|
17
|
+
* composition root calls the registrar once and no module calls it at all.
|
|
18
|
+
* The file is deliberately **not** split: `ErrorEnvelopeOptions` is the
|
|
19
|
+
* injection seam D-52/D-53 cite for a platform file that needs something a
|
|
20
|
+
* module owns, and separating it from its handler would break that pattern.
|
|
21
|
+
* - `ModulePlugin` (`server.ts`) — a composed module ships `backend.ts` and
|
|
22
|
+
* uses `ctx.routes` (D-103). A module still carrying a `plugin.ts` converts
|
|
23
|
+
* before it can be packaged.
|
|
24
|
+
* - `testAdminUserId` / `TestActorCarrier` (`test-actor-carrier.ts`) — the file
|
|
25
|
+
* exists to narrow this repository's test-harness Fastify augmentation. An
|
|
26
|
+
* installed package has no relationship to that harness.
|
|
27
|
+
* - `ApiInterceptorRegistry` (`interceptors/`) — `ctx.interceptors` is the
|
|
28
|
+
* composed seam.
|
|
29
|
+
*
|
|
30
|
+
* **One import here is not an export**, and it is load-bearing rather than
|
|
31
|
+
* stylistic. `./request-actor.js` declares `request.actor` and
|
|
32
|
+
* `request.adminActor` on `FastifyRequest` and exports no symbol at all; an
|
|
33
|
+
* ambient augmentation reaches a program only if the file declaring it is *in*
|
|
34
|
+
* that program, so the barrel imports it for its side effect and every consumer
|
|
35
|
+
* of this subpath gets the declaration without naming a file
|
|
36
|
+
* (`specs/110-instance-repository/` T118b).
|
|
37
|
+
*
|
|
38
|
+
* Deleting it does not break a build *here* — the platform compiles as one
|
|
39
|
+
* program and `include` puts that file in it whatever anybody imports — it
|
|
40
|
+
* breaks `request.actor` in every consumer at once. Measured: with the line
|
|
41
|
+
* commented out and every package rebuilt, `pnpm --filter backend run
|
|
42
|
+
* typecheck` reports **29** `TS2339: Property 'actor' does not exist` against
|
|
43
|
+
* **0** with it.
|
|
44
|
+
*/
|
|
45
|
+
import './request-actor.js';
|
|
46
|
+
export { HttpError } from './error-envelope.js';
|
|
47
|
+
export { productAudienceOf, markPersonalisedPricing } from './product-audience.js';
|
|
48
|
+
export { StorefrontRevalidator } from './storefront-revalidator.js';
|
|
49
|
+
export { encodeCursor, decodeCursor } from './cursor.js';
|
|
50
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The HTTP layer's published surface. Peer of `kernel/`, `events/`, `tenancy/`,
|
|
3
|
+
* `commands/`; becomes the `./http` subpath of `@endora-commerce/platform`
|
|
4
|
+
* (feature 080, D-160.1/D-160.7), and that subpath is the boundary a future
|
|
5
|
+
* `@endora-commerce/http` would take (D-160.6).
|
|
6
|
+
*
|
|
7
|
+
* **This barrel is a package boundary in waiting, so it carries this
|
|
8
|
+
* directory's symbols and nothing else.** Re-exporting a kernel or tenancy
|
|
9
|
+
* symbol here to save a consumer one import line spends the split option for a
|
|
10
|
+
* convenience.
|
|
11
|
+
*
|
|
12
|
+
* What is deliberately absent, and why — `contracts/host-package.md` §1.3/§1.4
|
|
13
|
+
* classifies each of these as host-internal reach that no packaged module may
|
|
14
|
+
* have:
|
|
15
|
+
*
|
|
16
|
+
* - `registerErrorEnvelope` / `ErrorEnvelopeOptions` (`error-envelope.ts`) — a
|
|
17
|
+
* composition root calls the registrar once and no module calls it at all.
|
|
18
|
+
* The file is deliberately **not** split: `ErrorEnvelopeOptions` is the
|
|
19
|
+
* injection seam D-52/D-53 cite for a platform file that needs something a
|
|
20
|
+
* module owns, and separating it from its handler would break that pattern.
|
|
21
|
+
* - `ModulePlugin` (`server.ts`) — a composed module ships `backend.ts` and
|
|
22
|
+
* uses `ctx.routes` (D-103). A module still carrying a `plugin.ts` converts
|
|
23
|
+
* before it can be packaged.
|
|
24
|
+
* - `testAdminUserId` / `TestActorCarrier` (`test-actor-carrier.ts`) — the file
|
|
25
|
+
* exists to narrow this repository's test-harness Fastify augmentation. An
|
|
26
|
+
* installed package has no relationship to that harness.
|
|
27
|
+
* - `ApiInterceptorRegistry` (`interceptors/`) — `ctx.interceptors` is the
|
|
28
|
+
* composed seam.
|
|
29
|
+
*
|
|
30
|
+
* **One import here is not an export**, and it is load-bearing rather than
|
|
31
|
+
* stylistic. `./request-actor.js` declares `request.actor` and
|
|
32
|
+
* `request.adminActor` on `FastifyRequest` and exports no symbol at all; an
|
|
33
|
+
* ambient augmentation reaches a program only if the file declaring it is *in*
|
|
34
|
+
* that program, so the barrel imports it for its side effect and every consumer
|
|
35
|
+
* of this subpath gets the declaration without naming a file
|
|
36
|
+
* (`specs/110-instance-repository/` T118b).
|
|
37
|
+
*
|
|
38
|
+
* Deleting it does not break a build *here* — the platform compiles as one
|
|
39
|
+
* program and `include` puts that file in it whatever anybody imports — it
|
|
40
|
+
* breaks `request.actor` in every consumer at once. Measured: with the line
|
|
41
|
+
* commented out and every package rebuilt, `pnpm --filter backend run
|
|
42
|
+
* typecheck` reports **29** `TS2339: Property 'actor' does not exist` against
|
|
43
|
+
* **0** with it.
|
|
44
|
+
*/
|
|
45
|
+
import './request-actor.js';
|
|
46
|
+
export { HttpError } from './error-envelope.js';
|
|
47
|
+
export { productAudienceOf, markPersonalisedPricing } from './product-audience.js';
|
|
48
|
+
export { StorefrontRevalidator } from './storefront-revalidator.js';
|
|
49
|
+
export { encodeCursor, decodeCursor } from './cursor.js';
|
|
50
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FastifyReply, FastifyRequest, RouteOptions } from 'fastify';
|
|
2
|
+
import type { ApiInterceptorRegistry } from './registry.js';
|
|
3
|
+
/**
|
|
4
|
+
* `onRoute` listener that appends the pre-phase dispatcher to every route.
|
|
5
|
+
* Endpoints with no registered pre-interceptors pay one Map lookup.
|
|
6
|
+
*/
|
|
7
|
+
export declare function makePreDispatchOnRoute(registry: ApiInterceptorRegistry): (route: RouteOptions) => void;
|
|
8
|
+
/**
|
|
9
|
+
* Global `preSerialization` hook running post-interceptors over successful
|
|
10
|
+
* object payloads. Error responses (>= 400) — including envelopes produced by
|
|
11
|
+
* the error handler — pass through untouched.
|
|
12
|
+
*/
|
|
13
|
+
export declare function makePostDispatchPreSerialization(registry: ApiInterceptorRegistry): (request: FastifyRequest, reply: FastifyReply, payload: unknown) => Promise<unknown>;
|
|
14
|
+
//# sourceMappingURL=dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../../src/http/interceptors/dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EAEb,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AA8C5D;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,sBAAsB,GAC/B,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAwC/B;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,QAAQ,EAAE,sBAAsB,IAE7E,SAAS,cAAc,EACvB,OAAO,YAAY,EACnB,SAAS,OAAO,KACf,OAAO,CAAC,OAAO,CAAC,CAwBpB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { HttpError } from '../error-envelope.js';
|
|
2
|
+
/**
|
|
3
|
+
* Runtime dispatch for API interceptors (feature 060).
|
|
4
|
+
*
|
|
5
|
+
* Pre phase: an `onRoute` hook appends a dispatch function to the END of each
|
|
6
|
+
* route's `preHandler` chain, so pre-interceptors run after the route's own
|
|
7
|
+
* auth/authz guards and after Zod validation, immediately before the handler.
|
|
8
|
+
* (An app-level `preHandler` hook would run BEFORE route-level guards — that
|
|
9
|
+
* ordering would let interceptors run on unauthorized requests.)
|
|
10
|
+
*
|
|
11
|
+
* Post phase: a global `preSerialization` hook reshapes successful (<400)
|
|
12
|
+
* object payloads. Streaming/Buffer/string payloads bypass Fastify
|
|
13
|
+
* serialization entirely, so post-interceptors never touch them.
|
|
14
|
+
*/
|
|
15
|
+
function requestIdentity(request) {
|
|
16
|
+
return `${request.method.toUpperCase()} ${request.routeOptions.url ?? request.url}`;
|
|
17
|
+
}
|
|
18
|
+
function requestInfo(request, identity, reg) {
|
|
19
|
+
return {
|
|
20
|
+
method: request.method.toUpperCase(),
|
|
21
|
+
url: request.url,
|
|
22
|
+
identity,
|
|
23
|
+
headers: request.headers,
|
|
24
|
+
log: request.log.child({
|
|
25
|
+
interceptorModule: reg.module,
|
|
26
|
+
interceptorId: reg.id,
|
|
27
|
+
phase: reg.phase,
|
|
28
|
+
interceptorTarget: identity,
|
|
29
|
+
}),
|
|
30
|
+
raw: request,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* `onRoute` listener that appends the pre-phase dispatcher to every route.
|
|
35
|
+
* Endpoints with no registered pre-interceptors pay one Map lookup.
|
|
36
|
+
*/
|
|
37
|
+
export function makePreDispatchOnRoute(registry) {
|
|
38
|
+
const dispatchPre = async function dispatchApiInterceptorsPre(request, _reply) {
|
|
39
|
+
const identity = requestIdentity(request);
|
|
40
|
+
const entries = registry.preFor(identity);
|
|
41
|
+
if (entries.length === 0)
|
|
42
|
+
return;
|
|
43
|
+
for (const reg of entries) {
|
|
44
|
+
if (!registry.isModuleEnabled(reg.module))
|
|
45
|
+
continue;
|
|
46
|
+
const info = requestInfo(request, identity, reg);
|
|
47
|
+
try {
|
|
48
|
+
const outcome = await reg.handler({
|
|
49
|
+
request: info,
|
|
50
|
+
body: request.body,
|
|
51
|
+
query: request.query,
|
|
52
|
+
params: request.params,
|
|
53
|
+
});
|
|
54
|
+
if (outcome && typeof outcome === 'object' && 'body' in outcome) {
|
|
55
|
+
request.body = outcome.body;
|
|
56
|
+
}
|
|
57
|
+
info.log.debug('api interceptor (pre) applied');
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
if (err instanceof HttpError) {
|
|
61
|
+
// A veto is a normal business outcome, not a failure (FR-003/FR-009).
|
|
62
|
+
info.log.info({ code: err.code, statusCode: err.statusCode }, 'api interceptor vetoed request');
|
|
63
|
+
throw err;
|
|
64
|
+
}
|
|
65
|
+
info.log.error({ err }, 'api interceptor (pre) failed');
|
|
66
|
+
throw err;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
return (route) => {
|
|
71
|
+
const existing = route.preHandler;
|
|
72
|
+
const chain = existing === undefined ? [] : Array.isArray(existing) ? [...existing] : [existing];
|
|
73
|
+
chain.push(dispatchPre);
|
|
74
|
+
route.preHandler = chain;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Global `preSerialization` hook running post-interceptors over successful
|
|
79
|
+
* object payloads. Error responses (>= 400) — including envelopes produced by
|
|
80
|
+
* the error handler — pass through untouched.
|
|
81
|
+
*/
|
|
82
|
+
export function makePostDispatchPreSerialization(registry) {
|
|
83
|
+
return async function dispatchApiInterceptorsPost(request, reply, payload) {
|
|
84
|
+
if (reply.statusCode >= 400)
|
|
85
|
+
return payload;
|
|
86
|
+
const identity = requestIdentity(request);
|
|
87
|
+
const entries = registry.postFor(identity);
|
|
88
|
+
if (entries.length === 0)
|
|
89
|
+
return payload;
|
|
90
|
+
let current = payload;
|
|
91
|
+
for (const reg of entries) {
|
|
92
|
+
if (!registry.isModuleEnabled(reg.module))
|
|
93
|
+
continue;
|
|
94
|
+
const info = requestInfo(request, identity, reg);
|
|
95
|
+
try {
|
|
96
|
+
const outcome = await reg.handler({
|
|
97
|
+
request: info,
|
|
98
|
+
statusCode: reply.statusCode,
|
|
99
|
+
payload: current,
|
|
100
|
+
});
|
|
101
|
+
if (outcome !== undefined)
|
|
102
|
+
current = outcome;
|
|
103
|
+
info.log.debug('api interceptor (post) applied');
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
info.log.error({ err }, 'api interceptor (post) failed');
|
|
107
|
+
throw err;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return current;
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../../../src/http/interceptors/dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ApiInterceptorRegistry, type ApiInterceptorRegistryOptions } from './registry.js';
|
|
2
|
+
export { RouteTable, type RouteTableEntry } from './route-table.js';
|
|
3
|
+
export { makePreDispatchOnRoute, makePostDispatchPreSerialization } from './dispatch.js';
|
|
4
|
+
export { validateRegistrations } from './validation.js';
|
|
5
|
+
export type { InterceptorListItem, InterceptorPhase, InterceptorRegistration, InterceptorRequestInfo, PostInterceptorContext, PostInterceptorHandler, PreInterceptorContext, PreInterceptorHandler, ResolvedRegistration, } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/http/interceptors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ApiInterceptorRegistry } from './registry.js';
|
|
2
|
+
export { RouteTable } from './route-table.js';
|
|
3
|
+
export { makePreDispatchOnRoute, makePostDispatchPreSerialization } from './dispatch.js';
|
|
4
|
+
export { validateRegistrations } from './validation.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/http/interceptors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAsC,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { InterceptorListItem, InterceptorRegistration, ResolvedRegistration } from './types.js';
|
|
2
|
+
export interface ApiInterceptorRegistryOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Lifecycle gate consulted per execution. Composition wires this to the
|
|
5
|
+
* `_lifecycle` enabled-set cache; the registry itself never imports the
|
|
6
|
+
* lifecycle module (Principle I). Defaults to always-enabled (unit tests,
|
|
7
|
+
* bare harnesses).
|
|
8
|
+
*/
|
|
9
|
+
isModuleEnabled?: (moduleId: string) => boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Central registration point for API interceptors (feature 060).
|
|
13
|
+
*
|
|
14
|
+
* One instance per composed application. Modules receive the handle through
|
|
15
|
+
* their plugin factory options (core) or `OverlayModuleContext` (overlay) and
|
|
16
|
+
* call `register()` during composition. `buildServer` seals the registry in
|
|
17
|
+
* an `onReady` hook after boot validation — the dispatch index is immutable
|
|
18
|
+
* once traffic can flow.
|
|
19
|
+
*/
|
|
20
|
+
export declare class ApiInterceptorRegistry {
|
|
21
|
+
#private;
|
|
22
|
+
readonly isModuleEnabled: (moduleId: string) => boolean;
|
|
23
|
+
constructor(options?: ApiInterceptorRegistryOptions);
|
|
24
|
+
register(registration: InterceptorRegistration): void;
|
|
25
|
+
/** All raw registrations — consumed by boot validation. */
|
|
26
|
+
registrations(): readonly ResolvedRegistration[];
|
|
27
|
+
/**
|
|
28
|
+
* Freeze the registry and build the per-identity dispatch index.
|
|
29
|
+
* Called once from `buildServer`'s onReady hook after boot validation.
|
|
30
|
+
* Idempotent so repeated `app.ready()` calls are harmless.
|
|
31
|
+
*/
|
|
32
|
+
seal(): void;
|
|
33
|
+
/** Pre-phase entries for an identity, in execution order. Empty before seal. */
|
|
34
|
+
preFor(identity: string): readonly ResolvedRegistration[];
|
|
35
|
+
/** Post-phase entries for an identity, in execution order. Empty before seal. */
|
|
36
|
+
postFor(identity: string): readonly ResolvedRegistration[];
|
|
37
|
+
/**
|
|
38
|
+
* The execution plan: one row per (target, registration), sorted by target,
|
|
39
|
+
* then phase (pre before post), then execution order. Serves the read-only
|
|
40
|
+
* admin diagnostics endpoint and tests.
|
|
41
|
+
*/
|
|
42
|
+
list(): InterceptorListItem[];
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/http/interceptors/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,6BAA6B;IAC5C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;CACjD;AAOD;;;;;;;;GAQG;AACH,qBAAa,sBAAsB;;IACjC,QAAQ,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;gBAO5C,OAAO,GAAE,6BAAkC;IAIvD,QAAQ,CAAC,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAkCrD,2DAA2D;IAC3D,aAAa,IAAI,SAAS,oBAAoB,EAAE;IAIhD;;;;OAIG;IACH,IAAI,IAAI,IAAI;IAmBZ,gFAAgF;IAChF,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,oBAAoB,EAAE;IAIzD,iFAAiF;IACjF,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,oBAAoB,EAAE;IAI1D;;;;OAIG;IACH,IAAI,IAAI,mBAAmB,EAAE;CAc9B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
const TARGET_RE = /^(GET|POST|PUT|PATCH|DELETE|OPTIONS) \/\S+$/;
|
|
2
|
+
/**
|
|
3
|
+
* Central registration point for API interceptors (feature 060).
|
|
4
|
+
*
|
|
5
|
+
* One instance per composed application. Modules receive the handle through
|
|
6
|
+
* their plugin factory options (core) or `OverlayModuleContext` (overlay) and
|
|
7
|
+
* call `register()` during composition. `buildServer` seals the registry in
|
|
8
|
+
* an `onReady` hook after boot validation — the dispatch index is immutable
|
|
9
|
+
* once traffic can flow.
|
|
10
|
+
*/
|
|
11
|
+
export class ApiInterceptorRegistry {
|
|
12
|
+
isModuleEnabled;
|
|
13
|
+
#registrations = [];
|
|
14
|
+
#keys = new Set();
|
|
15
|
+
#sealed = false;
|
|
16
|
+
#index = new Map();
|
|
17
|
+
constructor(options = {}) {
|
|
18
|
+
this.isModuleEnabled = options.isModuleEnabled ?? (() => true);
|
|
19
|
+
}
|
|
20
|
+
register(registration) {
|
|
21
|
+
if (this.#sealed) {
|
|
22
|
+
throw new Error(`[api-interceptor] registry is sealed — module '${registration.module}' tried to register ` +
|
|
23
|
+
`interceptor '${registration.id}' after app.ready(). Register during composition.`);
|
|
24
|
+
}
|
|
25
|
+
const key = `${registration.module}\0${registration.id}`;
|
|
26
|
+
if (this.#keys.has(key)) {
|
|
27
|
+
throw new Error(`[api-interceptor] duplicate registration: module '${registration.module}' interceptor ` +
|
|
28
|
+
`'${registration.id}' is already registered.`);
|
|
29
|
+
}
|
|
30
|
+
const rawTargets = Array.isArray(registration.target)
|
|
31
|
+
? registration.target
|
|
32
|
+
: [registration.target];
|
|
33
|
+
if (rawTargets.length === 0) {
|
|
34
|
+
throw new Error(`[api-interceptor] module '${registration.module}' interceptor '${registration.id}' declares no target.`);
|
|
35
|
+
}
|
|
36
|
+
const targets = rawTargets.map((t) => normalizeTarget(registration, t));
|
|
37
|
+
this.#keys.add(key);
|
|
38
|
+
this.#registrations.push({
|
|
39
|
+
module: registration.module,
|
|
40
|
+
id: registration.id,
|
|
41
|
+
phase: registration.phase,
|
|
42
|
+
order: registration.order ?? 0,
|
|
43
|
+
targets,
|
|
44
|
+
handler: registration.handler,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/** All raw registrations — consumed by boot validation. */
|
|
48
|
+
registrations() {
|
|
49
|
+
return this.#registrations;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Freeze the registry and build the per-identity dispatch index.
|
|
53
|
+
* Called once from `buildServer`'s onReady hook after boot validation.
|
|
54
|
+
* Idempotent so repeated `app.ready()` calls are harmless.
|
|
55
|
+
*/
|
|
56
|
+
seal() {
|
|
57
|
+
if (this.#sealed)
|
|
58
|
+
return;
|
|
59
|
+
this.#sealed = true;
|
|
60
|
+
for (const reg of this.#registrations) {
|
|
61
|
+
for (const target of reg.targets) {
|
|
62
|
+
let entry = this.#index.get(target);
|
|
63
|
+
if (!entry) {
|
|
64
|
+
entry = { pre: [], post: [] };
|
|
65
|
+
this.#index.set(target, entry);
|
|
66
|
+
}
|
|
67
|
+
entry[reg.phase].push(reg);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
for (const entry of this.#index.values()) {
|
|
71
|
+
entry.pre.sort(executionOrder);
|
|
72
|
+
entry.post.sort(executionOrder);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Pre-phase entries for an identity, in execution order. Empty before seal. */
|
|
76
|
+
preFor(identity) {
|
|
77
|
+
return this.#index.get(identity)?.pre ?? EMPTY;
|
|
78
|
+
}
|
|
79
|
+
/** Post-phase entries for an identity, in execution order. Empty before seal. */
|
|
80
|
+
postFor(identity) {
|
|
81
|
+
return this.#index.get(identity)?.post ?? EMPTY;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* The execution plan: one row per (target, registration), sorted by target,
|
|
85
|
+
* then phase (pre before post), then execution order. Serves the read-only
|
|
86
|
+
* admin diagnostics endpoint and tests.
|
|
87
|
+
*/
|
|
88
|
+
list() {
|
|
89
|
+
const items = [];
|
|
90
|
+
const targets = [...this.#index.keys()].sort();
|
|
91
|
+
for (const target of targets) {
|
|
92
|
+
const entry = this.#index.get(target);
|
|
93
|
+
if (!entry)
|
|
94
|
+
continue;
|
|
95
|
+
for (const phase of ['pre', 'post']) {
|
|
96
|
+
for (const reg of entry[phase]) {
|
|
97
|
+
items.push({ target, phase, order: reg.order, module: reg.module, id: reg.id });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return items;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const EMPTY = Object.freeze([]);
|
|
105
|
+
function executionOrder(a, b) {
|
|
106
|
+
if (a.order !== b.order)
|
|
107
|
+
return a.order - b.order;
|
|
108
|
+
if (a.module !== b.module)
|
|
109
|
+
return a.module < b.module ? -1 : 1;
|
|
110
|
+
if (a.id !== b.id)
|
|
111
|
+
return a.id < b.id ? -1 : 1;
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
function normalizeTarget(registration, raw) {
|
|
115
|
+
const spaceIdx = raw.indexOf(' ');
|
|
116
|
+
const candidate = spaceIdx > 0 ? `${raw.slice(0, spaceIdx).toUpperCase()}${raw.slice(spaceIdx)}` : raw;
|
|
117
|
+
if (!TARGET_RE.test(candidate)) {
|
|
118
|
+
throw new Error(`[api-interceptor] module '${registration.module}' interceptor '${registration.id}' has a ` +
|
|
119
|
+
`malformed target '${raw}' — expected '<METHOD> /path/pattern', e.g. 'POST /api/v1/orders'.`);
|
|
120
|
+
}
|
|
121
|
+
return candidate;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/http/interceptors/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { RouteOptions } from 'fastify';
|
|
2
|
+
declare module 'fastify' {
|
|
3
|
+
interface FastifyContextConfig {
|
|
4
|
+
/**
|
|
5
|
+
* Marks a route whose payload is a binary/file stream (PDF, CSV, image,
|
|
6
|
+
* XML download). Post-phase interceptors targeting such routes are
|
|
7
|
+
* rejected at boot validation (feature 060).
|
|
8
|
+
*/
|
|
9
|
+
streamingResponse?: boolean;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/** What boot validation and dispatch need to know about one mounted route. */
|
|
13
|
+
export interface RouteTableEntry {
|
|
14
|
+
readonly identity: string;
|
|
15
|
+
readonly streamingResponse: boolean;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Collects every mounted route's endpoint identity via a Fastify `onRoute`
|
|
19
|
+
* hook (feature 060). `onRoute` hooks are inherited by encapsulated child
|
|
20
|
+
* contexts, so routes mounted inside `defineModuleRoutes` wrappers are
|
|
21
|
+
* covered uniformly. The identity key — `"<METHOD> <pattern>"` — matches
|
|
22
|
+
* both the OpenAPI auto-registration dedupe key and what
|
|
23
|
+
* `request.routeOptions` yields at dispatch time.
|
|
24
|
+
*/
|
|
25
|
+
export declare class RouteTable {
|
|
26
|
+
#private;
|
|
27
|
+
/** Bound listener — pass directly to `app.addHook('onRoute', ...)`. */
|
|
28
|
+
readonly onRouteListener: (route: RouteOptions) => void;
|
|
29
|
+
has(identity: string): boolean;
|
|
30
|
+
get(identity: string): RouteTableEntry | undefined;
|
|
31
|
+
entries(): readonly RouteTableEntry[];
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=route-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-table.d.ts","sourceRoot":"","sources":["../../../src/http/interceptors/route-table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,QAAQ,SAAS,CAAC;IACvB,UAAU,oBAAoB;QAC5B;;;;WAIG;QACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B;CACF;AAED,8EAA8E;AAC9E,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACrC;AAKD;;;;;;;GAOG;AACH,qBAAa,UAAU;;IAGrB,uEAAuE;IACvE,QAAQ,CAAC,eAAe,GAAI,OAAO,YAAY,KAAG,IAAI,CAapD;IAEF,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI9B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIlD,OAAO,IAAI,SAAS,eAAe,EAAE;CAGtC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Routes whose payload is not interceptable and that never appear in the table. */
|
|
2
|
+
const EXCLUDED_URLS = new Set(['/api/v1/_openapi.json', '/api/v1/_docs']);
|
|
3
|
+
/**
|
|
4
|
+
* Collects every mounted route's endpoint identity via a Fastify `onRoute`
|
|
5
|
+
* hook (feature 060). `onRoute` hooks are inherited by encapsulated child
|
|
6
|
+
* contexts, so routes mounted inside `defineModuleRoutes` wrappers are
|
|
7
|
+
* covered uniformly. The identity key — `"<METHOD> <pattern>"` — matches
|
|
8
|
+
* both the OpenAPI auto-registration dedupe key and what
|
|
9
|
+
* `request.routeOptions` yields at dispatch time.
|
|
10
|
+
*/
|
|
11
|
+
export class RouteTable {
|
|
12
|
+
#map = new Map();
|
|
13
|
+
/** Bound listener — pass directly to `app.addHook('onRoute', ...)`. */
|
|
14
|
+
onRouteListener = (route) => {
|
|
15
|
+
if (EXCLUDED_URLS.has(route.url))
|
|
16
|
+
return;
|
|
17
|
+
const methods = Array.isArray(route.method) ? route.method : [route.method];
|
|
18
|
+
const streamingResponse = route.config?.streamingResponse === true;
|
|
19
|
+
for (const m of methods) {
|
|
20
|
+
const method = String(m).toUpperCase();
|
|
21
|
+
// Fastify auto-registers a HEAD mirror for every GET; it is not an
|
|
22
|
+
// interceptable endpoint identity of its own.
|
|
23
|
+
if (method === 'HEAD')
|
|
24
|
+
continue;
|
|
25
|
+
const identity = `${method} ${route.url}`;
|
|
26
|
+
this.#map.set(identity, { identity, streamingResponse });
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
has(identity) {
|
|
30
|
+
return this.#map.has(identity);
|
|
31
|
+
}
|
|
32
|
+
get(identity) {
|
|
33
|
+
return this.#map.get(identity);
|
|
34
|
+
}
|
|
35
|
+
entries() {
|
|
36
|
+
return [...this.#map.values()];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=route-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-table.js","sourceRoot":"","sources":["../../../src/http/interceptors/route-table.ts"],"names":[],"mappings":"AAmBA,oFAAoF;AACpF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,EAAE,eAAe,CAAC,CAAC,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,OAAO,UAAU;IACrB,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE1C,uEAAuE;IAC9D,eAAe,GAAG,CAAC,KAAmB,EAAQ,EAAE;QACvD,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAO;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5E,MAAM,iBAAiB,GACpB,KAAK,CAAC,MAAsD,EAAE,iBAAiB,KAAK,IAAI,CAAC;QAC5F,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACvC,mEAAmE;YACnE,8CAA8C;YAC9C,IAAI,MAAM,KAAK,MAAM;gBAAE,SAAS;YAChC,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC,CAAC;IAEF,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,CAAC;CACF"}
|