/** * The scheduler behind every timer-driven store behavior (the actor send * loop, stale reaping, chunk write-back throttling, the host heartbeat). * * Why an abstraction: browsers throttle main-thread timers in hidden tabs * (≥1 s immediately, down to ~1/minute under intensive throttling), which * would silently drop a backgrounded player's presence rate. Timers inside a * **dedicated Web Worker are exempt**, so games that need full-rate sends * while backgrounded pass {@link workerTicker} to `createWorldSession`; * everything else defaults to {@link intervalTicker}. Tests drive stores * deterministically with {@link manualTicker}. * * (WebSocket message delivery is NOT throttled in hidden tabs, so inbound * store updates flow regardless of the ticker choice.) */ /** A cancellable repeating-callback scheduler. */ export interface Ticker { /** * Invoke `callback` every `intervalMs` until cancelled. * @returns A cancel function for this schedule. */ every(intervalMs: number, callback: () => void): () => void; /** Cancel every schedule and release resources (e.g. terminate the worker). */ dispose(): void; } /** Plain `setInterval` ticker — the default. Subject to background-tab throttling. */ export declare function intervalTicker(): Ticker; /** * A ticker whose intervals run inside an inline dedicated Web Worker — * exempt from background-tab timer throttling, so a hidden tab keeps * sending presence at full rate. Falls back to {@link intervalTicker} in * runtimes without `Worker`/`Blob` support (Node, SSR). */ export declare function workerTicker(): Ticker; /** A {@link manualTicker}: time only moves when the test calls `advance`. */ export interface ManualTicker extends Ticker { /** Advance virtual time, firing due callbacks (repeatedly, in due order). */ advance(ms: number): void; /** The current virtual time in ms. */ readonly now: number; } /** Deterministic ticker for tests — no real timers. */ export declare function manualTicker(): ManualTicker; //# sourceMappingURL=ticker.d.ts.map