import { RedisRateLimiter } from './redis';
import { UpstashRedisRateLimiter } from './upstash-redis';
import { InMemoryRateLimiter } from './in-memory';
import type { RequestEvent } from '@sveltejs/kit';
export type RateLimitStrategy = 'redis' | 'upstash' | 'memory';
export interface RedisConfig {
    url?: string;
    socket?: {
        host?: string;
        port?: number;
    };
    username?: string;
    password?: string;
    database?: number;
    tls?: boolean;
    connectionOptions?: {
        connectTimeout?: number;
        disconnectTimeout?: number;
        pingInterval?: number;
        maxRetriesPerRequest?: number;
        retryStrategy?: (times: number) => number | null;
    };
}
export interface RateLimitingConfig {
    enabled?: boolean;
    requestsPerMinute?: number;
    blockDuration?: number;
    strategy?: RateLimitStrategy;
    windowMs: number;
    maxRequests: number;
    redisConfig?: RedisConfig;
    keyGenerator?: (event: RequestEvent) => string;
}
export declare class RateLimiterFactory {
    private static instance;
    static create(config: RateLimitingConfig): RedisRateLimiter | UpstashRedisRateLimiter | InMemoryRateLimiter;
}
