export class PromiseTimeoutError extends Error { constructor(message = 'Promise timed out') { super(message) this.name = 'PromiseTimeoutError' } } export function isPromiseTimeoutError(err: unknown): err is PromiseTimeoutError { return err instanceof PromiseTimeoutError } /** Rejects with {@link PromiseTimeoutError} when `promise` does not settle within `ms`. */ export async function racePromiseWithTimeout( promise: Promise, ms: number, label?: string ): Promise { let timer: ReturnType | undefined try { return await Promise.race([ promise, new Promise((_, reject) => { timer = setTimeout(() => { reject(new PromiseTimeoutError(label ?? `Timed out after ${ms}ms`)) }, ms) }) ]) } finally { if (timer !== undefined) clearTimeout(timer) } }