test_signed_websocket_subscription.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { PacificaWebSocketClient } from './src/exchanges/pacifica/PacificaWebSocketClient.js'
  2. import { logger } from './src/utils/logger.js'
  3. /**
  4. * 测试签名的WebSocket账户信息订阅
  5. * 直接测试新的签名功能
  6. */
  7. async function testSignedWebSocketSubscription() {
  8. console.log('🚀 开始签名WebSocket订阅测试...\n')
  9. const testAccounts = [
  10. {
  11. name: 'pacifica-1',
  12. account: process.env.PACIFICA_ACCOUNT_1,
  13. privateKey: process.env.PACIFICA_PRIVATE_KEY_1,
  14. },
  15. ]
  16. for (const testAccount of testAccounts) {
  17. if (!testAccount.account || !testAccount.privateKey) {
  18. console.log(`⚠️ 跳过 ${testAccount.name}:环境变量未配置`)
  19. continue
  20. }
  21. console.log(`\n📊 测试账户: ${testAccount.name}`)
  22. console.log(` 账户ID: ${testAccount.account.substring(0, 8)}...`)
  23. console.log(` 私钥: ${testAccount.privateKey.substring(0, 8)}...`)
  24. // 创建带签名功能的WebSocket客户端
  25. const wsClient = new PacificaWebSocketClient(
  26. 'wss://ws.pacifica.fi/ws',
  27. testAccount.account,
  28. testAccount.privateKey
  29. )
  30. try {
  31. console.log('📡 连接WebSocket...')
  32. await wsClient.connect()
  33. console.log(`✅ WebSocket连接状态: ${wsClient.isConnectionOpen()}`)
  34. // 测试签名的账户余额订阅
  35. console.log('\n💰 测试签名账户余额订阅...')
  36. const startTime = Date.now()
  37. try {
  38. const balanceResult = await wsClient.getSignedAccountBalance()
  39. const duration = Date.now() - startTime
  40. console.log(`✅ 签名余额订阅成功! 耗时: ${duration}ms`)
  41. console.log('📊 响应数据:', {
  42. status: balanceResult.status,
  43. statusText: balanceResult.statusText,
  44. hasData: !!balanceResult.data,
  45. dataType: typeof balanceResult.data,
  46. dataKeys: balanceResult.data ? Object.keys(balanceResult.data) : [],
  47. dataPreview: JSON.stringify(balanceResult.data).substring(0, 200),
  48. })
  49. } catch (error: any) {
  50. const duration = Date.now() - startTime
  51. console.log(`❌ 签名余额订阅失败: ${error.message} (耗时: ${duration}ms)`)
  52. }
  53. // 测试签名的账户仓位订阅
  54. console.log('\n📊 测试签名账户仓位订阅...')
  55. const posStartTime = Date.now()
  56. try {
  57. const positionsResult = await wsClient.getSignedAccountPositions()
  58. const posDuration = Date.now() - posStartTime
  59. console.log(`✅ 签名仓位订阅成功! 耗时: ${posDuration}ms`)
  60. console.log('📊 响应数据:', {
  61. status: positionsResult.status,
  62. statusText: positionsResult.statusText,
  63. hasData: !!positionsResult.data,
  64. dataType: typeof positionsResult.data,
  65. dataKeys: positionsResult.data ? Object.keys(positionsResult.data) : [],
  66. dataPreview: JSON.stringify(positionsResult.data).substring(0, 200),
  67. })
  68. } catch (error: any) {
  69. const posDuration = Date.now() - posStartTime
  70. console.log(`❌ 签名仓位订阅失败: ${error.message} (耗时: ${posDuration}ms)`)
  71. }
  72. // 连接状态检查
  73. console.log('\n🔍 连接状态检查:')
  74. console.log(` WebSocket连接: ${wsClient.isConnectionOpen() ? '✅ 已连接' : '❌ 断开'}`)
  75. console.log(` 消息队列长度: ${wsClient.getQueueLength()}`)
  76. } catch (error: any) {
  77. console.error(`❌ ${testAccount.name} 测试失败:`, error.message)
  78. } finally {
  79. // 清理资源
  80. try {
  81. await wsClient.close()
  82. console.log(`🧹 ${testAccount.name} 资源清理完成`)
  83. } catch (error: any) {
  84. console.log(`⚠️ ${testAccount.name} 资源清理时发生错误:`, error.message)
  85. }
  86. }
  87. }
  88. console.log('\n✅ 签名WebSocket订阅测试完成!')
  89. }
  90. // 签名调试
  91. async function debugSignature() {
  92. console.log('🔍 签名功能调试:')
  93. const testAccount = process.env.PACIFICA_ACCOUNT_1
  94. const testPrivateKey = process.env.PACIFICA_PRIVATE_KEY_1
  95. if (!testAccount || !testPrivateKey) {
  96. console.log('⚠️ 环境变量未配置,跳过签名调试')
  97. return
  98. }
  99. try {
  100. // 创建WebSocket客户端测试签名
  101. const wsClient = new PacificaWebSocketClient(
  102. 'wss://ws.pacifica.fi/ws',
  103. testAccount,
  104. testPrivateKey
  105. )
  106. console.log(' 账户:', testAccount.substring(0, 8) + '...')
  107. console.log(' 私钥:', testPrivateKey.substring(0, 8) + '...')
  108. console.log(' WebSocket URL: wss://ws.pacifica.fi/ws')
  109. console.log(' ✅ 签名客户端创建成功')
  110. } catch (error: any) {
  111. console.log(' ❌ 签名客户端创建失败:', error.message)
  112. }
  113. }
  114. // 运行测试
  115. if (import.meta.url === `file://${process.argv[1]}`) {
  116. Promise.resolve()
  117. .then(() => debugSignature())
  118. .then(() => testSignedWebSocketSubscription())
  119. .catch(error => {
  120. console.error('🚨 测试失败:', error)
  121. process.exit(1)
  122. })
  123. }
  124. export { testSignedWebSocketSubscription }