import { EventEmitter } from "node:events"; import type { LiveEvent, LiveEventType } from "@paperclip/shared"; type LiveEventPayload = Record; type LiveEventListener = (event: LiveEvent) => void; const emitter = new EventEmitter(); emitter.setMaxListeners(0); let nextEventId = 0; function toLiveEvent(input: { companyId: string; type: LiveEventType; payload?: LiveEventPayload; }): LiveEvent { nextEventId += 1; return { id: nextEventId, companyId: input.companyId, type: input.type, createdAt: new Date().toISOString(), payload: input.payload ?? {}, }; } export function publishLiveEvent(input: { companyId: string; type: LiveEventType; payload?: LiveEventPayload; }) { const event = toLiveEvent(input); emitter.emit(input.companyId, event); return event; } export function subscribeCompanyLiveEvents(companyId: string, listener: LiveEventListener) { emitter.on(companyId, listener); return () => emitter.off(companyId, listener); }