@clonegod/ttd-bsc-common 1.0.83 → 1.0.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -6,3 +6,4 @@ export * from './types';
6
6
  export * from './utils';
7
7
  export * from './redis';
8
8
  export * from './ws';
9
+ export * from './yyws';
package/dist/index.js CHANGED
@@ -22,3 +22,4 @@ __exportStar(require("./types"), exports);
22
22
  __exportStar(require("./utils"), exports);
23
23
  __exportStar(require("./redis"), exports);
24
24
  __exportStar(require("./ws"), exports);
25
+ __exportStar(require("./yyws"), exports);
@@ -0,0 +1,2 @@
1
+ export * from './type';
2
+ export * from './yyws_client';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./type"), exports);
18
+ __exportStar(require("./yyws_client"), exports);
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ws_1 = require("ws");
4
+ const POOL_ADDRESS = "0x08debfc510a2eb0148107da7ab8e96531323f4d4";
5
+ const TOKEN0 = "USDT";
6
+ const TOKEN1 = "XPIN";
7
+ function mockYywsPriceMsg(count) {
8
+ const baseTime = Date.parse("2025-12-15T17:35:00.000");
9
+ const baseBlock = 71719227;
10
+ const msgs = [];
11
+ for (let i = 0; i < count; i++) {
12
+ const t = new Date(baseTime + i * 500);
13
+ const timeStr = new Date().toISOString().replace('T', ' ');
14
+ const blockNumber = baseBlock + i;
15
+ const delta = (Math.sin(i / 5) * 5) / 1000000;
16
+ const askToken0InToken1 = (0.001 + delta).toFixed(8);
17
+ const bidToken0InToken1 = (0.001 - delta).toFixed(8);
18
+ const askToken1InToken0 = (1 / parseFloat(bidToken0InToken1)).toFixed(8);
19
+ const bidToken1InToken0 = (1 / parseFloat(askToken0InToken1)).toFixed(8);
20
+ msgs.push({
21
+ time: timeStr,
22
+ blockNumber,
23
+ poolData: [
24
+ {
25
+ poolAddress: POOL_ADDRESS,
26
+ token0: TOKEN0,
27
+ token1: TOKEN1,
28
+ askToken0InToken1,
29
+ bidToken0InToken1,
30
+ askToken1InToken0,
31
+ bidToken1InToken0,
32
+ blockNumber,
33
+ },
34
+ ],
35
+ });
36
+ }
37
+ return msgs;
38
+ }
39
+ function startMockYywsServer() {
40
+ const PORT = Number(process.env.MOCK_YYWS_PORT || 10100);
41
+ const PATH = "/ws";
42
+ const messages = mockYywsPriceMsg(200);
43
+ const wss = new ws_1.WebSocketServer({ port: PORT, path: PATH });
44
+ wss.on("listening", () => {
45
+ console.log(`[mock_ws_server] listening on ws://127.0.0.1:${PORT}${PATH}`);
46
+ });
47
+ wss.on("connection", (ws) => {
48
+ console.log("[mock_ws_server] client connected");
49
+ if (messages.length === 0) {
50
+ ws.close();
51
+ return;
52
+ }
53
+ let idx = 0;
54
+ const sendNext = () => {
55
+ if (ws.readyState !== ws.OPEN) {
56
+ return;
57
+ }
58
+ const msg = messages[idx];
59
+ ws.send(JSON.stringify(msg));
60
+ idx = (idx + 1) % messages.length;
61
+ setTimeout(sendNext, 500);
62
+ };
63
+ sendNext();
64
+ ws.on("close", () => {
65
+ console.log("[mock_ws_server] client disconnected");
66
+ });
67
+ ws.on("error", (err) => {
68
+ console.error("[mock_ws_server] ws error:", err);
69
+ });
70
+ });
71
+ wss.on("error", (err) => {
72
+ console.error("[mock_ws_server] server error:", err);
73
+ });
74
+ }
75
+ if (require.main === module) {
76
+ startMockYywsServer();
77
+ }
@@ -0,0 +1,25 @@
1
+ export interface YywsPoolPrice {
2
+ poolAddress: string;
3
+ token0: string;
4
+ token1: string;
5
+ askToken0InToken1: string;
6
+ bidToken0InToken1: string;
7
+ askToken1InToken0: string;
8
+ bidToken1InToken0: string;
9
+ blockNumber: number;
10
+ }
11
+ export interface YywsPriceMessage {
12
+ time: string;
13
+ blockNumber: number;
14
+ poolData: YywsPoolPrice[];
15
+ }
16
+ export interface YywsPriceDataFormat {
17
+ yywsTimeStr: string;
18
+ yywsTimeMs: number;
19
+ recvTimeMs: number;
20
+ blockNumber: number;
21
+ poolAddress: string;
22
+ poolName: string;
23
+ ask_price: string;
24
+ bid_price: string;
25
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ import { StandardPoolInfoType } from "@clonegod/ttd-core";
2
+ export declare function subscribe_pool_price_from_yyws(poolInfoList: StandardPoolInfoType[], callback: Function): void;
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.subscribe_pool_price_from_yyws = subscribe_pool_price_from_yyws;
13
+ const dist_1 = require("@clonegod/ttd-core/dist");
14
+ const ws_client_1 = require("@clonegod/ttd-core/dist/ws/ws_client");
15
+ function subscribe_pool_price_from_yyws(poolInfoList, callback) {
16
+ const ws_url = process.env.SUBSCIBE_YY_WS_URL || 'ws://43.165.135.114:10100/ws';
17
+ const ws_client = new ws_client_1.WebSocketClient(ws_url);
18
+ ws_client.onOpen(() => {
19
+ console.log(`ws connection (${ws_url}) opened`);
20
+ });
21
+ ws_client.onMessage(((priceData) => {
22
+ poolInfoList.forEach(poolInfo => {
23
+ log_yyws_price_msg(poolInfo, priceData);
24
+ const priceDataFormats = format_yyws_price_data(poolInfo, Date.now(), priceData);
25
+ callback(priceDataFormats);
26
+ });
27
+ }));
28
+ ws_client.connect();
29
+ }
30
+ function format_yyws_price_data(poolInfo, recvTimeMs, blockPoolPrices) {
31
+ const { time: yywsTimeStr, blockNumber, poolData } = blockPoolPrices;
32
+ const { pool_address, pool_name } = poolInfo;
33
+ const targetPoolPrices = poolData.filter((poolPrice) => poolPrice.poolAddress.toLowerCase() === pool_address.toLowerCase());
34
+ if (targetPoolPrices.length === 0) {
35
+ return [];
36
+ }
37
+ const priceDataFormats = [];
38
+ for (const poolPrice of targetPoolPrices) {
39
+ const price_pool_name = poolPrice.token0 + '/' + poolPrice.token1;
40
+ if (pool_name.toUpperCase() !== price_pool_name.toUpperCase()) {
41
+ (0, dist_1.log_warn)(`[format_yyws_price_data] pool_name not match: pool_name: ${pool_name}, price_pool_name: ${price_pool_name}`);
42
+ continue;
43
+ }
44
+ const [ask_price, bid_price] = get_ask_bid_from_pool_price(poolInfo, poolPrice);
45
+ priceDataFormats.push({
46
+ yywsTimeStr,
47
+ yywsTimeMs: new Date(yywsTimeStr.replace(' ', 'T')).getTime(),
48
+ recvTimeMs,
49
+ blockNumber,
50
+ poolAddress: pool_address,
51
+ poolName: pool_name,
52
+ ask_price,
53
+ bid_price,
54
+ });
55
+ }
56
+ return priceDataFormats;
57
+ }
58
+ function get_ask_bid_from_pool_price(poolInfo, poolPrice) {
59
+ let quoteToken = poolInfo.quote_token;
60
+ if (quoteToken.toUpperCase() === poolPrice.token0.toUpperCase()) {
61
+ return [poolPrice.askToken1InToken0, poolPrice.bidToken1InToken0];
62
+ }
63
+ else if (quoteToken.toUpperCase() === poolPrice.token1.toUpperCase()) {
64
+ return [poolPrice.askToken0InToken1, poolPrice.bidToken0InToken1];
65
+ }
66
+ else {
67
+ throw new Error(`Invalid quote token: ${quoteToken}, price.token0: ${poolPrice.token0}, price.token1: ${poolPrice.token1}`);
68
+ }
69
+ }
70
+ function log_yyws_price_msg(poolInfo, priceData) {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ const { time, blockNumber, poolData } = priceData;
73
+ let line = `${time} - ${blockNumber} - ${poolData.length}\n`;
74
+ for (const poolPrice of poolData) {
75
+ const { poolAddress, token0, token1, askToken0InToken1, bidToken0InToken1, askToken1InToken0, bidToken1InToken0 } = poolPrice;
76
+ line += `${token0}/${token1} - ${poolAddress} - ${askToken0InToken1} - ${bidToken0InToken1} - ${askToken1InToken0} - ${bidToken1InToken0}\n`;
77
+ }
78
+ (0, dist_1.appendLogWithPeriodicReset)("logs", `yyws-price-msg-${poolInfo.pool_address}.txt`, line, 10)
79
+ .catch(err => console.error('log_yyws_price_msg error', err));
80
+ });
81
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clonegod/ttd-bsc-common",
3
- "version": "1.0.83",
3
+ "version": "1.0.84",
4
4
  "description": "BSC common library",
5
5
  "license": "UNLICENSED",
6
6
  "main": "dist/index.js",