import type Redis from "ioredis";
import type { RedisKey } from "ioredis";
import type { AcquiredResult, AcquireDesire, AcquireOptionsInput, AcquireOptions } from "./Acquire";
declare type Key = RedisKey | number;
declare type Awaitable<T> = T | Promise<T>;
export declare class LuaAcquire {
    private readonly redis;
    constructor(redis: Redis);
    acquire<T>(key: Key, amount: number, fn: (currentAmount: number, acquiredAmount: number, lackingAmount: number) => Awaitable<T>, options?: AcquireOptionsInput): Promise<T>;
    hashAcquire<T>(hashKey: Key, id: Key, amount: number, fn: (currentAmount: number, acquiredAmount: number, lackingAmount: number) => Awaitable<T>, options?: AcquireOptionsInput): Promise<T>;
    acquireMany<K extends string | number, T>(items: AcquireDesire<K>[], fn: (acquireResult: AcquiredResult<K>[]) => Awaitable<T>, options?: AcquireOptions): Promise<T>;
    hashAcquireMany<K extends string | number, T>(hashKey: string, items: AcquireDesire<K>[], fn: (acquireResult: AcquiredResult<K>[]) => Awaitable<T>, options?: AcquireOptions): Promise<T>;
    private runAcquireManyScript;
    private acquireSingle;
    private hashAcquireSingle;
    private getChangeCommand;
    private getHashChangeCommand;
    private runHashAcquireManyScript;
    private runAcquireCallback;
    private releaseMany;
    private hashReleaseMany;
    private runDynamicKeyReleaseScript;
    private runFixedKeyReleaseScript;
    private defineCommands;
    private get luaRedis();
    private buildAcquireArgs;
    private buildHashAcquireArgs;
    private buildReleaseArgs;
    private buildHashReleaseArgs;
    private getFloatFlag;
    private parseAcquiredRows;
    private isLuaRow;
    private getAcquiredReleaseItems;
}
export {};
