import { Repository, type DataSource } from "typeorm";
import { LeaderLease } from "../entities/index.js";
export interface LeaderElectorConfig {
    leaseDuration?: number;
    renewalInterval?: number;
    baseCleanInterval?: number;
    jitterRange?: number;
    lockId?: number;
    instanceId?: string;
    schema?: string;
    createTableOnInit?: boolean;
}
export declare class LeaderElectorCore {
    private readonly leaderLeaseRepository;
    name: string;
    private readonly logger;
    private readonly LOCK_ID;
    private isLeader;
    private renewalTimer?;
    private readonly baseLeaseDuration;
    private readonly baseCleanInterval;
    private readonly baseRenewalInterval;
    private readonly jitterRange;
    private readonly instanceId;
    private readonly schema;
    private readonly createTableOnInit;
    constructor(leaderLeaseRepository: Repository<LeaderLease>, config: LeaderElectorConfig);
    static create(dataSource: DataSource, config: LeaderElectorConfig): Promise<LeaderElectorCore>;
    protected initialize(): Promise<void>;
    private getJitter;
    private createLockTableIfNotExists;
    private startCleanupJob;
    private cleanupExpiredLeases;
    private tryAcquireLeaseWithJitter;
    private tryAcquireLease;
    private handleLeadershipAcquired;
    release(): Promise<void>;
    shutdown(): Promise<void>;
    amILeader(): boolean;
}
