import './nitro-native-bootstrap'; import { NitroBackgroundTimer, setNitroBackgroundTimerForTests } from './nitro-timer-proxy'; import { cronToIntervalMs, normalizeRetryPolicy, tagMaskFromStrings, validatePersistWireSchema } from './scheduler-utils'; export { NitroBackgroundTimer, setNitroBackgroundTimerForTests }; export type TimerPriority = 'realtime' | 'interactive' | 'background'; export type DriftPolicy = 'catchUp' | 'skipLate' | 'coalesce'; export type ScheduleKind = 'timeout' | 'interval'; export type PolicyProfile = 'batterySaver' | 'balanced' | 'latencyFirst'; export interface ScheduleOptions { kind: ScheduleKind; intervalMs?: number; runAtMs?: number; group?: string; /** Hint for upcoming native routing; not forwarded on the Nitro bridge today. */ priority?: TimerPriority; driftPolicy?: DriftPolicy; maxRuns?: number; /** * Opaque bitmask for tagging — use {@link tagMaskFromStrings}. * Kept client-side unless you enrich the native wire separately. */ tagMaskHint?: number; /** Convenience: populated into `tagMaskHint` unless you override it explicitly. */ tags?: readonly string[]; /** Correlation for app telemetry — not persisted in the native wire yet. */ correlationToken?: number; retryMaxAttempts?: number; retryInitialBackoffMs?: number; cancellationToken?: string; policyProfile?: PolicyProfile; } export interface SchedulerStats { activeCount: number; callbackCount: number; missedCount: number; wakeupCount: number; lateDispatchCount: number; avgLatenessMs: number; p95LatenessMs: number; groups: Record; } export interface ScheduledTaskHandle { id: number; cancel: () => void; } export type SchedulerLifecycleEventName = 'scheduled' | 'fired' | 'cancelled' | 'restored' | 'expired' | 'retry' | 'missed'; export interface SchedulerLifecycleEvent { name: SchedulerLifecycleEventName; timerId: number; timestampMs: number; kind?: ScheduleKind; group?: string; policyProfile?: PolicyProfile; reason?: string; driftMs?: number; attempt?: number; } export declare const BackgroundTimer: { schedule(callback: () => void, options: ScheduleOptions): ScheduledTaskHandle; setTimeout(callback: () => void, duration: number): number; clearTimeout(id: number): void; setInterval(callback: () => void, interval: number): number; clearInterval(id: number): void; pauseGroup(group: string): number; resumeGroup(group: string): number; cancelGroup(group: string): number; listActiveTimerIds(): number[]; getStats(): SchedulerStats; getPersistWireJson(): string; restorePersistWireJson(wireJson: string): void; onStats(listener: (stats: SchedulerStats) => void): () => void; onEvent(listener: (event: SchedulerLifecycleEvent) => void): () => void; }; export declare const BackgroundScheduler: { scheduleAt(callback: () => void, runAtMs: number, options?: Omit): ScheduledTaskHandle; scheduleInterval(callback: () => void, intervalMs: number, options?: Omit): ScheduledTaskHandle; scheduleCron(callback: () => void, expression: string, options?: Omit): ScheduledTaskHandle; }; export { cronToIntervalMs, normalizeRetryPolicy, tagMaskFromStrings, validatePersistWireSchema, }; export declare function clearAllKnownTimers(): void;