102 lines
3.2 KiB
TypeScript
102 lines
3.2 KiB
TypeScript
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<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);
|