work on proxy service

This commit is contained in:
Bojan Kucera 2025-06-07 18:04:20 -04:00
parent baa34a3805
commit 81d88357ca
5 changed files with 204 additions and 547 deletions

View file

@ -1,116 +1,19 @@
import { proxyService, ProxySource } from './services/proxy.service.js';
import { getLogger, shutdownLoggers } from '@stock-bot/logger';
import { onShutdown, setShutdownTimeout } from '@stock-bot/shutdown';
import { proxyService } from './services/proxy.service.js';
import { getLogger } from '@stock-bot/logger';
// Initialize logger for the demo
const logger = getLogger('proxy-demo');
/**
* Example usage of the ProxyService with enhanced logging
*/
// async function demonstrateProxyService() {
// console.log('🚀 Starting Proxy Service Demo...');
// try {
// // 1. Start the proxy refresh job (scrapes proxies every 30 minutes)
// console.log('📥 Starting proxy refresh job...');
// await proxyService.queueRefreshProxies(30 * 60 * 1000); // 30 minutes
// // 2. Start health checks (checks working proxies every 15 minutes)
// console.log('🔍 Starting proxy health checks...');
// await proxyService.startHealthChecks(15 * 60 * 1000); // 15 minutes
// // 3. Manually scrape proxies
// console.log('🌐 Manually scraping proxies...');
// const scrapedCount = await proxyService.scrapeProxies();
// console.log(`✅ Scraped ${scrapedCount} unique proxies`);
// // 4. Wait a bit for some validation to complete
// await new Promise(resolve => setTimeout(resolve, 5000));
// // 5. Get proxy statistics
// console.log('📊 Getting proxy statistics...');
// const stats = await proxyService.getProxyStats();
// console.log('Stats:', {
// total: stats.total,
// working: stats.working,
// failed: stats.failed,
// avgResponseTime: stats.avgResponseTime + 'ms'
// });
// // 6. Get a working proxy
// console.log('🎯 Getting a working proxy...');
// const workingProxy = await proxyService.getWorkingProxy();
// if (workingProxy) {
// console.log('Working proxy found:', {
// host: workingProxy.host,
// port: workingProxy.port,
// protocol: workingProxy.protocol
// });
// // 7. Test the proxy
// console.log('🧪 Testing proxy...');
// const testResult = await proxyService.checkProxy(workingProxy);
// console.log('Test result:', {
// isWorking: testResult.isWorking,
// responseTime: testResult.responseTime + 'ms',
// error: testResult.error || 'None'
// });
// } else {
// console.log('❌ No working proxies available yet');
// }
// // 8. Get multiple working proxies
// console.log('📋 Getting multiple working proxies...');
// const workingProxies = await proxyService.getWorkingProxies(5);
// console.log(`Found ${workingProxies.length} working proxies`);
// // 9. Example: Using a proxy with HttpClient
// if (workingProxies.length > 0) {
// console.log('🔄 Example: Using proxy with HttpClient...');
// try {
// const { HttpClient } = await import('@stock-bot/http');
// const proxyClient = new HttpClient({
// proxy: workingProxies[0],
// timeout: 10000
// });
// const response = await proxyClient.get('http://httpbin.org/ip');
// console.log('✅ Request through proxy successful:', response.data);
// } catch (error) {
// console.log('❌ Request through proxy failed:', error);
// }
// }
// console.log('🎉 Proxy Service Demo completed!');
// } catch (error) {
// console.error('❌ Demo failed:', error);
// }
// }
/**
* Example: Custom proxy source with enhanced logging
*/
async function demonstrateCustomProxySource() {
logger.info('🔧 Demonstrating custom proxy source...');
const customSources : ProxySource[] = [
{
url: 'https://raw.githubusercontent.com/TheSpeedX/PROXY-List/refs/heads/master/http.txt',
protocol: 'http'
}
];
try {
const count = await proxyService.scrapeProxies(customSources);
logger.info(`✅ Scraped ${count} proxies from custom source`, {
count,
sourceCount: customSources.length
});
const count = await proxyService.fetchProxiesFromSources();
} catch (error) {
logger.error('❌ Custom source scraping failed',{
error: error as Error,
sourceUrls: customSources.map(s => s.url)
error: error
});
}
}