From b4753a75cd0c0da3bcd2b0cdc1dc8eee191832ec Mon Sep 17 00:00:00 2001 From: "shaggy (mosaic-dev box)" Date: Sun, 9 Aug 2026 17:26:28 -0500 Subject: [PATCH] fix(gateway): gate FederationModule on tier federated (#1138) CaService hard-requires STEP_CA_URL/provisioner config at construction, so an unconditional FederationModule import makes every standalone/local boot die at DI time. Gate the module on loadConfig().tier === federated, matching the documented intent of the federation compose profile (must not start in non-federated dev). Verified in mosaic-dev box: standalone tier boots to "Gateway listening on port 14242" with bootstrap/socket.io/auth surfaces responding; federated tier path unchanged. --- apps/gateway/src/app.module.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/gateway/src/app.module.ts b/apps/gateway/src/app.module.ts index dc9a6e32..fd0016ad 100644 --- a/apps/gateway/src/app.module.ts +++ b/apps/gateway/src/app.module.ts @@ -26,6 +26,13 @@ import { WorkspaceModule } from './workspace/workspace.module.js'; import { QueueModule } from './queue/queue.module.js'; import { FederationModule } from './federation/federation.module.js'; import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler'; +import { loadConfig } from '@mosaicstack/config'; + +// Federation (step-ca client, enrollment, federation verbs) is only wired for +// tier 'federated' — CaService hard-requires STEP_CA_* at construction, which +// must not gate standalone/local boots (docker-compose.federated.yml: the +// federation profile "must not start in non-federated dev"). +const federationEnabled = loadConfig().tier === 'federated'; @Module({ imports: [ @@ -53,7 +60,7 @@ import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler'; QueueModule, ReloadModule, WorkspaceModule, - FederationModule, + ...(federationEnabled ? [FederationModule] : []), ], controllers: [HealthController], providers: [