From 9cbd07a9bfb8ea22e031199db61432d5fb91e01d Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 2 May 2026 02:38:00 +0100 Subject: [PATCH] fix: include fetch timeout context in console logs --- src/utils/fetch-timeout.test.ts | 2 ++ src/utils/fetch-timeout.ts | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/utils/fetch-timeout.test.ts b/src/utils/fetch-timeout.test.ts index 80b8cba73ce..b0724d24c2c 100644 --- a/src/utils/fetch-timeout.test.ts +++ b/src/utils/fetch-timeout.test.ts @@ -37,6 +37,8 @@ describe("buildTimeoutAbortSignal", () => { timeoutMs: 25, operation: "unit-test", url: "https://example.com/v1/responses", + consoleMessage: + "fetch timeout after 25ms (elapsed 25ms) operation=unit-test url=https://example.com/v1/responses", }), ); diff --git a/src/utils/fetch-timeout.ts b/src/utils/fetch-timeout.ts index 16d5f30d916..52fe29d6335 100644 --- a/src/utils/fetch-timeout.ts +++ b/src/utils/fetch-timeout.ts @@ -64,9 +64,19 @@ function abortDueToTimeout( return; } const sanitizedUrl = sanitizeTimeoutLogUrl(url); + const elapsedMs = Math.max(0, Date.now() - startedAtMs); + const consoleMessage = [ + `fetch timeout after ${timeoutMs}ms`, + `(elapsed ${elapsedMs}ms)`, + operation ? `operation=${operation}` : null, + sanitizedUrl ? `url=${sanitizedUrl}` : null, + ] + .filter((part): part is string => Boolean(part)) + .join(" "); log.warn("fetch timeout reached; aborting operation", { timeoutMs, - elapsedMs: Math.max(0, Date.now() - startedAtMs), + elapsedMs, + consoleMessage, ...(operation ? { operation } : {}), ...(sanitizedUrl ? { url: sanitizedUrl } : {}), });