@3rd-eye-labs/openmm 0.0.1
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/LICENSE +21 -0
- package/README.md +70 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +43 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands/balance.d.ts +3 -0
- package/dist/cli/commands/balance.d.ts.map +1 -0
- package/dist/cli/commands/balance.js +51 -0
- package/dist/cli/commands/balance.js.map +1 -0
- package/dist/cli/commands/orderbook.d.ts +3 -0
- package/dist/cli/commands/orderbook.d.ts.map +1 -0
- package/dist/cli/commands/orderbook.js +83 -0
- package/dist/cli/commands/orderbook.js.map +1 -0
- package/dist/cli/commands/orders.d.ts +3 -0
- package/dist/cli/commands/orders.d.ts.map +1 -0
- package/dist/cli/commands/orders.js +196 -0
- package/dist/cli/commands/orders.js.map +1 -0
- package/dist/cli/commands/pool-discovery.d.ts +3 -0
- package/dist/cli/commands/pool-discovery.d.ts.map +1 -0
- package/dist/cli/commands/pool-discovery.js +60 -0
- package/dist/cli/commands/pool-discovery.js.map +1 -0
- package/dist/cli/commands/ticker.d.ts +3 -0
- package/dist/cli/commands/ticker.d.ts.map +1 -0
- package/dist/cli/commands/ticker.js +51 -0
- package/dist/cli/commands/ticker.js.map +1 -0
- package/dist/cli/commands/trade.d.ts +3 -0
- package/dist/cli/commands/trade.d.ts.map +1 -0
- package/dist/cli/commands/trade.js +110 -0
- package/dist/cli/commands/trade.js.map +1 -0
- package/dist/cli/commands/trades.d.ts +3 -0
- package/dist/cli/commands/trades.d.ts.map +1 -0
- package/dist/cli/commands/trades.js +73 -0
- package/dist/cli/commands/trades.js.map +1 -0
- package/dist/cli/exchange-factory.d.ts +40 -0
- package/dist/cli/exchange-factory.d.ts.map +1 -0
- package/dist/cli/exchange-factory.js +77 -0
- package/dist/cli/exchange-factory.js.map +1 -0
- package/dist/cli/pool-discovery-core.d.ts +54 -0
- package/dist/cli/pool-discovery-core.d.ts.map +1 -0
- package/dist/cli/pool-discovery-core.js +193 -0
- package/dist/cli/pool-discovery-core.js.map +1 -0
- package/dist/cli/utils/error-handler.d.ts +40 -0
- package/dist/cli/utils/error-handler.d.ts.map +1 -0
- package/dist/cli/utils/error-handler.js +117 -0
- package/dist/cli/utils/error-handler.js.map +1 -0
- package/dist/cli/utils/validation.d.ts +45 -0
- package/dist/cli/utils/validation.d.ts.map +1 -0
- package/dist/cli/utils/validation.js +118 -0
- package/dist/cli/utils/validation.js.map +1 -0
- package/dist/config/environment.d.ts +25 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +72 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +21 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/launcher-config.d.ts +17 -0
- package/dist/config/launcher-config.d.ts.map +1 -0
- package/dist/config/launcher-config.js +14 -0
- package/dist/config/launcher-config.js.map +1 -0
- package/dist/config/price-aggregation.d.ts +49 -0
- package/dist/config/price-aggregation.d.ts.map +1 -0
- package/dist/config/price-aggregation.js +89 -0
- package/dist/config/price-aggregation.js.map +1 -0
- package/dist/core/exchange/base-exchange-connector.d.ts +45 -0
- package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -0
- package/dist/core/exchange/base-exchange-connector.js +43 -0
- package/dist/core/exchange/base-exchange-connector.js.map +1 -0
- package/dist/core/exchange/base-exchange-data-mapper.d.ts +58 -0
- package/dist/core/exchange/base-exchange-data-mapper.d.ts.map +1 -0
- package/dist/core/exchange/base-exchange-data-mapper.js +60 -0
- package/dist/core/exchange/base-exchange-data-mapper.js.map +1 -0
- package/dist/core/price-aggregation/cardano-price-service.d.ts +31 -0
- package/dist/core/price-aggregation/cardano-price-service.d.ts.map +1 -0
- package/dist/core/price-aggregation/cardano-price-service.js +157 -0
- package/dist/core/price-aggregation/cardano-price-service.js.map +1 -0
- package/dist/core/price-aggregation/index.d.ts +11 -0
- package/dist/core/price-aggregation/index.d.ts.map +1 -0
- package/dist/core/price-aggregation/index.js +21 -0
- package/dist/core/price-aggregation/index.js.map +1 -0
- package/dist/core/price-aggregation/iris-api-client.d.ts +16 -0
- package/dist/core/price-aggregation/iris-api-client.d.ts.map +1 -0
- package/dist/core/price-aggregation/iris-api-client.js +62 -0
- package/dist/core/price-aggregation/iris-api-client.js.map +1 -0
- package/dist/core/price-aggregation/iris-pool-discovery.d.ts +37 -0
- package/dist/core/price-aggregation/iris-pool-discovery.d.ts.map +1 -0
- package/dist/core/price-aggregation/iris-pool-discovery.js +123 -0
- package/dist/core/price-aggregation/iris-pool-discovery.js.map +1 -0
- package/dist/core/price-aggregation/price-calculator.d.ts +27 -0
- package/dist/core/price-aggregation/price-calculator.d.ts.map +1 -0
- package/dist/core/price-aggregation/price-calculator.js +84 -0
- package/dist/core/price-aggregation/price-calculator.js.map +1 -0
- package/dist/core/risk-management/risk-manager.d.ts +14 -0
- package/dist/core/risk-management/risk-manager.d.ts.map +1 -0
- package/dist/core/risk-management/risk-manager.js +40 -0
- package/dist/core/risk-management/risk-manager.js.map +1 -0
- package/dist/core/strategy/base-strategy.d.ts +26 -0
- package/dist/core/strategy/base-strategy.d.ts.map +1 -0
- package/dist/core/strategy/base-strategy.js +46 -0
- package/dist/core/strategy/base-strategy.js.map +1 -0
- package/dist/core/strategy/strategy-factory.d.ts +7 -0
- package/dist/core/strategy/strategy-factory.d.ts.map +1 -0
- package/dist/core/strategy/strategy-factory.js +64 -0
- package/dist/core/strategy/strategy-factory.js.map +1 -0
- package/dist/exchanges/mexc/mexc-auth.d.ts +42 -0
- package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-auth.js +122 -0
- package/dist/exchanges/mexc/mexc-auth.js.map +1 -0
- package/dist/exchanges/mexc/mexc-connector.d.ts +125 -0
- package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-connector.js +422 -0
- package/dist/exchanges/mexc/mexc-connector.js.map +1 -0
- package/dist/exchanges/mexc/mexc-data-mapper.d.ts +50 -0
- package/dist/exchanges/mexc/mexc-data-mapper.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-data-mapper.js +127 -0
- package/dist/exchanges/mexc/mexc-data-mapper.js.map +1 -0
- package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts +43 -0
- package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-protobuf-decoder.js +235 -0
- package/dist/exchanges/mexc/mexc-protobuf-decoder.js.map +1 -0
- package/dist/exchanges/mexc/mexc-user-stream.d.ts +81 -0
- package/dist/exchanges/mexc/mexc-user-stream.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-user-stream.js +253 -0
- package/dist/exchanges/mexc/mexc-user-stream.js.map +1 -0
- package/dist/exchanges/mexc/mexc-utils.d.ts +31 -0
- package/dist/exchanges/mexc/mexc-utils.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-utils.js +186 -0
- package/dist/exchanges/mexc/mexc-utils.js.map +1 -0
- package/dist/exchanges/mexc/mexc-websocket.d.ts +124 -0
- package/dist/exchanges/mexc/mexc-websocket.d.ts.map +1 -0
- package/dist/exchanges/mexc/mexc-websocket.js +496 -0
- package/dist/exchanges/mexc/mexc-websocket.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/strategies/grid/grid-calculator.d.ts +7 -0
- package/dist/strategies/grid/grid-calculator.d.ts.map +1 -0
- package/dist/strategies/grid/grid-calculator.js +34 -0
- package/dist/strategies/grid/grid-calculator.js.map +1 -0
- package/dist/strategies/grid/grid-order-manager.d.ts +23 -0
- package/dist/strategies/grid/grid-order-manager.d.ts.map +1 -0
- package/dist/strategies/grid/grid-order-manager.js +99 -0
- package/dist/strategies/grid/grid-order-manager.js.map +1 -0
- package/dist/strategies/grid/grid-strategy.d.ts +29 -0
- package/dist/strategies/grid/grid-strategy.d.ts.map +1 -0
- package/dist/strategies/grid/grid-strategy.js +185 -0
- package/dist/strategies/grid/grid-strategy.js.map +1 -0
- package/dist/types/account.d.ts +21 -0
- package/dist/types/account.d.ts.map +1 -0
- package/dist/types/account.js +3 -0
- package/dist/types/account.js.map +1 -0
- package/dist/types/exchange.d.ts +67 -0
- package/dist/types/exchange.d.ts.map +1 -0
- package/dist/types/exchange.js +3 -0
- package/dist/types/exchange.js.map +1 -0
- package/dist/types/grid.d.ts +10 -0
- package/dist/types/grid.d.ts.map +1 -0
- package/dist/types/grid.js +3 -0
- package/dist/types/grid.js.map +1 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +27 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/iris.d.ts +58 -0
- package/dist/types/iris.d.ts.map +1 -0
- package/dist/types/iris.js +7 -0
- package/dist/types/iris.js.map +1 -0
- package/dist/types/market.d.ts +16 -0
- package/dist/types/market.d.ts.map +1 -0
- package/dist/types/market.js +3 -0
- package/dist/types/market.js.map +1 -0
- package/dist/types/mexc-raw.d.ts +87 -0
- package/dist/types/mexc-raw.d.ts.map +1 -0
- package/dist/types/mexc-raw.js +7 -0
- package/dist/types/mexc-raw.js.map +1 -0
- package/dist/types/mexc.d.ts +57 -0
- package/dist/types/mexc.d.ts.map +1 -0
- package/dist/types/mexc.js +8 -0
- package/dist/types/mexc.js.map +1 -0
- package/dist/types/price.d.ts +37 -0
- package/dist/types/price.d.ts.map +1 -0
- package/dist/types/price.js +7 -0
- package/dist/types/price.js.map +1 -0
- package/dist/types/risk.d.ts +22 -0
- package/dist/types/risk.d.ts.map +1 -0
- package/dist/types/risk.js +6 -0
- package/dist/types/risk.js.map +1 -0
- package/dist/types/strategy.d.ts +46 -0
- package/dist/types/strategy.d.ts.map +1 -0
- package/dist/types/strategy.js +3 -0
- package/dist/types/strategy.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +29 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +108 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/symbol-utils.d.ts +17 -0
- package/dist/utils/symbol-utils.d.ts.map +1 -0
- package/dist/utils/symbol-utils.js +41 -0
- package/dist/utils/symbol-utils.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MexcUtils = void 0;
|
|
4
|
+
const mexc_data_mapper_1 = require("./mexc-data-mapper");
|
|
5
|
+
const symbol_utils_1 = require("../../utils/symbol-utils");
|
|
6
|
+
/**
|
|
7
|
+
* MEXC Utility Functions
|
|
8
|
+
* Handles MEXC-specific operations like symbol formatting, order parameters, and WebSocket data processing
|
|
9
|
+
*
|
|
10
|
+
* This class focuses on MEXC-specific utilities and WebSocket message processing
|
|
11
|
+
*/
|
|
12
|
+
class MexcUtils {
|
|
13
|
+
/**
|
|
14
|
+
* Unified order transformation function
|
|
15
|
+
* Handles all MEXC order formats: REST API, WebSocket, Protobuf, User Data
|
|
16
|
+
*/
|
|
17
|
+
static transformOrder(orderData) {
|
|
18
|
+
if (!orderData) {
|
|
19
|
+
throw new Error('Order data is required');
|
|
20
|
+
}
|
|
21
|
+
if (this.isProtobufOrder(orderData)) {
|
|
22
|
+
return this.transformProtobufOrderInternal(orderData);
|
|
23
|
+
}
|
|
24
|
+
else if (this.isUserDataOrder(orderData)) {
|
|
25
|
+
return this.transformUserDataOrderInternal(orderData);
|
|
26
|
+
}
|
|
27
|
+
else if (this.isWebSocketUserOrder(orderData)) {
|
|
28
|
+
return this.transformWebSocketUserOrderInternal(orderData);
|
|
29
|
+
}
|
|
30
|
+
else if (this.isRestApiOrder(orderData)) {
|
|
31
|
+
return this.transformRestApiOrderInternal(orderData);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Fallback to REST API format for broader compatibility
|
|
35
|
+
return this.transformRestApiOrderInternal(orderData);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
static isProtobufOrder(data) {
|
|
39
|
+
return data && typeof data.orderId === 'string' && typeof data.symbol === 'string' &&
|
|
40
|
+
typeof data.price === 'number' && typeof data.quantity === 'number' &&
|
|
41
|
+
typeof data.side === 'string' && typeof data.status === 'string';
|
|
42
|
+
}
|
|
43
|
+
static isUserDataOrder(data) {
|
|
44
|
+
return data && (data.i !== undefined || data.c !== undefined) &&
|
|
45
|
+
(data.S !== undefined || data.s !== undefined);
|
|
46
|
+
}
|
|
47
|
+
static isRestApiOrder(data) {
|
|
48
|
+
return data && (data.orderId !== undefined || data.id !== undefined) &&
|
|
49
|
+
typeof data.symbol === 'string' &&
|
|
50
|
+
(data.origQty !== undefined || data.quantity !== undefined || data.status !== undefined);
|
|
51
|
+
}
|
|
52
|
+
static isWebSocketUserOrder(data) {
|
|
53
|
+
return data && (data.i !== undefined || data.orderId !== undefined) &&
|
|
54
|
+
(data.s !== undefined || data.symbol !== undefined) &&
|
|
55
|
+
(data.q !== undefined || data.origQty !== undefined) &&
|
|
56
|
+
(data.X !== undefined || data.orderStatus !== undefined);
|
|
57
|
+
}
|
|
58
|
+
static transformProtobufOrderInternal(decodedOrder) {
|
|
59
|
+
const status = mexc_data_mapper_1.MexcDataMapper.mapToOrderStatus(decodedOrder.status);
|
|
60
|
+
let filled = 0;
|
|
61
|
+
if (status === 'filled') {
|
|
62
|
+
filled = decodedOrder.quantity;
|
|
63
|
+
}
|
|
64
|
+
else if (status === 'open' && decodedOrder.status.includes('partial')) {
|
|
65
|
+
filled = decodedOrder.quantity;
|
|
66
|
+
}
|
|
67
|
+
else if (decodedOrder.status === 'filled' || decodedOrder.status.toLowerCase().includes('fill')) {
|
|
68
|
+
filled = decodedOrder.quantity;
|
|
69
|
+
}
|
|
70
|
+
const remaining = Math.max(0, decodedOrder.quantity - filled);
|
|
71
|
+
return {
|
|
72
|
+
id: decodedOrder.orderId,
|
|
73
|
+
symbol: decodedOrder.symbol,
|
|
74
|
+
type: 'limit',
|
|
75
|
+
side: decodedOrder.side,
|
|
76
|
+
amount: decodedOrder.quantity,
|
|
77
|
+
price: decodedOrder.price,
|
|
78
|
+
filled,
|
|
79
|
+
remaining,
|
|
80
|
+
status,
|
|
81
|
+
timestamp: decodedOrder.timestamp
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
static transformUserDataOrderInternal(userDataOrder) {
|
|
85
|
+
const statusMap = {
|
|
86
|
+
1: 'new',
|
|
87
|
+
2: 'filled',
|
|
88
|
+
3: 'partially_filled',
|
|
89
|
+
4: 'cancelled',
|
|
90
|
+
5: 'cancelled'
|
|
91
|
+
};
|
|
92
|
+
const statusCode = userDataOrder.s;
|
|
93
|
+
const mexcStatus = statusMap[statusCode || 1] || 'new';
|
|
94
|
+
const status = mexc_data_mapper_1.MexcDataMapper.mapToOrderStatus(mexcStatus);
|
|
95
|
+
const mexcSymbol = userDataOrder.c || userDataOrder.symbol;
|
|
96
|
+
const symbol = mexcSymbol ? (() => {
|
|
97
|
+
try {
|
|
98
|
+
return (0, symbol_utils_1.toStandardFormat)(mexcSymbol);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return mexcSymbol;
|
|
102
|
+
}
|
|
103
|
+
})() : '';
|
|
104
|
+
return {
|
|
105
|
+
id: userDataOrder.i?.toString() || Date.now().toString(),
|
|
106
|
+
symbol: symbol,
|
|
107
|
+
type: 'limit',
|
|
108
|
+
side: userDataOrder.S === 1 ? 'buy' : 'sell',
|
|
109
|
+
amount: parseFloat(userDataOrder.v || '0'),
|
|
110
|
+
price: parseFloat(userDataOrder.p || '0'),
|
|
111
|
+
filled: parseFloat(userDataOrder.z || '0'),
|
|
112
|
+
remaining: parseFloat(userDataOrder.v || '0') - parseFloat(userDataOrder.z || '0'),
|
|
113
|
+
status,
|
|
114
|
+
timestamp: Date.now()
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
static transformRestApiOrderInternal(mexcOrder) {
|
|
118
|
+
const status = mexc_data_mapper_1.MexcDataMapper.mapToOrderStatus(mexcOrder.status || 'NEW');
|
|
119
|
+
const filled = parseFloat(mexcOrder.executedQty || '0');
|
|
120
|
+
const amount = parseFloat(mexcOrder.origQty || mexcOrder.quantity || '0');
|
|
121
|
+
return {
|
|
122
|
+
id: (mexcOrder.orderId || mexcOrder.id || mexcOrder.i)?.toString() || '',
|
|
123
|
+
symbol: mexcOrder.symbol || '',
|
|
124
|
+
type: (mexcOrder.type || 'LIMIT').toLowerCase(),
|
|
125
|
+
side: (mexcOrder.side || 'BUY').toLowerCase(),
|
|
126
|
+
amount,
|
|
127
|
+
price: mexcOrder.price ? parseFloat(mexcOrder.price) : 0,
|
|
128
|
+
filled,
|
|
129
|
+
remaining: amount - filled,
|
|
130
|
+
status,
|
|
131
|
+
timestamp: parseInt(mexcOrder.time || mexcOrder.updateTime) || Date.now()
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
static transformWebSocketUserOrderInternal(data) {
|
|
135
|
+
const mexcSymbol = data.s || data.symbol || '';
|
|
136
|
+
let symbol;
|
|
137
|
+
try {
|
|
138
|
+
symbol = (0, symbol_utils_1.toStandardFormat)(mexcSymbol);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
symbol = mexcSymbol;
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
id: data.i?.toString() || data.orderId?.toString() || Date.now().toString(),
|
|
145
|
+
symbol: symbol,
|
|
146
|
+
type: (data.o?.toLowerCase() || 'limit'),
|
|
147
|
+
side: (data.S?.toLowerCase() || 'buy'),
|
|
148
|
+
amount: parseFloat(data.q || data.origQty || '0'),
|
|
149
|
+
price: parseFloat(data.p || data.price || '0'),
|
|
150
|
+
filled: parseFloat(data.z || data.executedQty || '0'),
|
|
151
|
+
remaining: parseFloat(data.q || '0') - parseFloat(data.z || '0'),
|
|
152
|
+
status: mexc_data_mapper_1.MexcDataMapper.mapToOrderStatus(data.X || data.orderStatus || 'NEW'),
|
|
153
|
+
timestamp: parseInt(data.T || data.transactTime) || Date.now()
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Create order parameters in MEXC format
|
|
158
|
+
*/
|
|
159
|
+
static createOrderParams(symbol, type, side, amount, price) {
|
|
160
|
+
const params = {
|
|
161
|
+
symbol: (0, symbol_utils_1.toExchangeFormat)(symbol),
|
|
162
|
+
side: side.toUpperCase(),
|
|
163
|
+
type: type.toUpperCase(),
|
|
164
|
+
quantity: amount.toString()
|
|
165
|
+
};
|
|
166
|
+
if (type === 'limit' && price) {
|
|
167
|
+
params.price = price.toString();
|
|
168
|
+
params.timeInForce = 'GTC';
|
|
169
|
+
}
|
|
170
|
+
return params;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Determine order side from protobuf message patterns
|
|
174
|
+
*/
|
|
175
|
+
static determineSide(message) {
|
|
176
|
+
if (message.includes('R ') || message.includes('@R')) {
|
|
177
|
+
return 'buy';
|
|
178
|
+
}
|
|
179
|
+
else if (message.includes('H') || message.includes('@H')) {
|
|
180
|
+
return 'sell';
|
|
181
|
+
}
|
|
182
|
+
return 'buy';
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
exports.MexcUtils = MexcUtils;
|
|
186
|
+
//# sourceMappingURL=mexc-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mexc-utils.js","sourceRoot":"","sources":["../../../src/exchanges/mexc/mexc-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { Order, OrderBook, Ticker, Trade, WebSocketStatus } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* MEXC WebSocket
|
|
4
|
+
*
|
|
5
|
+
* Provides real-time market data streaming and user order updates
|
|
6
|
+
*/
|
|
7
|
+
export declare class MexcWebSocket {
|
|
8
|
+
private ws?;
|
|
9
|
+
private subscriptions;
|
|
10
|
+
private status;
|
|
11
|
+
private readonly wsUrl;
|
|
12
|
+
private logger;
|
|
13
|
+
private reconnectTimer?;
|
|
14
|
+
private reconnectAttempts;
|
|
15
|
+
private maxReconnectAttempts;
|
|
16
|
+
private reconnectDelay;
|
|
17
|
+
private autoReconnect;
|
|
18
|
+
constructor(wsUrl?: string);
|
|
19
|
+
/**
|
|
20
|
+
* Connect to MEXC WebSocket
|
|
21
|
+
*/
|
|
22
|
+
connectWebSocket(): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* WebSocket open event handler
|
|
25
|
+
*/
|
|
26
|
+
private onOpen;
|
|
27
|
+
/**
|
|
28
|
+
* WebSocket close event handler
|
|
29
|
+
*/
|
|
30
|
+
private onClose;
|
|
31
|
+
/**
|
|
32
|
+
* WebSocket error event handler
|
|
33
|
+
*/
|
|
34
|
+
private onError;
|
|
35
|
+
/**
|
|
36
|
+
* Message handler
|
|
37
|
+
*/
|
|
38
|
+
private onMessage;
|
|
39
|
+
/**
|
|
40
|
+
* Handle protobuf user data stream messages
|
|
41
|
+
*/
|
|
42
|
+
private handleProtobufUserDataMessage;
|
|
43
|
+
/**
|
|
44
|
+
* Handle user data stream messages
|
|
45
|
+
*/
|
|
46
|
+
private handleUserDataMessage;
|
|
47
|
+
/**
|
|
48
|
+
* Transform MEXC user data order update to Order format
|
|
49
|
+
*/
|
|
50
|
+
private transformUserOrderUpdate;
|
|
51
|
+
/**
|
|
52
|
+
* Process decoded message directly based on type
|
|
53
|
+
*/
|
|
54
|
+
private processDecodedMessage;
|
|
55
|
+
/**
|
|
56
|
+
* Handle order updates directly from protobuf
|
|
57
|
+
*/
|
|
58
|
+
private onOrderUpdate;
|
|
59
|
+
/**
|
|
60
|
+
* Handle ticker updates directly from protobuf
|
|
61
|
+
*/
|
|
62
|
+
private onTickerUpdate;
|
|
63
|
+
/**
|
|
64
|
+
* Handle trades updates directly from protobuf
|
|
65
|
+
*/
|
|
66
|
+
private onTradesUpdate;
|
|
67
|
+
/**
|
|
68
|
+
* Handle order book updates directly from protobuf
|
|
69
|
+
*/
|
|
70
|
+
private onOrderBookUpdate;
|
|
71
|
+
/**
|
|
72
|
+
* Disconnect WebSocket
|
|
73
|
+
*/
|
|
74
|
+
disconnectWebSocket(): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Subscribe to ticker updates
|
|
77
|
+
*/
|
|
78
|
+
subscribeTicker(symbol: string, callback: (ticker: Ticker) => void): Promise<string>;
|
|
79
|
+
/**
|
|
80
|
+
* Subscribe to trades updates
|
|
81
|
+
*/
|
|
82
|
+
subscribeTrades(symbol: string, callback: (trade: Trade) => void): Promise<string>;
|
|
83
|
+
/**
|
|
84
|
+
* Subscribe to order book updates
|
|
85
|
+
*/
|
|
86
|
+
subscribeOrderBook(symbol: string, callback: (orderbook: OrderBook) => void): Promise<string>;
|
|
87
|
+
/**
|
|
88
|
+
* Subscribe to user orders
|
|
89
|
+
*/
|
|
90
|
+
subscribeOrders(callback: (order: Order) => void): Promise<string>;
|
|
91
|
+
/**
|
|
92
|
+
* Subscribe to user data
|
|
93
|
+
*/
|
|
94
|
+
subscribeToUserData(callback: (order: Order) => void): Promise<string>;
|
|
95
|
+
/**
|
|
96
|
+
* Send subscription message to MEXC
|
|
97
|
+
*/
|
|
98
|
+
private subscribe;
|
|
99
|
+
/**
|
|
100
|
+
* Unsubscribe from a subscription
|
|
101
|
+
*/
|
|
102
|
+
unsubscribe(subscriptionId: string): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Check if WebSocket is connected
|
|
105
|
+
*/
|
|
106
|
+
isConnected(): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Get WebSocket status
|
|
109
|
+
*/
|
|
110
|
+
getWebSocketStatus(): WebSocketStatus;
|
|
111
|
+
/**
|
|
112
|
+
* Schedule reconnection attempt
|
|
113
|
+
*/
|
|
114
|
+
private scheduleReconnect;
|
|
115
|
+
/**
|
|
116
|
+
* Attempt to reconnect
|
|
117
|
+
*/
|
|
118
|
+
private reconnect;
|
|
119
|
+
/**
|
|
120
|
+
* Clear reconnection timer
|
|
121
|
+
*/
|
|
122
|
+
private clearReconnectTimer;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=mexc-websocket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mexc-websocket.d.ts","sourceRoot":"","sources":["../../../src/exchanges/mexc/mexc-websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAgJ,MAAM,aAAa,CAAC;AAO7N;;;;GAIG;AAEH,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAC,CAAY;IACvB,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,oBAAoB,CAAK;IACjC,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,aAAa,CAAQ;gBAEjB,KAAK,GAAE,MAAoC;IAIvD;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBvC;;OAEG;IACH,OAAO,CAAC,MAAM;IAOd;;OAEG;IACH,OAAO,CAAC,OAAO;IAUf;;OAEG;IACH,OAAO,CAAC,OAAO;IASf;;OAEG;IACH,OAAO,CAAC,SAAS;IA0BjB;;OAEG;IACH,OAAO,CAAC,6BAA6B;IAyBrC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAsBhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,cAAc;IA+BtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoCtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAmCzB;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa1C;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB1F;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBxF;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnG;;OAEG;IACG,eAAe,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAaxE;;OAEG;IACG,mBAAmB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB5E;;OAEG;YACW,SAAS;IAavB;;OAEG;IACG,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAezB;;OAEG;YACW,SAAS;IAavB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAM5B"}
|