diff --git a/backend/src/agent-ws.ts b/backend/src/agent-ws.ts index 3845c26..064f2d8 100644 --- a/backend/src/agent-ws.ts +++ b/backend/src/agent-ws.ts @@ -97,17 +97,22 @@ export const setupAgentWsRoute: FastifyPluginAsync = async (fastify) => { fastify.get('/ws/agent', { websocket: true }, async (connection: SocketStream, req) => { const socket = connection.socket as AgentSocket + // Если соединение не WebSocket (HEAD/GET без Upgrade) — просто закрываем + const safeClose = (code: number, reason: string) => { + try { socket.close(code, reason) } catch { /* HTTP-сокет — игнорируем */ } + } + // Аутентификация по токену из заголовка try { const authHeader = req.headers.authorization ?? '' const token = authHeader.replace('Bearer ', '') - if (!token) { socket.close(1008, 'Unauthorized'); return } + if (!token) { safeClose(1008, 'Unauthorized'); return } const payload = fastify.jwt.verify(token) as { sub: string; role: string; workstation_id: string; hotel_slug: string } - if (payload.role !== 'agent') { socket.close(1008, 'Forbidden'); return } + if (payload.role !== 'agent') { safeClose(1008, 'Forbidden'); return } socket.agentId = payload.sub socket.workstationId = payload.workstation_id @@ -115,7 +120,7 @@ export const setupAgentWsRoute: FastifyPluginAsync = async (fastify) => { socket.isAlive = true } catch { - socket.close(1008, 'Invalid token') + safeClose(1008, 'Invalid token') return }