/** * API Explorer Page */ class APIExplorerPage { constructor() { this.currentMethod = 'GET'; this.history = []; } async init() { try { console.log('[APIExplorer] Initializing...'); this.bindEvents(); this.loadHistory(); await this.loadProviders(); console.log('[APIExplorer] Ready'); } catch (error) { console.error('[APIExplorer] Init error:', error); } } bindEvents() { const sendBtn = document.getElementById('send-btn'); const methodSelect = document.getElementById('method-select'); const endpointSelect = document.getElementById('endpoint-select'); const bodyGroup = document.getElementById('body-group'); const copyBtn = document.getElementById('copy-btn'); const clearBtn = document.getElementById('clear-btn'); const clearHistoryBtn = document.getElementById('clear-history-btn'); if (sendBtn) { sendBtn.addEventListener('click', () => this.sendRequest()); } if (methodSelect) { methodSelect.addEventListener('change', (e) => { this.currentMethod = e.target.value; this.toggleBodyField(); }); } if (endpointSelect) { endpointSelect.addEventListener('change', (e) => { const selectedOption = e.target.selectedOptions[0]; const dataMethod = selectedOption.getAttribute('data-method'); if (dataMethod) { this.currentMethod = dataMethod; methodSelect.value = dataMethod; this.toggleBodyField(); } }); } if (copyBtn) { copyBtn.addEventListener('click', () => this.copyResponse()); } if (clearBtn) { clearBtn.addEventListener('click', () => this.clearResponse()); } if (clearHistoryBtn) { clearHistoryBtn.addEventListener('click', () => this.clearHistory()); } this.toggleBodyField(); } toggleBodyField() { const bodyGroup = document.getElementById('body-group'); if (bodyGroup) { bodyGroup.style.display = (this.currentMethod === 'POST' || this.currentMethod === 'PUT') ? 'block' : 'none'; } } async sendRequest() { const endpointSelect = document.getElementById('endpoint-select'); const bodyInput = document.getElementById('request-body'); const responseContent = document.getElementById('response-content'); const responseStatus = document.getElementById('response-status'); const responseTime = document.getElementById('response-time'); if (!endpointSelect || !responseContent) return; const endpoint = endpointSelect.value; if (!endpoint) { responseContent.textContent = JSON.stringify({ error: 'Please select an endpoint' }, null, 2); return; } const url = window.location.origin + endpoint; // Show loading state with spinner responseContent.innerHTML = `
Sending request...