UNPKG

fortify2-js

Version:

MOST POWERFUL JavaScript Security Library! Military-grade cryptography + 19 enhanced object methods + quantum-resistant algorithms + perfect TypeScript support. More powerful than Lodash with built-in security.

205 lines (201 loc) 8.51 kB
'use strict'; var MiddlewareAPI = require('./MiddlewareAPI.js'); var Logger = require('../../../utils/Logger.js'); /** * MiddlewareMethodsManager - Adds middleware methods to the UltraFastApp * Follows the same pattern as RouteManager for adding methods to the app */ class MiddlewareMethodsManager { constructor(dependencies) { this.dependencies = dependencies; } /** * Add all middleware methods to the Express app */ addMiddlewareMethods() { Logger.logger.debug("middleware", "Adding middleware methods to UltraFastApp..."); this.addMiddlewareMethod(); this.addSecureMiddlewareMethods(); this.addPerformanceMiddlewareMethods(); this.addCachedMiddlewareMethods(); this.addMiddlewareManagementMethods(); this.addConvenienceMethods(); Logger.logger.debug("middleware", "Middleware methods added successfully"); Logger.logger.debug("middleware", "All middleware methods added successfully\n"); } /** * Add the main middleware() method that returns MiddlewareAPI */ addMiddlewareMethod() { this.dependencies.app.middleware = (config) => { const api = new MiddlewareAPI.MiddlewareAPI(this.dependencies.middlewareManager, this.dependencies.app, config || {}); return api; }; // Add a marker to identify this is the real implementation this.dependencies.app.middleware.__isRealImplementation = true; } /** * Add secure middleware methods */ addSecureMiddlewareMethods() { this.dependencies.app.useSecure = (middleware) => { const middlewareArray = Array.isArray(middleware) ? middleware : [middleware]; middlewareArray.forEach((mw, index) => { this.dependencies.middlewareManager.register(mw, { name: `secure-middleware-${index}`, priority: "critical", cacheable: false, }); }); Logger.logger.debug("middleware", `Registered ${middlewareArray.length} secure middleware`); return this.dependencies.app; }; } /** * Add performance middleware methods */ addPerformanceMiddlewareMethods() { this.dependencies.app.usePerformance = (middleware) => { const middlewareArray = Array.isArray(middleware) ? middleware : [middleware]; middlewareArray.forEach((mw, index) => { this.dependencies.middlewareManager.register(mw, { name: `performance-middleware-${index}`, priority: "high", cacheable: true, }); }); Logger.logger.debug("middleware", `Registered ${middlewareArray.length} performance middleware`); return this.dependencies.app; }; } /** * Add cached middleware methods */ addCachedMiddlewareMethods() { this.dependencies.app.useCached = (middleware, ttl) => { const middlewareArray = Array.isArray(middleware) ? middleware : [middleware]; middlewareArray.forEach((mw, index) => { this.dependencies.middlewareManager.register(mw, { name: `cached-middleware-${index}`, priority: "normal", cacheable: true, ttl: ttl || 300000, // 5 minutes default }); }); Logger.logger.debug("middleware", `Registered ${middlewareArray.length} cached middleware`); return this.dependencies.app; }; } /** * Add middleware management methods */ addMiddlewareManagementMethods() { // Get middleware information this.dependencies.app.getMiddleware = (name) => { return this.dependencies.middlewareManager.getInfo(name); }; // Remove middleware this.dependencies.app.removeMiddleware = (name) => { try { // Find middleware by name and get its ID from the manager's registry const middlewareId = this.findMiddlewareIdByName(name); if (middlewareId) { const success = this.dependencies.middlewareManager.unregister(middlewareId); if (success) { Logger.logger.debug("middleware", `Middleware removed: ${name} (${middlewareId})`); return true; } } Logger.logger.warn("middleware", `Middleware not found: ${name}`); return false; } catch (error) { Logger.logger.error("middleware", `Failed to remove middleware: ${error}`); return false; } }; // Get middleware statistics this.dependencies.app.getMiddlewareStats = () => { return this.dependencies.middlewareManager.getStats(); }; } /** * Find middleware ID by name from the manager's registry * This method accesses the internal registry to get the ID */ findMiddlewareIdByName(name) { try { // Access the middleware manager's internal registry // Since we need to access private members, we'll use a workaround const manager = this.dependencies.middlewareManager; if (manager.middlewareRegistry && manager.middlewareRegistry instanceof Map) { // Iterate through the registry to find middleware by name for (const [id, entry,] of manager.middlewareRegistry.entries()) { if (entry.name === name) { return id; } } } // Alternative approach: try to use reflection to access the registry const registryKeys = Object.getOwnPropertyNames(manager); for (const key of registryKeys) { if (key.includes("registry") || key.includes("Registry")) { const registry = manager[key]; if (registry instanceof Map) { for (const [id, entry] of registry.entries()) { if (entry && typeof entry === "object" && entry.name === name) { return id; } } } } } Logger.logger.warn("middleware", `Could not find ID for middleware: ${name}`); return null; } catch (error) { Logger.logger.error("middleware", `Error finding middleware ID: ${error}`); return null; } } /** * Add convenience methods for common middleware types */ addConvenienceMethods() { // Enable security middleware this.dependencies.app.enableSecurity = (options) => { this.dependencies.middlewareManager.enableSecurity(options); Logger.logger.debug("middleware", "Security middleware enabled via convenience method"); return this.dependencies.app; }; // Enable compression middleware this.dependencies.app.enableCompression = (options) => { this.dependencies.middlewareManager.enableCompression(options); Logger.logger.debug("middleware", "Compression middleware enabled via convenience method"); return this.dependencies.app; }; // Enable rate limiting middleware this.dependencies.app.enableRateLimit = (options) => { this.dependencies.middlewareManager.enableRateLimit(options); Logger.logger.debug("middleware", "Rate limiting middleware enabled via convenience method"); return this.dependencies.app; }; // Enable CORS middleware this.dependencies.app.enableCors = (options) => { this.dependencies.middlewareManager.enableCors(options); Logger.logger.debug("middleware", "CORS middleware enabled via convenience method"); return this.dependencies.app; }; } } exports.MiddlewareMethodsManager = MiddlewareMethodsManager; //# sourceMappingURL=MiddlewareMethodsManager.js.map