Files
MultiRoombaRover/webui/src/lib/socket.js
T
2026-01-23 04:12:38 -05:00

34 lines
1.2 KiB
JavaScript

import { io } from 'socket.io-client';
import { loadSettings } from '../settings/persistence.js';
const configured = import.meta.env.VITE_ROVERD_URL?.trim();
const resolvedUrl = configured && configured.length > 0 ? configured : window.location.origin;
console.info('[socket] connecting to', resolvedUrl);
const settings = loadSettings();
const transportPref = settings?.page?.connectionTransport || 'websocket';
const transports = transportPref === 'polling' ? ['polling'] : ['websocket', 'polling'];
const CLIENT_ID_KEY = 'roverd_client_id';
function getClientId() {
if (typeof window === 'undefined') return null;
try {
const existing = window.localStorage.getItem(CLIENT_ID_KEY);
if (existing) return existing;
const created = (crypto?.randomUUID && crypto.randomUUID()) || `${Date.now()}-${Math.random().toString(16).slice(2)}`;
window.localStorage.setItem(CLIENT_ID_KEY, created);
return created;
} catch (err) {
return null;
}
}
const clientId = getClientId();
export const socket = io(resolvedUrl, {
transports,
timeout: 15000,
auth: {
clientId,
},
});
socket.on('connect_error', (err) => console.error('connect_error', err.code, err.message, err.data));