/** * Leader election for Sidekiq processes. * * Follows Sidekiq Enterprise's approach: * - Leaders refresh every 15 seconds * - Followers check/attempt acquisition every 60 seconds * - Redis is the source of truth (no Raft/Paxos) * - 20 second TTL on leader key for automatic failover */ import type { Config } from "./config.js"; export interface LeaderElectorOptions { /** Leader refresh interval in milliseconds (default: 15000) */ refreshInterval?: number; /** Follower check interval in milliseconds (default: 60000) */ checkInterval?: number; /** Leader key TTL in seconds (default: 20) */ ttl?: number; /** Override process identity (default: hostname:pid) */ identity?: string; } export declare class LeaderElector { private readonly config; private readonly identity; private readonly refreshInterval; private readonly checkInterval; private readonly ttl; private redis?; private isLeader; private running; private loopPromise?; private stopController?; constructor(config: Config, options?: LeaderElectorOptions); /** * Start the leader election loop. */ start(): Promise; /** * Stop the leader election loop and release leadership if held. */ stop(): Promise; /** * Returns true if this process is currently the leader. */ leader(): boolean; /** * Get the identity of the current leader (may be another process). */ currentLeader(): Promise; /** * Try to acquire leadership. Returns true if successful. */ private tryAcquire; /** * Refresh leadership (extend TTL). Returns true if successful. */ private tryRefresh; /** * Background loop for leader election. */ private leaderLoop; } //# sourceMappingURL=leader.d.ts.map