@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
TypeScript
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