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);