/** * events.plugin.ts * * Expõe um EventEmitter global no fastify para pub/sub em memória. * Ideal para disparar Server-Sent Events (SSE) aos clientes conectados. */ import fp from 'fastify-plugin'; import { EventEmitter } from 'node:events'; import type { FastifyInstance } from 'fastify'; export interface AppEventMap { 'ticket.created': { id: number; title: string; creatorId: number }; 'ticket.updated': { id: number; status: string; assigneeId: number | null; creatorId: number; authorId: number }; 'comment.added': { ticketId: number; authorId: number; isInternal: boolean; creatorId: number; assigneeId: number | null }; } declare module 'fastify' { interface FastifyInstance { events: EventEmitter; } } async function eventsPlugin(fastify: FastifyInstance): Promise { const emitter = new EventEmitter(); // Permite muitos clientes SSE conectados simultaneamente emitter.setMaxListeners(100); fastify.decorate('events', emitter); } export default fp(eventsPlugin, { name: 'events-plugin', });