import { PacificaProxyClient } from './src/exchanges/pacifica/PacificaProxyClient.js' import { logger } from './src/utils/logger.js' /** * 测试带代理的WebSocket交易功能 * 集成到主程序的测试 */ async function testWebSocketWithProxy() { console.log('🚀 开始带代理的WebSocket交易测试...\n') // 启用WebSocket模式 const client = new PacificaProxyClient({ account: process.env.PACIFICA_ACCOUNT_1, privateKey: process.env.PACIFICA_PRIVATE_KEY_1, }) try { console.log('🔧 配置WebSocket模式...') client.setWebSocketEnabled(true) console.log('📡 初始化WebSocket连接...') await client.initializeWebSocket() console.log('✅ WebSocket初始化成功!') console.log(` 连接状态: ${client.isWebSocketConnected()}`) console.log(` 队列长度: ${client.getWebSocketQueueLength()}`) // 测试连接和代理状态 console.log('\n🔗 测试连接...') const connectionTest = await client.testConnection() console.log('连接测试结果:', { success: connectionTest.success, latency: `${connectionTest.latency}ms`, proxy: connectionTest.proxyUsed ? '启用' : '禁用', }) // 测试获取交易对(混合模式) console.log('\n📊 测试获取交易对(WebSocket + HTTP回退)...') const startTime = Date.now() try { const symbols = await client.getSymbols() const duration = Date.now() - startTime console.log(`✅ 获取交易对成功: ${duration}ms`) console.log(` 数据类型: ${typeof symbols}`) if (symbols && symbols.data) { console.log(` 交易对数量: ${Array.isArray(symbols.data) ? symbols.data.length : 'N/A'}`) } } catch (error: any) { console.log(`❌ 获取交易对失败: ${error.message}`) } // 测试获取价格数据 console.log('\n💰 测试获取价格数据...') try { const startTime = Date.now() const prices = await client.getPrices() const duration = Date.now() - startTime console.log(`✅ 获取价格成功: ${duration}ms`) if (prices && prices.data) { console.log(` 价格数据长度: ${Array.isArray(prices.data) ? prices.data.length : 'N/A'}`) } } catch (error: any) { console.log(`❌ 获取价格失败: ${error.message}`) } // 测试订单簿获取 console.log('\n📚 测试获取订单簿...') try { const startTime = Date.now() const orderbook = await client.getOrderBook('BTC-USD') const duration = Date.now() - startTime console.log(`✅ 获取订单簿成功: ${duration}ms`) if (orderbook && orderbook.bids) { console.log(` 买单数量: ${orderbook.bids.length}`) console.log(` 卖单数量: ${orderbook.asks.length}`) console.log(` 中间价: $${orderbook.midPrice?.toFixed(2) || 'N/A'}`) } } catch (error: any) { console.log(`❌ 获取订单簿失败: ${error.message}`) } // 模拟WebSocket交易测试(不执行真实交易) console.log('\n🎯 模拟WebSocket交易测试...') console.log('注意:这是模拟测试,不会执行真实交易') const mockOrderParams = { symbol: 'BTC', side: 'buy' as const, amount: '0.001', account: process.env.PACIFICA_ACCOUNT_1 || '', signature: 'mock_signature_for_testing', // 模拟签名 } console.log(' 模拟市价单参数:') console.log(` 符号: ${mockOrderParams.symbol}`) console.log(` 方向: ${mockOrderParams.side}`) console.log(` 数量: ${mockOrderParams.amount}`) console.log(` 账户: ${mockOrderParams.account.substring(0, 8)}...`) console.log(' ✅ 参数验证通过(模拟)') // 性能统计 console.log('\n📈 性能统计:') console.log(` WebSocket连接状态: ${client.isWebSocketConnected() ? '✅ 已连接' : '❌ 未连接'}`) console.log(` 消息队列长度: ${client.getWebSocketQueueLength()}`) console.log(` 代理状态: ${connectionTest.proxyUsed ? '✅ 已启用' : '❌ 禁用'}`) } catch (error: any) { console.error('❌ 测试过程中发生错误:', error.message) console.error('错误详情:', error) } finally { // 清理资源 try { await client.close() console.log('\n🧹 资源清理完成') } catch (error: any) { console.log('⚠️ 资源清理时发生错误:', error.message) } } console.log('\n✅ 带代理的WebSocket测试完成!') } // 代理状态测试 async function testProxyStatus() { console.log('\n🔍 代理状态检查:') const proxyConfig = { enabled: process.env.PROXY_ENABLED === 'true', host: process.env.PROXY_HOST, port: process.env.PROXY_PORT, user: process.env.ASTER_PROXY_USER, hasSessionPrefix: !!process.env.ASTER_PROXY_SESSION_PREFIX, hasSessionSuffix: !!process.env.ASTER_PROXY_SESSION_SUFFIX, } console.log(' 配置状态:') console.log(` 代理启用: ${proxyConfig.enabled ? '✅' : '❌'}`) console.log(` 代理主机: ${proxyConfig.host || '未配置'}`) console.log(` 代理端口: ${proxyConfig.port || '未配置'}`) console.log(` 代理用户: ${proxyConfig.user ? proxyConfig.user.substring(0, 4) + '***' : '未配置'}`) console.log(` 会话前缀: ${proxyConfig.hasSessionPrefix ? '✅' : '❌'}`) console.log(` 会话后缀: ${proxyConfig.hasSessionSuffix ? '✅' : '❌'}`) if (proxyConfig.enabled && proxyConfig.host && proxyConfig.user) { console.log(' ✅ 代理配置完整,支持WebSocket') } else { console.log(' ⚠️ 代理配置不完整,WebSocket可能直连') } } // 运行测试 if (import.meta.url === `file://${process.argv[1]}`) { Promise.resolve() .then(() => testProxyStatus()) .then(() => testWebSocketWithProxy()) .catch(error => { console.error('🚨 测试失败:', error) process.exit(1) }) } export { testWebSocketWithProxy }