// check for auto-detected username chrome.tabs.query({active: true, currentWindow: true}, (tabs) => { if (tabs[0] && tabs[0].url && tabs[0].url.includes('openfront.io')) { chrome.scripting.executeScript({ target: {tabId: tabs[0].id}, func: () => localStorage.getItem('username') }, (results) => { if (results && results[0] && results[0].result) { document.getElementById('autoDetected').textContent = `detected: ${results[0].result}`; } }); } }); chrome.storage.sync.get(['serverUrl', 'roomId', 'playerName', 'enabled'], (data) => { // set defaults const serverUrl = data.serverUrl || 'wss://op.lopensed.dev'; const roomId = data.roomId || 'default'; document.getElementById('serverUrl').value = serverUrl; document.getElementById('roomId').value = roomId; if (data.playerName) document.getElementById('playerName').value = data.playerName; // auto-save defaults and enable if not already done if (!data.enabled || !data.serverUrl || !data.roomId) { chrome.storage.sync.set({ serverUrl: serverUrl, roomId: roomId, enabled: true }); } // ping server for debug pingServer(serverUrl); }); function pingServer(url) { const debug = document.getElementById('debug'); debug.textContent = 'checking server...'; debug.className = 'debug checking'; const ws = new WebSocket(url); const timeout = setTimeout(() => { ws.close(); debug.textContent = 'server: timeout'; debug.className = 'debug error'; }, 5000); ws.onopen = () => { clearTimeout(timeout); debug.textContent = 'server: ok'; debug.className = 'debug ok'; setTimeout(() => ws.close(), 100); }; ws.onerror = () => { clearTimeout(timeout); debug.textContent = 'server: unreachable'; debug.className = 'debug error'; }; } document.getElementById('saveBtn').addEventListener('click', () => { const serverUrl = document.getElementById('serverUrl').value.trim() || 'wss://op.lopensed.dev'; const roomId = document.getElementById('roomId').value.trim() || 'default'; const playerName = document.getElementById('playerName').value.trim(); chrome.storage.sync.set({ serverUrl: serverUrl, roomId: roomId, playerName: playerName, enabled: true }, () => { showStatus('saved - refresh page', 'success'); }); }); document.getElementById('disableBtn').addEventListener('click', () => { chrome.storage.sync.set({ enabled: false }, () => { showStatus('disabled - refresh page', 'success'); }); }); function showStatus(message, type) { const status = document.getElementById('status'); status.textContent = message; status.className = `status ${type}`; status.style.display = 'block'; setTimeout(() => { status.style.display = 'none'; }, 3000); }