import type { IndustryType, SDK } from '@iota-big3/sdk-core';
import type { Request, RequestHandler, Response } from 'express';
import type { FastifyInstance } from 'fastify';
export interface RateLimitConfig {
    windowMs?: number;
    max?: number;
    message?: string;
    statusCode?: number;
    headers?: boolean;
    skipSuccessfulRequests?: boolean;
    skipFailedRequests?: boolean;
    keyGenerator?: (req: Request) => string;
    skip?: (req: Request) => boolean;
    handler?: (req: Request, res: Response) => void;
    onLimitReached?: (req: Request, res: Response) => void;
    store?: RateLimitStore;
}
export interface RateLimitMetadata {
    serviceName: string;
    tribe?: string;
    industry?: IndustryType;
    environment?: string;
    sdk?: SDK;
}
export interface RateLimitStore {
    incrementAsync(key: string): Promise<{
        totalHits: number;
        resetTime?: Date;
    }>;
    decrementAsync(key: string): Promise<void>;
    resetAsync(key: string): Promise<void>;
    resetAllAsync(): Promise<void>;
}
export interface RateLimitMiddleware extends RequestHandler {
    express: RequestHandler;
    fastify: (fastify: FastifyInstance) => Promise<void>;
    resetKey: (key: string) => Promise<void>;
    resetAll: () => Promise<void>;
}
export declare function createRateLimitMiddleware(metadata: RateLimitMetadata, config?: RateLimitConfig): RateLimitMiddleware;
export declare function createLegacyRateLimitMiddleware(config?: RateLimitConfig): RateLimitMiddleware;
export declare const rateLimitMiddleware: typeof createRateLimitMiddleware;
export default createRateLimitMiddleware;
//# sourceMappingURL=rate-limit-middleware.d.ts.map