@3rd-eye-labs/openmm 0.0.1 → 0.1.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 (443) hide show
  1. package/README.md +6 -1
  2. package/dist/cli/cli.js +4 -5
  3. package/dist/cli/cli.js.map +1 -1
  4. package/dist/cli/commands/balance.d.ts.map +1 -1
  5. package/dist/cli/commands/balance.js +1 -1
  6. package/dist/cli/commands/balance.js.map +1 -1
  7. package/dist/cli/commands/grid.d.ts +3 -0
  8. package/dist/cli/commands/grid.d.ts.map +1 -0
  9. package/dist/cli/commands/grid.js +103 -0
  10. package/dist/cli/commands/grid.js.map +1 -0
  11. package/dist/cli/commands/multi-trade.d.ts +3 -0
  12. package/dist/cli/commands/multi-trade.d.ts.map +1 -0
  13. package/dist/cli/commands/multi-trade.js +175 -0
  14. package/dist/cli/commands/multi-trade.js.map +1 -0
  15. package/dist/cli/commands/orderbook.js +1 -1
  16. package/dist/cli/commands/orderbook.js.map +1 -1
  17. package/dist/cli/commands/orders.d.ts.map +1 -1
  18. package/dist/cli/commands/orders.js +3 -4
  19. package/dist/cli/commands/orders.js.map +1 -1
  20. package/dist/cli/commands/pool-discovery.d.ts.map +1 -1
  21. package/dist/cli/commands/pool-discovery.js +15 -8
  22. package/dist/cli/commands/pool-discovery.js.map +1 -1
  23. package/dist/cli/commands/price-comparison.d.ts +3 -0
  24. package/dist/cli/commands/price-comparison.d.ts.map +1 -0
  25. package/dist/cli/commands/price-comparison.js +103 -0
  26. package/dist/cli/commands/price-comparison.js.map +1 -0
  27. package/dist/cli/commands/ticker.d.ts.map +1 -1
  28. package/dist/cli/commands/ticker.js.map +1 -1
  29. package/dist/cli/commands/trade.d.ts.map +1 -1
  30. package/dist/cli/commands/trade.js +135 -18
  31. package/dist/cli/commands/trade.js.map +1 -1
  32. package/dist/cli/commands/trades.d.ts.map +1 -1
  33. package/dist/cli/commands/trades.js +2 -3
  34. package/dist/cli/commands/trades.js.map +1 -1
  35. package/dist/cli/exchange-factory.d.ts.map +1 -1
  36. package/dist/cli/exchange-factory.js +6 -6
  37. package/dist/cli/exchange-factory.js.map +1 -1
  38. package/dist/cli/pool-discovery-core.d.ts +2 -1
  39. package/dist/cli/pool-discovery-core.d.ts.map +1 -1
  40. package/dist/cli/pool-discovery-core.js +69 -39
  41. package/dist/cli/pool-discovery-core.js.map +1 -1
  42. package/dist/cli/pool-discovery.d.ts +56 -0
  43. package/dist/cli/pool-discovery.d.ts.map +1 -0
  44. package/dist/cli/pool-discovery.js +283 -0
  45. package/dist/cli/pool-discovery.js.map +1 -0
  46. package/dist/cli/utils/error-handler.d.ts.map +1 -1
  47. package/dist/cli/utils/error-handler.js +6 -5
  48. package/dist/cli/utils/error-handler.js.map +1 -1
  49. package/dist/config/environment.d.ts.map +1 -1
  50. package/dist/config/environment.js +3 -1
  51. package/dist/config/environment.js.map +1 -1
  52. package/dist/config/launcher-config.d.ts +13 -0
  53. package/dist/config/launcher-config.d.ts.map +1 -1
  54. package/dist/config/launcher-config.js +3 -1
  55. package/dist/config/launcher-config.js.map +1 -1
  56. package/dist/config/price-aggregation.d.ts +1 -1
  57. package/dist/config/price-aggregation.d.ts.map +1 -1
  58. package/dist/config/price-aggregation.js +20 -20
  59. package/dist/config/price-aggregation.js.map +1 -1
  60. package/dist/core/exchange/base-exchange-connector.d.ts.map +1 -1
  61. package/dist/core/exchange/base-exchange-connector.js +1 -5
  62. package/dist/core/exchange/base-exchange-connector.js.map +1 -1
  63. package/dist/core/exchange/base-exchange-data-mapper.d.ts.map +1 -1
  64. package/dist/core/exchange/base-exchange-data-mapper.js +1 -1
  65. package/dist/core/exchange/base-exchange-data-mapper.js.map +1 -1
  66. package/dist/core/price-aggregation/cardano-price-service.d.ts +2 -2
  67. package/dist/core/price-aggregation/cardano-price-service.d.ts.map +1 -1
  68. package/dist/core/price-aggregation/cardano-price-service.js +13 -13
  69. package/dist/core/price-aggregation/cardano-price-service.js.map +1 -1
  70. package/dist/core/price-aggregation/index.d.ts +1 -1
  71. package/dist/core/price-aggregation/index.d.ts.map +1 -1
  72. package/dist/core/price-aggregation/iris-api-client.d.ts.map +1 -1
  73. package/dist/core/price-aggregation/iris-api-client.js +5 -5
  74. package/dist/core/price-aggregation/iris-api-client.js.map +1 -1
  75. package/dist/core/price-aggregation/iris-pool-discovery.d.ts +2 -2
  76. package/dist/core/price-aggregation/iris-pool-discovery.d.ts.map +1 -1
  77. package/dist/core/price-aggregation/iris-pool-discovery.js +3 -3
  78. package/dist/core/price-aggregation/iris-pool-discovery.js.map +1 -1
  79. package/dist/core/price-aggregation/multi-exchange-price-service.d.ts +38 -0
  80. package/dist/core/price-aggregation/multi-exchange-price-service.d.ts.map +1 -0
  81. package/dist/core/price-aggregation/multi-exchange-price-service.js +123 -0
  82. package/dist/core/price-aggregation/multi-exchange-price-service.js.map +1 -0
  83. package/dist/core/price-aggregation/price-cache.d.ts +55 -0
  84. package/dist/core/price-aggregation/price-cache.d.ts.map +1 -0
  85. package/dist/core/price-aggregation/price-cache.js +152 -0
  86. package/dist/core/price-aggregation/price-cache.js.map +1 -0
  87. package/dist/core/price-aggregation/price-calculator.d.ts.map +1 -1
  88. package/dist/core/price-aggregation/price-calculator.js +3 -3
  89. package/dist/core/price-aggregation/price-calculator.js.map +1 -1
  90. package/dist/core/risk-management/risk-manager.d.ts.map +1 -1
  91. package/dist/core/risk-management/risk-manager.js +2 -2
  92. package/dist/core/risk-management/risk-manager.js.map +1 -1
  93. package/dist/core/strategy/strategy-factory.d.ts +5 -0
  94. package/dist/core/strategy/strategy-factory.d.ts.map +1 -1
  95. package/dist/core/strategy/strategy-factory.js +127 -5
  96. package/dist/core/strategy/strategy-factory.js.map +1 -1
  97. package/dist/examples/mexc-connector-comprehensive-test.d.ts +15 -0
  98. package/dist/examples/mexc-connector-comprehensive-test.d.ts.map +1 -0
  99. package/dist/examples/mexc-connector-comprehensive-test.js +514 -0
  100. package/dist/examples/mexc-connector-comprehensive-test.js.map +1 -0
  101. package/dist/examples/mexc-order-update-test.d.ts +4 -0
  102. package/dist/examples/mexc-order-update-test.d.ts.map +1 -0
  103. package/dist/examples/mexc-order-update-test.js +186 -0
  104. package/dist/examples/mexc-order-update-test.js.map +1 -0
  105. package/dist/examples/mexc-test.d.ts +9 -0
  106. package/dist/examples/mexc-test.d.ts.map +1 -0
  107. package/dist/examples/mexc-test.js +218 -0
  108. package/dist/examples/mexc-test.js.map +1 -0
  109. package/dist/examples/mexc-trades-debug.d.ts +2 -0
  110. package/dist/examples/mexc-trades-debug.d.ts.map +1 -0
  111. package/dist/examples/mexc-trades-debug.js +101 -0
  112. package/dist/examples/mexc-trades-debug.js.map +1 -0
  113. package/dist/examples/mexc-trades-subscription-debug.d.ts +2 -0
  114. package/dist/examples/mexc-trades-subscription-debug.d.ts.map +1 -0
  115. package/dist/examples/mexc-trades-subscription-debug.js +150 -0
  116. package/dist/examples/mexc-trades-subscription-debug.js.map +1 -0
  117. package/dist/examples/mexc-websocket-test.d.ts +8 -0
  118. package/dist/examples/mexc-websocket-test.d.ts.map +1 -0
  119. package/dist/examples/mexc-websocket-test.js +115 -0
  120. package/dist/examples/mexc-websocket-test.js.map +1 -0
  121. package/dist/examples/test-protobuf-status-detection.d.ts +9 -0
  122. package/dist/examples/test-protobuf-status-detection.d.ts.map +1 -0
  123. package/dist/examples/test-protobuf-status-detection.js +83 -0
  124. package/dist/examples/test-protobuf-status-detection.js.map +1 -0
  125. package/dist/exchanges/base-exchange-connector.d.ts +33 -0
  126. package/dist/exchanges/base-exchange-connector.d.ts.map +1 -0
  127. package/dist/exchanges/base-exchange-connector.js +55 -0
  128. package/dist/exchanges/base-exchange-connector.js.map +1 -0
  129. package/dist/exchanges/bitget/bitget-auth.d.ts +66 -0
  130. package/dist/exchanges/bitget/bitget-auth.d.ts.map +1 -0
  131. package/dist/exchanges/bitget/bitget-auth.js +203 -0
  132. package/dist/exchanges/bitget/bitget-auth.js.map +1 -0
  133. package/dist/exchanges/bitget/bitget-connector.d.ts +255 -0
  134. package/dist/exchanges/bitget/bitget-connector.d.ts.map +1 -0
  135. package/dist/exchanges/bitget/bitget-connector.js +709 -0
  136. package/dist/exchanges/bitget/bitget-connector.js.map +1 -0
  137. package/dist/exchanges/bitget/bitget-data-mapper.d.ts +47 -0
  138. package/dist/exchanges/bitget/bitget-data-mapper.d.ts.map +1 -0
  139. package/dist/exchanges/bitget/bitget-data-mapper.js +147 -0
  140. package/dist/exchanges/bitget/bitget-data-mapper.js.map +1 -0
  141. package/dist/exchanges/bitget/bitget-user-stream.d.ts +126 -0
  142. package/dist/exchanges/bitget/bitget-user-stream.d.ts.map +1 -0
  143. package/dist/exchanges/bitget/bitget-user-stream.js +474 -0
  144. package/dist/exchanges/bitget/bitget-user-stream.js.map +1 -0
  145. package/dist/exchanges/bitget/bitget-utils.d.ts +17 -0
  146. package/dist/exchanges/bitget/bitget-utils.d.ts.map +1 -0
  147. package/dist/exchanges/bitget/bitget-utils.js +60 -0
  148. package/dist/exchanges/bitget/bitget-utils.js.map +1 -0
  149. package/dist/exchanges/bitget/bitget-websocket.d.ts +124 -0
  150. package/dist/exchanges/bitget/bitget-websocket.d.ts.map +1 -0
  151. package/dist/exchanges/bitget/bitget-websocket.js +434 -0
  152. package/dist/exchanges/bitget/bitget-websocket.js.map +1 -0
  153. package/dist/exchanges/gateio/gateio-auth.d.ts +69 -0
  154. package/dist/exchanges/gateio/gateio-auth.d.ts.map +1 -0
  155. package/dist/exchanges/gateio/gateio-auth.js +205 -0
  156. package/dist/exchanges/gateio/gateio-auth.js.map +1 -0
  157. package/dist/exchanges/gateio/gateio-connector.d.ts +182 -0
  158. package/dist/exchanges/gateio/gateio-connector.d.ts.map +1 -0
  159. package/dist/exchanges/gateio/gateio-connector.js +605 -0
  160. package/dist/exchanges/gateio/gateio-connector.js.map +1 -0
  161. package/dist/exchanges/gateio/gateio-data-mapper.d.ts +57 -0
  162. package/dist/exchanges/gateio/gateio-data-mapper.d.ts.map +1 -0
  163. package/dist/exchanges/gateio/gateio-data-mapper.js +184 -0
  164. package/dist/exchanges/gateio/gateio-data-mapper.js.map +1 -0
  165. package/dist/exchanges/gateio/gateio-user-stream.d.ts +120 -0
  166. package/dist/exchanges/gateio/gateio-user-stream.d.ts.map +1 -0
  167. package/dist/exchanges/gateio/gateio-user-stream.js +384 -0
  168. package/dist/exchanges/gateio/gateio-user-stream.js.map +1 -0
  169. package/dist/exchanges/gateio/gateio-utils.d.ts +45 -0
  170. package/dist/exchanges/gateio/gateio-utils.d.ts.map +1 -0
  171. package/dist/exchanges/gateio/gateio-utils.js +138 -0
  172. package/dist/exchanges/gateio/gateio-utils.js.map +1 -0
  173. package/dist/exchanges/gateio/gateio-websocket.d.ts +145 -0
  174. package/dist/exchanges/gateio/gateio-websocket.d.ts.map +1 -0
  175. package/dist/exchanges/gateio/gateio-websocket.js +469 -0
  176. package/dist/exchanges/gateio/gateio-websocket.js.map +1 -0
  177. package/dist/exchanges/kraken/kraken-auth.d.ts +12 -0
  178. package/dist/exchanges/kraken/kraken-auth.d.ts.map +1 -0
  179. package/dist/exchanges/kraken/kraken-auth.js +68 -0
  180. package/dist/exchanges/kraken/kraken-auth.js.map +1 -0
  181. package/dist/exchanges/kraken/kraken-connector.d.ts +38 -0
  182. package/dist/exchanges/kraken/kraken-connector.d.ts.map +1 -0
  183. package/dist/exchanges/kraken/kraken-connector.js +355 -0
  184. package/dist/exchanges/kraken/kraken-connector.js.map +1 -0
  185. package/dist/exchanges/kraken/kraken-data-mapper.d.ts +14 -0
  186. package/dist/exchanges/kraken/kraken-data-mapper.d.ts.map +1 -0
  187. package/dist/exchanges/kraken/kraken-data-mapper.js +169 -0
  188. package/dist/exchanges/kraken/kraken-data-mapper.js.map +1 -0
  189. package/dist/exchanges/kraken/kraken-utils.d.ts +52 -0
  190. package/dist/exchanges/kraken/kraken-utils.d.ts.map +1 -0
  191. package/dist/exchanges/kraken/kraken-utils.js +206 -0
  192. package/dist/exchanges/kraken/kraken-utils.js.map +1 -0
  193. package/dist/exchanges/kraken/kraken-websocket.d.ts +64 -0
  194. package/dist/exchanges/kraken/kraken-websocket.d.ts.map +1 -0
  195. package/dist/exchanges/kraken/kraken-websocket.js +667 -0
  196. package/dist/exchanges/kraken/kraken-websocket.js.map +1 -0
  197. package/dist/exchanges/kraken/test-kraken-websocket.d.ts +19 -0
  198. package/dist/exchanges/kraken/test-kraken-websocket.d.ts.map +1 -0
  199. package/dist/exchanges/kraken/test-kraken-websocket.js +413 -0
  200. package/dist/exchanges/kraken/test-kraken-websocket.js.map +1 -0
  201. package/dist/exchanges/mexc/mexc-auth.d.ts.map +1 -1
  202. package/dist/exchanges/mexc/mexc-auth.js +5 -5
  203. package/dist/exchanges/mexc/mexc-auth.js.map +1 -1
  204. package/dist/exchanges/mexc/mexc-connector.d.ts.map +1 -1
  205. package/dist/exchanges/mexc/mexc-connector.js +12 -13
  206. package/dist/exchanges/mexc/mexc-connector.js.map +1 -1
  207. package/dist/exchanges/mexc/mexc-data-mapper.d.ts.map +1 -1
  208. package/dist/exchanges/mexc/mexc-data-mapper.js +6 -6
  209. package/dist/exchanges/mexc/mexc-data-mapper.js.map +1 -1
  210. package/dist/exchanges/mexc/mexc-protobuf-decoder.d.ts.map +1 -1
  211. package/dist/exchanges/mexc/mexc-protobuf-decoder.js +14 -13
  212. package/dist/exchanges/mexc/mexc-protobuf-decoder.js.map +1 -1
  213. package/dist/exchanges/mexc/mexc-user-stream.d.ts.map +1 -1
  214. package/dist/exchanges/mexc/mexc-user-stream.js +5 -5
  215. package/dist/exchanges/mexc/mexc-user-stream.js.map +1 -1
  216. package/dist/exchanges/mexc/mexc-utils.d.ts +1 -5
  217. package/dist/exchanges/mexc/mexc-utils.d.ts.map +1 -1
  218. package/dist/exchanges/mexc/mexc-utils.js +33 -39
  219. package/dist/exchanges/mexc/mexc-utils.js.map +1 -1
  220. package/dist/exchanges/mexc/mexc-websocket.d.ts.map +1 -1
  221. package/dist/exchanges/mexc/mexc-websocket.js +45 -31
  222. package/dist/exchanges/mexc/mexc-websocket.js.map +1 -1
  223. package/dist/index.d.ts +4 -0
  224. package/dist/index.d.ts.map +1 -1
  225. package/dist/index.js +10 -1
  226. package/dist/index.js.map +1 -1
  227. package/dist/mcp/resources/index.d.ts +3 -0
  228. package/dist/mcp/resources/index.d.ts.map +1 -0
  229. package/dist/mcp/resources/index.js +11 -0
  230. package/dist/mcp/resources/index.js.map +1 -0
  231. package/dist/mcp/server.d.ts +4 -0
  232. package/dist/mcp/server.d.ts.map +1 -0
  233. package/dist/mcp/server.js +29 -0
  234. package/dist/mcp/server.js.map +1 -0
  235. package/dist/mcp/tools/index.d.ts +3 -0
  236. package/dist/mcp/tools/index.d.ts.map +1 -0
  237. package/dist/mcp/tools/index.js +12 -0
  238. package/dist/mcp/tools/index.js.map +1 -0
  239. package/dist/strategies/grid/grid-calculator.d.ts +63 -4
  240. package/dist/strategies/grid/grid-calculator.d.ts.map +1 -1
  241. package/dist/strategies/grid/grid-calculator.js +190 -15
  242. package/dist/strategies/grid/grid-calculator.js.map +1 -1
  243. package/dist/strategies/grid/grid-order-manager.d.ts +9 -4
  244. package/dist/strategies/grid/grid-order-manager.d.ts.map +1 -1
  245. package/dist/strategies/grid/grid-order-manager.js +58 -15
  246. package/dist/strategies/grid/grid-order-manager.js.map +1 -1
  247. package/dist/strategies/grid/grid-strategy.d.ts +11 -0
  248. package/dist/strategies/grid/grid-strategy.d.ts.map +1 -1
  249. package/dist/strategies/grid/grid-strategy.js +127 -20
  250. package/dist/strategies/grid/grid-strategy.js.map +1 -1
  251. package/dist/strategies/grid/volatility-tracker.d.ts +67 -0
  252. package/dist/strategies/grid/volatility-tracker.d.ts.map +1 -0
  253. package/dist/strategies/grid/volatility-tracker.js +109 -0
  254. package/dist/strategies/grid/volatility-tracker.js.map +1 -0
  255. package/dist/tests/fixtures/test-helpers.d.ts +5 -0
  256. package/dist/tests/fixtures/test-helpers.d.ts.map +1 -0
  257. package/dist/tests/fixtures/test-helpers.js +8 -0
  258. package/dist/tests/fixtures/test-helpers.js.map +1 -0
  259. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts +2 -0
  260. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.d.ts.map +1 -0
  261. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js +237 -0
  262. package/dist/tests/integration/exchanges/mexc/mexc-integration.test.js.map +1 -0
  263. package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts +2 -0
  264. package/dist/tests/integration/price-aggregation/cardano-price-service.test.d.ts.map +1 -0
  265. package/dist/tests/integration/price-aggregation/cardano-price-service.test.js +57 -0
  266. package/dist/tests/integration/price-aggregation/cardano-price-service.test.js.map +1 -0
  267. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts +2 -0
  268. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.d.ts.map +1 -0
  269. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js +141 -0
  270. package/dist/tests/integration/price-aggregation/price-aggregation-integration.test.js.map +1 -0
  271. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts +2 -0
  272. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.d.ts.map +1 -0
  273. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js +375 -0
  274. package/dist/tests/integration/strategies/grid/grid-strategy-e2e.test.js.map +1 -0
  275. package/dist/tests/unit/cli/exchange-factory.test.d.ts +2 -0
  276. package/dist/tests/unit/cli/exchange-factory.test.d.ts.map +1 -0
  277. package/dist/tests/unit/cli/exchange-factory.test.js +148 -0
  278. package/dist/tests/unit/cli/exchange-factory.test.js.map +1 -0
  279. package/dist/tests/unit/config/environment.test.d.ts +2 -0
  280. package/dist/tests/unit/config/environment.test.d.ts.map +1 -0
  281. package/dist/tests/unit/config/environment.test.js +158 -0
  282. package/dist/tests/unit/config/environment.test.js.map +1 -0
  283. package/dist/tests/unit/config/launcher-config.test.d.ts +2 -0
  284. package/dist/tests/unit/config/launcher-config.test.d.ts.map +1 -0
  285. package/dist/tests/unit/config/launcher-config.test.js +117 -0
  286. package/dist/tests/unit/config/launcher-config.test.js.map +1 -0
  287. package/dist/tests/unit/config/price-aggregation.test.d.ts +2 -0
  288. package/dist/tests/unit/config/price-aggregation.test.d.ts.map +1 -0
  289. package/dist/tests/unit/config/price-aggregation.test.js +144 -0
  290. package/dist/tests/unit/config/price-aggregation.test.js.map +1 -0
  291. package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts +2 -0
  292. package/dist/tests/unit/core/exchange/base-exchange-connector.test.d.ts.map +1 -0
  293. package/dist/tests/unit/core/exchange/base-exchange-connector.test.js +191 -0
  294. package/dist/tests/unit/core/exchange/base-exchange-connector.test.js.map +1 -0
  295. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts +2 -0
  296. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.d.ts.map +1 -0
  297. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js +324 -0
  298. package/dist/tests/unit/core/exchange/base-exchange-data-mapper.test.js.map +1 -0
  299. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts +2 -0
  300. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.d.ts.map +1 -0
  301. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js +177 -0
  302. package/dist/tests/unit/core/price-aggregation/cardano-price-service.test.js.map +1 -0
  303. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts +2 -0
  304. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.d.ts.map +1 -0
  305. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js +168 -0
  306. package/dist/tests/unit/core/price-aggregation/iris-api-client.test.js.map +1 -0
  307. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts +2 -0
  308. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.d.ts.map +1 -0
  309. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js +217 -0
  310. package/dist/tests/unit/core/price-aggregation/iris-pool-discovery.test.js.map +1 -0
  311. package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts +2 -0
  312. package/dist/tests/unit/core/price-aggregation/price-calculator.test.d.ts.map +1 -0
  313. package/dist/tests/unit/core/price-aggregation/price-calculator.test.js +229 -0
  314. package/dist/tests/unit/core/price-aggregation/price-calculator.test.js.map +1 -0
  315. package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts +2 -0
  316. package/dist/tests/unit/core/risk-management/risk-manager.test.d.ts.map +1 -0
  317. package/dist/tests/unit/core/risk-management/risk-manager.test.js +194 -0
  318. package/dist/tests/unit/core/risk-management/risk-manager.test.js.map +1 -0
  319. package/dist/tests/unit/core/strategy/base-strategy.test.d.ts +2 -0
  320. package/dist/tests/unit/core/strategy/base-strategy.test.d.ts.map +1 -0
  321. package/dist/tests/unit/core/strategy/base-strategy.test.js +254 -0
  322. package/dist/tests/unit/core/strategy/base-strategy.test.js.map +1 -0
  323. package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts +2 -0
  324. package/dist/tests/unit/core/strategy/strategy-factory.test.d.ts.map +1 -0
  325. package/dist/tests/unit/core/strategy/strategy-factory.test.js +213 -0
  326. package/dist/tests/unit/core/strategy/strategy-factory.test.js.map +1 -0
  327. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts +2 -0
  328. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.d.ts.map +1 -0
  329. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js +452 -0
  330. package/dist/tests/unit/exchanges/mexc/mexc-auth.test.js.map +1 -0
  331. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts +2 -0
  332. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.d.ts.map +1 -0
  333. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js +1419 -0
  334. package/dist/tests/unit/exchanges/mexc/mexc-connector.test.js.map +1 -0
  335. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts +2 -0
  336. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.d.ts.map +1 -0
  337. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js +435 -0
  338. package/dist/tests/unit/exchanges/mexc/mexc-data-mapper.test.js.map +1 -0
  339. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts +2 -0
  340. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.d.ts.map +1 -0
  341. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js +314 -0
  342. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-decoder.test.js.map +1 -0
  343. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts +2 -0
  344. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.d.ts.map +1 -0
  345. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js +178 -0
  346. package/dist/tests/unit/exchanges/mexc/mexc-protobuf-status-detection.test.js.map +1 -0
  347. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts +2 -0
  348. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.d.ts.map +1 -0
  349. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js +502 -0
  350. package/dist/tests/unit/exchanges/mexc/mexc-user-stream.test.js.map +1 -0
  351. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts +2 -0
  352. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.d.ts.map +1 -0
  353. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js +317 -0
  354. package/dist/tests/unit/exchanges/mexc/mexc-utils.test.js.map +1 -0
  355. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts +2 -0
  356. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.d.ts.map +1 -0
  357. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js +843 -0
  358. package/dist/tests/unit/exchanges/mexc/mexc-websocket.test.js.map +1 -0
  359. package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts +2 -0
  360. package/dist/tests/unit/strategies/grid/grid-calculator.test.d.ts.map +1 -0
  361. package/dist/tests/unit/strategies/grid/grid-calculator.test.js +67 -0
  362. package/dist/tests/unit/strategies/grid/grid-calculator.test.js.map +1 -0
  363. package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts +2 -0
  364. package/dist/tests/unit/strategies/grid/grid-order-manager.test.d.ts.map +1 -0
  365. package/dist/tests/unit/strategies/grid/grid-order-manager.test.js +211 -0
  366. package/dist/tests/unit/strategies/grid/grid-order-manager.test.js.map +1 -0
  367. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts +2 -0
  368. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.d.ts.map +1 -0
  369. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js +197 -0
  370. package/dist/tests/unit/strategies/grid/grid-strategy-simple.test.js.map +1 -0
  371. package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts +2 -0
  372. package/dist/tests/unit/strategies/grid/grid-strategy.test.d.ts.map +1 -0
  373. package/dist/tests/unit/strategies/grid/grid-strategy.test.js +429 -0
  374. package/dist/tests/unit/strategies/grid/grid-strategy.test.js.map +1 -0
  375. package/dist/tests/unit/utils/logger.test.d.ts +2 -0
  376. package/dist/tests/unit/utils/logger.test.d.ts.map +1 -0
  377. package/dist/tests/unit/utils/logger.test.js +260 -0
  378. package/dist/tests/unit/utils/logger.test.js.map +1 -0
  379. package/dist/tests/unit/utils/symbol-utils.test.d.ts +2 -0
  380. package/dist/tests/unit/utils/symbol-utils.test.d.ts.map +1 -0
  381. package/dist/tests/unit/utils/symbol-utils.test.js +178 -0
  382. package/dist/tests/unit/utils/symbol-utils.test.js.map +1 -0
  383. package/dist/types/bitget-raw.d.ts +75 -0
  384. package/dist/types/bitget-raw.d.ts.map +1 -0
  385. package/dist/types/bitget-raw.js +10 -0
  386. package/dist/types/bitget-raw.js.map +1 -0
  387. package/dist/types/bitget.d.ts +35 -0
  388. package/dist/types/bitget.d.ts.map +1 -0
  389. package/dist/types/bitget.js +8 -0
  390. package/dist/types/bitget.js.map +1 -0
  391. package/dist/types/gateio-raw.d.ts +104 -0
  392. package/dist/types/gateio-raw.d.ts.map +1 -0
  393. package/dist/types/gateio-raw.js +7 -0
  394. package/dist/types/gateio-raw.js.map +1 -0
  395. package/dist/types/gateio.d.ts +41 -0
  396. package/dist/types/gateio.d.ts.map +1 -0
  397. package/dist/types/gateio.js +8 -0
  398. package/dist/types/gateio.js.map +1 -0
  399. package/dist/types/grid.d.ts +77 -0
  400. package/dist/types/grid.d.ts.map +1 -1
  401. package/dist/types/index.d.ts +6 -0
  402. package/dist/types/index.d.ts.map +1 -1
  403. package/dist/types/index.js +6 -0
  404. package/dist/types/index.js.map +1 -1
  405. package/dist/types/kraken-raw.d.ts +89 -0
  406. package/dist/types/kraken-raw.d.ts.map +1 -0
  407. package/dist/types/kraken-raw.js +10 -0
  408. package/dist/types/kraken-raw.js.map +1 -0
  409. package/dist/types/kraken.d.ts +44 -0
  410. package/dist/types/kraken.d.ts.map +1 -0
  411. package/dist/types/kraken.js +3 -0
  412. package/dist/types/kraken.js.map +1 -0
  413. package/dist/types/mexc.d.ts +9 -0
  414. package/dist/types/mexc.d.ts.map +1 -1
  415. package/dist/types/price-aggregation.d.ts +31 -0
  416. package/dist/types/price-aggregation.d.ts.map +1 -0
  417. package/dist/types/price-aggregation.js +6 -0
  418. package/dist/types/price-aggregation.js.map +1 -0
  419. package/dist/types/price.d.ts +23 -0
  420. package/dist/types/price.d.ts.map +1 -1
  421. package/dist/types/strategy.d.ts +5 -0
  422. package/dist/types/strategy.d.ts.map +1 -1
  423. package/dist/utils/crypto.d.ts +15 -0
  424. package/dist/utils/crypto.d.ts.map +1 -0
  425. package/dist/utils/crypto.js +50 -0
  426. package/dist/utils/crypto.js.map +1 -0
  427. package/dist/utils/exchange-utils.d.ts +194 -0
  428. package/dist/utils/exchange-utils.d.ts.map +1 -0
  429. package/dist/utils/exchange-utils.js +455 -0
  430. package/dist/utils/exchange-utils.js.map +1 -0
  431. package/dist/utils/index.d.ts +1 -0
  432. package/dist/utils/index.d.ts.map +1 -1
  433. package/dist/utils/index.js +3 -1
  434. package/dist/utils/index.js.map +1 -1
  435. package/dist/utils/logger.d.ts +1 -1
  436. package/dist/utils/logger.d.ts.map +1 -1
  437. package/dist/utils/logger.js +7 -7
  438. package/dist/utils/logger.js.map +1 -1
  439. package/dist/utils/validation.d.ts +36 -0
  440. package/dist/utils/validation.d.ts.map +1 -0
  441. package/dist/utils/validation.js +174 -0
  442. package/dist/utils/validation.js.map +1 -0
  443. package/package.json +7 -1
@@ -0,0 +1,455 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExchangeUtils = void 0;
4
+ const symbol_utils_1 = require("./symbol-utils");
5
+ /**
6
+ * Shared utility functions for exchange operations
7
+ *
8
+ * This module provides common functionality that can be used across different exchange connectors
9
+ * to avoid code duplication and maintain consistency.
10
+ */
11
+ class ExchangeUtils {
12
+ /**
13
+ * Validate common order parameters
14
+ *
15
+ * @param symbol - Trading pair symbol
16
+ * @param type - Order type
17
+ * @param side - Order side
18
+ * @param amount - Order amount
19
+ * @param price - Optional price for limit orders
20
+ * @throws Error if parameters are invalid
21
+ */
22
+ static validateOrderParams(symbol, type, side, amount, price) {
23
+ if (!symbol || !type || !side || !amount) {
24
+ throw new Error('Missing required order parameters: symbol, type, side, and amount are required');
25
+ }
26
+ if (amount <= 0) {
27
+ throw new Error('Order amount must be greater than 0');
28
+ }
29
+ if (type === 'limit') {
30
+ if (!price || price <= 0) {
31
+ throw new Error('Price is required and must be greater than 0 for limit orders');
32
+ }
33
+ }
34
+ }
35
+ /**
36
+ * Create standardized order parameters for exchange APIs
37
+ *
38
+ * @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
39
+ * @param type - Order type ('market' or 'limit')
40
+ * @param side - Order side ('buy' or 'sell')
41
+ * @param amount - Order quantity/amount
42
+ * @param price - Optional. Price for limit orders (required for limit orders)
43
+ * @param exchangeFormat - Exchange-specific parameter formatting function
44
+ * @returns Record with order parameters formatted for the exchange
45
+ * @throws Error if required parameters are missing or invalid
46
+ */
47
+ static createOrderParams(symbol, type, side, amount, price, exchangeFormat) {
48
+ this.validateOrderParams(symbol, type, side, amount, price);
49
+ try {
50
+ const exchangeSymbol = (0, symbol_utils_1.toExchangeFormat)(symbol);
51
+ const baseParams = {
52
+ symbol: exchangeSymbol,
53
+ type,
54
+ side,
55
+ amount,
56
+ price,
57
+ };
58
+ if (exchangeFormat) {
59
+ return exchangeFormat(baseParams);
60
+ }
61
+ const params = {
62
+ symbol: exchangeSymbol,
63
+ side: side.toLowerCase(),
64
+ type: type.toLowerCase(),
65
+ amount: amount,
66
+ };
67
+ if (type === 'limit' && price !== undefined) {
68
+ params.price = price;
69
+ }
70
+ return params;
71
+ }
72
+ catch (error) {
73
+ throw new Error(`Failed to create order parameters: ${error}`);
74
+ }
75
+ }
76
+ /**
77
+ * Create Bitget-specific order parameters
78
+ *
79
+ * @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
80
+ * @param type - Order type ('market' or 'limit')
81
+ * @param side - Order side ('buy' or 'sell')
82
+ * @param amount - Order quantity/amount
83
+ * @param price - Optional. Price for limit orders
84
+ * @returns Bitget-formatted order parameters
85
+ */
86
+ static createBitgetOrderParams(symbol, type, side, amount, price) {
87
+ return this.createOrderParams(symbol, type, side, amount, price, params => {
88
+ this.validateBitgetMinimumOrder(params.amount, params.price, params.symbol);
89
+ const bitgetParams = {
90
+ symbol: params.symbol,
91
+ side: params.side.toLowerCase(),
92
+ orderType: params.type.toLowerCase(),
93
+ force: 'gtc',
94
+ size: this.formatBitgetQuantity(params.amount, params.symbol),
95
+ };
96
+ if (params.type === 'limit' && params.price !== undefined) {
97
+ bitgetParams.price = this.formatBitgetPrice(params.price, params.symbol);
98
+ }
99
+ return bitgetParams;
100
+ });
101
+ }
102
+ /**
103
+ * Format quantity for Bitget with appropriate precision
104
+ *
105
+ * @param quantity - The quantity to format
106
+ * @param symbol - Trading pair symbol for precision rules
107
+ * @returns Formatted quantity string with correct decimal places
108
+ */
109
+ static formatBitgetQuantity(quantity, symbol) {
110
+ const precision = this.getBitgetQuantityPrecision(symbol);
111
+ return quantity.toFixed(precision);
112
+ }
113
+ /**
114
+ * Format price for Bitget with appropriate precision
115
+ *
116
+ * @param price - The price to format
117
+ * @param symbol - Trading pair symbol for precision rules
118
+ * @returns Formatted price string with correct decimal places
119
+ */
120
+ static formatBitgetPrice(price, symbol) {
121
+ const precision = this.getBitgetPricePrecision(symbol);
122
+ return price.toFixed(precision);
123
+ }
124
+ /**
125
+ * Get quantity precision for Bitget symbol
126
+ * Based on common Bitget precision rules
127
+ *
128
+ * @param symbol - Trading pair symbol
129
+ * @returns Number of decimal places for quantity
130
+ */
131
+ static getBitgetQuantityPrecision(symbol) {
132
+ if (symbol.includes('USDT') || symbol.includes('USDC')) {
133
+ if (symbol.includes('SNEK') || symbol.includes('INDY') || symbol.includes('NIGHT')) {
134
+ return 2;
135
+ }
136
+ if (symbol.includes('BTC') || symbol.includes('ETH')) {
137
+ return 6;
138
+ }
139
+ }
140
+ return 4;
141
+ }
142
+ /**
143
+ * Get price precision for Bitget symbol
144
+ * Based on common Bitget precision rules
145
+ *
146
+ * @param symbol - Trading pair symbol
147
+ * @returns Number of decimal places for price
148
+ */
149
+ static getBitgetPricePrecision(symbol) {
150
+ if (symbol.includes('USDT') || symbol.includes('USDC')) {
151
+ if (symbol.includes('SNEK') || symbol.includes('NIGHT')) {
152
+ return 6;
153
+ }
154
+ if (symbol.includes('INDY')) {
155
+ return 6;
156
+ }
157
+ if (symbol.includes('BTC')) {
158
+ return 2;
159
+ }
160
+ if (symbol.includes('ETH')) {
161
+ return 3;
162
+ }
163
+ }
164
+ return 6;
165
+ }
166
+ /**
167
+ * Validate minimum order value for Bitget
168
+ * Bitget requires minimum order value of 1 USDT
169
+ *
170
+ * @param amount - Order quantity
171
+ * @param price - Order price
172
+ * @param symbol - Trading pair symbol
173
+ * @throws Error if order value is below minimum
174
+ */
175
+ static validateBitgetMinimumOrder(amount, price, symbol) {
176
+ if (price && symbol && (symbol.includes('USDT') || symbol.includes('USDC'))) {
177
+ const orderValue = amount * price;
178
+ const minimumValue = 1.0;
179
+ if (orderValue < minimumValue) {
180
+ throw new Error(`Bitget order value ${orderValue.toFixed(6)} USDT is below minimum ${minimumValue} USDT. Increase order size or price.`);
181
+ }
182
+ }
183
+ }
184
+ /**
185
+ * Create MEXC-specific order parameters
186
+ *
187
+ * @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
188
+ * @param type - Order type ('market' or 'limit')
189
+ * @param side - Order side ('buy' or 'sell')
190
+ * @param amount - Order quantity/amount
191
+ * @param price - Optional. Price for limit orders
192
+ * @returns MEXC-formatted order parameters
193
+ */
194
+ static createMexcOrderParams(symbol, type, side, amount, price) {
195
+ return this.createOrderParams(symbol, type, side, amount, price, params => {
196
+ const mexcParams = {
197
+ symbol: params.symbol,
198
+ side: params.side.toUpperCase(),
199
+ type: params.type.toUpperCase(),
200
+ quantity: params.amount.toString(),
201
+ };
202
+ if (params.type === 'limit' && params.price !== undefined) {
203
+ mexcParams.price = params.price.toString();
204
+ mexcParams.timeInForce = 'GTC';
205
+ }
206
+ return mexcParams;
207
+ });
208
+ }
209
+ /**
210
+ * Create Gate.io-specific order parameters
211
+ *
212
+ * @param symbol - Trading pair symbol (e.g., 'SNEK/USDT')
213
+ * @param type - Order type ('market' or 'limit')
214
+ * @param side - Order side ('buy' or 'sell')
215
+ * @param amount - Order quantity/amount
216
+ * @param price - Optional. Price for limit orders
217
+ * @returns Gate.io-formatted order parameters
218
+ */
219
+ static createGateioOrderParams(symbol, type, side, amount, price) {
220
+ this.validateOrderParams(symbol, type, side, amount, price);
221
+ this.validateGateioMinimumOrder(amount, price, symbol);
222
+ const gateioSymbol = symbol.replace('/', '_').toUpperCase();
223
+ const gateioParams = {
224
+ currency_pair: gateioSymbol,
225
+ side: side.toLowerCase(),
226
+ type: type.toLowerCase(),
227
+ account: 'spot',
228
+ amount: amount.toString(),
229
+ };
230
+ if (type === 'limit' && price !== undefined) {
231
+ gateioParams.price = price.toString();
232
+ }
233
+ return gateioParams;
234
+ }
235
+ /**
236
+ * Validate minimum order value for Gate.io
237
+ * Gate.io requires minimum order value of 3 USDT
238
+ *
239
+ * @param amount - Order quantity
240
+ * @param price - Order price
241
+ * @param symbol - Trading pair symbol
242
+ * @throws Error if order value is below minimum
243
+ */
244
+ static validateGateioMinimumOrder(amount, price, symbol) {
245
+ if (price && symbol && (symbol.includes('USDT') || symbol.includes('USDC'))) {
246
+ const orderValue = amount * price;
247
+ const minimumValue = 3.0;
248
+ if (orderValue < minimumValue) {
249
+ throw new Error(`Gate.io order value ${orderValue.toFixed(6)} USDT is below minimum ${minimumValue} USDT. Increase order size or price.`);
250
+ }
251
+ }
252
+ }
253
+ /**
254
+ * Create Kraken-specific order parameters
255
+ *
256
+ * @param symbol - Trading pair symbol (e.g., 'ADA/EUR')
257
+ * @param type - Order type ('market' or 'limit')
258
+ * @param side - Order side ('buy' or 'sell')
259
+ * @param amount - Order quantity/amount
260
+ * @param price - Optional. Price for limit orders
261
+ * @returns Kraken-formatted order parameters
262
+ */
263
+ static createKrakenOrderParams(symbol, type, side, amount, price) {
264
+ this.validateOrderParams(symbol, type, side, amount, price);
265
+ this.validateKrakenMinimumOrder(amount, price, symbol);
266
+ const krakenSymbol = symbol.replace('/', '').toUpperCase();
267
+ const krakenParams = {
268
+ pair: krakenSymbol,
269
+ type: side.toLowerCase(),
270
+ ordertype: type.toLowerCase(),
271
+ volume: this.formatKrakenQuantity(amount, symbol),
272
+ validate: 'false',
273
+ };
274
+ if (type === 'limit' && price !== undefined) {
275
+ krakenParams.price = this.formatKrakenPrice(price, symbol);
276
+ }
277
+ return krakenParams;
278
+ }
279
+ /**
280
+ * Validate minimum order value for Kraken
281
+ * Kraken requires different minimum order values based on quote currency
282
+ *
283
+ * @param amount - Order quantity
284
+ * @param price - Order price
285
+ * @param symbol - Trading pair symbol
286
+ * @throws Error if order value is below minimum
287
+ */
288
+ static validateKrakenMinimumOrder(amount, price, symbol) {
289
+ if (!price || !symbol)
290
+ return;
291
+ const orderValue = amount * price;
292
+ let minimumValue = 0;
293
+ let currency = '';
294
+ if (symbol.includes('USD') || symbol.includes('USDT') || symbol.includes('USDC')) {
295
+ minimumValue = 5.0;
296
+ currency = 'USD';
297
+ }
298
+ else if (symbol.includes('EUR')) {
299
+ minimumValue = 5.0;
300
+ currency = 'EUR';
301
+ }
302
+ else if (symbol.includes('GBP')) {
303
+ minimumValue = 5.0;
304
+ currency = 'GBP';
305
+ }
306
+ else if (symbol.includes('BTC')) {
307
+ minimumValue = 0.0001;
308
+ if (amount < minimumValue) {
309
+ throw new Error(`Kraken order amount ${amount.toFixed(8)} BTC is below minimum ${minimumValue} BTC.`);
310
+ }
311
+ return;
312
+ }
313
+ else if (symbol.includes('ETH')) {
314
+ minimumValue = 0.002;
315
+ if (amount < minimumValue) {
316
+ throw new Error(`Kraken order amount ${amount.toFixed(6)} ETH is below minimum ${minimumValue} ETH.`);
317
+ }
318
+ return;
319
+ }
320
+ if (minimumValue > 0 && orderValue < minimumValue) {
321
+ throw new Error(`Kraken order value ${orderValue.toFixed(2)} ${currency} is below minimum ${minimumValue} ${currency}. Increase order size or price.`);
322
+ }
323
+ }
324
+ /**
325
+ * Format quantity for Kraken with appropriate precision
326
+ *
327
+ * @param quantity - The quantity to format
328
+ * @param symbol - Trading pair symbol for precision rules
329
+ * @returns Formatted quantity string with correct decimal places
330
+ */
331
+ static formatKrakenQuantity(quantity, symbol) {
332
+ const precision = this.getKrakenQuantityPrecision(symbol);
333
+ return quantity.toFixed(precision);
334
+ }
335
+ /**
336
+ * Format price for Kraken with appropriate precision
337
+ *
338
+ * @param price - The price to format
339
+ * @param symbol - Trading pair symbol for precision rules
340
+ * @returns Formatted price string with correct decimal places
341
+ */
342
+ static formatKrakenPrice(price, symbol) {
343
+ const precision = this.getKrakenPricePrecision(symbol);
344
+ return price.toFixed(precision);
345
+ }
346
+ /**
347
+ * Get quantity precision for Kraken symbol
348
+ * Based on Kraken precision rules
349
+ *
350
+ * @param symbol - Trading pair symbol
351
+ * @returns Number of decimal places for quantity
352
+ */
353
+ static getKrakenQuantityPrecision(symbol) {
354
+ if (symbol.includes('BTC')) {
355
+ return 8;
356
+ }
357
+ if (symbol.includes('ETH')) {
358
+ return 6;
359
+ }
360
+ if (symbol.includes('ADA') || symbol.includes('XRP') || symbol.includes('DOT')) {
361
+ return 2;
362
+ }
363
+ return 4;
364
+ }
365
+ /**
366
+ * Get price precision for Kraken symbol
367
+ * Kraken has a maximum of 6 decimal places for prices
368
+ *
369
+ * @param symbol - Trading pair symbol
370
+ * @returns Number of decimal places for price
371
+ */
372
+ static getKrakenPricePrecision(symbol) {
373
+ if (symbol.includes('USD') || symbol.includes('EUR') || symbol.includes('GBP')) {
374
+ if (symbol.includes('BTC')) {
375
+ return 2;
376
+ }
377
+ if (symbol.includes('ETH')) {
378
+ return 3;
379
+ }
380
+ return 6;
381
+ }
382
+ if (symbol.includes('BTC')) {
383
+ return 8;
384
+ }
385
+ if (symbol.includes('ETH')) {
386
+ return 6;
387
+ }
388
+ return 6;
389
+ }
390
+ /**
391
+ * Get minimum order value for exchange
392
+ *
393
+ * @param exchange - Exchange name ('bitget', 'mexc', 'gateio', 'kraken', etc.)
394
+ * @param symbol - Trading pair symbol
395
+ * @returns Minimum order value in quote currency
396
+ */
397
+ static getMinimumOrderValue(exchange, symbol) {
398
+ switch (exchange.toLowerCase()) {
399
+ case 'bitget':
400
+ if (symbol.includes('USDT') || symbol.includes('USDC')) {
401
+ return 1.0;
402
+ }
403
+ return 0;
404
+ case 'mexc':
405
+ if (symbol.includes('USDT') || symbol.includes('USDC')) {
406
+ return 1.0;
407
+ }
408
+ return 0;
409
+ case 'gateio':
410
+ if (symbol.includes('USDT') || symbol.includes('USDC')) {
411
+ return 3.0;
412
+ }
413
+ return 0;
414
+ case 'kraken':
415
+ if (symbol.includes('USD') || symbol.includes('USDT') || symbol.includes('USDC')) {
416
+ return 5.0;
417
+ }
418
+ if (symbol.includes('EUR')) {
419
+ return 5.0;
420
+ }
421
+ if (symbol.includes('GBP')) {
422
+ return 5.0;
423
+ }
424
+ if (symbol.includes('BTC')) {
425
+ return 0.0001;
426
+ }
427
+ if (symbol.includes('ETH')) {
428
+ return 0.002;
429
+ }
430
+ return 0;
431
+ default:
432
+ return 0;
433
+ }
434
+ }
435
+ /**
436
+ * Validate symbol format for exchange compatibility
437
+ *
438
+ * @param symbol - Symbol to validate
439
+ * @returns True if symbol is valid, false otherwise
440
+ */
441
+ static isValidSymbol(symbol) {
442
+ if (!symbol) {
443
+ return false;
444
+ }
445
+ try {
446
+ const exchangeFormat = (0, symbol_utils_1.toExchangeFormat)(symbol);
447
+ return exchangeFormat.length > 0 && /^[A-Z0-9]+$/.test(exchangeFormat);
448
+ }
449
+ catch {
450
+ return false;
451
+ }
452
+ }
453
+ }
454
+ exports.ExchangeUtils = ExchangeUtils;
455
+ //# sourceMappingURL=exchange-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exchange-utils.js","sourceRoot":"","sources":["../../src/utils/exchange-utils.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  export { Logger, createLogger, logger, LogLevel, LogContext } from './logger';
2
+ export { ExchangeUtils } from './exchange-utils';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logger = exports.createLogger = exports.Logger = void 0;
3
+ exports.ExchangeUtils = exports.logger = exports.createLogger = exports.Logger = void 0;
4
4
  var logger_1 = require("./logger");
5
5
  Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_1.Logger; } });
6
6
  Object.defineProperty(exports, "createLogger", { enumerable: true, get: function () { return logger_1.createLogger; } });
7
7
  Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
8
+ var exchange_utils_1 = require("./exchange-utils");
9
+ Object.defineProperty(exports, "ExchangeUtils", { enumerable: true, get: function () { return exchange_utils_1.ExchangeUtils; } });
8
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8E;AAArE,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,gGAAA,MAAM,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;AAAA,mCAA8E;AAArE,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAAE,gGAAA,MAAM,OAAA;AACrC,mDAAiD;AAAxC,+GAAA,aAAa,OAAA"}
@@ -1,6 +1,6 @@
1
1
  export type LogLevel = 'error' | 'warn' | 'info' | 'debug';
2
2
  export interface LogContext {
3
- [key: string]: any;
3
+ [key: string]: unknown;
4
4
  }
5
5
  /**
6
6
  * Minimal Winston-based logger
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAyC7C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;CAUnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAyB,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAsC7C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIlD;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;CAUnD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;GAEG;AACH,eAAO,MAAM,MAAM,QAAyB,CAAC"}
@@ -47,25 +47,25 @@ class Logger {
47
47
  format: winston.format.combine(winston.format.timestamp({ format: 'HH:mm:ss' }), winston.format.colorize(), winston.format.printf(({ timestamp, level, message, service, ...meta }) => {
48
48
  const metaStr = Object.keys(meta).length ? ` ${JSON.stringify(meta)}` : '';
49
49
  return `${timestamp} [${service}] ${level}: ${message}${metaStr}`;
50
- }))
51
- })
50
+ })),
51
+ }),
52
52
  ];
53
53
  if (logFile) {
54
54
  const fileFormat = winston.format.combine(winston.format.timestamp(), winston.format.json());
55
55
  transports.push(new winston.transports.File({
56
56
  filename: logFile,
57
- format: fileFormat
57
+ format: fileFormat,
58
58
  }), new winston.transports.File({
59
59
  filename: logFile.replace('.log', '-error.log'),
60
60
  level: 'error',
61
- format: fileFormat
61
+ format: fileFormat,
62
62
  }));
63
63
  }
64
64
  this.winston = winston.createLogger({
65
65
  level: 'debug',
66
66
  defaultMeta: { service },
67
67
  transports,
68
- exitOnError: false
68
+ exitOnError: false,
69
69
  });
70
70
  }
71
71
  error(message, context) {
@@ -89,8 +89,8 @@ class Logger {
89
89
  error: {
90
90
  name: error.name,
91
91
  message: error.message,
92
- stack: error.stack
93
- }
92
+ stack: error.stack,
93
+ },
94
94
  });
95
95
  }
96
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { OrderType, OrderSide } from '../types';
2
+ export interface ValidationResult {
3
+ isValid: boolean;
4
+ errors: string[];
5
+ warnings?: string[];
6
+ }
7
+ export interface OrderValidationOptions {
8
+ minPrice?: number;
9
+ maxPrice?: number;
10
+ minAmount?: number;
11
+ maxAmount?: number;
12
+ minNotional?: number;
13
+ maxNotional?: number;
14
+ tickSize?: number;
15
+ stepSize?: number;
16
+ maxPrecision?: number;
17
+ }
18
+ export interface SymbolValidationOptions {
19
+ allowedExchanges?: string[];
20
+ supportedAssets?: string[];
21
+ minLength?: number;
22
+ maxLength?: number;
23
+ }
24
+ export declare class ValidationUtils {
25
+ private static readonly SYMBOL_REGEX;
26
+ static validateSymbol(symbol: string, options?: SymbolValidationOptions): ValidationResult;
27
+ static validatePrice(price: number, options?: OrderValidationOptions): ValidationResult;
28
+ static validateAmount(amount: number, options?: OrderValidationOptions): ValidationResult;
29
+ static validateOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number, options?: OrderValidationOptions): ValidationResult;
30
+ static validateApiCredentials(apiKey: string, apiSecret: string, passphrase?: string): ValidationResult;
31
+ static isValidOrderType(type: string): type is OrderType;
32
+ static isValidOrderSide(side: string): side is OrderSide;
33
+ static getDecimalPlaces(number: number): number;
34
+ }
35
+ export { ValidationUtils as default };
36
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAA4B;IAEhE,MAAM,CAAC,cAAc,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,uBAA4B,GACpC,gBAAgB;IAoCnB,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,sBAA2B,GACnC,gBAAgB;IAmCnB,MAAM,CAAC,cAAc,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,gBAAgB;IAmCnB,MAAM,CAAC,aAAa,CAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE,sBAA2B,GACnC,gBAAgB;IAkDnB,MAAM,CAAC,sBAAsB,CAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,GAClB,gBAAgB;IA6BnB,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS;IAIxD,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,SAAS;IAIxD,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;CAWhD;AAED,OAAO,EAAE,eAAe,IAAI,OAAO,EAAE,CAAC"}