import * as plugins from '../plugins.ts'; import { logger } from '../logging.ts'; import type { GitopsApp } from '../classes/gitopsapp.ts'; import * as handlers from './handlers/index.ts'; export class OpsServer { public gitopsAppRef: GitopsApp; public typedrouter = new plugins.typedrequest.TypedRouter(); public server!: plugins.typedserver.utilityservers.UtilityWebsiteServer; // Handler instances public adminHandler!: handlers.AdminHandler; public connectionsHandler!: handlers.ConnectionsHandler; public projectsHandler!: handlers.ProjectsHandler; public groupsHandler!: handlers.GroupsHandler; public secretsHandler!: handlers.SecretsHandler; public pipelinesHandler!: handlers.PipelinesHandler; public logsHandler!: handlers.LogsHandler; constructor(gitopsAppRef: GitopsApp) { this.gitopsAppRef = gitopsAppRef; } public async start(port = 3000) { const absoluteServeDir = plugins.path.resolve('./dist_serve'); this.server = new plugins.typedserver.utilityservers.UtilityWebsiteServer({ domain: 'localhost', feedMetadata: undefined, serveDir: absoluteServeDir, }); // Chain typedrouters this.server.typedrouter.addTypedRouter(this.typedrouter); // Set up all handlers await this.setupHandlers(); await this.server.start(port); logger.success(`OpsServer started on http://localhost:${port}`); } private async setupHandlers(): Promise { // AdminHandler requires async initialization for JWT key generation this.adminHandler = new handlers.AdminHandler(this); await this.adminHandler.initialize(); // All other handlers self-register in their constructors this.connectionsHandler = new handlers.ConnectionsHandler(this); this.projectsHandler = new handlers.ProjectsHandler(this); this.groupsHandler = new handlers.GroupsHandler(this); this.secretsHandler = new handlers.SecretsHandler(this); this.pipelinesHandler = new handlers.PipelinesHandler(this); this.logsHandler = new handlers.LogsHandler(this); logger.success('OpsServer TypedRequest handlers initialized'); } public async stop() { if (this.server) { await this.server.stop(); logger.success('OpsServer stopped'); } } }