diff --git a/src/agents/model-scan.ts b/src/agents/model-scan.ts index 996a367278..5554692e4a 100644 --- a/src/agents/model-scan.ts +++ b/src/agents/model-scan.ts @@ -185,7 +185,7 @@ async function withTimeout( fn: (signal: AbortSignal) => Promise, ): Promise { const controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), timeoutMs); + const timer = setTimeout(controller.abort.bind(controller), timeoutMs); try { return await fn(controller.signal); } finally { diff --git a/src/agents/pi-tools.abort.ts b/src/agents/pi-tools.abort.ts index c7e50cab05..04152a3588 100644 --- a/src/agents/pi-tools.abort.ts +++ b/src/agents/pi-tools.abort.ts @@ -36,7 +36,7 @@ function combineAbortSignals(a?: AbortSignal, b?: AbortSignal): AbortSignal | un } const controller = new AbortController(); - const onAbort = () => controller.abort(); + const onAbort = controller.abort.bind(controller); a?.addEventListener("abort", onAbort, { once: true }); b?.addEventListener("abort", onAbort, { once: true }); return controller.signal; diff --git a/src/agents/sandbox/browser.ts b/src/agents/sandbox/browser.ts index dec93370aa..f4b268fb15 100644 --- a/src/agents/sandbox/browser.ts +++ b/src/agents/sandbox/browser.ts @@ -24,7 +24,7 @@ async function waitForSandboxCdp(params: { cdpPort: number; timeoutMs: number }) while (Date.now() < deadline) { try { const ctrl = new AbortController(); - const t = setTimeout(() => ctrl.abort(), 1000); + const t = setTimeout(ctrl.abort.bind(ctrl), 1000); try { const res = await fetch(url, { signal: ctrl.signal }); if (res.ok) { diff --git a/src/agents/tools/web-shared.ts b/src/agents/tools/web-shared.ts index d172a06341..2a7353796e 100644 --- a/src/agents/tools/web-shared.ts +++ b/src/agents/tools/web-shared.ts @@ -65,7 +65,7 @@ export function withTimeout(signal: AbortSignal | undefined, timeoutMs: number): return signal ?? new AbortController().signal; } const controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), timeoutMs); + const timer = setTimeout(controller.abort.bind(controller), timeoutMs); if (signal) { signal.addEventListener( "abort", diff --git a/src/browser/cdp.helpers.ts b/src/browser/cdp.helpers.ts index 2c3f4c0af0..dc7e681483 100644 --- a/src/browser/cdp.helpers.ts +++ b/src/browser/cdp.helpers.ts @@ -114,7 +114,7 @@ function createCdpSender(ws: WebSocket) { export async function fetchJson(url: string, timeoutMs = 1500, init?: RequestInit): Promise { const ctrl = new AbortController(); - const t = setTimeout(() => ctrl.abort(), timeoutMs); + const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs); try { const headers = getHeadersWithAuth(url, (init?.headers as Record) || {}); const res = await fetch(url, { ...init, headers, signal: ctrl.signal }); @@ -129,7 +129,7 @@ export async function fetchJson(url: string, timeoutMs = 1500, init?: Request export async function fetchOk(url: string, timeoutMs = 1500, init?: RequestInit): Promise { const ctrl = new AbortController(); - const t = setTimeout(() => ctrl.abort(), timeoutMs); + const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs); try { const headers = getHeadersWithAuth(url, (init?.headers as Record) || {}); const res = await fetch(url, { ...init, headers, signal: ctrl.signal }); diff --git a/src/browser/chrome.ts b/src/browser/chrome.ts index 8c854caece..3d944aa35d 100644 --- a/src/browser/chrome.ts +++ b/src/browser/chrome.ts @@ -80,7 +80,7 @@ type ChromeVersion = { async function fetchChromeVersion(cdpUrl: string, timeoutMs = 500): Promise { const ctrl = new AbortController(); - const t = setTimeout(() => ctrl.abort(), timeoutMs); + const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs); try { const versionUrl = appendCdpPath(cdpUrl, "/json/version"); const res = await fetch(versionUrl, { diff --git a/src/browser/server-context.ts b/src/browser/server-context.ts index 7957b3bfaa..d6e0e8f047 100644 --- a/src/browser/server-context.ts +++ b/src/browser/server-context.ts @@ -51,7 +51,7 @@ function normalizeWsUrl(raw: string | undefined, cdpBaseUrl: string): string | u async function fetchJson(url: string, timeoutMs = 1500, init?: RequestInit): Promise { const ctrl = new AbortController(); - const t = setTimeout(() => ctrl.abort(), timeoutMs); + const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs); try { const headers = getHeadersWithAuth(url, (init?.headers as Record) || {}); const res = await fetch(url, { ...init, headers, signal: ctrl.signal }); @@ -66,7 +66,7 @@ async function fetchJson(url: string, timeoutMs = 1500, init?: RequestInit): async function fetchOk(url: string, timeoutMs = 1500, init?: RequestInit): Promise { const ctrl = new AbortController(); - const t = setTimeout(() => ctrl.abort(), timeoutMs); + const t = setTimeout(ctrl.abort.bind(ctrl), timeoutMs); try { const headers = getHeadersWithAuth(url, (init?.headers as Record) || {}); const res = await fetch(url, { ...init, headers, signal: ctrl.signal }); diff --git a/src/infra/fetch.ts b/src/infra/fetch.ts index 86fd789dd9..23791227d8 100644 --- a/src/infra/fetch.ts +++ b/src/infra/fetch.ts @@ -42,7 +42,7 @@ export function wrapFetchWithAbortSignal(fetchImpl: typeof fetch): typeof fetch return fetchImpl(input, patchedInit); } const controller = new AbortController(); - const onAbort = () => controller.abort(); + const onAbort = controller.abort.bind(controller); if (signal.aborted) { controller.abort(); } else { diff --git a/src/infra/net/fetch-guard.ts b/src/infra/net/fetch-guard.ts index 21f6655cec..ac51bc2faf 100644 --- a/src/infra/net/fetch-guard.ts +++ b/src/infra/net/fetch-guard.ts @@ -50,8 +50,8 @@ function buildAbortSignal(params: { timeoutMs?: number; signal?: AbortSignal }): } const controller = new AbortController(); - const timeoutId = setTimeout(() => controller.abort(), timeoutMs); - const onAbort = () => controller.abort(); + const timeoutId = setTimeout(controller.abort.bind(controller), timeoutMs); + const onAbort = controller.abort.bind(controller); if (signal) { if (signal.aborted) { controller.abort(); diff --git a/src/infra/provider-usage.fetch.shared.ts b/src/infra/provider-usage.fetch.shared.ts index 3e80622779..a4eb1ee630 100644 --- a/src/infra/provider-usage.fetch.shared.ts +++ b/src/infra/provider-usage.fetch.shared.ts @@ -5,7 +5,7 @@ export async function fetchJson( fetchFn: typeof fetch, ): Promise { const controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), timeoutMs); + const timer = setTimeout(controller.abort.bind(controller), timeoutMs); try { return await fetchFn(url, { ...init, signal: controller.signal }); } finally { diff --git a/src/tts/tts.ts b/src/tts/tts.ts index 39405d2c3b..4b4b3197c9 100644 --- a/src/tts/tts.ts +++ b/src/tts/tts.ts @@ -937,7 +937,7 @@ async function summarizeText(params: { try { const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), timeoutMs); + const timeout = setTimeout(controller.abort.bind(controller), timeoutMs); try { const res = await completeSimple( @@ -1038,7 +1038,7 @@ async function elevenLabsTTS(params: { const normalizedSeed = normalizeSeed(seed); const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), timeoutMs); + const timeout = setTimeout(controller.abort.bind(controller), timeoutMs); try { const url = new URL(`${normalizeElevenLabsBaseUrl(baseUrl)}/v1/text-to-speech/${voiceId}`); @@ -1098,7 +1098,7 @@ async function openaiTTS(params: { } const controller = new AbortController(); - const timeout = setTimeout(() => controller.abort(), timeoutMs); + const timeout = setTimeout(controller.abort.bind(controller), timeoutMs); try { const response = await fetch(`${getOpenAITtsBaseUrl()}/audio/speech`, { diff --git a/src/utils/fetch-timeout.ts b/src/utils/fetch-timeout.ts index 13f3e0669a..f9567fbcdb 100644 --- a/src/utils/fetch-timeout.ts +++ b/src/utils/fetch-timeout.ts @@ -15,7 +15,7 @@ export async function fetchWithTimeout( fetchFn: typeof fetch = fetch, ): Promise { const controller = new AbortController(); - const timer = setTimeout(() => controller.abort(), Math.max(1, timeoutMs)); + const timer = setTimeout(controller.abort.bind(controller), Math.max(1, timeoutMs)); try { return await fetchFn(url, { ...init, signal: controller.signal }); } finally {