fix: address code quality issues in session pool, approval, and main
- session.ts: add onReconnect callback so reconnected socket replaces stale pool entry - session-pool.ts: pass onReconnect to update pool on reconnect; add closeAll() to gracefully end WebSocket connections on shutdown - approval.ts: use approved flag so double-approval race (updateMany count=0) returns null instead of sending duplicate forward jobs - main.ts: wrap pool.add() in try/catch to continue if one account fails; replace silent groupMap fallback with explicit error log and early return; call pool.closeAll() before BullMQ shutdown to prevent hanging sockets - Tests: add closeAll() test to session-pool.test.ts; add double-approval race test to approval.test.ts (56 tests total, all passing) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -28,6 +28,10 @@ export class WhatsAppSessionPool {
|
||||
(msg) => onMessage(msg, accountId),
|
||||
(reaction) => onReaction(reaction, accountId),
|
||||
(groups) => onGroups(groups, accountId),
|
||||
(newSocket) => {
|
||||
logger.info({ accountId }, 'Session reconnected — updating pool');
|
||||
this.sessions.set(accountId, newSocket);
|
||||
},
|
||||
);
|
||||
this.sessions.set(accountId, sock);
|
||||
}
|
||||
@@ -57,4 +61,17 @@ export class WhatsAppSessionPool {
|
||||
logger.info({ accountId }, 'Session removed');
|
||||
}
|
||||
}
|
||||
|
||||
async closeAll(): Promise<void> {
|
||||
logger.info({ count: this.sessions.size }, 'Closing all WhatsApp sessions');
|
||||
for (const [accountId, sock] of this.sessions) {
|
||||
try {
|
||||
sock.end(undefined);
|
||||
logger.info({ accountId }, 'Session closed');
|
||||
} catch (err) {
|
||||
logger.error({ accountId, err }, 'Error closing session');
|
||||
}
|
||||
}
|
||||
this.sessions.clear();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user