From f0a0c97b5ec831da9553fde10d8a2037e523f962 Mon Sep 17 00:00:00 2001 From: nyatoru Date: Mon, 23 Feb 2026 06:36:39 +0700 Subject: [PATCH] feat(tokenHealthCheck): add request coalescing to shouldHideLogs --- src/lib/tokenHealthCheck.ts | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/lib/tokenHealthCheck.ts b/src/lib/tokenHealthCheck.ts index 0a2ac7dfa4..bbe933ada5 100644 --- a/src/lib/tokenHealthCheck.ts +++ b/src/lib/tokenHealthCheck.ts @@ -25,21 +25,37 @@ const LOG_PREFIX = "[HealthCheck]"; // ── Logging helper ─────────────────────────────────────────────────────────── let cachedHideLogs: boolean | null = null; let cacheTimestamp = 0; +let pendingHideLogs: Promise | null = null; const CACHE_TTL = 30_000; // Cache settings for 30 seconds async function shouldHideLogs(): Promise { const now = Date.now(); + + // Return cached value if valid if (cachedHideLogs !== null && now - cacheTimestamp < CACHE_TTL) { return cachedHideLogs; } - try { - const settings = await getSettings(); - cachedHideLogs = settings.hideHealthCheckLogs === true; - cacheTimestamp = now; - return cachedHideLogs; - } catch { - return false; + + // Return pending promise if a query is already in progress (request coalescing) + if (pendingHideLogs !== null) { + return pendingHideLogs; } + + // Create new promise for DB query + pendingHideLogs = (async () => { + try { + const settings = await getSettings(); + cachedHideLogs = settings.hideHealthCheckLogs === true; + cacheTimestamp = now; + return cachedHideLogs; + } catch { + return false; + } finally { + pendingHideLogs = null; + } + })(); + + return pendingHideLogs; } function log(message: string, ...args: any[]) {