import type { IRateLimiterOptions } from "rate-limiter-flexible";
import type { KeyExtractor } from "./key";
export type KeyPart = "user_id" | "remote_ip" | "tenant" | string;
export type AnonymousPolicy = false | Pick<RateLimitOptions, "duration" | "points" | "keyPrefix">;
export interface RateLimitOptions extends IRateLimiterOptions {
    impl?: "memory" | "redis";
    keyParts?: Array<KeyPart>;
    /**
     * policy for anonymous requests
     */
    anonymous?: AnonymousPolicy;
    /**
     * custom keyPart extractors
     */
    keyExtractors?: Array<KeyExtractor>;
}
export interface MemoryRateLimitOptions extends RateLimitOptions {
    impl: "memory";
}
export interface RedisRateLimitOptions extends RateLimitOptions {
    impl: "redis";
    /**
     * redis client
     */
    storeClient: any;
    /**
     * redis options
     */
    redisOptions: any;
}
