import { NatsConnection } from 'nats';
import { LockConfiguration, Readable, Writable, IDistributedLock } from '../types';
export declare class JetstreamDistributedLock implements IDistributedLock {
    private readonly kv;
    private readonly config;
    private state;
    private watch;
    private active;
    private initialized;
    private constructor();
    static connect(natsClient: NatsConnection, config: LockConfiguration): Promise<IDistributedLock>;
    static create(natsClient: NatsConnection, config: LockConfiguration): Promise<IDistributedLock>;
    initialize(resolve: () => void, reject: (reason?: unknown) => void): Promise<void>;
    private processEntry;
    close(): void;
    withLock<T>(key: string, timeoutMs: number, callback: (state: T | null) => Promise<T>, lockDuration?: number): Promise<Readable<T>>;
    acquireLock<T>(key: string, timeoutMs: number, lockDuration?: number): Promise<Writable<T>>;
    tryAcquireLock<T>(key: string, lockDuration?: number): Promise<{
        acquired: boolean;
        value: Writable<T> | undefined;
    }>;
    releaseLock<T>(key: string, lockObj: Writable<T>): Promise<boolean>;
    wait<T>(key: string, timeoutMs: number): Promise<Readable<T>>;
    delete(key: string): Promise<boolean>;
    private createOrUpdateLock;
    private resolveOnUnlock;
    private isLockActive;
    private updateLocalState;
    private updateKey;
    private checkActive;
    private toNamespacedKey;
}
