/// <reference types="@cloudflare/workers-types" />
import { IRequestInterceptor, InterceptorType } from '../types/interceptor';
export interface RateLimitOptions {
    /**
     * Maximum number of requests allowed in the window
     * @default 100
     */
    requests?: number;
    /**
     * Time window in milliseconds
     * @default 60000 (1 minute)
     */
    window?: number;
    /**
     * Function to generate a key for rate limiting (e.g., by IP, user ID)
     * @default IP address from CF-Connecting-IP header
     */
    keyGenerator?: (req: Request) => string;
    /**
     * Storage adapter for rate limit data
     */
    storage?: RateLimitStorage;
    /**
     * Custom response when rate limit is exceeded
     */
    onRateLimitExceeded?: (req: Request, resetTime: number) => Response;
}
export interface RateLimitStorage {
    /**
     * Get current request count and reset time for a key
     */
    get(key: string): Promise<{
        count: number;
        resetTime: number;
    } | null>;
    /**
     * Increment request count for a key
     */
    increment(key: string, resetTime: number): Promise<{
        count: number;
        resetTime: number;
    }>;
}
/**
 * In-memory storage for rate limiting (for development/testing)
 * Note: This is not suitable for production with multiple workers
 */
export declare class MemoryRateLimitStorage implements RateLimitStorage {
    private storage;
    get(key: string): Promise<{
        count: number;
        resetTime: number;
    } | null>;
    increment(key: string, resetTime: number): Promise<{
        count: number;
        resetTime: number;
    }>;
}
/**
 * KV-based storage for rate limiting (for Cloudflare Workers)
 */
export declare class KVRateLimitStorage implements RateLimitStorage {
    private kv;
    constructor(kv: KVNamespace);
    get(key: string): Promise<any>;
    increment(key: string, resetTime: number): Promise<any>;
}
/**
 * Creates a rate limiting interceptor
 */
export declare function rateLimitInterceptor(options?: RateLimitOptions): IRequestInterceptor;
/**
 * Response interceptor to add rate limit headers
 */
export declare function rateLimitHeadersInterceptor(): {
    type: InterceptorType;
    intercept(ctx: any): Promise<Response>;
};
