import type { Server as IOServer } from "socket.io"; import type { z } from "zod"; import type { IRealtimeBroadcaster } from "./realtime-broadcaster.interface"; import type { RealtimeChannelDescriptor } from "./realtime-channel"; export class SocketIORealtimeBroadcaster implements IRealtimeBroadcaster { constructor(private readonly io: IOServer) {} async broadcast( descriptor: RealtimeChannelDescriptor>, payload: T, ): Promise { descriptor.schema.parse(payload); this.io.to(`ch:${descriptor.name}`).emit(descriptor.name, payload); } }