/**
 * @module RateLimiter
 */
import { type IEventDispatcher } from "../../../../event-bus/contracts/_module.js";
import { type IExecutionContext } from "../../../../execution-context/contracts/_module.js";
import { type IKey, type INamespace } from "../../../../namespace/contracts/_module.js";
import { type IRateLimiter, type IRateLimiterAdapter, type RateLimiterEventMap, type RateLimiterState } from "../../../../rate-limiter/contracts/_module.js";
import { type AsyncLazy, type ErrorPolicy, type WaitUntil } from "../../../../utilities/_module.js";
/**
 * @internal
 */
export type RateLimiterSettings = {
    limit: number;
    enableAsyncTracking: boolean;
    eventDispatcher: IEventDispatcher<RateLimiterEventMap>;
    adapter: IRateLimiterAdapter;
    key: IKey;
    errorPolicy: ErrorPolicy;
    onlyError: boolean;
    namespace: INamespace;
    serdeTransformerName: string;
    waitUntil: WaitUntil;
    executionContext: IExecutionContext;
};
/**
 * @internal
 */
export type ISerializedRateLimiter = {
    version: "1";
    key: string;
    limit: number;
};
/**
 * @internal
 */
export declare class RateLimiter implements IRateLimiter {
    /**
     * @internal
     */
    static _serialize(deserializedValue: RateLimiter): ISerializedRateLimiter;
    private readonly waitUntil;
    private readonly _key;
    private readonly _limit;
    private readonly errorPolicy;
    private readonly onlyError;
    private readonly adapter;
    private readonly eventDispatcher;
    private readonly enableAsyncTracking;
    private readonly serdeTransformerName;
    private readonly namespace;
    private readonly executionContext;
    constructor(settings: RateLimiterSettings);
    _getNamespace(): INamespace;
    _getSerdeTransformerName(): string;
    _getAdapter(): IRateLimiterAdapter;
    private toRateLimiterState;
    getState(): Promise<RateLimiterState>;
    get key(): IKey;
    get limit(): number;
    private trackErrorWrapper;
    private trackWrapper;
    runOrFail<TValue = void>(asyncFn: AsyncLazy<TValue>): Promise<TValue>;
    reset(): Promise<void>;
}
