UNPKG

edge-master

Version:
79 lines (78 loc) 2.26 kB
/// <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>; };