@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,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StrategyFactory = void 0;
4
+ const grid_strategy_1 = require("../../strategies/grid/grid-strategy");
5
+ const launcher_config_1 = require("../../config/launcher-config");
6
+ const symbol_utils_1 = require("../../utils/symbol-utils");
7
+ const exchange_factory_1 = require("../../cli/exchange-factory");
8
+ class StrategyFactory {
9
+ static async create(config, params) {
10
+ if (!exchange_factory_1.ExchangeFactory.isSupported(config.exchange)) {
11
+ const supported = exchange_factory_1.ExchangeFactory.getSupportedExchanges().join(', ');
12
+ throw new Error(`Unsupported exchange: ${config.exchange}. Supported: ${supported}`);
13
+ }
14
+ const exchange = await exchange_factory_1.ExchangeFactory.getExchange(config.exchange);
15
+ switch (config.strategy.toLowerCase()) {
16
+ case 'grid':
17
+ return this.createGridStrategy(config, exchange, params);
18
+ default:
19
+ throw new Error(`Unsupported strategy: ${config.strategy}. Supported: grid`);
20
+ }
21
+ }
22
+ static async createGridStrategy(config, exchange, params) {
23
+ const normalizedSymbol = (0, symbol_utils_1.toStandardFormat)(config.symbol);
24
+ const gridParams = { ...launcher_config_1.DEFAULT_GRID_PARAMS, ...params };
25
+ const gridConfig = {
26
+ symbol: normalizedSymbol,
27
+ gridLevels: gridParams.gridLevels,
28
+ gridSpacing: gridParams.gridSpacing,
29
+ orderSize: gridParams.orderSize,
30
+ minConfidence: gridParams.minConfidence,
31
+ priceDeviationThreshold: gridParams.priceDeviationThreshold,
32
+ adjustmentDebounce: gridParams.adjustmentDebounce
33
+ };
34
+ const strategyConfig = {
35
+ id: `${config.strategy}-${normalizedSymbol.replace('/', '')}-${Date.now()}`,
36
+ type: 'grid',
37
+ symbol: normalizedSymbol,
38
+ exchange: config.exchange,
39
+ accountId: 'main',
40
+ enabled: true,
41
+ gridConfig,
42
+ parameters: {
43
+ gridLevels: gridConfig.gridLevels,
44
+ gridSpacing: gridConfig.gridSpacing,
45
+ orderSize: gridConfig.orderSize,
46
+ upperPrice: 999999,
47
+ lowerPrice: 0
48
+ }
49
+ };
50
+ const strategy = new grid_strategy_1.GridStrategy(strategyConfig.id);
51
+ strategy.setExchangeConnector(exchange);
52
+ if (gridParams.maxPositionSize !== undefined || gridParams.safetyReservePercentage !== undefined) {
53
+ strategy.setRiskConfig({
54
+ maxPositionSize: gridParams.maxPositionSize ?? 0.8,
55
+ safetyReservePercentage: gridParams.safetyReservePercentage ?? 0.2,
56
+ minConfidence: gridParams.minConfidence ?? 0.6
57
+ });
58
+ }
59
+ await strategy.initialize(strategyConfig);
60
+ return strategy;
61
+ }
62
+ }
63
+ exports.StrategyFactory = StrategyFactory;
64
+ //# sourceMappingURL=strategy-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategy-factory.js","sourceRoot":"","sources":["../../../src/core/strategy/strategy-factory.ts"],"names":[],"mappings":";;;AAEA,uEAAmE;AAEnE,kEAAuG;AACvG,2DAA4D;AAC5D,iEAAgF;AAEhF,MAAa,eAAe;IAC1B,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,MAAsB,EACtB,MAA2B;QAE3B,IAAI,CAAC,kCAAe,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,kCAAe,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,QAAQ,gBAAgB,SAAS,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,kCAAe,CAAC,WAAW,CAAC,MAAM,CAAC,QAA6B,CAAC,CAAC;QAEzF,QAAQ,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YACtC,KAAK,MAAM;gBACT,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC3D;gBACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,CAAC,QAAQ,mBAAmB,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,kBAAkB,CACrC,MAAsB,EACtB,QAA+B,EAC/B,MAA2B;QAE3B,MAAM,gBAAgB,GAAG,IAAA,+BAAgB,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,EAAE,GAAG,qCAAmB,EAAE,GAAG,MAAM,EAAE,CAAC;QAEzD,MAAM,UAAU,GAAe;YAC7B,MAAM,EAAE,gBAAgB;YACxB,UAAU,EAAE,UAAU,CAAC,UAAW;YAClC,WAAW,EAAE,UAAU,CAAC,WAAY;YACpC,SAAS,EAAE,UAAU,CAAC,SAAU;YAChC,aAAa,EAAE,UAAU,CAAC,aAAc;YACxC,uBAAuB,EAAE,UAAU,CAAC,uBAAwB;YAC5D,kBAAkB,EAAE,UAAU,CAAC,kBAAmB;SACnD,CAAC;QAEF,MAAM,cAAc,GAAuB;YACzC,EAAE,EAAE,GAAG,MAAM,CAAC,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YAC3E,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,gBAAgB;YACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM;YACjB,OAAO,EAAE,IAAI;YACb,UAAU;YACV,UAAU,EAAE;gBACV,UAAU,EAAE,UAAU,CAAC,UAAU;gBACjC,WAAW,EAAE,UAAU,CAAC,WAAW;gBACnC,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,UAAU,EAAE,MAAM;gBAClB,UAAU,EAAE,CAAC;aACd;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,4BAAY,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACrD,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,UAAU,CAAC,eAAe,KAAK,SAAS,IAAI,UAAU,CAAC,uBAAuB,KAAK,SAAS,EAAE,CAAC;YACjG,QAAQ,CAAC,aAAa,CAAC;gBACrB,eAAe,EAAE,UAAU,CAAC,eAAe,IAAI,GAAG;gBAClD,uBAAuB,EAAE,UAAU,CAAC,uBAAuB,IAAI,GAAG;gBAClE,aAAa,EAAE,UAAU,CAAC,aAAa,IAAI,GAAG;aAC/C,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;QAE1C,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAtED,0CAsEC"}
@@ -0,0 +1,42 @@
1
+ import { ExchangeCredentials } from '../../types';
2
+ /**
3
+ * MEXC Authentication and Request Handler
4
+ *
5
+ * Handles API authentication, request signing, and HTTP requests to MEXC API.
6
+ * Provides both authenticated and public request methods
7
+ */
8
+ export declare class MexcAuth {
9
+ private readonly credentials;
10
+ private readonly baseUrl;
11
+ private logger;
12
+ constructor(credentials: ExchangeCredentials, baseUrl?: string);
13
+ /**
14
+ * Create headers for public endpoints
15
+ */
16
+ createPublicHeaders(): Record<string, string>;
17
+ /**
18
+ * Create headers for private API calls (with authentication)
19
+ */
20
+ private createPrivateHeaders;
21
+ /**
22
+ * Generate HMAC-SHA256 signature for MEXC API
23
+ */
24
+ private generateSignature;
25
+ /**
26
+ * Make authenticated request to MEXC API
27
+ */
28
+ makeRequest(endpoint: string, params?: Record<string, unknown>, method?: 'GET' | 'POST' | 'PUT' | 'DELETE'): Promise<any>;
29
+ /**
30
+ * Handle API response and extract meaningful error messages
31
+ */
32
+ private handleResponse;
33
+ /**
34
+ * Make public request (no authentication required)
35
+ */
36
+ makePublicRequest(endpoint: string, params?: Record<string, unknown>): Promise<any>;
37
+ /**
38
+ * Check if credentials are valid (basic validation)
39
+ */
40
+ validateCredentials(): boolean;
41
+ }
42
+ //# sourceMappingURL=mexc-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexc-auth.d.ts","sourceRoot":"","sources":["../../../src/exchanges/mexc/mexc-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD;;;;;GAKG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,MAAM,CAA6B;gBAE/B,WAAW,EAAE,mBAAmB,EAAE,OAAO,GAAE,MAAsC;IAK7F;;OAEG;IACH,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO7C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACG,WAAW,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACpC,MAAM,GAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAgB,GAClD,OAAO,CAAC,GAAG,CAAC;IA8Bf;;OAEG;YACW,cAAc;IA0B5B;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAgB7F;;OAEG;IACH,mBAAmB,IAAI,OAAO;CAG/B"}
@@ -0,0 +1,122 @@
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.MexcAuth = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const utils_1 = require("../../utils");
9
+ /**
10
+ * MEXC Authentication and Request Handler
11
+ *
12
+ * Handles API authentication, request signing, and HTTP requests to MEXC API.
13
+ * Provides both authenticated and public request methods
14
+ */
15
+ class MexcAuth {
16
+ constructor(credentials, baseUrl = 'https://api.mexc.com/api/v3') {
17
+ this.logger = (0, utils_1.createLogger)('mexc-auth');
18
+ this.credentials = credentials;
19
+ this.baseUrl = baseUrl;
20
+ }
21
+ /**
22
+ * Create headers for public endpoints
23
+ */
24
+ createPublicHeaders() {
25
+ return {
26
+ 'x-mexc-apikey': this.credentials.apiKey,
27
+ 'Content-Type': 'application/json'
28
+ };
29
+ }
30
+ /**
31
+ * Create headers for private API calls (with authentication)
32
+ */
33
+ createPrivateHeaders(timestamp, signature) {
34
+ return {
35
+ 'Content-Type': 'application/json',
36
+ 'x-mexc-apikey': this.credentials.apiKey,
37
+ 'X-MEXC-TIMESTAMP': timestamp.toString(),
38
+ 'X-MEXC-SIGNATURE': signature
39
+ };
40
+ }
41
+ /**
42
+ * Generate HMAC-SHA256 signature for MEXC API
43
+ */
44
+ generateSignature(params) {
45
+ return crypto_1.default.createHmac('sha256', this.credentials.secret).update(params).digest('hex');
46
+ }
47
+ /**
48
+ * Make authenticated request to MEXC API
49
+ */
50
+ async makeRequest(endpoint, params = {}, method = 'GET') {
51
+ const timestamp = Date.now();
52
+ const queryParams = { ...params, timestamp };
53
+ const queryString = Object.entries(queryParams)
54
+ .map(([key, value]) => `${key}=${value}`)
55
+ .join('&');
56
+ const signature = this.generateSignature(queryString);
57
+ const signedQuery = `${queryString}&signature=${signature}`;
58
+ let url;
59
+ let body;
60
+ if (method === 'GET') {
61
+ url = `${this.baseUrl}${endpoint}?${signedQuery}`;
62
+ }
63
+ else {
64
+ url = `${this.baseUrl}${endpoint}`;
65
+ body = signedQuery;
66
+ }
67
+ const response = await fetch(url, {
68
+ method,
69
+ headers: this.createPrivateHeaders(timestamp, signature),
70
+ body: method !== 'GET' ? body : undefined
71
+ });
72
+ return this.handleResponse(response, endpoint);
73
+ }
74
+ /**
75
+ * Handle API response and extract meaningful error messages
76
+ */
77
+ async handleResponse(response, endpoint) {
78
+ if (!response.ok) {
79
+ const errorText = await response.text();
80
+ let errorMessage = `HTTP ${response.status}: ${errorText}`;
81
+ try {
82
+ const errorData = JSON.parse(errorText);
83
+ if (errorData.msg) {
84
+ errorMessage = `MEXC API Error: ${errorData.msg} (Code: ${errorData.code || 'Unknown'})`;
85
+ }
86
+ }
87
+ catch {
88
+ // Use original HTTP error message
89
+ }
90
+ this.logger.error('MEXC API request failed', {
91
+ endpoint,
92
+ status: response.status,
93
+ error: errorMessage
94
+ });
95
+ throw new Error(errorMessage);
96
+ }
97
+ return await response.json();
98
+ }
99
+ /**
100
+ * Make public request (no authentication required)
101
+ */
102
+ async makePublicRequest(endpoint, params = {}) {
103
+ const queryString = Object.entries(params)
104
+ .map(([key, value]) => `${key}=${value}`)
105
+ .join('&');
106
+ const url = queryString
107
+ ? `${this.baseUrl}${endpoint}?${queryString}`
108
+ : `${this.baseUrl}${endpoint}`;
109
+ const response = await fetch(url, {
110
+ headers: this.createPublicHeaders()
111
+ });
112
+ return this.handleResponse(response, endpoint);
113
+ }
114
+ /**
115
+ * Check if credentials are valid (basic validation)
116
+ */
117
+ validateCredentials() {
118
+ return !!(this.credentials.apiKey && this.credentials.secret);
119
+ }
120
+ }
121
+ exports.MexcAuth = MexcAuth;
122
+ //# sourceMappingURL=mexc-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexc-auth.js","sourceRoot":"","sources":["../../../src/exchanges/mexc/mexc-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { BaseExchangeConnector } from '../../core/exchange/base-exchange-connector';
2
+ import { Order, OrderBook, Ticker, Trade, OrderType, OrderSide, Balance, WebSocketStatus } from '../../types';
3
+ /**
4
+ * MEXC Exchange Connector
5
+ */
6
+ export declare class MexcConnector extends BaseExchangeConnector {
7
+ private auth?;
8
+ private ws?;
9
+ private userStream?;
10
+ private readonly baseUrl;
11
+ private readonly dataMapper;
12
+ private logger;
13
+ constructor();
14
+ /**
15
+ * Initialize connection and set up authentication
16
+ */
17
+ connect(): Promise<void>;
18
+ /**
19
+ * Override disconnect to also disconnect user data stream
20
+ */
21
+ disconnect(): Promise<void>;
22
+ /**
23
+ * Get account balance
24
+ */
25
+ getBalance(): Promise<Record<string, Balance>>;
26
+ getBalance(asset: string): Promise<Balance>;
27
+ /**
28
+ * Create a new order
29
+ */
30
+ createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number): Promise<Order>;
31
+ /**
32
+ * Cancel an order
33
+ */
34
+ cancelOrder(orderId: string, symbol: string): Promise<void>;
35
+ /**
36
+ * Cancel all open orders on a symbol
37
+ */
38
+ cancelAllOrders(symbol: string): Promise<void>;
39
+ /**
40
+ * Get order details
41
+ */
42
+ getOrder(orderId: string, symbol: string): Promise<Order>;
43
+ /**
44
+ * Get open orders
45
+ */
46
+ getOpenOrders(symbol?: string): Promise<Order[]>;
47
+ /**
48
+ * Get ticker information
49
+ */
50
+ getTicker(symbol: string): Promise<Ticker>;
51
+ /**
52
+ * Get order book
53
+ */
54
+ getOrderBook(symbol: string): Promise<OrderBook>;
55
+ /**
56
+ * Get recent trades
57
+ */
58
+ getRecentTrades(symbol: string): Promise<Trade[]>;
59
+ /**
60
+ * Connect to MEXC WebSocket for real-time data
61
+ */
62
+ connectWebSocket(): Promise<void>;
63
+ /**
64
+ * Disconnect from MEXC WebSocket
65
+ */
66
+ disconnectWebSocket(): Promise<void>;
67
+ /**
68
+ * Subscribe to real-time ticker updates
69
+ */
70
+ subscribeTicker(symbol: string, callback: (ticker: Ticker) => void): Promise<string>;
71
+ /**
72
+ * Subscribe to real-time order book updates
73
+ */
74
+ subscribeOrderBook(symbol: string, callback: (orderbook: OrderBook) => void): Promise<string>;
75
+ /**
76
+ * Subscribe to real-time trade updates
77
+ */
78
+ subscribeTrades(symbol: string, callback: (trade: Trade) => void): Promise<string>;
79
+ /**
80
+ * Subscribe to real-time order updates (user data)
81
+ */
82
+ subscribeOrders(callback: (order: Order) => void): Promise<string>;
83
+ /**
84
+ * Unsubscribe from a WebSocket subscription
85
+ */
86
+ unsubscribe(subscriptionId: string): Promise<void>;
87
+ /**
88
+ * Check if WebSocket is connected
89
+ */
90
+ isWebSocketConnected(): boolean;
91
+ /**
92
+ * Get WebSocket connection status
93
+ */
94
+ getWebSocketStatus(): WebSocketStatus;
95
+ /**
96
+ * Connect to user data stream for real-time order updates
97
+ */
98
+ connectUserDataStream(): Promise<void>;
99
+ /**
100
+ * Disconnect user data stream
101
+ */
102
+ disconnectUserDataStream(): Promise<void>;
103
+ /**
104
+ * Subscribe to real-time user order updates (limit/market orders)
105
+ */
106
+ subscribeUserOrders(callback: (order: Order) => void): Promise<string>;
107
+ /**
108
+ * Subscribe to real-time user trade executions
109
+ * Notifies when user's orders are filled/executed
110
+ */
111
+ subscribeUserTrades(callback: (trade: Trade) => void): Promise<string>;
112
+ /**
113
+ * Check if user data stream is connected
114
+ */
115
+ isUserDataStreamConnected(): boolean;
116
+ /**
117
+ * Make authenticated request to MEXC API
118
+ */
119
+ private makeRequest;
120
+ /**
121
+ * Make public request (no authentication required)
122
+ */
123
+ private makePublicRequest;
124
+ }
125
+ //# sourceMappingURL=mexc-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexc-connector.d.ts","sourceRoot":"","sources":["../../../src/exchanges/mexc/mexc-connector.ts"],"names":[],"mappings":"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"}