| |
| |
| |
| |
|
|
| class APIClient { |
| constructor(baseURL = '') { |
| this.baseURL = baseURL; |
| this.defaultHeaders = { |
| 'Content-Type': 'application/json', |
| }; |
| } |
|
|
| |
| |
| |
| async request(endpoint, options = {}) { |
| const url = `${this.baseURL}${endpoint}`; |
| const config = { |
| headers: { ...this.defaultHeaders, ...options.headers }, |
| ...options, |
| }; |
|
|
| try { |
| const response = await fetch(url, config); |
|
|
| if (!response.ok) { |
| throw new Error(`HTTP ${response.status}: ${response.statusText}`); |
| } |
|
|
| |
| const contentType = response.headers.get('content-type'); |
| if (contentType && contentType.includes('application/json')) { |
| return await response.json(); |
| } else if (contentType && contentType.includes('text')) { |
| return await response.text(); |
| } |
|
|
| return response; |
| } catch (error) { |
| console.error(`[APIClient] Error fetching ${endpoint}:`, error); |
| throw error; |
| } |
| } |
|
|
| |
| |
| |
| async get(endpoint) { |
| return this.request(endpoint, { method: 'GET' }); |
| } |
|
|
| |
| |
| |
| async post(endpoint, data) { |
| return this.request(endpoint, { |
| method: 'POST', |
| body: JSON.stringify(data), |
| }); |
| } |
|
|
| |
| |
| |
| async put(endpoint, data) { |
| return this.request(endpoint, { |
| method: 'PUT', |
| body: JSON.stringify(data), |
| }); |
| } |
|
|
| |
| |
| |
| async delete(endpoint) { |
| return this.request(endpoint, { method: 'DELETE' }); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getHealth() { |
| return this.get('/api/health'); |
| } |
|
|
| |
| |
| |
| async getStatus() { |
| return this.get('/api/status'); |
| } |
|
|
| |
| |
| |
| async getStats() { |
| return this.get('/api/stats'); |
| } |
|
|
| |
| |
| |
| async getInfo() { |
| return this.get('/api/info'); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getMarket() { |
| return this.get('/api/market'); |
| } |
|
|
| |
| |
| |
| async getTrending() { |
| return this.get('/api/trending'); |
| } |
|
|
| |
| |
| |
| async getSentiment() { |
| return this.get('/api/sentiment'); |
| } |
|
|
| |
| |
| |
| async getDefi() { |
| return this.get('/api/defi'); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getProviders() { |
| return this.get('/api/providers'); |
| } |
|
|
| |
| |
| |
| async getProvider(providerId) { |
| return this.get(`/api/providers/${providerId}`); |
| } |
|
|
| |
| |
| |
| async getProvidersByCategory(category) { |
| return this.get(`/api/providers/category/${category}`); |
| } |
|
|
| |
| |
| |
| async checkProviderHealth(providerId) { |
| return this.post(`/api/providers/${providerId}/health-check`); |
| } |
|
|
| |
| |
| |
| async addProvider(providerData) { |
| return this.post('/api/providers', providerData); |
| } |
|
|
| |
| |
| |
| async removeProvider(providerId) { |
| return this.delete(`/api/providers/${providerId}`); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getPools() { |
| return this.get('/api/pools'); |
| } |
|
|
| |
| |
| |
| async getPool(poolId) { |
| return this.get(`/api/pools/${poolId}`); |
| } |
|
|
| |
| |
| |
| async createPool(poolData) { |
| return this.post('/api/pools', poolData); |
| } |
|
|
| |
| |
| |
| async deletePool(poolId) { |
| return this.delete(`/api/pools/${poolId}`); |
| } |
|
|
| |
| |
| |
| async addPoolMember(poolId, providerId) { |
| return this.post(`/api/pools/${poolId}/members`, { provider_id: providerId }); |
| } |
|
|
| |
| |
| |
| async removePoolMember(poolId, providerId) { |
| return this.delete(`/api/pools/${poolId}/members/${providerId}`); |
| } |
|
|
| |
| |
| |
| async rotatePool(poolId) { |
| return this.post(`/api/pools/${poolId}/rotate`); |
| } |
|
|
| |
| |
| |
| async getPoolHistory() { |
| return this.get('/api/pools/history'); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getLogs(params = {}) { |
| const query = new URLSearchParams(params).toString(); |
| return this.get(`/api/logs${query ? '?' + query : ''}`); |
| } |
|
|
| |
| |
| |
| async getRecentLogs() { |
| return this.get('/api/logs/recent'); |
| } |
|
|
| |
| |
| |
| async getErrorLogs() { |
| return this.get('/api/logs/errors'); |
| } |
|
|
| |
| |
| |
| async getLogStats() { |
| return this.get('/api/logs/stats'); |
| } |
|
|
| |
| |
| |
| async exportLogsJSON() { |
| return this.get('/api/logs/export/json'); |
| } |
|
|
| |
| |
| |
| async exportLogsCSV() { |
| return this.get('/api/logs/export/csv'); |
| } |
|
|
| |
| |
| |
| async clearLogs() { |
| return this.delete('/api/logs'); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getResources() { |
| return this.get('/api/resources'); |
| } |
|
|
| |
| |
| |
| async getResourcesByCategory(category) { |
| return this.get(`/api/resources/category/${category}`); |
| } |
|
|
| |
| |
| |
| async importResourcesJSON(data) { |
| return this.post('/api/resources/import/json', data); |
| } |
|
|
| |
| |
| |
| async exportResourcesJSON() { |
| return this.get('/api/resources/export/json'); |
| } |
|
|
| |
| |
| |
| async exportResourcesCSV() { |
| return this.get('/api/resources/export/csv'); |
| } |
|
|
| |
| |
| |
| async backupResources() { |
| return this.post('/api/resources/backup'); |
| } |
|
|
| |
| |
| |
| async addResourceProvider(providerData) { |
| return this.post('/api/resources/provider', providerData); |
| } |
|
|
| |
| |
| |
| async deleteResourceProvider(providerId) { |
| return this.delete(`/api/resources/provider/${providerId}`); |
| } |
|
|
| |
| |
| |
| async getDiscoveryStatus() { |
| return this.get('/api/resources/discovery/status'); |
| } |
|
|
| |
| |
| |
| async runDiscovery() { |
| return this.post('/api/resources/discovery/run'); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getHFHealth() { |
| return this.get('/api/hf/health'); |
| } |
|
|
| |
| |
| |
| async runHFSentiment(data) { |
| return this.post('/api/hf/run-sentiment', data); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getDiscoveryReport() { |
| return this.get('/api/reports/discovery'); |
| } |
|
|
| |
| |
| |
| async getModelsReport() { |
| return this.get('/api/reports/models'); |
| } |
|
|
| |
|
|
| |
| |
| |
| async runDiagnostics() { |
| return this.post('/api/diagnostics/run'); |
| } |
|
|
| |
| |
| |
| async getLastDiagnostics() { |
| return this.get('/api/diagnostics/last'); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getSessions() { |
| return this.get('/api/sessions'); |
| } |
|
|
| |
| |
| |
| async getSessionStats() { |
| return this.get('/api/sessions/stats'); |
| } |
|
|
| |
| |
| |
| async broadcast(message) { |
| return this.post('/api/broadcast', { message }); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getFeatureFlags() { |
| return this.get('/api/feature-flags'); |
| } |
|
|
| |
| |
| |
| async getFeatureFlag(flagName) { |
| return this.get(`/api/feature-flags/${flagName}`); |
| } |
|
|
| |
| |
| |
| async updateFeatureFlags(flags) { |
| return this.put('/api/feature-flags', { flags }); |
| } |
|
|
| |
| |
| |
| async updateFeatureFlag(flagName, value) { |
| return this.put(`/api/feature-flags/${flagName}`, { flag_name: flagName, value }); |
| } |
|
|
| |
| |
| |
| async resetFeatureFlags() { |
| return this.post('/api/feature-flags/reset'); |
| } |
|
|
| |
|
|
| |
| |
| |
| async getProxyStatus() { |
| return this.get('/api/proxy-status'); |
| } |
| } |
|
|
| |
| window.apiClient = new APIClient(); |
|
|
| console.log('[APIClient] Initialized'); |
|
|