@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.
Files changed (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/cli/cli.d.ts +3 -0
  4. package/dist/cli/cli.d.ts.map +1 -0
  5. package/dist/cli/cli.js +43 -0
  6. package/dist/cli/cli.js.map +1 -0
  7. package/dist/cli/commands/balance.d.ts +3 -0
  8. package/dist/cli/commands/balance.d.ts.map +1 -0
  9. package/dist/cli/commands/balance.js +51 -0
  10. package/dist/cli/commands/balance.js.map +1 -0
  11. package/dist/cli/commands/orderbook.d.ts +3 -0
  12. package/dist/cli/commands/orderbook.d.ts.map +1 -0
  13. package/dist/cli/commands/orderbook.js +83 -0
  14. package/dist/cli/commands/orderbook.js.map +1 -0
  15. package/dist/cli/commands/orders.d.ts +3 -0
  16. package/dist/cli/commands/orders.d.ts.map +1 -0
  17. package/dist/cli/commands/orders.js +196 -0
  18. package/dist/cli/commands/orders.js.map +1 -0
  19. package/dist/cli/commands/pool-discovery.d.ts +3 -0
  20. package/dist/cli/commands/pool-discovery.d.ts.map +1 -0
  21. package/dist/cli/commands/pool-discovery.js +60 -0
  22. package/dist/cli/commands/pool-discovery.js.map +1 -0
  23. package/dist/cli/commands/ticker.d.ts +3 -0
  24. package/dist/cli/commands/ticker.d.ts.map +1 -0
  25. package/dist/cli/commands/ticker.js +51 -0
  26. package/dist/cli/commands/ticker.js.map +1 -0
  27. package/dist/cli/commands/trade.d.ts +3 -0
  28. package/dist/cli/commands/trade.d.ts.map +1 -0
  29. package/dist/cli/commands/trade.js +110 -0
  30. package/dist/cli/commands/trade.js.map +1 -0
  31. package/dist/cli/commands/trades.d.ts +3 -0
  32. package/dist/cli/commands/trades.d.ts.map +1 -0
  33. package/dist/cli/commands/trades.js +73 -0
  34. package/dist/cli/commands/trades.js.map +1 -0
  35. package/dist/cli/exchange-factory.d.ts +40 -0
  36. package/dist/cli/exchange-factory.d.ts.map +1 -0
  37. package/dist/cli/exchange-factory.js +77 -0
  38. package/dist/cli/exchange-factory.js.map +1 -0
  39. package/dist/cli/pool-discovery-core.d.ts +54 -0
  40. package/dist/cli/pool-discovery-core.d.ts.map +1 -0
  41. package/dist/cli/pool-discovery-core.js +193 -0
  42. package/dist/cli/pool-discovery-core.js.map +1 -0
  43. package/dist/cli/utils/error-handler.d.ts +40 -0
  44. package/dist/cli/utils/error-handler.d.ts.map +1 -0
  45. package/dist/cli/utils/error-handler.js +117 -0
  46. package/dist/cli/utils/error-handler.js.map +1 -0
  47. package/dist/cli/utils/validation.d.ts +45 -0
  48. package/dist/cli/utils/validation.d.ts.map +1 -0
  49. package/dist/cli/utils/validation.js +118 -0
  50. package/dist/cli/utils/validation.js.map +1 -0
  51. package/dist/config/environment.d.ts +25 -0
  52. package/dist/config/environment.d.ts.map +1 -0
  53. package/dist/config/environment.js +72 -0
  54. package/dist/config/environment.js.map +1 -0
  55. package/dist/config/index.d.ts +3 -0
  56. package/dist/config/index.d.ts.map +1 -0
  57. package/dist/config/index.js +21 -0
  58. package/dist/config/index.js.map +1 -0
  59. package/dist/config/launcher-config.d.ts +17 -0
  60. package/dist/config/launcher-config.d.ts.map +1 -0
  61. package/dist/config/launcher-config.js +14 -0
  62. package/dist/config/launcher-config.js.map +1 -0
  63. package/dist/config/price-aggregation.d.ts +49 -0
  64. package/dist/config/price-aggregation.d.ts.map +1 -0
  65. package/dist/config/price-aggregation.js +89 -0
  66. package/dist/config/price-aggregation.js.map +1 -0
  67. package/dist/core/exchange/base-exchange-connector.d.ts +45 -0
  68. package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -0
  69. package/dist/core/exchange/base-exchange-connector.js +43 -0
  70. package/dist/core/exchange/base-exchange-connector.js.map +1 -0
  71. package/dist/core/exchange/base-exchange-data-mapper.d.ts +58 -0
  72. package/dist/core/exchange/base-exchange-data-mapper.d.ts.map +1 -0
  73. package/dist/core/exchange/base-exchange-data-mapper.js +60 -0
  74. package/dist/core/exchange/base-exchange-data-mapper.js.map +1 -0
  75. package/dist/core/price-aggregation/cardano-price-service.d.ts +31 -0
  76. package/dist/core/price-aggregation/cardano-price-service.d.ts.map +1 -0
  77. package/dist/core/price-aggregation/cardano-price-service.js +157 -0
  78. package/dist/core/price-aggregation/cardano-price-service.js.map +1 -0
  79. package/dist/core/price-aggregation/index.d.ts +11 -0
  80. package/dist/core/price-aggregation/index.d.ts.map +1 -0
  81. package/dist/core/price-aggregation/index.js +21 -0
  82. package/dist/core/price-aggregation/index.js.map +1 -0
  83. package/dist/core/price-aggregation/iris-api-client.d.ts +16 -0
  84. package/dist/core/price-aggregation/iris-api-client.d.ts.map +1 -0
  85. package/dist/core/price-aggregation/iris-api-client.js +62 -0
  86. package/dist/core/price-aggregation/iris-api-client.js.map +1 -0
  87. package/dist/core/price-aggregation/iris-pool-discovery.d.ts +37 -0
  88. package/dist/core/price-aggregation/iris-pool-discovery.d.ts.map +1 -0
  89. package/dist/core/price-aggregation/iris-pool-discovery.js +123 -0
  90. package/dist/core/price-aggregation/iris-pool-discovery.js.map +1 -0
  91. package/dist/core/price-aggregation/price-calculator.d.ts +27 -0
  92. package/dist/core/price-aggregation/price-calculator.d.ts.map +1 -0
  93. package/dist/core/price-aggregation/price-calculator.js +84 -0
  94. package/dist/core/price-aggregation/price-calculator.js.map +1 -0
  95. package/dist/core/risk-management/risk-manager.d.ts +14 -0
  96. package/dist/core/risk-management/risk-manager.d.ts.map +1 -0
  97. package/dist/core/risk-management/risk-manager.js +40 -0
  98. package/dist/core/risk-management/risk-manager.js.map +1 -0
  99. package/dist/core/strategy/base-strategy.d.ts +26 -0
  100. package/dist/core/strategy/base-strategy.d.ts.map +1 -0
  101. package/dist/core/strategy/base-strategy.js +46 -0
  102. package/dist/core/strategy/base-strategy.js.map +1 -0
  103. package/dist/core/strategy/strategy-factory.d.ts +7 -0
  104. package/dist/core/strategy/strategy-factory.d.ts.map +1 -0
  105. package/dist/core/strategy/strategy-factory.js +64 -0
  106. package/dist/core/strategy/strategy-factory.js.map +1 -0
  107. package/dist/exchanges/mexc/mexc-auth.d.ts +42 -0
  108. package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -0
  109. package/dist/exchanges/mexc/mexc-auth.js +122 -0
  110. package/dist/exchanges/mexc/mexc-auth.js.map +1 -0
  111. package/dist/exchanges/mexc/mexc-connector.d.ts +125 -0
  112. package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -0
  113. package/dist/exchanges/mexc/mexc-connector.js +422 -0
  114. package/dist/exchanges/mexc/mexc-connector.js.map +1 -0
  115. package/dist/exchanges/mexc/mexc-data-mapper.d.ts +50 -0
  116. package/dist/exchanges/mexc/mexc-data-mapper.d.ts.map +1 -0
  117. package/dist/exchanges/mexc/mexc-data-mapper.js +127 -0
  118. package/dist/exchanges/mexc/mexc-data-mapper.js.map +1 -0
  119. package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts +43 -0
  120. package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts.map +1 -0
  121. package/dist/exchanges/mexc/mexc-protobuf-decoder.js +235 -0
  122. package/dist/exchanges/mexc/mexc-protobuf-decoder.js.map +1 -0
  123. package/dist/exchanges/mexc/mexc-user-stream.d.ts +81 -0
  124. package/dist/exchanges/mexc/mexc-user-stream.d.ts.map +1 -0
  125. package/dist/exchanges/mexc/mexc-user-stream.js +253 -0
  126. package/dist/exchanges/mexc/mexc-user-stream.js.map +1 -0
  127. package/dist/exchanges/mexc/mexc-utils.d.ts +31 -0
  128. package/dist/exchanges/mexc/mexc-utils.d.ts.map +1 -0
  129. package/dist/exchanges/mexc/mexc-utils.js +186 -0
  130. package/dist/exchanges/mexc/mexc-utils.js.map +1 -0
  131. package/dist/exchanges/mexc/mexc-websocket.d.ts +124 -0
  132. package/dist/exchanges/mexc/mexc-websocket.d.ts.map +1 -0
  133. package/dist/exchanges/mexc/mexc-websocket.js +496 -0
  134. package/dist/exchanges/mexc/mexc-websocket.js.map +1 -0
  135. package/dist/index.d.ts +12 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +42 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/strategies/grid/grid-calculator.d.ts +7 -0
  140. package/dist/strategies/grid/grid-calculator.d.ts.map +1 -0
  141. package/dist/strategies/grid/grid-calculator.js +34 -0
  142. package/dist/strategies/grid/grid-calculator.js.map +1 -0
  143. package/dist/strategies/grid/grid-order-manager.d.ts +23 -0
  144. package/dist/strategies/grid/grid-order-manager.d.ts.map +1 -0
  145. package/dist/strategies/grid/grid-order-manager.js +99 -0
  146. package/dist/strategies/grid/grid-order-manager.js.map +1 -0
  147. package/dist/strategies/grid/grid-strategy.d.ts +29 -0
  148. package/dist/strategies/grid/grid-strategy.d.ts.map +1 -0
  149. package/dist/strategies/grid/grid-strategy.js +185 -0
  150. package/dist/strategies/grid/grid-strategy.js.map +1 -0
  151. package/dist/types/account.d.ts +21 -0
  152. package/dist/types/account.d.ts.map +1 -0
  153. package/dist/types/account.js +3 -0
  154. package/dist/types/account.js.map +1 -0
  155. package/dist/types/exchange.d.ts +67 -0
  156. package/dist/types/exchange.d.ts.map +1 -0
  157. package/dist/types/exchange.js +3 -0
  158. package/dist/types/exchange.js.map +1 -0
  159. package/dist/types/grid.d.ts +10 -0
  160. package/dist/types/grid.d.ts.map +1 -0
  161. package/dist/types/grid.js +3 -0
  162. package/dist/types/grid.js.map +1 -0
  163. package/dist/types/index.d.ts +11 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +27 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/dist/types/iris.d.ts +58 -0
  168. package/dist/types/iris.d.ts.map +1 -0
  169. package/dist/types/iris.js +7 -0
  170. package/dist/types/iris.js.map +1 -0
  171. package/dist/types/market.d.ts +16 -0
  172. package/dist/types/market.d.ts.map +1 -0
  173. package/dist/types/market.js +3 -0
  174. package/dist/types/market.js.map +1 -0
  175. package/dist/types/mexc-raw.d.ts +87 -0
  176. package/dist/types/mexc-raw.d.ts.map +1 -0
  177. package/dist/types/mexc-raw.js +7 -0
  178. package/dist/types/mexc-raw.js.map +1 -0
  179. package/dist/types/mexc.d.ts +57 -0
  180. package/dist/types/mexc.d.ts.map +1 -0
  181. package/dist/types/mexc.js +8 -0
  182. package/dist/types/mexc.js.map +1 -0
  183. package/dist/types/price.d.ts +37 -0
  184. package/dist/types/price.d.ts.map +1 -0
  185. package/dist/types/price.js +7 -0
  186. package/dist/types/price.js.map +1 -0
  187. package/dist/types/risk.d.ts +22 -0
  188. package/dist/types/risk.d.ts.map +1 -0
  189. package/dist/types/risk.js +6 -0
  190. package/dist/types/risk.js.map +1 -0
  191. package/dist/types/strategy.d.ts +46 -0
  192. package/dist/types/strategy.d.ts.map +1 -0
  193. package/dist/types/strategy.js +3 -0
  194. package/dist/types/strategy.js.map +1 -0
  195. package/dist/utils/index.d.ts +2 -0
  196. package/dist/utils/index.d.ts.map +1 -0
  197. package/dist/utils/index.js +8 -0
  198. package/dist/utils/index.js.map +1 -0
  199. package/dist/utils/logger.d.ts +29 -0
  200. package/dist/utils/logger.d.ts.map +1 -0
  201. package/dist/utils/logger.js +108 -0
  202. package/dist/utils/logger.js.map +1 -0
  203. package/dist/utils/symbol-utils.d.ts +17 -0
  204. package/dist/utils/symbol-utils.d.ts.map +1 -0
  205. package/dist/utils/symbol-utils.js +41 -0
  206. package/dist/utils/symbol-utils.js.map +1 -0
  207. package/package.json +53 -0
@@ -0,0 +1,496 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MexcWebSocket = void 0;
7
+ const ws_1 = __importDefault(require("ws"));
8
+ const mexc_protobuf_decoder_1 = require("./mexc-protobuf-decoder");
9
+ const mexc_utils_1 = require("./mexc-utils");
10
+ const mexc_data_mapper_1 = require("./mexc-data-mapper");
11
+ const utils_1 = require("../../utils");
12
+ const symbol_utils_1 = require("../../utils/symbol-utils");
13
+ /**
14
+ * MEXC WebSocket
15
+ *
16
+ * Provides real-time market data streaming and user order updates
17
+ */
18
+ class MexcWebSocket {
19
+ constructor(wsUrl = 'wss://wbs-api.mexc.com/ws') {
20
+ this.subscriptions = new Map();
21
+ this.status = 'disconnected';
22
+ this.logger = (0, utils_1.createLogger)('mexc-websocket');
23
+ this.reconnectAttempts = 0;
24
+ this.maxReconnectAttempts = 5;
25
+ this.reconnectDelay = 5000;
26
+ this.autoReconnect = true;
27
+ this.wsUrl = wsUrl;
28
+ }
29
+ /**
30
+ * Connect to MEXC WebSocket
31
+ */
32
+ async connectWebSocket() {
33
+ return new Promise((resolve, reject) => {
34
+ try {
35
+ this.autoReconnect = true;
36
+ this.ws = new ws_1.default(this.wsUrl);
37
+ this.status = 'connecting';
38
+ this.ws.on('open', () => this.onOpen(resolve));
39
+ this.ws.on('message', (data) => {
40
+ this.onMessage(data);
41
+ });
42
+ this.ws.on('close', () => this.onClose());
43
+ this.ws.on('error', (error) => this.onError(error, reject));
44
+ }
45
+ catch (error) {
46
+ this.status = 'error';
47
+ reject(error);
48
+ }
49
+ });
50
+ }
51
+ /**
52
+ * WebSocket open event handler
53
+ */
54
+ onOpen(resolve) {
55
+ this.status = 'connected';
56
+ this.reconnectAttempts = 0;
57
+ this.logger.info('✅ WebSocket connected successfully');
58
+ resolve();
59
+ }
60
+ /**
61
+ * WebSocket close event handler
62
+ */
63
+ onClose() {
64
+ this.status = 'disconnected';
65
+ if (this.autoReconnect && this.reconnectAttempts < this.maxReconnectAttempts) {
66
+ this.scheduleReconnect();
67
+ }
68
+ else if (this.reconnectAttempts >= this.maxReconnectAttempts) {
69
+ this.logger.error('❌ Max reconnection attempts reached, giving up');
70
+ }
71
+ }
72
+ /**
73
+ * WebSocket error event handler
74
+ */
75
+ onError(error, reject) {
76
+ this.status = 'error';
77
+ this.logger.error('❌ WebSocket error:', { error: error.message });
78
+ if (this.reconnectAttempts === 0 && reject) {
79
+ reject(error);
80
+ }
81
+ }
82
+ /**
83
+ * Message handler
84
+ */
85
+ onMessage(data) {
86
+ try {
87
+ const message = data.toString();
88
+ if (message.includes('spot@')) {
89
+ if (message.includes('spot@private.orders.v3.api.pb')) {
90
+ this.handleProtobufUserDataMessage(message);
91
+ }
92
+ else {
93
+ const decoded = mexc_protobuf_decoder_1.MexcProtobufDecoder.decode(message);
94
+ if (decoded.error) {
95
+ this.logger.warn('Protobuf decode error:', { error: decoded.error });
96
+ return;
97
+ }
98
+ this.processDecodedMessage(decoded);
99
+ }
100
+ }
101
+ else {
102
+ this.handleUserDataMessage(message);
103
+ }
104
+ }
105
+ catch (error) {
106
+ this.logger.error('Message handling error:', { error });
107
+ }
108
+ }
109
+ /**
110
+ * Handle protobuf user data stream messages
111
+ */
112
+ handleProtobufUserDataMessage(message) {
113
+ try {
114
+ const decoded = mexc_protobuf_decoder_1.MexcProtobufDecoder.decode(message);
115
+ if (decoded.error) {
116
+ this.logger.warn('Protobuf user data decode error:', { error: decoded.error });
117
+ return;
118
+ }
119
+ if (decoded.type === 'order' && decoded.decoded) {
120
+ const order = mexc_utils_1.MexcUtils.transformOrder(decoded.decoded);
121
+ this.subscriptions.forEach((subscription) => {
122
+ if (subscription.type === 'user_data') {
123
+ subscription.callback(order);
124
+ }
125
+ });
126
+ }
127
+ else {
128
+ this.logger.info('📨 Non-order protobuf user data:', { type: decoded.type });
129
+ }
130
+ }
131
+ catch (error) {
132
+ this.logger.error('Error handling protobuf user data message:', { error, message: message.substring(0, 100) });
133
+ }
134
+ }
135
+ /**
136
+ * Handle user data stream messages
137
+ */
138
+ handleUserDataMessage(message) {
139
+ try {
140
+ const data = JSON.parse(message);
141
+ if (data.e === 'executionReport') {
142
+ const order = this.transformUserOrderUpdate(data);
143
+ this.logger.info('📦 Order update received:', { orderId: order.id, status: order.status, symbol: order.symbol });
144
+ this.subscriptions.forEach((subscription) => {
145
+ if (subscription.type === 'user_data') {
146
+ subscription.callback(order);
147
+ }
148
+ });
149
+ }
150
+ else {
151
+ this.logger.info('📨 Non-execution report message:', { eventType: data.e, data });
152
+ }
153
+ }
154
+ catch (error) {
155
+ this.logger.error('Error handling user data message:', { error, message: message.substring(0, 100) });
156
+ }
157
+ }
158
+ /**
159
+ * Transform MEXC user data order update to Order format
160
+ */
161
+ transformUserOrderUpdate(data) {
162
+ return {
163
+ id: data.i?.toString() || data.orderId?.toString() || Date.now().toString(),
164
+ symbol: (() => {
165
+ const mexcSymbol = data.s || data.symbol || '';
166
+ try {
167
+ return (0, symbol_utils_1.toStandardFormat)(mexcSymbol);
168
+ }
169
+ catch {
170
+ return mexcSymbol;
171
+ }
172
+ })(),
173
+ type: (data.o?.toLowerCase() || 'limit'),
174
+ side: (data.S?.toLowerCase() || 'buy'),
175
+ amount: parseFloat(data.q || data.origQty || '0'),
176
+ price: parseFloat(data.p || data.price || '0'),
177
+ filled: parseFloat(data.z || data.executedQty || '0'),
178
+ remaining: parseFloat(data.q || '0') - parseFloat(data.z || '0'),
179
+ status: mexc_data_mapper_1.MexcDataMapper.mapToOrderStatus(data.X || data.orderStatus || 'NEW'),
180
+ timestamp: parseInt(data.T || data.transactTime) || Date.now()
181
+ };
182
+ }
183
+ /**
184
+ * Process decoded message directly based on type
185
+ */
186
+ processDecodedMessage(decoded) {
187
+ switch (decoded.type) {
188
+ case 'order':
189
+ this.onOrderUpdate(decoded);
190
+ break;
191
+ case 'ticker':
192
+ this.onTickerUpdate(decoded);
193
+ this.onOrderBookUpdate(decoded);
194
+ break;
195
+ case 'trades':
196
+ this.onTradesUpdate(decoded);
197
+ break;
198
+ default:
199
+ this.logger.debug(`Unhandled message type: ${decoded.type}`);
200
+ }
201
+ }
202
+ /**
203
+ * Handle order updates directly from protobuf
204
+ */
205
+ onOrderUpdate(decoded) {
206
+ if (!decoded.decoded || !decoded.symbol || decoded.type !== 'order')
207
+ return;
208
+ try {
209
+ const order = mexc_utils_1.MexcUtils.transformOrder(decoded.decoded);
210
+ this.subscriptions.forEach((subscription) => {
211
+ if (subscription.type === 'user_data') {
212
+ subscription.callback(order);
213
+ }
214
+ });
215
+ }
216
+ catch (error) {
217
+ this.logger.error('Error processing order update:', { error });
218
+ }
219
+ }
220
+ /**
221
+ * Handle ticker updates directly from protobuf
222
+ */
223
+ onTickerUpdate(decoded) {
224
+ if (!decoded.decoded || !decoded.symbol || decoded.type !== 'ticker')
225
+ return;
226
+ try {
227
+ const tickerData = decoded.decoded;
228
+ const ticker = {
229
+ symbol: (() => {
230
+ try {
231
+ return (0, symbol_utils_1.toStandardFormat)(decoded.symbol);
232
+ }
233
+ catch {
234
+ return decoded.symbol;
235
+ }
236
+ })(),
237
+ last: parseFloat(tickerData.askprice || '0'),
238
+ bid: parseFloat(tickerData.bidprice || '0'),
239
+ ask: parseFloat(tickerData.askprice || '0'),
240
+ baseVolume: parseFloat(tickerData.bidquantity || '0') + parseFloat(tickerData.askquantity || '0'),
241
+ timestamp: Date.now()
242
+ };
243
+ this.subscriptions.forEach((subscription) => {
244
+ if (subscription.type === 'ticker') {
245
+ subscription.callback(ticker);
246
+ }
247
+ });
248
+ }
249
+ catch (error) {
250
+ this.logger.error('Error processing ticker update:', { error });
251
+ }
252
+ }
253
+ /**
254
+ * Handle trades updates directly from protobuf
255
+ */
256
+ onTradesUpdate(decoded) {
257
+ if (!decoded.decoded || !decoded.symbol || decoded.type !== 'trades')
258
+ return;
259
+ try {
260
+ const tradesData = decoded.decoded;
261
+ if (tradesData.dealsList && Array.isArray(tradesData.dealsList)) {
262
+ tradesData.dealsList.forEach((deal) => {
263
+ const trade = {
264
+ id: `${Date.now()}_${Math.random()}`,
265
+ symbol: (() => {
266
+ try {
267
+ return (0, symbol_utils_1.toStandardFormat)(decoded.symbol);
268
+ }
269
+ catch {
270
+ return decoded.symbol;
271
+ }
272
+ })(),
273
+ side: deal.tradetype === 1 ? 'buy' : 'sell',
274
+ amount: parseFloat(deal.quantity || '0'),
275
+ price: parseFloat(deal.price || '0'),
276
+ timestamp: parseInt(deal.time) || Date.now()
277
+ };
278
+ this.subscriptions.forEach((subscription) => {
279
+ if (subscription.type === 'trades') {
280
+ subscription.callback(trade);
281
+ }
282
+ });
283
+ });
284
+ }
285
+ }
286
+ catch (error) {
287
+ this.logger.error('Error processing trades update:', { error });
288
+ }
289
+ }
290
+ /**
291
+ * Handle order book updates directly from protobuf
292
+ */
293
+ onOrderBookUpdate(decoded) {
294
+ if (!decoded.decoded || !decoded.symbol || decoded.type !== 'ticker')
295
+ return;
296
+ try {
297
+ const tickerData = decoded.decoded;
298
+ const orderBook = {
299
+ symbol: (() => {
300
+ try {
301
+ return (0, symbol_utils_1.toStandardFormat)(decoded.symbol);
302
+ }
303
+ catch {
304
+ return decoded.symbol;
305
+ }
306
+ })(),
307
+ bids: [{
308
+ price: parseFloat(tickerData.bidprice || '0'),
309
+ amount: parseFloat(tickerData.bidquantity || '0')
310
+ }],
311
+ asks: [{
312
+ price: parseFloat(tickerData.askprice || '0'),
313
+ amount: parseFloat(tickerData.askquantity || '0')
314
+ }],
315
+ timestamp: Date.now()
316
+ };
317
+ this.subscriptions.forEach((subscription) => {
318
+ if (subscription.type === 'orderbook') {
319
+ subscription.callback(orderBook);
320
+ }
321
+ });
322
+ }
323
+ catch (error) {
324
+ this.logger.error('Error processing orderbook update:', { error });
325
+ }
326
+ }
327
+ /**
328
+ * Disconnect WebSocket
329
+ */
330
+ async disconnectWebSocket() {
331
+ this.autoReconnect = false;
332
+ this.clearReconnectTimer();
333
+ if (this.ws) {
334
+ this.ws.close();
335
+ this.ws = undefined;
336
+ this.status = 'disconnected';
337
+ this.subscriptions.clear();
338
+ }
339
+ this.logger.info('🔌 WebSocket disconnected');
340
+ }
341
+ /**
342
+ * Subscribe to ticker updates
343
+ */
344
+ async subscribeTicker(symbol, callback) {
345
+ const mexcSymbol = (0, symbol_utils_1.toExchangeFormat)(symbol);
346
+ const channel = `spot@public.aggre.bookTicker.v3.api.pb@100ms@${mexcSymbol}`;
347
+ const subscriptionId = `ticker_${mexcSymbol}_${Date.now()}`;
348
+ this.subscriptions.set(subscriptionId, {
349
+ callback,
350
+ type: 'ticker'
351
+ });
352
+ await this.subscribe([channel]);
353
+ this.logger.info(`Subscribed to ticker: ${symbol} (${channel})`);
354
+ return subscriptionId;
355
+ }
356
+ /**
357
+ * Subscribe to trades updates
358
+ */
359
+ async subscribeTrades(symbol, callback) {
360
+ const mexcSymbol = (0, symbol_utils_1.toExchangeFormat)(symbol);
361
+ const channel = `spot@public.aggre.deals.v3.api.pb@100ms@${mexcSymbol}`;
362
+ const subscriptionId = `trades_${mexcSymbol}_${Date.now()}`;
363
+ this.subscriptions.set(subscriptionId, {
364
+ callback,
365
+ type: 'trades'
366
+ });
367
+ await this.subscribe([channel]);
368
+ this.logger.info(`Subscribed to trades: ${symbol} (${channel})`);
369
+ return subscriptionId;
370
+ }
371
+ /**
372
+ * Subscribe to order book updates
373
+ */
374
+ async subscribeOrderBook(symbol, callback) {
375
+ const mexcSymbol = (0, symbol_utils_1.toExchangeFormat)(symbol);
376
+ const channel = `spot@public.bookTicker.batch.v3.api.pb@${mexcSymbol}`;
377
+ const subscriptionId = `orderbook_${mexcSymbol}_${Date.now()}`;
378
+ this.subscriptions.set(subscriptionId, {
379
+ callback,
380
+ type: 'orderbook'
381
+ });
382
+ await this.subscribe([channel]);
383
+ this.logger.info(`Subscribed to orderbook: ${symbol} (${channel})`);
384
+ return subscriptionId;
385
+ }
386
+ /**
387
+ * Subscribe to user orders
388
+ */
389
+ async subscribeOrders(callback) {
390
+ const subscriptionId = `orders_${Date.now()}`;
391
+ this.subscriptions.set(subscriptionId, {
392
+ callback,
393
+ type: 'user_data'
394
+ });
395
+ this.logger.info('Subscribed to user orders (orders stream)');
396
+ return subscriptionId;
397
+ }
398
+ /**
399
+ * Subscribe to user data
400
+ */
401
+ async subscribeToUserData(callback) {
402
+ const subscriptionId = `user_data_${Date.now()}`;
403
+ this.subscriptions.set(subscriptionId, {
404
+ callback,
405
+ type: 'user_data'
406
+ });
407
+ try {
408
+ const userDataChannels = [
409
+ 'spot@private.orders.v3.api.pb'
410
+ ];
411
+ await this.subscribe(userDataChannels);
412
+ }
413
+ catch (error) {
414
+ this.logger.error('Failed to subscribe to protobuf user data channels:', { error });
415
+ }
416
+ return subscriptionId;
417
+ }
418
+ /**
419
+ * Send subscription message to MEXC
420
+ */
421
+ async subscribe(channels) {
422
+ if (!this.isConnected()) {
423
+ throw new Error('WebSocket not connected');
424
+ }
425
+ const message = {
426
+ method: 'SUBSCRIPTION',
427
+ params: channels
428
+ };
429
+ this.ws?.send(JSON.stringify(message));
430
+ }
431
+ /**
432
+ * Unsubscribe from a subscription
433
+ */
434
+ async unsubscribe(subscriptionId) {
435
+ const subscription = this.subscriptions.get(subscriptionId);
436
+ if (!subscription) {
437
+ this.logger.warn(`Subscription ${subscriptionId} not found`);
438
+ return;
439
+ }
440
+ this.subscriptions.delete(subscriptionId);
441
+ this.logger.info(`Unsubscribed: ${subscriptionId}`);
442
+ }
443
+ /**
444
+ * Check if WebSocket is connected
445
+ */
446
+ isConnected() {
447
+ return this.status === 'connected' && this.ws?.readyState === ws_1.default.OPEN;
448
+ }
449
+ /**
450
+ * Get WebSocket status
451
+ */
452
+ getWebSocketStatus() {
453
+ return this.status;
454
+ }
455
+ /**
456
+ * Schedule reconnection attempt
457
+ */
458
+ scheduleReconnect() {
459
+ if (this.reconnectTimer) {
460
+ clearTimeout(this.reconnectTimer);
461
+ }
462
+ this.reconnectAttempts++;
463
+ const delay = this.reconnectDelay * Math.pow(2, this.reconnectAttempts - 1);
464
+ this.reconnectTimer = setTimeout(() => {
465
+ this.reconnect().catch(error => {
466
+ this.logger.error('❌ Reconnection attempt failed:', { error });
467
+ });
468
+ }, delay);
469
+ }
470
+ /**
471
+ * Attempt to reconnect
472
+ */
473
+ async reconnect() {
474
+ try {
475
+ await this.connectWebSocket();
476
+ this.logger.info('✅ Reconnected successfully');
477
+ }
478
+ catch (error) {
479
+ this.logger.error('❌ Reconnection failed:', { error: error instanceof Error ? error.message : 'Unknown error' });
480
+ if (this.reconnectAttempts < this.maxReconnectAttempts) {
481
+ this.scheduleReconnect();
482
+ }
483
+ }
484
+ }
485
+ /**
486
+ * Clear reconnection timer
487
+ */
488
+ clearReconnectTimer() {
489
+ if (this.reconnectTimer) {
490
+ clearTimeout(this.reconnectTimer);
491
+ this.reconnectTimer = undefined;
492
+ }
493
+ }
494
+ }
495
+ exports.MexcWebSocket = MexcWebSocket;
496
+ //# sourceMappingURL=mexc-websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexc-websocket.js","sourceRoot":"","sources":["../../../src/exchanges/mexc/mexc-websocket.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export * from './types';
2
+ export { BaseExchangeConnector } from './core/exchange/base-exchange-connector';
3
+ export { BaseStrategy } from './core/strategy/base-strategy';
4
+ export { MexcConnector } from './exchanges/mexc/mexc-connector';
5
+ export declare class OpenMM {
6
+ private logger;
7
+ constructor();
8
+ start(): void;
9
+ stop(): void;
10
+ }
11
+ export default OpenMM;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAIhE,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAA+C;;IAMtD,KAAK,IAAI,IAAI;IAIb,IAAI,IAAI,IAAI;CAGpB;AAED,eAAe,MAAM,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,42 @@
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
+ exports.OpenMM = exports.MexcConnector = exports.BaseStrategy = exports.BaseExchangeConnector = void 0;
18
+ __exportStar(require("./types"), exports);
19
+ // Core components
20
+ var base_exchange_connector_1 = require("./core/exchange/base-exchange-connector");
21
+ Object.defineProperty(exports, "BaseExchangeConnector", { enumerable: true, get: function () { return base_exchange_connector_1.BaseExchangeConnector; } });
22
+ var base_strategy_1 = require("./core/strategy/base-strategy");
23
+ Object.defineProperty(exports, "BaseStrategy", { enumerable: true, get: function () { return base_strategy_1.BaseStrategy; } });
24
+ // Exchange connectors
25
+ var mexc_connector_1 = require("./exchanges/mexc/mexc-connector");
26
+ Object.defineProperty(exports, "MexcConnector", { enumerable: true, get: function () { return mexc_connector_1.MexcConnector; } });
27
+ const utils_1 = require("./utils");
28
+ class OpenMM {
29
+ constructor() {
30
+ this.logger = (0, utils_1.createLogger)('openmm', './logs/openmm.log');
31
+ this.logger.info('OpenMM Universal Market Making Toolkit initialized');
32
+ }
33
+ start() {
34
+ this.logger.info('Starting OpenMM Market Making Toolkit');
35
+ }
36
+ stop() {
37
+ this.logger.info('Stopping OpenMM Market Making Toolkit');
38
+ }
39
+ }
40
+ exports.OpenMM = OpenMM;
41
+ exports.default = OpenMM;
42
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AAExB,kBAAkB;AAClB,mFAAgF;AAAvE,gIAAA,qBAAqB,OAAA;AAC9B,+DAA6D;AAApD,6GAAA,YAAY,OAAA;AAErB,sBAAsB;AACtB,kEAAgE;AAAvD,+GAAA,aAAa,OAAA;AAEtB,mCAAuC;AAEvC,MAAa,MAAM;IAGjB;QAFQ,WAAM,GAAG,IAAA,oBAAY,EAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAG3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACzE,CAAC;IAEM,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC5D,CAAC;IAEM,IAAI;QACT,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IAC5D,CAAC;CACF;AAdD,wBAcC;AAED,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { GridLevel } from '../../types';
2
+ export declare class GridCalculator {
3
+ calculateGridLevels(centerPrice: number, spacing: number, levels: number): GridLevel[];
4
+ calculateOrderSizes(availableBalance: number, levels: number): number;
5
+ assignOrderSizes(gridLevels: GridLevel[], orderSize: number): GridLevel[];
6
+ }
7
+ //# sourceMappingURL=grid-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-calculator.d.ts","sourceRoot":"","sources":["../../../src/strategies/grid/grid-calculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,cAAc;IACzB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE;IAuBtF,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAIrE,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE;CAM1E"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GridCalculator = void 0;
4
+ class GridCalculator {
5
+ calculateGridLevels(centerPrice, spacing, levels) {
6
+ const gridLevels = [];
7
+ for (let i = 1; i <= levels; i++) {
8
+ const buyPrice = centerPrice * (1 - spacing * i);
9
+ const sellPrice = centerPrice * (1 + spacing * i);
10
+ gridLevels.push({
11
+ price: buyPrice,
12
+ side: 'buy',
13
+ orderSize: 0
14
+ });
15
+ gridLevels.push({
16
+ price: sellPrice,
17
+ side: 'sell',
18
+ orderSize: 0
19
+ });
20
+ }
21
+ return gridLevels;
22
+ }
23
+ calculateOrderSizes(availableBalance, levels) {
24
+ return (availableBalance * 0.8) / (levels * 2);
25
+ }
26
+ assignOrderSizes(gridLevels, orderSize) {
27
+ return gridLevels.map(level => ({
28
+ ...level,
29
+ orderSize
30
+ }));
31
+ }
32
+ }
33
+ exports.GridCalculator = GridCalculator;
34
+ //# sourceMappingURL=grid-calculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-calculator.js","sourceRoot":"","sources":["../../../src/strategies/grid/grid-calculator.ts"],"names":[],"mappings":";;;AAEA,MAAa,cAAc;IACzB,mBAAmB,CAAC,WAAmB,EAAE,OAAe,EAAE,MAAc;QACtE,MAAM,UAAU,GAAgB,EAAE,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;YAElD,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE,CAAC;aACb,CAAC,CAAC;YAEH,UAAU,CAAC,IAAI,CAAC;gBACd,KAAK,EAAE,SAAS;gBAChB,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,CAAC;aACb,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,mBAAmB,CAAC,gBAAwB,EAAE,MAAc;QAC1D,OAAO,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,gBAAgB,CAAC,UAAuB,EAAE,SAAiB;QACzD,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC9B,GAAG,KAAK;YACR,SAAS;SACV,CAAC,CAAC,CAAC;IACN,CAAC;CACF;AAlCD,wCAkCC"}
@@ -0,0 +1,23 @@
1
+ import { Order, OrderSide, GridLevel, GridOrderManagerConfig } from '../../types';
2
+ export declare class GridOrderManager {
3
+ private gridCalculator;
4
+ private logger;
5
+ private config;
6
+ private activeOrders;
7
+ private isAdjusting;
8
+ private lastAdjustmentTime;
9
+ private currentGridCenter;
10
+ constructor(config: GridOrderManagerConfig);
11
+ placeInitialGrid(levels: GridLevel[], placeOrderFn: (side: OrderSide, amount: number, price: number) => Promise<Order>): Promise<Order[]>;
12
+ handleOrderFill(filledOrder: Order, currentPrice: number, gridSpacing: number, gridLevels: number, availableBalance: number, placeOrderFn: (side: OrderSide, amount: number, price: number) => Promise<Order>, cancelAllOrdersFn: (symbol: string) => Promise<void>): Promise<void>;
13
+ handlePriceDeviation(newPrice: number, gridSpacing: number, gridLevels: number, availableBalance: number, placeOrderFn: (side: OrderSide, amount: number, price: number) => Promise<Order>, cancelAllOrdersFn: (symbol: string) => Promise<void>, symbol: string): Promise<void>;
14
+ private cancelAllOrders;
15
+ private recreateGridAtPrice;
16
+ getActiveOrders(): Order[];
17
+ /**
18
+ * Check if grid adjustment is currently in progress
19
+ * Used to prevent multiple simultaneous grid recreation events
20
+ */
21
+ isCurrentlyAdjusting(): boolean;
22
+ }
23
+ //# sourceMappingURL=grid-order-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-order-manager.d.ts","sourceRoot":"","sources":["../../../src/strategies/grid/grid-order-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAIlF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,iBAAiB,CAAK;gBAElB,MAAM,EAAE,sBAAsB;IAKpC,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAuBzI,eAAe,CACnB,WAAW,EAAE,KAAK,EAClB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,EAChF,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACnD,OAAO,CAAC,IAAI,CAAC;IAkBV,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,gBAAgB,EAAE,MAAM,EACxB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,EAChF,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACpD,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;YAgBF,eAAe;YAmBf,mBAAmB;IAejC,eAAe,IAAI,KAAK,EAAE;IAK1B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}