ccxt 4.5.28 → 4.5.29

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 (513) hide show
  1. package/README.md +21 -5
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/alpaca.js +21 -21
  5. package/dist/cjs/src/apex.js +20 -20
  6. package/dist/cjs/src/arkham.js +22 -22
  7. package/dist/cjs/src/ascendex.js +28 -28
  8. package/dist/cjs/src/backpack.js +22 -22
  9. package/dist/cjs/src/base/Exchange.js +48 -38
  10. package/dist/cjs/src/base/functions/throttle.js +54 -5
  11. package/dist/cjs/src/bigone.js +19 -19
  12. package/dist/cjs/src/binance.js +83 -82
  13. package/dist/cjs/src/bingx.js +46 -46
  14. package/dist/cjs/src/bit2c.js +11 -11
  15. package/dist/cjs/src/bitbank.js +49 -48
  16. package/dist/cjs/src/bitbns.js +13 -13
  17. package/dist/cjs/src/bitfinex.js +33 -33
  18. package/dist/cjs/src/bitflyer.js +17 -17
  19. package/dist/cjs/src/bitget.js +58 -57
  20. package/dist/cjs/src/bithumb.js +10 -10
  21. package/dist/cjs/src/bitmart.js +44 -44
  22. package/dist/cjs/src/bitmex.js +24 -24
  23. package/dist/cjs/src/bitopro.js +20 -20
  24. package/dist/cjs/src/bitrue.js +18 -18
  25. package/dist/cjs/src/bitso.js +20 -20
  26. package/dist/cjs/src/bitstamp.js +21 -21
  27. package/dist/cjs/src/bittrade.js +20 -20
  28. package/dist/cjs/src/bitvavo.js +19 -19
  29. package/dist/cjs/src/blockchaincom.js +20 -20
  30. package/dist/cjs/src/blofin.js +26 -26
  31. package/dist/cjs/src/btcalpha.js +35 -34
  32. package/dist/cjs/src/btcbox.js +10 -10
  33. package/dist/cjs/src/btcmarkets.js +16 -16
  34. package/dist/cjs/src/btcturk.js +10 -10
  35. package/dist/cjs/src/bullish.js +26 -26
  36. package/dist/cjs/src/bybit.js +67 -67
  37. package/dist/cjs/src/cex.js +18 -18
  38. package/dist/cjs/src/coinbase.js +40 -40
  39. package/dist/cjs/src/coinbaseexchange.js +22 -22
  40. package/dist/cjs/src/coinbaseinternational.js +22 -22
  41. package/dist/cjs/src/coincatch.js +39 -39
  42. package/dist/cjs/src/coincheck.js +11 -11
  43. package/dist/cjs/src/coinex.js +48 -48
  44. package/dist/cjs/src/coinmate.js +14 -14
  45. package/dist/cjs/src/coinmetro.js +14 -14
  46. package/dist/cjs/src/coinone.js +11 -11
  47. package/dist/cjs/src/coinsph.js +20 -20
  48. package/dist/cjs/src/coinspot.js +8 -8
  49. package/dist/cjs/src/cryptocom.js +32 -32
  50. package/dist/cjs/src/cryptomus.js +9 -9
  51. package/dist/cjs/src/deepcoin.js +33 -33
  52. package/dist/cjs/src/defx.js +23 -23
  53. package/dist/cjs/src/delta.js +29 -29
  54. package/dist/cjs/src/deribit.js +36 -36
  55. package/dist/cjs/src/derive.js +19 -19
  56. package/dist/cjs/src/digifinex.js +36 -36
  57. package/dist/cjs/src/dydx.js +22 -22
  58. package/dist/cjs/src/exmo.js +29 -29
  59. package/dist/cjs/src/foxbit.js +23 -23
  60. package/dist/cjs/src/gate.js +57 -57
  61. package/dist/cjs/src/gemini.js +16 -16
  62. package/dist/cjs/src/hashkey.js +35 -35
  63. package/dist/cjs/src/hibachi.js +24 -24
  64. package/dist/cjs/src/hitbtc.js +38 -38
  65. package/dist/cjs/src/hollaex.js +22 -22
  66. package/dist/cjs/src/htx.js +50 -50
  67. package/dist/cjs/src/hyperliquid.js +76 -42
  68. package/dist/cjs/src/independentreserve.js +13 -13
  69. package/dist/cjs/src/indodax.js +14 -14
  70. package/dist/cjs/src/kraken.js +30 -30
  71. package/dist/cjs/src/krakenfutures.js +21 -21
  72. package/dist/cjs/src/kucoin.js +44 -44
  73. package/dist/cjs/src/kucoinfutures.js +42 -40
  74. package/dist/cjs/src/latoken.js +16 -16
  75. package/dist/cjs/src/lbank.js +23 -23
  76. package/dist/cjs/src/luno.js +17 -17
  77. package/dist/cjs/src/mercado.js +11 -11
  78. package/dist/cjs/src/mexc.js +47 -47
  79. package/dist/cjs/src/modetrade.js +37 -35
  80. package/dist/cjs/src/ndax.js +19 -19
  81. package/dist/cjs/src/novadax.js +19 -19
  82. package/dist/cjs/src/oceanex.js +16 -16
  83. package/dist/cjs/src/okx.js +83 -83
  84. package/dist/cjs/src/onetrading.js +34 -33
  85. package/dist/cjs/src/oxfun.js +25 -25
  86. package/dist/cjs/src/p2b.js +11 -11
  87. package/dist/cjs/src/paradex.js +54 -54
  88. package/dist/cjs/src/paymium.js +20 -21
  89. package/dist/cjs/src/phemex.js +35 -35
  90. package/dist/cjs/src/poloniex.js +27 -27
  91. package/dist/cjs/src/pro/alpaca.js +5 -5
  92. package/dist/cjs/src/pro/apex.js +8 -8
  93. package/dist/cjs/src/pro/arkham.js +5 -5
  94. package/dist/cjs/src/pro/ascendex.js +5 -5
  95. package/dist/cjs/src/pro/backpack.js +16 -16
  96. package/dist/cjs/src/pro/binance.js +35 -35
  97. package/dist/cjs/src/pro/bingx.js +9 -9
  98. package/dist/cjs/src/pro/bitfinex.js +8 -8
  99. package/dist/cjs/src/pro/bitget.js +12 -12
  100. package/dist/cjs/src/pro/bithumb.js +3 -3
  101. package/dist/cjs/src/pro/bitmart.js +388 -31
  102. package/dist/cjs/src/pro/bitmex.js +9 -9
  103. package/dist/cjs/src/pro/bitopro.js +5 -5
  104. package/dist/cjs/src/pro/bitrue.js +2 -2
  105. package/dist/cjs/src/pro/bitstamp.js +3 -3
  106. package/dist/cjs/src/pro/bittrade.js +3 -3
  107. package/dist/cjs/src/pro/bitvavo.js +19 -19
  108. package/dist/cjs/src/pro/blockchaincom.js +5 -5
  109. package/dist/cjs/src/pro/blofin.js +10 -10
  110. package/dist/cjs/src/pro/bullish.js +6 -6
  111. package/dist/cjs/src/pro/bybit.js +19 -19
  112. package/dist/cjs/src/pro/cex.js +13 -13
  113. package/dist/cjs/src/pro/coinbase.js +13 -13
  114. package/dist/cjs/src/pro/coinbaseexchange.js +10 -10
  115. package/dist/cjs/src/pro/coinbaseinternational.js +8 -8
  116. package/dist/cjs/src/pro/coincatch.js +10 -10
  117. package/dist/cjs/src/pro/coincheck.js +2 -2
  118. package/dist/cjs/src/pro/coinex.js +10 -10
  119. package/dist/cjs/src/pro/coinone.js +3 -3
  120. package/dist/cjs/src/pro/cryptocom.js +20 -20
  121. package/dist/cjs/src/pro/deepcoin.js +8 -8
  122. package/dist/cjs/src/pro/defx.js +15 -15
  123. package/dist/cjs/src/pro/deribit.js +10 -10
  124. package/dist/cjs/src/pro/derive.js +6 -6
  125. package/dist/cjs/src/pro/dydx.js +3 -3
  126. package/dist/cjs/src/pro/exmo.js +7 -7
  127. package/dist/cjs/src/pro/gate.js +21 -59
  128. package/dist/cjs/src/pro/gemini.js +6 -6
  129. package/dist/cjs/src/pro/hashkey.js +6 -6
  130. package/dist/cjs/src/pro/hitbtc.js +8 -8
  131. package/dist/cjs/src/pro/hollaex.js +5 -5
  132. package/dist/cjs/src/pro/htx.js +9 -9
  133. package/dist/cjs/src/pro/hyperliquid.js +103 -14
  134. package/dist/cjs/src/pro/independentreserve.js +2 -2
  135. package/dist/cjs/src/pro/kraken.js +15 -15
  136. package/dist/cjs/src/pro/krakenfutures.js +10 -10
  137. package/dist/cjs/src/pro/kucoin.js +15 -15
  138. package/dist/cjs/src/pro/kucoinfutures.js +13 -13
  139. package/dist/cjs/src/pro/lbank.js +5 -5
  140. package/dist/cjs/src/pro/luno.js +2 -2
  141. package/dist/cjs/src/pro/mexc.js +13 -13
  142. package/dist/cjs/src/pro/modetrade.js +8 -8
  143. package/dist/cjs/src/pro/ndax.js +3 -3
  144. package/dist/cjs/src/pro/okx.js +25 -25
  145. package/dist/cjs/src/pro/onetrading.js +6 -6
  146. package/dist/cjs/src/pro/oxfun.js +13 -13
  147. package/dist/cjs/src/pro/p2b.js +5 -5
  148. package/dist/cjs/src/pro/paradex.js +8 -8
  149. package/dist/cjs/src/pro/phemex.js +7 -7
  150. package/dist/cjs/src/pro/poloniex.js +8 -8
  151. package/dist/cjs/src/pro/probit.js +6 -6
  152. package/dist/cjs/src/pro/toobit.js +9 -9
  153. package/dist/cjs/src/pro/upbit.js +9 -9
  154. package/dist/cjs/src/pro/whitebit.js +7 -7
  155. package/dist/cjs/src/pro/woo.js +13 -13
  156. package/dist/cjs/src/pro/woofipro.js +20 -20
  157. package/dist/cjs/src/pro/xt.js +2 -2
  158. package/dist/cjs/src/probit.js +18 -18
  159. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +11 -0
  160. package/dist/cjs/src/timex.js +16 -16
  161. package/dist/cjs/src/tokocrypto.js +17 -17
  162. package/dist/cjs/src/toobit.js +31 -29
  163. package/dist/cjs/src/upbit.js +23 -23
  164. package/dist/cjs/src/wavesexchange.js +86 -85
  165. package/dist/cjs/src/whitebit.js +44 -44
  166. package/dist/cjs/src/woo.js +51 -49
  167. package/dist/cjs/src/woofipro.js +104 -82
  168. package/dist/cjs/src/xt.js +17 -12
  169. package/dist/cjs/src/yobit.js +15 -15
  170. package/dist/cjs/src/zaif.js +38 -9
  171. package/dist/cjs/src/zebpay.js +35 -20
  172. package/dist/cjs/src/zonda.js +14 -14
  173. package/js/ccxt.d.ts +1 -1
  174. package/js/ccxt.js +1 -1
  175. package/js/src/alpaca.d.ts +21 -21
  176. package/js/src/alpaca.js +21 -21
  177. package/js/src/apex.d.ts +20 -20
  178. package/js/src/apex.js +20 -20
  179. package/js/src/arkham.d.ts +22 -22
  180. package/js/src/arkham.js +22 -22
  181. package/js/src/ascendex.d.ts +28 -28
  182. package/js/src/ascendex.js +28 -28
  183. package/js/src/backpack.d.ts +21 -21
  184. package/js/src/backpack.js +22 -22
  185. package/js/src/base/Exchange.d.ts +6 -3
  186. package/js/src/base/Exchange.js +48 -38
  187. package/js/src/base/functions/throttle.d.ts +22 -0
  188. package/js/src/base/functions/throttle.js +54 -5
  189. package/js/src/bigone.d.ts +19 -19
  190. package/js/src/bigone.js +19 -19
  191. package/js/src/binance.d.ts +82 -82
  192. package/js/src/binance.js +83 -82
  193. package/js/src/bingx.d.ts +46 -46
  194. package/js/src/bingx.js +46 -46
  195. package/js/src/bit2c.d.ts +11 -11
  196. package/js/src/bit2c.js +11 -11
  197. package/js/src/bitbank.d.ts +12 -12
  198. package/js/src/bitbank.js +49 -48
  199. package/js/src/bitbns.d.ts +13 -13
  200. package/js/src/bitbns.js +13 -13
  201. package/js/src/bitfinex.d.ts +33 -33
  202. package/js/src/bitfinex.js +33 -33
  203. package/js/src/bitflyer.d.ts +17 -17
  204. package/js/src/bitflyer.js +17 -17
  205. package/js/src/bitget.d.ts +57 -57
  206. package/js/src/bitget.js +58 -57
  207. package/js/src/bithumb.d.ts +10 -10
  208. package/js/src/bithumb.js +10 -10
  209. package/js/src/bitmart.d.ts +42 -42
  210. package/js/src/bitmart.js +44 -44
  211. package/js/src/bitmex.d.ts +24 -24
  212. package/js/src/bitmex.js +24 -24
  213. package/js/src/bitopro.d.ts +20 -20
  214. package/js/src/bitopro.js +20 -20
  215. package/js/src/bitrue.d.ts +18 -18
  216. package/js/src/bitrue.js +18 -18
  217. package/js/src/bitso.d.ts +20 -20
  218. package/js/src/bitso.js +20 -20
  219. package/js/src/bitstamp.d.ts +21 -21
  220. package/js/src/bitstamp.js +21 -21
  221. package/js/src/bittrade.d.ts +20 -20
  222. package/js/src/bittrade.js +20 -20
  223. package/js/src/bitvavo.d.ts +19 -19
  224. package/js/src/bitvavo.js +19 -19
  225. package/js/src/blockchaincom.d.ts +20 -20
  226. package/js/src/blockchaincom.js +20 -20
  227. package/js/src/blofin.d.ts +26 -26
  228. package/js/src/blofin.js +26 -26
  229. package/js/src/btcalpha.d.ts +14 -14
  230. package/js/src/btcalpha.js +35 -34
  231. package/js/src/btcbox.d.ts +10 -10
  232. package/js/src/btcbox.js +10 -10
  233. package/js/src/btcmarkets.d.ts +16 -16
  234. package/js/src/btcmarkets.js +16 -16
  235. package/js/src/btcturk.d.ts +10 -10
  236. package/js/src/btcturk.js +10 -10
  237. package/js/src/bullish.d.ts +26 -26
  238. package/js/src/bullish.js +26 -26
  239. package/js/src/bybit.d.ts +66 -66
  240. package/js/src/bybit.js +67 -67
  241. package/js/src/cex.d.ts +18 -18
  242. package/js/src/cex.js +18 -18
  243. package/js/src/coinbase.d.ts +40 -40
  244. package/js/src/coinbase.js +40 -40
  245. package/js/src/coinbaseexchange.d.ts +22 -22
  246. package/js/src/coinbaseexchange.js +22 -22
  247. package/js/src/coinbaseinternational.d.ts +22 -22
  248. package/js/src/coinbaseinternational.js +22 -22
  249. package/js/src/coincatch.d.ts +39 -39
  250. package/js/src/coincatch.js +39 -39
  251. package/js/src/coincheck.d.ts +11 -11
  252. package/js/src/coincheck.js +11 -11
  253. package/js/src/coinex.d.ts +48 -48
  254. package/js/src/coinex.js +48 -48
  255. package/js/src/coinmate.d.ts +14 -14
  256. package/js/src/coinmate.js +14 -14
  257. package/js/src/coinmetro.d.ts +14 -14
  258. package/js/src/coinmetro.js +14 -14
  259. package/js/src/coinone.d.ts +11 -11
  260. package/js/src/coinone.js +11 -11
  261. package/js/src/coinsph.d.ts +20 -20
  262. package/js/src/coinsph.js +20 -20
  263. package/js/src/coinspot.d.ts +8 -8
  264. package/js/src/coinspot.js +8 -8
  265. package/js/src/cryptocom.d.ts +32 -32
  266. package/js/src/cryptocom.js +32 -32
  267. package/js/src/cryptomus.d.ts +9 -9
  268. package/js/src/cryptomus.js +9 -9
  269. package/js/src/deepcoin.d.ts +33 -33
  270. package/js/src/deepcoin.js +33 -33
  271. package/js/src/defx.d.ts +23 -23
  272. package/js/src/defx.js +23 -23
  273. package/js/src/delta.d.ts +29 -29
  274. package/js/src/delta.js +29 -29
  275. package/js/src/deribit.d.ts +36 -36
  276. package/js/src/deribit.js +36 -36
  277. package/js/src/derive.d.ts +19 -19
  278. package/js/src/derive.js +19 -19
  279. package/js/src/digifinex.d.ts +36 -36
  280. package/js/src/digifinex.js +36 -36
  281. package/js/src/dydx.d.ts +22 -22
  282. package/js/src/dydx.js +22 -22
  283. package/js/src/exmo.d.ts +29 -29
  284. package/js/src/exmo.js +29 -29
  285. package/js/src/foxbit.d.ts +23 -23
  286. package/js/src/foxbit.js +23 -23
  287. package/js/src/gate.d.ts +57 -57
  288. package/js/src/gate.js +57 -57
  289. package/js/src/gemini.d.ts +16 -16
  290. package/js/src/gemini.js +16 -16
  291. package/js/src/hashkey.d.ts +35 -35
  292. package/js/src/hashkey.js +35 -35
  293. package/js/src/hibachi.d.ts +24 -24
  294. package/js/src/hibachi.js +24 -24
  295. package/js/src/hitbtc.d.ts +38 -38
  296. package/js/src/hitbtc.js +38 -38
  297. package/js/src/hollaex.d.ts +22 -22
  298. package/js/src/hollaex.js +22 -22
  299. package/js/src/htx.d.ts +50 -50
  300. package/js/src/htx.js +50 -50
  301. package/js/src/hyperliquid.d.ts +46 -36
  302. package/js/src/hyperliquid.js +76 -42
  303. package/js/src/independentreserve.d.ts +13 -13
  304. package/js/src/independentreserve.js +13 -13
  305. package/js/src/indodax.d.ts +14 -14
  306. package/js/src/indodax.js +14 -14
  307. package/js/src/kraken.d.ts +30 -30
  308. package/js/src/kraken.js +30 -30
  309. package/js/src/krakenfutures.d.ts +21 -21
  310. package/js/src/krakenfutures.js +21 -21
  311. package/js/src/kucoin.d.ts +44 -44
  312. package/js/src/kucoin.js +44 -44
  313. package/js/src/kucoinfutures.d.ts +35 -35
  314. package/js/src/kucoinfutures.js +42 -40
  315. package/js/src/latoken.d.ts +16 -16
  316. package/js/src/latoken.js +16 -16
  317. package/js/src/lbank.d.ts +23 -23
  318. package/js/src/lbank.js +23 -23
  319. package/js/src/luno.d.ts +17 -17
  320. package/js/src/luno.js +17 -17
  321. package/js/src/mercado.d.ts +11 -11
  322. package/js/src/mercado.js +11 -11
  323. package/js/src/mexc.d.ts +47 -47
  324. package/js/src/mexc.js +47 -47
  325. package/js/src/modetrade.d.ts +31 -31
  326. package/js/src/modetrade.js +37 -35
  327. package/js/src/ndax.d.ts +19 -19
  328. package/js/src/ndax.js +19 -19
  329. package/js/src/novadax.d.ts +19 -19
  330. package/js/src/novadax.js +19 -19
  331. package/js/src/oceanex.d.ts +16 -16
  332. package/js/src/oceanex.js +16 -16
  333. package/js/src/okx.d.ts +74 -74
  334. package/js/src/okx.js +83 -83
  335. package/js/src/onetrading.d.ts +34 -33
  336. package/js/src/onetrading.js +34 -33
  337. package/js/src/oxfun.d.ts +25 -25
  338. package/js/src/oxfun.js +25 -25
  339. package/js/src/p2b.d.ts +11 -11
  340. package/js/src/p2b.js +11 -11
  341. package/js/src/paradex.d.ts +54 -54
  342. package/js/src/paradex.js +54 -54
  343. package/js/src/paymium.d.ts +20 -21
  344. package/js/src/paymium.js +20 -21
  345. package/js/src/phemex.d.ts +30 -30
  346. package/js/src/phemex.js +35 -35
  347. package/js/src/poloniex.d.ts +26 -26
  348. package/js/src/poloniex.js +27 -27
  349. package/js/src/pro/alpaca.d.ts +5 -5
  350. package/js/src/pro/alpaca.js +5 -5
  351. package/js/src/pro/apex.d.ts +8 -8
  352. package/js/src/pro/apex.js +8 -8
  353. package/js/src/pro/arkham.d.ts +5 -5
  354. package/js/src/pro/arkham.js +5 -5
  355. package/js/src/pro/ascendex.d.ts +5 -5
  356. package/js/src/pro/ascendex.js +5 -5
  357. package/js/src/pro/backpack.d.ts +16 -16
  358. package/js/src/pro/backpack.js +16 -16
  359. package/js/src/pro/binance.d.ts +35 -35
  360. package/js/src/pro/binance.js +35 -35
  361. package/js/src/pro/bingx.d.ts +9 -9
  362. package/js/src/pro/bingx.js +9 -9
  363. package/js/src/pro/bitfinex.d.ts +8 -8
  364. package/js/src/pro/bitfinex.js +8 -8
  365. package/js/src/pro/bitget.d.ts +12 -12
  366. package/js/src/pro/bitget.js +12 -12
  367. package/js/src/pro/bithumb.d.ts +3 -3
  368. package/js/src/pro/bithumb.js +3 -3
  369. package/js/src/pro/bitmart.d.ts +120 -9
  370. package/js/src/pro/bitmart.js +388 -31
  371. package/js/src/pro/bitmex.d.ts +9 -9
  372. package/js/src/pro/bitmex.js +9 -9
  373. package/js/src/pro/bitopro.d.ts +5 -5
  374. package/js/src/pro/bitopro.js +5 -5
  375. package/js/src/pro/bitrue.d.ts +2 -2
  376. package/js/src/pro/bitrue.js +2 -2
  377. package/js/src/pro/bitstamp.d.ts +3 -3
  378. package/js/src/pro/bitstamp.js +3 -3
  379. package/js/src/pro/bittrade.d.ts +3 -3
  380. package/js/src/pro/bittrade.js +3 -3
  381. package/js/src/pro/bitvavo.d.ts +19 -19
  382. package/js/src/pro/bitvavo.js +19 -19
  383. package/js/src/pro/blockchaincom.d.ts +5 -5
  384. package/js/src/pro/blockchaincom.js +5 -5
  385. package/js/src/pro/blofin.d.ts +10 -10
  386. package/js/src/pro/blofin.js +10 -10
  387. package/js/src/pro/bullish.d.ts +6 -6
  388. package/js/src/pro/bullish.js +6 -6
  389. package/js/src/pro/bybit.d.ts +19 -19
  390. package/js/src/pro/bybit.js +19 -19
  391. package/js/src/pro/cex.d.ts +13 -13
  392. package/js/src/pro/cex.js +13 -13
  393. package/js/src/pro/coinbase.d.ts +13 -13
  394. package/js/src/pro/coinbase.js +13 -13
  395. package/js/src/pro/coinbaseexchange.d.ts +10 -10
  396. package/js/src/pro/coinbaseexchange.js +10 -10
  397. package/js/src/pro/coinbaseinternational.d.ts +8 -8
  398. package/js/src/pro/coinbaseinternational.js +8 -8
  399. package/js/src/pro/coincatch.d.ts +10 -10
  400. package/js/src/pro/coincatch.js +10 -10
  401. package/js/src/pro/coincheck.d.ts +2 -2
  402. package/js/src/pro/coincheck.js +2 -2
  403. package/js/src/pro/coinex.d.ts +10 -10
  404. package/js/src/pro/coinex.js +10 -10
  405. package/js/src/pro/coinone.d.ts +3 -3
  406. package/js/src/pro/coinone.js +3 -3
  407. package/js/src/pro/cryptocom.d.ts +20 -20
  408. package/js/src/pro/cryptocom.js +20 -20
  409. package/js/src/pro/deepcoin.d.ts +8 -8
  410. package/js/src/pro/deepcoin.js +8 -8
  411. package/js/src/pro/defx.d.ts +15 -15
  412. package/js/src/pro/defx.js +15 -15
  413. package/js/src/pro/deribit.d.ts +10 -10
  414. package/js/src/pro/deribit.js +10 -10
  415. package/js/src/pro/derive.d.ts +6 -6
  416. package/js/src/pro/derive.js +6 -6
  417. package/js/src/pro/dydx.d.ts +3 -3
  418. package/js/src/pro/dydx.js +3 -3
  419. package/js/src/pro/exmo.d.ts +7 -7
  420. package/js/src/pro/exmo.js +7 -7
  421. package/js/src/pro/gate.d.ts +22 -23
  422. package/js/src/pro/gate.js +21 -59
  423. package/js/src/pro/gemini.d.ts +6 -6
  424. package/js/src/pro/gemini.js +6 -6
  425. package/js/src/pro/hashkey.d.ts +6 -6
  426. package/js/src/pro/hashkey.js +6 -6
  427. package/js/src/pro/hitbtc.d.ts +8 -8
  428. package/js/src/pro/hitbtc.js +8 -8
  429. package/js/src/pro/hollaex.d.ts +5 -5
  430. package/js/src/pro/hollaex.js +5 -5
  431. package/js/src/pro/htx.d.ts +9 -9
  432. package/js/src/pro/htx.js +9 -9
  433. package/js/src/pro/hyperliquid.d.ts +38 -14
  434. package/js/src/pro/hyperliquid.js +103 -14
  435. package/js/src/pro/independentreserve.d.ts +2 -2
  436. package/js/src/pro/independentreserve.js +2 -2
  437. package/js/src/pro/kraken.d.ts +15 -15
  438. package/js/src/pro/kraken.js +15 -15
  439. package/js/src/pro/krakenfutures.d.ts +10 -10
  440. package/js/src/pro/krakenfutures.js +10 -10
  441. package/js/src/pro/kucoin.d.ts +15 -15
  442. package/js/src/pro/kucoin.js +15 -15
  443. package/js/src/pro/kucoinfutures.d.ts +13 -13
  444. package/js/src/pro/kucoinfutures.js +13 -13
  445. package/js/src/pro/lbank.d.ts +5 -5
  446. package/js/src/pro/lbank.js +5 -5
  447. package/js/src/pro/luno.d.ts +2 -2
  448. package/js/src/pro/luno.js +2 -2
  449. package/js/src/pro/mexc.d.ts +13 -13
  450. package/js/src/pro/mexc.js +13 -13
  451. package/js/src/pro/modetrade.d.ts +8 -8
  452. package/js/src/pro/modetrade.js +8 -8
  453. package/js/src/pro/ndax.d.ts +3 -3
  454. package/js/src/pro/ndax.js +3 -3
  455. package/js/src/pro/okx.d.ts +25 -25
  456. package/js/src/pro/okx.js +25 -25
  457. package/js/src/pro/onetrading.d.ts +6 -6
  458. package/js/src/pro/onetrading.js +6 -6
  459. package/js/src/pro/oxfun.d.ts +13 -13
  460. package/js/src/pro/oxfun.js +13 -13
  461. package/js/src/pro/p2b.d.ts +5 -5
  462. package/js/src/pro/p2b.js +5 -5
  463. package/js/src/pro/paradex.d.ts +8 -8
  464. package/js/src/pro/paradex.js +8 -8
  465. package/js/src/pro/phemex.d.ts +7 -7
  466. package/js/src/pro/phemex.js +7 -7
  467. package/js/src/pro/poloniex.d.ts +8 -8
  468. package/js/src/pro/poloniex.js +8 -8
  469. package/js/src/pro/probit.d.ts +6 -6
  470. package/js/src/pro/probit.js +6 -6
  471. package/js/src/pro/toobit.d.ts +9 -9
  472. package/js/src/pro/toobit.js +9 -9
  473. package/js/src/pro/upbit.d.ts +9 -9
  474. package/js/src/pro/upbit.js +9 -9
  475. package/js/src/pro/whitebit.d.ts +7 -7
  476. package/js/src/pro/whitebit.js +7 -7
  477. package/js/src/pro/woo.d.ts +13 -13
  478. package/js/src/pro/woo.js +13 -13
  479. package/js/src/pro/woofipro.d.ts +20 -20
  480. package/js/src/pro/woofipro.js +20 -20
  481. package/js/src/pro/xt.d.ts +2 -2
  482. package/js/src/pro/xt.js +2 -2
  483. package/js/src/probit.d.ts +18 -18
  484. package/js/src/probit.js +18 -18
  485. package/js/src/static_dependencies/ethers/utils/index.d.ts +2 -1
  486. package/js/src/static_dependencies/ethers/utils/index.js +8 -1
  487. package/js/src/timex.d.ts +16 -16
  488. package/js/src/timex.js +16 -16
  489. package/js/src/tokocrypto.d.ts +17 -17
  490. package/js/src/tokocrypto.js +17 -17
  491. package/js/src/toobit.d.ts +27 -27
  492. package/js/src/toobit.js +31 -29
  493. package/js/src/upbit.d.ts +23 -23
  494. package/js/src/upbit.js +23 -23
  495. package/js/src/wavesexchange.d.ts +15 -15
  496. package/js/src/wavesexchange.js +86 -85
  497. package/js/src/whitebit.d.ts +44 -44
  498. package/js/src/whitebit.js +44 -44
  499. package/js/src/woo.d.ts +45 -45
  500. package/js/src/woo.js +51 -49
  501. package/js/src/woofipro.d.ts +77 -77
  502. package/js/src/woofipro.js +104 -82
  503. package/js/src/xt.d.ts +12 -12
  504. package/js/src/xt.js +17 -12
  505. package/js/src/yobit.d.ts +15 -15
  506. package/js/src/yobit.js +15 -15
  507. package/js/src/zaif.d.ts +9 -9
  508. package/js/src/zaif.js +38 -9
  509. package/js/src/zebpay.d.ts +20 -20
  510. package/js/src/zebpay.js +35 -20
  511. package/js/src/zonda.d.ts +14 -14
  512. package/js/src/zonda.js +14 -14
  513. package/package.json +1 -1
@@ -35,6 +35,16 @@ export default class bitmart extends bitmartRest {
35
35
  'watchOHLCV': true,
36
36
  'watchPosition': 'emulated',
37
37
  'watchPositions': true,
38
+ 'unWatchBidsAsks': false,
39
+ 'unWatchOHLCV': true,
40
+ 'unWatchOrderBook': true,
41
+ 'unWatchOrderBookForSymbols': true,
42
+ 'unWatchOrders': true,
43
+ 'unWatchPositions': true,
44
+ 'unWatchTicker': true,
45
+ 'unWatchTickers': true,
46
+ 'unWatchTrades': true,
47
+ 'unWatchTradesForSymbols': true,
38
48
  },
39
49
  'urls': {
40
50
  'api': {
@@ -98,10 +108,18 @@ export default class bitmart extends bitmartRest {
98
108
  const url = this.implodeHostname(this.urls['api']['ws'][type]['public']);
99
109
  let request = {};
100
110
  let messageHash = undefined;
111
+ const unsubscribe = this.safeBool(params, 'unsubscribe', false);
112
+ let prefix = '';
113
+ let requestOp = 'subscribe';
114
+ if (unsubscribe) {
115
+ params = this.omit(params, 'unsubscribe');
116
+ prefix = 'unsubscribe::';
117
+ requestOp = 'unsubscribe';
118
+ }
101
119
  if (type === 'spot') {
102
120
  messageHash = 'spot/' + channel + ':' + market['id'];
103
121
  request = {
104
- 'op': 'subscribe',
122
+ 'op': requestOp,
105
123
  'args': [messageHash],
106
124
  };
107
125
  }
@@ -113,10 +131,11 @@ export default class bitmart extends bitmartRest {
113
131
  messageHash += ':' + speed;
114
132
  }
115
133
  request = {
116
- 'action': 'subscribe',
134
+ 'action': requestOp,
117
135
  'args': [messageHash],
118
136
  };
119
137
  }
138
+ messageHash = prefix + messageHash;
120
139
  return await this.watch(url, messageHash, this.deepExtend(request, params), messageHash);
121
140
  }
122
141
  async subscribeMultiple(channel, type, symbols = undefined, params = {}) {
@@ -126,11 +145,23 @@ export default class bitmart extends bitmartRest {
126
145
  const actionType = (type === 'spot') ? 'op' : 'action';
127
146
  const rawSubscriptions = [];
128
147
  const messageHashes = [];
148
+ const subHashes = [];
149
+ const unsubscribe = this.safeBool(params, 'unsubscribe', false);
150
+ let prefix = '';
151
+ let requestOp = 'subscribe';
152
+ if (unsubscribe) {
153
+ params = this.omit(params, 'unsubscribe');
154
+ prefix = 'unsubscribe::';
155
+ requestOp = 'unsubscribe';
156
+ }
129
157
  for (let i = 0; i < symbols.length; i++) {
130
158
  const market = this.market(symbols[i]);
131
159
  const message = channelType + '/' + channel + ':' + market['id'];
160
+ const subHash = prefix + message;
161
+ const messageHash = prefix + channel + ':' + market['symbol'];
132
162
  rawSubscriptions.push(message);
133
- messageHashes.push(channel + ':' + market['symbol']);
163
+ subHashes.push(subHash);
164
+ messageHashes.push(messageHash);
134
165
  }
135
166
  // as an exclusion, futures "tickers" need one generic request for all symbols
136
167
  // if ((type !== 'spot') && (channel === 'ticker')) {
@@ -140,8 +171,8 @@ export default class bitmart extends bitmartRest {
140
171
  const request = {
141
172
  'args': rawSubscriptions,
142
173
  };
143
- request[actionType] = 'subscribe';
144
- return await this.watchMultiple(url, messageHashes, this.deepExtend(request, params), rawSubscriptions);
174
+ request[actionType] = requestOp;
175
+ return await this.watchMultiple(url, messageHashes, this.deepExtend(request, params), subHashes);
145
176
  }
146
177
  /**
147
178
  * @method
@@ -150,7 +181,7 @@ export default class bitmart extends bitmartRest {
150
181
  * @see https://developer-pro.bitmart.com/en/futuresv2/#private-assets-channel
151
182
  * @description watch balance and get the amount of funds available for trading or funds locked in orders
152
183
  * @param {object} [params] extra parameters specific to the exchange API endpoint
153
- * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
184
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
154
185
  */
155
186
  async watchBalance(params = {}) {
156
187
  await this.loadMarkets();
@@ -176,8 +207,8 @@ export default class bitmart extends bitmartRest {
176
207
  this.setBalanceCache(client, type, messageHash);
177
208
  let fetchBalanceSnapshot = undefined;
178
209
  let awaitBalanceSnapshot = undefined;
179
- [fetchBalanceSnapshot, params] = this.handleOptionAndParams(this.options, 'watchBalance', 'fetchBalanceSnapshot', true);
180
- [awaitBalanceSnapshot, params] = this.handleOptionAndParams(this.options, 'watchBalance', 'awaitBalanceSnapshot', false);
210
+ [fetchBalanceSnapshot, params] = this.handleOptionAndParams(params, 'watchBalance', 'fetchBalanceSnapshot', true);
211
+ [awaitBalanceSnapshot, params] = this.handleOptionAndParams(params, 'watchBalance', 'awaitBalanceSnapshot', false);
181
212
  if (fetchBalanceSnapshot && awaitBalanceSnapshot) {
182
213
  await client.future(type + ':fetchBalanceSnapshot');
183
214
  }
@@ -187,7 +218,7 @@ export default class bitmart extends bitmartRest {
187
218
  if (subscribeHash in client.subscriptions) {
188
219
  return;
189
220
  }
190
- const options = this.safeValue(this.options, 'watchBalance');
221
+ const options = this.safeDict(this.options, 'watchBalance');
191
222
  const snapshot = this.safeBool(options, 'fetchBalanceSnapshot', true);
192
223
  if (snapshot) {
193
224
  const messageHash = type + ':' + 'fetchBalanceSnapshot';
@@ -253,7 +284,7 @@ export default class bitmart extends bitmartRest {
253
284
  const timestamp = this.safeInteger(message, 'event_time');
254
285
  this.balance[type]['timestamp'] = timestamp;
255
286
  this.balance[type]['datetime'] = this.iso8601(timestamp);
256
- const balanceDetails = this.safeValue(data[i], 'balance_details', []);
287
+ const balanceDetails = this.safeList(data[i], 'balance_details', []);
257
288
  for (let ii = 0; ii < balanceDetails.length; ii++) {
258
289
  const rawBalance = balanceDetails[i];
259
290
  const account = this.account();
@@ -287,7 +318,7 @@ export default class bitmart extends bitmartRest {
287
318
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
288
319
  * @param {int} [limit] the maximum amount of trades to fetch
289
320
  * @param {object} [params] extra parameters specific to the exchange API endpoint
290
- * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
321
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
291
322
  */
292
323
  async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
293
324
  return await this.watchTradesForSymbols([symbol], since, limit, params);
@@ -296,12 +327,13 @@ export default class bitmart extends bitmartRest {
296
327
  * @method
297
328
  * @name bitmart#watchTradesForSymbols
298
329
  * @see https://developer-pro.bitmart.com/en/spot/#public-trade-channel
330
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#public-trade-channel
299
331
  * @description get the list of most recent trades for a list of symbols
300
332
  * @param {string[]} symbols unified symbol of the market to fetch trades for
301
333
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
302
334
  * @param {int} [limit] the maximum amount of trades to fetch
303
335
  * @param {object} [params] extra parameters specific to the exchange API endpoint
304
- * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
336
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
305
337
  */
306
338
  async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
307
339
  await this.loadMarkets();
@@ -322,6 +354,37 @@ export default class bitmart extends bitmartRest {
322
354
  }
323
355
  return result;
324
356
  }
357
+ /**
358
+ * @method
359
+ * @name bitmart#unWatchTrades
360
+ * @description unWatches from the stream channel
361
+ * @see https://developer-pro.bitmart.com/en/spot/#public-trade-channel
362
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#public-trade-channel
363
+ * @param {string} symbol unified symbol of the market to fetch trades for
364
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
365
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
366
+ */
367
+ async unWatchTrades(symbol, params = {}) {
368
+ return await this.unWatchTradesForSymbols([symbol], params);
369
+ }
370
+ /**
371
+ * @method
372
+ * @name bitmart#unWatchTradesForSymbols
373
+ * @description unsubscribes from the trades channel
374
+ * @see https://developer-pro.bitmart.com/en/spot/#public-trade-channel
375
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#public-trade-channel
376
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
377
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
378
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
379
+ */
380
+ async unWatchTradesForSymbols(symbols, params = {}) {
381
+ await this.loadMarkets();
382
+ let marketType = undefined;
383
+ [symbols, marketType, params] = this.getParamsForMultipleSub('unWatchTradesForSymbols', symbols, undefined, params);
384
+ const channelName = 'trade';
385
+ params = this.extend(params, { 'unsubscribe': true });
386
+ return await this.subscribeMultiple(channelName, marketType, symbols, params);
387
+ }
325
388
  getParamsForMultipleSub(methodName, symbols, limit = undefined, params = {}) {
326
389
  symbols = this.marketSymbols(symbols, undefined, false, true);
327
390
  const length = symbols.length;
@@ -341,7 +404,7 @@ export default class bitmart extends bitmartRest {
341
404
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
342
405
  * @param {string} symbol unified symbol of the market to fetch the ticker for
343
406
  * @param {object} [params] extra parameters specific to the exchange API endpoint
344
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
407
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
345
408
  */
346
409
  async watchTicker(symbol, params = {}) {
347
410
  await this.loadMarkets();
@@ -357,7 +420,7 @@ export default class bitmart extends bitmartRest {
357
420
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
358
421
  * @param {string[]} symbols unified symbol of the market to fetch the ticker for
359
422
  * @param {object} [params] extra parameters specific to the exchange API endpoint
360
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
423
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
361
424
  */
362
425
  async watchTickers(symbols = undefined, params = {}) {
363
426
  await this.loadMarkets();
@@ -372,6 +435,37 @@ export default class bitmart extends bitmartRest {
372
435
  }
373
436
  return this.filterByArray(this.tickers, 'symbol', symbols);
374
437
  }
438
+ /**
439
+ * @method
440
+ * @name bitmart#unWatchTicker
441
+ * @description unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
442
+ * @see https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
443
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
444
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
445
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
446
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
447
+ */
448
+ async unWatchTicker(symbol, params = {}) {
449
+ return await this.unWatchTickers([symbol], params);
450
+ }
451
+ /**
452
+ * @method
453
+ * @name bitmart#unWatchTickers
454
+ * @description unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
455
+ * @see https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
456
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
457
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
458
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
459
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
460
+ */
461
+ async unWatchTickers(symbols = undefined, params = {}) {
462
+ await this.loadMarkets();
463
+ const market = this.getMarketFromSymbols(symbols);
464
+ let marketType = undefined;
465
+ [marketType, params] = this.handleMarketTypeAndParams('watchTickers', market, params);
466
+ params = this.extend(params, { 'unsubscribe': true });
467
+ return await this.subscribeMultiple('ticker', marketType, symbols, params);
468
+ }
375
469
  /**
376
470
  * @method
377
471
  * @name bitmart#watchBidsAsks
@@ -380,7 +474,7 @@ export default class bitmart extends bitmartRest {
380
474
  * @description watches best bid & ask for symbols
381
475
  * @param {string[]} symbols unified symbol of the market to fetch the ticker for
382
476
  * @param {object} [params] extra parameters specific to the exchange API endpoint
383
- * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
477
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
384
478
  */
385
479
  async watchBidsAsks(symbols = undefined, params = {}) {
386
480
  await this.loadMarkets();
@@ -421,7 +515,7 @@ export default class bitmart extends bitmartRest {
421
515
  rawTickers = this.safeList(message, 'data', []);
422
516
  }
423
517
  else {
424
- rawTickers = [this.safeValue(message, 'data', {})];
518
+ rawTickers = [this.safeDict(message, 'data', {})];
425
519
  }
426
520
  if (!rawTickers.length) {
427
521
  return;
@@ -460,7 +554,7 @@ export default class bitmart extends bitmartRest {
460
554
  * @param {int} [since] the earliest time in ms to fetch orders for
461
555
  * @param {int} [limit] the maximum number of order structures to retrieve
462
556
  * @param {object} [params] extra parameters specific to the exchange API endpoint
463
- * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
557
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/?id=order-structure}
464
558
  */
465
559
  async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
466
560
  await this.loadMarkets();
@@ -501,6 +595,54 @@ export default class bitmart extends bitmartRest {
501
595
  }
502
596
  return this.filterBySymbolSinceLimit(this.orders, symbol, since, limit, true);
503
597
  }
598
+ /**
599
+ * @method
600
+ * @name bitmart#unWatchOrders
601
+ * @description unWatches information on multiple orders made by the user
602
+ * @see https://developer-pro.bitmart.com/en/spot/#private-order-progress
603
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#private-order-channel
604
+ * @param {string} symbol unified market symbol of the market orders were made in
605
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
606
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
607
+ */
608
+ async unWatchOrders(symbol = undefined, params = {}) {
609
+ await this.loadMarkets();
610
+ let market = undefined;
611
+ let messageHash = 'unsubscribe::orders';
612
+ if (symbol !== undefined) {
613
+ symbol = this.symbol(symbol);
614
+ market = this.market(symbol);
615
+ if (market['swap']) {
616
+ throw new NotSupported(this.id + ' unWatchOrders() does not support a symbol for swap markets, unWatch from all markets only');
617
+ }
618
+ messageHash += '::' + symbol;
619
+ }
620
+ let type = 'spot';
621
+ [type, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
622
+ await this.authenticate(type, params);
623
+ let request = undefined;
624
+ if (type === 'spot') {
625
+ let argsRequest = 'spot/user/order:';
626
+ if (symbol !== undefined) {
627
+ argsRequest += market['id'];
628
+ }
629
+ else {
630
+ argsRequest = 'spot/user/orders:ALL_SYMBOLS';
631
+ }
632
+ request = {
633
+ 'op': 'unsubscribe',
634
+ 'args': [argsRequest],
635
+ };
636
+ }
637
+ else {
638
+ request = {
639
+ 'action': 'unsubscribe',
640
+ 'args': ['futures/order'],
641
+ };
642
+ }
643
+ const url = this.implodeHostname(this.urls['api']['ws'][type]['private']);
644
+ return await this.watch(url, messageHash, this.deepExtend(request, params), messageHash);
645
+ }
504
646
  handleOrders(client, message) {
505
647
  //
506
648
  // spot
@@ -555,7 +697,7 @@ export default class bitmart extends bitmartRest {
555
697
  // ]
556
698
  // }
557
699
  //
558
- const orders = this.safeValue(message, 'data');
700
+ const orders = this.safeList(message, 'data');
559
701
  if (orders === undefined) {
560
702
  return;
561
703
  }
@@ -671,13 +813,13 @@ export default class bitmart extends bitmartRest {
671
813
  }, market);
672
814
  }
673
815
  else {
674
- const orderInfo = this.safeValue(order, 'order');
816
+ const orderInfo = this.safeDict(order, 'order');
675
817
  const marketId = this.safeString(orderInfo, 'symbol');
676
818
  const symbol = this.safeSymbol(marketId, market, '', 'swap');
677
819
  const orderId = this.safeString(orderInfo, 'order_id');
678
820
  const timestamp = this.safeInteger(orderInfo, 'create_time');
679
821
  const updatedTimestamp = this.safeInteger(orderInfo, 'update_time');
680
- const lastTrade = this.safeValue(orderInfo, 'last_trade');
822
+ const lastTrade = this.safeDict(orderInfo, 'last_trade');
681
823
  const cachedOrders = this.orders;
682
824
  const orders = this.safeValue(cachedOrders.hashmap, symbol, {});
683
825
  const cachedOrder = this.safeValue(orders, orderId);
@@ -772,6 +914,31 @@ export default class bitmart extends bitmartRest {
772
914
  }
773
915
  return this.filterBySymbolsSinceLimit(this.positions, symbols, since, limit);
774
916
  }
917
+ /**
918
+ * @method
919
+ * @name bitmart#unWatchPositions
920
+ * @description unWatches all open positions
921
+ * @see https://developer-pro.bitmart.com/en/futures/#private-position-channel
922
+ * @param {string[]} [symbols] list of unified market symbols
923
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
924
+ * @returns {object} status of the unwatch request
925
+ */
926
+ async unWatchPositions(symbols = undefined, params = {}) {
927
+ if (symbols !== undefined) {
928
+ const length = symbols.length;
929
+ if (length > 0) {
930
+ throw new NotSupported(this.id + ' unWatchPositions() does not support a list of symbols, unWatch from all markets only');
931
+ }
932
+ }
933
+ await this.loadMarkets();
934
+ const request = {
935
+ 'action': 'unsubscribe',
936
+ 'args': ['futures/position'],
937
+ };
938
+ const messageHash = 'unsubscribe::positions';
939
+ const url = this.implodeHostname(this.urls['api']['ws']['swap']['private']);
940
+ return await this.watch(url, messageHash, this.deepExtend(request, params), messageHash);
941
+ }
775
942
  handlePositions(client, message) {
776
943
  //
777
944
  // {
@@ -808,7 +975,7 @@ export default class bitmart extends bitmartRest {
808
975
  // ]
809
976
  // }
810
977
  //
811
- const data = this.safeValue(message, 'data', []);
978
+ const data = this.safeList(message, 'data', []);
812
979
  if (this.positions === undefined) {
813
980
  this.positions = new ArrayCacheBySymbolBySide();
814
981
  }
@@ -920,7 +1087,7 @@ export default class bitmart extends bitmartRest {
920
1087
  // ]
921
1088
  // }
922
1089
  //
923
- const data = this.safeValue(message, 'data');
1090
+ const data = this.safeList(message, 'data');
924
1091
  if (data === undefined) {
925
1092
  return;
926
1093
  }
@@ -1058,7 +1225,7 @@ export default class bitmart extends bitmartRest {
1058
1225
  rawTickers = this.safeList(message, 'data', []);
1059
1226
  }
1060
1227
  else {
1061
- rawTickers = [this.safeValue(message, 'data', {})];
1228
+ rawTickers = [this.safeDict(message, 'data', {})];
1062
1229
  }
1063
1230
  if (!rawTickers.length) {
1064
1231
  return;
@@ -1130,8 +1297,8 @@ export default class bitmart extends bitmartRest {
1130
1297
  symbol = this.symbol(symbol);
1131
1298
  const market = this.market(symbol);
1132
1299
  let type = 'spot';
1133
- [type, params] = this.handleMarketTypeAndParams('watchOrderBook', market, params);
1134
- const timeframes = this.safeValue(this.options, 'timeframes', {});
1300
+ [type, params] = this.handleMarketTypeAndParams('watchOHLCV', market, params);
1301
+ const timeframes = this.safeDict(this.options, 'timeframes', {});
1135
1302
  const interval = this.safeString(timeframes, timeframe);
1136
1303
  let name = undefined;
1137
1304
  if (type === 'spot') {
@@ -1146,6 +1313,35 @@ export default class bitmart extends bitmartRest {
1146
1313
  }
1147
1314
  return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
1148
1315
  }
1316
+ /**
1317
+ * @method
1318
+ * @name bitmart#unWatchOHLCV
1319
+ * @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1320
+ * @see https://developer-pro.bitmart.com/en/spot/#public-kline-channel
1321
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#public-klinebin-channel
1322
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1323
+ * @param {string} timeframe the length of time each candle represents
1324
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1325
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1326
+ */
1327
+ async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
1328
+ await this.loadMarkets();
1329
+ symbol = this.symbol(symbol);
1330
+ const market = this.market(symbol);
1331
+ let type = 'spot';
1332
+ [type, params] = this.handleMarketTypeAndParams('unWatchOHLCV', market, params);
1333
+ const timeframes = this.safeDict(this.options, 'timeframes', {});
1334
+ const interval = this.safeString(timeframes, timeframe);
1335
+ let name = undefined;
1336
+ if (type === 'spot') {
1337
+ name = 'kline' + interval;
1338
+ }
1339
+ else {
1340
+ name = 'klineBin' + interval;
1341
+ }
1342
+ params = this.extend(params, { 'unsubscribe': true });
1343
+ return await this.subscribe(name, symbol, type, params);
1344
+ }
1149
1345
  handleOHLCV(client, message) {
1150
1346
  //
1151
1347
  // {
@@ -1195,7 +1391,7 @@ export default class bitmart extends bitmartRest {
1195
1391
  const intervalParts = interval.split(':');
1196
1392
  interval = this.safeString(intervalParts, 0);
1197
1393
  // use a reverse lookup in a static map instead
1198
- const timeframes = this.safeValue(this.options, 'timeframes', {});
1394
+ const timeframes = this.safeDict(this.options, 'timeframes', {});
1199
1395
  const timeframe = this.findTimeframe(interval, timeframes);
1200
1396
  const duration = this.parseTimeframe(timeframe);
1201
1397
  const durationInMs = duration * 1000;
@@ -1204,7 +1400,7 @@ export default class bitmart extends bitmartRest {
1204
1400
  const marketId = this.safeString(data[i], 'symbol');
1205
1401
  const market = this.safeMarket(marketId);
1206
1402
  const symbol = market['symbol'];
1207
- const rawOHLCV = this.safeValue(data[i], 'candle');
1403
+ const rawOHLCV = this.safeList(data[i], 'candle');
1208
1404
  const parsed = this.parseOHLCV(rawOHLCV, market);
1209
1405
  parsed[0] = this.parseToInt(parsed[0] / durationInMs) * durationInMs;
1210
1406
  this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
@@ -1223,7 +1419,7 @@ export default class bitmart extends bitmartRest {
1223
1419
  const marketId = this.safeString(data, 'symbol');
1224
1420
  const market = this.safeMarket(marketId, undefined, undefined, 'swap');
1225
1421
  const symbol = market['symbol'];
1226
- const items = this.safeValue(data, 'items', []);
1422
+ const items = this.safeList(data, 'items', []);
1227
1423
  this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
1228
1424
  let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
1229
1425
  if (stored === undefined) {
@@ -1250,11 +1446,11 @@ export default class bitmart extends bitmartRest {
1250
1446
  * @param {int} [limit] the maximum amount of order book entries to return
1251
1447
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1252
1448
  * @param {string} [params.speed] *futures only* '100ms' or '200ms'
1253
- * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1449
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
1254
1450
  */
1255
1451
  async watchOrderBook(symbol, limit = undefined, params = {}) {
1256
1452
  await this.loadMarkets();
1257
- const options = this.safeValue(this.options, 'watchOrderBook', {});
1453
+ const options = this.safeDict(this.options, 'watchOrderBook', {});
1258
1454
  let depth = this.safeString(options, 'depth', 'depth/increase100');
1259
1455
  symbol = this.symbol(symbol);
1260
1456
  const market = this.market(symbol);
@@ -1266,6 +1462,31 @@ export default class bitmart extends bitmartRest {
1266
1462
  const orderbook = await this.subscribe(depth, symbol, type, params);
1267
1463
  return orderbook.limit();
1268
1464
  }
1465
+ /**
1466
+ * @method
1467
+ * @name bitmart#unWatchOrderBook
1468
+ * @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1469
+ * @see https://developer-pro.bitmart.com/en/spot/#public-depth-all-channel
1470
+ * @see https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
1471
+ * @see https://developer-pro.bitmart.com/en/futuresv2/#public-depth-channel
1472
+ * @param {string} symbol unified array of symbols
1473
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1474
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1475
+ */
1476
+ async unWatchOrderBook(symbol, params = {}) {
1477
+ await this.loadMarkets();
1478
+ const options = this.safeDict(this.options, 'watchOrderBook', {});
1479
+ let depth = this.safeString(options, 'depth', 'depth/increase100');
1480
+ symbol = this.symbol(symbol);
1481
+ const market = this.market(symbol);
1482
+ let type = 'spot';
1483
+ [type, params] = this.handleMarketTypeAndParams('unWatchOrderBook', market, params);
1484
+ if (type === 'swap' && depth === 'depth/increase100') {
1485
+ depth = 'depth50';
1486
+ }
1487
+ params = this.extend(params, { 'unsubscribe': true });
1488
+ return await this.subscribe(depth, symbol, type, params);
1489
+ }
1269
1490
  handleDelta(bookside, delta) {
1270
1491
  const price = this.safeFloat(delta, 0);
1271
1492
  const amount = this.safeFloat(delta, 1);
@@ -1484,7 +1705,7 @@ export default class bitmart extends bitmartRest {
1484
1705
  * @param {int} [limit] the maximum amount of order book entries to return
1485
1706
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1486
1707
  * @param {string} [params.depth] the type of order book to subscribe to, default is 'depth/increase100', also accepts 'depth5' or 'depth20' or depth50
1487
- * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1708
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
1488
1709
  */
1489
1710
  async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
1490
1711
  await this.loadMarkets();
@@ -1498,6 +1719,28 @@ export default class bitmart extends bitmartRest {
1498
1719
  const orderbook = await this.subscribeMultiple(channel, type, symbols, params);
1499
1720
  return orderbook.limit();
1500
1721
  }
1722
+ /**
1723
+ * @method
1724
+ * @name bitmart#unWatchOrderBookForSymbols
1725
+ * @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1726
+ * @see https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
1727
+ * @param {string[]} symbols unified array of symbols
1728
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1729
+ * @param {string} [params.depth] the type of order book to subscribe to, default is 'depth/increase100', also accepts 'depth5' or 'depth20' or depth50
1730
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1731
+ */
1732
+ async unWatchOrderBookForSymbols(symbols, params = {}) {
1733
+ await this.loadMarkets();
1734
+ let type = undefined;
1735
+ [symbols, type, params] = this.getParamsForMultipleSub('unWatchOrderBookForSymbols', symbols, undefined, params);
1736
+ let channel = undefined;
1737
+ [channel, params] = this.handleOptionAndParams(params, 'unWatchOrderBookForSymbols', 'depth', 'depth/increase100');
1738
+ if (type === 'swap' && channel === 'depth/increase100') {
1739
+ channel = 'depth50';
1740
+ }
1741
+ params = this.extend(params, { 'unsubscribe': true });
1742
+ return await this.subscribeMultiple(channel, type, symbols, params);
1743
+ }
1501
1744
  async authenticate(type, params = {}) {
1502
1745
  this.checkRequiredCredentials();
1503
1746
  const url = this.implodeHostname(this.urls['api']['ws'][type]['private']);
@@ -1595,6 +1838,119 @@ export default class bitmart extends bitmartRest {
1595
1838
  return true;
1596
1839
  }
1597
1840
  }
1841
+ handleUnSubscription(client, message) {
1842
+ //
1843
+ // spot
1844
+ // {
1845
+ // "topic": "spot/ticker:ETH_USDT",
1846
+ // "event": "unsubscribe"
1847
+ // }
1848
+ //
1849
+ // swap
1850
+ // {
1851
+ // "action": "unsubscribe",
1852
+ // "group": "futures/ticker:ETHUSDT",
1853
+ // "success": true,
1854
+ // "request": {
1855
+ // "action": "unsubscribe",
1856
+ // "args": [
1857
+ // "futures/ticker:ETHUSDT"
1858
+ // ]
1859
+ // }
1860
+ // }
1861
+ //
1862
+ const messageTopic = this.safeString2(message, 'topic', 'group');
1863
+ const unSubMessageTopic = 'unsubscribe::' + messageTopic;
1864
+ // one message includes info about one unsubscription only even if we requested multiple
1865
+ // so we can not just create subscription object in unWatch method and use it here
1866
+ // we need to reconstruct subscription params from the messageTopic
1867
+ const subscription = this.getUnSubParams(messageTopic);
1868
+ const subHash = this.safeString(subscription, 'subHash');
1869
+ const unsubHash = 'unsubscribe::' + subHash;
1870
+ const subHashIsPrefix = this.safeBool(subscription, 'subHashIsPrefix', false);
1871
+ // clean up both ways of storing subscription and unsubscription
1872
+ this.cleanUnsubscription(client, subHash, unsubHash, subHashIsPrefix);
1873
+ this.cleanUnsubscription(client, messageTopic, unSubMessageTopic, subHashIsPrefix);
1874
+ this.cleanCache(subscription);
1875
+ }
1876
+ getUnSubParams(messageTopic) {
1877
+ const parts = messageTopic.split(':');
1878
+ const channel = this.safeString(parts, 0);
1879
+ const marketTypeAndTopic = channel.split('/');
1880
+ const rawMarketType = this.safeStringLower(marketTypeAndTopic, 0);
1881
+ const marketType = this.parseMarketType(rawMarketType);
1882
+ let topic = this.safeString(marketTypeAndTopic, 1);
1883
+ const thirdPart = this.safeString(marketTypeAndTopic, 2);
1884
+ if (thirdPart !== undefined) {
1885
+ topic += '/' + thirdPart;
1886
+ }
1887
+ const marketId = this.safeString(parts, 1);
1888
+ const symbols = [];
1889
+ let symbol = undefined;
1890
+ let subHash = topic;
1891
+ let hashDelimiter = ':';
1892
+ let subHashIsPrefix = false;
1893
+ const parsedTopic = this.parseTopic(topic);
1894
+ if ((parsedTopic === 'orders') || (parsedTopic === 'positions')) {
1895
+ subHash = parsedTopic;
1896
+ hashDelimiter = '::';
1897
+ }
1898
+ if ((marketId !== undefined) && (marketId !== 'ALL_SYMBOLS')) {
1899
+ // if marketId is defined, we have a single symbol subscription
1900
+ const delimiter = (marketType === 'spot') ? '_' : '';
1901
+ const market = this.safeMarket(marketId, undefined, delimiter, marketType);
1902
+ symbol = market['symbol'];
1903
+ subHash += hashDelimiter + symbol;
1904
+ symbols.push(symbol);
1905
+ }
1906
+ else {
1907
+ subHashIsPrefix = true; // need to clean all subHashes with this prefix
1908
+ }
1909
+ const symbolsAndTimeframes = [];
1910
+ if (topic.startsWith('kline')) {
1911
+ let interval = topic.replace('kline', '');
1912
+ if (interval.startsWith('Bin')) {
1913
+ // swap market
1914
+ interval = interval.replace('Bin', '');
1915
+ }
1916
+ const timeframes = this.safeDict(this.options, 'timeframes', {});
1917
+ const timeframe = this.findTimeframe(interval, timeframes);
1918
+ const symbolAndTimeframe = [symbol, timeframe];
1919
+ symbolsAndTimeframes.push(symbolAndTimeframe);
1920
+ }
1921
+ const result = {
1922
+ 'topic': parsedTopic,
1923
+ 'symbols': symbols,
1924
+ 'subHash': subHash,
1925
+ 'symbolsAndTimeframes': symbolsAndTimeframes,
1926
+ 'subHashIsPrefix': subHashIsPrefix,
1927
+ };
1928
+ return result;
1929
+ }
1930
+ parseTopic(topic) {
1931
+ if (topic.startsWith('depth')) {
1932
+ return 'orderbook';
1933
+ }
1934
+ if (topic.startsWith('kline')) {
1935
+ return 'ohlcv';
1936
+ }
1937
+ const topics = {
1938
+ 'ticker': 'ticker',
1939
+ 'trade': 'trades',
1940
+ 'user/order': 'orders',
1941
+ 'user/orders': 'orders',
1942
+ 'order': 'orders',
1943
+ 'position': 'positions',
1944
+ };
1945
+ return this.safeString(topics, topic, topic);
1946
+ }
1947
+ parseMarketType(marketType) {
1948
+ const types = {
1949
+ 'spot': 'spot',
1950
+ 'futures': 'swap',
1951
+ };
1952
+ return this.safeString(types, marketType, marketType);
1953
+ }
1598
1954
  handleMessage(client, message) {
1599
1955
  if (this.handleErrorMessage(client, message)) {
1600
1956
  return;
@@ -1654,6 +2010,7 @@ export default class bitmart extends bitmartRest {
1654
2010
  'login': this.handleAuthenticate,
1655
2011
  'access': this.handleAuthenticate,
1656
2012
  'subscribe': this.handleSubscriptionStatus,
2013
+ 'unsubscribe': this.handleUnSubscription,
1657
2014
  };
1658
2015
  const method = this.safeValue(methods, event);
1659
2016
  if (method !== undefined) {