From 7b045b38a6023ec3f5173641882498a8ceae666c Mon Sep 17 00:00:00 2001 From: HotelSync Date: Tue, 17 Mar 2026 18:16:12 +0300 Subject: [PATCH] Fix ws.ts: use SocketStream from @fastify/websocket v8 Co-Authored-By: Claude Sonnet 4.6 --- backend/src/routes/ws.ts | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/backend/src/routes/ws.ts b/backend/src/routes/ws.ts index 1404c98..456a060 100644 --- a/backend/src/routes/ws.ts +++ b/backend/src/routes/ws.ts @@ -1,36 +1,37 @@ import { FastifyPluginAsync } from 'fastify' import fastifyWebsocket from '@fastify/websocket' -import type { WebSocket, RawData } from 'ws' +import type { SocketStream } from '@fastify/websocket' +import type { RawData } from 'ws' -// hotel slug → set of connected clients -const hotelRooms = new Map>() +// hotel slug → set of connected streams +const hotelRooms = new Map>() const ws: FastifyPluginAsync = async (fastify) => { await fastify.register(fastifyWebsocket) - fastify.get<{ Querystring: { hotel?: string; token?: string } }>( + fastify.get<{ Querystring: { hotel?: string } }>( '/ws', { websocket: true }, - (socket, request) => { - const hotel = request.query.hotel ?? '' - if (!hotel) { socket.close(4001, 'hotel required'); return } + (connection: SocketStream, request) => { + const hotel = (request.query as { hotel?: string }).hotel ?? '' + if (!hotel) { connection.socket.close(4001, 'hotel required'); return } if (!hotelRooms.has(hotel)) hotelRooms.set(hotel, new Set()) - hotelRooms.get(hotel)!.add(socket) + hotelRooms.get(hotel)!.add(connection) - socket.on('message', (raw: RawData) => { + connection.socket.on('message', (raw: RawData) => { const data = raw.toString() const peers = hotelRooms.get(hotel) if (!peers) return - peers.forEach(client => { - if (client !== socket && client.readyState === 1) { - client.send(data) + peers.forEach(peer => { + if (peer !== connection && peer.socket.readyState === 1) { + peer.socket.send(data) } }) }) - socket.on('close', () => { - hotelRooms.get(hotel)?.delete(socket) + connection.socket.on('close', () => { + hotelRooms.get(hotel)?.delete(connection) if (hotelRooms.get(hotel)?.size === 0) hotelRooms.delete(hotel) }) },