import type { FastifyPluginAsync } from 'fastify' import type { Type } from 'typebox' import type { Channel } from '../prisma/generated-client/client.ts' import type { UserSchema } from './schemas/auth.ts' import type { ChatMessageSchema } from './schemas/chat.ts' import { EventEmitter } from 'node:events' import fp from 'fastify-plugin' declare module 'fastify' { interface FastifyInstance { bus: EventEmitter } } interface EventMap { 'chat:new-message': [Type.Static] 'user:profile-updated': [Type.Static] 'channel:created': [Channel] 'channel:removed': [Channel] } const plugin: FastifyPluginAsync = fp(async (fastify) => { const bus = new EventEmitter() fastify.decorate('bus', bus) }, { name: 'event-bus', }) export default plugin