import { io, Socket } from 'socket.io-client'; const WS_URL = import.meta.env.VITE_WS_URL || ''; const WS_SESSION_KEY = 'glmpilot:ws-session'; function getWebSocketSessionId(): string { try { const existing = sessionStorage.getItem(WS_SESSION_KEY); if (existing) return existing; const id = crypto.randomUUID(); sessionStorage.setItem(WS_SESSION_KEY, id); return id; } catch { return `tab-${Date.now()}-${Math.random().toString(36).slice(2)}`; } } let socket: Socket | null = null; export function getSocket(): Socket { if (!socket) { const sessionId = getWebSocketSessionId(); socket = io(WS_URL, { query: { sessionId }, auth: { sessionId }, transports: ['websocket', 'polling'], reconnection: true, reconnectionAttempts: 10, reconnectionDelay: 1000, reconnectionDelayMax: 5000, autoConnect: true, }); socket.on('connect', () => { console.log('WebSocket connected:', socket?.id); }); socket.on('disconnect', (reason) => { console.log('WebSocket disconnected:', reason); }); socket.on('connect_error', (error) => { console.warn('WebSocket connection error:', error.message); }); } return socket; } export function disconnectSocket() { if (socket) { socket.disconnect(); socket = null; } }