From 9816f5dd6c7eef665b0a3d6bb4eaf54576116f05 Mon Sep 17 00:00:00 2001 From: Isaac Sanchez-Hawkins <266845420+isanchez404@users.noreply.github.com> Date: Tue, 12 May 2026 04:02:15 -0400 Subject: [PATCH] fix(vscode): clear bridge request timeouts (#1236) Co-authored-by: Isaac Sanchez --- packages/vscode/webview/api/bridge.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/vscode/webview/api/bridge.ts b/packages/vscode/webview/api/bridge.ts index ba94da7e..3422b397 100644 --- a/packages/vscode/webview/api/bridge.ts +++ b/packages/vscode/webview/api/bridge.ts @@ -39,6 +39,7 @@ interface BridgeResponse { const pendingRequests = new Map void; reject: (reason: Error) => void; + timeout?: ReturnType; }>(); let requestIdCounter = 0; @@ -55,6 +56,9 @@ window.addEventListener('message', (event: MessageEvent) => { const pending = pendingRequests.get(response.id); if (pending) { pendingRequests.delete(response.id); + if (pending.timeout) { + clearTimeout(pending.timeout); + } if (response.success) { pending.resolve(response.data); } else { @@ -76,14 +80,19 @@ export function sendBridgeMessageWithOptions( const id = `req_${++requestIdCounter}_${Date.now()}`; const request: BridgeRequest = { id, type, payload }; - pendingRequests.set(id, { + const pending: { + resolve: (value: unknown) => void; + reject: (reason: Error) => void; + timeout?: ReturnType; + } = { resolve: resolve as (value: unknown) => void, reject, - }); + }; + pendingRequests.set(id, pending); const timeoutMs = typeof options?.timeoutMs === 'number' ? options.timeoutMs : 30000; if (Number.isFinite(timeoutMs) && timeoutMs > 0) { - setTimeout(() => { + pending.timeout = setTimeout(() => { if (pendingRequests.has(id)) { pendingRequests.delete(id); reject(new Error(`Request ${type} timed out`));