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.

291 lines (288 loc) 9.96 kB
import { middleware } from '../../../../../express.middleware.js'; import { logger } from '../../../utils/Logger.js'; /** * MiddlewareAPI - User-friendly middleware interface that follows the specified pattern * Returns a middleware object with register() method for custom middleware */ class MiddlewareAPI { constructor(Manager, app, config = {}) { this.Manager = Manager; this.app = app; this.config = config; // Apply default middleware based on configuration this.applyDefaultMiddleware(); } /** * Register custom middleware with options */ register(middleware, options) { try { this.Manager.register(middleware, options); logger.debug("middleware", `Custom middleware registered: ${options?.name || "anonymous"}`); } catch (error) { logger.error("middleware", `Failed to register middleware: ${error}`); } return this; } /** * Unregister middleware by ID */ unregister(id) { try { this.Manager.unregister(id); logger.debug("middleware", `Middleware unregistered: ${id}`); } catch (error) { logger.error("middleware", `Failed to unregister middleware: ${error}`); } return this; } /** * Enable middleware by ID */ enable(id) { try { this.Manager.enable(id); logger.debug("middleware", `Middleware enabled: ${id}`); } catch (error) { logger.error("middleware", `Failed to enable middleware: ${error}`); } return this; } /** * Disable middleware by ID */ disable(id) { try { this.Manager.disable(id); logger.debug("middleware", `Middleware disabled: ${id}`); } catch (error) { logger.error("middleware", `Failed to disable middleware: ${error}`); } return this; } /** * Get middleware information */ getInfo(id) { return this.Manager.getInfo(id); } /** * Get middleware statistics */ getStats() { return this.Manager.getStats(); } /** * Clear all middleware */ clear() { try { // Get all middleware IDs and unregister them const allMiddleware = this.Manager.getInfo(); allMiddleware.forEach((middleware) => { // Find the ID from the registry (this is a simplified approach) // In a real implementation, we'd need to track IDs better }); logger.debug("middleware", "All custom middleware cleared"); } catch (error) { logger.error("middleware", `Failed to clear middleware: ${error}`); } return this; } /** * Optimize middleware execution */ async optimize() { try { await this.Manager.optimize(); logger.debug("middleware", "Middleware optimization completed"); } catch (error) { logger.error("middleware", `Failed to optimize middleware: ${error}`); } return this; } /** * Apply default middleware based on configuration */ applyDefaultMiddleware() { logger.debug("middleware", "Applying default middleware configuration..."); // Apply FortifyJS middleware if security is enabled if (this.config.security !== false) { try { const securityOptions = typeof this.config.security === "object" ? this.config.security : {}; // Convert complex rateLimit config to boolean for FortifyJS middleware const rateLimitEnabled = this.config.rateLimit !== false; const maxRequestsPerMinute = typeof this.config.rateLimit === "object" ? this.config.rateLimit.max || 100 : 100; const fortifyMiddlewareHandler = middleware({ ...securityOptions, csrfProtection: securityOptions.csrfProtection || false, secureHeaders: securityOptions.helmet !== false, rateLimit: rateLimitEnabled, maxRequestsPerMinute, customHeaders: securityOptions.customHeaders || {}, }); this.Manager.register(fortifyMiddlewareHandler, { name: "fortify-security", priority: "critical", cacheable: false, }); logger.debug("middleware", "FortifyJS security middleware applied"); } catch (error) { logger.warn("middleware", `Failed to apply FortifyJS middleware: ${error}`); } } // Apply CORS if enabled if (this.config.cors !== false) { try { const corsOptions = typeof this.config.cors === "object" ? this.config.cors : {}; this.Manager.enableCors(corsOptions); logger.debug("middleware", "CORS middleware applied"); } catch (error) { logger.warn("middleware", `Failed to apply CORS middleware: ${error}`); } } // Apply compression if enabled if (this.config.compression !== false) { try { const compressionOptions = typeof this.config.compression === "object" ? this.config.compression : {}; this.Manager.enableCompression(compressionOptions); logger.debug("middleware", "Compression middleware applied"); } catch (error) { logger.warn("middleware", `Failed to apply compression middleware: ${error}`); } } // Apply rate limiting if enabled if (this.config.rateLimit !== false) { try { const rateLimitOptions = typeof this.config.rateLimit === "object" ? this.config.rateLimit : {}; this.Manager.enableRateLimit(rateLimitOptions); logger.debug("middleware", "Rate limiting middleware applied"); } catch (error) { logger.warn("middleware", `Failed to apply rate limiting middleware: ${error}`); } } // Apply custom headers if specified if (this.config.customHeaders) { try { const customHeadersMiddleware = (req, res, next) => { Object.entries(this.config.customHeaders).forEach(([key, value]) => { res.setHeader(key, value); }); next(); }; this.Manager.register(customHeadersMiddleware, { name: "custom-headers", priority: "high", cacheable: true, ttl: 3600000, // 1 hour }); logger.debug("middleware", "Custom headers middleware applied"); } catch (error) { logger.warn("middleware", `Failed to apply custom headers middleware: ${error}`); } } logger.debug("middleware", "Default middleware configuration applied"); } /** * Update configuration and reapply middleware */ updateConfig(newConfig) { this.config = { ...this.config, ...newConfig }; this.Manager.configure(this.config); // Reapply default middleware with new configuration this.applyDefaultMiddleware(); logger.debug("middleware", "Middleware configuration updated"); return this; } /** * Get current configuration */ getConfig() { return { ...this.config }; } /** * Enable performance tracking for all middleware */ enablePerformanceTracking() { this.config.enablePerformanceTracking = true; this.Manager.configure(this.config); logger.debug("middleware", "Performance tracking enabled for all middleware"); return this; } /** * Disable performance tracking for all middleware */ disablePerformanceTracking() { this.config.enablePerformanceTracking = false; this.Manager.configure(this.config); logger.debug("middleware", "Performance tracking disabled for all middleware"); return this; } /** * Enable caching for all middleware */ enableCaching() { this.config.enableCaching = true; this.Manager.configure(this.config); logger.debug("middleware", "Caching enabled for all middleware"); return this; } /** * Disable caching for all middleware */ disableCaching() { this.config.enableCaching = false; this.Manager.configure(this.config); logger.debug("middleware", "Caching disabled for all middleware"); return this; } /** * Warm up middleware cache */ async warmCache() { try { await this.Manager.warmCache(); logger.debug("middleware", "Middleware cache warmed up"); } catch (error) { logger.error("middleware", `Failed to warm cache: ${error}`); } return this; } /** * Clear middleware cache */ clearCache() { try { this.Manager.clearCache(); logger.debug("middleware", "Middleware cache cleared"); } catch (error) { logger.error("middleware", `Failed to clear cache: ${error}`); } return this; } } export { MiddlewareAPI }; //# sourceMappingURL=MiddlewareAPI.js.map