From 02ca1d568e283b7e0c9bb94554ba704511a30a6e Mon Sep 17 00:00:00 2001 From: Lukas May Date: Fri, 6 Mar 2026 16:39:36 +0100 Subject: [PATCH] fix: Disable EventEmitter maxListeners warning for SSE subscriptions Each SSE client registers a listener per event type (30+ types), so a few concurrent connections easily exceed the previous limit of 100. Listeners are properly cleaned up on disconnect via eventBusIterable's finally block, so this is not a real leak. --- apps/server/events/bus.ts | 5 +++-- apps/server/test/integration/real-providers/harness.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/server/events/bus.ts b/apps/server/events/bus.ts index bce73ef..6843533 100644 --- a/apps/server/events/bus.ts +++ b/apps/server/events/bus.ts @@ -22,8 +22,9 @@ export class EventEmitterBus implements EventBus { constructor() { this.emitter = new EventEmitter(); - // Allow more listeners for complex systems - this.emitter.setMaxListeners(100); + // SSE subscriptions register per-event-type listeners (30+ types × N clients). + // Listeners are properly cleaned up on disconnect, so disable the warning. + this.emitter.setMaxListeners(0); } /** diff --git a/apps/server/test/integration/real-providers/harness.ts b/apps/server/test/integration/real-providers/harness.ts index f872229..34545f0 100644 --- a/apps/server/test/integration/real-providers/harness.ts +++ b/apps/server/test/integration/real-providers/harness.ts @@ -205,7 +205,7 @@ export async function createRealProviderHarness( const accountRepository = new DrizzleAccountRepository(db); const initiativeRepository = new DrizzleInitiativeRepository(db); - // Create event bus with capture (parent class already sets maxListeners to 100) + // Create event bus with capture (parent class disables maxListeners warning) const eventBus = new CapturingEventBus(); // Create REAL agent manager (not mock!)