@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
188 lines • 9.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MiddlewareChainBuilder = exports.presets = exports.ResponseCache = exports.RequestBatcher = exports.PerformanceMonitor = exports.OptimizedMiddlewareFactory = exports.ObjectPool = exports.createOptimizedMiddleware = exports.TimeoutHandler = exports.RetryHandler = exports.ResilientMiddlewareFactory = exports.HealthMonitor = exports.createResilientMiddleware = exports.CircuitBreakerState = exports.CircuitBreaker = exports.MiddlewareManager = exports.validateJsonBody = exports.isValidHeaderValue = exports.isValidationResult = exports.isMiddlewareConfig = exports.isJsonValue = exports.isJsonObject = exports.isAuthUser = exports.isAuthResult = exports.extractQueryString = exports.extractHeaderString = void 0;
exports.createMiddlewareManager = createMiddlewareManager;
exports.applyToExpress = applyToExpress;
exports.applyToFastify = applyToFastify;
exports.createProductionMiddleware = createProductionMiddleware;
var types_1 = require("./types");
Object.defineProperty(exports, "extractHeaderString", { enumerable: true, get: function () { return types_1.extractHeaderString; } });
Object.defineProperty(exports, "extractQueryString", { enumerable: true, get: function () { return types_1.extractQueryString; } });
Object.defineProperty(exports, "isAuthResult", { enumerable: true, get: function () { return types_1.isAuthResult; } });
Object.defineProperty(exports, "isAuthUser", { enumerable: true, get: function () { return types_1.isAuthUser; } });
Object.defineProperty(exports, "isJsonObject", { enumerable: true, get: function () { return types_1.isJsonObject; } });
Object.defineProperty(exports, "isJsonValue", { enumerable: true, get: function () { return types_1.isJsonValue; } });
Object.defineProperty(exports, "isMiddlewareConfig", { enumerable: true, get: function () { return types_1.isMiddlewareConfig; } });
Object.defineProperty(exports, "isValidationResult", { enumerable: true, get: function () { return types_1.isValidationResult; } });
Object.defineProperty(exports, "isValidHeaderValue", { enumerable: true, get: function () { return types_1.isValidHeaderValue; } });
Object.defineProperty(exports, "validateJsonBody", { enumerable: true, get: function () { return types_1.validateJsonBody; } });
var middleware_manager_1 = require("./middleware-manager");
Object.defineProperty(exports, "MiddlewareManager", { enumerable: true, get: function () { return middleware_manager_1.MiddlewareManager; } });
var resilience_1 = require("./resilience");
Object.defineProperty(exports, "CircuitBreaker", { enumerable: true, get: function () { return resilience_1.CircuitBreaker; } });
Object.defineProperty(exports, "CircuitBreakerState", { enumerable: true, get: function () { return resilience_1.CircuitBreakerState; } });
Object.defineProperty(exports, "createResilientMiddleware", { enumerable: true, get: function () { return resilience_1.createResilientMiddleware; } });
Object.defineProperty(exports, "HealthMonitor", { enumerable: true, get: function () { return resilience_1.HealthMonitor; } });
Object.defineProperty(exports, "ResilientMiddlewareFactory", { enumerable: true, get: function () { return resilience_1.ResilientMiddlewareFactory; } });
Object.defineProperty(exports, "RetryHandler", { enumerable: true, get: function () { return resilience_1.RetryHandler; } });
Object.defineProperty(exports, "TimeoutHandler", { enumerable: true, get: function () { return resilience_1.TimeoutHandler; } });
var performance_1 = require("./performance");
Object.defineProperty(exports, "createOptimizedMiddleware", { enumerable: true, get: function () { return performance_1.createOptimizedMiddleware; } });
Object.defineProperty(exports, "ObjectPool", { enumerable: true, get: function () { return performance_1.ObjectPool; } });
Object.defineProperty(exports, "OptimizedMiddlewareFactory", { enumerable: true, get: function () { return performance_1.OptimizedMiddlewareFactory; } });
Object.defineProperty(exports, "PerformanceMonitor", { enumerable: true, get: function () { return performance_1.PerformanceMonitor; } });
Object.defineProperty(exports, "RequestBatcher", { enumerable: true, get: function () { return performance_1.RequestBatcher; } });
Object.defineProperty(exports, "ResponseCache", { enumerable: true, get: function () { return performance_1.ResponseCache; } });
function createMiddlewareManager(integrations) {
return new MiddlewareManager(integrations);
}
exports.presets = {
basic: () => {
return new MiddlewareManager();
},
secure: (integrations) => {
const manager = new MiddlewareManager(integrations);
manager.register('cors', manager.createCorsMiddleware({
origin: ['https://localhost:3000'],
credentials: true
}));
manager.register('auth', manager.createAuthMiddleware({
requireAuth: true,
tokenLocation: 'header'
}));
manager.register('rateLimit', manager.createRateLimitMiddleware({
windowMs: 15 * 60 * 1000,
max: 100
}));
return manager;
},
api: (integrations) => {
const manager = new MiddlewareManager(integrations);
manager.register('compression', manager.createCompressionMiddleware({
level: 6,
threshold: 1024
}));
manager.register('logging', manager.createLoggingMiddleware({
level: 'info',
excludePaths: ['/health', '/metrics']
}));
return manager;
},
production: (integrations) => {
const manager = new MiddlewareManager(integrations);
manager.register('cors', manager.createCorsMiddleware({
origin: process.env.ALLOWED_ORIGINS?.split(',') || ['https://localhost:3000'],
credentials: true,
maxAge: 86400
}));
manager.register('auth', manager.createAuthMiddleware({
requireAuth: true,
tokenLocation: 'header',
roles: ['user']
}));
manager.register('compression', manager.createCompressionMiddleware({
level: 6,
threshold: 1024,
filter: (req, _res) => !req.path?.startsWith('/api/stream')
}));
manager.register('rateLimit', manager.createRateLimitMiddleware({
windowMs: 15 * 60 * 1000,
max: 1000,
keyGenerator: (req) => req.ip || 'unknown'
}));
manager.register('logging', manager.createLoggingMiddleware({
level: 'info',
includeBody: false,
includeHeaders: true,
excludePaths: ['/health', '/metrics', '/_health']
}));
return manager;
}
};
class MiddlewareChainBuilder {
constructor(integrations) {
this.manager = new MiddlewareManager(integrations);
}
use(name, middleware) {
this.manager.register(name, middleware);
return this;
}
cors(options) {
this.manager.register('cors', this.manager.createCorsMiddleware(options));
return this;
}
auth(options) {
this.manager.register('auth', this.manager.createAuthMiddleware(options));
return this;
}
rateLimit(options) {
this.manager.register('rateLimit', this.manager.createRateLimitMiddleware(options));
return this;
}
compression(options) {
this.manager.register('compression', this.manager.createCompressionMiddleware(options));
return this;
}
logging(options) {
this.manager.register('logging', this.manager.createLoggingMiddleware(options));
return this;
}
validation(schema, options) {
this.manager.register('validation', this.manager.createValidationMiddleware(schema, options));
return this;
}
build() {
return this.manager;
}
}
exports.MiddlewareChainBuilder = MiddlewareChainBuilder;
function applyToExpress(app, manager) {
app.use((req, _res, next) => {
manager.execute(req, _res, next);
});
}
async function applyToFastify(fastify, manager) {
await fastify.addHook('onRequest', async (req, reply) => {
return new Promise((resolve, reject) => {
const expressReq = req;
const expressRes = reply;
manager.execute(expressReq, expressRes, (error) => {
if (error) {
reject(error);
}
else {
resolve();
}
});
});
});
}
function createProductionMiddleware(integrations) {
return {
manager: createMiddlewareManager(integrations),
resilience: createResilientMiddleware({
intervalMs: 30000,
unhealthyThreshold: 3,
healthyThreshold: 2
}),
performance: createOptimizedMiddleware({
enableProfiling: true,
enableMemoryTracking: true,
enableRequestSizeTracking: true,
sampleRate: 0.1,
slowRequestThreshold: 1000,
memoryLeakThreshold: 50 * 1024 * 1024
}, {
defaultTtlMs: 300000
})
};
}
exports.default = {
createMiddlewareManager,
presets: exports.presets,
MiddlewareChainBuilder,
applyToExpress,
applyToFastify,
createProductionMiddleware
};
//# sourceMappingURL=index.js.map