UNPKG

@allan1361/iota-big3-sdk-middleware

Version:

🏆 A+ Grade Certified Enterprise Middleware Framework - Phase 3 Certified (90/100) with advanced resilience patterns, comprehensive type safety, and production-ready observability

67 lines 2.33 kB
import type { Logger } from '@iota-big3/sdk-observability'; import type { NextFunction, Request, Response } from 'express'; import { Redis } from 'ioredis'; export interface RateLimitConfig { enabled?: boolean; windowMs?: number; maxRequests?: number; strategy?: 'sliding-window' | 'token-bucket' | 'fixed-window'; keyGenerator?: (req: Request) => string; skipSuccessfulRequests?: boolean; skipFailedRequests?: boolean; store?: RateLimitStore; message?: string; headers?: boolean; draft_polli_ratelimit_headers?: boolean; } export interface RateLimitStore { incrementAsync(key: string): Promise<RateLimitInfo>; decrementAsync(key: string): Promise<void>; resetAsync(key: string): Promise<void>; } export interface RateLimitInfo { count: number; resetTime: Date; remaining: number; } export interface TokenBucketConfig { capacity: number; refillRate: number; refillAmount: number; } export declare class RedisRateLimitStore implements RateLimitStore { private redis; private windowMs; private maxRequests; private strategy; constructor(redis: Redis, windowMs: number, maxRequests: number, strategy: string); incrementAsync(key: string): Promise<RateLimitInfo>; private incrementSlidingWindowAsync; private incrementTokenBucketAsync; private incrementFixedWindowAsync; decrementAsync(key: string): Promise<void>; resetAsync(key: string): Promise<void>; } export declare class MemoryRateLimitStore implements RateLimitStore { private windowMs; private maxRequests; private requests; constructor(windowMs: number, maxRequests: number); incrementAsync(key: string): Promise<RateLimitInfo>; decrementAsync(key: string): Promise<void>; resetAsync(key: string): Promise<void>; } export declare class RateLimiter { private config; private logger?; constructor(config?: RateLimitConfig, logger?: Logger); expressMiddleware(): (req: Request, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>; private setHeaders; static forRoute(options: { path?: string | RegExp; method?: string | string[]; maxRequests: number; windowMs: number; }): RateLimiter; } //# sourceMappingURL=rate-limiter.d.ts.map