import { PacificaProxyClient } from './src/exchanges/pacifica/PacificaProxyClient.js' import { logger } from './src/utils/logger.js' /** * 测试WebSocket账户信息订阅功能 * 验证账户余额和仓位的实时订阅 */ async function testWebSocketAccountSubscription() { console.log('🚀 开始WebSocket账户信息订阅测试...\n') const testAccounts = [ { name: 'pacifica-1', account: process.env.PACIFICA_ACCOUNT_1, privateKey: process.env.PACIFICA_PRIVATE_KEY_1, }, { name: 'pacifica-2', account: process.env.PACIFICA_ACCOUNT_2, privateKey: process.env.PACIFICA_PRIVATE_KEY_2, } ] for (const testAccount of testAccounts) { if (!testAccount.account || !testAccount.privateKey) { console.log(`⚠️ 跳过 ${testAccount.name}:环境变量未配置`) continue } console.log(`\n📊 测试账户: ${testAccount.name}`) console.log(` 账户ID: ${testAccount.account.substring(0, 8)}...`) const client = new PacificaProxyClient({ account: testAccount.account, privateKey: testAccount.privateKey, }) try { // 启用WebSocket模式 console.log('🔧 启用WebSocket模式...') client.setWebSocketEnabled(true) // 初始化WebSocket连接 console.log('📡 初始化WebSocket连接...') await client.initializeWebSocket() console.log(`✅ WebSocket连接状态: ${client.isWebSocketConnected()}`) // 测试WebSocket账户余额订阅 console.log('\n💰 测试账户余额WebSocket订阅...') const startTime = Date.now() try { const balanceResult = await client.getBalances() const duration = Date.now() - startTime if (balanceResult.success) { console.log(`✅ 余额订阅成功! 耗时: ${duration}ms`) console.log('📊 余额数据:', { balance: balanceResult.data?.balance || balanceResult.data?.b, available: balanceResult.data?.available || balanceResult.data?.as, equity: balanceResult.data?.equity || balanceResult.data?.ae, marginUsed: balanceResult.data?.marginUsed || balanceResult.data?.mu, pendingBalance: balanceResult.data?.pendingBalance || balanceResult.data?.pb, }) } else { console.log(`❌ 余额订阅失败: ${balanceResult.error}`) } } catch (error: any) { console.log(`❌ 余额订阅异常: ${error.message}`) } // 测试WebSocket账户仓位订阅 console.log('\n📊 测试账户仓位WebSocket订阅...') const posStartTime = Date.now() try { const positionsResult = await client.getPositions() const posDuration = Date.now() - posStartTime if (positionsResult.success) { console.log(`✅ 仓位订阅成功! 耗时: ${posDuration}ms`) console.log('📊 仓位数据:', { type: typeof positionsResult.data, length: Array.isArray(positionsResult.data) ? positionsResult.data.length : 'N/A', sample: positionsResult.data, }) } else { console.log(`❌ 仓位订阅失败: ${positionsResult.error}`) } } catch (error: any) { console.log(`❌ 仓位订阅异常: ${error.message}`) } // 连接状态检查 console.log('\n🔍 连接状态检查:') console.log(` WebSocket连接: ${client.isWebSocketConnected() ? '✅ 已连接' : '❌ 断开'}`) console.log(` 消息队列长度: ${client.getWebSocketQueueLength()}`) } catch (error: any) { console.error(`❌ ${testAccount.name} 测试失败:`, error.message) } finally { // 清理资源 try { await client.close() console.log(`🧹 ${testAccount.name} 资源清理完成`) } catch (error: any) { console.log(`⚠️ ${testAccount.name} 资源清理时发生错误:`, error.message) } } } console.log('\n✅ WebSocket账户信息订阅测试完成!') } // 代理状态检查 async function checkProxyStatus() { console.log('🔍 代理状态检查:') 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 ? '✅' : '❌'}`) console.log(' 账户配置:') console.log(` 账户1: ${process.env.PACIFICA_ACCOUNT_1 ? process.env.PACIFICA_ACCOUNT_1.substring(0, 8) + '...' : '未配置'}`) console.log(` 账户2: ${process.env.PACIFICA_ACCOUNT_2 ? process.env.PACIFICA_ACCOUNT_2.substring(0, 8) + '...' : '未配置'}`) 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(() => checkProxyStatus()) .then(() => testWebSocketAccountSubscription()) .catch(error => { console.error('🚨 测试失败:', error) process.exit(1) }) } export { testWebSocketAccountSubscription }