import type Redis from "ioredis"; import type { RedisKey } from "ioredis"; declare type Key = RedisKey | number; declare type Awaitable = T | Promise; export declare class AcquireFailedError extends Error { readonly cause?: unknown; constructor(message?: string, cause?: unknown); } export declare class ReleaseFailedError extends Error { readonly cause?: unknown; constructor(message?: string, cause?: unknown); } export declare type AcquireDesire = { key: K; desireAmount: number; limitAmount?: number; }; export declare type AcquiredResult = { key: K; currentAmount: number; acquiredAmount: number; lackingAmount: number; }; export declare type AcquireOptions = { prefix?: string; float?: boolean; limit?: number; }; export declare type AcquireOptionsInput = AcquireOptions | boolean; export declare type ReleaseItem = { key: K; amount: number; }; export declare class Acquire { private readonly redis; constructor(redis: Redis); acquire(key: Key, amount: number, fn: (currentAmount: number, acquiredAmount: number, lackingAmount: number) => Awaitable, options?: AcquireOptionsInput): Promise; hashAcquire(key: Key, id: Key, amount: number, fn: (currentAmount: number, acquiredAmount: number, lackingAmount: number) => Awaitable, options?: AcquireOptionsInput): Promise; acquireMany(items: AcquireDesire[], fn: (acquireResult: AcquiredResult[]) => Awaitable, options?: AcquireOptions): Promise; hashAcquireMany(hashKey: string, items: AcquireDesire[], fn: (acquireResult: AcquiredResult[]) => Awaitable, options?: AcquireOptions): Promise; private getChangeCommand; private getHashChangeCommand; private getAcquireCommand; private getHashAcquireCommand; private releaseMany; private hashReleaseMany; private getReleaseCommand; private getHashReleaseCommand; private releaseBy; private acquireBy; private executeAcquirePipeline; private releaseAfterAcquireFailure; private releaseLackingAmounts; private releaseSingleLackingAmount; private releaseSingleHashLackingAmount; private runAcquireCallback; private releaseAfterCallbackFailure; private getFailedIndexes; private getDesiredReleaseItems; private getAcquiredReleaseItems; private getAcquiredResults; private getAcquiredResult; } export {};