const adminFeedback = () => window.UIFeedback || {}; const $ = (id) => document.getElementById(id); function renderProviders(providers = []) { const table = $('providers-table'); if (!table) return; if (!providers.length) { table.innerHTML = 'No providers configured.'; return; } table.innerHTML = providers .map((provider) => ` ${provider.name || provider.provider_id} ${provider.status || 'unknown'} ${provider.response_time_ms ?? '-'} ${provider.category || provider.provider_category || 'n/a'} `) .join(''); } function renderDetail(detail) { if (!detail) return; $('selected-provider').textContent = detail.provider_id || detail.name; $('provider-detail-list').innerHTML = `
  • Status${ detail.status || 'unknown' }
  • Response${detail.response_time_ms ?? 0} ms
  • Priority${detail.priority ?? 'n/a'}
  • Auth${detail.requires_auth ? 'Yes' : 'No'}
  • Base URL${ detail.base_url || '-' }
  • `; } function renderConfig(config) { $('config-summary').textContent = `${config.total || 0} providers`; $('config-list').innerHTML = Object.entries(config.providers || {}) .slice(0, 8) .map(([key, value]) => `
  • ${value.name || key}${value.category || value.chain || 'n/a'}
  • `) .join('') || '
  • No config loaded.
  • '; } function renderLogs(logs = []) { $('logs-list').innerHTML = logs .map((log) => `
    ${log.timestamp || ''}
    ${log.endpoint || ''} Â| ${log.status || ''}
    `) .join('') || '
    No logs yet.
    '; } function renderAlerts(alerts = []) { $('alerts-list').innerHTML = alerts .map((alert) => `
    ${alert.message || ''}${alert.timestamp || ''}
    `) .join('') || '
    No alerts at the moment.
    '; } async function bootstrapAdmin() { adminFeedback().showLoading?.($('providers-table'), 'Loading providers…'); try { const payload = await adminFeedback().fetchJSON?.('/api/providers', {}, 'Providers'); renderProviders(payload.providers); $('providers-count').textContent = `${payload.total || payload.providers?.length || 0} providers`; $('providers-table').addEventListener('click', async (event) => { const row = event.target.closest('tr[data-provider-id]'); if (!row) return; const providerId = row.dataset.providerId; adminFeedback().showLoading?.($('provider-detail-list'), 'Fetching details…'); try { const detail = await adminFeedback().fetchJSON?.( `/api/providers/${encodeURIComponent(providerId)}/health`, {}, 'Provider health', ); renderDetail({ provider_id: providerId, ...detail }); } catch {} }); } catch {} try { const config = await adminFeedback().fetchJSON?.('/api/providers/config', {}, 'Providers config'); renderConfig(config); } catch {} try { const logs = await adminFeedback().fetchJSON?.('/api/logs?limit=20', {}, 'Logs'); renderLogs(logs.logs || logs); } catch { renderLogs([]); } try { const alerts = await adminFeedback().fetchJSON?.('/api/alerts', {}, 'Alerts'); renderAlerts(alerts.alerts || []); } catch { renderAlerts([]); } } document.addEventListener('DOMContentLoaded', bootstrapAdmin);