openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
28 lines (27 loc) • 1.11 kB
JavaScript
import { n as MAX_TIMER_TIMEOUT_MS } from "./number-coercion-CLj0HTDM.js";
//#region src/utils/absolute-deadline.ts
const ABSOLUTE_DEADLINE_EXPIRED = Symbol("absolute deadline expired");
/** Bounds one operation by an absolute wall-clock deadline. */
async function awaitWithinDeadline(operation, deadlineAtMs) {
if (deadlineAtMs === void 0) return await operation();
if (Math.max(0, deadlineAtMs - Date.now()) === 0) return ABSOLUTE_DEADLINE_EXPIRED;
let timer;
try {
const deadline = new Promise((resolve) => {
const waitForDeadline = () => {
const remainingMs = Math.max(0, deadlineAtMs - Date.now());
if (remainingMs === 0) {
resolve(ABSOLUTE_DEADLINE_EXPIRED);
return;
}
timer = setTimeout(waitForDeadline, Math.min(remainingMs, MAX_TIMER_TIMEOUT_MS));
};
waitForDeadline();
});
return await Promise.race([deadline, operation().then((result) => Date.now() >= deadlineAtMs ? ABSOLUTE_DEADLINE_EXPIRED : result)]);
} finally {
if (timer !== void 0) clearTimeout(timer);
}
}
//#endregion
export { awaitWithinDeadline as n, ABSOLUTE_DEADLINE_EXPIRED as t };