@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,51 @@
|
|
|
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.tickerCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const exchange_factory_1 = require("../exchange-factory");
|
|
10
|
+
const validation_1 = require("../utils/validation");
|
|
11
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
12
|
+
exports.tickerCommand = new commander_1.Command('ticker')
|
|
13
|
+
.description('Get ticker data for a trading pair')
|
|
14
|
+
.requiredOption('-e, --exchange <exchange>', 'Exchange to query')
|
|
15
|
+
.requiredOption('-s, --symbol <symbol>', 'Trading pair symbol (e.g., BTC/USDT)')
|
|
16
|
+
.option('--json', 'Output in JSON format')
|
|
17
|
+
.action(async (options) => {
|
|
18
|
+
await (0, error_handler_1.executeCommand)(async () => {
|
|
19
|
+
const exchange = (0, validation_1.validateExchange)(options.exchange);
|
|
20
|
+
const symbol = (0, validation_1.validateSymbol)(options.symbol);
|
|
21
|
+
try {
|
|
22
|
+
const connector = await exchange_factory_1.ExchangeFactory.getExchange(exchange);
|
|
23
|
+
const ticker = await connector.getTicker(symbol);
|
|
24
|
+
if (options.json) {
|
|
25
|
+
console.log(JSON.stringify(ticker, null, 2));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
const [base, quote] = ticker.symbol.split('/');
|
|
29
|
+
console.log(`\n${chalk_1.default.bold.cyan(`${ticker.symbol} Ticker`)}:`);
|
|
30
|
+
console.log(` Last Price: ${chalk_1.default.bold.green('$' + ticker.last.toFixed(8))}`);
|
|
31
|
+
console.log(` Bid Price: ${chalk_1.default.green('$' + ticker.bid.toFixed(8))}`);
|
|
32
|
+
console.log(` Ask Price: ${chalk_1.default.red('$' + ticker.ask.toFixed(8))}`);
|
|
33
|
+
console.log(` Spread: ${chalk_1.default.yellow('$' + (ticker.ask - ticker.bid).toFixed(8))}`);
|
|
34
|
+
console.log(` 24h Volume (${base}): ${chalk_1.default.blue(ticker.baseVolume.toLocaleString())}`);
|
|
35
|
+
if (ticker.quoteVolume) {
|
|
36
|
+
console.log(` 24h Volume (${quote}): ${chalk_1.default.blue('$' + ticker.quoteVolume.toLocaleString())}`);
|
|
37
|
+
}
|
|
38
|
+
console.log(` Updated: ${new Date(ticker.timestamp).toLocaleString()}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
(0, error_handler_1.handleError)(error, 'Ticker Query');
|
|
43
|
+
}
|
|
44
|
+
}, 'ticker command');
|
|
45
|
+
});
|
|
46
|
+
exports.tickerCommand.addHelpText('after', `
|
|
47
|
+
Examples:
|
|
48
|
+
$ openmm ticker --exchange mexc --symbol BTC/USDT # Get BTC/USDT ticker
|
|
49
|
+
$ openmm ticker --exchange mexc --symbol ETH/USDT --json # Get ticker in JSON format
|
|
50
|
+
`);
|
|
51
|
+
//# sourceMappingURL=ticker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticker.js","sourceRoot":"","sources":["../../../src/cli/commands/ticker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/trade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SA8FrB,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
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.tradeCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const exchange_factory_1 = require("../exchange-factory");
|
|
9
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
10
|
+
const strategy_factory_1 = require("../../core/strategy/strategy-factory");
|
|
11
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
12
|
+
exports.tradeCommand = new commander_1.Command('trade')
|
|
13
|
+
.description('Start trading with specified strategy and parameters')
|
|
14
|
+
.requiredOption('-s, --strategy <strategy>', 'Trading strategy to use (grid)')
|
|
15
|
+
.requiredOption('-e, --exchange <exchange>', 'Exchange to trade on (mexc)')
|
|
16
|
+
.requiredOption('--symbol <symbol>', 'Trading pair (INDYUSDT, INDY/USDT, BTCUSDT, etc.)')
|
|
17
|
+
.option('--levels <number>', 'Grid: Number of levels each side (default: 5)', '5')
|
|
18
|
+
.option('--spacing <decimal>', 'Grid: Spacing between levels as decimal (0.02 = 2%)', '0.02')
|
|
19
|
+
.option('--size <number>', 'Grid: Order size in quote currency (default: 50)', '50')
|
|
20
|
+
.option('--confidence <decimal>', 'Grid: Minimum price confidence (0.6 = 60%)', '0.6')
|
|
21
|
+
.option('--deviation <decimal>', 'Grid: Price deviation threshold (0.015 = 1.5%)', '0.015')
|
|
22
|
+
.option('--debounce <ms>', 'Grid: Adjustment debounce time in ms (default: 2000)', '2000')
|
|
23
|
+
.option('--max-position <decimal>', 'Grid: Maximum position size as % of balance (0.8 = 80%)', '0.8')
|
|
24
|
+
.option('--safety-reserve <decimal>', 'Grid: Safety reserve as % of balance (0.2 = 20%)', '0.2')
|
|
25
|
+
.option('--dry-run', 'Simulate trading without placing real orders')
|
|
26
|
+
.action(async (options) => {
|
|
27
|
+
let strategy = null;
|
|
28
|
+
const shutdown = async (signal) => {
|
|
29
|
+
console.log(chalk_1.default.yellow(`\n${signal} received. Stopping strategy...`));
|
|
30
|
+
if (strategy) {
|
|
31
|
+
try {
|
|
32
|
+
await strategy.stop();
|
|
33
|
+
console.log(chalk_1.default.green('Strategy stopped successfully.'));
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
console.error(chalk_1.default.red('Error stopping strategy:'), error);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
await exchange_factory_1.ExchangeFactory.disconnectAll();
|
|
40
|
+
process.exit(0);
|
|
41
|
+
};
|
|
42
|
+
process.on('SIGTERM', () => shutdown('SIGTERM'));
|
|
43
|
+
process.on('SIGINT', () => shutdown('SIGINT'));
|
|
44
|
+
await (0, error_handler_1.executeCommand)(async () => {
|
|
45
|
+
const strategyType = options.strategy.toLowerCase();
|
|
46
|
+
try {
|
|
47
|
+
console.log(chalk_1.default.blue('🚀 Starting Trading Strategy'));
|
|
48
|
+
console.log(chalk_1.default.gray(`Strategy: ${options.strategy.toUpperCase()}`));
|
|
49
|
+
console.log(chalk_1.default.gray(`Exchange: ${options.exchange.toUpperCase()}`));
|
|
50
|
+
console.log(chalk_1.default.gray(`Symbol: ${options.symbol.toUpperCase()}`));
|
|
51
|
+
if (options.dryRun) {
|
|
52
|
+
console.log(chalk_1.default.yellow('⚠️ DRY RUN MODE - No real orders will be placed'));
|
|
53
|
+
}
|
|
54
|
+
const config = {
|
|
55
|
+
strategy: strategyType,
|
|
56
|
+
exchange: options.exchange,
|
|
57
|
+
symbol: options.symbol
|
|
58
|
+
};
|
|
59
|
+
let params = {};
|
|
60
|
+
if (strategyType === 'grid') {
|
|
61
|
+
console.log(chalk_1.default.gray(`Grid Levels: ${options.levels} each side`));
|
|
62
|
+
console.log(chalk_1.default.gray(`Grid Spacing: ${(parseFloat(options.spacing) * 100).toFixed(1)}%`));
|
|
63
|
+
console.log(chalk_1.default.gray(`Order Size: $${options.size}`));
|
|
64
|
+
console.log(chalk_1.default.gray(`Max Position: ${(parseFloat(options.maxPosition) * 100).toFixed(0)}%`));
|
|
65
|
+
console.log(chalk_1.default.gray(`Safety Reserve: ${(parseFloat(options.safetyReserve) * 100).toFixed(0)}%`));
|
|
66
|
+
params = {
|
|
67
|
+
gridLevels: parseInt(options.levels),
|
|
68
|
+
gridSpacing: parseFloat(options.spacing),
|
|
69
|
+
orderSize: parseFloat(options.size),
|
|
70
|
+
minConfidence: parseFloat(options.confidence),
|
|
71
|
+
priceDeviationThreshold: parseFloat(options.deviation),
|
|
72
|
+
adjustmentDebounce: parseInt(options.debounce),
|
|
73
|
+
maxPositionSize: parseFloat(options.maxPosition),
|
|
74
|
+
safetyReservePercentage: parseFloat(options.safetyReserve)
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
console.log(chalk_1.default.blue('⚙️ Creating strategy...'));
|
|
78
|
+
strategy = await strategy_factory_1.StrategyFactory.create(config, params);
|
|
79
|
+
console.log(chalk_1.default.green('✅ Strategy initialized successfully'));
|
|
80
|
+
console.log(chalk_1.default.blue('🔄 Starting strategy...'));
|
|
81
|
+
await strategy.start();
|
|
82
|
+
console.log(chalk_1.default.green('✅ Strategy is now running!'));
|
|
83
|
+
console.log(chalk_1.default.gray('Press Ctrl+C to stop the strategy gracefully'));
|
|
84
|
+
await new Promise(() => { });
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
(0, error_handler_1.handleError)(error, 'Trading Strategy');
|
|
88
|
+
}
|
|
89
|
+
}, 'trading strategy');
|
|
90
|
+
});
|
|
91
|
+
exports.tradeCommand.addHelpText('after', `
|
|
92
|
+
Examples:
|
|
93
|
+
$ openmm trade --strategy grid --exchange mexc --symbol INDYUSDT # Start INDY/USDT grid with defaults
|
|
94
|
+
$ openmm trade --strategy grid --exchange mexc --symbol INDY/USDT --levels 7 --size 100 # Custom parameters
|
|
95
|
+
$ openmm trade --strategy grid --exchange mexc --symbol BTCUSDT --spacing 0.015 # BTC grid with 1.5% spacing
|
|
96
|
+
$ openmm trade --strategy grid --exchange mexc --symbol INDYUSDT --dry-run # Test mode (no real orders)
|
|
97
|
+
|
|
98
|
+
Grid Strategy Parameters:
|
|
99
|
+
--levels: Number of buy and sell orders each side (default: 5, range: 1-20)
|
|
100
|
+
--spacing: Price spacing between grid levels (default: 0.02 = 2%)
|
|
101
|
+
--size: Order size in quote currency like USDT (default: 50)
|
|
102
|
+
--confidence: Minimum price confidence to trade (default: 0.6 = 60%)
|
|
103
|
+
--deviation: Price movement % to trigger grid recreation (default: 0.015 = 1.5%)
|
|
104
|
+
--debounce: Delay between grid adjustments in ms (default: 2000ms)
|
|
105
|
+
--max-position: Maximum position size as % of balance (default: 0.8 = 80%)
|
|
106
|
+
--safety-reserve: Safety reserve as % of balance (default: 0.2 = 20%)
|
|
107
|
+
|
|
108
|
+
Note: Ensure exchange-specific environment variables are set (e.g., MEXC_API_KEY and MEXC_SECRET_KEY for MEXC).
|
|
109
|
+
`);
|
|
110
|
+
//# sourceMappingURL=trade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trade.js","sourceRoot":"","sources":["../../../src/cli/commands/trade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trades.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/trades.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SA8DtB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
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.tradesCommand = void 0;
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const exchange_factory_1 = require("../exchange-factory");
|
|
10
|
+
const validation_1 = require("../utils/validation");
|
|
11
|
+
const error_handler_1 = require("../utils/error-handler");
|
|
12
|
+
exports.tradesCommand = new commander_1.Command('trades')
|
|
13
|
+
.description('Get recent trades for a trading pair')
|
|
14
|
+
.requiredOption('-e, --exchange <exchange>', 'Exchange to query')
|
|
15
|
+
.requiredOption('-s, --symbol <symbol>', 'Trading pair symbol (e.g., BTC/USDT)')
|
|
16
|
+
.option('-l, --limit <limit>', 'Number of trades to display (default: 20)', '20')
|
|
17
|
+
.option('--json', 'Output in JSON format')
|
|
18
|
+
.action(async (options) => {
|
|
19
|
+
await (0, error_handler_1.executeCommand)(async () => {
|
|
20
|
+
const exchange = (0, validation_1.validateExchange)(options.exchange);
|
|
21
|
+
const symbol = (0, validation_1.validateSymbol)(options.symbol);
|
|
22
|
+
const limit = parseInt(options.limit);
|
|
23
|
+
if (isNaN(limit) || limit <= 0) {
|
|
24
|
+
console.error(chalk_1.default.red('❌ Limit must be a positive number'));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const connector = await exchange_factory_1.ExchangeFactory.getExchange(exchange);
|
|
29
|
+
const trades = await connector.getRecentTrades(symbol);
|
|
30
|
+
const limitedTrades = trades.slice(0, limit);
|
|
31
|
+
if (options.json) {
|
|
32
|
+
console.log(JSON.stringify(limitedTrades, null, 2));
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
if (limitedTrades.length === 0) {
|
|
36
|
+
console.log(chalk_1.default.yellow(`No recent trades found for ${symbol}`));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
console.log(`\n${chalk_1.default.bold.cyan(`Recent Trades for ${symbol}`)} (Latest ${limitedTrades.length}):`);
|
|
40
|
+
console.log(chalk_1.default.gray('ID │ Side │ Price │ Amount │ Total │ Time'));
|
|
41
|
+
console.log(chalk_1.default.gray('─────────┼──────┼──────────────┼──────────────┼──────────────┼─────────────'));
|
|
42
|
+
limitedTrades.forEach(trade => {
|
|
43
|
+
const id = trade.id.padEnd(8);
|
|
44
|
+
const side = trade.side === 'buy' ?
|
|
45
|
+
chalk_1.default.green('BUY ') : chalk_1.default.red('SELL');
|
|
46
|
+
const price = `$${trade.price.toFixed(8)}`.padEnd(13);
|
|
47
|
+
const amount = trade.amount.toFixed(8).padEnd(13);
|
|
48
|
+
const total = `$${(trade.price * trade.amount).toFixed(8)}`.padEnd(13);
|
|
49
|
+
const time = new Date(trade.timestamp).toLocaleTimeString().padEnd(11);
|
|
50
|
+
console.log(`${id} │ ${side} │ ${price} │ ${amount} │ ${total} │ ${time}`);
|
|
51
|
+
});
|
|
52
|
+
const buyTrades = limitedTrades.filter(t => t.side === 'buy');
|
|
53
|
+
const sellTrades = limitedTrades.filter(t => t.side === 'sell');
|
|
54
|
+
const totalVolume = limitedTrades.reduce((sum, trade) => sum + (trade.price * trade.amount), 0);
|
|
55
|
+
console.log(`\n${chalk_1.default.bold('Summary')}:`);
|
|
56
|
+
console.log(` Total Trades: ${limitedTrades.length}`);
|
|
57
|
+
console.log(` Buy Trades: ${chalk_1.default.green(buyTrades.length)}`);
|
|
58
|
+
console.log(` Sell Trades: ${chalk_1.default.red(sellTrades.length)}`);
|
|
59
|
+
console.log(` Total Volume: ${chalk_1.default.blue('$' + totalVolume.toLocaleString(undefined, { maximumFractionDigits: 2 }))}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
(0, error_handler_1.handleError)(error, 'Recent Trades Query');
|
|
64
|
+
}
|
|
65
|
+
}, 'trades command');
|
|
66
|
+
});
|
|
67
|
+
exports.tradesCommand.addHelpText('after', `
|
|
68
|
+
Examples:
|
|
69
|
+
$ openmm trades --exchange mexc --symbol BTC/USDT # Get 20 recent trades
|
|
70
|
+
$ openmm trades --exchange mexc --symbol BTC/USDT --limit 50 # Get 50 recent trades
|
|
71
|
+
$ openmm trades --exchange mexc --symbol ETH/USDT --json # Get trades in JSON format
|
|
72
|
+
`);
|
|
73
|
+
//# sourceMappingURL=trades.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trades.js","sourceRoot":"","sources":["../../../src/cli/commands/trades.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { BaseExchangeConnector } from '../core/exchange/base-exchange-connector';
|
|
2
|
+
/**
|
|
3
|
+
* Supported exchanges
|
|
4
|
+
*/
|
|
5
|
+
export type SupportedExchange = 'mexc' | 'gateio' | 'bitget' | 'kraken';
|
|
6
|
+
/**
|
|
7
|
+
* Exchange Factory
|
|
8
|
+
* Creates exchange connector instances dynamically based on exchange name
|
|
9
|
+
*/
|
|
10
|
+
export declare class ExchangeFactory {
|
|
11
|
+
private static connectors;
|
|
12
|
+
/**
|
|
13
|
+
* Get exchange connector instance
|
|
14
|
+
* @param exchangeName Name of the exchange
|
|
15
|
+
* @returns Exchange connector instance
|
|
16
|
+
*/
|
|
17
|
+
static getExchange(exchangeName: SupportedExchange): Promise<BaseExchangeConnector>;
|
|
18
|
+
/**
|
|
19
|
+
* Create exchange connector based on exchange name
|
|
20
|
+
* @param exchangeName Name of the exchange
|
|
21
|
+
* @returns Exchange connector instance
|
|
22
|
+
*/
|
|
23
|
+
private static createExchangeConnector;
|
|
24
|
+
/**
|
|
25
|
+
* Get list of supported exchanges
|
|
26
|
+
* @returns Array of supported exchange names
|
|
27
|
+
*/
|
|
28
|
+
static getSupportedExchanges(): SupportedExchange[];
|
|
29
|
+
/**
|
|
30
|
+
* Check if exchange is supported
|
|
31
|
+
* @param exchangeName Exchange name to check
|
|
32
|
+
* @returns True if exchange is supported
|
|
33
|
+
*/
|
|
34
|
+
static isSupported(exchangeName: string): exchangeName is SupportedExchange;
|
|
35
|
+
/**
|
|
36
|
+
* Disconnect all cached connectors
|
|
37
|
+
*/
|
|
38
|
+
static disconnectAll(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=exchange-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange-factory.d.ts","sourceRoot":"","sources":["../../src/cli/exchange-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAGjF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExE;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,UAAU,CAA4D;IAErF;;;;OAIG;WACU,WAAW,CAAC,YAAY,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAazF;;;;OAIG;mBACkB,uBAAuB;IAsB5C;;;OAGG;IACH,MAAM,CAAC,qBAAqB,IAAI,iBAAiB,EAAE;IAInD;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,IAAI,iBAAiB;IAI3E;;OAEG;WACU,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;CAW5C"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExchangeFactory = void 0;
|
|
4
|
+
const mexc_connector_1 = require("../exchanges/mexc/mexc-connector");
|
|
5
|
+
/**
|
|
6
|
+
* Exchange Factory
|
|
7
|
+
* Creates exchange connector instances dynamically based on exchange name
|
|
8
|
+
*/
|
|
9
|
+
class ExchangeFactory {
|
|
10
|
+
/**
|
|
11
|
+
* Get exchange connector instance
|
|
12
|
+
* @param exchangeName Name of the exchange
|
|
13
|
+
* @returns Exchange connector instance
|
|
14
|
+
*/
|
|
15
|
+
static async getExchange(exchangeName) {
|
|
16
|
+
if (this.connectors.has(exchangeName)) {
|
|
17
|
+
return this.connectors.get(exchangeName);
|
|
18
|
+
}
|
|
19
|
+
const connector = await this.createExchangeConnector(exchangeName);
|
|
20
|
+
await connector.connect();
|
|
21
|
+
this.connectors.set(exchangeName, connector);
|
|
22
|
+
return connector;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create exchange connector based on exchange name
|
|
26
|
+
* @param exchangeName Name of the exchange
|
|
27
|
+
* @returns Exchange connector instance
|
|
28
|
+
*/
|
|
29
|
+
static async createExchangeConnector(exchangeName) {
|
|
30
|
+
switch (exchangeName) {
|
|
31
|
+
case 'mexc':
|
|
32
|
+
return new mexc_connector_1.MexcConnector();
|
|
33
|
+
case 'gateio':
|
|
34
|
+
// TODO: Implement GateIO connector
|
|
35
|
+
throw new Error('GateIO connector not yet implemented');
|
|
36
|
+
case 'bitget':
|
|
37
|
+
// TODO: Implement Bitget connector
|
|
38
|
+
throw new Error('Bitget connector not yet implemented');
|
|
39
|
+
case 'kraken':
|
|
40
|
+
// TODO: Implement Kraken connector
|
|
41
|
+
throw new Error('Kraken connector not yet implemented');
|
|
42
|
+
default:
|
|
43
|
+
throw new Error(`Unsupported exchange: ${exchangeName}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Get list of supported exchanges
|
|
48
|
+
* @returns Array of supported exchange names
|
|
49
|
+
*/
|
|
50
|
+
static getSupportedExchanges() {
|
|
51
|
+
return ['mexc', 'gateio', 'bitget', 'kraken'];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if exchange is supported
|
|
55
|
+
* @param exchangeName Exchange name to check
|
|
56
|
+
* @returns True if exchange is supported
|
|
57
|
+
*/
|
|
58
|
+
static isSupported(exchangeName) {
|
|
59
|
+
return this.getSupportedExchanges().includes(exchangeName);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Disconnect all cached connectors
|
|
63
|
+
*/
|
|
64
|
+
static async disconnectAll() {
|
|
65
|
+
const disconnectPromises = Array.from(this.connectors.values()).map(connector => {
|
|
66
|
+
if (connector.disconnect) {
|
|
67
|
+
return connector.disconnect();
|
|
68
|
+
}
|
|
69
|
+
return Promise.resolve();
|
|
70
|
+
});
|
|
71
|
+
await Promise.all(disconnectPromises);
|
|
72
|
+
this.connectors.clear();
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.ExchangeFactory = ExchangeFactory;
|
|
76
|
+
ExchangeFactory.connectors = new Map();
|
|
77
|
+
//# sourceMappingURL=exchange-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exchange-factory.js","sourceRoot":"","sources":["../../src/cli/exchange-factory.ts"],"names":[],"mappings":";;;AACA,qEAAiE;AAOjE;;;GAGG;AACH,MAAa,eAAe;IAG1B;;;;OAIG;IACH,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,YAA+B;QACtD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC;QAC5C,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;QACnE,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;QAE1B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE7C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACK,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,YAA+B;QAC1E,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,MAAM;gBACT,OAAO,IAAI,8BAAa,EAAE,CAAC;YAE7B,KAAK,QAAQ;gBACX,mCAAmC;gBACnC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAE1D,KAAK,QAAQ;gBACX,mCAAmC;gBACnC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAE1D,KAAK,QAAQ;gBACX,mCAAmC;gBACnC,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAE1D;gBACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,YAAY,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,qBAAqB;QAC1B,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,WAAW,CAAC,YAAoB;QACrC,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,QAAQ,CAAC,YAAiC,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,aAAa;QACxB,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;YAC9E,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC;gBACzB,OAAO,SAAS,CAAC,UAAU,EAAE,CAAC;YAChC,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;;AA9EH,0CA+EC;AA9EgB,0BAAU,GAAkD,IAAI,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pool Discovery Core Logic
|
|
3
|
+
* Core functionality for discovering Cardano liquidity pools
|
|
4
|
+
*/
|
|
5
|
+
import { CardanoTokenConfig } from '../types';
|
|
6
|
+
export interface PoolInfo {
|
|
7
|
+
identifier: string;
|
|
8
|
+
dex: string;
|
|
9
|
+
tvl: number;
|
|
10
|
+
reserveA: number;
|
|
11
|
+
reserveB: number;
|
|
12
|
+
address: string;
|
|
13
|
+
isActive: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface DiscoveryResult {
|
|
16
|
+
token: string;
|
|
17
|
+
policyId: string;
|
|
18
|
+
assetName: string;
|
|
19
|
+
totalPools: number;
|
|
20
|
+
totalLiquidity: number;
|
|
21
|
+
pools: PoolInfo[];
|
|
22
|
+
recommendedIdentifiers: string[];
|
|
23
|
+
}
|
|
24
|
+
export declare class PoolDiscoveryCLI {
|
|
25
|
+
private poolDiscovery;
|
|
26
|
+
private irisClient;
|
|
27
|
+
private priceService;
|
|
28
|
+
constructor();
|
|
29
|
+
/**
|
|
30
|
+
* Main discovery function for any Cardano native token
|
|
31
|
+
*/
|
|
32
|
+
discoverTokenPools(tokenSymbol: string, options?: {
|
|
33
|
+
limit?: number;
|
|
34
|
+
minLiquidity?: number;
|
|
35
|
+
showAll?: boolean;
|
|
36
|
+
}): Promise<DiscoveryResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Display discovery results in a formatted table
|
|
39
|
+
*/
|
|
40
|
+
displayResults(result: DiscoveryResult): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get live price information for discovered pools
|
|
43
|
+
*/
|
|
44
|
+
getPoolPrices(identifiers: string[], tokenSymbol: string): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Format currency with K/M suffixes
|
|
47
|
+
*/
|
|
48
|
+
private formatCurrency;
|
|
49
|
+
/**
|
|
50
|
+
* Add a new token configuration (for advanced users)
|
|
51
|
+
*/
|
|
52
|
+
suggestTokenConfig(policyId: string, assetNameHex: string, symbol: string): CardanoTokenConfig;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=pool-discovery-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-discovery-core.d.ts","sourceRoot":"","sources":["../../src/cli/pool-discovery-core.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,sBAAsB,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAsB;;IAQ1C;;OAEG;IACG,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;QACrD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,OAAO,CAAC;KACd,GAAG,OAAO,CAAC,eAAe,CAAC;IA2DjC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAkD7C;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C9E;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB;CAsB/F"}
|