diff options
| author | zwlucas <lucas.fariamo08@gmail.com> | 2026-07-25 21:23:29 +0000 |
|---|---|---|
| committer | zwlucas <lucas.fariamo08@gmail.com> | 2026-07-25 21:23:29 +0000 |
| commit | ef55d9bb24430610b60c1b77821307cd72c08c55 (patch) | |
| tree | e6935a810b34370b0a4c821e55f6397aac50c832 /api/src/plugins/events.plugin.ts | |
| download | helpdesk-master.tar.gz helpdesk-master.zip | |
Signed-off-by: zwlucas <lucas.fariamo08@gmail.com>
Diffstat (limited to 'api/src/plugins/events.plugin.ts')
| -rw-r--r-- | api/src/plugins/events.plugin.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/api/src/plugins/events.plugin.ts b/api/src/plugins/events.plugin.ts new file mode 100644 index 0000000..fdf0e74 --- /dev/null +++ b/api/src/plugins/events.plugin.ts @@ -0,0 +1,34 @@ +/** + * 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<void> { + const emitter = new EventEmitter(); + // Permite muitos clientes SSE conectados simultaneamente + emitter.setMaxListeners(100); + + fastify.decorate('events', emitter); +} + +export default fp(eventsPlugin, { + name: 'events-plugin', +}); |