stock-bot/apps/stock/web-api/src/routes/websocket.routes.ts
2025-07-04 17:04:47 -04:00

47 lines
No EOL
1.4 KiB
TypeScript

import type { IServiceContainer } from '@stock-bot/handlers';
import { createWebSocketHandler } from '../websocket/run-updates';
import { getLogger } from '@stock-bot/logger';
const logger = getLogger('websocket-routes');
export function createWebSocketRoute(container: IServiceContainer) {
const wsHandler = createWebSocketHandler(container);
// Make the handler available globally for other services
(global as any).wsHandler = wsHandler;
return (request: Request, server: any) => {
const url = new URL(request.url);
const runId = url.searchParams.get('runId');
if (!runId) {
return new Response('Missing runId parameter', { status: 400 });
}
logger.info(`WebSocket upgrade request for run: ${runId}`);
// Upgrade the connection to WebSocket
const success = server.upgrade(request, {
data: { runId }
});
if (success) {
logger.info(`WebSocket upgrade successful for run: ${runId}`);
// Return undefined to indicate successful upgrade
return;
} else {
logger.error(`WebSocket upgrade failed for run: ${runId}`);
return new Response('WebSocket upgrade failed', { status: 500 });
}
};
}
// WebSocket connection handler for Bun
export function handleWebSocketConnection(ws: any) {
const { runId } = ws.data;
const wsHandler = (global as any).wsHandler;
if (wsHandler && runId) {
wsHandler.handleConnection(ws, runId);
}
}