@3rd-eye-labs/openmm 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +70 -0
  3. package/dist/cli/cli.d.ts +3 -0
  4. package/dist/cli/cli.d.ts.map +1 -0
  5. package/dist/cli/cli.js +43 -0
  6. package/dist/cli/cli.js.map +1 -0
  7. package/dist/cli/commands/balance.d.ts +3 -0
  8. package/dist/cli/commands/balance.d.ts.map +1 -0
  9. package/dist/cli/commands/balance.js +51 -0
  10. package/dist/cli/commands/balance.js.map +1 -0
  11. package/dist/cli/commands/orderbook.d.ts +3 -0
  12. package/dist/cli/commands/orderbook.d.ts.map +1 -0
  13. package/dist/cli/commands/orderbook.js +83 -0
  14. package/dist/cli/commands/orderbook.js.map +1 -0
  15. package/dist/cli/commands/orders.d.ts +3 -0
  16. package/dist/cli/commands/orders.d.ts.map +1 -0
  17. package/dist/cli/commands/orders.js +196 -0
  18. package/dist/cli/commands/orders.js.map +1 -0
  19. package/dist/cli/commands/pool-discovery.d.ts +3 -0
  20. package/dist/cli/commands/pool-discovery.d.ts.map +1 -0
  21. package/dist/cli/commands/pool-discovery.js +60 -0
  22. package/dist/cli/commands/pool-discovery.js.map +1 -0
  23. package/dist/cli/commands/ticker.d.ts +3 -0
  24. package/dist/cli/commands/ticker.d.ts.map +1 -0
  25. package/dist/cli/commands/ticker.js +51 -0
  26. package/dist/cli/commands/ticker.js.map +1 -0
  27. package/dist/cli/commands/trade.d.ts +3 -0
  28. package/dist/cli/commands/trade.d.ts.map +1 -0
  29. package/dist/cli/commands/trade.js +110 -0
  30. package/dist/cli/commands/trade.js.map +1 -0
  31. package/dist/cli/commands/trades.d.ts +3 -0
  32. package/dist/cli/commands/trades.d.ts.map +1 -0
  33. package/dist/cli/commands/trades.js +73 -0
  34. package/dist/cli/commands/trades.js.map +1 -0
  35. package/dist/cli/exchange-factory.d.ts +40 -0
  36. package/dist/cli/exchange-factory.d.ts.map +1 -0
  37. package/dist/cli/exchange-factory.js +77 -0
  38. package/dist/cli/exchange-factory.js.map +1 -0
  39. package/dist/cli/pool-discovery-core.d.ts +54 -0
  40. package/dist/cli/pool-discovery-core.d.ts.map +1 -0
  41. package/dist/cli/pool-discovery-core.js +193 -0
  42. package/dist/cli/pool-discovery-core.js.map +1 -0
  43. package/dist/cli/utils/error-handler.d.ts +40 -0
  44. package/dist/cli/utils/error-handler.d.ts.map +1 -0
  45. package/dist/cli/utils/error-handler.js +117 -0
  46. package/dist/cli/utils/error-handler.js.map +1 -0
  47. package/dist/cli/utils/validation.d.ts +45 -0
  48. package/dist/cli/utils/validation.d.ts.map +1 -0
  49. package/dist/cli/utils/validation.js +118 -0
  50. package/dist/cli/utils/validation.js.map +1 -0
  51. package/dist/config/environment.d.ts +25 -0
  52. package/dist/config/environment.d.ts.map +1 -0
  53. package/dist/config/environment.js +72 -0
  54. package/dist/config/environment.js.map +1 -0
  55. package/dist/config/index.d.ts +3 -0
  56. package/dist/config/index.d.ts.map +1 -0
  57. package/dist/config/index.js +21 -0
  58. package/dist/config/index.js.map +1 -0
  59. package/dist/config/launcher-config.d.ts +17 -0
  60. package/dist/config/launcher-config.d.ts.map +1 -0
  61. package/dist/config/launcher-config.js +14 -0
  62. package/dist/config/launcher-config.js.map +1 -0
  63. package/dist/config/price-aggregation.d.ts +49 -0
  64. package/dist/config/price-aggregation.d.ts.map +1 -0
  65. package/dist/config/price-aggregation.js +89 -0
  66. package/dist/config/price-aggregation.js.map +1 -0
  67. package/dist/core/exchange/base-exchange-connector.d.ts +45 -0
  68. package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -0
  69. package/dist/core/exchange/base-exchange-connector.js +43 -0
  70. package/dist/core/exchange/base-exchange-connector.js.map +1 -0
  71. package/dist/core/exchange/base-exchange-data-mapper.d.ts +58 -0
  72. package/dist/core/exchange/base-exchange-data-mapper.d.ts.map +1 -0
  73. package/dist/core/exchange/base-exchange-data-mapper.js +60 -0
  74. package/dist/core/exchange/base-exchange-data-mapper.js.map +1 -0
  75. package/dist/core/price-aggregation/cardano-price-service.d.ts +31 -0
  76. package/dist/core/price-aggregation/cardano-price-service.d.ts.map +1 -0
  77. package/dist/core/price-aggregation/cardano-price-service.js +157 -0
  78. package/dist/core/price-aggregation/cardano-price-service.js.map +1 -0
  79. package/dist/core/price-aggregation/index.d.ts +11 -0
  80. package/dist/core/price-aggregation/index.d.ts.map +1 -0
  81. package/dist/core/price-aggregation/index.js +21 -0
  82. package/dist/core/price-aggregation/index.js.map +1 -0
  83. package/dist/core/price-aggregation/iris-api-client.d.ts +16 -0
  84. package/dist/core/price-aggregation/iris-api-client.d.ts.map +1 -0
  85. package/dist/core/price-aggregation/iris-api-client.js +62 -0
  86. package/dist/core/price-aggregation/iris-api-client.js.map +1 -0
  87. package/dist/core/price-aggregation/iris-pool-discovery.d.ts +37 -0
  88. package/dist/core/price-aggregation/iris-pool-discovery.d.ts.map +1 -0
  89. package/dist/core/price-aggregation/iris-pool-discovery.js +123 -0
  90. package/dist/core/price-aggregation/iris-pool-discovery.js.map +1 -0
  91. package/dist/core/price-aggregation/price-calculator.d.ts +27 -0
  92. package/dist/core/price-aggregation/price-calculator.d.ts.map +1 -0
  93. package/dist/core/price-aggregation/price-calculator.js +84 -0
  94. package/dist/core/price-aggregation/price-calculator.js.map +1 -0
  95. package/dist/core/risk-management/risk-manager.d.ts +14 -0
  96. package/dist/core/risk-management/risk-manager.d.ts.map +1 -0
  97. package/dist/core/risk-management/risk-manager.js +40 -0
  98. package/dist/core/risk-management/risk-manager.js.map +1 -0
  99. package/dist/core/strategy/base-strategy.d.ts +26 -0
  100. package/dist/core/strategy/base-strategy.d.ts.map +1 -0
  101. package/dist/core/strategy/base-strategy.js +46 -0
  102. package/dist/core/strategy/base-strategy.js.map +1 -0
  103. package/dist/core/strategy/strategy-factory.d.ts +7 -0
  104. package/dist/core/strategy/strategy-factory.d.ts.map +1 -0
  105. package/dist/core/strategy/strategy-factory.js +64 -0
  106. package/dist/core/strategy/strategy-factory.js.map +1 -0
  107. package/dist/exchanges/mexc/mexc-auth.d.ts +42 -0
  108. package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -0
  109. package/dist/exchanges/mexc/mexc-auth.js +122 -0
  110. package/dist/exchanges/mexc/mexc-auth.js.map +1 -0
  111. package/dist/exchanges/mexc/mexc-connector.d.ts +125 -0
  112. package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -0
  113. package/dist/exchanges/mexc/mexc-connector.js +422 -0
  114. package/dist/exchanges/mexc/mexc-connector.js.map +1 -0
  115. package/dist/exchanges/mexc/mexc-data-mapper.d.ts +50 -0
  116. package/dist/exchanges/mexc/mexc-data-mapper.d.ts.map +1 -0
  117. package/dist/exchanges/mexc/mexc-data-mapper.js +127 -0
  118. package/dist/exchanges/mexc/mexc-data-mapper.js.map +1 -0
  119. package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts +43 -0
  120. package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts.map +1 -0
  121. package/dist/exchanges/mexc/mexc-protobuf-decoder.js +235 -0
  122. package/dist/exchanges/mexc/mexc-protobuf-decoder.js.map +1 -0
  123. package/dist/exchanges/mexc/mexc-user-stream.d.ts +81 -0
  124. package/dist/exchanges/mexc/mexc-user-stream.d.ts.map +1 -0
  125. package/dist/exchanges/mexc/mexc-user-stream.js +253 -0
  126. package/dist/exchanges/mexc/mexc-user-stream.js.map +1 -0
  127. package/dist/exchanges/mexc/mexc-utils.d.ts +31 -0
  128. package/dist/exchanges/mexc/mexc-utils.d.ts.map +1 -0
  129. package/dist/exchanges/mexc/mexc-utils.js +186 -0
  130. package/dist/exchanges/mexc/mexc-utils.js.map +1 -0
  131. package/dist/exchanges/mexc/mexc-websocket.d.ts +124 -0
  132. package/dist/exchanges/mexc/mexc-websocket.d.ts.map +1 -0
  133. package/dist/exchanges/mexc/mexc-websocket.js +496 -0
  134. package/dist/exchanges/mexc/mexc-websocket.js.map +1 -0
  135. package/dist/index.d.ts +12 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +42 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/strategies/grid/grid-calculator.d.ts +7 -0
  140. package/dist/strategies/grid/grid-calculator.d.ts.map +1 -0
  141. package/dist/strategies/grid/grid-calculator.js +34 -0
  142. package/dist/strategies/grid/grid-calculator.js.map +1 -0
  143. package/dist/strategies/grid/grid-order-manager.d.ts +23 -0
  144. package/dist/strategies/grid/grid-order-manager.d.ts.map +1 -0
  145. package/dist/strategies/grid/grid-order-manager.js +99 -0
  146. package/dist/strategies/grid/grid-order-manager.js.map +1 -0
  147. package/dist/strategies/grid/grid-strategy.d.ts +29 -0
  148. package/dist/strategies/grid/grid-strategy.d.ts.map +1 -0
  149. package/dist/strategies/grid/grid-strategy.js +185 -0
  150. package/dist/strategies/grid/grid-strategy.js.map +1 -0
  151. package/dist/types/account.d.ts +21 -0
  152. package/dist/types/account.d.ts.map +1 -0
  153. package/dist/types/account.js +3 -0
  154. package/dist/types/account.js.map +1 -0
  155. package/dist/types/exchange.d.ts +67 -0
  156. package/dist/types/exchange.d.ts.map +1 -0
  157. package/dist/types/exchange.js +3 -0
  158. package/dist/types/exchange.js.map +1 -0
  159. package/dist/types/grid.d.ts +10 -0
  160. package/dist/types/grid.d.ts.map +1 -0
  161. package/dist/types/grid.js +3 -0
  162. package/dist/types/grid.js.map +1 -0
  163. package/dist/types/index.d.ts +11 -0
  164. package/dist/types/index.d.ts.map +1 -0
  165. package/dist/types/index.js +27 -0
  166. package/dist/types/index.js.map +1 -0
  167. package/dist/types/iris.d.ts +58 -0
  168. package/dist/types/iris.d.ts.map +1 -0
  169. package/dist/types/iris.js +7 -0
  170. package/dist/types/iris.js.map +1 -0
  171. package/dist/types/market.d.ts +16 -0
  172. package/dist/types/market.d.ts.map +1 -0
  173. package/dist/types/market.js +3 -0
  174. package/dist/types/market.js.map +1 -0
  175. package/dist/types/mexc-raw.d.ts +87 -0
  176. package/dist/types/mexc-raw.d.ts.map +1 -0
  177. package/dist/types/mexc-raw.js +7 -0
  178. package/dist/types/mexc-raw.js.map +1 -0
  179. package/dist/types/mexc.d.ts +57 -0
  180. package/dist/types/mexc.d.ts.map +1 -0
  181. package/dist/types/mexc.js +8 -0
  182. package/dist/types/mexc.js.map +1 -0
  183. package/dist/types/price.d.ts +37 -0
  184. package/dist/types/price.d.ts.map +1 -0
  185. package/dist/types/price.js +7 -0
  186. package/dist/types/price.js.map +1 -0
  187. package/dist/types/risk.d.ts +22 -0
  188. package/dist/types/risk.d.ts.map +1 -0
  189. package/dist/types/risk.js +6 -0
  190. package/dist/types/risk.js.map +1 -0
  191. package/dist/types/strategy.d.ts +46 -0
  192. package/dist/types/strategy.d.ts.map +1 -0
  193. package/dist/types/strategy.js +3 -0
  194. package/dist/types/strategy.js.map +1 -0
  195. package/dist/utils/index.d.ts +2 -0
  196. package/dist/utils/index.d.ts.map +1 -0
  197. package/dist/utils/index.js +8 -0
  198. package/dist/utils/index.js.map +1 -0
  199. package/dist/utils/logger.d.ts +29 -0
  200. package/dist/utils/logger.d.ts.map +1 -0
  201. package/dist/utils/logger.js +108 -0
  202. package/dist/utils/logger.js.map +1 -0
  203. package/dist/utils/symbol-utils.d.ts +17 -0
  204. package/dist/utils/symbol-utils.d.ts.map +1 -0
  205. package/dist/utils/symbol-utils.js +41 -0
  206. package/dist/utils/symbol-utils.js.map +1 -0
  207. package/package.json +53 -0
@@ -0,0 +1,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":";;;;;AAOA,kCAWC;AAOD,wCAMC;AAMD,kCAEC;AAMD,kCAEC;AAMD,4BAEC;AAOD,oCAiCC;AAOD,wCAmBC;AAzHD,kDAA0B;AAE1B;;;;GAIG;AACH,SAAgB,WAAW,CAAC,KAAqB,EAAE,OAAgB;IACjE,MAAM,YAAY,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACvE,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAElD,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,UAAU,UAAU,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC;IAElE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACvF,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,cAAc,CAAC,EAAuB,EAAE,OAAe;IAC3E,IAAI,CAAC;QACH,MAAM,EAAE,EAAE,CAAC;IACb,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,WAAW,CAAC,KAAc,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAgB,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,OAAe;IACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAA2B,EAAE,OAAkB;IAC1E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,GAAG,CAAC,MAAM,EACV,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAClD,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CACpC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEvB,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEvB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;YAClC,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;YAC1D,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAgB,cAAc,CAAC,OAAY,EAAE,KAAc;IACzD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,gBAAgB,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,gBAAgB,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,gBAAgB,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,gBAAgB,eAAK,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAA8B,CAAC;aAC5D,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAgB,EAAE,EAAE,CAAC,CAAC;YACrC,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACzB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YACzB,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC,CAAC;QAEN,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACzD,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
@@ -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