export async function withTimeout( promise: Promise, timeoutMs: number, timeoutMessage: string, ): Promise { if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) { return await promise; } let timeout: NodeJS.Timeout | undefined; try { return await Promise.race([ promise, new Promise((_, reject) => { timeout = setTimeout(() => reject(new Error(timeoutMessage)), Math.max(1, timeoutMs)); }), ]); } finally { if (timeout) { clearTimeout(timeout); } } }