ccxt 4.4.99 → 4.4.100

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 (426) hide show
  1. package/README.md +4 -4
  2. package/dist/373.ccxt.browser.js +7630 -0
  3. package/dist/373.ccxt.browser.min.js +1 -0
  4. package/dist/ccxt.browser.min.js +8 -8
  5. package/dist/cjs/ccxt.js +288 -288
  6. package/dist/cjs/src/abstract/alpaca.js +3 -1
  7. package/dist/cjs/src/abstract/apex.js +3 -1
  8. package/dist/cjs/src/abstract/ascendex.js +3 -1
  9. package/dist/cjs/src/abstract/bigone.js +3 -1
  10. package/dist/cjs/src/abstract/binance.js +3 -1
  11. package/dist/cjs/src/abstract/bingx.js +3 -1
  12. package/dist/cjs/src/abstract/bit2c.js +3 -1
  13. package/dist/cjs/src/abstract/bitbank.js +3 -1
  14. package/dist/cjs/src/abstract/bitbns.js +3 -1
  15. package/dist/cjs/src/abstract/bitfinex.js +3 -1
  16. package/dist/cjs/src/abstract/bitflyer.js +3 -1
  17. package/dist/cjs/src/abstract/bitget.js +3 -1
  18. package/dist/cjs/src/abstract/bithumb.js +3 -1
  19. package/dist/cjs/src/abstract/bitmart.js +3 -1
  20. package/dist/cjs/src/abstract/bitmex.js +3 -1
  21. package/dist/cjs/src/abstract/bitopro.js +3 -1
  22. package/dist/cjs/src/abstract/bitrue.js +3 -1
  23. package/dist/cjs/src/abstract/bitso.js +3 -1
  24. package/dist/cjs/src/abstract/bitstamp.js +3 -1
  25. package/dist/cjs/src/abstract/bitteam.js +3 -1
  26. package/dist/cjs/src/abstract/bittrade.js +3 -1
  27. package/dist/cjs/src/abstract/bitvavo.js +3 -1
  28. package/dist/cjs/src/abstract/blockchaincom.js +3 -1
  29. package/dist/cjs/src/abstract/blofin.js +3 -1
  30. package/dist/cjs/src/abstract/btcalpha.js +3 -1
  31. package/dist/cjs/src/abstract/btcbox.js +3 -1
  32. package/dist/cjs/src/abstract/btcmarkets.js +3 -1
  33. package/dist/cjs/src/abstract/btcturk.js +3 -1
  34. package/dist/cjs/src/abstract/bybit.js +3 -1
  35. package/dist/cjs/src/abstract/cex.js +3 -1
  36. package/dist/cjs/src/abstract/coinbase.js +3 -1
  37. package/dist/cjs/src/abstract/coinbaseexchange.js +3 -1
  38. package/dist/cjs/src/abstract/coinbaseinternational.js +3 -1
  39. package/dist/cjs/src/abstract/coincatch.js +3 -1
  40. package/dist/cjs/src/abstract/coincheck.js +3 -1
  41. package/dist/cjs/src/abstract/coinex.js +3 -1
  42. package/dist/cjs/src/abstract/coinmate.js +3 -1
  43. package/dist/cjs/src/abstract/coinmetro.js +3 -1
  44. package/dist/cjs/src/abstract/coinone.js +3 -1
  45. package/dist/cjs/src/abstract/coinsph.js +3 -1
  46. package/dist/cjs/src/abstract/coinspot.js +3 -1
  47. package/dist/cjs/src/abstract/cryptocom.js +3 -1
  48. package/dist/cjs/src/abstract/cryptomus.js +3 -1
  49. package/dist/cjs/src/abstract/defx.js +3 -1
  50. package/dist/cjs/src/abstract/delta.js +3 -1
  51. package/dist/cjs/src/abstract/deribit.js +3 -1
  52. package/dist/cjs/src/abstract/derive.js +3 -1
  53. package/dist/cjs/src/abstract/digifinex.js +3 -1
  54. package/dist/cjs/src/abstract/ellipx.js +3 -1
  55. package/dist/cjs/src/abstract/exmo.js +3 -1
  56. package/dist/cjs/src/abstract/foxbit.js +3 -1
  57. package/dist/cjs/src/abstract/gate.js +3 -1
  58. package/dist/cjs/src/abstract/gemini.js +3 -1
  59. package/dist/cjs/src/abstract/hashkey.js +3 -1
  60. package/dist/cjs/src/abstract/hibachi.js +3 -1
  61. package/dist/cjs/src/abstract/hitbtc.js +3 -1
  62. package/dist/cjs/src/abstract/hollaex.js +3 -1
  63. package/dist/cjs/src/abstract/htx.js +3 -1
  64. package/dist/cjs/src/abstract/hyperliquid.js +3 -1
  65. package/dist/cjs/src/abstract/independentreserve.js +3 -1
  66. package/dist/cjs/src/abstract/indodax.js +3 -1
  67. package/dist/cjs/src/abstract/kraken.js +3 -1
  68. package/dist/cjs/src/abstract/krakenfutures.js +3 -1
  69. package/dist/cjs/src/abstract/kucoin.js +3 -1
  70. package/dist/cjs/src/abstract/kucoinfutures.js +4 -2
  71. package/dist/cjs/src/abstract/latoken.js +3 -1
  72. package/dist/cjs/src/abstract/lbank.js +3 -1
  73. package/dist/cjs/src/abstract/luno.js +3 -1
  74. package/dist/cjs/src/abstract/mercado.js +3 -1
  75. package/dist/cjs/src/abstract/mexc.js +3 -1
  76. package/dist/cjs/src/abstract/modetrade.js +3 -1
  77. package/dist/cjs/src/abstract/ndax.js +3 -1
  78. package/dist/cjs/src/abstract/novadax.js +3 -1
  79. package/dist/cjs/src/abstract/oceanex.js +3 -1
  80. package/dist/cjs/src/abstract/okcoin.js +3 -1
  81. package/dist/cjs/src/abstract/okx.js +3 -1
  82. package/dist/cjs/src/abstract/onetrading.js +3 -1
  83. package/dist/cjs/src/abstract/oxfun.js +3 -1
  84. package/dist/cjs/src/abstract/p2b.js +3 -1
  85. package/dist/cjs/src/abstract/paradex.js +3 -1
  86. package/dist/cjs/src/abstract/paymium.js +3 -1
  87. package/dist/cjs/src/abstract/phemex.js +3 -1
  88. package/dist/cjs/src/abstract/poloniex.js +3 -1
  89. package/dist/cjs/src/abstract/probit.js +3 -1
  90. package/dist/cjs/src/abstract/timex.js +3 -1
  91. package/dist/cjs/src/abstract/tokocrypto.js +3 -1
  92. package/dist/cjs/src/abstract/tradeogre.js +3 -1
  93. package/dist/cjs/src/abstract/upbit.js +3 -1
  94. package/dist/cjs/src/abstract/vertex.js +3 -1
  95. package/dist/cjs/src/abstract/wavesexchange.js +3 -1
  96. package/dist/cjs/src/abstract/whitebit.js +3 -1
  97. package/dist/cjs/src/abstract/woo.js +3 -1
  98. package/dist/cjs/src/abstract/woofipro.js +3 -1
  99. package/dist/cjs/src/abstract/xt.js +3 -1
  100. package/dist/cjs/src/abstract/yobit.js +3 -1
  101. package/dist/cjs/src/abstract/zaif.js +3 -1
  102. package/dist/cjs/src/abstract/zonda.js +3 -1
  103. package/dist/cjs/src/alpaca.js +4 -2
  104. package/dist/cjs/src/apex.js +4 -2
  105. package/dist/cjs/src/ascendex.js +4 -2
  106. package/dist/cjs/src/base/Exchange.js +51 -11
  107. package/dist/cjs/src/base/functions/encode.js +2 -2
  108. package/dist/cjs/src/base/ws/Client.js +8 -2
  109. package/dist/cjs/src/base/ws/WsClient.js +4 -2
  110. package/dist/cjs/src/bequant.js +4 -2
  111. package/dist/cjs/src/bigone.js +4 -2
  112. package/dist/cjs/src/binance.js +5 -2
  113. package/dist/cjs/src/binancecoinm.js +4 -2
  114. package/dist/cjs/src/binanceus.js +4 -2
  115. package/dist/cjs/src/binanceusdm.js +4 -2
  116. package/dist/cjs/src/bingx.js +36 -4
  117. package/dist/cjs/src/bit2c.js +4 -2
  118. package/dist/cjs/src/bitbank.js +4 -2
  119. package/dist/cjs/src/bitbns.js +4 -2
  120. package/dist/cjs/src/bitfinex.js +7 -2
  121. package/dist/cjs/src/bitflyer.js +4 -2
  122. package/dist/cjs/src/bitget.js +42 -16
  123. package/dist/cjs/src/bithumb.js +4 -2
  124. package/dist/cjs/src/bitmart.js +4 -2
  125. package/dist/cjs/src/bitmex.js +5 -2
  126. package/dist/cjs/src/bitopro.js +4 -2
  127. package/dist/cjs/src/bitrue.js +4 -2
  128. package/dist/cjs/src/bitso.js +4 -2
  129. package/dist/cjs/src/bitstamp.js +4 -2
  130. package/dist/cjs/src/bitteam.js +4 -2
  131. package/dist/cjs/src/bittrade.js +4 -2
  132. package/dist/cjs/src/bitvavo.js +4 -2
  133. package/dist/cjs/src/blockchaincom.js +4 -2
  134. package/dist/cjs/src/blofin.js +4 -2
  135. package/dist/cjs/src/btcalpha.js +4 -2
  136. package/dist/cjs/src/btcbox.js +4 -2
  137. package/dist/cjs/src/btcmarkets.js +4 -2
  138. package/dist/cjs/src/btcturk.js +4 -2
  139. package/dist/cjs/src/bybit.js +4 -2
  140. package/dist/cjs/src/cex.js +4 -2
  141. package/dist/cjs/src/coinbase.js +4 -2
  142. package/dist/cjs/src/coinbaseadvanced.js +4 -2
  143. package/dist/cjs/src/coinbaseexchange.js +4 -2
  144. package/dist/cjs/src/coinbaseinternational.js +4 -2
  145. package/dist/cjs/src/coincatch.js +4 -2
  146. package/dist/cjs/src/coincheck.js +4 -2
  147. package/dist/cjs/src/coinex.js +5 -3
  148. package/dist/cjs/src/coinmate.js +4 -2
  149. package/dist/cjs/src/coinmetro.js +4 -2
  150. package/dist/cjs/src/coinone.js +4 -2
  151. package/dist/cjs/src/coinsph.js +4 -2
  152. package/dist/cjs/src/coinspot.js +4 -2
  153. package/dist/cjs/src/cryptocom.js +4 -2
  154. package/dist/cjs/src/cryptomus.js +4 -2
  155. package/dist/cjs/src/defx.js +4 -2
  156. package/dist/cjs/src/delta.js +4 -2
  157. package/dist/cjs/src/deribit.js +4 -2
  158. package/dist/cjs/src/derive.js +4 -2
  159. package/dist/cjs/src/digifinex.js +4 -2
  160. package/dist/cjs/src/ellipx.js +4 -2
  161. package/dist/cjs/src/exmo.js +4 -2
  162. package/dist/cjs/src/fmfwio.js +4 -2
  163. package/dist/cjs/src/foxbit.js +7 -6
  164. package/dist/cjs/src/gate.js +25 -2
  165. package/dist/cjs/src/gateio.js +4 -2
  166. package/dist/cjs/src/gemini.js +4 -2
  167. package/dist/cjs/src/hashkey.js +4 -2
  168. package/dist/cjs/src/hibachi.js +4 -2
  169. package/dist/cjs/src/hitbtc.js +4 -2
  170. package/dist/cjs/src/hollaex.js +4 -2
  171. package/dist/cjs/src/htx.js +5 -2
  172. package/dist/cjs/src/huobi.js +4 -2
  173. package/dist/cjs/src/hyperliquid.js +83 -30
  174. package/dist/cjs/src/independentreserve.js +4 -2
  175. package/dist/cjs/src/indodax.js +4 -2
  176. package/dist/cjs/src/kraken.js +4 -2
  177. package/dist/cjs/src/krakenfutures.js +5 -2
  178. package/dist/cjs/src/kucoin.js +4 -2
  179. package/dist/cjs/src/kucoinfutures.js +5 -2
  180. package/dist/cjs/src/latoken.js +4 -2
  181. package/dist/cjs/src/lbank.js +5 -3
  182. package/dist/cjs/src/luno.js +4 -2
  183. package/dist/cjs/src/mercado.js +4 -2
  184. package/dist/cjs/src/mexc.js +11 -2
  185. package/dist/cjs/src/modetrade.js +100 -2
  186. package/dist/cjs/src/myokx.js +4 -2
  187. package/dist/cjs/src/ndax.js +4 -2
  188. package/dist/cjs/src/novadax.js +4 -2
  189. package/dist/cjs/src/oceanex.js +4 -2
  190. package/dist/cjs/src/okcoin.js +4 -2
  191. package/dist/cjs/src/okx.js +4 -2
  192. package/dist/cjs/src/okxus.js +4 -2
  193. package/dist/cjs/src/onetrading.js +37 -2
  194. package/dist/cjs/src/oxfun.js +4 -2
  195. package/dist/cjs/src/p2b.js +36 -2
  196. package/dist/cjs/src/paradex.js +5 -2
  197. package/dist/cjs/src/paymium.js +4 -2
  198. package/dist/cjs/src/phemex.js +4 -2
  199. package/dist/cjs/src/poloniex.js +4 -2
  200. package/dist/cjs/src/pro/alpaca.js +4 -2
  201. package/dist/cjs/src/pro/apex.js +4 -2
  202. package/dist/cjs/src/pro/ascendex.js +4 -2
  203. package/dist/cjs/src/pro/bequant.js +5 -3
  204. package/dist/cjs/src/pro/binance.js +6 -3
  205. package/dist/cjs/src/pro/binancecoinm.js +5 -3
  206. package/dist/cjs/src/pro/binanceus.js +5 -3
  207. package/dist/cjs/src/pro/binanceusdm.js +4 -2
  208. package/dist/cjs/src/pro/bingx.js +4 -2
  209. package/dist/cjs/src/pro/bitfinex.js +4 -2
  210. package/dist/cjs/src/pro/bitget.js +4 -2
  211. package/dist/cjs/src/pro/bithumb.js +4 -2
  212. package/dist/cjs/src/pro/bitmart.js +4 -2
  213. package/dist/cjs/src/pro/bitmex.js +4 -2
  214. package/dist/cjs/src/pro/bitopro.js +4 -2
  215. package/dist/cjs/src/pro/bitrue.js +4 -2
  216. package/dist/cjs/src/pro/bitstamp.js +4 -2
  217. package/dist/cjs/src/pro/bittrade.js +4 -2
  218. package/dist/cjs/src/pro/bitvavo.js +5 -3
  219. package/dist/cjs/src/pro/blockchaincom.js +4 -2
  220. package/dist/cjs/src/pro/blofin.js +4 -2
  221. package/dist/cjs/src/pro/bybit.js +5 -2
  222. package/dist/cjs/src/pro/cex.js +4 -2
  223. package/dist/cjs/src/pro/coinbase.js +4 -2
  224. package/dist/cjs/src/pro/coinbaseadvanced.js +4 -2
  225. package/dist/cjs/src/pro/coinbaseexchange.js +4 -2
  226. package/dist/cjs/src/pro/coinbaseinternational.js +4 -2
  227. package/dist/cjs/src/pro/coincatch.js +4 -2
  228. package/dist/cjs/src/pro/coincheck.js +4 -2
  229. package/dist/cjs/src/pro/coinex.js +5 -3
  230. package/dist/cjs/src/pro/coinone.js +4 -2
  231. package/dist/cjs/src/pro/cryptocom.js +4 -2
  232. package/dist/cjs/src/pro/defx.js +4 -2
  233. package/dist/cjs/src/pro/deribit.js +4 -2
  234. package/dist/cjs/src/pro/derive.js +4 -2
  235. package/dist/cjs/src/pro/exmo.js +4 -2
  236. package/dist/cjs/src/pro/gate.js +4 -2
  237. package/dist/cjs/src/pro/gateio.js +4 -2
  238. package/dist/cjs/src/pro/gemini.js +4 -2
  239. package/dist/cjs/src/pro/hashkey.js +4 -2
  240. package/dist/cjs/src/pro/hitbtc.js +4 -2
  241. package/dist/cjs/src/pro/hollaex.js +4 -2
  242. package/dist/cjs/src/pro/htx.js +4 -2
  243. package/dist/cjs/src/pro/huobi.js +4 -2
  244. package/dist/cjs/src/pro/hyperliquid.js +107 -14
  245. package/dist/cjs/src/pro/independentreserve.js +4 -2
  246. package/dist/cjs/src/pro/kraken.js +4 -2
  247. package/dist/cjs/src/pro/krakenfutures.js +4 -2
  248. package/dist/cjs/src/pro/kucoin.js +5 -3
  249. package/dist/cjs/src/pro/kucoinfutures.js +5 -3
  250. package/dist/cjs/src/pro/lbank.js +4 -2
  251. package/dist/cjs/src/pro/luno.js +4 -2
  252. package/dist/cjs/src/pro/mexc.js +342 -159
  253. package/dist/cjs/src/pro/modetrade.js +4 -2
  254. package/dist/cjs/src/pro/myokx.js +4 -2
  255. package/dist/cjs/src/pro/ndax.js +4 -2
  256. package/dist/cjs/src/pro/okcoin.js +4 -2
  257. package/dist/cjs/src/pro/okx.js +6 -3
  258. package/dist/cjs/src/pro/okxus.js +4 -2
  259. package/dist/cjs/src/pro/onetrading.js +4 -2
  260. package/dist/cjs/src/pro/oxfun.js +5 -3
  261. package/dist/cjs/src/pro/p2b.js +4 -2
  262. package/dist/cjs/src/pro/paradex.js +4 -2
  263. package/dist/cjs/src/pro/phemex.js +4 -2
  264. package/dist/cjs/src/pro/poloniex.js +4 -2
  265. package/dist/cjs/src/pro/probit.js +4 -2
  266. package/dist/cjs/src/pro/tradeogre.js +4 -2
  267. package/dist/cjs/src/pro/upbit.js +4 -2
  268. package/dist/cjs/src/pro/vertex.js +4 -2
  269. package/dist/cjs/src/pro/whitebit.js +4 -2
  270. package/dist/cjs/src/pro/woo.js +4 -2
  271. package/dist/cjs/src/pro/woofipro.js +4 -2
  272. package/dist/cjs/src/pro/xt.js +4 -2
  273. package/dist/cjs/src/probit.js +39 -2
  274. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +7180 -0
  275. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +1 -1
  276. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +2 -2
  277. package/dist/cjs/src/static_dependencies/ethers/fragments.js +2 -2
  278. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +2 -2
  279. package/dist/cjs/src/static_dependencies/ethers/interface.js +2 -2
  280. package/dist/cjs/src/static_dependencies/ethers/typed.js +2 -2
  281. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +2 -2
  282. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +2 -2
  283. package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -7
  284. package/dist/cjs/src/static_dependencies/node-fetch/response.js +3 -1
  285. package/dist/cjs/src/static_dependencies/qs/index.cjs.js +3 -1
  286. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +3 -1
  287. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +3 -1
  288. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +7 -7
  289. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +4 -2
  290. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -1
  291. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +4 -2
  292. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +3 -1
  293. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +28 -26
  294. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +2 -2
  295. package/dist/cjs/src/timex.js +4 -2
  296. package/dist/cjs/src/tokocrypto.js +4 -2
  297. package/dist/cjs/src/tradeogre.js +4 -2
  298. package/dist/cjs/src/upbit.js +4 -2
  299. package/dist/cjs/src/vertex.js +4 -2
  300. package/dist/cjs/src/wavesexchange.js +4 -2
  301. package/dist/cjs/src/whitebit.js +4 -2
  302. package/dist/cjs/src/woo.js +4 -2
  303. package/dist/cjs/src/woofipro.js +100 -2
  304. package/dist/cjs/src/xt.js +4 -2
  305. package/dist/cjs/src/yobit.js +4 -2
  306. package/dist/cjs/src/zaif.js +4 -2
  307. package/dist/cjs/src/zonda.js +4 -2
  308. package/js/ccxt.d.ts +1 -1
  309. package/js/ccxt.js +1 -1
  310. package/js/src/abstract/bingx.d.ts +1 -0
  311. package/js/src/alpaca.d.ts +1 -1
  312. package/js/src/apex.d.ts +1 -1
  313. package/js/src/ascendex.d.ts +1 -1
  314. package/js/src/base/Exchange.d.ts +9 -7
  315. package/js/src/base/Exchange.js +50 -10
  316. package/js/src/base/types.d.ts +2 -1
  317. package/js/src/base/ws/Client.d.ts +1 -0
  318. package/js/src/base/ws/Client.js +5 -1
  319. package/js/src/bigone.d.ts +1 -1
  320. package/js/src/binance.d.ts +2 -2
  321. package/js/src/binance.js +1 -0
  322. package/js/src/bingx.d.ts +3 -2
  323. package/js/src/bingx.js +32 -2
  324. package/js/src/bitbank.d.ts +1 -1
  325. package/js/src/bitfinex.d.ts +1 -1
  326. package/js/src/bitfinex.js +3 -0
  327. package/js/src/bitflyer.d.ts +1 -1
  328. package/js/src/bitget.d.ts +4 -2
  329. package/js/src/bitget.js +38 -14
  330. package/js/src/bithumb.d.ts +1 -1
  331. package/js/src/bitmart.d.ts +2 -2
  332. package/js/src/bitmex.d.ts +2 -2
  333. package/js/src/bitmex.js +1 -0
  334. package/js/src/bitopro.d.ts +1 -1
  335. package/js/src/bitrue.d.ts +2 -2
  336. package/js/src/bitso.d.ts +1 -1
  337. package/js/src/bitstamp.d.ts +1 -1
  338. package/js/src/bittrade.d.ts +1 -1
  339. package/js/src/bitvavo.d.ts +1 -1
  340. package/js/src/blockchaincom.d.ts +1 -1
  341. package/js/src/blofin.d.ts +1 -1
  342. package/js/src/btcmarkets.d.ts +1 -1
  343. package/js/src/bybit.d.ts +2 -2
  344. package/js/src/coinbase.d.ts +1 -1
  345. package/js/src/coinbaseexchange.d.ts +1 -1
  346. package/js/src/coinbaseinternational.d.ts +1 -1
  347. package/js/src/coincatch.d.ts +2 -2
  348. package/js/src/coinex.d.ts +3 -3
  349. package/js/src/coinex.js +1 -1
  350. package/js/src/coinmate.d.ts +1 -1
  351. package/js/src/coinsph.d.ts +1 -1
  352. package/js/src/cryptocom.d.ts +1 -1
  353. package/js/src/defx.d.ts +2 -2
  354. package/js/src/delta.d.ts +1 -1
  355. package/js/src/deribit.d.ts +1 -1
  356. package/js/src/digifinex.d.ts +2 -2
  357. package/js/src/ellipx.d.ts +1 -1
  358. package/js/src/exmo.d.ts +1 -1
  359. package/js/src/foxbit.d.ts +1 -1
  360. package/js/src/foxbit.js +3 -3
  361. package/js/src/gate.d.ts +2 -2
  362. package/js/src/gate.js +21 -0
  363. package/js/src/gemini.d.ts +1 -1
  364. package/js/src/hashkey.d.ts +3 -3
  365. package/js/src/hibachi.d.ts +1 -1
  366. package/js/src/hitbtc.d.ts +2 -2
  367. package/js/src/hollaex.d.ts +1 -1
  368. package/js/src/htx.d.ts +3 -3
  369. package/js/src/htx.js +1 -0
  370. package/js/src/hyperliquid.d.ts +12 -2
  371. package/js/src/hyperliquid.js +79 -28
  372. package/js/src/independentreserve.d.ts +1 -1
  373. package/js/src/indodax.d.ts +1 -1
  374. package/js/src/kraken.d.ts +1 -1
  375. package/js/src/krakenfutures.d.ts +1 -1
  376. package/js/src/krakenfutures.js +1 -0
  377. package/js/src/kucoin.d.ts +2 -2
  378. package/js/src/kucoinfutures.d.ts +3 -2
  379. package/js/src/kucoinfutures.js +1 -0
  380. package/js/src/lbank.d.ts +1 -1
  381. package/js/src/lbank.js +1 -1
  382. package/js/src/mercado.d.ts +1 -1
  383. package/js/src/mexc.d.ts +2 -2
  384. package/js/src/mexc.js +7 -0
  385. package/js/src/modetrade.d.ts +26 -3
  386. package/js/src/modetrade.js +96 -0
  387. package/js/src/ndax.d.ts +1 -1
  388. package/js/src/novadax.d.ts +1 -1
  389. package/js/src/okcoin.d.ts +1 -1
  390. package/js/src/okx.d.ts +2 -2
  391. package/js/src/onetrading.js +33 -0
  392. package/js/src/oxfun.d.ts +1 -1
  393. package/js/src/p2b.js +32 -0
  394. package/js/src/paradex.d.ts +1 -1
  395. package/js/src/paradex.js +1 -0
  396. package/js/src/phemex.d.ts +2 -2
  397. package/js/src/poloniex.d.ts +2 -2
  398. package/js/src/pro/binance.js +2 -1
  399. package/js/src/pro/bitvavo.js +1 -1
  400. package/js/src/pro/bybit.js +1 -0
  401. package/js/src/pro/coinex.js +1 -1
  402. package/js/src/pro/hyperliquid.d.ts +26 -0
  403. package/js/src/pro/hyperliquid.js +103 -12
  404. package/js/src/pro/kucoin.js +1 -1
  405. package/js/src/pro/kucoinfutures.js +1 -1
  406. package/js/src/pro/mexc.d.ts +9 -6
  407. package/js/src/pro/mexc.js +338 -157
  408. package/js/src/pro/okx.js +2 -1
  409. package/js/src/pro/oxfun.js +1 -1
  410. package/js/src/probit.d.ts +1 -1
  411. package/js/src/probit.js +35 -0
  412. package/js/src/protobuf/mexc/compiled.cjs +7180 -0
  413. package/js/src/protobuf/mexc/compiled.d.cts +2 -0
  414. package/js/src/tokocrypto.d.ts +1 -1
  415. package/js/src/upbit.d.ts +1 -1
  416. package/js/src/vertex.d.ts +1 -1
  417. package/js/src/wavesexchange.d.ts +1 -1
  418. package/js/src/whitebit.d.ts +2 -2
  419. package/js/src/woo.d.ts +4 -4
  420. package/js/src/woofipro.d.ts +26 -3
  421. package/js/src/woofipro.js +96 -0
  422. package/js/src/xt.d.ts +3 -3
  423. package/js/src/yobit.d.ts +1 -1
  424. package/js/src/zaif.d.ts +1 -1
  425. package/js/src/zonda.d.ts +1 -1
  426. package/package.json +4 -3
@@ -38,13 +38,14 @@ export default class mexc extends mexcRest {
38
38
  'urls': {
39
39
  'api': {
40
40
  'ws': {
41
- 'spot': 'wss://wbs.mexc.com/ws',
41
+ 'spot': 'wss://wbs-api.mexc.com/ws',
42
42
  'swap': 'wss://contract.mexc.com/edge',
43
43
  },
44
44
  },
45
45
  },
46
46
  'options': {
47
47
  'listenKeyRefreshRate': 1200000,
48
+ 'decompressBinary': false,
48
49
  // TODO add reset connection after #16754 is merged
49
50
  'timeframes': {
50
51
  '1m': 'Min1',
@@ -88,15 +89,7 @@ export default class mexc extends mexcRest {
88
89
  const market = this.market(symbol);
89
90
  const messageHash = 'ticker:' + market['symbol'];
90
91
  if (market['spot']) {
91
- let miniTicker = false;
92
- [miniTicker, params] = this.handleOptionAndParams(params, 'watchTicker', 'miniTicker');
93
- let channel = undefined;
94
- if (miniTicker) {
95
- channel = 'spot@public.miniTicker.v3.api@' + market['id'] + '@UTC+8';
96
- }
97
- else {
98
- channel = 'spot@public.bookTicker.v3.api@' + market['id'];
99
- }
92
+ const channel = 'spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id'];
100
93
  return await this.watchSpotPublic(channel, messageHash, params);
101
94
  }
102
95
  else {
@@ -176,9 +169,9 @@ export default class mexc extends mexcRest {
176
169
  // }
177
170
  //
178
171
  this.handleBidAsk(client, message);
179
- const rawTicker = this.safeDict2(message, 'd', 'data');
172
+ const rawTicker = this.safeDictN(message, ['d', 'data', 'publicAggreBookTicker']);
180
173
  const marketId = this.safeString2(message, 's', 'symbol');
181
- const timestamp = this.safeInteger(message, 't');
174
+ const timestamp = this.safeInteger2(message, 't', 'sendtime');
182
175
  const market = this.safeMarket(marketId);
183
176
  const symbol = market['symbol'];
184
177
  let ticker = undefined;
@@ -221,34 +214,33 @@ export default class mexc extends mexcRest {
221
214
  const url = (isSpot) ? this.urls['api']['ws']['spot'] : this.urls['api']['ws']['swap'];
222
215
  const request = {};
223
216
  if (isSpot) {
224
- let miniTicker = false;
225
- [miniTicker, params] = this.handleOptionAndParams(params, 'watchTickers', 'miniTicker');
226
- const topics = [];
227
- if (!miniTicker) {
228
- if (symbols === undefined) {
229
- throw new ArgumentsRequired(this.id + ' watchTickers required symbols argument for the bookTicker channel');
230
- }
231
- const marketIds = this.marketIds(symbols);
232
- for (let i = 0; i < marketIds.length; i++) {
233
- const marketId = marketIds[i];
234
- messageHashes.push('ticker:' + symbols[i]);
235
- const channel = 'spot@public.bookTicker.v3.api@' + marketId;
236
- topics.push(channel);
237
- }
238
- }
239
- else {
240
- topics.push('spot@public.miniTickers.v3.api@UTC+8');
241
- if (symbols === undefined) {
242
- messageHashes.push('spot:ticker');
243
- }
244
- else {
245
- for (let i = 0; i < symbols.length; i++) {
246
- messageHashes.push('ticker:' + symbols[i]);
247
- }
248
- }
249
- }
250
- request['method'] = 'SUBSCRIPTION';
251
- request['params'] = topics;
217
+ throw new NotSupported(this.id + ' watchTickers does not support spot markets');
218
+ // let miniTicker = false;
219
+ // [ miniTicker, params ] = this.handleOptionAndParams (params, 'watchTickers', 'miniTicker');
220
+ // const topics = [];
221
+ // if (!miniTicker) {
222
+ // if (symbols === undefined) {
223
+ // throw new ArgumentsRequired (this.id + ' watchTickers required symbols argument for the bookTicker channel');
224
+ // }
225
+ // const marketIds = this.marketIds (symbols);
226
+ // for (let i = 0; i < marketIds.length; i++) {
227
+ // const marketId = marketIds[i];
228
+ // messageHashes.push ('ticker:' + symbols[i]);
229
+ // const channel = 'spot@public.bookTicker.v3.api@' + marketId;
230
+ // topics.push (channel);
231
+ // }
232
+ // } else {
233
+ // topics.push ('spot@public.miniTickers.v3.api@UTC+8');
234
+ // if (symbols === undefined) {
235
+ // messageHashes.push ('spot:ticker');
236
+ // } else {
237
+ // for (let i = 0; i < symbols.length; i++) {
238
+ // messageHashes.push ('ticker:' + symbols[i]);
239
+ // }
240
+ // }
241
+ // }
242
+ // request['method'] = 'SUBSCRIPTION';
243
+ // request['params'] = topics;
252
244
  }
253
245
  else {
254
246
  request['method'] = 'sub.tickers';
@@ -353,6 +345,11 @@ export default class mexc extends mexcRest {
353
345
  client.resolve(result, topic);
354
346
  }
355
347
  parseWsTicker(ticker, market = undefined) {
348
+ // protobuf ticker
349
+ // "bidprice": "93387.28", // Best bid price
350
+ // "bidquantity": "3.73485", // Best bid quantity
351
+ // "askprice": "93387.29", // Best ask price
352
+ // "askquantity": "7.669875" // Best ask quantity
356
353
  //
357
354
  // spot
358
355
  //
@@ -367,7 +364,7 @@ export default class mexc extends mexcRest {
367
364
  //
368
365
  // {
369
366
  // "s": "BTCUSDT",
370
- // "p": "76522",
367
+ // "p": "76521",
371
368
  // "r": "0.0012",
372
369
  // "tr": "0.0012",
373
370
  // "h": "77196.3",
@@ -393,10 +390,10 @@ export default class mexc extends mexcRest {
393
390
  'low': this.safeNumber(ticker, 'l'),
394
391
  'close': price,
395
392
  'last': price,
396
- 'bid': this.safeNumber(ticker, 'b'),
397
- 'bidVolume': this.safeNumber(ticker, 'B'),
398
- 'ask': this.safeNumber(ticker, 'a'),
399
- 'askVolume': this.safeNumber(ticker, 'A'),
393
+ 'bid': this.safeNumber2(ticker, 'b', 'bidPrice'),
394
+ 'bidVolume': this.safeNumber2(ticker, 'B', 'bidQuantity'),
395
+ 'ask': this.safeNumber2(ticker, 'a', 'askPrice'),
396
+ 'askVolume': this.safeNumber2(ticker, 'A', 'askQuantity'),
400
397
  'vwap': undefined,
401
398
  'previousClose': undefined,
402
399
  'change': undefined,
@@ -433,7 +430,7 @@ export default class mexc extends mexcRest {
433
430
  for (let i = 0; i < symbols.length; i++) {
434
431
  if (isSpot) {
435
432
  const market = this.market(symbols[i]);
436
- topics.push('spot@public.bookTicker.v3.api@' + market['id']);
433
+ topics.push('spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id']);
437
434
  }
438
435
  messageHashes.push('bidask:' + symbols[i]);
439
436
  }
@@ -541,7 +538,7 @@ export default class mexc extends mexcRest {
541
538
  /**
542
539
  * @method
543
540
  * @name mexc#watchOHLCV
544
- * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#kline-streams
541
+ * @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
545
542
  * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
546
543
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
547
544
  * @param {string} timeframe the length of time each candle represents
@@ -559,7 +556,7 @@ export default class mexc extends mexcRest {
559
556
  const messageHash = 'candles:' + symbol + ':' + timeframe;
560
557
  let ohlcv = undefined;
561
558
  if (market['spot']) {
562
- const channel = 'spot@public.kline.v3.api@' + market['id'] + '@' + timeframeId;
559
+ const channel = 'spot@public.kline.v3.api.pb@' + market['id'] + '@' + timeframeId;
563
560
  ohlcv = await this.watchSpotPublic(channel, messageHash, params);
564
561
  }
565
562
  else {
@@ -621,17 +618,47 @@ export default class mexc extends mexcRest {
621
618
  // "symbol": "BTC_USDT",
622
619
  // "ts": 1651230713067
623
620
  // }
621
+ // protobuf
622
+ // {
623
+ // "channel":"spot@public.kline.v3.api.pb@BTCUSDT@Min1",
624
+ // "symbol":"BTCUSDT",
625
+ // "symbolId":"2fb942154ef44a4ab2ef98c8afb6a4a7",
626
+ // "createTime":"1754737941062",
627
+ // "publicSpotKline":{
628
+ // "interval":"Min1",
629
+ // "windowStart":"1754737920",
630
+ // "openingPrice":"117317.31",
631
+ // "closingPrice":"117325.26",
632
+ // "highestPrice":"117341",
633
+ // "lowestPrice":"117317.3",
634
+ // "volume":"3.12599854",
635
+ // "amount":"366804.43",
636
+ // "windowEnd":"1754737980"
637
+ // }
638
+ // }
624
639
  //
625
- const d = this.safeValue2(message, 'd', 'data', {});
626
- const rawOhlcv = this.safeValue(d, 'k', d);
627
- const timeframeId = this.safeString2(rawOhlcv, 'i', 'interval');
628
- const timeframes = this.safeValue(this.options, 'timeframes', {});
629
- const timeframe = this.findTimeframe(timeframeId, timeframes);
630
- const marketId = this.safeString2(message, 's', 'symbol');
631
- const market = this.safeMarket(marketId);
632
- const symbol = market['symbol'];
640
+ let parsed = undefined;
641
+ let symbol = undefined;
642
+ let timeframe = undefined;
643
+ if ('publicSpotKline' in message) {
644
+ symbol = this.symbol(this.safeString(message, 'symbol'));
645
+ const data = this.safeDict(message, 'publicSpotKline', {});
646
+ const timeframeId = this.safeString(data, 'interval');
647
+ timeframe = this.findTimeframe(timeframeId, this.options['timeframes']);
648
+ parsed = this.parseWsOHLCV(data, this.safeMarket(symbol));
649
+ }
650
+ else {
651
+ const d = this.safeValue2(message, 'd', 'data', {});
652
+ const rawOhlcv = this.safeValue(d, 'k', d);
653
+ const timeframeId = this.safeString2(rawOhlcv, 'i', 'interval');
654
+ const timeframes = this.safeValue(this.options, 'timeframes', {});
655
+ timeframe = this.findTimeframe(timeframeId, timeframes);
656
+ const marketId = this.safeString2(message, 's', 'symbol');
657
+ const market = this.safeMarket(marketId);
658
+ symbol = market['symbol'];
659
+ parsed = this.parseWsOHLCV(rawOhlcv, market);
660
+ }
633
661
  const messageHash = 'candles:' + symbol + ':' + timeframe;
634
- const parsed = this.parseWsOHLCV(rawOhlcv, market);
635
662
  this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
636
663
  let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
637
664
  if (stored === undefined) {
@@ -674,25 +701,37 @@ export default class mexc extends mexcRest {
674
701
  // "rh": 27301.8,
675
702
  // "rl": 27301.8
676
703
  // }
704
+ // protobuf
705
+ //
706
+ // "interval":"Min1",
707
+ // "windowStart":"1754737920",
708
+ // "openingPrice":"117317.31",
709
+ // "closingPrice":"117325.26",
710
+ // "highestPrice":"117341",
711
+ // "lowestPrice":"117317.3",
712
+ // "volume":"3.12599854",
713
+ // "amount":"366804.43",
714
+ // "windowEnd":"1754737980"
677
715
  //
678
716
  return [
679
- this.safeTimestamp(ohlcv, 't'),
680
- this.safeNumber(ohlcv, 'o'),
681
- this.safeNumber(ohlcv, 'h'),
682
- this.safeNumber(ohlcv, 'l'),
683
- this.safeNumber(ohlcv, 'c'),
684
- this.safeNumber2(ohlcv, 'v', 'q'),
717
+ this.safeTimestamp2(ohlcv, 't', 'windowStart'),
718
+ this.safeNumber2(ohlcv, 'o', 'openingPrice'),
719
+ this.safeNumber2(ohlcv, 'h', 'highestPrice'),
720
+ this.safeNumber2(ohlcv, 'l', 'lowestPrice'),
721
+ this.safeNumber2(ohlcv, 'c', 'closingPrice'),
722
+ this.safeNumber2(ohlcv, 'v', 'volume'),
685
723
  ];
686
724
  }
687
725
  /**
688
726
  * @method
689
727
  * @name mexc#watchOrderBook
690
- * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#diff-depth-stream
728
+ * @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
691
729
  * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#public-channels
692
730
  * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
693
731
  * @param {string} symbol unified symbol of the market to fetch the order book for
694
732
  * @param {int} [limit] the maximum amount of order book entries to return
695
733
  * @param {object} [params] extra parameters specific to the exchange API endpoint
734
+ * @param {string} [params.frequency] the frequency of the order book updates, default is '10ms', can be '100ms' or '10ms
696
735
  * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
697
736
  */
698
737
  async watchOrderBook(symbol, limit = undefined, params = {}) {
@@ -702,7 +741,9 @@ export default class mexc extends mexcRest {
702
741
  const messageHash = 'orderbook:' + symbol;
703
742
  let orderbook = undefined;
704
743
  if (market['spot']) {
705
- const channel = 'spot@public.increase.depth.v3.api@' + market['id'];
744
+ let frequency = undefined;
745
+ [frequency, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'frequency', '100ms');
746
+ const channel = 'spot@public.aggre.depth.v3.api.pb@' + frequency + '@' + market['id'];
706
747
  orderbook = await this.watchSpotPublic(channel, messageHash, params);
707
748
  }
708
749
  else {
@@ -728,13 +769,13 @@ export default class mexc extends mexcRest {
728
769
  // return the first index of the cache that can be applied to the orderbook or -1 if not possible
729
770
  const nonce = this.safeInteger(orderbook, 'nonce');
730
771
  const firstDelta = this.safeValue(cache, 0);
731
- const firstDeltaNonce = this.safeInteger2(firstDelta, 'r', 'version');
772
+ const firstDeltaNonce = this.safeIntegerN(firstDelta, ['r', 'version', 'fromVersion']);
732
773
  if (nonce < firstDeltaNonce - 1) {
733
774
  return -1;
734
775
  }
735
776
  for (let i = 0; i < cache.length; i++) {
736
777
  const delta = cache[i];
737
- const deltaNonce = this.safeInteger2(delta, 'r', 'version');
778
+ const deltaNonce = this.safeIntegerN(delta, ['r', 'version', 'fromVersion']);
738
779
  if (deltaNonce >= nonce) {
739
780
  return i;
740
781
  }
@@ -784,8 +825,31 @@ export default class mexc extends mexcRest {
784
825
  // "symbol":"BTC_USDT",
785
826
  // "ts":1651239652372
786
827
  // }
828
+ // protofbuf
829
+ // {
830
+ // "channel":"spot@public.aggre.depth.v3.api.pb@100ms@BTCUSDT",
831
+ // "symbol":"BTCUSDT",
832
+ // "sendTime":"1754741322152",
833
+ // "publicAggreDepths":{
834
+ // "asks":[
835
+ // {
836
+ // "price":"117145.49",
837
+ // "quantity":"0"
838
+ // }
839
+ // ],
840
+ // "bids":[
841
+ // {
842
+ // "price":"117053.41",
843
+ // "quantity":"1.86837271"
844
+ // }
845
+ // ],
846
+ // "eventType":"spot@public.aggre.depth.v3.api.pb@100ms",
847
+ // "fromVersion":"43296363236",
848
+ // "toVersion":"43296363255"
849
+ // }
850
+ // }
787
851
  //
788
- const data = this.safeValue2(message, 'd', 'data');
852
+ const data = this.safeDictN(message, ['d', 'data', 'publicAggreDepths']);
789
853
  const marketId = this.safeString2(message, 's', 'symbol');
790
854
  const symbol = this.safeSymbol(marketId);
791
855
  const messageHash = 'orderbook:' + symbol;
@@ -807,9 +871,10 @@ export default class mexc extends mexcRest {
807
871
  }
808
872
  try {
809
873
  this.handleDelta(storedOrderBook, data);
810
- const timestamp = this.safeInteger2(message, 't', 'ts');
874
+ const timestamp = this.safeIntegerN(message, ['t', 'ts', 'sendTime']);
811
875
  storedOrderBook['timestamp'] = timestamp;
812
876
  storedOrderBook['datetime'] = this.iso8601(timestamp);
877
+ storedOrderBook['nonce'] = this.safeInteger(data, 'fromVersion');
813
878
  }
814
879
  catch (e) {
815
880
  delete client.subscriptions[messageHash];
@@ -830,15 +895,15 @@ export default class mexc extends mexcRest {
830
895
  bookside.storeArray(bidask);
831
896
  }
832
897
  else {
833
- const price = this.safeFloat(bidask, 'p');
834
- const amount = this.safeFloat(bidask, 'v');
898
+ const price = this.safeFloat2(bidask, 'p', 'price');
899
+ const amount = this.safeFloat2(bidask, 'v', 'quantity');
835
900
  bookside.store(price, amount);
836
901
  }
837
902
  }
838
903
  }
839
904
  handleDelta(orderbook, delta) {
840
905
  const existingNonce = this.safeInteger(orderbook, 'nonce');
841
- const deltaNonce = this.safeInteger2(delta, 'r', 'version');
906
+ const deltaNonce = this.safeIntegerN(delta, ['r', 'version', 'fromVersion']);
842
907
  if (deltaNonce < existingNonce) {
843
908
  // even when doing < comparison, this happens: https://app.travis-ci.com/github/ccxt/ccxt/builds/269234741#L1809
844
909
  // so, we just skip old updates
@@ -855,7 +920,7 @@ export default class mexc extends mexcRest {
855
920
  /**
856
921
  * @method
857
922
  * @name mexc#watchTrades
858
- * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#trade-streams
923
+ * @see https://www.mexc.com/api-docs/spot-v3/websocket-market-streams#trade-streams
859
924
  * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#public-channels
860
925
  * @description get the list of most recent trades for a particular symbol
861
926
  * @param {string} symbol unified symbol of the market to fetch trades for
@@ -871,7 +936,7 @@ export default class mexc extends mexcRest {
871
936
  const messageHash = 'trades:' + symbol;
872
937
  let trades = undefined;
873
938
  if (market['spot']) {
874
- const channel = 'spot@public.deals.v3.api@' + market['id'];
939
+ const channel = 'spot@public.aggre.deals.v3.api.pb@100ms@' + market['id'];
875
940
  trades = await this.watchSpotPublic(channel, messageHash, params);
876
941
  }
877
942
  else {
@@ -887,6 +952,23 @@ export default class mexc extends mexcRest {
887
952
  return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
888
953
  }
889
954
  handleTrades(client, message) {
955
+ // protobuf
956
+ // {
957
+ // "channel": "spot@public.aggre.deals.v3.api.pb@100ms@BTCUSDT",
958
+ // "publicdeals": {
959
+ // "dealsList": [
960
+ // {
961
+ // "price": "93220.00", // Trade price
962
+ // "quantity": "0.04438243", // Trade quantity
963
+ // "tradetype": 2, // Trade type (1: Buy, 2: Sell)
964
+ // "time": 1736409765051 // Trade time
965
+ // }
966
+ // ],
967
+ // "eventtype": "spot@public.aggre.deals.v3.api.pb@100ms" // Event type
968
+ // },
969
+ // "symbol": "BTCUSDT", // Trading pair
970
+ // "sendtime": 1736409765052 // Event time
971
+ // }
890
972
  //
891
973
  // {
892
974
  // "c": "spot@public.deals.v3.api@BTCUSDT",
@@ -928,8 +1010,8 @@ export default class mexc extends mexcRest {
928
1010
  stored = new ArrayCache(limit);
929
1011
  this.trades[symbol] = stored;
930
1012
  }
931
- const d = this.safeValue2(message, 'd', 'data');
932
- const trades = this.safeValue(d, 'deals', [d]);
1013
+ const d = this.safeDictN(message, ['d', 'data', 'publicAggreDeals']);
1014
+ const trades = this.safeList2(d, 'deals', 'dealsList', [d]);
933
1015
  for (let j = 0; j < trades.length; j++) {
934
1016
  let parsedTrade = undefined;
935
1017
  if (market['spot']) {
@@ -945,7 +1027,7 @@ export default class mexc extends mexcRest {
945
1027
  /**
946
1028
  * @method
947
1029
  * @name mexc#watchMyTrades
948
- * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#spot-account-deals
1030
+ * @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-deals
949
1031
  * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#private-channels
950
1032
  * @description watches information on multiple trades made by the user
951
1033
  * @param {string} symbol unified market symbol of the market trades were made in
@@ -967,7 +1049,7 @@ export default class mexc extends mexcRest {
967
1049
  [type, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
968
1050
  let trades = undefined;
969
1051
  if (type === 'spot') {
970
- const channel = 'spot@private.deals.v3.api';
1052
+ const channel = 'spot@private.deals.v3.api.pb';
971
1053
  trades = await this.watchSpotPrivate(channel, messageHash, params);
972
1054
  }
973
1055
  else {
@@ -996,11 +1078,27 @@ export default class mexc extends mexcRest {
996
1078
  // "s": "BTCUSDT",
997
1079
  // "t": 1678670940700
998
1080
  // }
1081
+ // {
1082
+ // channel: "spot@private.deals.v3.api.pb",
1083
+ // symbol: "MXUSDT",
1084
+ // sendTime: 1736417034332,
1085
+ // privateDeals {
1086
+ // price: "3.6962",
1087
+ // quantity: "1",
1088
+ // amount: "3.6962",
1089
+ // tradeType: 2,
1090
+ // tradeId: "505979017439002624X1",
1091
+ // orderId: "C02__505979017439002624115",
1092
+ // feeAmount: "0.0003998377369698171",
1093
+ // feeCurrency: "MX",
1094
+ // time: 1736417034280
1095
+ // }
1096
+ // }
999
1097
  //
1000
1098
  const messageHash = 'myTrades';
1001
- const data = this.safeValue2(message, 'd', 'data');
1099
+ const data = this.safeDictN(message, ['d', 'data', 'privateDeals']);
1002
1100
  const futuresMarketId = this.safeString(data, 'symbol');
1003
- const marketId = this.safeString(message, 's', futuresMarketId);
1101
+ const marketId = this.safeString2(message, 's', 'symbol', futuresMarketId);
1004
1102
  const market = this.safeMarket(marketId);
1005
1103
  const symbol = market['symbol'];
1006
1104
  let trade = undefined;
@@ -1023,7 +1121,7 @@ export default class mexc extends mexcRest {
1023
1121
  }
1024
1122
  parseWsTrade(trade, market = undefined) {
1025
1123
  //
1026
- // public trade
1124
+ // public trade (protobuf)
1027
1125
  // {
1028
1126
  // "p": "20382.70",
1029
1127
  // "v": "0.043800",
@@ -1043,7 +1141,6 @@ export default class mexc extends mexcRest {
1043
1141
  // "v": "5"
1044
1142
  // }
1045
1143
  //
1046
- //
1047
1144
  // d: {
1048
1145
  // p: '1.0005',
1049
1146
  // v: '5.71',
@@ -1058,23 +1155,37 @@ export default class mexc extends mexcRest {
1058
1155
  // n: '0.005712855',
1059
1156
  // N: 'USDT'
1060
1157
  // }
1061
- let timestamp = this.safeInteger(trade, 'T');
1062
- let tradeId = this.safeString(trade, 't');
1158
+ // protobuf
1159
+ //
1160
+ // {
1161
+ // price: "3.6962",
1162
+ // quantity: "1",
1163
+ // amount: "3.6962",
1164
+ // tradeType: 2,
1165
+ // tradeId: "505979017439002624X1",
1166
+ // orderId: "C02__505979017439002624115",
1167
+ // feeAmount: "0.0003998377369698171",
1168
+ // feeCurrency: "MX",
1169
+ // time: 1736417034280
1170
+ // }
1171
+ //
1172
+ let timestamp = this.safeInteger2(trade, 'T', 'time');
1173
+ let tradeId = this.safeString2(trade, 't', 'tradeId');
1063
1174
  if (timestamp === undefined) {
1064
1175
  timestamp = this.safeInteger(trade, 't');
1065
1176
  tradeId = undefined;
1066
1177
  }
1067
- const priceString = this.safeString(trade, 'p');
1068
- const amountString = this.safeString(trade, 'v');
1069
- const rawSide = this.safeString(trade, 'S');
1178
+ const priceString = this.safeString2(trade, 'p', 'price');
1179
+ const amountString = this.safeString2(trade, 'v', 'quantity');
1180
+ const rawSide = this.safeString2(trade, 'S', 'tradeType');
1070
1181
  const side = (rawSide === '1') ? 'buy' : 'sell';
1071
1182
  const isMaker = this.safeInteger(trade, 'm');
1072
- const feeAmount = this.safeNumber(trade, 'n');
1073
- const feeCurrencyId = this.safeString(trade, 'N');
1183
+ const feeAmount = this.safeString2(trade, 'n', 'feeAmount');
1184
+ const feeCurrencyId = this.safeString2(trade, 'N', 'feeCurrency');
1074
1185
  return this.safeTrade({
1075
1186
  'info': trade,
1076
1187
  'id': tradeId,
1077
- 'order': this.safeString(trade, 'i'),
1188
+ 'order': this.safeString2(trade, 'i', 'orderId'),
1078
1189
  'timestamp': timestamp,
1079
1190
  'datetime': this.iso8601(timestamp),
1080
1191
  'symbol': this.safeSymbol(undefined, market),
@@ -1083,7 +1194,7 @@ export default class mexc extends mexcRest {
1083
1194
  'takerOrMaker': (isMaker) ? 'maker' : 'taker',
1084
1195
  'price': priceString,
1085
1196
  'amount': amountString,
1086
- 'cost': undefined,
1197
+ 'cost': this.safeString(trade, 'amount'),
1087
1198
  'fee': {
1088
1199
  'cost': feeAmount,
1089
1200
  'currency': this.safeCurrencyCode(feeCurrencyId),
@@ -1093,7 +1204,7 @@ export default class mexc extends mexcRest {
1093
1204
  /**
1094
1205
  * @method
1095
1206
  * @name mexc#watchOrders
1096
- * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#spot-account-orders
1207
+ * @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-orders
1097
1208
  * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#margin-account-orders
1098
1209
  * @description watches information on multiple orders made by the user
1099
1210
  * @param {string} symbol unified market symbol of the market orders were made in
@@ -1116,7 +1227,7 @@ export default class mexc extends mexcRest {
1116
1227
  [type, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
1117
1228
  let orders = undefined;
1118
1229
  if (type === 'spot') {
1119
- const channel = type + '@private.orders.v3.api';
1230
+ const channel = 'spot@private.orders.v3.api.pb';
1120
1231
  orders = await this.watchSpotPrivate(channel, messageHash, params);
1121
1232
  }
1122
1233
  else {
@@ -1192,11 +1303,18 @@ export default class mexc extends mexcRest {
1192
1303
  // "s": "MXUSDT",
1193
1304
  // "t":1661938138193
1194
1305
  // }
1306
+ // protobuf
1307
+ // {
1308
+ // channel: "spot@private.orders.v3.api.pb",
1309
+ // symbol: "MXUSDT",
1310
+ // sendTime: 1736417034281,
1311
+ // privateOrders {}
1312
+ // }
1195
1313
  //
1196
1314
  const messageHash = 'orders';
1197
- const data = this.safeValue2(message, 'd', 'data');
1315
+ const data = this.safeDictN(message, ['d', 'data', 'privateOrders']);
1198
1316
  const futuresMarketId = this.safeString(data, 'symbol');
1199
- const marketId = this.safeString(message, 's', futuresMarketId);
1317
+ const marketId = this.safeString2(message, 's', 'symbol', futuresMarketId);
1200
1318
  const market = this.safeMarket(marketId);
1201
1319
  const symbol = market['symbol'];
1202
1320
  let parsed = undefined;
@@ -1267,11 +1385,28 @@ export default class mexc extends mexcRest {
1267
1385
  // "s":1,
1268
1386
  // "i":"e03a5c7441e44ed899466a7140b71391",
1269
1387
  // }
1388
+ // protofbuf spot order
1389
+ // {
1390
+ // "id":"C02__583905164440776704043",
1391
+ // "price":"0.001053",
1392
+ // "quantity":"2000",
1393
+ // "amount":"0",
1394
+ // "avgPrice":"0.001007",
1395
+ // "orderType":5,
1396
+ // "tradeType":1,
1397
+ // "remainAmount":"0.092",
1398
+ // "remainQuantity":"0",
1399
+ // "lastDealQuantity":"2000",
1400
+ // "cumulativeQuantity":"2000",
1401
+ // "cumulativeAmount":"2.014",
1402
+ // "status":2,
1403
+ // "createTime":"1754996075502"
1404
+ // }
1270
1405
  //
1271
- const timestamp = this.safeInteger(order, 'O');
1272
- const side = this.safeString(order, 'S');
1273
- const status = this.safeString(order, 's');
1274
- const type = this.safeString(order, 'o');
1406
+ const timestamp = this.safeInteger(order, 'createTime');
1407
+ const side = this.safeString(order, 'tradeType');
1408
+ const status = this.safeString(order, 'status');
1409
+ const type = this.safeString(order, 'orderType');
1275
1410
  let fee = undefined;
1276
1411
  const feeCurrency = this.safeString(order, 'N');
1277
1412
  if (feeCurrency !== undefined) {
@@ -1281,8 +1416,8 @@ export default class mexc extends mexcRest {
1281
1416
  };
1282
1417
  }
1283
1418
  return this.safeOrder({
1284
- 'id': this.safeString(order, 'i'),
1285
- 'clientOrderId': this.safeString(order, 'c'),
1419
+ 'id': this.safeString(order, 'id'),
1420
+ 'clientOrderId': this.safeString(order, 'clientOrderId'),
1286
1421
  'timestamp': timestamp,
1287
1422
  'datetime': this.iso8601(timestamp),
1288
1423
  'lastTradeTimestamp': undefined,
@@ -1291,14 +1426,14 @@ export default class mexc extends mexcRest {
1291
1426
  'type': this.parseWsOrderType(type),
1292
1427
  'timeInForce': this.parseWsTimeInForce(type),
1293
1428
  'side': (side === '1') ? 'buy' : 'sell',
1294
- 'price': this.safeString(order, 'p'),
1429
+ 'price': this.safeString(order, 'price'),
1295
1430
  'stopPrice': undefined,
1296
- 'triggerPrice': this.safeNumber(order, 'P'),
1297
- 'average': this.safeString(order, 'ap'),
1298
- 'amount': this.safeString(order, 'v'),
1299
- 'cost': this.safeString(order, 'a'),
1300
- 'filled': this.safeString(order, 'cv'),
1301
- 'remaining': this.safeString(order, 'V'),
1431
+ 'triggerPrice': undefined,
1432
+ 'average': this.safeString(order, 'avgPrice'),
1433
+ 'amount': this.safeString(order, 'quantity'),
1434
+ 'cost': this.safeString(order, 'amount'),
1435
+ 'filled': this.safeString(order, 'cumulativeQuantity'),
1436
+ 'remaining': this.safeString(order, 'remainQuantity'),
1302
1437
  'fee': fee,
1303
1438
  'trades': undefined,
1304
1439
  'info': order,
@@ -1321,7 +1456,7 @@ export default class mexc extends mexcRest {
1321
1456
  parseWsOrderType(type) {
1322
1457
  const types = {
1323
1458
  '1': 'limit',
1324
- '2': undefined,
1459
+ '2': 'limit',
1325
1460
  '3': undefined,
1326
1461
  '4': undefined,
1327
1462
  '5': 'market',
@@ -1343,7 +1478,7 @@ export default class mexc extends mexcRest {
1343
1478
  /**
1344
1479
  * @method
1345
1480
  * @name mexc#watchBalance
1346
- * @see https://mexcdevelop.github.io/apidocs/spot_v3_en/#spot-account-upadte
1481
+ * @see https://www.mexc.com/api-docs/spot-v3/websocket-user-data-streams#spot-account-update
1347
1482
  * @description watch balance and get the amount of funds available for trading or funds locked in orders
1348
1483
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1349
1484
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
@@ -1354,7 +1489,7 @@ export default class mexc extends mexcRest {
1354
1489
  [type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
1355
1490
  const messageHash = 'balance:' + type;
1356
1491
  if (type === 'spot') {
1357
- const channel = 'spot@private.account.v3.api';
1492
+ const channel = 'spot@private.account.v3.api.pb';
1358
1493
  return await this.watchSpotPrivate(channel, messageHash, params);
1359
1494
  }
1360
1495
  else {
@@ -1393,23 +1528,23 @@ export default class mexc extends mexcRest {
1393
1528
  // "ts": 1680059188190
1394
1529
  // }
1395
1530
  //
1396
- const c = this.safeString(message, 'c');
1531
+ const c = this.safeString2(message, 'c', 'channel');
1397
1532
  const type = (c === undefined) ? 'swap' : 'spot';
1398
1533
  const messageHash = 'balance:' + type;
1399
- const data = this.safeValue2(message, 'd', 'data');
1534
+ const data = this.safeDictN(message, ['d', 'data', 'privateAccount']);
1400
1535
  const futuresTimestamp = this.safeInteger(message, 'ts');
1401
- const timestamp = this.safeInteger(data, 'c', futuresTimestamp);
1536
+ const timestamp = this.safeInteger2(data, 'c', 'time', futuresTimestamp);
1402
1537
  if (!(type in this.balance)) {
1403
1538
  this.balance[type] = {};
1404
1539
  }
1405
1540
  this.balance[type]['info'] = data;
1406
1541
  this.balance[type]['timestamp'] = timestamp;
1407
1542
  this.balance[type]['datetime'] = this.iso8601(timestamp);
1408
- const currencyId = this.safeString2(data, 'a', 'currency');
1543
+ const currencyId = this.safeStringN(data, ['a', 'currency', 'vcoinName']);
1409
1544
  const code = this.safeCurrencyCode(currencyId);
1410
1545
  const account = this.account();
1411
- account['free'] = this.safeString2(data, 'f', 'availableBalance');
1412
- account['used'] = this.safeString2(data, 'l', 'frozenBalance');
1546
+ account['total'] = this.safeStringN(data, ['f', 'availableBalance', 'balanceAmount']);
1547
+ account['used'] = this.safeStringN(data, ['l', 'frozenBalance', 'frozenAmount']);
1413
1548
  this.balance[type][code] = account;
1414
1549
  this.balance[type] = this.safeBalance(this.balance[type]);
1415
1550
  client.resolve(this.balance[type], messageHash);
@@ -1429,14 +1564,7 @@ export default class mexc extends mexcRest {
1429
1564
  let url = undefined;
1430
1565
  let channel = undefined;
1431
1566
  if (market['spot']) {
1432
- let miniTicker = false;
1433
- [miniTicker, params] = this.handleOptionAndParams(params, 'watchTicker', 'miniTicker');
1434
- if (miniTicker) {
1435
- channel = 'spot@public.miniTicker.v3.api@' + market['id'] + '@UTC+8';
1436
- }
1437
- else {
1438
- channel = 'spot@public.bookTicker.v3.api@' + market['id'];
1439
- }
1567
+ channel = 'spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id'];
1440
1568
  url = this.urls['api']['ws']['spot'];
1441
1569
  params['unsubscribed'] = true;
1442
1570
  await this.watchSpotPublic(channel, messageHash, params);
@@ -1476,34 +1604,33 @@ export default class mexc extends mexcRest {
1476
1604
  const url = (isSpot) ? this.urls['api']['ws']['spot'] : this.urls['api']['ws']['swap'];
1477
1605
  const request = {};
1478
1606
  if (isSpot) {
1479
- let miniTicker = false;
1480
- [miniTicker, params] = this.handleOptionAndParams(params, 'watchTickers', 'miniTicker');
1481
- const topics = [];
1482
- if (!miniTicker) {
1483
- if (symbols === undefined) {
1484
- throw new ArgumentsRequired(this.id + ' watchTickers required symbols argument for the bookTicker channel');
1485
- }
1486
- const marketIds = this.marketIds(symbols);
1487
- for (let i = 0; i < marketIds.length; i++) {
1488
- const marketId = marketIds[i];
1489
- messageHashes.push('unsubscribe:ticker:' + symbols[i]);
1490
- const channel = 'spot@public.bookTicker.v3.api@' + marketId;
1491
- topics.push(channel);
1492
- }
1493
- }
1494
- else {
1495
- topics.push('spot@public.miniTickers.v3.api@UTC+8');
1496
- if (symbols === undefined) {
1497
- messageHashes.push('unsubscribe:spot:ticker');
1498
- }
1499
- else {
1500
- for (let i = 0; i < symbols.length; i++) {
1501
- messageHashes.push('unsubscribe:ticker:' + symbols[i]);
1502
- }
1503
- }
1504
- }
1505
- request['method'] = 'UNSUBSCRIPTION';
1506
- request['params'] = topics;
1607
+ throw new NotSupported(this.id + ' watchTickers does not support spot markets');
1608
+ // let miniTicker = false;
1609
+ // [ miniTicker, params ] = this.handleOptionAndParams (params, 'watchTickers', 'miniTicker');
1610
+ // const topics = [];
1611
+ // if (!miniTicker) {
1612
+ // if (symbols === undefined) {
1613
+ // throw new ArgumentsRequired (this.id + ' watchTickers required symbols argument for the bookTicker channel');
1614
+ // }
1615
+ // const marketIds = this.marketIds (symbols);
1616
+ // for (let i = 0; i < marketIds.length; i++) {
1617
+ // const marketId = marketIds[i];
1618
+ // messageHashes.push ('unsubscribe:ticker:' + symbols[i]);
1619
+ // const channel = 'spot@public.bookTicker.v3.api@' + marketId;
1620
+ // topics.push (channel);
1621
+ // }
1622
+ // } else {
1623
+ // topics.push ('spot@public.miniTickers.v3.api@UTC+8');
1624
+ // if (symbols === undefined) {
1625
+ // messageHashes.push ('unsubscribe:spot:ticker');
1626
+ // } else {
1627
+ // for (let i = 0; i < symbols.length; i++) {
1628
+ // messageHashes.push ('unsubscribe:ticker:' + symbols[i]);
1629
+ // }
1630
+ // }
1631
+ // }
1632
+ // request['method'] = 'UNSUBSCRIPTION';
1633
+ // request['params'] = topics;
1507
1634
  }
1508
1635
  else {
1509
1636
  request['method'] = 'unsub.tickers';
@@ -1541,7 +1668,7 @@ export default class mexc extends mexcRest {
1541
1668
  for (let i = 0; i < symbols.length; i++) {
1542
1669
  if (isSpot) {
1543
1670
  const market = this.market(symbols[i]);
1544
- topics.push('spot@public.bookTicker.v3.api@' + market['id']);
1671
+ topics.push('spot@public.aggre.bookTicker.v3.api.pb@100ms@' + market['id']);
1545
1672
  }
1546
1673
  messageHashes.push('unsubscribe:bidask:' + symbols[i]);
1547
1674
  }
@@ -1575,7 +1702,7 @@ export default class mexc extends mexcRest {
1575
1702
  let url = undefined;
1576
1703
  if (market['spot']) {
1577
1704
  url = this.urls['api']['ws']['spot'];
1578
- const channel = 'spot@public.kline.v3.api@' + market['id'] + '@' + timeframeId;
1705
+ const channel = 'spot@public.kline.v3.api.pb@' + market['id'] + '@' + timeframeId;
1579
1706
  params['unsubscribed'] = true;
1580
1707
  await this.watchSpotPublic(channel, messageHash, params);
1581
1708
  }
@@ -1598,6 +1725,7 @@ export default class mexc extends mexcRest {
1598
1725
  * @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1599
1726
  * @param {string} symbol unified array of symbols
1600
1727
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1728
+ * @param {string} [params.frequency] the frequency of the order book updates, default is '10ms', can be '100ms' or '10ms
1601
1729
  * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1602
1730
  */
1603
1731
  async unWatchOrderBook(symbol, params = {}) {
@@ -1608,7 +1736,9 @@ export default class mexc extends mexcRest {
1608
1736
  let url = undefined;
1609
1737
  if (market['spot']) {
1610
1738
  url = this.urls['api']['ws']['spot'];
1611
- const channel = 'spot@public.increase.depth.v3.api@' + market['id'];
1739
+ let frequency = undefined;
1740
+ [frequency, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'frequency', '100ms');
1741
+ const channel = 'spot@public.aggre.depth.v3.api.pb@' + frequency + '@' + market['id'];
1612
1742
  params['unsubscribed'] = true;
1613
1743
  await this.watchSpotPublic(channel, messageHash, params);
1614
1744
  }
@@ -1641,7 +1771,7 @@ export default class mexc extends mexcRest {
1641
1771
  let url = undefined;
1642
1772
  if (market['spot']) {
1643
1773
  url = this.urls['api']['ws']['spot'];
1644
- const channel = 'spot@public.deals.v3.api@' + market['id'];
1774
+ const channel = 'spot@public.aggre.deals.v3.api.pb@100ms@' + market['id'];
1645
1775
  params['unsubscribed'] = true;
1646
1776
  await this.watchSpotPublic(channel, messageHash, params);
1647
1777
  }
@@ -1764,6 +1894,7 @@ export default class mexc extends mexcRest {
1764
1894
  const channel = this.safeString(parts, 1);
1765
1895
  const methods = {
1766
1896
  'public.increase.depth.v3.api': this.handleOrderBookSubscription,
1897
+ 'public.aggre.depth.v3.api.pb': this.handleOrderBookSubscription,
1767
1898
  };
1768
1899
  const method = this.safeValue(methods, channel);
1769
1900
  if (method !== undefined) {
@@ -1771,12 +1902,62 @@ export default class mexc extends mexcRest {
1771
1902
  }
1772
1903
  }
1773
1904
  }
1905
+ handleProtobufMessage(client, message) {
1906
+ // protobuf message decoded
1907
+ // {
1908
+ // "channel":"spot@public.kline.v3.api.pb@BTCUSDT@Min1",
1909
+ // "symbol":"BTCUSDT",
1910
+ // "symbolId":"2fb942154ef44a4ab2ef98c8afb6a4a7",
1911
+ // "createTime":"1754737941062",
1912
+ // "publicSpotKline":{
1913
+ // "interval":"Min1",
1914
+ // "windowStart":"1754737920",
1915
+ // "openingPrice":"117317.31",
1916
+ // "closingPrice":"117325.26",
1917
+ // "highestPrice":"117341",
1918
+ // "lowestPrice":"117317.3",
1919
+ // "volume":"3.12599854",
1920
+ // "amount":"366804.43",
1921
+ // "windowEnd":"1754737980"
1922
+ // }
1923
+ // }
1924
+ const channel = this.safeString(message, 'channel');
1925
+ const channelParts = channel.split('@');
1926
+ const channelId = this.safeString(channelParts, 1);
1927
+ if (channelId === 'public.kline.v3.api.pb') {
1928
+ this.handleOHLCV(client, message);
1929
+ }
1930
+ else if (channelId === 'public.aggre.deals.v3.api.pb') {
1931
+ this.handleTrades(client, message);
1932
+ }
1933
+ else if (channelId === 'public.aggre.bookTicker.v3.api.pb') {
1934
+ this.handleTicker(client, message);
1935
+ }
1936
+ else if (channelId === 'public.aggre.depth.v3.api.pb') {
1937
+ this.handleOrderBook(client, message);
1938
+ }
1939
+ else if (channelId === 'private.account.v3.api.pb') {
1940
+ this.handleBalance(client, message);
1941
+ }
1942
+ else if (channelId === 'private.deals.v3.api.pb') {
1943
+ this.handleMyTrade(client, message);
1944
+ }
1945
+ else if (channelId === 'private.orders.v3.api.pb') {
1946
+ this.handleOrder(client, message);
1947
+ }
1948
+ return true;
1949
+ }
1774
1950
  handleMessage(client, message) {
1775
1951
  if (typeof message === 'string') {
1776
1952
  if (message === 'Invalid listen key') {
1777
1953
  const error = new AuthenticationError(this.id + ' invalid listen key');
1778
1954
  client.reject(error);
1955
+ return;
1779
1956
  }
1957
+ }
1958
+ if (this.isBinaryMessage(message)) {
1959
+ message = this.decodeProtoMsg(message);
1960
+ this.handleProtobufMessage(client, message);
1780
1961
  return;
1781
1962
  }
1782
1963
  if ('msg' in message) {