fix: add safeWrite guard and error handler for SSE socket

This commit is contained in:
Kirill
2026-05-22 18:37:55 +05:00
parent 5127d4a093
commit e2a04d04a3
+23 -8
View File
@@ -104,22 +104,37 @@ export async function registerSseRoutes(fastify) {
'X-Accel-Buffering': 'no', 'X-Accel-Buffering': 'no',
}) })
let closed = false
function safeWrite(chunk) {
if (closed) return
try {
reply.raw.write(chunk)
} catch {
closed = true
cleanUp()
}
}
const userId = request.user.sub const userId = request.user.sub
const admin = isAdminUser(request.user) const admin = isAdminUser(request.user)
reply.raw.write(formatHeartbit()) safeWrite(formatHeartbit())
const heartbitTimer = setInterval(() => { const heartbitTimer = setInterval(() => {
reply.raw.write(formatHeartbit()) safeWrite(formatHeartbit())
}, 30_000) }, 30_000)
const cleanup = buildSseListeners(userId, admin, fastify.eventBus, (chunk) => { const removeListeners = buildSseListeners(userId, admin, fastify.eventBus, safeWrite)
reply.raw.write(chunk)
})
request.raw.on('close', () => { function cleanUp() {
if (closed) return
closed = true
clearInterval(heartbitTimer) clearInterval(heartbitTimer)
cleanup() removeListeners()
}) }
request.raw.on('close', cleanUp)
request.raw.on('error', cleanUp)
}) })
} }