From ded652382db5aadfed9e0d4a0b1d806d0adbfdc1 Mon Sep 17 00:00:00 2001 From: Schalli Date: Sat, 27 Jun 2026 17:21:01 +0200 Subject: [PATCH] fix(07): WR-01 close nodemailer transport in finally to prevent pool leak Each sendExportEmail call created a new nodemailer transport which was never closed, leaving the internal SMTP connection pool alive. With 3-retry backoff, up to 3 leaked transports per invoice accumulate over time and can exhaust OS socket limits. Add transport.close() in a finally block. --- apps/api/src/dkv/dkv-mail.service.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/api/src/dkv/dkv-mail.service.ts b/apps/api/src/dkv/dkv-mail.service.ts index 60c28fe..de276b5 100644 --- a/apps/api/src/dkv/dkv-mail.service.ts +++ b/apps/api/src/dkv/dkv-mail.service.ts @@ -103,6 +103,11 @@ export class DkvMailService { ); // RETHROW — caller (DkvService) handles exponential backoff retries (D-16) throw error; + } finally { + // Always close the transport to release the SMTP connection pool (WR-01). + // Without this, repeated sends (especially with retry backoff) accumulate + // open connections and can exhaust OS socket limits. + transport.close(); } } }