import type { RateLimiter, RateLimiterRequestOptions } from '../RateLimiter';
import type { TimeBasedRateLimiterConfig } from './TimeBasedRateLimiter';
export interface PartitionedTimeBasedRateLimiterConfig<Req, Res> extends TimeBasedRateLimiterConfig<Req, Res> {
    getPartitionKey: (req: Req) => string | null;
}
export declare class PartitionedTimeBasedRateLimiter<Req, Res> implements RateLimiter<Req, Res> {
    private readonly _partitionedQueue;
    private readonly _usedFromBucket;
    private readonly _bucketSize;
    private readonly _timeFrame;
    private readonly _callback;
    private readonly _partitionKeyCallback;
    private readonly _counterTimers;
    private _paused;
    private _destroyed;
    private readonly _logger;
    constructor({ logger, bucketSize, timeFrame, doRequest, getPartitionKey }: PartitionedTimeBasedRateLimiterConfig<Req, Res>);
    request(req: Req, options?: RateLimiterRequestOptions): Promise<Res>;
    clear(): void;
    pause(): void;
    resume(): void;
    destroy(): void;
    private _getPartitionedQueue;
    private _runRequest;
    private _runNextRequest;
}
