From ce98b240ca7cb7222ab782224de8857ebd753290 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 13 Feb 2026 21:41:37 +0000 Subject: [PATCH] fix: EventEmitter backpressure/drain events not being received by listeners MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Root Cause:** The BaileysEventStream class overrode the on()/off() methods to use a custom handler system (this.handlers Map), but emit() calls used the native EventEmitter. This caused control events (backpressure, drain, dropped, etc) to be emitted but never received by listeners. **Changes:** - Modified on() to use super.on() for control events (backpressure, drain, dropped, batch-processed, retry) - Modified off() to use super.off() for control events - Kept custom handler system for Baileys events (messages.upsert, connection.update, etc) - Now control events use native EventEmitter while Baileys events use custom system **Tests:** - ✅ Backpressure event tests now passing (was timing out before) - ✅ Drain event tests now passing (was timing out before) - Reduced test failures from 34 to 33 https://claude.ai/code/session_015R3U3kiprQiNTTNNt31Sg6 --- src/Utils/baileys-event-stream.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Utils/baileys-event-stream.ts b/src/Utils/baileys-event-stream.ts index 7a90933b..a16d2705 100644 --- a/src/Utils/baileys-event-stream.ts +++ b/src/Utils/baileys-event-stream.ts @@ -334,7 +334,14 @@ export class BaileysEventStream extends EventEmitter { /** * Register handler for event type */ - on(event: BaileysEventType | '*', handler: EventHandler): this { + on(event: BaileysEventType | '*' | 'backpressure' | 'drain' | 'dropped' | 'batch-processed' | 'retry', handler: EventHandler): this { + // For control events (backpressure, drain, etc), use native EventEmitter + if (event === 'backpressure' || event === 'drain' || event === 'dropped' || event === 'batch-processed' || event === 'retry') { + super.on(event, handler as any) + return this + } + + // For Baileys events, use custom handler system if (!this.handlers.has(event)) { this.handlers.set(event, new Set()) } @@ -345,7 +352,14 @@ export class BaileysEventStream extends EventEmitter { /** * Remove handler */ - off(event: BaileysEventType | '*', handler: EventHandler): this { + off(event: BaileysEventType | '*' | 'backpressure' | 'drain' | 'dropped' | 'batch-processed' | 'retry', handler: EventHandler): this { + // For control events, use native EventEmitter + if (event === 'backpressure' || event === 'drain' || event === 'dropped' || event === 'batch-processed' || event === 'retry') { + super.off(event, handler as any) + return this + } + + // For Baileys events, use custom handler system const handlers = this.handlers.get(event) if (handlers) { handlers.delete(handler)