| /** | |
| * βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| * CONFIGURATION FILE | |
| * Dashboard Settings - Easy Customization | |
| * βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| */ | |
| // π§ Main Backend Settings | |
| window.DASHBOARD_CONFIG = { | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // API and WebSocket URLs | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Auto-detect localhost and use port 7860, otherwise use current origin | |
| BACKEND_URL: (() => { | |
| const hostname = window.location.hostname; | |
| if (hostname === 'localhost' || hostname === '127.0.0.1') { | |
| return `http://${hostname}:7860`; | |
| } | |
| return window.location.origin || 'https://really-amin-datasourceforcryptocurrency.hf.space'; | |
| })(), | |
| WS_URL: (() => { | |
| const hostname = window.location.hostname; | |
| let backendUrl; | |
| if (hostname === 'localhost' || hostname === '127.0.0.1') { | |
| backendUrl = `http://${hostname}:7860`; | |
| } else { | |
| backendUrl = window.location.origin || 'https://really-amin-datasourceforcryptocurrency.hf.space'; | |
| } | |
| return backendUrl.replace('http://', 'ws://').replace('https://', 'wss://') + '/ws'; | |
| })(), | |
| // β±οΈ Update Timing (milliseconds) | |
| UPDATE_INTERVAL: 30000, // Every 30 seconds | |
| CACHE_TTL: 60000, // 1 minute | |
| HEARTBEAT_INTERVAL: 30000, // 30 seconds | |
| // π Reconnection Settings | |
| MAX_RECONNECT_ATTEMPTS: 5, | |
| RECONNECT_DELAY: 3000, // 3 seconds | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Display Settings | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Number of items to display | |
| MAX_COINS_DISPLAY: 20, // Number of coins in table | |
| MAX_NEWS_DISPLAY: 20, // Number of news items | |
| MAX_TRENDING_DISPLAY: 10, // Number of trending items | |
| // Table settings | |
| TABLE_ROWS_PER_PAGE: 10, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Chart Settings | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| CHART: { | |
| DEFAULT_SYMBOL: 'BTCUSDT', | |
| DEFAULT_INTERVAL: '1h', | |
| AVAILABLE_INTERVALS: ['1m', '5m', '15m', '1h', '4h', '1d'], | |
| THEME: 'dark', | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // AI Settings | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| AI: { | |
| ENABLE_SENTIMENT: true, | |
| ENABLE_NEWS_SUMMARY: true, | |
| ENABLE_PRICE_PREDICTION: false, // Currently disabled | |
| ENABLE_PATTERN_DETECTION: false, // Currently disabled | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Notification Settings | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| NOTIFICATIONS: { | |
| ENABLE: true, | |
| SHOW_PRICE_ALERTS: true, | |
| SHOW_NEWS_ALERTS: true, | |
| AUTO_DISMISS_TIME: 5000, // 5 seconds | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // UI Settings | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| UI: { | |
| DEFAULT_THEME: 'dark', // 'dark' or 'light' | |
| ENABLE_ANIMATIONS: true, | |
| ENABLE_SOUNDS: false, | |
| LANGUAGE: 'en', // 'en' or 'fa' | |
| RTL: false, | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Debug Settings | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| DEBUG: { | |
| ENABLE_CONSOLE_LOGS: true, | |
| ENABLE_PERFORMANCE_MONITORING: true, | |
| SHOW_API_REQUESTS: true, | |
| SHOW_WS_MESSAGES: false, | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Default Filters and Sorting | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FILTERS: { | |
| DEFAULT_MARKET_FILTER: 'all', // 'all', 'gainers', 'losers', 'trending' | |
| DEFAULT_NEWS_FILTER: 'all', // 'all', 'bitcoin', 'ethereum', 'defi', 'nft' | |
| DEFAULT_SORT: 'market_cap', // 'market_cap', 'volume', 'price', 'change' | |
| SORT_ORDER: 'desc', // 'asc' or 'desc' | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // HuggingFace Configuration | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| HF_TOKEN: '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', | |
| HF_API_BASE: 'https://api-inference.huggingface.co/models', | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // API Endpoints (Optional - if your backend differs) | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ENDPOINTS: { | |
| HEALTH: '/api/health', | |
| MARKET: '/api/market/stats', | |
| MARKET_PRICES: '/api/market/prices', | |
| COINS_TOP: '/api/coins/top', | |
| COIN_DETAILS: '/api/coins', | |
| TRENDING: '/api/trending', | |
| SENTIMENT: '/api/sentiment', | |
| SENTIMENT_ANALYZE: '/api/sentiment/analyze', | |
| NEWS: '/api/news/latest', | |
| NEWS_SUMMARIZE: '/api/news/summarize', | |
| STATS: '/api/stats', | |
| PROVIDERS: '/api/providers', | |
| PROVIDER_STATUS: '/api/providers/status', | |
| CHART_HISTORY: '/api/charts/price', | |
| CHART_ANALYZE: '/api/charts/analyze', | |
| OHLCV: '/api/ohlcv', | |
| QUERY: '/api/query', | |
| DATASETS: '/api/datasets/list', | |
| MODELS: '/api/models/list', | |
| HF_HEALTH: '/api/hf/health', | |
| HF_REGISTRY: '/api/hf/registry', | |
| SYSTEM_STATUS: '/api/system/status', | |
| SYSTEM_CONFIG: '/api/system/config', | |
| CATEGORIES: '/api/categories', | |
| RATE_LIMITS: '/api/rate-limits', | |
| LOGS: '/api/logs', | |
| ALERTS: '/api/alerts', | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // WebSocket Events | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| WS_EVENTS: { | |
| MARKET_UPDATE: 'market_update', | |
| SENTIMENT_UPDATE: 'sentiment_update', | |
| NEWS_UPDATE: 'news_update', | |
| STATS_UPDATE: 'stats_update', | |
| PRICE_UPDATE: 'price_update', | |
| API_UPDATE: 'api_update', | |
| STATUS_UPDATE: 'status_update', | |
| SCHEDULE_UPDATE: 'schedule_update', | |
| CONNECTED: 'connected', | |
| DISCONNECTED: 'disconnected', | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Display Formats | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| FORMATS: { | |
| CURRENCY: { | |
| LOCALE: 'en-US', | |
| STYLE: 'currency', | |
| CURRENCY: 'USD', | |
| }, | |
| DATE: { | |
| LOCALE: 'en-US', | |
| OPTIONS: { | |
| year: 'numeric', | |
| month: 'long', | |
| day: 'numeric', | |
| hour: '2-digit', | |
| minute: '2-digit', | |
| }, | |
| }, | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Rate Limiting | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| RATE_LIMITS: { | |
| API_REQUESTS_PER_MINUTE: 60, | |
| SEARCH_DEBOUNCE_MS: 300, | |
| }, | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Storage Settings | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| STORAGE: { | |
| USE_LOCAL_STORAGE: true, | |
| SAVE_PREFERENCES: true, | |
| STORAGE_PREFIX: 'hts_dashboard_', | |
| }, | |
| }; | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Predefined Profiles | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| window.DASHBOARD_PROFILES = { | |
| // High Performance Profile | |
| HIGH_PERFORMANCE: { | |
| UPDATE_INTERVAL: 15000, // Faster updates | |
| CACHE_TTL: 30000, // Shorter cache | |
| ENABLE_ANIMATIONS: false, // No animations | |
| MAX_COINS_DISPLAY: 50, | |
| }, | |
| // Data Saver Profile | |
| DATA_SAVER: { | |
| UPDATE_INTERVAL: 60000, // Less frequent updates | |
| CACHE_TTL: 300000, // Longer cache (5 minutes) | |
| MAX_COINS_DISPLAY: 10, | |
| MAX_NEWS_DISPLAY: 10, | |
| }, | |
| // Presentation Profile | |
| PRESENTATION: { | |
| ENABLE_ANIMATIONS: true, | |
| UPDATE_INTERVAL: 20000, | |
| SHOW_API_REQUESTS: false, | |
| ENABLE_CONSOLE_LOGS: false, | |
| }, | |
| // Development Profile | |
| DEVELOPMENT: { | |
| DEBUG: { | |
| ENABLE_CONSOLE_LOGS: true, | |
| ENABLE_PERFORMANCE_MONITORING: true, | |
| SHOW_API_REQUESTS: true, | |
| SHOW_WS_MESSAGES: true, | |
| }, | |
| UPDATE_INTERVAL: 10000, | |
| }, | |
| }; | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Helper Function to Change Profile | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| window.applyDashboardProfile = function (profileName) { | |
| if (window.DASHBOARD_PROFILES[profileName]) { | |
| const profile = window.DASHBOARD_PROFILES[profileName]; | |
| Object.assign(window.DASHBOARD_CONFIG, profile); | |
| console.log(`β Profile "${profileName}" applied`); | |
| // Reload application with new settings | |
| if (window.app) { | |
| window.app.destroy(); | |
| window.app = new DashboardApp(); | |
| window.app.init(); | |
| } | |
| } else { | |
| console.error(`β Profile "${profileName}" not found`); | |
| } | |
| }; | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Helper Function to Change Backend URL | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| window.changeBackendURL = function (httpUrl, wsUrl) { | |
| window.DASHBOARD_CONFIG.BACKEND_URL = httpUrl; | |
| window.DASHBOARD_CONFIG.WS_URL = wsUrl || httpUrl.replace('https://', 'wss://').replace('http://', 'ws://') + '/ws'; | |
| console.log('β Backend URL changed:'); | |
| console.log(' HTTP:', window.DASHBOARD_CONFIG.BACKEND_URL); | |
| console.log(' WS:', window.DASHBOARD_CONFIG.WS_URL); | |
| // Reload application | |
| if (window.app) { | |
| window.app.destroy(); | |
| window.app = new DashboardApp(); | |
| window.app.init(); | |
| } | |
| }; | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Save Settings to LocalStorage | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| window.saveConfig = function () { | |
| if (window.DASHBOARD_CONFIG.STORAGE.USE_LOCAL_STORAGE) { | |
| try { | |
| const configString = JSON.stringify(window.DASHBOARD_CONFIG); | |
| localStorage.setItem( | |
| window.DASHBOARD_CONFIG.STORAGE.STORAGE_PREFIX + 'config', | |
| configString | |
| ); | |
| console.log('β Settings saved'); | |
| } catch (error) { | |
| console.error('β Error saving settings:', error); | |
| } | |
| } | |
| }; | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Load Settings from LocalStorage | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| window.loadConfig = function () { | |
| if (window.DASHBOARD_CONFIG.STORAGE.USE_LOCAL_STORAGE) { | |
| try { | |
| const configString = localStorage.getItem( | |
| window.DASHBOARD_CONFIG.STORAGE.STORAGE_PREFIX + 'config' | |
| ); | |
| if (configString) { | |
| const savedConfig = JSON.parse(configString); | |
| Object.assign(window.DASHBOARD_CONFIG, savedConfig); | |
| console.log('β Settings loaded'); | |
| } | |
| } catch (error) { | |
| console.error('β Error loading settings:', error); | |
| } | |
| } | |
| }; | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Auto-load Settings on Page Load | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| if (document.readyState === 'loading') { | |
| document.addEventListener('DOMContentLoaded', () => { | |
| window.loadConfig(); | |
| }); | |
| } else { | |
| window.loadConfig(); | |
| } | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| // Console Usage Guide | |
| // βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| console.log(` | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| β HTS CRYPTO DASHBOARD - CONFIGURATION β | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| π Available Commands: | |
| 1. Change Profile: | |
| applyDashboardProfile('HIGH_PERFORMANCE') | |
| applyDashboardProfile('DATA_SAVER') | |
| applyDashboardProfile('PRESENTATION') | |
| applyDashboardProfile('DEVELOPMENT') | |
| 2. Change Backend: | |
| changeBackendURL('https://your-backend.com') | |
| 3. Save/Load Settings: | |
| saveConfig() | |
| loadConfig() | |
| 4. View Current Settings: | |
| console.log(DASHBOARD_CONFIG) | |
| 5. Manual Settings Change: | |
| DASHBOARD_CONFIG.UPDATE_INTERVAL = 20000 | |
| saveConfig() | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| `); | |