/// <reference types="node" />
import { LockLostCallback, LockOptions } from './types';
interface AcquireOptions {
    identifier: string;
    lockTimeout: number;
    acquireTimeout: number;
    retryInterval: number;
}
export declare abstract class Lock {
    protected abstract _kind: string;
    protected abstract _key: string;
    protected _identifier: string;
    protected _acquireOptions: AcquireOptions;
    protected _refreshTimeInterval: number;
    protected _refreshInterval?: ReturnType<typeof setInterval>;
    protected _refreshing: boolean;
    protected _acquired: boolean;
    protected _onLockLost: LockLostCallback;
    protected abstract _refresh(): Promise<boolean>;
    protected abstract _acquire(): Promise<boolean>;
    protected abstract _release(): Promise<void>;
    constructor({ lockTimeout, acquireTimeout, retryInterval, refreshInterval, onLockLost }?: LockOptions);
    get identifier(): string;
    get isAcquired(): boolean;
    private _startRefresh;
    private _stopRefresh;
    private _processRefresh;
    acquire(): Promise<void>;
    release(): Promise<void>;
}
export {};
