export async function withTimeout( promise: Promise, timeoutMs: number, ): Promise { let timeoutId: ReturnType | undefined const timeoutPromise = new Promise((_, reject) => { timeoutId = setTimeout(() => { reject(new Error("API timeout")) }, timeoutMs) }) try { return await Promise.race([promise, timeoutPromise]) } finally { if (timeoutId !== undefined) { clearTimeout(timeoutId) } } }