spotify/server/dist/lib/events.js
2025-10-16 13:07:44 +02:00

49 lines
1.3 KiB
JavaScript

const clientsByUser = new Map();
export function addSseClient(userId, res) {
const client = {
userId,
res,
write: (payload) => {
try {
res.write(`data: ${JSON.stringify(payload)}\n\n`);
}
catch { }
},
};
if (!clientsByUser.has(userId))
clientsByUser.set(userId, new Set());
clientsByUser.get(userId).add(client);
// Initial hello
client.write({ type: 'hello', at: Date.now() });
// Heartbeat to keep connections alive through proxies
const heartbeat = setInterval(() => {
try {
res.write(`: ping\n\n`);
}
catch { }
}, 25000);
// Return cleanup
return () => {
clearInterval(heartbeat);
try {
res.end();
}
catch { }
clientsByUser.get(userId)?.delete(client);
if (clientsByUser.get(userId)?.size === 0)
clientsByUser.delete(userId);
};
}
export function sendEvent(userId, event) {
const set = clientsByUser.get(userId);
if (!set || set.size === 0)
return;
for (const client of set)
client.write(event);
}
export function sendToBoth(userA, userB, event) {
sendEvent(userA, event);
if (userB !== userA)
sendEvent(userB, event);
}