xtraderClient/sdk/testUser.ts
2026-02-26 14:44:36 +08:00

102 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from 'axios';
import WebSocket from 'ws';
import { UserSdk, UserMsg, OrderData, PositionData, BalanceData } from './userSocket';
// Node 环境:注入 WebSocketuserSocket 使用全局 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<string | null> {
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);