import type { TelemetryMap, ITelemetryEvent, TelemetryEvents } from '@rocket.chat/core-services'; type TelemetryEventResponse = Promise | void; type TelemetryEventFunction = (data: TelemetryMap[T]) => TelemetryEventResponse; class TelemetryEvent implements ITelemetryEvent { private events = new Map any>(); register(name: T, fn: TelemetryEventFunction): void { this.events.set(name, fn); } call(eventName: T, data: TelemetryMap[T]): TelemetryEventResponse { const fn = this.events.get(eventName) as TelemetryEventFunction; if (!fn) { throw new Error('event not found'); } return fn(data); } } const telemetryEvent = new TelemetryEvent(); export default telemetryEvent;