@genkit-ai/telemetry-server
Version:
Genkit AI telemetry server
52 lines • 1.62 kB
JavaScript
export class BroadcastManager {
connections = new Map();
subscribe(traceId, response) {
if (!this.connections.has(traceId)) {
this.connections.set(traceId, new Set());
}
this.connections.get(traceId).add(response);
response.on('close', () => {
this.unsubscribe(traceId, response);
});
}
unsubscribe(traceId, response) {
const connections = this.connections.get(traceId);
if (connections) {
connections.delete(response);
if (connections.size === 0) {
this.connections.delete(traceId);
}
}
}
broadcast(traceId, event) {
const connections = this.connections.get(traceId);
if (!connections || connections.size === 0) {
return;
}
const data = JSON.stringify(event);
const messageToSend = `data: ${data}\n\n`;
for (const connection of connections) {
connection.write(messageToSend);
}
}
close(traceId) {
const connections = this.connections.get(traceId);
if (connections) {
for (const connection of connections) {
try {
connection.end();
}
catch (error) {
}
}
this.connections.delete(traceId);
}
}
getConnectionCount(traceId) {
return this.connections.get(traceId)?.size ?? 0;
}
hasConnections(traceId) {
return this.connections.has(traceId);
}
}
//# sourceMappingURL=broadcast-manager.js.map