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';
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 retryOnFail: boolean;
    protected readonly ttl: number;
    protected readonly redisClient: IRedisClient;
    protected readonly autoExtendInterval: number;
    protected readonly timer: Timer;
    protected readonly logger: ILogger;
    constructor(redisClient: IRedisClient, logger: ILogger, lockKey: string, ttl: number, retryOnFail?: boolean, autoExtendInterval?: number);
    protected lock: (cb: ICallback<void>) => void;
    protected extend: (cb: ICallback<void>) => void;
    protected release: (cb: ICallback<void>) => void;
    protected resetTimer: (cb: ICallback<void>) => void;
    protected autoExtendLock(): void;
    protected goingUp(): Array<(cb: ICallback<void>) => void>;
    protected goingDown(): Array<(cb: ICallback<void>) => void>;
    protected handleError: (err: Error) => void;
    protected getLogger(): ILogger;
    protected up(cb: ICallback<boolean>): void;
    protected down(cb: ICallback<boolean>): void;
    run(cb: ICallback<boolean>): void;
    acquireLock(cb: ICallback<boolean>): void;
    releaseLock(cb: ICallback<void>): void;
    extendLock(cb: ICallback<void>): void;
    isLocked(): boolean;
    isReleased(): boolean;
}
//# sourceMappingURL=redis-lock.d.ts.map