import { EventEmitter } from 'events'; import { NextFunction, Request, RequestHandler, Response } from 'express'; export interface MiddlewareContext { [key: string]: any; } export interface ComposerRequest extends Request { context?: MiddlewareContext; startTime?: number; middlewareStack?: string[]; } export type MiddlewareFunction = (req: ComposerRequest, res: Response, next: NextFunction) => void | Promise; export interface MiddlewareOptions { name?: string; timeout?: number; errorHandler?: ErrorHandler; condition?: ConditionFunction; parallel?: boolean; retries?: number; retryDelay?: number; } export type ErrorHandler = (error: Error, req: ComposerRequest, res: Response, next: NextFunction) => void | Promise; export type ConditionFunction = (req: ComposerRequest, res: Response) => boolean | Promise; export interface ComposerOptions { errorHandler?: ErrorHandler; timeout?: number; monitoring?: boolean; contextKey?: string; } export interface MiddlewareMetrics { name: string; executions: number; errors: number; totalTime: number; averageTime: number; minTime: number; maxTime: number; } export declare class MiddlewareComposer extends EventEmitter { private middleware; private metrics; private options; constructor(options?: ComposerOptions); use(fn: MiddlewareFunction | MiddlewareFunction[], options?: MiddlewareOptions): this; when(condition: ConditionFunction, trueBranch: MiddlewareFunction | MiddlewareComposer, falseBranch?: MiddlewareFunction | MiddlewareComposer): this; parallel(middleware: MiddlewareFunction[], options?: { waitForAll?: boolean; errorHandler?: ErrorHandler; }): this; group(name: string): MiddlewareComposer; compose(): RequestHandler; private updateMetrics; getMetrics(): MiddlewareMetrics[]; clear(): void; private defaultErrorHandler; rateLimit(limit: number, window: number, keyGenerator?: (req: Request) => string): this; log(logger?: (req: Request, res: Response, duration: number) => void): this; cors(options?: { origin?: string | string[] | ((origin: string) => boolean); methods?: string[]; headers?: string[]; credentials?: boolean; }): this; } export declare function createComposer(options?: ComposerOptions): MiddlewareComposer; //# sourceMappingURL=middleware-composer.d.ts.map