/** * CallTimer wraps Node's setTimeout/clearTimeout to allow session cancellations. */ export class CallTimer { /** * @param {number} durationMs * @param {function} onExpiry */ constructor(durationMs, onExpiry) { this.timer = setTimeout(onExpiry, durationMs); } /** * Cancels the active timer. */ stop() { if (this.timer) { clearTimeout(this.timer); this.timer = null; } } } /** * Starts a session timeout timer. * @param {number} durationMs * @param {function} onExpiry * @returns {CallTimer} */ export function startTimer(durationMs, onExpiry) { return new CallTimer(durationMs, onExpiry); }