import axios from 'axios'; import WebSocket from 'ws'; import { UserSdk, UserMsg, OrderData, PositionData, BalanceData } from './userSocket'; // Node 环境:注入 WebSocket(userSocket 使用全局 WebSocket) (global as any).WebSocket = WebSocket; // 配置 const CONFIG = { baseURL: 'http://localhost:8888', // API 基础地址 wsURL: 'ws://localhost:8888/clob/ws/user', // WebSocket 地址 }; // 模拟登录获取 Token async function loginUser(index: number = 1): Promise { const hexIndex = index.toString(16).padStart(36, '0'); const walletAddress = `0x0000${hexIndex}`; // 测试用钱包地址 try { const payload = { walletAddress: walletAddress, nonce: "test_nonce", signature: "test_signature", message: "test_message" }; console.log(`正在登录用户 (地址: ${walletAddress})...`); const response = await axios.post(`${CONFIG.baseURL}/base/walletLogin`, payload); if (response.data.code === 0 && response.data.data) { console.log(`✅ 登录成功! 用户ID: ${response.data.data.user.ID}`); return response.data.data.token; } else { console.error(`❌ 登录失败:`, response.data.msg); return null; } } catch (error: any) { console.error(`❌ 登录请求错误:`, error.message); return null; } } async function main() { // 1. 获取 Token const token = await loginUser(1); if (!token) { console.error("无法获取 Token,退出测试"); return; } // 2. 初始化 SDK console.log("初始化 User SDK..."); const sdk = new UserSdk({ url: CONFIG.wsURL, token: token, autoReconnect: true }); // 3. 注册事件监听 sdk.onConnect(() => { console.log("✅ WebSocket 连接已建立"); }); sdk.onDisconnect((event) => { console.log(`⚠️ WebSocket 连接断开 (Code: ${event.code})`); }); sdk.onError((error) => { console.error("❌ WebSocket 错误:", error); }); sdk.onWelcome((msg) => { console.log("👋 收到 Welcome 消息:", msg); }); sdk.onOrderUpdate((data: OrderData) => { console.log("\n📦 [订单更新] Received Order Update:"); console.log(` ID: ${data.ID}, Status: ${data.status}, Side: ${data.side}, Price: ${data.price}, Matched: ${data.sizeMatched}/${data.originalSize}`); }); sdk.onPositionUpdate((data: PositionData) => { console.log("\n📊 [持仓更新] Received Position Update:"); console.log(` Market: ${data.marketID}, Token: ${data.tokenId}, Side: ${data.side}, Size: ${data.size}`); }); sdk.onBalanceUpdate((data: BalanceData) => { console.log("\n💰 [余额更新] Received Balance Update:"); console.log(` Token: ${data.token_id || data.tokenType}, Amount: ${data.amount}, Available: ${data.available}`); }); // 4. 连接 sdk.connect(); // 保持运行 console.log("正在监听消息... (按 Ctrl+C 退出)"); // 保持进程活跃 setInterval(() => {}, 1000); } main().catch(console.error);