Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import type { NotificationChannel, DeliveryTarget, NotificationEvent, DeliveryResult, } from '../types' import { formatNotificationContent } from '../types' import { getSocketIO } from '@/lib/socket-io' /** * Socket.IO in-app notification channel. * * Emits a typed notification event to the user's Socket.IO room * so that connected clients can show an in-app toast/banner. */ export const socketIOChannel: NotificationChannel = { name: 'inApp', canDeliver(target: DeliveryTarget): boolean { return target.channels.inApp && !!target.userId }, async deliver(target: DeliveryTarget, event: NotificationEvent): Promise<DeliveryResult> { const io = await getSocketIO() if (!io) { return { success: false, error: 'Socket.IO server not available' } } const content = formatNotificationContent(event) io.to(`user:${target.userId}`).emit('notification', { type: event.type, ...content, data: event.data, }) return { success: true } }, } |