@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,502 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const mexc_user_stream_1 = require("../../../../exchanges/mexc/mexc-user-stream");
4
+ const mexc_websocket_1 = require("../../../../exchanges/mexc/mexc-websocket");
5
+ const utils_1 = require("../../../../utils");
6
+ jest.mock('../../../../exchanges/mexc/mexc-websocket');
7
+ jest.mock('../../../../utils');
8
+ const MockedMexcWebSocket = mexc_websocket_1.MexcWebSocket;
9
+ const MockedCreateLogger = utils_1.createLogger;
10
+ describe('MexcUserStream', () => {
11
+ let mexcUserStream;
12
+ let mockMakeRequestFn;
13
+ let mockWebSocket;
14
+ let mockLogger;
15
+ const setupUserStream = async () => {
16
+ const mockResponse = { listenKey: 'test_listen_key_123' };
17
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
18
+ await mexcUserStream.connectUserDataStream();
19
+ };
20
+ const setupTradeSubscription = async () => {
21
+ const callback = jest.fn();
22
+ await mexcUserStream.subscribeUserTrades(callback);
23
+ const wrappedCallback = mockWebSocket.subscribeToUserData.mock.calls[0][0];
24
+ return { callback, wrappedCallback };
25
+ };
26
+ beforeEach(() => {
27
+ jest.clearAllMocks();
28
+ mockLogger = {
29
+ info: jest.fn(),
30
+ warn: jest.fn(),
31
+ error: jest.fn(),
32
+ debug: jest.fn()
33
+ };
34
+ MockedCreateLogger.mockReturnValue(mockLogger);
35
+ mockWebSocket = {
36
+ connectWebSocket: jest.fn().mockResolvedValue(undefined),
37
+ disconnectWebSocket: jest.fn().mockResolvedValue(undefined),
38
+ subscribeToUserData: jest.fn().mockResolvedValue('subscription_id_123'),
39
+ isConnected: jest.fn().mockReturnValue(true)
40
+ };
41
+ MockedMexcWebSocket.mockImplementation(() => mockWebSocket);
42
+ mockMakeRequestFn = jest.fn();
43
+ mexcUserStream = new mexc_user_stream_1.MexcUserStream(mockMakeRequestFn);
44
+ });
45
+ describe('constructor', () => {
46
+ it('should initialize with makeRequestFn', () => {
47
+ expect(mexcUserStream).toBeInstanceOf(mexc_user_stream_1.MexcUserStream);
48
+ expect(MockedCreateLogger).toHaveBeenCalledWith('mexc-user-stream');
49
+ });
50
+ });
51
+ describe('getListenKey()', () => {
52
+ it('should successfully get listen key', async () => {
53
+ const mockResponse = { listenKey: 'test_listen_key_123' };
54
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
55
+ const listenKey = await mexcUserStream.getListenKey();
56
+ expect(mockMakeRequestFn).toHaveBeenCalledWith('/userDataStream', {}, 'POST');
57
+ expect(listenKey).toBe('test_listen_key_123');
58
+ });
59
+ it('should throw error when no listen key in response', async () => {
60
+ mockMakeRequestFn.mockResolvedValue({});
61
+ await expect(mexcUserStream.getListenKey()).rejects.toThrow('No listen key received from API');
62
+ });
63
+ it('should handle API request errors', async () => {
64
+ const error = new Error('API request failed');
65
+ mockMakeRequestFn.mockRejectedValue(error);
66
+ await expect(mexcUserStream.getListenKey()).rejects.toThrow('Failed to get listen key: API request failed');
67
+ });
68
+ it('should handle non-Error exceptions', async () => {
69
+ mockMakeRequestFn.mockRejectedValue('String error');
70
+ await expect(mexcUserStream.getListenKey()).rejects.toThrow('Failed to get listen key: Unknown error');
71
+ });
72
+ });
73
+ describe('connectUserDataStream()', () => {
74
+ it('should successfully connect user data stream', async () => {
75
+ const mockResponse = { listenKey: 'test_listen_key_123' };
76
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
77
+ await mexcUserStream.connectUserDataStream();
78
+ expect(mockMakeRequestFn).toHaveBeenCalledWith('/userDataStream', {}, 'POST');
79
+ expect(MockedMexcWebSocket).toHaveBeenCalledWith('wss://wbs-api.mexc.com/ws?listenKey=test_listen_key_123');
80
+ expect(mockWebSocket.connectWebSocket).toHaveBeenCalled();
81
+ });
82
+ it('should reuse existing WebSocket if available', async () => {
83
+ const mockResponse = { listenKey: 'test_listen_key_123' };
84
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
85
+ await mexcUserStream.connectUserDataStream();
86
+ expect(MockedMexcWebSocket).toHaveBeenCalledTimes(1);
87
+ await mexcUserStream.connectUserDataStream();
88
+ expect(MockedMexcWebSocket).toHaveBeenCalledTimes(1);
89
+ expect(mockWebSocket.connectWebSocket).toHaveBeenCalledTimes(2);
90
+ });
91
+ it('should setup keep alive interval', async () => {
92
+ jest.useFakeTimers();
93
+ const setIntervalSpy = jest.spyOn(global, 'setInterval');
94
+ const mockResponse = { listenKey: 'test_listen_key_123' };
95
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
96
+ await mexcUserStream.connectUserDataStream();
97
+ expect(setIntervalSpy).toHaveBeenCalledWith(expect.any(Function), 30 * 60 * 1000);
98
+ setIntervalSpy.mockRestore();
99
+ jest.useRealTimers();
100
+ });
101
+ it('should handle keep alive errors', async () => {
102
+ const mockResponse = { listenKey: 'test_listen_key_123' };
103
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
104
+ await mexcUserStream.connectUserDataStream();
105
+ mockMakeRequestFn.mockRejectedValueOnce(new Error('Keep alive failed'));
106
+ await mexcUserStream.keepAliveListenKey();
107
+ expect(mockLogger.warn).toHaveBeenCalledWith('Failed to keep alive listen key', { error: expect.any(Error) });
108
+ });
109
+ it('should handle connection errors', async () => {
110
+ const error = new Error('Connection failed');
111
+ mockMakeRequestFn.mockRejectedValue(error);
112
+ await expect(mexcUserStream.connectUserDataStream()).rejects.toThrow('Failed to connect user data stream: Failed to get listen key: Connection failed');
113
+ });
114
+ it('should handle non-Error exceptions', async () => {
115
+ mockMakeRequestFn.mockRejectedValue('String error');
116
+ await expect(mexcUserStream.connectUserDataStream()).rejects.toThrow('Failed to connect user data stream: Failed to get listen key: Unknown error');
117
+ });
118
+ });
119
+ describe('disconnectUserDataStream()', () => {
120
+ beforeEach(async () => {
121
+ const mockResponse = { listenKey: 'test_listen_key_123' };
122
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
123
+ await mexcUserStream.connectUserDataStream();
124
+ });
125
+ it('should successfully disconnect user data stream', async () => {
126
+ await mexcUserStream.disconnectUserDataStream();
127
+ expect(mockWebSocket.disconnectWebSocket).toHaveBeenCalled();
128
+ expect(mockMakeRequestFn).toHaveBeenCalledWith('/userDataStream', { listenKey: 'test_listen_key_123' }, 'DELETE');
129
+ });
130
+ it('should clear keep alive interval', async () => {
131
+ jest.useFakeTimers();
132
+ const clearIntervalSpy = jest.spyOn(global, 'clearInterval');
133
+ await mexcUserStream.disconnectUserDataStream();
134
+ expect(clearIntervalSpy).toHaveBeenCalled();
135
+ clearIntervalSpy.mockRestore();
136
+ jest.useRealTimers();
137
+ });
138
+ it('should handle disconnect errors gracefully', async () => {
139
+ mockWebSocket.disconnectWebSocket.mockRejectedValue(new Error('Disconnect failed'));
140
+ mockMakeRequestFn.mockRejectedValueOnce(new Error('Delete listen key failed'));
141
+ await mexcUserStream.disconnectUserDataStream();
142
+ expect(mockLogger.warn).toHaveBeenCalledWith('Error during user data stream disconnect', { error: expect.any(Error) });
143
+ });
144
+ it('should handle disconnect when not connected', async () => {
145
+ const freshUserStream = new mexc_user_stream_1.MexcUserStream(mockMakeRequestFn);
146
+ await freshUserStream.disconnectUserDataStream();
147
+ expect(mockWebSocket.disconnectWebSocket).not.toHaveBeenCalled();
148
+ });
149
+ });
150
+ describe('keepAliveListenKey()', () => {
151
+ it('should keep listen key alive when listen key exists', async () => {
152
+ const mockResponse = { listenKey: 'test_listen_key_123' };
153
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
154
+ await mexcUserStream.getListenKey();
155
+ mockMakeRequestFn.mockResolvedValueOnce({});
156
+ await mexcUserStream.keepAliveListenKey();
157
+ expect(mockMakeRequestFn).toHaveBeenCalledWith('/userDataStream', { listenKey: 'test_listen_key_123' }, 'PUT');
158
+ });
159
+ it('should do nothing when no listen key', async () => {
160
+ await mexcUserStream.keepAliveListenKey();
161
+ expect(mockMakeRequestFn).not.toHaveBeenCalled();
162
+ });
163
+ it('should handle keep alive errors', async () => {
164
+ const mockResponse = { listenKey: 'test_listen_key_123' };
165
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
166
+ await mexcUserStream.getListenKey();
167
+ const error = new Error('Keep alive failed');
168
+ mockMakeRequestFn.mockRejectedValueOnce(error);
169
+ await mexcUserStream.keepAliveListenKey();
170
+ expect(mockLogger.warn).toHaveBeenCalledWith('Failed to keep alive listen key', { error });
171
+ });
172
+ });
173
+ describe('deleteListenKey()', () => {
174
+ it('should delete listen key when listen key exists', async () => {
175
+ const mockResponse = { listenKey: 'test_listen_key_123' };
176
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
177
+ await mexcUserStream.getListenKey();
178
+ mockMakeRequestFn.mockResolvedValueOnce({});
179
+ await mexcUserStream.deleteListenKey();
180
+ expect(mockMakeRequestFn).toHaveBeenCalledWith('/userDataStream', { listenKey: 'test_listen_key_123' }, 'DELETE');
181
+ });
182
+ it('should do nothing when no listen key', async () => {
183
+ await mexcUserStream.deleteListenKey();
184
+ expect(mockMakeRequestFn).not.toHaveBeenCalled();
185
+ });
186
+ it('should handle delete errors and clear listen key', async () => {
187
+ const mockResponse = { listenKey: 'test_listen_key_123' };
188
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
189
+ await mexcUserStream.getListenKey();
190
+ const error = new Error('Delete failed');
191
+ mockMakeRequestFn.mockRejectedValueOnce(error);
192
+ await mexcUserStream.deleteListenKey();
193
+ expect(mockLogger.warn).toHaveBeenCalledWith('Failed to delete listen key', { error });
194
+ });
195
+ });
196
+ describe('subscribeUserOrders()', () => {
197
+ beforeEach(async () => {
198
+ const mockResponse = { listenKey: 'test_listen_key_123' };
199
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
200
+ await mexcUserStream.connectUserDataStream();
201
+ });
202
+ it('should successfully subscribe to user orders', async () => {
203
+ const callback = jest.fn();
204
+ const subscriptionId = await mexcUserStream.subscribeUserOrders(callback);
205
+ expect(mockWebSocket.subscribeToUserData).toHaveBeenCalledWith(callback);
206
+ expect(subscriptionId).toBe('subscription_id_123');
207
+ });
208
+ it('should throw error when not connected', async () => {
209
+ const freshUserStream = new mexc_user_stream_1.MexcUserStream(mockMakeRequestFn);
210
+ const callback = jest.fn();
211
+ await expect(freshUserStream.subscribeUserOrders(callback)).rejects.toThrow('User data stream not connected. Call connect() first.');
212
+ });
213
+ it('should handle subscription errors', async () => {
214
+ const error = new Error('Subscription failed');
215
+ mockWebSocket.subscribeToUserData.mockRejectedValue(error);
216
+ const callback = jest.fn();
217
+ await expect(mexcUserStream.subscribeUserOrders(callback)).rejects.toThrow('Failed to subscribe to user orders: Subscription failed');
218
+ });
219
+ it('should handle non-Error exceptions', async () => {
220
+ mockWebSocket.subscribeToUserData.mockRejectedValue('String error');
221
+ const callback = jest.fn();
222
+ await expect(mexcUserStream.subscribeUserOrders(callback)).rejects.toThrow('Failed to subscribe to user orders: Unknown error');
223
+ });
224
+ });
225
+ describe('subscribeUserTrades()', () => {
226
+ beforeEach(async () => {
227
+ const mockResponse = { listenKey: 'test_listen_key_123' };
228
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
229
+ await mexcUserStream.connectUserDataStream();
230
+ });
231
+ it('should successfully subscribe to user trades', async () => {
232
+ const callback = jest.fn();
233
+ const subscriptionId = await mexcUserStream.subscribeUserTrades(callback);
234
+ expect(mockWebSocket.subscribeToUserData).toHaveBeenCalledWith(expect.any(Function));
235
+ expect(subscriptionId).toBe('subscription_id_123');
236
+ });
237
+ it('should process trade execution data', async () => {
238
+ const callback = jest.fn();
239
+ await mexcUserStream.subscribeUserTrades(callback);
240
+ const wrappedCallback = mockWebSocket.subscribeToUserData.mock.calls[0][0];
241
+ const mockTradeData = {
242
+ id: 'order123',
243
+ symbol: 'BTC/USDT',
244
+ type: 'limit',
245
+ side: 'buy',
246
+ status: 'filled',
247
+ filled: 1.0,
248
+ amount: 1.0,
249
+ price: 50000,
250
+ remaining: 0,
251
+ timestamp: 1640995200000
252
+ };
253
+ wrappedCallback(mockTradeData);
254
+ expect(callback).toHaveBeenCalledWith(expect.objectContaining({
255
+ id: expect.stringContaining('order123'),
256
+ orderId: 'order123',
257
+ symbol: 'BTC/USDT',
258
+ side: 'buy',
259
+ amount: 1.0,
260
+ price: 50000,
261
+ timestamp: 1640995200000
262
+ }));
263
+ expect(mockLogger.info).toHaveBeenCalledWith('✅ User data stream connected successfully');
264
+ });
265
+ it('should not process non-trade execution data', async () => {
266
+ const callback = jest.fn();
267
+ await mexcUserStream.subscribeUserTrades(callback);
268
+ mockLogger.info.mockClear();
269
+ const wrappedCallback = mockWebSocket.subscribeToUserData.mock.calls[0][0];
270
+ const mockNonTradeData = {
271
+ id: 'order123',
272
+ symbol: 'BTC/USDT',
273
+ type: 'limit',
274
+ side: 'buy',
275
+ status: 'open',
276
+ filled: 0,
277
+ amount: 1.0,
278
+ price: 50000,
279
+ remaining: 1.0,
280
+ timestamp: Date.now()
281
+ };
282
+ wrappedCallback(mockNonTradeData);
283
+ expect(callback).not.toHaveBeenCalled();
284
+ // Only check that no new info logs were made after clearing
285
+ expect(mockLogger.info).not.toHaveBeenCalled();
286
+ });
287
+ it('should throw error when not connected', async () => {
288
+ const freshUserStream = new mexc_user_stream_1.MexcUserStream(mockMakeRequestFn);
289
+ const callback = jest.fn();
290
+ await expect(freshUserStream.subscribeUserTrades(callback)).rejects.toThrow('User data stream not connected. Call connect() first.');
291
+ });
292
+ it('should handle subscription errors', async () => {
293
+ const error = new Error('Subscription failed');
294
+ mockWebSocket.subscribeToUserData.mockRejectedValue(error);
295
+ const callback = jest.fn();
296
+ await expect(mexcUserStream.subscribeUserTrades(callback)).rejects.toThrow('Failed to subscribe to user trades: Subscription failed');
297
+ });
298
+ it('should handle non-Error exceptions', async () => {
299
+ mockWebSocket.subscribeToUserData.mockRejectedValue('String error');
300
+ const callback = jest.fn();
301
+ await expect(mexcUserStream.subscribeUserTrades(callback)).rejects.toThrow('Failed to subscribe to user trades: Unknown error');
302
+ });
303
+ });
304
+ describe('isUserDataStreamConnected()', () => {
305
+ it('should return false when not connected', () => {
306
+ expect(mexcUserStream.isUserDataStreamConnected()).toBe(false);
307
+ });
308
+ it('should return true when connected', async () => {
309
+ const mockResponse = { listenKey: 'test_listen_key_123' };
310
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
311
+ await mexcUserStream.connectUserDataStream();
312
+ expect(mexcUserStream.isUserDataStreamConnected()).toBe(true);
313
+ });
314
+ it('should return false when WebSocket is not connected', async () => {
315
+ const mockResponse = { listenKey: 'test_listen_key_123' };
316
+ mockMakeRequestFn.mockResolvedValue(mockResponse);
317
+ await mexcUserStream.connectUserDataStream();
318
+ mockWebSocket.isConnected.mockReturnValue(false);
319
+ expect(mexcUserStream.isUserDataStreamConnected()).toBe(false);
320
+ });
321
+ it('should return false when WebSocket is undefined', async () => {
322
+ const freshUserStream = new mexc_user_stream_1.MexcUserStream(mockMakeRequestFn);
323
+ expect(freshUserStream.isUserDataStreamConnected()).toBe(false);
324
+ });
325
+ });
326
+ describe('isTradeExecution()', () => {
327
+ it('should detect filled status as trade execution', async () => {
328
+ await setupUserStream();
329
+ const { callback, wrappedCallback } = await setupTradeSubscription();
330
+ const mockData = {
331
+ id: 'order123',
332
+ symbol: 'BTC/USDT',
333
+ type: 'limit',
334
+ side: 'buy',
335
+ status: 'filled',
336
+ filled: 1.0,
337
+ amount: 1.0,
338
+ price: 50000,
339
+ remaining: 0,
340
+ timestamp: Date.now()
341
+ };
342
+ wrappedCallback(mockData);
343
+ expect(callback).toHaveBeenCalled();
344
+ });
345
+ it('should detect partially filled orders as trade execution', async () => {
346
+ await setupUserStream();
347
+ const { callback, wrappedCallback } = await setupTradeSubscription();
348
+ const mockData = {
349
+ id: 'order123',
350
+ symbol: 'BTC/USDT',
351
+ type: 'limit',
352
+ side: 'buy',
353
+ status: 'partial',
354
+ filled: 0.5,
355
+ amount: 1.0,
356
+ price: 50000,
357
+ remaining: 0.5,
358
+ timestamp: Date.now()
359
+ };
360
+ wrappedCallback(mockData);
361
+ expect(callback).toHaveBeenCalled();
362
+ });
363
+ it('should detect executed quantity as trade execution', async () => {
364
+ await setupUserStream();
365
+ const { callback, wrappedCallback } = await setupTradeSubscription();
366
+ const mockData = {
367
+ id: 'order123',
368
+ symbol: 'BTC/USDT',
369
+ type: 'limit',
370
+ side: 'buy',
371
+ status: 'filled',
372
+ amount: 2.0,
373
+ filled: 1.0,
374
+ price: 50000,
375
+ remaining: 1.0,
376
+ timestamp: Date.now()
377
+ };
378
+ wrappedCallback(mockData);
379
+ expect(callback).toHaveBeenCalled();
380
+ });
381
+ it('should not detect non-execution events', async () => {
382
+ await setupUserStream();
383
+ const { callback, wrappedCallback } = await setupTradeSubscription();
384
+ const mockData = {
385
+ status: 'open',
386
+ filled: 0,
387
+ amount: 1.0
388
+ };
389
+ wrappedCallback(mockData);
390
+ expect(callback).not.toHaveBeenCalled();
391
+ });
392
+ });
393
+ describe('transformToTrade()', () => {
394
+ it('should transform order data to trade format with all fields', async () => {
395
+ await setupUserStream();
396
+ const { callback, wrappedCallback } = await setupTradeSubscription();
397
+ const mockData = {
398
+ tradeId: 'trade123',
399
+ id: 'order123',
400
+ symbol: 'BTC/USDT',
401
+ side: 'buy',
402
+ filled: '1.5',
403
+ price: '50000.00',
404
+ fee: '0.01',
405
+ timestamp: 1640995200000,
406
+ status: 'filled'
407
+ };
408
+ wrappedCallback(mockData);
409
+ expect(callback).toHaveBeenCalledWith({
410
+ id: 'trade123',
411
+ orderId: 'order123',
412
+ symbol: 'BTC/USDT',
413
+ side: 'buy',
414
+ amount: 1.5,
415
+ price: 50000.00,
416
+ fee: 0.01,
417
+ timestamp: 1640995200000
418
+ });
419
+ });
420
+ it('should handle missing fields with fallback values', async () => {
421
+ await setupUserStream();
422
+ const { callback, wrappedCallback } = await setupTradeSubscription();
423
+ const mockData = {
424
+ id: 'order123',
425
+ symbol: 'BTC/USDT',
426
+ side: 'sell',
427
+ status: 'filled'
428
+ };
429
+ const currentTime = Date.now();
430
+ wrappedCallback(mockData);
431
+ expect(callback).toHaveBeenCalledWith(expect.objectContaining({
432
+ id: expect.stringMatching(/order123_\d+/),
433
+ orderId: 'order123',
434
+ symbol: 'BTC/USDT',
435
+ side: 'sell',
436
+ amount: 0,
437
+ price: 0,
438
+ fee: 0,
439
+ timestamp: expect.any(Number)
440
+ }));
441
+ const actualCall = callback.mock.calls[0][0];
442
+ expect(actualCall.timestamp).toBeGreaterThanOrEqual(currentTime);
443
+ });
444
+ it('should use executedQty as fallback for amount', async () => {
445
+ await setupUserStream();
446
+ const { callback, wrappedCallback } = await setupTradeSubscription();
447
+ const mockData = {
448
+ id: 'order123',
449
+ symbol: 'BTC/USDT',
450
+ side: 'buy',
451
+ executedQty: '2.5',
452
+ status: 'filled'
453
+ };
454
+ wrappedCallback(mockData);
455
+ expect(callback).toHaveBeenCalledWith(expect.objectContaining({
456
+ amount: 2.5
457
+ }));
458
+ });
459
+ });
460
+ describe('edge cases and error handling', () => {
461
+ it('should handle malformed data in trade processing', async () => {
462
+ await setupUserStream();
463
+ const { callback, wrappedCallback } = await setupTradeSubscription();
464
+ wrappedCallback(null);
465
+ wrappedCallback(undefined);
466
+ wrappedCallback({});
467
+ wrappedCallback({ status: null, filled: null, amount: null });
468
+ expect(callback).not.toHaveBeenCalled();
469
+ });
470
+ it('should handle numeric string parsing errors gracefully', async () => {
471
+ await setupUserStream();
472
+ const { callback, wrappedCallback } = await setupTradeSubscription();
473
+ const mockData = {
474
+ id: 'order123',
475
+ symbol: 'BTC/USDT',
476
+ side: 'buy',
477
+ filled: 'invalid_number',
478
+ price: 'invalid_price',
479
+ fee: 'invalid_fee',
480
+ status: 'filled'
481
+ };
482
+ wrappedCallback(mockData);
483
+ expect(callback).toHaveBeenCalledWith(expect.objectContaining({
484
+ amount: NaN,
485
+ price: NaN,
486
+ fee: NaN
487
+ }));
488
+ });
489
+ it('should handle zero filled amounts correctly', async () => {
490
+ await setupUserStream();
491
+ const { callback, wrappedCallback } = await setupTradeSubscription();
492
+ const mockData = {
493
+ status: 'open',
494
+ filled: 0,
495
+ amount: 1.0
496
+ };
497
+ wrappedCallback(mockData);
498
+ expect(callback).not.toHaveBeenCalled();
499
+ });
500
+ });
501
+ });
502
+ //# sourceMappingURL=mexc-user-stream.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexc-user-stream.test.js","sourceRoot":"","sources":["../../../../../src/tests/unit/exchanges/mexc/mexc-user-stream.test.ts"],"names":[],"mappings":";;AAAA,kFAA6E;AAC7E,8EAA0E;AAC1E,6CAAiD;AAEjD,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;AACvD,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAE/B,MAAM,mBAAmB,GAAG,8BAAuD,CAAC;AACpF,MAAM,kBAAkB,GAAG,oBAAwD,CAAC;AAEpF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,IAAI,cAA8B,CAAC;IACnC,IAAI,iBAA4B,CAAC;IACjC,IAAI,aAAyC,CAAC;IAC9C,IAAI,UAAe,CAAC;IAEpB,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;QACjC,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;QAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QAClD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;IAC/C,CAAC,CAAC;IAEF,MAAM,sBAAsB,GAAG,KAAK,IAAI,EAAE;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;IACvC,CAAC,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,UAAU,GAAG;YACX,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACf,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACf,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;YAChB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;SACjB,CAAC;QAEF,kBAAkB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QAE/C,aAAa,GAAG;YACd,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;YACxD,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC3D,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,qBAAqB,CAAC;YACvE,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;SACtC,CAAC;QAET,mBAAmB,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;QAE5D,iBAAiB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,cAAc,GAAG,IAAI,iCAAc,CAAC,iBAAiB,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,iCAAc,CAAC,CAAC;YACtD,MAAM,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAElD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;YAEtD,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9E,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAExC,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAC9C,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAE3C,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;QAC9G,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,yCAAyC,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAElD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAE7C,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9E,MAAM,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,yDAAyD,CAAC,CAAC;YAC5G,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAElD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAErD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAC7C,MAAM,CAAC,mBAAmB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAElD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAE7C,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;YAElF,cAAc,CAAC,WAAW,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAElD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAE7C,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAExE,MAAM,cAAc,CAAC,kBAAkB,EAAE,CAAC;YAE1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAE3C,MAAM,MAAM,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,iFAAiF,CAAC,CAAC;QAC1J,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,iBAAiB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YAEpD,MAAM,MAAM,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,6EAA6E,CAAC,CAAC;QACtJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,cAAc,CAAC,wBAAwB,EAAE,CAAC;YAEhD,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAC7D,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;YAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAE7D,MAAM,cAAc,CAAC,wBAAwB,EAAE,CAAC;YAEhD,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;YAE5C,gBAAgB,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;YACpF,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;YAE/E,MAAM,cAAc,CAAC,wBAAwB,EAAE,CAAC;YAEhD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,0CAA0C,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,eAAe,GAAG,IAAI,iCAAc,CAAC,iBAAiB,CAAC,CAAC;YAE9D,MAAM,eAAe,CAAC,wBAAwB,EAAE,CAAC;YAEjD,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;YAEpC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,cAAc,CAAC,kBAAkB,EAAE,CAAC;YAE1C,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,EAAE,KAAK,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,cAAc,CAAC,kBAAkB,EAAE,CAAC;YAE1C,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;YAEpC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,iBAAiB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAE/C,MAAM,cAAc,CAAC,kBAAkB,EAAE,CAAC;YAE1C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,iCAAiC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;YAEpC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,cAAc,CAAC,eAAe,EAAE,CAAC;YAEvC,MAAM,CAAC,iBAAiB,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,qBAAqB,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;YACpD,MAAM,cAAc,CAAC,eAAe,EAAE,CAAC;YAEvC,MAAM,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;YAEpC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACzC,iBAAiB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAE/C,MAAM,cAAc,CAAC,eAAe,EAAE,CAAC;YAEvC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,6BAA6B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACzF,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE1E,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACzE,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,eAAe,GAAG,IAAI,iCAAc,CAAC,iBAAiB,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,MAAM,CAAC,eAAe,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC;QACvI,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC/C,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC;QACxI,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;QAClI,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,cAAc,GAAG,MAAM,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAE1E,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrF,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAEnD,MAAM,eAAe,GAAG,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,aAAa,GAAG;gBACpB,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,KAAc;gBACpB,MAAM,EAAE,QAAiB;gBACzB,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,aAAa;aACzB,CAAC;YAEF,eAAe,CAAC,aAAa,CAAC,CAAC;YAE/B,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC5D,EAAE,EAAE,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC;gBACvC,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC,CAAC;YACJ,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,2CAA2C,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YAEnD,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAE5B,MAAM,eAAe,GAAG,aAAa,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,gBAAgB,GAAG;gBACvB,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,KAAc;gBACpB,MAAM,EAAE,MAAe;gBACvB,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAED,eAAuB,CAAC,gBAAgB,CAAC,CAAC;YAE3C,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;YACxC,4DAA4D;YAC5D,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,eAAe,GAAG,IAAI,iCAAc,CAAC,iBAAiB,CAAC,CAAC;YAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,MAAM,CAAC,eAAe,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,uDAAuD,CAAC,CAAC;QACvI,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC/C,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,yDAAyD,CAAC,CAAC;QACxI,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,aAAa,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;YACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;YAE3B,MAAM,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,mDAAmD,CAAC,CAAC;QAClI,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;QAC3C,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,CAAC,cAAc,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAE7C,MAAM,CAAC,cAAc,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;YACnE,MAAM,YAAY,GAAG,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;YAC1D,iBAAiB,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,cAAc,CAAC,qBAAqB,EAAE,CAAC;YAE7C,aAAa,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAEjD,MAAM,CAAC,cAAc,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,eAAe,GAAG,IAAI,iCAAc,CAAC,iBAAiB,CAAC,CAAC;YAE9D,MAAM,CAAC,eAAe,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,KAAc;gBACpB,MAAM,EAAE,QAAiB;gBACzB,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAED,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,KAAc;gBACpB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAED,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,OAAgB;gBACtB,IAAI,EAAE,KAAc;gBACpB,MAAM,EAAE,QAAiB;gBACzB,MAAM,EAAE,GAAG;gBACX,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,GAAG;gBACd,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAED,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,GAAG;aACZ,CAAC;YAED,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,UAAU;gBACnB,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,UAAU;gBACjB,GAAG,EAAE,MAAM;gBACX,SAAS,EAAE,aAAa;gBACxB,MAAM,EAAE,QAAQ;aACjB,CAAC;YAED,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC;gBACpC,EAAE,EAAE,UAAU;gBACd,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,QAAQ;gBACf,GAAG,EAAE,IAAI;gBACT,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;YACjE,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,QAAQ;aACjB,CAAC;YAEF,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC9B,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC5D,EAAE,EAAE,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC;gBACzC,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;gBACR,GAAG,EAAE,CAAC;gBACN,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;aAC9B,CAAC,CAAC,CAAC;YAEJ,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC7D,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,KAAK;gBACX,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,QAAQ;aACjB,CAAC;YAED,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC5D,MAAM,EAAE,GAAG;aACZ,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YAEpE,eAAuB,CAAC,IAAI,CAAC,CAAC;YAC9B,eAAuB,CAAC,SAAS,CAAC,CAAC;YACnC,eAAuB,CAAC,EAAE,CAAC,CAAC;YAC5B,eAAuB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,EAAE,EAAE,UAAU;gBACd,MAAM,EAAE,UAAU;gBAClB,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,gBAAgB;gBACxB,KAAK,EAAE,eAAe;gBACtB,GAAG,EAAE,aAAa;gBAClB,MAAM,EAAE,QAAQ;aACjB,CAAC;YAED,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBAC5D,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG;aACT,CAAC,CAAC,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,eAAe,EAAE,CAAC;YACxB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,EAAE,CAAC;YACrE,MAAM,QAAQ,GAAG;gBACf,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,GAAG;aACZ,CAAC;YAED,eAAuB,CAAC,QAAQ,CAAC,CAAC;YAEnC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mexc-utils.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mexc-utils.test.d.ts","sourceRoot":"","sources":["../../../../../src/tests/unit/exchanges/mexc/mexc-utils.test.ts"],"names":[],"mappings":""}