export function promiseWithTimeout( timeoutMs: number, promise: () => Promise, ): Promise { let timeoutHandle: NodeJS.Timeout; const timeoutPromise = new Promise((_resolve, reject) => { timeoutHandle = setTimeout( () => reject(new Error("Promise timed out")), timeoutMs, ); }); return Promise.race([promise(), timeoutPromise]).then((result) => { clearTimeout(timeoutHandle); return result; }); }