dcex 0.26.2__tar.gz → 0.26.3__tar.gz

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 (606) hide show
  1. {dcex-0.26.2 → dcex-0.26.3}/Cargo.lock +1 -1
  2. {dcex-0.26.2 → dcex-0.26.3}/PKG-INFO +1 -1
  3. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/CHANGELOG.md +7 -0
  4. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/Cargo.toml +1 -1
  5. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/binance.rs +3 -2
  6. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/common.rs +26 -3
  7. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/aster.rs +24 -4
  8. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/backpack.rs +24 -4
  9. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/binance.rs +81 -21
  10. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bingx.rs +78 -46
  11. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bitget.rs +34 -21
  12. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bitmart.rs +65 -19
  13. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bitmex.rs +60 -19
  14. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/bybit.rs +174 -21
  15. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/common.rs +13 -27
  16. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/gateio.rs +174 -43
  17. dcex-0.26.3/crates/dcex/tests/live_stateful/hyperliquid.rs +231 -0
  18. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/kraken.rs +225 -29
  19. dcex-0.26.3/crates/dcex/tests/live_stateful/kucoin.rs +176 -0
  20. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/lighter.rs +166 -3
  21. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/mexc.rs +169 -30
  22. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful/okx.rs +142 -27
  23. {dcex-0.26.2 → dcex-0.26.3}/pyproject.toml +1 -1
  24. dcex-0.26.2/crates/dcex/tests/live_stateful/hyperliquid.rs +0 -106
  25. dcex-0.26.2/crates/dcex/tests/live_stateful/kucoin.rs +0 -80
  26. {dcex-0.26.2 → dcex-0.26.3}/Cargo.toml +0 -0
  27. {dcex-0.26.2 → dcex-0.26.3}/LICENSE +0 -0
  28. {dcex-0.26.2 → dcex-0.26.3}/LICENSES/Apache-2.0.txt +0 -0
  29. {dcex-0.26.2 → dcex-0.26.3}/README.md +0 -0
  30. {dcex-0.26.2 → dcex-0.26.3}/THIRD_PARTY_NOTICES.md +0 -0
  31. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/README.md +0 -0
  32. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/aster_public.rs +0 -0
  33. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/aster_ws_private_readonly.rs +0 -0
  34. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/aster_ws_public.rs +0 -0
  35. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/backpack_public.rs +0 -0
  36. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/backpack_ws_private_readonly.rs +0 -0
  37. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/backpack_ws_public.rs +0 -0
  38. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/binance_public.rs +0 -0
  39. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/binance_time.rs +0 -0
  40. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/binance_ws_private_readonly.rs +0 -0
  41. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/binance_ws_public.rs +0 -0
  42. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bingx_public.rs +0 -0
  43. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bingx_ws_private_readonly.rs +0 -0
  44. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bingx_ws_public.rs +0 -0
  45. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitget_public.rs +0 -0
  46. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitget_ws_private_readonly.rs +0 -0
  47. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitget_ws_public.rs +0 -0
  48. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmart_public.rs +0 -0
  49. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmart_ws_private_readonly.rs +0 -0
  50. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmart_ws_public.rs +0 -0
  51. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmex_public.rs +0 -0
  52. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmex_ws_private_readonly.rs +0 -0
  53. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bitmex_ws_public.rs +0 -0
  54. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bybit_public.rs +0 -0
  55. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bybit_ws_private_readonly.rs +0 -0
  56. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/bybit_ws_public.rs +0 -0
  57. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/core_local_benchmark.rs +0 -0
  58. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/gateio_public.rs +0 -0
  59. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/gateio_ws_private_readonly.rs +0 -0
  60. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/gateio_ws_public.rs +0 -0
  61. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/hyperliquid_public.rs +0 -0
  62. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/hyperliquid_ws_private_readonly.rs +0 -0
  63. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/hyperliquid_ws_public.rs +0 -0
  64. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kraken_public.rs +0 -0
  65. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kraken_ws_private_readonly.rs +0 -0
  66. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kraken_ws_public.rs +0 -0
  67. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kucoin_public.rs +0 -0
  68. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kucoin_ws_private_readonly.rs +0 -0
  69. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/kucoin_ws_public.rs +0 -0
  70. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/lighter_bench.rs +0 -0
  71. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/lighter_public.rs +0 -0
  72. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/lighter_ws_private_readonly.rs +0 -0
  73. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/lighter_ws_public.rs +0 -0
  74. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/mexc_public.rs +0 -0
  75. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/mexc_ws_private_readonly.rs +0 -0
  76. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/mexc_ws_public.rs +0 -0
  77. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/okx_public.rs +0 -0
  78. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/okx_ws_private_readonly.rs +0 -0
  79. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/okx_ws_public.rs +0 -0
  80. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/examples/public_http_benchmark.rs +0 -0
  81. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/common.rs +0 -0
  82. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/crypto.rs +0 -0
  83. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ethereum.rs +0 -0
  84. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchange.rs +0 -0
  85. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/account.rs +0 -0
  86. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/client.rs +0 -0
  87. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/endpoints.rs +0 -0
  88. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/market.rs +0 -0
  89. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/mod.rs +0 -0
  90. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/params.rs +0 -0
  91. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/signing.rs +0 -0
  92. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/tests.rs +0 -0
  93. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/trade.rs +0 -0
  94. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/websocket/mod.rs +0 -0
  95. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/websocket/private.rs +0 -0
  96. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/websocket/public.rs +0 -0
  97. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/aster/wrappers.rs +0 -0
  98. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/account.rs +0 -0
  99. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/client.rs +0 -0
  100. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/endpoints.rs +0 -0
  101. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/market.rs +0 -0
  102. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/mod.rs +0 -0
  103. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/params.rs +0 -0
  104. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/signing.rs +0 -0
  105. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/tests.rs +0 -0
  106. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/trade.rs +0 -0
  107. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/websocket/mod.rs +0 -0
  108. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/websocket/private.rs +0 -0
  109. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/websocket/public.rs +0 -0
  110. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/backpack/wrappers.rs +0 -0
  111. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/account.rs +0 -0
  112. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/client.rs +0 -0
  113. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/endpoints.rs +0 -0
  114. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/market.rs +0 -0
  115. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/mod.rs +0 -0
  116. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/params.rs +0 -0
  117. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/private.rs +0 -0
  118. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/signing.rs +0 -0
  119. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/stream.rs +0 -0
  120. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/tests.rs +0 -0
  121. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/trade.rs +0 -0
  122. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/websocket/mod.rs +0 -0
  123. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/websocket/private.rs +0 -0
  124. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/binance/websocket/public.rs +0 -0
  125. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/account.rs +0 -0
  126. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/client.rs +0 -0
  127. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/endpoints.rs +0 -0
  128. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/market.rs +0 -0
  129. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/mod.rs +0 -0
  130. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/params.rs +0 -0
  131. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/private.rs +0 -0
  132. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/signing.rs +0 -0
  133. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/tests.rs +0 -0
  134. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/trade.rs +0 -0
  135. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/websocket/mod.rs +0 -0
  136. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/websocket/private.rs +0 -0
  137. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/websocket/public.rs +0 -0
  138. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bingx/wrappers.rs +0 -0
  139. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/account.rs +0 -0
  140. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/client.rs +0 -0
  141. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/endpoints.rs +0 -0
  142. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/market.rs +0 -0
  143. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/mod.rs +0 -0
  144. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/params.rs +0 -0
  145. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/private.rs +0 -0
  146. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/signing.rs +0 -0
  147. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/tests.rs +0 -0
  148. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/trade.rs +0 -0
  149. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/websocket/mod.rs +0 -0
  150. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/websocket/private.rs +0 -0
  151. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/websocket/public.rs +0 -0
  152. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitget/wrappers.rs +0 -0
  153. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/account.rs +0 -0
  154. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/client.rs +0 -0
  155. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/endpoints.rs +0 -0
  156. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/market.rs +0 -0
  157. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/mod.rs +0 -0
  158. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/params.rs +0 -0
  159. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/private.rs +0 -0
  160. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/signing.rs +0 -0
  161. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/tests.rs +0 -0
  162. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/trade.rs +0 -0
  163. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/websocket/mod.rs +0 -0
  164. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/websocket/private.rs +0 -0
  165. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/websocket/public.rs +0 -0
  166. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmart/wrappers.rs +0 -0
  167. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/account.rs +0 -0
  168. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/client.rs +0 -0
  169. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/endpoints.rs +0 -0
  170. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/market.rs +0 -0
  171. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/mod.rs +0 -0
  172. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/params.rs +0 -0
  173. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/position.rs +0 -0
  174. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/private.rs +0 -0
  175. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/signing.rs +0 -0
  176. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/tests.rs +0 -0
  177. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/trade.rs +0 -0
  178. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/trading.rs +0 -0
  179. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/websocket/mod.rs +0 -0
  180. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/websocket/private.rs +0 -0
  181. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/websocket/public.rs +0 -0
  182. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bitmex/wrappers.rs +0 -0
  183. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/account.rs +0 -0
  184. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/asset.rs +0 -0
  185. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/client.rs +0 -0
  186. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/endpoints.rs +0 -0
  187. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/market.rs +0 -0
  188. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/mod.rs +0 -0
  189. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/params.rs +0 -0
  190. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/position.rs +0 -0
  191. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/private.rs +0 -0
  192. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/signing.rs +0 -0
  193. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/trade.rs +0 -0
  194. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/websocket/mod.rs +0 -0
  195. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/websocket/private.rs +0 -0
  196. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/websocket/public.rs +0 -0
  197. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/bybit/wrappers.rs +0 -0
  198. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/account.rs +0 -0
  199. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/client.rs +0 -0
  200. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/endpoints.rs +0 -0
  201. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/market.rs +0 -0
  202. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/mod.rs +0 -0
  203. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/params.rs +0 -0
  204. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/private.rs +0 -0
  205. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/signing.rs +0 -0
  206. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/tests.rs +0 -0
  207. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/trade.rs +0 -0
  208. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/websocket/mod.rs +0 -0
  209. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/websocket/private.rs +0 -0
  210. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/websocket/public.rs +0 -0
  211. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/gateio/wrappers.rs +0 -0
  212. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/account.rs +0 -0
  213. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/asset.rs +0 -0
  214. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/client.rs +0 -0
  215. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/endpoints.rs +0 -0
  216. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/market.rs +0 -0
  217. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/mod.rs +0 -0
  218. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/msgpack.rs +0 -0
  219. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/params.rs +0 -0
  220. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/signing.rs +0 -0
  221. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/tests.rs +0 -0
  222. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/trade.rs +0 -0
  223. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/websocket/mod.rs +0 -0
  224. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/websocket/private.rs +0 -0
  225. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/websocket/public.rs +0 -0
  226. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/hyperliquid/wrappers.rs +0 -0
  227. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/account.rs +0 -0
  228. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/client.rs +0 -0
  229. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/endpoints.rs +0 -0
  230. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/market.rs +0 -0
  231. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/mod.rs +0 -0
  232. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/params.rs +0 -0
  233. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/private.rs +0 -0
  234. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/signing.rs +0 -0
  235. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/tests.rs +0 -0
  236. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/trade.rs +0 -0
  237. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/websocket/mod.rs +0 -0
  238. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/websocket/private.rs +0 -0
  239. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/websocket/public.rs +0 -0
  240. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kraken/wrappers.rs +0 -0
  241. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/account.rs +0 -0
  242. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/client.rs +0 -0
  243. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/endpoints.rs +0 -0
  244. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/market.rs +0 -0
  245. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/mod.rs +0 -0
  246. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/params.rs +0 -0
  247. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/private.rs +0 -0
  248. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/signing.rs +0 -0
  249. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/tests.rs +0 -0
  250. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/trade.rs +0 -0
  251. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/websocket/mod.rs +0 -0
  252. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/websocket/private.rs +0 -0
  253. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/websocket/public.rs +0 -0
  254. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/kucoin/wrappers.rs +0 -0
  255. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/account.rs +0 -0
  256. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/client.rs +0 -0
  257. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/endpoints.rs +0 -0
  258. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/market.rs +0 -0
  259. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/mod.rs +0 -0
  260. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/params.rs +0 -0
  261. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/signing.rs +0 -0
  262. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/tests.rs +0 -0
  263. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/trade.rs +0 -0
  264. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/websocket/mod.rs +0 -0
  265. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/websocket/private.rs +0 -0
  266. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/websocket/public.rs +0 -0
  267. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/lighter/wrappers.rs +0 -0
  268. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/account.rs +0 -0
  269. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/client.rs +0 -0
  270. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/endpoints.rs +0 -0
  271. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/market.rs +0 -0
  272. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/mod.rs +0 -0
  273. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/params.rs +0 -0
  274. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/private.rs +0 -0
  275. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/signing.rs +0 -0
  276. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/tests.rs +0 -0
  277. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/trade.rs +0 -0
  278. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/websocket/mod.rs +0 -0
  279. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/websocket/private.rs +0 -0
  280. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/websocket/public.rs +0 -0
  281. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mexc/wrappers.rs +0 -0
  282. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/mod.rs +0 -0
  283. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/account.rs +0 -0
  284. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/asset.rs +0 -0
  285. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/client.rs +0 -0
  286. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/endpoints.rs +0 -0
  287. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/market.rs +0 -0
  288. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/mod.rs +0 -0
  289. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/params.rs +0 -0
  290. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/private.rs +0 -0
  291. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/signing.rs +0 -0
  292. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/tests.rs +0 -0
  293. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/trade.rs +0 -0
  294. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/websocket/mod.rs +0 -0
  295. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/websocket/private.rs +0 -0
  296. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/websocket/public.rs +0 -0
  297. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/exchanges/okx/wrappers.rs +0 -0
  298. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/http.rs +0 -0
  299. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/lib.rs +0 -0
  300. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/lighter.rs +0 -0
  301. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/product_table.rs +0 -0
  302. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/product_table_fetch/exchanges.rs +0 -0
  303. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/product_table_fetch/tests.rs +0 -0
  304. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/product_table_fetch.rs +0 -0
  305. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/aster.rs +0 -0
  306. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/backpack.rs +0 -0
  307. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/binance.rs +0 -0
  308. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bingx.rs +0 -0
  309. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bitget.rs +0 -0
  310. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bitmart.rs +0 -0
  311. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bitmex.rs +0 -0
  312. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/bybit.rs +0 -0
  313. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/connection.rs +0 -0
  314. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/gateio.rs +0 -0
  315. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/hyperliquid.rs +0 -0
  316. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/kraken.rs +0 -0
  317. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/kucoin.rs +0 -0
  318. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/lighter.rs +0 -0
  319. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/mexc.rs +0 -0
  320. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/mod.rs +0 -0
  321. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/src/ws/okx.rs +0 -0
  322. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/api_surface.rs +0 -0
  323. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/aster.rs +0 -0
  324. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/backpack.rs +0 -0
  325. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bingx.rs +0 -0
  326. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bitget.rs +0 -0
  327. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bitmart.rs +0 -0
  328. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bitmex.rs +0 -0
  329. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/bybit.rs +0 -0
  330. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/gateio.rs +0 -0
  331. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/hyperliquid.rs +0 -0
  332. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/kraken.rs +0 -0
  333. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/kucoin.rs +0 -0
  334. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/lighter.rs +0 -0
  335. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/mexc.rs +0 -0
  336. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity/okx.rs +0 -0
  337. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_http_parity.rs +0 -0
  338. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex/tests/live_stateful.rs +0 -0
  339. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/Cargo.toml +0 -0
  340. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/aster.rs +0 -0
  341. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/backpack.rs +0 -0
  342. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/binance.rs +0 -0
  343. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bingx.rs +0 -0
  344. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bitget.rs +0 -0
  345. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bitmart.rs +0 -0
  346. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bitmex.rs +0 -0
  347. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/bybit.rs +0 -0
  348. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/gateio.rs +0 -0
  349. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/http.rs +0 -0
  350. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/hyperliquid.rs +0 -0
  351. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/kraken.rs +0 -0
  352. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/kucoin.rs +0 -0
  353. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/lighter.rs +0 -0
  354. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/mexc.rs +0 -0
  355. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/clients/okx.rs +0 -0
  356. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/functions.rs +0 -0
  357. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/lib.rs +0 -0
  358. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/product_table.rs +0 -0
  359. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/aster.rs +0 -0
  360. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/backpack.rs +0 -0
  361. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/binance.rs +0 -0
  362. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bingx.rs +0 -0
  363. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bitget.rs +0 -0
  364. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bitmart.rs +0 -0
  365. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bitmex.rs +0 -0
  366. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/bybit.rs +0 -0
  367. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/gateio.rs +0 -0
  368. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/hyperliquid.rs +0 -0
  369. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/kraken.rs +0 -0
  370. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/kucoin.rs +0 -0
  371. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/lighter.rs +0 -0
  372. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/mexc.rs +0 -0
  373. {dcex-0.26.2 → dcex-0.26.3}/crates/dcex-python/src/ws/okx.rs +0 -0
  374. {dcex-0.26.2 → dcex-0.26.3}/dcex/__init__.py +0 -0
  375. {dcex-0.26.2 → dcex-0.26.3}/dcex/_native.pyi +0 -0
  376. {dcex-0.26.2 → dcex-0.26.3}/dcex/_native_http.py +0 -0
  377. {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/__init__.py +0 -0
  378. {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/_account_http.py +0 -0
  379. {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/_http_manager.py +0 -0
  380. {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/_market_http.py +0 -0
  381. {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/_trade_http.py +0 -0
  382. {dcex-0.26.2 → dcex-0.26.3}/dcex/aster/client.py +0 -0
  383. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/__init__.py +0 -0
  384. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/__init__.py +0 -0
  385. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/_account_http.py +0 -0
  386. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/_http_manager.py +0 -0
  387. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/_market_http.py +0 -0
  388. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/_trade_http.py +0 -0
  389. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/aster/client.py +0 -0
  390. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/__init__.py +0 -0
  391. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/_account_http.py +0 -0
  392. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/_http_manager.py +0 -0
  393. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/_market_http.py +0 -0
  394. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/_trade_http.py +0 -0
  395. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/backpack/client.py +0 -0
  396. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/__init__.py +0 -0
  397. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/_account_http.py +0 -0
  398. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/_http_manager.py +0 -0
  399. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/_market_http.py +0 -0
  400. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/_trade_http.py +0 -0
  401. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/client.py +0 -0
  402. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/binance/enums.py +0 -0
  403. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/__init__.py +0 -0
  404. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/_account_http.py +0 -0
  405. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/_http_manager.py +0 -0
  406. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/_market_http.py +0 -0
  407. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/_trade_http.py +0 -0
  408. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bingx/client.py +0 -0
  409. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/__init__.py +0 -0
  410. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/_account_http.py +0 -0
  411. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/_http_manager.py +0 -0
  412. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/_market_http.py +0 -0
  413. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/_trade_http.py +0 -0
  414. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitget/client.py +0 -0
  415. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/__init__.py +0 -0
  416. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/_account_http.py +0 -0
  417. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/_http_manager.py +0 -0
  418. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/_market_http.py +0 -0
  419. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/_trade_http.py +0 -0
  420. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmart/client.py +0 -0
  421. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/__init__.py +0 -0
  422. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_account_http.py +0 -0
  423. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_http_manager.py +0 -0
  424. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_market_http.py +0 -0
  425. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_position_http.py +0 -0
  426. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_trade_http.py +0 -0
  427. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/_trading_http.py +0 -0
  428. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bitmex/client.py +0 -0
  429. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/__init__.py +0 -0
  430. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_account_http.py +0 -0
  431. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_asset_http.py +0 -0
  432. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_http_manager.py +0 -0
  433. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_market_http.py +0 -0
  434. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_position_http.py +0 -0
  435. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/_trade_http.py +0 -0
  436. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/bybit/client.py +0 -0
  437. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/__init__.py +0 -0
  438. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/_account_http.py +0 -0
  439. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/_http_manager.py +0 -0
  440. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/_market_http.py +0 -0
  441. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/_trade_http.py +0 -0
  442. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/gateio/client.py +0 -0
  443. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/__init__.py +0 -0
  444. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_account_http.py +0 -0
  445. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_asset_http.py +0 -0
  446. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_http_manager.py +0 -0
  447. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_market_http.py +0 -0
  448. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/_trade_http.py +0 -0
  449. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/hyperliquid/client.py +0 -0
  450. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/__init__.py +0 -0
  451. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/_account_http.py +0 -0
  452. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/_http_manager.py +0 -0
  453. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/_market_http.py +0 -0
  454. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/_trade_http.py +0 -0
  455. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kraken/client.py +0 -0
  456. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/__init__.py +0 -0
  457. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/_account_http.py +0 -0
  458. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/_http_manager.py +0 -0
  459. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/_market_http.py +0 -0
  460. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/_trade_http.py +0 -0
  461. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/kucoin/client.py +0 -0
  462. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/__init__.py +0 -0
  463. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/_account_http.py +0 -0
  464. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/_http_manager.py +0 -0
  465. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/_market_http.py +0 -0
  466. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/_trade_http.py +0 -0
  467. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/lighter/client.py +0 -0
  468. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/__init__.py +0 -0
  469. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/_account_http.py +0 -0
  470. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/_http_manager.py +0 -0
  471. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/_market_http.py +0 -0
  472. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/_trade_http.py +0 -0
  473. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/mexc/client.py +0 -0
  474. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/__init__.py +0 -0
  475. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_account_http.py +0 -0
  476. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_asset_http.py +0 -0
  477. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_http_manager.py +0 -0
  478. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_market_http.py +0 -0
  479. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_public_http.py +0 -0
  480. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/_trade_http.py +0 -0
  481. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/okx/client.py +0 -0
  482. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/product_table/fetch.py +0 -0
  483. {dcex-0.26.2 → dcex-0.26.3}/dcex/async_support/product_table/manager.py +0 -0
  484. {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/__init__.py +0 -0
  485. {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/_account_http.py +0 -0
  486. {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/_http_manager.py +0 -0
  487. {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/_market_http.py +0 -0
  488. {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/_trade_http.py +0 -0
  489. {dcex-0.26.2 → dcex-0.26.3}/dcex/backpack/client.py +0 -0
  490. {dcex-0.26.2 → dcex-0.26.3}/dcex/base/__init__.py +0 -0
  491. {dcex-0.26.2 → dcex-0.26.3}/dcex/base/http_manager.py +0 -0
  492. {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/__init__.py +0 -0
  493. {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/_account_http.py +0 -0
  494. {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/_http_manager.py +0 -0
  495. {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/_market_http.py +0 -0
  496. {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/_trade_http.py +0 -0
  497. {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/client.py +0 -0
  498. {dcex-0.26.2 → dcex-0.26.3}/dcex/binance/enums.py +0 -0
  499. {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/__init__.py +0 -0
  500. {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/_account_http.py +0 -0
  501. {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/_http_manager.py +0 -0
  502. {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/_market_http.py +0 -0
  503. {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/_trade_http.py +0 -0
  504. {dcex-0.26.2 → dcex-0.26.3}/dcex/bingx/client.py +0 -0
  505. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/__init__.py +0 -0
  506. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/_account_http.py +0 -0
  507. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/_http_manager.py +0 -0
  508. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/_market_http.py +0 -0
  509. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/_trade_http.py +0 -0
  510. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitget/client.py +0 -0
  511. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/__init__.py +0 -0
  512. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/_account_http.py +0 -0
  513. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/_http_manager.py +0 -0
  514. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/_market_http.py +0 -0
  515. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/_trade_http.py +0 -0
  516. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmart/client.py +0 -0
  517. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/__init__.py +0 -0
  518. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_account_http.py +0 -0
  519. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_http_manager.py +0 -0
  520. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_market_http.py +0 -0
  521. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_position_http.py +0 -0
  522. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_trade_http.py +0 -0
  523. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/_trading_http.py +0 -0
  524. {dcex-0.26.2 → dcex-0.26.3}/dcex/bitmex/client.py +0 -0
  525. {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/__init__.py +0 -0
  526. {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_account_http.py +0 -0
  527. {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_asset_http.py +0 -0
  528. {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_http_manager.py +0 -0
  529. {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_market_http.py +0 -0
  530. {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_position_http.py +0 -0
  531. {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/_trade_http.py +0 -0
  532. {dcex-0.26.2 → dcex-0.26.3}/dcex/bybit/client.py +0 -0
  533. {dcex-0.26.2 → dcex-0.26.3}/dcex/enums.py +0 -0
  534. {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/__init__.py +0 -0
  535. {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/_account_http.py +0 -0
  536. {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/_http_manager.py +0 -0
  537. {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/_market_http.py +0 -0
  538. {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/_trade_http.py +0 -0
  539. {dcex-0.26.2 → dcex-0.26.3}/dcex/gateio/client.py +0 -0
  540. {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/__init__.py +0 -0
  541. {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_account_http.py +0 -0
  542. {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_asset_http.py +0 -0
  543. {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_http_manager.py +0 -0
  544. {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_market_http.py +0 -0
  545. {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/_trade_http.py +0 -0
  546. {dcex-0.26.2 → dcex-0.26.3}/dcex/hyperliquid/client.py +0 -0
  547. {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/__init__.py +0 -0
  548. {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/_account_http.py +0 -0
  549. {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/_http_manager.py +0 -0
  550. {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/_market_http.py +0 -0
  551. {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/_trade_http.py +0 -0
  552. {dcex-0.26.2 → dcex-0.26.3}/dcex/kraken/client.py +0 -0
  553. {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/__init__.py +0 -0
  554. {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/_account_http.py +0 -0
  555. {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/_http_manager.py +0 -0
  556. {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/_market_http.py +0 -0
  557. {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/_trade_http.py +0 -0
  558. {dcex-0.26.2 → dcex-0.26.3}/dcex/kucoin/client.py +0 -0
  559. {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/__init__.py +0 -0
  560. {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/_account_http.py +0 -0
  561. {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/_http_manager.py +0 -0
  562. {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/_market_http.py +0 -0
  563. {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/_trade_http.py +0 -0
  564. {dcex-0.26.2 → dcex-0.26.3}/dcex/lighter/client.py +0 -0
  565. {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/__init__.py +0 -0
  566. {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/_account_http.py +0 -0
  567. {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/_http_manager.py +0 -0
  568. {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/_market_http.py +0 -0
  569. {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/_trade_http.py +0 -0
  570. {dcex-0.26.2 → dcex-0.26.3}/dcex/mexc/client.py +0 -0
  571. {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/__init__.py +0 -0
  572. {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_account_http.py +0 -0
  573. {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_asset_http.py +0 -0
  574. {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_http_manager.py +0 -0
  575. {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_market_http.py +0 -0
  576. {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_public_http.py +0 -0
  577. {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/_trade_http.py +0 -0
  578. {dcex-0.26.2 → dcex-0.26.3}/dcex/okx/client.py +0 -0
  579. {dcex-0.26.2 → dcex-0.26.3}/dcex/product_table/_query.py +0 -0
  580. {dcex-0.26.2 → dcex-0.26.3}/dcex/product_table/fetch.py +0 -0
  581. {dcex-0.26.2 → dcex-0.26.3}/dcex/product_table/manager.py +0 -0
  582. {dcex-0.26.2 → dcex-0.26.3}/dcex/registry.py +0 -0
  583. {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/address_utils.py +0 -0
  584. {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/common.py +0 -0
  585. {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/decimal_utils.py +0 -0
  586. {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/errors.py +0 -0
  587. {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/helpers.py +0 -0
  588. {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/jupyter_helper.py +0 -0
  589. {dcex-0.26.2 → dcex-0.26.3}/dcex/utils/timeframe_utils.py +0 -0
  590. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/__init__.py +0 -0
  591. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/_base.py +0 -0
  592. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/aster.py +0 -0
  593. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/backpack.py +0 -0
  594. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/binance.py +0 -0
  595. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bingx.py +0 -0
  596. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bitget.py +0 -0
  597. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bitmart.py +0 -0
  598. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bitmex.py +0 -0
  599. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/bybit.py +0 -0
  600. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/gateio.py +0 -0
  601. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/hyperliquid.py +0 -0
  602. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/kraken.py +0 -0
  603. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/kucoin.py +0 -0
  604. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/lighter.py +0 -0
  605. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/mexc.py +0 -0
  606. {dcex-0.26.2 → dcex-0.26.3}/dcex/ws/okx.py +0 -0
@@ -225,7 +225,7 @@ checksum = "a4ae5f15dda3c708c0ade84bfee31ccab44a3da4f88015ed22f63732abe300c8"
225
225
 
226
226
  [[package]]
227
227
  name = "dcex"
228
- version = "0.4.3"
228
+ version = "0.4.4"
229
229
  dependencies = [
230
230
  "base64",
231
231
  "ed25519-dalek",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dcex
3
- Version: 0.26.2
3
+ Version: 0.26.3
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Intended Audience :: Financial and Insurance Industry
@@ -1,3 +1,10 @@
1
+ ## 0.4.4 (2026-07-02)
2
+
3
+ ### Fix
4
+
5
+ - harden live private cleanup and throttling
6
+ - harden live stateful cleanup
7
+
1
8
  ## 0.4.3 (2026-06-29)
2
9
 
3
10
  ### Fix
@@ -6,7 +6,7 @@ edition.workspace = true
6
6
  license.workspace = true
7
7
  readme = "README.md"
8
8
  repository.workspace = true
9
- version = "0.4.3"
9
+ version = "0.4.4"
10
10
  keywords = ["crypto", "trading", "exchange", "http"]
11
11
  categories = ["api-bindings", "web-programming::http-client"]
12
12
 
@@ -4,14 +4,14 @@ use dcex::exchange::ValidatedResponse;
4
4
  use dcex::exchanges::binance::BinanceClient;
5
5
 
6
6
  use super::common::{
7
- require_env, run_cases, run_private_cases, Case, BTC_USDT_SPOT, BTC_USDT_SWAP,
7
+ require_env, run_cases_with_delay, run_private_cases, Case, BTC_USDT_SPOT, BTC_USDT_SWAP,
8
8
  };
9
9
 
10
10
  #[tokio::test]
11
11
  #[ignore = "requires live exchange API access"]
12
12
  async fn binance_public_live_parity() -> dcex::Result<()> {
13
13
  let client = BinanceClient::public(Duration::from_secs(20))?;
14
- run_cases(
14
+ run_cases_with_delay(
15
15
  vec![
16
16
  Case::new(
17
17
  "get_spot_exchange_info",
@@ -95,6 +95,7 @@ async fn binance_public_live_parity() -> dcex::Result<()> {
95
95
  ],
96
96
  ),
97
97
  ],
98
+ Duration::from_secs(2),
98
99
  |case| {
99
100
  let client = client.clone();
100
101
  async move { binance_public_case(&client, case).await }
@@ -1,8 +1,9 @@
1
1
  use std::collections::HashMap;
2
2
  use std::sync::OnceLock;
3
- use std::time::{SystemTime, UNIX_EPOCH};
3
+ use std::time::{Duration, SystemTime, UNIX_EPOCH};
4
4
 
5
5
  use dcex::exchange::ValidatedResponse;
6
+ use tokio::time::sleep;
6
7
 
7
8
  pub(crate) const BTC_USDT_SPOT: &str = "BTC-USDT-SPOT";
8
9
  pub(crate) const BTC_USDT_SWAP: &str = "BTC-USDT-SWAP";
@@ -51,7 +52,14 @@ pub(crate) fn require_env(names: &[&str]) -> Option<Vec<String>> {
51
52
  if missing.is_empty() {
52
53
  Some(values)
53
54
  } else {
54
- eprintln!("skipping live private test; missing {}", missing.join(", "));
55
+ let message = format!(
56
+ "missing required live private environment variables: {}",
57
+ missing.join(", ")
58
+ );
59
+ if live_http_enabled() {
60
+ panic!("{message}");
61
+ }
62
+ eprintln!("skipping live private test; {message}");
55
63
  None
56
64
  }
57
65
  }
@@ -95,7 +103,19 @@ fn assert_success(response: &ValidatedResponse) {
95
103
  assert!(!response.data.is_null(), "{response:?}");
96
104
  }
97
105
 
98
- pub(crate) async fn run_cases<F, Fut>(cases: Vec<Case>, mut request: F) -> dcex::Result<()>
106
+ pub(crate) async fn run_cases<F, Fut>(cases: Vec<Case>, request: F) -> dcex::Result<()>
107
+ where
108
+ F: FnMut(Case) -> Fut,
109
+ Fut: std::future::Future<Output = dcex::Result<ValidatedResponse>>,
110
+ {
111
+ run_cases_with_delay(cases, Duration::ZERO, request).await
112
+ }
113
+
114
+ pub(crate) async fn run_cases_with_delay<F, Fut>(
115
+ cases: Vec<Case>,
116
+ delay: Duration,
117
+ mut request: F,
118
+ ) -> dcex::Result<()>
99
119
  where
100
120
  F: FnMut(Case) -> Fut,
101
121
  Fut: std::future::Future<Output = dcex::Result<ValidatedResponse>>,
@@ -110,6 +130,9 @@ where
110
130
  let response = request(case).await?;
111
131
  assert_success(&response);
112
132
  eprintln!("ok {method}");
133
+ if !delay.is_zero() {
134
+ sleep(delay).await;
135
+ }
113
136
  }
114
137
  Ok(())
115
138
  }
@@ -4,8 +4,8 @@ use dcex::exchange::Exchange;
4
4
  use dcex::exchanges::aster::AsterClient;
5
5
 
6
6
  use super::common::{
7
- assert_success, fetch_trading_details, minimum_order_quantity, params, post_only_buy_price,
8
- require_env, require_live_trading, require_order_id, BTC_USDT_SWAP,
7
+ assert_success, fetch_trading_details, live_test_error, minimum_order_quantity, params,
8
+ post_only_buy_price, require_env, require_live_trading, require_order_id, BTC_USDT_SWAP,
9
9
  };
10
10
 
11
11
  #[tokio::test]
@@ -39,8 +39,28 @@ async fn aster_futures_direct_live_stateful_order() -> dcex::Result<()> {
39
39
  .as_array()
40
40
  .is_some_and(|orders| !orders.is_empty())
41
41
  {
42
- eprintln!("skipping Aster futures live stateful order; open BTC-USDT swap orders exist");
43
- return Ok(());
42
+ let cancel = super::common::exchange_method_request(
43
+ &client,
44
+ "cancel_all_futures_open_orders",
45
+ params(&[("product_symbol", BTC_USDT_SWAP)]),
46
+ )
47
+ .await?;
48
+ assert_success(&cancel);
49
+ let remaining = super::common::exchange_method_request(
50
+ &client,
51
+ "get_futures_open_orders",
52
+ params(&[("product_symbol", BTC_USDT_SWAP)]),
53
+ )
54
+ .await?;
55
+ if remaining
56
+ .data
57
+ .as_array()
58
+ .is_some_and(|orders| !orders.is_empty())
59
+ {
60
+ return Err(live_test_error(
61
+ "Aster futures still has open BTC-USDT swap orders after cleanup",
62
+ ));
63
+ }
44
64
  }
45
65
 
46
66
  let orderbook = client.get_futures_orderbook(BTC_USDT_SWAP).limit(5).await?;
@@ -4,8 +4,8 @@ use dcex::exchange::Exchange;
4
4
  use dcex::exchanges::backpack::BackpackClient;
5
5
 
6
6
  use super::common::{
7
- assert_success, fetch_trading_details, minimum_order_quantity, params, post_only_buy_price,
8
- require_env, require_live_trading, require_order_id,
7
+ assert_success, fetch_trading_details, live_test_error, minimum_order_quantity, params,
8
+ post_only_buy_price, require_env, require_live_trading, require_order_id,
9
9
  };
10
10
 
11
11
  const BTC_USDC_SPOT: &str = "BTC-USDC-SPOT";
@@ -37,8 +37,28 @@ async fn backpack_direct_live_stateful_order() -> dcex::Result<()> {
37
37
  .as_array()
38
38
  .is_some_and(|orders| !orders.is_empty())
39
39
  {
40
- eprintln!("skipping Backpack live stateful order; open BTC-USDC spot orders exist");
41
- return Ok(());
40
+ let cancel = super::common::exchange_method_request(
41
+ &client,
42
+ "cancel_open_orders",
43
+ params(&[("product_symbol", BTC_USDC_SPOT)]),
44
+ )
45
+ .await?;
46
+ assert_success(&cancel);
47
+ let remaining = super::common::exchange_method_request(
48
+ &client,
49
+ "get_open_orders",
50
+ params(&[("product_symbol", BTC_USDC_SPOT)]),
51
+ )
52
+ .await?;
53
+ if remaining
54
+ .data
55
+ .as_array()
56
+ .is_some_and(|orders| !orders.is_empty())
57
+ {
58
+ return Err(live_test_error(
59
+ "Backpack still has open BTC-USDC spot orders after cleanup",
60
+ ));
61
+ }
42
62
  }
43
63
 
44
64
  let orderbook = super::common::exchange_method_request(
@@ -7,10 +7,10 @@ use tokio::time::sleep;
7
7
  use super::common::{
8
8
  assert_success, asset_amount, contains_non_empty_array, fetch_trading_details, find_f64,
9
9
  first_bid_price, format_transfer_amount, format_transfer_amount_floor,
10
- leveraged_margin_required, margin_target, minimum_order_quantity, parse_positive,
11
- post_only_buy_price_from_bid, price_below_market, require_env, require_live_trading,
12
- require_order_id, sum_abs_values, wait_for_flat_position, wait_for_positive_position,
13
- BTC_USDT_SPOT, BTC_USDT_SWAP,
10
+ insufficient_funds_error, leveraged_margin_required, live_test_error, margin_target,
11
+ minimum_order_quantity, parse_positive, post_only_buy_price_from_bid, price_below_market,
12
+ require_env, require_live_trading, require_order_id, wait_for_flat_position,
13
+ wait_for_positive_position, BTC_USDT_SPOT, BTC_USDT_SWAP,
14
14
  };
15
15
 
16
16
  struct TransferBack {
@@ -47,7 +47,11 @@ async fn binance_direct_live_stateful_order() -> dcex::Result<()> {
47
47
  amount: "0".to_string(),
48
48
  transfer_type: "",
49
49
  },
50
- None => return Ok(()),
50
+ None => {
51
+ return Err(live_test_error(
52
+ "Binance spot has insufficient transferable USDT for live stateful order",
53
+ ));
54
+ }
51
55
  };
52
56
 
53
57
  let order_result = client
@@ -87,14 +91,7 @@ async fn binance_futures_direct_live_stateful_order() -> dcex::Result<()> {
87
91
  Some(keys[1].clone()),
88
92
  Duration::from_secs(20),
89
93
  )?;
90
- if binance_open_swap_orders(&client).await? {
91
- eprintln!("skipping Binance futures live stateful order; open BTC-USDT swap orders exist");
92
- return Ok(());
93
- }
94
- if futures_position_abs(&client).await? > 0.0 {
95
- eprintln!("skipping Binance futures live stateful order; BTC-USDT swap position exists");
96
- return Ok(());
97
- }
94
+ cleanup_binance_futures_state(&client).await?;
98
95
 
99
96
  let ticker = client
100
97
  .get_futures_ticker()
@@ -114,7 +111,11 @@ async fn binance_futures_direct_live_stateful_order() -> dcex::Result<()> {
114
111
  leveraged_margin_required(bid, &quantity, &details, BINANCE_FUTURES_LEVERAGE_VALUE)?;
115
112
  let transfer = match ensure_futures_usdt(&client, margin_target(required_usdt)).await? {
116
113
  Some(transfer) => transfer,
117
- None => return Ok(()),
114
+ None => {
115
+ return Err(live_test_error(
116
+ "Binance futures has insufficient transferable USDT for live stateful order",
117
+ ));
118
+ }
118
119
  };
119
120
 
120
121
  let order_result = client
@@ -147,6 +148,12 @@ async fn binance_futures_direct_live_stateful_order() -> dcex::Result<()> {
147
148
  .await;
148
149
  let opened = match open_result {
149
150
  Ok(opened) => opened,
151
+ Err(error) if insufficient_funds_error(&error) => {
152
+ return_binance_transfer(&client, &transfer).await?;
153
+ return Err(live_test_error(format!(
154
+ "Binance futures insufficient margin for market open: {error}"
155
+ )));
156
+ }
150
157
  Err(error) => {
151
158
  return_binance_transfer(&client, &transfer).await?;
152
159
  return Err(error);
@@ -202,9 +209,6 @@ async fn ensure_spot_usdt(
202
209
  }));
203
210
  }
204
211
  }
205
- eprintln!(
206
- "skipping Binance live stateful order; insufficient transferable USDT, required={required:.8}"
207
- );
208
212
  Ok(None)
209
213
  }
210
214
 
@@ -242,12 +246,64 @@ async fn ensure_futures_usdt(
242
246
  }));
243
247
  }
244
248
  }
245
- eprintln!(
246
- "skipping Binance futures live stateful order; insufficient transferable USDT, required={required:.8}"
247
- );
248
249
  Ok(None)
249
250
  }
250
251
 
252
+ async fn cleanup_binance_futures_state(client: &BinanceClient) -> dcex::Result<()> {
253
+ if binance_open_swap_orders(client).await? {
254
+ let cancel = client.cancel_all_open_orders(BTC_USDT_SWAP).await?;
255
+ assert_success(&cancel);
256
+ sleep(Duration::from_secs(1)).await;
257
+ }
258
+ let open_algo = client
259
+ .get_all_open_futures_algo_orders()
260
+ .param("product_symbol", BTC_USDT_SWAP)
261
+ .await?;
262
+ if contains_non_empty_array(&open_algo.data, &["orders", "data"]) {
263
+ let cancel = client
264
+ .cancel_all_open_futures_algo_orders(BTC_USDT_SWAP)
265
+ .await?;
266
+ assert_success(&cancel);
267
+ sleep(Duration::from_secs(1)).await;
268
+ }
269
+
270
+ let amount = futures_position_amt(client).await?;
271
+ if amount != 0.0 {
272
+ let quantity = format_transfer_amount_floor(amount.abs(), 8);
273
+ let close = client
274
+ .place_market_order(
275
+ BTC_USDT_SWAP,
276
+ if amount > 0.0 { "SELL" } else { "BUY" },
277
+ quantity.as_str(),
278
+ )
279
+ .param("reduceOnly", "true")
280
+ .await?;
281
+ assert_success(&close);
282
+ sleep(Duration::from_secs(1)).await;
283
+ }
284
+
285
+ if binance_open_swap_orders(client).await? {
286
+ return Err(live_test_error(
287
+ "Binance futures still has open BTC-USDT swap orders after cleanup",
288
+ ));
289
+ }
290
+ let open_algo = client
291
+ .get_all_open_futures_algo_orders()
292
+ .param("product_symbol", BTC_USDT_SWAP)
293
+ .await?;
294
+ if contains_non_empty_array(&open_algo.data, &["orders", "data"]) {
295
+ return Err(live_test_error(
296
+ "Binance futures still has open BTC-USDT algo orders after cleanup",
297
+ ));
298
+ }
299
+ if wait_for_flat_position(|| futures_position_abs(client)).await? != 0.0 {
300
+ return Err(live_test_error(
301
+ "Binance futures BTC-USDT swap position still exists after cleanup",
302
+ ));
303
+ }
304
+ Ok(())
305
+ }
306
+
251
307
  async fn return_binance_transfer(
252
308
  client: &BinanceClient,
253
309
  transfer: &TransferBack,
@@ -298,8 +354,12 @@ async fn futures_usdt(client: &BinanceClient) -> dcex::Result<f64> {
298
354
  }
299
355
 
300
356
  async fn futures_position_abs(client: &BinanceClient) -> dcex::Result<f64> {
357
+ Ok(futures_position_amt(client).await?.abs())
358
+ }
359
+
360
+ async fn futures_position_amt(client: &BinanceClient) -> dcex::Result<f64> {
301
361
  let response = client.get_future_position(BTC_USDT_SWAP).await?;
302
- Ok(sum_abs_values(&response.data, &["positionAmt"]))
362
+ Ok(find_f64(&response.data, &["positionAmt"]).unwrap_or(0.0))
303
363
  }
304
364
 
305
365
  async fn binance_open_swap_orders(client: &BinanceClient) -> dcex::Result<bool> {
@@ -6,8 +6,8 @@ use dcex::exchanges::bingx::BingxClient;
6
6
  use super::common::{
7
7
  assert_success, asset_amount, contains_non_empty_array, fetch_trading_details, find_f64,
8
8
  first_bid_price, format_transfer_amount_floor, insufficient_funds_error,
9
- leveraged_margin_required, margin_target, minimum_order_quantity, params, post_only_buy_price,
10
- price_below_market, require_env, require_live_trading, require_order_id,
9
+ leveraged_margin_required, live_test_error, margin_target, minimum_order_quantity, params,
10
+ post_only_buy_price, price_below_market, require_env, require_live_trading, require_order_id,
11
11
  sum_abs_values_for_symbols, unique_client_id, wait_for_flat_position,
12
12
  wait_for_positive_position, BTC_USDT_SPOT, BTC_USDT_SWAP,
13
13
  };
@@ -40,10 +40,7 @@ async fn bingx_spot_direct_live_stateful_order() -> dcex::Result<()> {
40
40
  Duration::from_secs(20),
41
41
  )?;
42
42
 
43
- if bingx_spot_open_orders(&client).await? {
44
- eprintln!("skipping BingX spot live stateful order; open BTC-USDT spot orders exist");
45
- return Ok(());
46
- }
43
+ cleanup_bingx_spot_orders(&client).await?;
47
44
 
48
45
  let orderbook = super::common::exchange_method_request(
49
46
  &client,
@@ -62,10 +59,9 @@ async fn bingx_spot_direct_live_stateful_order() -> dcex::Result<()> {
62
59
  let transfers = match ensure_bingx_usdt(&client, BINGX_SPOT_ACCOUNT, required_usdt).await? {
63
60
  Some(transfers) => transfers,
64
61
  None => {
65
- eprintln!(
66
- "skipping BingX spot live stateful order; insufficient transferable USDT, required={required_usdt:.8}"
67
- );
68
- return Ok(());
62
+ return Err(live_test_error(
63
+ "BingX spot has insufficient transferable USDT for live stateful order",
64
+ ));
69
65
  }
70
66
  };
71
67
 
@@ -120,14 +116,7 @@ async fn bingx_swap_direct_live_stateful_order() -> dcex::Result<()> {
120
116
  Duration::from_secs(20),
121
117
  )?;
122
118
 
123
- if bingx_swap_open_orders(&client).await? {
124
- eprintln!("skipping BingX swap live stateful order; open BTC-USDT swap orders exist");
125
- return Ok(());
126
- }
127
- if bingx_swap_position_abs(&client).await? > 0.0 {
128
- eprintln!("skipping BingX swap live stateful order; BTC-USDT swap position exists");
129
- return Ok(());
130
- }
119
+ cleanup_bingx_swap_state(&client).await?;
131
120
 
132
121
  let orderbook = super::common::exchange_method_request(
133
122
  &client,
@@ -141,21 +130,15 @@ async fn bingx_swap_direct_live_stateful_order() -> dcex::Result<()> {
141
130
  let market_price = bingx_swap_market_price(&client).await?;
142
131
  let required_usdt =
143
132
  leveraged_margin_required(market_price, &quantity, &details, BINGX_LEVERAGE_VALUE)?;
144
- let transfers = match ensure_bingx_usdt(
145
- &client,
146
- BINGX_SWAP_ACCOUNT,
147
- margin_target(required_usdt),
148
- )
149
- .await?
150
- {
151
- Some(transfers) => transfers,
152
- None => {
153
- eprintln!(
154
- "skipping BingX swap live stateful order; insufficient transferable USDT, required={required_usdt:.8}"
155
- );
156
- return Ok(());
157
- }
158
- };
133
+ let transfers =
134
+ match ensure_bingx_usdt(&client, BINGX_SWAP_ACCOUNT, margin_target(required_usdt)).await? {
135
+ Some(transfers) => transfers,
136
+ None => {
137
+ return Err(live_test_error(
138
+ "BingX swap has insufficient transferable USDT for live stateful order",
139
+ ));
140
+ }
141
+ };
159
142
 
160
143
  let order_result = super::common::exchange_method_request(
161
144
  &client,
@@ -173,10 +156,9 @@ async fn bingx_swap_direct_live_stateful_order() -> dcex::Result<()> {
173
156
  Ok(order) => order,
174
157
  Err(error) if insufficient_funds_error(&error) => {
175
158
  return_bingx_transfers(&client, &transfers).await?;
176
- eprintln!(
177
- "skipping BingX swap live stateful order; insufficient margin for post-only order: {error}"
178
- );
179
- return Ok(());
159
+ return Err(live_test_error(format!(
160
+ "BingX swap insufficient margin for post-only order: {error}"
161
+ )));
180
162
  }
181
163
  Err(error) => {
182
164
  return_bingx_transfers(&client, &transfers).await?;
@@ -219,10 +201,9 @@ async fn bingx_swap_direct_live_stateful_order() -> dcex::Result<()> {
219
201
  Ok(market_order) => market_order,
220
202
  Err(error) if insufficient_funds_error(&error) => {
221
203
  return_bingx_transfers(&client, &transfers).await?;
222
- eprintln!(
223
- "skipping BingX swap live stateful order; insufficient margin for market open: {error}"
224
- );
225
- return Ok(());
204
+ return Err(live_test_error(format!(
205
+ "BingX swap insufficient margin for market open: {error}"
206
+ )));
226
207
  }
227
208
  Err(error) => {
228
209
  return_bingx_transfers(&client, &transfers).await?;
@@ -257,6 +238,25 @@ async fn bingx_spot_open_orders(client: &BingxClient) -> dcex::Result<bool> {
257
238
  Ok(contains_non_empty_array(&response.data, &["orders"]))
258
239
  }
259
240
 
241
+ async fn cleanup_bingx_spot_orders(client: &BingxClient) -> dcex::Result<()> {
242
+ if bingx_spot_open_orders(client).await? {
243
+ let cancel = super::common::exchange_method_request(
244
+ client,
245
+ "cancel_spot_open_orders",
246
+ params(&[("product_symbol", BTC_USDT_SPOT)]),
247
+ )
248
+ .await?;
249
+ assert_success(&cancel);
250
+ sleep(Duration::from_secs(1)).await;
251
+ }
252
+ if bingx_spot_open_orders(client).await? {
253
+ return Err(live_test_error(
254
+ "BingX spot still has open BTC-USDT orders after cleanup",
255
+ ));
256
+ }
257
+ Ok(())
258
+ }
259
+
260
260
  async fn bingx_swap_open_orders(client: &BingxClient) -> dcex::Result<bool> {
261
261
  let response = super::common::exchange_method_request(
262
262
  &client,
@@ -267,6 +267,40 @@ async fn bingx_swap_open_orders(client: &BingxClient) -> dcex::Result<bool> {
267
267
  Ok(contains_non_empty_array(&response.data, &["orders"]))
268
268
  }
269
269
 
270
+ async fn cleanup_bingx_swap_state(client: &BingxClient) -> dcex::Result<()> {
271
+ if bingx_swap_open_orders(client).await? {
272
+ let cancel = super::common::exchange_method_request(
273
+ client,
274
+ "cancel_swap_all_orders",
275
+ params(&[("product_symbol", BTC_USDT_SWAP)]),
276
+ )
277
+ .await?;
278
+ assert_success(&cancel);
279
+ sleep(Duration::from_secs(1)).await;
280
+ }
281
+ if bingx_swap_position_abs(client).await? != 0.0 {
282
+ let close = super::common::exchange_method_request(
283
+ client,
284
+ "close_swap_all_positions",
285
+ params(&[("product_symbol", BTC_USDT_SWAP)]),
286
+ )
287
+ .await?;
288
+ assert_success(&close);
289
+ sleep(Duration::from_secs(2)).await;
290
+ }
291
+ if bingx_swap_open_orders(client).await? {
292
+ return Err(live_test_error(
293
+ "BingX swap still has open BTC-USDT orders after cleanup",
294
+ ));
295
+ }
296
+ if wait_for_flat_position(|| bingx_swap_position_abs(client)).await? != 0.0 {
297
+ return Err(live_test_error(
298
+ "BingX BTC-USDT swap position still exists after cleanup",
299
+ ));
300
+ }
301
+ Ok(())
302
+ }
303
+
270
304
  async fn bingx_swap_position_abs(client: &BingxClient) -> dcex::Result<f64> {
271
305
  let response = super::common::exchange_method_request(
272
306
  &client,
@@ -329,9 +363,7 @@ async fn ensure_bingx_usdt(
329
363
  let source_available = match bingx_account_usdt(client, source_account).await {
330
364
  Ok(value) => value,
331
365
  Err(error) => {
332
- eprintln!(
333
- "skipping BingX transfer source {source_account}; balance unavailable: {error}"
334
- );
366
+ eprintln!("BingX transfer source {source_account} balance unavailable: {error}");
335
367
  continue;
336
368
  }
337
369
  };
@@ -341,7 +373,7 @@ async fn ensure_bingx_usdt(
341
373
  Ok(value) => value,
342
374
  Err(error) => {
343
375
  eprintln!(
344
- "skipping BingX transfer route {source_account}->{target_account}; transferable amount unavailable: {error}"
376
+ "BingX transfer route {source_account}->{target_account} transferable amount unavailable: {error}"
345
377
  );
346
378
  continue;
347
379
  }
@@ -366,7 +398,7 @@ async fn ensure_bingx_usdt(
366
398
  }
367
399
  Err(error) => {
368
400
  eprintln!(
369
- "skipping BingX transfer route {source_account}->{target_account}; transfer failed: {error}"
401
+ "BingX transfer route {source_account}->{target_account} transfer failed: {error}"
370
402
  );
371
403
  }
372
404
  }
@@ -8,10 +8,10 @@ use tokio::time::sleep;
8
8
  use super::common::{
9
9
  account_restriction, assert_success, asset_amount, bitget_unified_account_error,
10
10
  contains_non_empty_array, fetch_trading_details, first_bid_price, format_transfer_amount,
11
- format_transfer_amount_floor, leveraged_margin_required, margin_target, minimum_order_quantity,
12
- params, post_only_buy_price, price_below_market, push, require_env, require_live_trading,
13
- require_order_id, sum_abs_values_for_symbols, unique_client_id, wait_for_flat_position,
14
- wait_for_positive_position, BTC_USDT_SPOT, BTC_USDT_SWAP,
11
+ format_transfer_amount_floor, leveraged_margin_required, live_test_error, margin_target,
12
+ minimum_order_quantity, params, post_only_buy_price, price_below_market, push, require_env,
13
+ require_live_trading, require_order_id, sum_abs_values_for_symbols, unique_client_id,
14
+ wait_for_flat_position, wait_for_positive_position, BTC_USDT_SPOT, BTC_USDT_SWAP,
15
15
  };
16
16
 
17
17
  const BITGET_FUTURES_PRODUCT_TYPE: &str = "USDT-FUTURES";
@@ -71,8 +71,9 @@ async fn bitget_direct_live_stateful_order() -> dcex::Result<()> {
71
71
  let order = match order_result {
72
72
  Ok(response) => response,
73
73
  Err(error) if bitget_unified_account_error(&error) => {
74
- eprintln!("skipping Bitget classic stateful order on unified account: {error}");
75
- return Ok(());
74
+ return Err(live_test_error(format!(
75
+ "Bitget classic stateful order is unsupported on unified account: {error}"
76
+ )));
76
77
  }
77
78
  Err(error) => return Err(error),
78
79
  };
@@ -126,14 +127,7 @@ async fn bitget_swap_direct_live_stateful_order() -> dcex::Result<()> {
126
127
  )?;
127
128
  let uta = is_uta(&client).await;
128
129
 
129
- if bitget_open_swap_orders(&client, uta).await? {
130
- eprintln!("skipping Bitget swap live stateful order; open BTC-USDT swap orders exist");
131
- return Ok(());
132
- }
133
- if bitget_swap_position_abs(&client, uta).await? > 0.0 {
134
- eprintln!("skipping Bitget swap live stateful order; BTC-USDT swap position exists");
135
- return Ok(());
136
- }
130
+ cleanup_bitget_swap_state(&client, uta).await?;
137
131
 
138
132
  let orderbook = super::common::exchange_method_request(
139
133
  &client,
@@ -159,7 +153,11 @@ async fn bitget_swap_direct_live_stateful_order() -> dcex::Result<()> {
159
153
  let transferred =
160
154
  match ensure_bitget_futures_margin(&client, uta, margin_target(required_usdt)).await? {
161
155
  Some(amount) => amount,
162
- None => return Ok(()),
156
+ None => {
157
+ return Err(live_test_error(
158
+ "Bitget swap has insufficient transferable USDT for live stateful order",
159
+ ));
160
+ }
163
161
  };
164
162
 
165
163
  let order_result = bitget_place_swap_post_only_buy(&client, uta, &quantity, &price).await;
@@ -305,6 +303,27 @@ async fn bitget_swap_position_abs(client: &BitgetClient, uta: bool) -> dcex::Res
305
303
  ))
306
304
  }
307
305
 
306
+ async fn cleanup_bitget_swap_state(client: &BitgetClient, uta: bool) -> dcex::Result<()> {
307
+ if bitget_open_swap_orders(client, uta).await? {
308
+ return Err(live_test_error(
309
+ "Bitget swap has open BTC-USDT orders before live stateful order",
310
+ ));
311
+ }
312
+ let position = bitget_swap_position_abs(client, uta).await?;
313
+ if position > 0.0 {
314
+ let quantity = format_transfer_amount_floor(position, 8);
315
+ let close = bitget_place_swap_market_sell_reduce_only(client, uta, &quantity).await?;
316
+ assert_success(&close);
317
+ sleep(Duration::from_secs(2)).await;
318
+ }
319
+ if wait_for_flat_position(|| bitget_swap_position_abs(client, uta)).await? != 0.0 {
320
+ return Err(live_test_error(
321
+ "Bitget BTC-USDT swap position still exists after cleanup",
322
+ ));
323
+ }
324
+ Ok(())
325
+ }
326
+
308
327
  async fn ensure_bitget_futures_margin(
309
328
  client: &BitgetClient,
310
329
  uta: bool,
@@ -316,16 +335,10 @@ async fn ensure_bitget_futures_margin(
316
335
  }
317
336
  let needed = required - futures;
318
337
  if uta {
319
- eprintln!(
320
- "skipping Bitget UTA swap live stateful order; insufficient USDT, required={required:.8}, futures={futures:.8}"
321
- );
322
338
  return Ok(None);
323
339
  }
324
340
  let spot = bitget_spot_usdt(client).await?;
325
341
  if spot < needed {
326
- eprintln!(
327
- "skipping Bitget swap live stateful order; insufficient transferable USDT, required={required:.8}, futures={futures:.8}, spot={spot:.8}"
328
- );
329
342
  return Ok(None);
330
343
  }
331
344
  let amount = format_transfer_amount(needed);