@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
65 lines • 2.47 kB
TypeScript
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<void>;
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<void>;
export type ConditionFunction = (req: ComposerRequest, res: Response) => boolean | Promise<boolean>;
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