export function throwIfAborted(signal?: AbortSignal): void { if (!signal?.aborted) return; throw signal.reason instanceof Error ? signal.reason : new Error(String(signal.reason ?? "MCP request aborted")); } export async function abortable(promise: Promise, signal?: AbortSignal): Promise { if (!signal) return promise; throwIfAborted(signal); return await new Promise((resolve, reject) => { let settled = false; const cleanup = () => signal.removeEventListener("abort", onAbort); const onAbort = () => { if (settled) return; settled = true; cleanup(); reject(signal.reason instanceof Error ? signal.reason : new Error(String(signal.reason ?? "MCP request aborted"))); }; signal.addEventListener("abort", onAbort, { once: true }); promise.then( value => { if (settled) return; settled = true; cleanup(); resolve(value); }, error => { if (settled) return; settled = true; cleanup(); reject(error); }, ); }); }