Download packages/client/src/services/socket.ts from E5K7/asipilot: direct link, hf CLI and curl.
- Browser
- Download file 1.35 kB
-
https://huggingface.co/spaces/E5K7/asipilot/resolve/main/packages/client/src/services/socket.ts
- Command line
-
hf download hf://spaces/E5K7/asipilot/packages/client/src/services/socket.ts
-
curl -L -o socket.ts https://huggingface.co/spaces/E5K7/asipilot/resolve/main/packages/client/src/services/socket.ts
1.35 kB
| import { io, Socket } from 'socket.io-client'; | |
| const WS_URL = import.meta.env.VITE_WS_URL || ''; | |
| const WS_SESSION_KEY = 'asipilot: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; | |
| } | |
| } | |