import * as plugins from '../../plugins.js'; import type { OpsServer } from '../classes.opsserver.js'; import * as interfaces from '../../../ts_interfaces/index.js'; import { requireOpsAuth } from '../helpers/auth.js'; /** * Handlers for the platform configuration event inbox (list + acknowledge). */ export class ConfigEventHandler { public typedrouter = new plugins.typedrequest.TypedRouter(); constructor(private opsServerRef: OpsServer) { this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter); this.registerHandlers(); } private registerHandlers(): void { this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'listConfigEvents', async (dataArg) => { await requireOpsAuth(this.opsServerRef, dataArg, { scope: 'config-events:read' }); const opsEventManager = this.opsServerRef.dcRouterRef.opsEventManager; if (!opsEventManager) { return { events: [], total: 0, unacknowledgedCount: 0, nextCursor: undefined }; } return opsEventManager.listEvents({ acknowledged: dataArg.acknowledged, severity: dataArg.severity, category: dataArg.category, limit: dataArg.limit, cursor: dataArg.cursor, }); }, ), ); this.typedrouter.addTypedHandler( new plugins.typedrequest.TypedHandler( 'acknowledgeConfigEvents', async (dataArg) => { const auth = await requireOpsAuth(this.opsServerRef, dataArg, { scope: 'config-events:write', requireAdminIdentity: true, }); const opsEventManager = this.opsServerRef.dcRouterRef.opsEventManager; if (!opsEventManager) { return { success: false, acknowledgedCount: 0, message: 'OpsEventManager not initialized' }; } const acknowledgedCount = await opsEventManager.acknowledgeEvents( dataArg.ids || [], auth.userId, ); this.opsServerRef.invalidateRealtime?.(['configEvents'], { reason: 'config-events-acknowledged', }); return { success: true, acknowledgedCount }; }, ), ); } }