import type DcRouter from '../classes.dcrouter.js'; import * as plugins from '../plugins.js'; import * as paths from '../paths.js'; import * as handlers from './handlers/index.js'; export class OpsServer { public dcRouterRef: DcRouter; public server: plugins.typedserver.utilityservers.UtilityWebsiteServer; // TypedRouter for OpsServer-specific handlers public typedrouter = new plugins.typedrequest.TypedRouter(); // Handler instances private adminHandler: handlers.AdminHandler; private configHandler: handlers.ConfigHandler; private logsHandler: handlers.LogsHandler; private securityHandler: handlers.SecurityHandler; private statsHandler: handlers.StatsHandler; constructor(dcRouterRefArg: DcRouter) { this.dcRouterRef = dcRouterRefArg; // Add our typedrouter to the dcRouter's main typedrouter this.dcRouterRef.typedrouter.addTypedRouter(this.typedrouter); } public async start() { this.server = new plugins.typedserver.utilityservers.UtilityWebsiteServer({ domain: 'localhost', feedMetadata: null, serveDir: paths.distServe, }); // The server has a built-in typedrouter at /typedrequest // Add the main dcRouter typedrouter to the server's typedrouter this.server.typedrouter.addTypedRouter(this.dcRouterRef.typedrouter); // Set up handlers this.setupHandlers(); await this.server.start(3000); } /** * Set up all TypedRequest handlers */ private setupHandlers(): void { // Instantiate all handlers - they self-register with the typedrouter this.adminHandler = new handlers.AdminHandler(this); this.configHandler = new handlers.ConfigHandler(this); this.logsHandler = new handlers.LogsHandler(this); this.securityHandler = new handlers.SecurityHandler(this); this.statsHandler = new handlers.StatsHandler(this); console.log('✅ OpsServer TypedRequest handlers initialized'); } public async stop() { if (this.server) { await this.server.stop(); } } }