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
JavaScript
'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