aboutsummaryrefslogtreecommitdiff
path: root/api/src/plugins/events.plugin.ts
diff options
context:
space:
mode:
authorzwlucas <lucas.fariamo08@gmail.com>2026-07-25 21:23:29 +0000
committerzwlucas <lucas.fariamo08@gmail.com>2026-07-25 21:23:29 +0000
commitef55d9bb24430610b60c1b77821307cd72c08c55 (patch)
treee6935a810b34370b0a4c821e55f6397aac50c832 /api/src/plugins/events.plugin.ts
downloadhelpdesk-master.tar.gz
helpdesk-master.zip
feat: upload of the projectHEADmaster
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.ts34
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',
+});