/** * Singleton /health poller — one schedule per endpoint per browser profile. * * Best practices: * - Cross-tab leader via Web Locks (fallback: in-process mutex only) * - Pause automatic polls while document is hidden * - 429 = rate-limited (keep last known DB state; backoff via Retry-After) * - Real outages (5xx / unhealthy JSON / network) use exponential backoff * - No overlapping in-flight requests */ export interface HealthCoordinatorSnapshot { readonly isDatabaseAvailable: boolean; readonly isChecking: boolean; readonly hasResolvedInitialCheck: boolean; readonly retryCount: number; readonly nextRetryDelay: number; readonly error: Error | null; } export interface SubscribeDatabaseHealthInput { readonly endpoint: string; readonly enabled?: boolean; readonly pollInterval?: number; readonly maxRetries?: number; } export declare function subscribeDatabaseHealth(input: SubscribeDatabaseHealthInput, listener: (snapshot: HealthCoordinatorSnapshot) => void): () => void; export declare function requestDatabaseHealthCheck(endpoint: string, options?: { readonly force?: boolean; }): Promise; export declare function resolveDatabaseHealthEndpoint(): string; /** Test-only reset */ export declare function resetDatabaseHealthCoordinatorForTests(): void; //# sourceMappingURL=databaseHealthCoordinator.d.ts.map