@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,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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"}
|