const API_URL = 'https://alpenqueue.maxtheweb.com'; const SSE_URL = 'https://maxtheweb.com/events'; let eventSource = null; let currentJobId = null; let jobsQueued = 0; let resultsReceived = 0; // Initialize SSE connection function initSSE() { if (eventSource) { eventSource.close(); } eventSource = new EventSource(SSE_URL); eventSource.onopen = function() { console.log('SSE connection established'); updateConnectionStatus('connected'); }; eventSource.onmessage = function(event) { try { const data = JSON.parse(event.data); if (data.type === 'connected') { console.log('SSE handshake complete'); return; } if (data.type === 'result') { displayResult(data); } } catch (error) { console.error('Error parsing SSE message:', error); } }; eventSource.onerror = function(error) { console.error('SSE error:', error); updateConnectionStatus('disconnected'); // Reconnect after 5 seconds setTimeout(() => { if (eventSource.readyState === EventSource.CLOSED) { initSSE(); } }, 5000); }; } function updateConnectionStatus(status) { const indicator = document.getElementById('connection-status'); if (!indicator) return; indicator.className = 'connection-status ' + status; indicator.textContent = status === 'connected' ? '● Live' : '○ Reconnecting...'; } function displayResult(data) { const resultsContainer = document.getElementById('live-results'); if (!resultsContainer) return; // Remove the "no results" message if it exists const noResults = resultsContainer.querySelector('.no-results'); if (noResults) { noResults.remove(); } // Increment results received counter resultsReceived++; document.getElementById('results-received').textContent = resultsReceived; const resultDiv = document.createElement('div'); resultDiv.className = 'result-item ' + (data.status || 'ok'); const timestamp = new Date(data.timestamp).toLocaleTimeString(); resultDiv.innerHTML = `
${escapeHtml(data.content.substring(0, 500))}${data.content.length > 500 ? '...' : ''}` : 'No content extracted'}
${jobId}