test_websocket_subscriptions.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { PacificaWebSocketAdapter } from './src/exchanges/pacifica/PacificaWebSocketAdapter.js'
  2. import { logger } from './src/utils/logger.js'
  3. /**
  4. * 测试新的WebSocket订阅模式
  5. * 验证实时数据流功能
  6. */
  7. async function testWebSocketSubscriptions() {
  8. console.log('🚀 开始测试WebSocket订阅模式...\n')
  9. const testAccount = process.env.PACIFICA_ACCOUNT_1
  10. const testPrivateKey = process.env.PACIFICA_PRIVATE_KEY_1
  11. if (!testAccount || !testPrivateKey) {
  12. console.log('⚠️ 环境变量未配置,跳过测试')
  13. return
  14. }
  15. console.log(`📊 测试账户: ${testAccount.substring(0, 8)}...`)
  16. console.log(`🔑 私钥: ${testPrivateKey.substring(0, 8)}...`)
  17. try {
  18. // 创建WebSocket适配器
  19. const wsAdapter = new PacificaWebSocketAdapter(
  20. 'wss://ws.pacifica.fi/ws',
  21. testAccount,
  22. testPrivateKey
  23. )
  24. // 设置事件监听器
  25. wsAdapter.on('prices', (data: any) => {
  26. console.log('💰 收到价格数据:', Object.keys(data).slice(0, 3), '...')
  27. })
  28. wsAdapter.on('balance', (data: any) => {
  29. console.log('💳 收到账户余额数据:', data)
  30. })
  31. wsAdapter.on('positions', (data: any) => {
  32. console.log('📊 收到仓位数据:', data)
  33. })
  34. wsAdapter.on('orderbook', (data: any) => {
  35. console.log('📈 收到订单簿数据:', data.symbol, `${data.bids?.length || 0}买单, ${data.asks?.length || 0}卖单`)
  36. })
  37. // 初始化连接
  38. console.log('\n📡 初始化WebSocket连接...')
  39. await wsAdapter.initialize()
  40. console.log('✅ WebSocket连接已建立')
  41. // 测试价格订阅
  42. console.log('\n💰 启动价格数据订阅...')
  43. const pricesResult = await wsAdapter.getPrices(['BTC', 'ETH'])
  44. console.log('价格订阅结果:', pricesResult.success ? '✅ 成功' : '❌ 失败', pricesResult.data?.message)
  45. // 测试订单簿订阅
  46. console.log('\n📈 启动BTC订单簿订阅...')
  47. const orderbookResult = await wsAdapter.getOrderBook('BTC')
  48. console.log('订单簿订阅结果:', orderbookResult.success ? '✅ 成功' : '❌ 失败')
  49. // 测试账户余额订阅
  50. console.log('\n💳 启动账户余额订阅...')
  51. const balanceResult = await wsAdapter.getBalances(testAccount)
  52. console.log('余额订阅结果:', balanceResult.success ? '✅ 成功' : '❌ 失败', balanceResult.data?.message)
  53. // 测试账户仓位订阅
  54. console.log('\n📊 启动账户仓位订阅...')
  55. const positionsResult = await wsAdapter.getPositions(testAccount)
  56. console.log('仓位订阅结果:', positionsResult.success ? '✅ 成功' : '❌ 失败', positionsResult.data?.message)
  57. // 等待接收数据
  58. console.log('\n⏰ 等待15秒接收实时数据...')
  59. await new Promise(resolve => setTimeout(resolve, 15000))
  60. console.log('\n🔍 WebSocket连接状态检查:')
  61. console.log(` 连接状态: ${wsAdapter.isConnected() ? '✅ 已连接' : '❌ 断开'}`)
  62. // 清理资源
  63. console.log('\n🧹 清理资源...')
  64. await wsAdapter.close()
  65. console.log('✅ 资源清理完成')
  66. } catch (error: any) {
  67. console.error('❌ 测试过程中发生错误:', error.message)
  68. }
  69. console.log('\n✅ WebSocket订阅测试完成!')
  70. }
  71. // 运行测试
  72. if (import.meta.url === `file://${process.argv[1]}`) {
  73. testWebSocketSubscriptions().catch(error => {
  74. console.error('🚨 测试失败:', error)
  75. process.exit(1)
  76. })
  77. }
  78. export { testWebSocketSubscriptions }