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.

152 lines (148 loc) 5.55 kB
'use strict'; var events = require('events'); var routeOptimizationPlugin = require('./route-optimization-plugin.js'); var serverMaintenancePlugin = require('./server-maintenance-plugin.js'); /** * Plugin Manager * * Manages all server plugins including route optimization and maintenance */ class PluginManager extends events.EventEmitter { constructor(config = {}) { super(); this.config = config; this.customPlugins = new Map(); } /** * Initialize all plugins */ initialize(app, logger) { this.logger = logger; // Initialize route optimization plugin if (this.config.routeOptimization?.enabled !== false) { this.routeOptimizationPlugin = new routeOptimizationPlugin.RouteOptimizationPlugin(this.config.routeOptimization); this.routeOptimizationPlugin.initialize(app, logger); // Forward events this.routeOptimizationPlugin.on("route_optimized", (data) => { this.emit("route_optimized", data); }); this.routeOptimizationPlugin.on("analysis_complete", (data) => { this.emit("route_analysis_complete", data); }); } // Initialize server maintenance plugin if (this.config.serverMaintenance?.enabled !== false) { this.serverMaintenancePlugin = new serverMaintenancePlugin.ServerMaintenancePlugin(this.config.serverMaintenance); this.serverMaintenancePlugin.initialize(app, logger); // Forward events this.serverMaintenancePlugin.on("issue_detected", (issue) => { this.emit("maintenance_issue", issue); }); this.serverMaintenancePlugin.on("health_check", (metrics) => { this.emit("health_check", metrics); }); this.serverMaintenancePlugin.on("maintenance_complete", (actions) => { this.emit("maintenance_complete", actions); }); this.serverMaintenancePlugin.on("critical_issue", (issue) => { this.emit("critical_issue", issue); }); } // Initialize custom plugins if (this.config.customPlugins) { for (const { name, plugin, config } of this.config.customPlugins) { try { const pluginInstance = new plugin(config); if (pluginInstance.initialize) { pluginInstance.initialize(app, logger); } this.customPlugins.set(name, pluginInstance); logger.info("plugins", `Custom plugin initialized: ${name}`); } catch (error) { logger.error("plugins", `Failed to initialize custom plugin ${name}: ${error}`); } } } logger.info("plugins", "Plugin Manager initialized"); } /** * Get route optimization plugin */ getRouteOptimizationPlugin() { return this.routeOptimizationPlugin; } /** * Get server maintenance plugin */ getServerMaintenancePlugin() { return this.serverMaintenancePlugin; } /** * Get custom plugin by name */ getCustomPlugin(name) { return this.customPlugins.get(name); } /** * Get comprehensive server status */ getServerStatus() { const status = { timestamp: new Date(), uptime: process.uptime(), plugins: { routeOptimization: !!this.routeOptimizationPlugin, serverMaintenance: !!this.serverMaintenancePlugin, custom: Array.from(this.customPlugins.keys()), }, }; // Add route optimization data if (this.routeOptimizationPlugin) { status.routeOptimization = { trackedRoutes: this.routeOptimizationPlugin.getRouteStats().length, optimizedRoutes: this.routeOptimizationPlugin.getOptimizedRoutes().length, topRoutes: this.routeOptimizationPlugin .getRouteStats() .slice(0, 5), }; } // Add maintenance data if (this.serverMaintenancePlugin) { const healthMetrics = this.serverMaintenancePlugin.getHealthMetrics(); const issues = this.serverMaintenancePlugin.getUnresolvedIssues(); status.maintenance = { health: healthMetrics, unresolvedIssues: issues.length, criticalIssues: issues.filter((i) => i.severity >= 8).length, recentIssues: issues.slice(-5), }; } return status; } /** * Destroy all plugins */ destroy() { if (this.routeOptimizationPlugin) { this.routeOptimizationPlugin.destroy(); } if (this.serverMaintenancePlugin) { this.serverMaintenancePlugin.destroy(); } for (const [name, plugin] of this.customPlugins.entries()) { try { if (plugin.destroy) { plugin.destroy(); } } catch (error) { this.logger?.error("plugins", `Error destroying custom plugin ${name}: ${error}`); } } this.customPlugins.clear(); this.removeAllListeners(); } } exports.PluginManager = PluginManager; //# sourceMappingURL=plugin-manager.js.map