import { ICallback } from '../async/index.js';
import { ILogger } from '../logger/index.js';
import { IRedisClient } from '../redis-client/index.js';
import { Runnable } from '../runnable/index.js';
import { Timer } from '../timer/index.js';
import { Backoff } from '../backoff/backoff.js';
export type TLockerEvent = {
    'locker.up': (id: string) => void;
    'locker.down': (id: string) => void;
    'locker.goingUp': (id: string) => void;
    'locker.goingDown': (id: string) => void;
    'locker.error': (error: Error, id: string) => void;
};
export declare class RedisLock extends Runnable<TLockerEvent> {
    protected readonly lockKey: string;
    protected readonly ttl: number;
    protected readonly redisClient: IRedisClient;
    protected readonly autoExtendInterval: number;
    protected readonly timer: Timer;
    protected logger: ILogger;
    protected backoff: Backoff | null;
    constructor(redisClient: IRedisClient, logger: ILogger, lockKey: string, ttl: number, retryOnFail?: boolean, autoExtend?: boolean);
    protected lock: (cb: ICallback) => void;
    protected extend: (cb: ICallback) => void;
    protected release: (cb: ICallback) => void;
    protected autoExtendLock(): void;
    protected goingUp(): Array<(cb: ICallback) => void>;
    protected goingDown(): Array<(cb: ICallback) => void>;
    protected handleError: (err: Error) => void;
    protected finalizeUp(): void;
    protected finalizeDown(): void;
    run(): Promise<void>;
    run(cb: ICallback): void;
    acquireLock(cb: ICallback): void;
    releaseLock(cb: ICallback): void;
    extendLock(cb: ICallback): void;
    isLocked(): boolean;
    isReleased(): boolean;
    getRetryAttempts(): number;
}
//# sourceMappingURL=redis-lock.d.ts.map