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); }, ); }); }