/** * Browser-compatible timer scheduler for Service Worker environments. * * Replaces the server-side Scheduler with one that uses * Periodic Background Sync (where available) or falls back to * `setTimeout`-based polling. * * @module service-worker/scheduler */ import type { TimerEntry } from '../core/types'; import type { Storage } from '../storage/interface'; /** * Constructor options for {@link ServiceWorkerScheduler}. * * @example * ```ts * import { ServiceWorkerScheduler, type ServiceWorkerSchedulerOptions } from '@lostgradient/weft/service-worker'; * import { MemoryStorage } from '@lostgradient/weft'; * * const storage = new MemoryStorage(); * * const options: ServiceWorkerSchedulerOptions = { * storage, * onTimerFired: (entry) => { * console.log(`Timer ${entry.id} fired.`); * }, * }; * const scheduler = new ServiceWorkerScheduler(options); * void scheduler; * ``` */ export interface ServiceWorkerSchedulerOptions { storage: Storage; onTimerFired: (entry: TimerEntry) => void | Promise; registration?: ServiceWorkerRegistration; periodicSyncTag?: string; fallbackIntervalMilliseconds?: number; getNow?: () => number; } /** * Scheduler for browser Service Worker environments, backed by durable storage. * * @example * ```ts * import { ServiceWorkerScheduler, createPeriodicSyncHandler } from '@lostgradient/weft/service-worker'; * import { MemoryStorage } from '@lostgradient/weft'; * * const storage = new MemoryStorage(); * * const scheduler = new ServiceWorkerScheduler({ * storage, * onTimerFired: (entry) => { * console.log(`Timer ${entry.id} fired.`); * }, * }); * * const handlePeriodicSync = createPeriodicSyncHandler(scheduler); * void handlePeriodicSync; * ``` */ export declare class ServiceWorkerScheduler implements Disposable { #private; constructor(options: ServiceWorkerSchedulerOptions); /** Schedule a durable timer (writes to storage). */ schedule(entry: TimerEntry): Promise; /** Cancel a timer (removes from storage). */ cancel(id: string): Promise; /** Scan for expired timers, fire callbacks, and clean up. */ tick(now?: number): Promise; /** Process all expired timers then stop. */ flush(now?: number): Promise; /** Start the scheduler. Uses Periodic Background Sync if available, otherwise falls back to setTimeout polling. */ start(): void; /** Stop the scheduler and clear all timeout handles. */ stop(): void; [Symbol.dispose](): void; }