/**
 * @module RateLimiter
 */
import { type Redis, type Result } from "ioredis";
import { type BackoffSettingsEnum } from "../../../../backoff-policies/implementations/_module.js";
import { type IReadableContext } from "../../../../execution-context/contracts/_module.js";
import { type IRateLimiterAdapter, type IRateLimiterAdapterState } from "../../../../rate-limiter/contracts/_module.js";
import { type RateLimiterPolicySettingsEnum } from "../../../../rate-limiter/implementations/policies/_module.js";
declare module "ioredis" {
    interface RedisCommander<Context> {
        /**
         * @returns {string} {@link IRedisJsonRateLimiterState | `IRedisJsonRateLimiterState`} or `null` as json string.
         */
        daiso_rate_limiter_update_state(key: string, limit: number, backoffSettings: string, policySettings: string, currentDate: number): Result<string, Context>;
        /**
         * @returns {string} {@link IRedisJsonRateLimiterState | `IRedisJsonRateLimiterState`} or `null` as json string.
         */
        daiso_rate_limiter_get_state(key: string, backoffSettings: string, policySettings: string, currentDate: number): Result<string, Context>;
    }
}
/**
 * Configuration for `RedisRateLimiterAdapter`.
 * Requires a Redis client and handles serialization internally with JSON.stringify/JSON.parse.
 *
 * IMPORT_PATH: `"@daiso-tech/core/rate-limiter/redis-rate-limiter-adapter"`
 * @group Adapters
 */
export type RedisRateLimiterAdapterSettings = {
    /**
     * The Redis client instance for rate-limiter state operations.
     */
    database: Redis;
    /**
     * You can choose between different types of predefined backoff policies.
     * @default
     * ```ts
     * { type: BACKOFFS.EXPONENTIAL }
     * ```
     */
    backoffPolicy?: BackoffSettingsEnum;
    /**
     * You can choose between different types of predefined circuit breaker policies.
     * @default
     * ```ts
     * { type: LIMITER.FIXED_WINDOW }
     * ```
     */
    rateLimiterPolicy?: RateLimiterPolicySettingsEnum;
};
/**
 * IMPORT_PATH: `"@daiso-tech/core/rate-limiter/redis-rate-limiter-adapter"`
 * @group Adapters
 */
export declare class RedisRateLimiterAdapter implements IRateLimiterAdapter {
    private readonly backoff;
    private readonly policy;
    private readonly database;
    /**
     * @example
     * ```ts
     * import { RedisRateLimiterAdapter } from "@daiso-tech/core/rate-limiter/redis-rate-limiter-adapter";
     * import Redis from "ioredis";
     *
     * const database = new Redis("YOUR_REDIS_CONNECTION_STRING");
     * const rateLimiterAdapter = new RedisRateLimiterAdapter({
     *   database
     * });
     * ```
     */
    constructor(settings: RedisRateLimiterAdapterSettings);
    private initGetStateCommand;
    private initUpdateStateCommmand;
    getState(_context: IReadableContext, key: string): Promise<IRateLimiterAdapterState | null>;
    updateState(_context: IReadableContext, key: string, limit: number): Promise<IRateLimiterAdapterState>;
    reset(_context: IReadableContext, key: string): Promise<void>;
}
