@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,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pool Discovery Core Logic
|
|
4
|
+
* Core functionality for discovering Cardano liquidity pools
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.PoolDiscoveryCLI = void 0;
|
|
8
|
+
const price_aggregation_1 = require("../core/price-aggregation");
|
|
9
|
+
const price_aggregation_2 = require("../core/price-aggregation");
|
|
10
|
+
const price_aggregation_3 = require("../core/price-aggregation");
|
|
11
|
+
const price_aggregation_4 = require("../config/price-aggregation");
|
|
12
|
+
class PoolDiscoveryCLI {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.poolDiscovery = new price_aggregation_1.IrisPoolDiscovery();
|
|
15
|
+
this.irisClient = new price_aggregation_2.IrisApiClient();
|
|
16
|
+
this.priceService = new price_aggregation_3.CardanoPriceService();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Main discovery function for any Cardano native token
|
|
20
|
+
*/
|
|
21
|
+
async discoverTokenPools(tokenSymbol, options = {}) {
|
|
22
|
+
const symbol = tokenSymbol.toUpperCase();
|
|
23
|
+
if (!(0, price_aggregation_4.isTokenSupported)(symbol)) {
|
|
24
|
+
throw new Error(`Unsupported token: ${symbol}. Supported tokens: ${(0, price_aggregation_4.getSupportedTokens)().join(', ')}`);
|
|
25
|
+
}
|
|
26
|
+
const tokenConfig = (0, price_aggregation_4.getTokenConfig)(symbol);
|
|
27
|
+
const { limit = 10, minLiquidity, showAll = false } = options;
|
|
28
|
+
console.log(`🔍 Discovering liquidity pools for ${symbol} token...`);
|
|
29
|
+
console.log(`Policy ID: ${tokenConfig.policyId}`);
|
|
30
|
+
console.log(`Asset Name (hex): ${tokenConfig.assetName}`);
|
|
31
|
+
console.log('─'.repeat(80));
|
|
32
|
+
try {
|
|
33
|
+
const pools = await this.poolDiscovery.discoverPools('lovelace', tokenConfig);
|
|
34
|
+
const filteredPools = minLiquidity
|
|
35
|
+
? pools.filter(pool => Number(pool.state?.tvl || 0) >= minLiquidity)
|
|
36
|
+
: pools;
|
|
37
|
+
const sortedPools = filteredPools
|
|
38
|
+
.sort((a, b) => Number(b.state?.tvl || 0) - Number(a.state?.tvl || 0))
|
|
39
|
+
.slice(0, showAll ? filteredPools.length : limit);
|
|
40
|
+
const totalLiquidity = pools.reduce((sum, pool) => sum + Number(pool.state?.tvl || 0), 0);
|
|
41
|
+
const poolInfos = sortedPools.map(pool => ({
|
|
42
|
+
identifier: pool.identifier || 'N/A',
|
|
43
|
+
dex: pool.dex || 'Unknown',
|
|
44
|
+
tvl: Number(pool.state?.tvl || 0),
|
|
45
|
+
reserveA: Number(pool.state?.reserveA || 0),
|
|
46
|
+
reserveB: Number(pool.state?.reserveB || 0),
|
|
47
|
+
address: pool.address || 'N/A',
|
|
48
|
+
isActive: pool.isActive || false
|
|
49
|
+
}));
|
|
50
|
+
const recommendedIdentifiers = poolInfos
|
|
51
|
+
.slice(0, 3)
|
|
52
|
+
.filter(pool => pool.isActive)
|
|
53
|
+
.map(pool => pool.identifier);
|
|
54
|
+
return {
|
|
55
|
+
token: symbol,
|
|
56
|
+
policyId: tokenConfig.policyId,
|
|
57
|
+
assetName: tokenConfig.assetName,
|
|
58
|
+
totalPools: pools.length,
|
|
59
|
+
totalLiquidity,
|
|
60
|
+
pools: poolInfos,
|
|
61
|
+
recommendedIdentifiers
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
throw new Error(`Pool discovery failed for ${symbol}: ${error}`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Display discovery results in a formatted table
|
|
70
|
+
*/
|
|
71
|
+
displayResults(result) {
|
|
72
|
+
console.log(`\n📊 ${result.token} Liquidity Pool Discovery Results`);
|
|
73
|
+
console.log('═'.repeat(80));
|
|
74
|
+
console.log(`Total Pools Found: ${result.totalPools}`);
|
|
75
|
+
console.log(`Total Liquidity: ${this.formatCurrency(result.totalLiquidity)}`);
|
|
76
|
+
console.log(`Token Policy ID: ${result.policyId}`);
|
|
77
|
+
console.log(`Asset Name (hex): ${result.assetName}`);
|
|
78
|
+
if (result.pools.length === 0) {
|
|
79
|
+
console.log('\n❌ No liquidity pools found for this token.');
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
console.log('\n🏊 Pool Details:');
|
|
83
|
+
console.log('─'.repeat(80));
|
|
84
|
+
console.log('Rank | DEX | TVL | Identifier | Active');
|
|
85
|
+
console.log('─'.repeat(80));
|
|
86
|
+
result.pools.forEach((pool, index) => {
|
|
87
|
+
const rank = `${index + 1}`.padStart(4);
|
|
88
|
+
const dex = pool.dex.substring(0, 12).padEnd(12);
|
|
89
|
+
const tvl = this.formatCurrency(pool.tvl).padStart(12);
|
|
90
|
+
const identifier = pool.identifier.substring(0, 29).padEnd(29);
|
|
91
|
+
const status = pool.isActive ? '✅' : '❌';
|
|
92
|
+
console.log(`${rank} | ${dex} | ${tvl} | ${identifier} | ${status}`);
|
|
93
|
+
});
|
|
94
|
+
console.log('\n🎯 Recommended Pool Identifiers for Market Making:');
|
|
95
|
+
console.log('─'.repeat(60));
|
|
96
|
+
if (result.recommendedIdentifiers.length === 0) {
|
|
97
|
+
console.log('❌ No active pools with sufficient liquidity found.');
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
result.recommendedIdentifiers.forEach((id, index) => {
|
|
101
|
+
const pool = result.pools.find(p => p.identifier === id);
|
|
102
|
+
console.log(`${index + 1}. ${id}`);
|
|
103
|
+
console.log(` DEX: ${pool?.dex}, TVL: ${this.formatCurrency(pool?.tvl || 0)}`);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
console.log('\n💡 Usage Instructions:');
|
|
107
|
+
console.log('─'.repeat(40));
|
|
108
|
+
console.log('1. Use the recommended pool identifiers in your market making strategy');
|
|
109
|
+
console.log('2. Higher TVL pools typically offer better price stability');
|
|
110
|
+
console.log('3. Monitor multiple pools for price aggregation and arbitrage opportunities');
|
|
111
|
+
console.log(`4. Current minimum liquidity threshold: ${this.formatCurrency((0, price_aggregation_4.getTokenConfig)(result.token).minLiquidityThreshold || 0)}`);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get live price information for discovered pools
|
|
115
|
+
*/
|
|
116
|
+
async getPoolPrices(identifiers, tokenSymbol) {
|
|
117
|
+
if (identifiers.length === 0) {
|
|
118
|
+
console.log('❌ No pool identifiers provided');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
console.log('\n💰 Getting live prices from Iris API...');
|
|
122
|
+
try {
|
|
123
|
+
const prices = await this.irisClient.fetchPrices(identifiers, 'OpenMM-PoolDiscovery/1.0');
|
|
124
|
+
console.log('─'.repeat(60));
|
|
125
|
+
console.log('Pool ID | Price (ADA)');
|
|
126
|
+
console.log('─'.repeat(60));
|
|
127
|
+
identifiers.forEach((id, index) => {
|
|
128
|
+
const price = prices[index] || 0;
|
|
129
|
+
const shortId = id.substring(0, 33).padEnd(33);
|
|
130
|
+
console.log(`${shortId} | ${price.toFixed(8)}`);
|
|
131
|
+
});
|
|
132
|
+
const avgAdaPrice = prices.reduce((sum, p) => sum + p, 0) / prices.length;
|
|
133
|
+
console.log('─'.repeat(60));
|
|
134
|
+
console.log(`Average Price: ${avgAdaPrice.toFixed(8)} ADA per ${tokenSymbol}`);
|
|
135
|
+
try {
|
|
136
|
+
console.log('\n💵 Getting full market price...');
|
|
137
|
+
const aggregatedPrice = await this.priceService.getTokenPrice(tokenSymbol);
|
|
138
|
+
console.log('─'.repeat(60));
|
|
139
|
+
console.log(`${tokenSymbol}/USDT Price: $${aggregatedPrice.price.toFixed(8)}`);
|
|
140
|
+
console.log(`Confidence: ${(aggregatedPrice.confidence * 100).toFixed(1)}%`);
|
|
141
|
+
console.log(`Sources: ${aggregatedPrice.sources.map(s => s.name).join(', ')}`);
|
|
142
|
+
console.log(`Updated: ${aggregatedPrice.timestamp.toLocaleString()}`);
|
|
143
|
+
}
|
|
144
|
+
catch (usdtError) {
|
|
145
|
+
console.log(`❌ Fa iled to get USDT price: ${usdtError}`);
|
|
146
|
+
console.log(`✅ ADA price available: ${avgAdaPrice.toFixed(8)} ADA per ${tokenSymbol}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
console.log(`❌ Failed to fetch prices: ${error}`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Format currency with K/M suffixes
|
|
155
|
+
*/
|
|
156
|
+
formatCurrency(amount) {
|
|
157
|
+
if (amount === 0)
|
|
158
|
+
return '$0';
|
|
159
|
+
if (amount >= 1000000) {
|
|
160
|
+
return `$${(amount / 1000000).toFixed(1)}M`;
|
|
161
|
+
}
|
|
162
|
+
if (amount >= 1000) {
|
|
163
|
+
return `$${(amount / 1000).toFixed(1)}K`;
|
|
164
|
+
}
|
|
165
|
+
return `$${amount.toFixed(0)}`;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Add a new token configuration (for advanced users)
|
|
169
|
+
*/
|
|
170
|
+
suggestTokenConfig(policyId, assetNameHex, symbol) {
|
|
171
|
+
console.log('\n🔧 Token Configuration for Custom Token:');
|
|
172
|
+
console.log('─'.repeat(50));
|
|
173
|
+
console.log(`Symbol: ${symbol.toUpperCase()}`);
|
|
174
|
+
console.log(`Policy ID: ${policyId}`);
|
|
175
|
+
console.log(`Asset Name (hex): ${assetNameHex}`);
|
|
176
|
+
console.log('\nAdd this to your src/config/price-aggregation.ts:');
|
|
177
|
+
console.log('─'.repeat(50));
|
|
178
|
+
console.log(`'${symbol.toUpperCase()}': {`);
|
|
179
|
+
console.log(` symbol: '${symbol.toUpperCase()}',`);
|
|
180
|
+
console.log(` policyId: '${policyId}',`);
|
|
181
|
+
console.log(` assetName: '${assetNameHex}',`);
|
|
182
|
+
console.log(` minLiquidityThreshold: 25000 // Adjust as needed`);
|
|
183
|
+
console.log(`}`);
|
|
184
|
+
return {
|
|
185
|
+
symbol: symbol.toUpperCase(),
|
|
186
|
+
policyId,
|
|
187
|
+
assetName: assetNameHex,
|
|
188
|
+
minLiquidityThreshold: 25000
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
exports.PoolDiscoveryCLI = PoolDiscoveryCLI;
|
|
193
|
+
//# sourceMappingURL=pool-discovery-core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pool-discovery-core.js","sourceRoot":"","sources":["../../src/cli/pool-discovery-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handle CLI errors with consistent formatting
|
|
3
|
+
* @param error Error object or message
|
|
4
|
+
* @param context Context where the error occurred
|
|
5
|
+
*/
|
|
6
|
+
export declare function handleError(error: Error | string, context?: string): void;
|
|
7
|
+
/**
|
|
8
|
+
* Handle async command execution with error handling
|
|
9
|
+
* @param fn Async function to execute
|
|
10
|
+
* @param context Context for error handling
|
|
11
|
+
*/
|
|
12
|
+
export declare function executeCommand(fn: () => Promise<void>, context: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Display success message
|
|
15
|
+
* @param message Success message to display
|
|
16
|
+
*/
|
|
17
|
+
export declare function showSuccess(message: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Display warning message
|
|
20
|
+
* @param message Warning message to display
|
|
21
|
+
*/
|
|
22
|
+
export declare function showWarning(message: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Display info message
|
|
25
|
+
* @param message Info message to display
|
|
26
|
+
*/
|
|
27
|
+
export declare function showInfo(message: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Display data in a formatted table
|
|
30
|
+
* @param data Array of objects to display
|
|
31
|
+
* @param headers Optional custom headers
|
|
32
|
+
*/
|
|
33
|
+
export declare function displayTable(data: Record<string, any>[], headers?: string[]): void;
|
|
34
|
+
/**
|
|
35
|
+
* Format balance display
|
|
36
|
+
* @param balance Balance object
|
|
37
|
+
* @param asset Asset name
|
|
38
|
+
*/
|
|
39
|
+
export declare function displayBalance(balance: any, asset?: string): void;
|
|
40
|
+
//# sourceMappingURL=error-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/error-handler.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAWzE;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAiClF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAmBjE"}
|
|
@@ -0,0 +1,117 @@
|
|
|
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.handleError = handleError;
|
|
7
|
+
exports.executeCommand = executeCommand;
|
|
8
|
+
exports.showSuccess = showSuccess;
|
|
9
|
+
exports.showWarning = showWarning;
|
|
10
|
+
exports.showInfo = showInfo;
|
|
11
|
+
exports.displayTable = displayTable;
|
|
12
|
+
exports.displayBalance = displayBalance;
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
|
+
/**
|
|
15
|
+
* Handle CLI errors with consistent formatting
|
|
16
|
+
* @param error Error object or message
|
|
17
|
+
* @param context Context where the error occurred
|
|
18
|
+
*/
|
|
19
|
+
function handleError(error, context) {
|
|
20
|
+
const errorMessage = typeof error === 'string' ? error : error.message;
|
|
21
|
+
const contextStr = context ? ` [${context}]` : '';
|
|
22
|
+
console.error(chalk_1.default.red(`❌ Error${contextStr}: ${errorMessage}`));
|
|
23
|
+
if (process.env.NODE_ENV === 'development' && typeof error === 'object' && error.stack) {
|
|
24
|
+
console.error(chalk_1.default.gray(error.stack));
|
|
25
|
+
}
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Handle async command execution with error handling
|
|
30
|
+
* @param fn Async function to execute
|
|
31
|
+
* @param context Context for error handling
|
|
32
|
+
*/
|
|
33
|
+
async function executeCommand(fn, context) {
|
|
34
|
+
try {
|
|
35
|
+
await fn();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
handleError(error, context);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Display success message
|
|
43
|
+
* @param message Success message to display
|
|
44
|
+
*/
|
|
45
|
+
function showSuccess(message) {
|
|
46
|
+
console.log(chalk_1.default.green(`✅ ${message}`));
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Display warning message
|
|
50
|
+
* @param message Warning message to display
|
|
51
|
+
*/
|
|
52
|
+
function showWarning(message) {
|
|
53
|
+
console.log(chalk_1.default.yellow(`⚠️ ${message}`));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Display info message
|
|
57
|
+
* @param message Info message to display
|
|
58
|
+
*/
|
|
59
|
+
function showInfo(message) {
|
|
60
|
+
console.log(chalk_1.default.blue(`ℹ️ ${message}`));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Display data in a formatted table
|
|
64
|
+
* @param data Array of objects to display
|
|
65
|
+
* @param headers Optional custom headers
|
|
66
|
+
*/
|
|
67
|
+
function displayTable(data, headers) {
|
|
68
|
+
if (data.length === 0) {
|
|
69
|
+
showInfo('No data to display');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const keys = headers || Object.keys(data[0]);
|
|
73
|
+
const columnWidths = keys.map(key => {
|
|
74
|
+
const maxWidth = Math.max(key.length, ...data.map(row => String(row[key] || '').length));
|
|
75
|
+
return Math.min(maxWidth, 20);
|
|
76
|
+
});
|
|
77
|
+
const headerRow = keys.map((key, i) => chalk_1.default.bold(key.padEnd(columnWidths[i]))).join(' │ ');
|
|
78
|
+
console.log(headerRow);
|
|
79
|
+
const separator = columnWidths.map(width => '─'.repeat(width)).join('─┼─');
|
|
80
|
+
console.log(separator);
|
|
81
|
+
data.forEach(row => {
|
|
82
|
+
const dataRow = keys.map((key, i) => {
|
|
83
|
+
let value = String(row[key] || '');
|
|
84
|
+
if (value.length > columnWidths[i]) {
|
|
85
|
+
value = value.substring(0, columnWidths[i] - 3) + '...';
|
|
86
|
+
}
|
|
87
|
+
return value.padEnd(columnWidths[i]);
|
|
88
|
+
}).join(' │ ');
|
|
89
|
+
console.log(dataRow);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Format balance display
|
|
94
|
+
* @param balance Balance object
|
|
95
|
+
* @param asset Asset name
|
|
96
|
+
*/
|
|
97
|
+
function displayBalance(balance, asset) {
|
|
98
|
+
if (asset) {
|
|
99
|
+
console.log(`\n${chalk_1.default.bold.cyan(asset)} Balance:`);
|
|
100
|
+
console.log(` Free: ${chalk_1.default.green(balance.free.toFixed(8))}`);
|
|
101
|
+
console.log(` Used: ${chalk_1.default.yellow(balance.used.toFixed(8))}`);
|
|
102
|
+
console.log(` Total: ${chalk_1.default.blue(balance.total.toFixed(8))}`);
|
|
103
|
+
console.log(` Available: ${chalk_1.default.green(balance.available.toFixed(8))}`);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
const balances = Object.entries(balance)
|
|
107
|
+
.map(([asset, bal]) => ({
|
|
108
|
+
Asset: asset,
|
|
109
|
+
Free: bal.free.toFixed(8),
|
|
110
|
+
Used: bal.used.toFixed(8),
|
|
111
|
+
Total: bal.total.toFixed(8)
|
|
112
|
+
}));
|
|
113
|
+
console.log(`\n${chalk_1.default.bold.cyan('Account Balances')}:`);
|
|
114
|
+
displayTable(balances);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=error-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../../src/cli/utils/error-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { SupportedExchange } from '../exchange-factory';
|
|
2
|
+
/**
|
|
3
|
+
* Validate exchange parameter
|
|
4
|
+
* @param exchange Exchange name to validate
|
|
5
|
+
* @returns Valid exchange name
|
|
6
|
+
*/
|
|
7
|
+
export declare function validateExchange(exchange: string): SupportedExchange;
|
|
8
|
+
/**
|
|
9
|
+
* Validate symbol format
|
|
10
|
+
* @param symbol Trading pair symbol to validate (e.g., BTC/USDT)
|
|
11
|
+
* @returns Valid symbol
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateSymbol(symbol: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Validate order ID
|
|
16
|
+
* @param orderId Order ID to validate
|
|
17
|
+
* @returns Valid order ID
|
|
18
|
+
*/
|
|
19
|
+
export declare function validateOrderId(orderId: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Validate positive number
|
|
22
|
+
* @param value Value to validate
|
|
23
|
+
* @param fieldName Name of the field for error messages
|
|
24
|
+
* @returns Valid positive number
|
|
25
|
+
*/
|
|
26
|
+
export declare function validatePositiveNumber(value: string, fieldName: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* Validate order type
|
|
29
|
+
* @param type Order type to validate
|
|
30
|
+
* @returns Valid order type
|
|
31
|
+
*/
|
|
32
|
+
export declare function validateOrderType(type: string): 'market' | 'limit';
|
|
33
|
+
/**
|
|
34
|
+
* Validate order side
|
|
35
|
+
* @param side Order side to validate
|
|
36
|
+
* @returns Valid order side
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateOrderSide(side: string): 'buy' | 'sell';
|
|
39
|
+
/**
|
|
40
|
+
* Check if required options are provided
|
|
41
|
+
* @param options Object containing options to check
|
|
42
|
+
* @param required Array of required option names
|
|
43
|
+
*/
|
|
44
|
+
export declare function requireOptions(options: Record<string, any>, required: string[]): void;
|
|
45
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAEzE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB,CAQpE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAarD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAc/E;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAWlE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAW9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAOrF"}
|
|
@@ -0,0 +1,118 @@
|
|
|
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.validateExchange = validateExchange;
|
|
7
|
+
exports.validateSymbol = validateSymbol;
|
|
8
|
+
exports.validateOrderId = validateOrderId;
|
|
9
|
+
exports.validatePositiveNumber = validatePositiveNumber;
|
|
10
|
+
exports.validateOrderType = validateOrderType;
|
|
11
|
+
exports.validateOrderSide = validateOrderSide;
|
|
12
|
+
exports.requireOptions = requireOptions;
|
|
13
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
14
|
+
const exchange_factory_1 = require("../exchange-factory");
|
|
15
|
+
/**
|
|
16
|
+
* Validate exchange parameter
|
|
17
|
+
* @param exchange Exchange name to validate
|
|
18
|
+
* @returns Valid exchange name
|
|
19
|
+
*/
|
|
20
|
+
function validateExchange(exchange) {
|
|
21
|
+
if (!exchange_factory_1.ExchangeFactory.isSupported(exchange)) {
|
|
22
|
+
const supportedExchanges = exchange_factory_1.ExchangeFactory.getSupportedExchanges().join(', ');
|
|
23
|
+
console.error(chalk_1.default.red(`❌ Unsupported exchange: ${exchange}`));
|
|
24
|
+
console.log(chalk_1.default.yellow(`Supported exchanges: ${supportedExchanges}`));
|
|
25
|
+
process.exit(1);
|
|
26
|
+
}
|
|
27
|
+
return exchange;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate symbol format
|
|
31
|
+
* @param symbol Trading pair symbol to validate (e.g., BTC/USDT)
|
|
32
|
+
* @returns Valid symbol
|
|
33
|
+
*/
|
|
34
|
+
function validateSymbol(symbol) {
|
|
35
|
+
if (!symbol) {
|
|
36
|
+
console.error(chalk_1.default.red('❌ Symbol is required'));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
if (!/^[A-Za-z]+\/[A-Za-z]+$/.test(symbol) && !/^[A-Za-z]+[A-Za-z]+$/.test(symbol)) {
|
|
40
|
+
console.error(chalk_1.default.red(`❌ Invalid symbol format: ${symbol}`));
|
|
41
|
+
console.log(chalk_1.default.yellow('Expected format: BTC/USDT or BTCUSDT'));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
return symbol.toUpperCase();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Validate order ID
|
|
48
|
+
* @param orderId Order ID to validate
|
|
49
|
+
* @returns Valid order ID
|
|
50
|
+
*/
|
|
51
|
+
function validateOrderId(orderId) {
|
|
52
|
+
if (!orderId || orderId.trim().length === 0) {
|
|
53
|
+
console.error(chalk_1.default.red('❌ Order ID is required'));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
return orderId.trim();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Validate positive number
|
|
60
|
+
* @param value Value to validate
|
|
61
|
+
* @param fieldName Name of the field for error messages
|
|
62
|
+
* @returns Valid positive number
|
|
63
|
+
*/
|
|
64
|
+
function validatePositiveNumber(value, fieldName) {
|
|
65
|
+
const num = parseFloat(value);
|
|
66
|
+
if (isNaN(num)) {
|
|
67
|
+
console.error(chalk_1.default.red(`❌ ${fieldName} must be a valid number`));
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
if (num <= 0) {
|
|
71
|
+
console.error(chalk_1.default.red(`❌ ${fieldName} must be a positive number`));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
return num;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Validate order type
|
|
78
|
+
* @param type Order type to validate
|
|
79
|
+
* @returns Valid order type
|
|
80
|
+
*/
|
|
81
|
+
function validateOrderType(type) {
|
|
82
|
+
const validTypes = ['market', 'limit'];
|
|
83
|
+
const lowerType = type.toLowerCase();
|
|
84
|
+
if (!validTypes.includes(lowerType)) {
|
|
85
|
+
console.error(chalk_1.default.red(`❌ Invalid order type: ${type}`));
|
|
86
|
+
console.log(chalk_1.default.yellow(`Valid types: ${validTypes.join(', ')}`));
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
return lowerType;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Validate order side
|
|
93
|
+
* @param side Order side to validate
|
|
94
|
+
* @returns Valid order side
|
|
95
|
+
*/
|
|
96
|
+
function validateOrderSide(side) {
|
|
97
|
+
const validSides = ['buy', 'sell'];
|
|
98
|
+
const lowerSide = side.toLowerCase();
|
|
99
|
+
if (!validSides.includes(lowerSide)) {
|
|
100
|
+
console.error(chalk_1.default.red(`❌ Invalid order side: ${side}`));
|
|
101
|
+
console.log(chalk_1.default.yellow(`Valid sides: ${validSides.join(', ')}`));
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
return lowerSide;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if required options are provided
|
|
108
|
+
* @param options Object containing options to check
|
|
109
|
+
* @param required Array of required option names
|
|
110
|
+
*/
|
|
111
|
+
function requireOptions(options, required) {
|
|
112
|
+
const missing = required.filter(key => !options[key]);
|
|
113
|
+
if (missing.length > 0) {
|
|
114
|
+
console.error(chalk_1.default.red(`❌ Missing required options: ${missing.join(', ')}`));
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/cli/utils/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
interface EnvironmentConfig {
|
|
2
|
+
mexc: {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
secret: string;
|
|
5
|
+
uid?: string;
|
|
6
|
+
};
|
|
7
|
+
gateio?: {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
secret: string;
|
|
10
|
+
};
|
|
11
|
+
bitget?: {
|
|
12
|
+
apiKey: string;
|
|
13
|
+
secret: string;
|
|
14
|
+
passphrase: string;
|
|
15
|
+
};
|
|
16
|
+
kraken?: {
|
|
17
|
+
apiKey: string;
|
|
18
|
+
secret: string;
|
|
19
|
+
};
|
|
20
|
+
logLevel: string;
|
|
21
|
+
nodeEnv: string;
|
|
22
|
+
}
|
|
23
|
+
export declare const config: EnvironmentConfig;
|
|
24
|
+
export default config;
|
|
25
|
+
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/config/environment.ts"],"names":[],"mappings":"AAOA,UAAU,iBAAiB;IACzB,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IAGF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAEF,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAqED,eAAO,MAAM,MAAM,mBAAkC,CAAC;AACtD,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
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.config = void 0;
|
|
7
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
+
const utils_1 = require("../utils");
|
|
9
|
+
dotenv_1.default.config();
|
|
10
|
+
const logger = (0, utils_1.createLogger)('environment-validator');
|
|
11
|
+
class EnvironmentValidator {
|
|
12
|
+
static validateRequired(key, value) {
|
|
13
|
+
if (!value || value.trim() === '') {
|
|
14
|
+
throw new Error(`Required environment variable ${key} is missing or empty`);
|
|
15
|
+
}
|
|
16
|
+
return value.trim();
|
|
17
|
+
}
|
|
18
|
+
static validateOptional(value) {
|
|
19
|
+
return value && value.trim() !== '' ? value.trim() : undefined;
|
|
20
|
+
}
|
|
21
|
+
static validate() {
|
|
22
|
+
try {
|
|
23
|
+
const config = {
|
|
24
|
+
mexc: {
|
|
25
|
+
apiKey: this.validateRequired('MEXC_API_KEY', process.env.MEXC_API_KEY),
|
|
26
|
+
secret: this.validateRequired('MEXC_SECRET', process.env.MEXC_SECRET),
|
|
27
|
+
uid: this.validateOptional(process.env.MEXC_UID),
|
|
28
|
+
},
|
|
29
|
+
logLevel: process.env.LOG_LEVEL || 'info',
|
|
30
|
+
nodeEnv: process.env.NODE_ENV || 'development',
|
|
31
|
+
};
|
|
32
|
+
if (process.env.GATEIO_API_KEY && process.env.GATEIO_SECRET) {
|
|
33
|
+
config.gateio = {
|
|
34
|
+
apiKey: process.env.GATEIO_API_KEY,
|
|
35
|
+
secret: process.env.GATEIO_SECRET,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (process.env.BITGET_API_KEY && process.env.BITGET_SECRET && process.env.BITGET_PASSPHRASE) {
|
|
39
|
+
config.bitget = {
|
|
40
|
+
apiKey: process.env.BITGET_API_KEY,
|
|
41
|
+
secret: process.env.BITGET_SECRET,
|
|
42
|
+
passphrase: process.env.BITGET_PASSPHRASE,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
if (process.env.KRAKEN_API_KEY && process.env.KRAKEN_SECRET) {
|
|
46
|
+
config.kraken = {
|
|
47
|
+
apiKey: process.env.KRAKEN_API_KEY,
|
|
48
|
+
secret: process.env.KRAKEN_SECRET,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const validLogLevels = ['error', 'warn', 'info', 'debug'];
|
|
52
|
+
if (!validLogLevels.includes(config.logLevel)) {
|
|
53
|
+
const errorMessage = `Invalid LOG_LEVEL: ${config.logLevel}. Must be one of: ${validLogLevels.join(', ')}`;
|
|
54
|
+
logger.error('Environment validation failed', { error: errorMessage });
|
|
55
|
+
logger.error('Please check your .env file and ensure all required variables are set');
|
|
56
|
+
logger.error('See .env.example for reference');
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
return config;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
63
|
+
logger.error('Environment validation failed', { error: errorMessage });
|
|
64
|
+
logger.error('Please check your .env file and ensure all required variables are set');
|
|
65
|
+
logger.error('See .env.example for reference');
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.config = EnvironmentValidator.validate();
|
|
71
|
+
exports.default = exports.config;
|
|
72
|
+
//# sourceMappingURL=environment.js.map
|