TradingAgents/frontend/lib/websocket.ts

48 lines
1.1 KiB
TypeScript

import ReconnectingWebSocket from "reconnecting-websocket";
import { StreamUpdate } from "./types";
const WS_BASE_URL = process.env.NEXT_PUBLIC_WS_URL || "ws://localhost:8000";
export function createWebSocket(
analysisId: string,
onMessage: (update: StreamUpdate) => void,
onError?: (error: Event) => void,
onOpen?: () => void,
onClose?: () => void
): ReconnectingWebSocket {
const ws = new ReconnectingWebSocket(
`${WS_BASE_URL}/api/analysis/${analysisId}/stream`,
[],
{
connectionTimeout: 4000,
maxRetries: 10,
maxReconnectionDelay: 10000,
minReconnectionDelay: 1000,
}
);
ws.addEventListener("message", (event) => {
try {
const update: StreamUpdate = JSON.parse(event.data);
onMessage(update);
} catch (error) {
console.error("Failed to parse WebSocket message:", error);
}
});
if (onError) {
ws.addEventListener("error", onError);
}
if (onOpen) {
ws.addEventListener("open", onOpen);
}
if (onClose) {
ws.addEventListener("close", onClose);
}
return ws;
}