ccxt 4.5.28 → 4.5.30

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