import apiClient from './apiClient.js'; class DebugConsoleView { constructor(section, wsClient) { this.section = section; this.wsClient = wsClient; this.healthStatus = section.querySelector('[data-health-status]'); this.providersContainer = section.querySelector('[data-providers]'); this.requestLogBody = section.querySelector('[data-request-log]'); this.errorLogBody = section.querySelector('[data-error-log]'); this.wsLogBody = section.querySelector('[data-ws-log]'); this.refreshButton = section.querySelector('[data-refresh-health]'); } init() { this.refresh(); if (this.refreshButton) { this.refreshButton.addEventListener('click', () => this.refresh()); } apiClient.onLog(() => this.renderRequestLogs()); apiClient.onError(() => this.renderErrorLogs()); this.wsClient.onStatusChange(() => this.renderWsLogs()); this.wsClient.onMessage(() => this.renderWsLogs()); } async refresh() { const [health, providers] = await Promise.all([apiClient.getHealth(), apiClient.getProviders()]); if (health.ok) { this.healthStatus.textContent = health.data?.status || 'OK'; } else { this.healthStatus.textContent = 'Unavailable'; } if (providers.ok) { const list = providers.data || []; this.providersContainer.innerHTML = list .map( (provider) => `

${provider.name}

Status: ${ provider.status || 'unknown' }

Latency: ${provider.latency || '—'}ms

`, ) .join(''); } else { this.providersContainer.innerHTML = `
${providers.error}
`; } this.renderRequestLogs(); this.renderErrorLogs(); this.renderWsLogs(); } renderRequestLogs() { if (!this.requestLogBody) return; const logs = apiClient.getLogs(); this.requestLogBody.innerHTML = logs .slice(-12) .reverse() .map( (log) => ` ${log.time} ${log.method} ${log.endpoint} ${log.status} ${log.duration}ms `, ) .join(''); } renderErrorLogs() { if (!this.errorLogBody) return; const logs = apiClient.getErrors(); if (!logs.length) { this.errorLogBody.innerHTML = 'No recent errors.'; return; } this.errorLogBody.innerHTML = logs .slice(-8) .reverse() .map( (log) => ` ${log.time} ${log.endpoint} ${log.message} `, ) .join(''); } renderWsLogs() { if (!this.wsLogBody) return; const events = this.wsClient.getEvents(); if (!events.length) { this.wsLogBody.innerHTML = 'No WebSocket events yet.'; return; } this.wsLogBody.innerHTML = events .slice(-12) .reverse() .map( (event) => ` ${event.time} ${event.type} ${event.messageType || event.status || event.details || ''} `, ) .join(''); } } export default DebugConsoleView;