From 180249be26865f48c4774833a269d57331067bab Mon Sep 17 00:00:00 2001 From: Siwat Sirichai Date: Tue, 19 Aug 2025 19:00:37 +0700 Subject: [PATCH] feat: Bump version to 1.2.2 and improve event emission handling in SMTPOverWSClient to avoid race conditions --- package.json | 2 +- src/client.ts | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index fa7cbf8..7bf6651 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@siwats/mxrelay-consumer", - "version": "1.2.1", + "version": "1.2.2", "description": "An internal TypeScript client library for transporting SMTP messages", "main": "lib/index.js", "module": "lib/index.esm.js", diff --git a/src/client.ts b/src/client.ts index 4350f67..44f08e2 100644 --- a/src/client.ts +++ b/src/client.ts @@ -859,10 +859,16 @@ export class SMTPOverWSClient extends EventEmitter { data: message.type === 'authenticate_response' ? '[REDACTED]' : (message as any).data, raw: data.length > 200 ? data.substring(0, 200) + '...' : data }); - // Use setImmediate to avoid catching errors from event handlers - setImmediate(() => { + + // Emit authentication events immediately to avoid race conditions + if (message.type === SMTPOverWsMessageType.AUTHENTICATE_RESPONSE) { (this as any).emit(message.type, message); - }); + } else { + // Use setImmediate for other events to avoid catching errors from event handlers + setImmediate(() => { + (this as any).emit(message.type, message); + }); + } } catch (error) { this.logger.error('Failed to parse WebSocket message', { data, error }); this.emit('error', ErrorFactory.protocolError('Invalid message format', undefined, { data }));