import { types } from "@apiratorjs/locking";
import { RedisClientType } from "redis";
import { IReleaser } from "@apiratorjs/locking/dist/src/types";
import { BaseDistributedPrimitive } from "./base-distributed-primitive";
export declare class RedisDistributedMutex extends BaseDistributedPrimitive implements types.IDistributedMutex {
    /**
     * Holds the random lock token if we successfully acquire it.
     * Using a random token helps ensure that only the owner can release.
     */
    private _lockValue?;
    constructor(props: types.DistributedMutexConstructorProps & {
        redisClient: RedisClientType;
    });
    destroy(): Promise<void>;
    acquire(params?: types.AcquireParams): Promise<IReleaser>;
    cancel(errMessage?: string): Promise<void>;
    isLocked(): Promise<boolean>;
    runExclusive<T>(fn: () => Promise<T> | T): Promise<T>;
    runExclusive<T>(params: types.AcquireParams, fn: () => Promise<T> | T): Promise<T>;
    protected tryAcquire(timeoutMs: number): Promise<types.AcquireToken | undefined>;
    private throwIfDestroyed;
    protected release(token: types.AcquireToken): Promise<void>;
}
//# sourceMappingURL=redis-distributed-mutex.d.ts.map