ccxt 4.5.49 → 4.5.51

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 (998) hide show
  1. package/README.md +5 -4
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/abstract/aftermath.js +1 -1
  5. package/dist/cjs/src/abstract/alpaca.js +1 -1
  6. package/dist/cjs/src/abstract/apex.js +1 -1
  7. package/dist/cjs/src/abstract/arkham.js +1 -1
  8. package/dist/cjs/src/abstract/ascendex.js +1 -1
  9. package/dist/cjs/src/abstract/aster.js +1 -1
  10. package/dist/cjs/src/abstract/backpack.js +1 -1
  11. package/dist/cjs/src/abstract/bigone.js +1 -1
  12. package/dist/cjs/src/abstract/binance.js +1 -1
  13. package/dist/cjs/src/abstract/bingx.js +1 -1
  14. package/dist/cjs/src/abstract/bit2c.js +1 -1
  15. package/dist/cjs/src/abstract/bitbank.js +1 -1
  16. package/dist/cjs/src/abstract/bitbns.js +1 -1
  17. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  18. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  19. package/dist/cjs/src/abstract/bitget.js +1 -1
  20. package/dist/cjs/src/abstract/bithumb.js +1 -1
  21. package/dist/cjs/src/abstract/bitmart.js +1 -1
  22. package/dist/cjs/src/abstract/bitmex.js +1 -1
  23. package/dist/cjs/src/abstract/bitopro.js +1 -1
  24. package/dist/cjs/src/abstract/bitrue.js +1 -1
  25. package/dist/cjs/src/abstract/bitso.js +1 -1
  26. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  27. package/dist/cjs/src/abstract/bitteam.js +1 -1
  28. package/dist/cjs/src/abstract/bittrade.js +1 -1
  29. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  30. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  31. package/dist/cjs/src/abstract/blofin.js +1 -1
  32. package/dist/cjs/src/abstract/btcbox.js +1 -1
  33. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  34. package/dist/cjs/src/abstract/btcturk.js +1 -1
  35. package/dist/cjs/src/abstract/bullish.js +1 -1
  36. package/dist/cjs/src/abstract/bybit.js +1 -1
  37. package/dist/cjs/src/abstract/bydfi.js +1 -1
  38. package/dist/cjs/src/abstract/cex.js +1 -1
  39. package/dist/cjs/src/abstract/coinbase.js +1 -1
  40. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  41. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  42. package/dist/cjs/src/abstract/coincheck.js +1 -1
  43. package/dist/cjs/src/abstract/coinex.js +1 -1
  44. package/dist/cjs/src/abstract/coinmate.js +1 -1
  45. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  46. package/dist/cjs/src/abstract/coinone.js +1 -1
  47. package/dist/cjs/src/abstract/coinsph.js +1 -1
  48. package/dist/cjs/src/abstract/coinspot.js +1 -1
  49. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  50. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  51. package/dist/cjs/src/abstract/deepcoin.js +1 -1
  52. package/dist/cjs/src/abstract/delta.js +1 -1
  53. package/dist/cjs/src/abstract/deribit.js +1 -1
  54. package/dist/cjs/src/abstract/derive.js +1 -1
  55. package/dist/cjs/src/abstract/digifinex.js +1 -1
  56. package/dist/cjs/src/abstract/dydx.js +1 -1
  57. package/dist/cjs/src/abstract/exmo.js +1 -1
  58. package/dist/cjs/src/abstract/foxbit.js +1 -1
  59. package/dist/cjs/src/abstract/gate.js +1 -1
  60. package/dist/cjs/src/abstract/gemini.js +1 -1
  61. package/dist/cjs/src/abstract/grvt.js +1 -1
  62. package/dist/cjs/src/abstract/hashkey.js +1 -1
  63. package/dist/cjs/src/abstract/hibachi.js +1 -1
  64. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  65. package/dist/cjs/src/abstract/hollaex.js +1 -1
  66. package/dist/cjs/src/abstract/htx.js +1 -1
  67. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  68. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  69. package/dist/cjs/src/abstract/indodax.js +1 -1
  70. package/dist/cjs/src/abstract/kraken.js +1 -1
  71. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  72. package/dist/cjs/src/abstract/kucoin.js +1 -1
  73. package/dist/cjs/src/abstract/latoken.js +1 -1
  74. package/dist/cjs/src/abstract/lbank.js +1 -1
  75. package/dist/cjs/src/abstract/lighter.js +1 -1
  76. package/dist/cjs/src/abstract/luno.js +1 -1
  77. package/dist/cjs/src/abstract/mercado.js +1 -1
  78. package/dist/cjs/src/abstract/mexc.js +1 -1
  79. package/dist/cjs/src/abstract/modetrade.js +1 -1
  80. package/dist/cjs/src/abstract/ndax.js +1 -1
  81. package/dist/cjs/src/abstract/novadax.js +1 -1
  82. package/dist/cjs/src/abstract/okx.js +1 -1
  83. package/dist/cjs/src/abstract/onetrading.js +1 -1
  84. package/dist/cjs/src/abstract/oxfun.js +1 -1
  85. package/dist/cjs/src/abstract/p2b.js +1 -1
  86. package/dist/cjs/src/abstract/pacifica.js +1 -1
  87. package/dist/cjs/src/abstract/paradex.js +1 -1
  88. package/dist/cjs/src/abstract/paymium.js +1 -1
  89. package/dist/cjs/src/abstract/phemex.js +1 -1
  90. package/dist/cjs/src/abstract/poloniex.js +1 -1
  91. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  92. package/dist/cjs/src/abstract/toobit.js +1 -1
  93. package/dist/cjs/src/abstract/upbit.js +1 -1
  94. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  95. package/dist/cjs/src/abstract/weex.js +1 -1
  96. package/dist/cjs/src/abstract/whitebit.js +1 -1
  97. package/dist/cjs/src/abstract/woo.js +1 -1
  98. package/dist/cjs/src/abstract/woofipro.js +1 -1
  99. package/dist/cjs/src/abstract/xt.js +1 -1
  100. package/dist/cjs/src/abstract/yobit.js +1 -1
  101. package/dist/cjs/src/abstract/zaif.js +1 -1
  102. package/dist/cjs/src/abstract/zebpay.js +1 -1
  103. package/dist/cjs/src/abstract/zonda.js +1 -1
  104. package/dist/cjs/src/aftermath.js +0 -1
  105. package/dist/cjs/src/alpaca.js +1 -1
  106. package/dist/cjs/src/apex.js +1 -1
  107. package/dist/cjs/src/arkham.js +1 -1
  108. package/dist/cjs/src/ascendex.js +1 -1
  109. package/dist/cjs/src/aster.js +1 -1
  110. package/dist/cjs/src/backpack.js +1 -1
  111. package/dist/cjs/src/base/Exchange.js +51 -13
  112. package/dist/cjs/src/base/Precise.js +0 -6
  113. package/dist/cjs/src/base/errors.js +0 -6
  114. package/dist/cjs/src/base/functions/crypto.js +1 -1
  115. package/dist/cjs/src/base/functions/encode.js +1 -1
  116. package/dist/cjs/src/base/functions/io.js +1 -1
  117. package/dist/cjs/src/base/functions/misc.js +0 -1
  118. package/dist/cjs/src/base/functions/number.js +0 -6
  119. package/dist/cjs/src/base/functions/platform.js +0 -6
  120. package/dist/cjs/src/base/functions/rsa.js +0 -1
  121. package/dist/cjs/src/base/functions/string.js +0 -6
  122. package/dist/cjs/src/base/functions/throttle.js +1 -1
  123. package/dist/cjs/src/base/functions/time.js +0 -6
  124. package/dist/cjs/src/base/functions/totp.js +0 -1
  125. package/dist/cjs/src/base/functions/type.js +0 -6
  126. package/dist/cjs/src/base/functions.js +1 -1
  127. package/dist/cjs/src/base/ws/Cache.js +0 -6
  128. package/dist/cjs/src/base/ws/Client.js +0 -1
  129. package/dist/cjs/src/base/ws/Future.js +1 -1
  130. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  131. package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
  132. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  133. package/dist/cjs/src/bequant.js +1 -1
  134. package/dist/cjs/src/bigone.js +1 -1
  135. package/dist/cjs/src/binance.js +23 -11
  136. package/dist/cjs/src/binancecoinm.js +1 -1
  137. package/dist/cjs/src/binanceus.js +1 -1
  138. package/dist/cjs/src/binanceusdm.js +1 -1
  139. package/dist/cjs/src/bingx.js +1 -1
  140. package/dist/cjs/src/bit2c.js +1 -1
  141. package/dist/cjs/src/bitbank.js +1 -1
  142. package/dist/cjs/src/bitbns.js +1 -1
  143. package/dist/cjs/src/bitfinex.js +1 -1
  144. package/dist/cjs/src/bitflyer.js +1 -1
  145. package/dist/cjs/src/bitget.js +7 -4
  146. package/dist/cjs/src/bithumb.js +1 -1
  147. package/dist/cjs/src/bitmart.js +1 -1
  148. package/dist/cjs/src/bitmex.js +1 -1
  149. package/dist/cjs/src/bitopro.js +1 -1
  150. package/dist/cjs/src/bitrue.js +1 -1
  151. package/dist/cjs/src/bitso.js +1 -1
  152. package/dist/cjs/src/bitstamp.js +1 -1
  153. package/dist/cjs/src/bitteam.js +1 -1
  154. package/dist/cjs/src/bittrade.js +1 -1
  155. package/dist/cjs/src/blockchaincom.js +1 -1
  156. package/dist/cjs/src/blofin.js +26 -31
  157. package/dist/cjs/src/btcbox.js +1 -1
  158. package/dist/cjs/src/btcmarkets.js +1 -1
  159. package/dist/cjs/src/btcturk.js +1 -1
  160. package/dist/cjs/src/bullish.js +1 -1
  161. package/dist/cjs/src/bybit.js +1 -1
  162. package/dist/cjs/src/bydfi.js +2 -3
  163. package/dist/cjs/src/cex.js +1 -1
  164. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  165. package/dist/cjs/src/coincheck.js +1 -1
  166. package/dist/cjs/src/coinex.js +1 -1
  167. package/dist/cjs/src/coinmate.js +1 -1
  168. package/dist/cjs/src/coinmetro.js +1 -1
  169. package/dist/cjs/src/coinone.js +1 -1
  170. package/dist/cjs/src/coinsph.js +0 -1
  171. package/dist/cjs/src/coinspot.js +1 -1
  172. package/dist/cjs/src/cryptocom.js +1 -1
  173. package/dist/cjs/src/cryptomus.js +1 -1
  174. package/dist/cjs/src/deepcoin.js +1 -2
  175. package/dist/cjs/src/delta.js +1 -1
  176. package/dist/cjs/src/deribit.js +1 -1
  177. package/dist/cjs/src/derive.js +1 -1
  178. package/dist/cjs/src/digifinex.js +1 -1
  179. package/dist/cjs/src/dydx.js +1 -1
  180. package/dist/cjs/src/exmo.js +1 -1
  181. package/dist/cjs/src/fmfwio.js +1 -1
  182. package/dist/cjs/src/foxbit.js +1 -1
  183. package/dist/cjs/src/gate.js +1 -2
  184. package/dist/cjs/src/gateio.js +1 -1
  185. package/dist/cjs/src/gemini.js +1 -1
  186. package/dist/cjs/src/grvt.js +15 -15
  187. package/dist/cjs/src/hashkey.js +1 -1
  188. package/dist/cjs/src/hibachi.js +2 -2
  189. package/dist/cjs/src/hitbtc.js +0 -1
  190. package/dist/cjs/src/hollaex.js +1 -1
  191. package/dist/cjs/src/htx.js +1 -1
  192. package/dist/cjs/src/huobi.js +1 -1
  193. package/dist/cjs/src/hyperliquid.js +1 -1
  194. package/dist/cjs/src/independentreserve.js +1 -1
  195. package/dist/cjs/src/indodax.js +1 -1
  196. package/dist/cjs/src/kraken.js +1 -1
  197. package/dist/cjs/src/krakenfutures.js +1 -1
  198. package/dist/cjs/src/kucoin.js +246 -111
  199. package/dist/cjs/src/kucoinfutures.js +1 -2
  200. package/dist/cjs/src/latoken.js +1 -1
  201. package/dist/cjs/src/lbank.js +1 -1
  202. package/dist/cjs/src/lighter.js +313 -142
  203. package/dist/cjs/src/luno.js +1 -1
  204. package/dist/cjs/src/mercado.js +1 -1
  205. package/dist/cjs/src/mexc.js +1 -1
  206. package/dist/cjs/src/modetrade.js +1 -1
  207. package/dist/cjs/src/myokx.js +1 -1
  208. package/dist/cjs/src/ndax.js +1 -1
  209. package/dist/cjs/src/novadax.js +1 -1
  210. package/dist/cjs/src/okx.js +47 -2
  211. package/dist/cjs/src/okxus.js +1 -1
  212. package/dist/cjs/src/onetrading.js +1 -1
  213. package/dist/cjs/src/oxfun.js +1 -1
  214. package/dist/cjs/src/p2b.js +1 -1
  215. package/dist/cjs/src/pacifica.js +1 -1
  216. package/dist/cjs/src/paradex.js +1 -1
  217. package/dist/cjs/src/paymium.js +1 -1
  218. package/dist/cjs/src/poloniex.js +1 -1
  219. package/dist/cjs/src/pro/alpaca.js +1 -1
  220. package/dist/cjs/src/pro/apex.js +1 -1
  221. package/dist/cjs/src/pro/arkham.js +1 -1
  222. package/dist/cjs/src/pro/ascendex.js +1 -1
  223. package/dist/cjs/src/pro/aster.js +24 -43
  224. package/dist/cjs/src/pro/backpack.js +1 -1
  225. package/dist/cjs/src/pro/bequant.js +1 -1
  226. package/dist/cjs/src/pro/binance.js +1 -1
  227. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  228. package/dist/cjs/src/pro/binanceus.js +1 -1
  229. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  230. package/dist/cjs/src/pro/bingx.js +1 -1
  231. package/dist/cjs/src/pro/bitfinex.js +1 -1
  232. package/dist/cjs/src/pro/bitget.js +1 -1
  233. package/dist/cjs/src/pro/bithumb.js +1 -1
  234. package/dist/cjs/src/pro/bitmart.js +1 -1
  235. package/dist/cjs/src/pro/bitmex.js +1 -1
  236. package/dist/cjs/src/pro/bitrue.js +1 -1
  237. package/dist/cjs/src/pro/bitstamp.js +1 -1
  238. package/dist/cjs/src/pro/bitvavo.js +1 -1
  239. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  240. package/dist/cjs/src/pro/blofin.js +1 -1
  241. package/dist/cjs/src/pro/bullish.js +1 -1
  242. package/dist/cjs/src/pro/bybit.js +1 -1
  243. package/dist/cjs/src/pro/bydfi.js +1 -1
  244. package/dist/cjs/src/pro/cex.js +1 -1
  245. package/dist/cjs/src/pro/coinbase.js +1 -1
  246. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  247. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  248. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  249. package/dist/cjs/src/pro/coincheck.js +1 -1
  250. package/dist/cjs/src/pro/coinex.js +1 -1
  251. package/dist/cjs/src/pro/coinone.js +1 -1
  252. package/dist/cjs/src/pro/cryptocom.js +1 -1
  253. package/dist/cjs/src/pro/deepcoin.js +1 -1
  254. package/dist/cjs/src/pro/deribit.js +1 -1
  255. package/dist/cjs/src/pro/dydx.js +1 -1
  256. package/dist/cjs/src/pro/exmo.js +1 -1
  257. package/dist/cjs/src/pro/gate.js +78 -7
  258. package/dist/cjs/src/pro/gateio.js +1 -1
  259. package/dist/cjs/src/pro/gemini.js +1 -1
  260. package/dist/cjs/src/pro/grvt.js +5 -6
  261. package/dist/cjs/src/pro/hashkey.js +1 -1
  262. package/dist/cjs/src/pro/hitbtc.js +1 -1
  263. package/dist/cjs/src/pro/hollaex.js +1 -1
  264. package/dist/cjs/src/pro/htx.js +1 -1
  265. package/dist/cjs/src/pro/huobi.js +1 -1
  266. package/dist/cjs/src/pro/hyperliquid.js +362 -2
  267. package/dist/cjs/src/pro/independentreserve.js +1 -1
  268. package/dist/cjs/src/pro/kraken.js +1 -1
  269. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  270. package/dist/cjs/src/pro/kucoin.js +1191 -104
  271. package/dist/cjs/src/pro/kucoinfutures.js +1 -2
  272. package/dist/cjs/src/pro/lbank.js +0 -1
  273. package/dist/cjs/src/pro/lighter.js +2 -1
  274. package/dist/cjs/src/pro/luno.js +1 -1
  275. package/dist/cjs/src/pro/mexc.js +1 -1
  276. package/dist/cjs/src/pro/myokx.js +1 -1
  277. package/dist/cjs/src/pro/ndax.js +1 -1
  278. package/dist/cjs/src/pro/okx.js +1 -1
  279. package/dist/cjs/src/pro/okxus.js +1 -1
  280. package/dist/cjs/src/pro/onetrading.js +1 -1
  281. package/dist/cjs/src/pro/oxfun.js +1 -1
  282. package/dist/cjs/src/pro/p2b.js +1 -1
  283. package/dist/cjs/src/pro/pacifica.js +1 -1
  284. package/dist/cjs/src/pro/paradex.js +1 -1
  285. package/dist/cjs/src/pro/phemex.js +1 -1
  286. package/dist/cjs/src/pro/poloniex.js +1 -1
  287. package/dist/cjs/src/pro/toobit.js +1 -1
  288. package/dist/cjs/src/pro/upbit.js +1 -1
  289. package/dist/cjs/src/pro/weex.js +1 -1
  290. package/dist/cjs/src/pro/whitebit.js +1 -1
  291. package/dist/cjs/src/pro/xt.js +1 -1
  292. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +1 -0
  293. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +0 -1
  294. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +0 -1
  295. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +0 -1
  296. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +0 -1
  297. package/dist/cjs/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +0 -1
  298. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +0 -1
  299. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +0 -1
  300. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +0 -1
  301. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +0 -1
  302. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +0 -1
  303. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +0 -1
  304. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +0 -1
  305. package/dist/cjs/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +0 -1
  306. package/dist/cjs/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +0 -1
  307. package/dist/cjs/src/static_dependencies/dydx-v4-client/helpers.js +0 -6
  308. package/dist/cjs/src/static_dependencies/dydx-v4-client/onboarding.js +0 -1
  309. package/dist/cjs/src/static_dependencies/dydx-v4-client/registry.js +0 -1
  310. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
  311. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  312. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  313. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
  314. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
  315. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
  316. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
  317. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
  318. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
  319. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
  320. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
  321. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
  322. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
  323. package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
  324. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  325. package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
  326. package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
  327. package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
  328. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
  329. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
  330. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
  331. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
  332. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  333. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
  334. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
  335. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
  336. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
  337. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  338. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
  339. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
  340. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  341. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  342. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  343. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  344. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
  345. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  346. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  347. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  348. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  349. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  350. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  351. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  352. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
  353. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  354. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  355. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  356. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
  357. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  358. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  359. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  360. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  361. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  362. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  363. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  364. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  365. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
  366. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
  367. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
  368. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
  369. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
  370. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
  371. package/dist/cjs/src/static_dependencies/noble-hashes/pbkdf2.js +0 -1
  372. package/dist/cjs/src/static_dependencies/noble-hashes/ripemd160.js +0 -1
  373. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
  374. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
  375. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
  376. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
  377. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  378. package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
  379. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
  380. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
  381. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
  382. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
  383. package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
  384. package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
  385. package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
  386. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  387. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  388. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
  389. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
  390. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
  391. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
  392. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
  393. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  394. package/dist/cjs/src/static_dependencies/qs/formats.js +0 -6
  395. package/dist/cjs/src/static_dependencies/qs/index.js +0 -1
  396. package/dist/cjs/src/static_dependencies/qs/parse.js +0 -1
  397. package/dist/cjs/src/static_dependencies/qs/stringify.js +0 -1
  398. package/dist/cjs/src/static_dependencies/qs/utils.js +0 -6
  399. package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
  400. package/dist/cjs/src/static_dependencies/scure-bip32/index.js +19 -1
  401. package/dist/cjs/src/static_dependencies/scure-bip39/index.js +1 -1
  402. package/dist/cjs/src/static_dependencies/scure-bip39/wordlists/english.js +0 -6
  403. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  404. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  405. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
  406. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  407. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  408. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
  409. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
  410. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
  411. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  412. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  413. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  414. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
  415. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
  416. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  417. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  418. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  419. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
  420. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  421. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
  422. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
  423. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  424. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
  425. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
  426. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
  427. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  428. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
  429. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
  430. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
  431. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
  432. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
  433. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
  434. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
  435. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  436. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
  437. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  438. package/dist/cjs/src/tokocrypto.js +1 -1
  439. package/dist/cjs/src/toobit.js +1 -1
  440. package/dist/cjs/src/upbit.js +1 -1
  441. package/dist/cjs/src/wavesexchange.js +1 -1
  442. package/dist/cjs/src/weex.js +2 -2
  443. package/dist/cjs/src/whitebit.js +3 -1
  444. package/dist/cjs/src/woo.js +1 -1
  445. package/dist/cjs/src/woofipro.js +1 -1
  446. package/dist/cjs/src/xt.js +1 -1
  447. package/dist/cjs/src/yobit.js +1 -1
  448. package/dist/cjs/src/zaif.js +1 -1
  449. package/dist/cjs/src/zebpay.js +1 -1
  450. package/dist/cjs/src/zonda.js +1 -1
  451. package/js/ccxt.d.ts +1 -1
  452. package/js/ccxt.js +1 -7
  453. package/js/src/abstract/aftermath.js +0 -6
  454. package/js/src/abstract/alpaca.js +0 -6
  455. package/js/src/abstract/apex.js +0 -6
  456. package/js/src/abstract/arkham.js +0 -6
  457. package/js/src/abstract/ascendex.js +0 -6
  458. package/js/src/abstract/aster.js +0 -6
  459. package/js/src/abstract/backpack.js +0 -6
  460. package/js/src/abstract/bequant.js +0 -6
  461. package/js/src/abstract/bigone.js +0 -6
  462. package/js/src/abstract/binance.js +0 -6
  463. package/js/src/abstract/binancecoinm.js +0 -6
  464. package/js/src/abstract/binanceus.js +0 -6
  465. package/js/src/abstract/binanceusdm.js +0 -6
  466. package/js/src/abstract/bingx.js +0 -6
  467. package/js/src/abstract/bit2c.js +0 -6
  468. package/js/src/abstract/bitbank.js +0 -6
  469. package/js/src/abstract/bitbns.js +0 -6
  470. package/js/src/abstract/bitfinex.js +0 -6
  471. package/js/src/abstract/bitflyer.js +0 -6
  472. package/js/src/abstract/bitget.js +0 -6
  473. package/js/src/abstract/bithumb.js +0 -6
  474. package/js/src/abstract/bitmart.js +0 -6
  475. package/js/src/abstract/bitmex.js +0 -6
  476. package/js/src/abstract/bitopro.js +0 -6
  477. package/js/src/abstract/bitrue.js +0 -6
  478. package/js/src/abstract/bitso.js +0 -6
  479. package/js/src/abstract/bitstamp.js +0 -6
  480. package/js/src/abstract/bitteam.js +0 -6
  481. package/js/src/abstract/bittrade.js +0 -6
  482. package/js/src/abstract/bitvavo.js +0 -6
  483. package/js/src/abstract/blockchaincom.js +0 -6
  484. package/js/src/abstract/blofin.js +0 -6
  485. package/js/src/abstract/btcbox.js +0 -6
  486. package/js/src/abstract/btcmarkets.js +0 -6
  487. package/js/src/abstract/btcturk.js +0 -6
  488. package/js/src/abstract/bullish.js +0 -6
  489. package/js/src/abstract/bybit.js +0 -6
  490. package/js/src/abstract/bydfi.js +0 -6
  491. package/js/src/abstract/cex.js +0 -6
  492. package/js/src/abstract/coinbase.js +0 -6
  493. package/js/src/abstract/coinbaseadvanced.js +0 -6
  494. package/js/src/abstract/coinbaseexchange.js +0 -6
  495. package/js/src/abstract/coinbaseinternational.js +0 -6
  496. package/js/src/abstract/coincheck.js +0 -6
  497. package/js/src/abstract/coinex.js +0 -6
  498. package/js/src/abstract/coinmate.js +0 -6
  499. package/js/src/abstract/coinmetro.js +0 -6
  500. package/js/src/abstract/coinone.js +0 -6
  501. package/js/src/abstract/coinsph.js +0 -6
  502. package/js/src/abstract/coinspot.js +0 -6
  503. package/js/src/abstract/cryptocom.js +0 -6
  504. package/js/src/abstract/cryptomus.js +0 -6
  505. package/js/src/abstract/deepcoin.js +0 -6
  506. package/js/src/abstract/delta.js +0 -6
  507. package/js/src/abstract/deribit.js +0 -6
  508. package/js/src/abstract/derive.js +0 -6
  509. package/js/src/abstract/digifinex.js +0 -6
  510. package/js/src/abstract/dydx.js +0 -6
  511. package/js/src/abstract/exmo.js +0 -6
  512. package/js/src/abstract/fmfwio.js +0 -6
  513. package/js/src/abstract/foxbit.js +0 -6
  514. package/js/src/abstract/gate.js +0 -6
  515. package/js/src/abstract/gateio.js +0 -6
  516. package/js/src/abstract/gemini.js +0 -6
  517. package/js/src/abstract/grvt.js +0 -6
  518. package/js/src/abstract/hashkey.js +0 -6
  519. package/js/src/abstract/hibachi.js +0 -6
  520. package/js/src/abstract/hitbtc.js +0 -6
  521. package/js/src/abstract/hollaex.js +0 -6
  522. package/js/src/abstract/htx.js +0 -6
  523. package/js/src/abstract/huobi.js +0 -6
  524. package/js/src/abstract/hyperliquid.js +0 -6
  525. package/js/src/abstract/independentreserve.js +0 -6
  526. package/js/src/abstract/indodax.js +0 -6
  527. package/js/src/abstract/kraken.js +0 -6
  528. package/js/src/abstract/krakenfutures.js +0 -6
  529. package/js/src/abstract/kucoin.d.ts +5 -0
  530. package/js/src/abstract/kucoin.js +0 -6
  531. package/js/src/abstract/kucoinfutures.d.ts +5 -0
  532. package/js/src/abstract/kucoinfutures.js +0 -6
  533. package/js/src/abstract/latoken.js +0 -6
  534. package/js/src/abstract/lbank.js +0 -6
  535. package/js/src/abstract/lighter.js +0 -6
  536. package/js/src/abstract/luno.js +0 -6
  537. package/js/src/abstract/mercado.js +0 -6
  538. package/js/src/abstract/mexc.js +0 -6
  539. package/js/src/abstract/modetrade.js +0 -6
  540. package/js/src/abstract/myokx.d.ts +34 -0
  541. package/js/src/abstract/myokx.js +0 -6
  542. package/js/src/abstract/ndax.js +0 -6
  543. package/js/src/abstract/novadax.js +0 -6
  544. package/js/src/abstract/okx.d.ts +34 -0
  545. package/js/src/abstract/okx.js +0 -6
  546. package/js/src/abstract/okxus.d.ts +34 -0
  547. package/js/src/abstract/okxus.js +0 -6
  548. package/js/src/abstract/onetrading.js +0 -6
  549. package/js/src/abstract/oxfun.js +0 -6
  550. package/js/src/abstract/p2b.js +0 -6
  551. package/js/src/abstract/pacifica.js +0 -6
  552. package/js/src/abstract/paradex.js +0 -6
  553. package/js/src/abstract/paymium.js +0 -6
  554. package/js/src/abstract/phemex.js +0 -6
  555. package/js/src/abstract/poloniex.js +0 -6
  556. package/js/src/abstract/tokocrypto.js +0 -6
  557. package/js/src/abstract/toobit.js +0 -6
  558. package/js/src/abstract/upbit.js +0 -6
  559. package/js/src/abstract/wavesexchange.js +0 -6
  560. package/js/src/abstract/weex.js +0 -6
  561. package/js/src/abstract/whitebit.js +0 -6
  562. package/js/src/abstract/woo.js +0 -6
  563. package/js/src/abstract/woofipro.js +0 -6
  564. package/js/src/abstract/xt.js +0 -6
  565. package/js/src/abstract/yobit.js +0 -6
  566. package/js/src/abstract/zaif.js +0 -6
  567. package/js/src/abstract/zebpay.js +0 -6
  568. package/js/src/abstract/zonda.js +0 -6
  569. package/js/src/aftermath.js +0 -6
  570. package/js/src/alpaca.js +0 -6
  571. package/js/src/apex.js +0 -6
  572. package/js/src/arkham.js +0 -6
  573. package/js/src/ascendex.js +0 -6
  574. package/js/src/aster.js +0 -6
  575. package/js/src/backpack.js +0 -6
  576. package/js/src/base/Exchange.d.ts +6 -1
  577. package/js/src/base/Exchange.js +51 -19
  578. package/js/src/base/Precise.js +0 -6
  579. package/js/src/base/errorHierarchy.js +0 -6
  580. package/js/src/base/errors.js +0 -6
  581. package/js/src/base/functions/crypto.js +0 -6
  582. package/js/src/base/functions/encode.js +0 -6
  583. package/js/src/base/functions/generic.js +0 -6
  584. package/js/src/base/functions/io.js +0 -6
  585. package/js/src/base/functions/misc.js +0 -6
  586. package/js/src/base/functions/number.js +0 -6
  587. package/js/src/base/functions/platform.js +0 -6
  588. package/js/src/base/functions/rsa.js +0 -6
  589. package/js/src/base/functions/string.js +0 -6
  590. package/js/src/base/functions/throttle.js +0 -6
  591. package/js/src/base/functions/time.js +0 -6
  592. package/js/src/base/functions/totp.js +0 -6
  593. package/js/src/base/functions/type.js +0 -6
  594. package/js/src/base/functions.js +0 -6
  595. package/js/src/base/types.js +0 -6
  596. package/js/src/base/ws/Cache.js +0 -6
  597. package/js/src/base/ws/Client.js +0 -6
  598. package/js/src/base/ws/Future.js +0 -6
  599. package/js/src/base/ws/OrderBook.js +0 -6
  600. package/js/src/base/ws/OrderBookSide.js +0 -6
  601. package/js/src/base/ws/WsClient.js +0 -6
  602. package/js/src/base/ws/functions.js +0 -6
  603. package/js/src/bequant.js +0 -6
  604. package/js/src/bigone.js +0 -6
  605. package/js/src/binance.d.ts +1 -1
  606. package/js/src/binance.js +22 -16
  607. package/js/src/binancecoinm.js +0 -6
  608. package/js/src/binanceus.js +0 -6
  609. package/js/src/binanceusdm.js +0 -6
  610. package/js/src/bingx.js +0 -6
  611. package/js/src/bit2c.js +0 -6
  612. package/js/src/bitbank.js +0 -6
  613. package/js/src/bitbns.js +0 -6
  614. package/js/src/bitfinex.js +0 -6
  615. package/js/src/bitflyer.js +0 -6
  616. package/js/src/bitget.js +6 -9
  617. package/js/src/bithumb.js +0 -6
  618. package/js/src/bitmart.js +0 -6
  619. package/js/src/bitmex.js +0 -6
  620. package/js/src/bitopro.js +0 -6
  621. package/js/src/bitrue.js +0 -6
  622. package/js/src/bitso.js +0 -6
  623. package/js/src/bitstamp.js +0 -6
  624. package/js/src/bitteam.js +0 -6
  625. package/js/src/bittrade.js +0 -6
  626. package/js/src/bitvavo.js +0 -6
  627. package/js/src/blockchaincom.js +0 -6
  628. package/js/src/blofin.js +25 -36
  629. package/js/src/btcbox.js +0 -6
  630. package/js/src/btcmarkets.js +0 -6
  631. package/js/src/btcturk.js +0 -6
  632. package/js/src/bullish.js +0 -6
  633. package/js/src/bybit.js +0 -6
  634. package/js/src/bydfi.js +1 -7
  635. package/js/src/cex.js +0 -6
  636. package/js/src/coinbase.js +0 -6
  637. package/js/src/coinbaseadvanced.js +0 -6
  638. package/js/src/coinbaseexchange.js +0 -6
  639. package/js/src/coinbaseinternational.js +0 -6
  640. package/js/src/coincheck.js +0 -6
  641. package/js/src/coinex.js +0 -6
  642. package/js/src/coinmate.js +0 -6
  643. package/js/src/coinmetro.js +0 -6
  644. package/js/src/coinone.js +0 -6
  645. package/js/src/coinsph.js +0 -6
  646. package/js/src/coinspot.js +0 -6
  647. package/js/src/cryptocom.js +0 -6
  648. package/js/src/cryptomus.js +0 -6
  649. package/js/src/deepcoin.js +1 -7
  650. package/js/src/delta.js +0 -6
  651. package/js/src/deribit.js +0 -6
  652. package/js/src/derive.js +0 -6
  653. package/js/src/digifinex.js +0 -6
  654. package/js/src/dydx.js +0 -6
  655. package/js/src/exmo.js +0 -6
  656. package/js/src/fmfwio.js +0 -6
  657. package/js/src/foxbit.js +0 -6
  658. package/js/src/gate.js +0 -7
  659. package/js/src/gateio.js +0 -6
  660. package/js/src/gemini.js +0 -6
  661. package/js/src/grvt.js +14 -20
  662. package/js/src/hashkey.js +0 -6
  663. package/js/src/hibachi.js +1 -7
  664. package/js/src/hitbtc.js +0 -6
  665. package/js/src/hollaex.js +0 -6
  666. package/js/src/htx.js +0 -6
  667. package/js/src/huobi.js +0 -6
  668. package/js/src/hyperliquid.js +0 -6
  669. package/js/src/independentreserve.js +0 -6
  670. package/js/src/indodax.js +0 -6
  671. package/js/src/kraken.js +0 -6
  672. package/js/src/krakenfutures.js +0 -6
  673. package/js/src/kucoin.d.ts +27 -11
  674. package/js/src/kucoin.js +245 -116
  675. package/js/src/kucoinfutures.js +0 -7
  676. package/js/src/latoken.js +0 -6
  677. package/js/src/lbank.js +0 -6
  678. package/js/src/lighter.d.ts +11 -2
  679. package/js/src/lighter.js +313 -148
  680. package/js/src/luno.js +0 -6
  681. package/js/src/mercado.js +0 -6
  682. package/js/src/mexc.js +0 -6
  683. package/js/src/modetrade.js +0 -6
  684. package/js/src/myokx.js +0 -6
  685. package/js/src/ndax.js +0 -6
  686. package/js/src/novadax.js +0 -6
  687. package/js/src/okx.js +46 -7
  688. package/js/src/okxus.js +0 -6
  689. package/js/src/onetrading.js +0 -6
  690. package/js/src/oxfun.js +0 -6
  691. package/js/src/p2b.js +0 -6
  692. package/js/src/pacifica.js +0 -6
  693. package/js/src/paradex.js +0 -6
  694. package/js/src/paymium.js +0 -6
  695. package/js/src/phemex.js +0 -6
  696. package/js/src/poloniex.js +0 -6
  697. package/js/src/pro/aftermath.js +0 -6
  698. package/js/src/pro/alpaca.js +0 -6
  699. package/js/src/pro/apex.js +0 -6
  700. package/js/src/pro/arkham.js +0 -6
  701. package/js/src/pro/ascendex.js +0 -6
  702. package/js/src/pro/aster.d.ts +1 -1
  703. package/js/src/pro/aster.js +23 -48
  704. package/js/src/pro/backpack.js +0 -6
  705. package/js/src/pro/bequant.js +0 -6
  706. package/js/src/pro/binance.js +1 -7
  707. package/js/src/pro/binancecoinm.js +0 -6
  708. package/js/src/pro/binanceus.js +0 -6
  709. package/js/src/pro/binanceusdm.js +0 -6
  710. package/js/src/pro/bingx.js +0 -6
  711. package/js/src/pro/bitfinex.js +0 -6
  712. package/js/src/pro/bitget.js +0 -6
  713. package/js/src/pro/bithumb.js +0 -6
  714. package/js/src/pro/bitmart.js +0 -6
  715. package/js/src/pro/bitmex.js +0 -6
  716. package/js/src/pro/bitopro.js +0 -6
  717. package/js/src/pro/bitrue.js +0 -6
  718. package/js/src/pro/bitstamp.js +0 -6
  719. package/js/src/pro/bittrade.js +0 -6
  720. package/js/src/pro/bitvavo.js +0 -6
  721. package/js/src/pro/blockchaincom.js +0 -6
  722. package/js/src/pro/blofin.js +0 -6
  723. package/js/src/pro/bullish.js +0 -6
  724. package/js/src/pro/bybit.js +0 -6
  725. package/js/src/pro/bydfi.js +0 -6
  726. package/js/src/pro/cex.js +0 -6
  727. package/js/src/pro/coinbase.js +0 -6
  728. package/js/src/pro/coinbaseadvanced.js +0 -6
  729. package/js/src/pro/coinbaseexchange.js +0 -6
  730. package/js/src/pro/coinbaseinternational.js +0 -6
  731. package/js/src/pro/coincheck.js +0 -6
  732. package/js/src/pro/coinex.js +0 -6
  733. package/js/src/pro/coinone.js +0 -6
  734. package/js/src/pro/cryptocom.js +0 -6
  735. package/js/src/pro/deepcoin.js +0 -6
  736. package/js/src/pro/deribit.js +0 -6
  737. package/js/src/pro/derive.js +0 -6
  738. package/js/src/pro/dydx.js +0 -6
  739. package/js/src/pro/exmo.js +0 -6
  740. package/js/src/pro/gate.d.ts +1 -0
  741. package/js/src/pro/gate.js +77 -12
  742. package/js/src/pro/gateio.js +0 -6
  743. package/js/src/pro/gemini.js +0 -6
  744. package/js/src/pro/grvt.js +4 -11
  745. package/js/src/pro/hashkey.js +0 -6
  746. package/js/src/pro/hitbtc.js +0 -6
  747. package/js/src/pro/hollaex.js +0 -6
  748. package/js/src/pro/htx.js +0 -6
  749. package/js/src/pro/huobi.js +0 -6
  750. package/js/src/pro/hyperliquid.d.ts +48 -1
  751. package/js/src/pro/hyperliquid.js +362 -8
  752. package/js/src/pro/independentreserve.js +0 -6
  753. package/js/src/pro/kraken.js +0 -6
  754. package/js/src/pro/krakenfutures.js +0 -6
  755. package/js/src/pro/kucoin.d.ts +65 -6
  756. package/js/src/pro/kucoin.js +1190 -109
  757. package/js/src/pro/kucoinfutures.js +0 -7
  758. package/js/src/pro/lbank.js +0 -6
  759. package/js/src/pro/lighter.js +1 -6
  760. package/js/src/pro/luno.js +0 -6
  761. package/js/src/pro/mexc.js +0 -6
  762. package/js/src/pro/modetrade.js +0 -6
  763. package/js/src/pro/myokx.js +0 -6
  764. package/js/src/pro/ndax.js +0 -6
  765. package/js/src/pro/okx.js +0 -6
  766. package/js/src/pro/okxus.js +0 -6
  767. package/js/src/pro/onetrading.js +0 -6
  768. package/js/src/pro/oxfun.js +0 -6
  769. package/js/src/pro/p2b.js +0 -6
  770. package/js/src/pro/pacifica.js +0 -6
  771. package/js/src/pro/paradex.js +0 -6
  772. package/js/src/pro/phemex.js +0 -6
  773. package/js/src/pro/poloniex.js +0 -6
  774. package/js/src/pro/toobit.js +0 -6
  775. package/js/src/pro/upbit.js +0 -6
  776. package/js/src/pro/weex.js +0 -6
  777. package/js/src/pro/whitebit.js +0 -6
  778. package/js/src/pro/woo.js +0 -6
  779. package/js/src/pro/woofipro.js +0 -6
  780. package/js/src/pro/xt.js +0 -6
  781. package/js/src/protobuf/mexc/compiled.cjs +0 -6
  782. package/js/src/static_dependencies/dydx-v4-client/cosmos/base/v1beta1/coin.js +0 -6
  783. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/keys.js +0 -6
  784. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/multisig/v1beta1/multisig.js +0 -6
  785. package/js/src/static_dependencies/dydx-v4-client/cosmos/crypto/secp256k1/keys.js +0 -6
  786. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/signing/v1beta1/signing.js +0 -6
  787. package/js/src/static_dependencies/dydx-v4-client/cosmos/tx/v1beta1/tx.js +0 -6
  788. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/accountplus/tx.js +0 -6
  789. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/block_rate_limit_config.js +0 -6
  790. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/clob_pair.js +0 -6
  791. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/equity_tier_limit_config.js +0 -6
  792. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/finalize_block.js +0 -6
  793. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations.js +0 -6
  794. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/liquidations_config.js +0 -6
  795. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/matches.js +0 -6
  796. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order.js +0 -6
  797. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/order_removals.js +0 -6
  798. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/clob/tx.js +0 -6
  799. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/transfer.js +0 -6
  800. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/sending/tx.js +0 -6
  801. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/asset_position.js +0 -6
  802. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/perpetual_position.js +0 -6
  803. package/js/src/static_dependencies/dydx-v4-client/dydxprotocol/subaccounts/subaccount.js +0 -6
  804. package/js/src/static_dependencies/dydx-v4-client/google/protobuf/any.js +0 -6
  805. package/js/src/static_dependencies/dydx-v4-client/helpers.js +0 -6
  806. package/js/src/static_dependencies/dydx-v4-client/long/index.cjs +0 -6
  807. package/js/src/static_dependencies/dydx-v4-client/onboarding.js +0 -6
  808. package/js/src/static_dependencies/dydx-v4-client/registry.js +0 -6
  809. package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
  810. package/js/src/static_dependencies/ethers/address/address.js +0 -6
  811. package/js/src/static_dependencies/ethers/address/checks.js +0 -6
  812. package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
  813. package/js/src/static_dependencies/ethers/address/index.js +0 -6
  814. package/js/src/static_dependencies/ethers/bytes32.js +0 -6
  815. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  816. package/js/src/static_dependencies/ethers/coders/address.js +0 -6
  817. package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
  818. package/js/src/static_dependencies/ethers/coders/array.js +0 -6
  819. package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
  820. package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
  821. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
  822. package/js/src/static_dependencies/ethers/coders/null.js +0 -6
  823. package/js/src/static_dependencies/ethers/coders/number.js +0 -6
  824. package/js/src/static_dependencies/ethers/coders/string.js +0 -6
  825. package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
  826. package/js/src/static_dependencies/ethers/fragments.js +0 -6
  827. package/js/src/static_dependencies/ethers/hash/index.js +0 -6
  828. package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
  829. package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  830. package/js/src/static_dependencies/ethers/index.js +0 -6
  831. package/js/src/static_dependencies/ethers/interface.js +0 -6
  832. package/js/src/static_dependencies/ethers/typed.js +0 -6
  833. package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
  834. package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
  835. package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
  836. package/js/src/static_dependencies/ethers/utils/data.js +0 -6
  837. package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
  838. package/js/src/static_dependencies/ethers/utils/events.js +0 -6
  839. package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  840. package/js/src/static_dependencies/ethers/utils/index.js +0 -6
  841. package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
  842. package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
  843. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
  844. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
  845. package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
  846. package/js/src/static_dependencies/ethers/utils/units.js +0 -6
  847. package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
  848. package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
  849. package/js/src/static_dependencies/fflake/browser.js +0 -6
  850. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
  851. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
  852. package/js/src/static_dependencies/jsencrypt/index.js +0 -6
  853. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
  854. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  855. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  856. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  857. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
  858. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
  859. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
  860. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  861. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
  862. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
  863. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  864. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
  865. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  866. package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
  867. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
  868. package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
  869. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
  870. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
  871. package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
  872. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
  873. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
  874. package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  875. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
  876. package/js/src/static_dependencies/noble-curves/bn.js +0 -6
  877. package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
  878. package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
  879. package/js/src/static_dependencies/noble-curves/index.js +0 -6
  880. package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
  881. package/js/src/static_dependencies/noble-curves/p256.js +0 -6
  882. package/js/src/static_dependencies/noble-curves/p384.js +0 -6
  883. package/js/src/static_dependencies/noble-curves/p521.js +0 -6
  884. package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
  885. package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
  886. package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
  887. package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
  888. package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
  889. package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
  890. package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
  891. package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
  892. package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
  893. package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
  894. package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
  895. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
  896. package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
  897. package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
  898. package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
  899. package/js/src/static_dependencies/noble-hashes/index.js +0 -6
  900. package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
  901. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
  902. package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
  903. package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
  904. package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
  905. package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
  906. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
  907. package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
  908. package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
  909. package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
  910. package/js/src/static_dependencies/node-fetch/body.js +0 -6
  911. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
  912. package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
  913. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
  914. package/js/src/static_dependencies/node-fetch/headers.js +0 -6
  915. package/js/src/static_dependencies/node-fetch/index.js +0 -6
  916. package/js/src/static_dependencies/node-fetch/request.js +0 -6
  917. package/js/src/static_dependencies/node-fetch/response.js +0 -6
  918. package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  919. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  920. package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
  921. package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
  922. package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
  923. package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
  924. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
  925. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
  926. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  927. package/js/src/static_dependencies/qs/formats.js +0 -6
  928. package/js/src/static_dependencies/qs/index.js +0 -6
  929. package/js/src/static_dependencies/qs/parse.js +0 -6
  930. package/js/src/static_dependencies/qs/stringify.js +0 -6
  931. package/js/src/static_dependencies/qs/utils.js +0 -6
  932. package/js/src/static_dependencies/scure-base/index.js +0 -6
  933. package/js/src/static_dependencies/scure-bip32/index.js +0 -6
  934. package/js/src/static_dependencies/scure-bip39/index.js +0 -6
  935. package/js/src/static_dependencies/scure-bip39/wordlists/english.js +0 -6
  936. package/js/src/static_dependencies/scure-starknet/index.js +0 -6
  937. package/js/src/static_dependencies/starknet/constants.js +0 -6
  938. package/js/src/static_dependencies/starknet/index.js +0 -6
  939. package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
  940. package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
  941. package/js/src/static_dependencies/starknet/types/index.js +0 -6
  942. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  943. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  944. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
  945. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
  946. package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
  947. package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
  948. package/js/src/static_dependencies/starknet/utils/address.js +0 -6
  949. package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
  950. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
  951. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
  952. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
  953. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
  954. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
  955. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  956. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  957. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  958. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
  959. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
  960. package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
  961. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
  962. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
  963. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
  964. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  965. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
  966. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
  967. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
  968. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
  969. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
  970. package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
  971. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
  972. package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
  973. package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
  974. package/js/src/static_dependencies/starknet/utils/num.js +0 -6
  975. package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
  976. package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
  977. package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
  978. package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
  979. package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
  980. package/js/src/static_dependencies/starknet/utils/url.js +0 -6
  981. package/js/src/static_dependencies/watchable/src/index.js +0 -6
  982. package/js/src/static_dependencies/watchable/src/types.js +0 -6
  983. package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
  984. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  985. package/js/src/tokocrypto.js +0 -6
  986. package/js/src/toobit.js +0 -6
  987. package/js/src/upbit.js +0 -6
  988. package/js/src/wavesexchange.js +0 -6
  989. package/js/src/weex.js +1 -7
  990. package/js/src/whitebit.js +2 -6
  991. package/js/src/woo.js +0 -6
  992. package/js/src/woofipro.js +0 -6
  993. package/js/src/xt.js +0 -6
  994. package/js/src/yobit.js +0 -6
  995. package/js/src/zaif.js +0 -6
  996. package/js/src/zebpay.js +0 -6
  997. package/js/src/zonda.js +0 -6
  998. package/package.json +1 -1
@@ -1,9 +1,3 @@
1
- // ----------------------------------------------------------------------------
2
-
3
- // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
- // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
- // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
-
7
1
  // ---------------------------------------------------------------------------
8
2
  import kucoinRest from '../kucoin.js';
9
3
  import { ArgumentsRequired, ExchangeError } from '../base/errors.js';
@@ -41,7 +35,20 @@ export default class kucoin extends kucoinRest {
41
35
  'unWatchTrades': true,
42
36
  'unWatchhTradesForSymbols': true,
43
37
  },
38
+ 'urls': {
39
+ // only for pro (uta) accounts
40
+ 'api': {
41
+ 'ws': {
42
+ 'spot': 'wss://x-push-spot.kucoin.com',
43
+ 'futures': 'wss://x-push-futures.kucoin.com',
44
+ 'private': 'wss://wsapi-push.kucoin.com',
45
+ },
46
+ },
47
+ },
44
48
  'options': {
49
+ 'utaToken': undefined,
50
+ 'utaTokenLastUpdate': 0,
51
+ 'utaTokenRefreshInterval': 1000 * 60 * 60 * 24,
45
52
  'tradesLimit': 1000,
46
53
  'watchTicker': {
47
54
  'spotMethod': '/market/snapshot', // '/market/ticker'
@@ -49,6 +56,7 @@ export default class kucoin extends kucoinRest {
49
56
  'watchOrderBook': {
50
57
  'snapshotDelay': 5,
51
58
  'snapshotMaxRetries': 3,
59
+ 'utaDepth': 'increment',
52
60
  'spotMethod': '/market/level2',
53
61
  'contractMethod': '/contractMarket/level2', // '/contractMarket/level2Depth5' or '/contractMarket/level2Depth20'
54
62
  },
@@ -63,6 +71,10 @@ export default class kucoin extends kucoinRest {
63
71
  'fetchPositionSnapshot': true,
64
72
  'awaitPositionSnapshot': true, // whether to wait for the position snapshot before providing updates
65
73
  },
74
+ 'watchPositions': {
75
+ 'fetchPositionsSnapshot': true,
76
+ 'awaitPositionsSnapshot': true, // whether to wait for the positions snapshot before providing updates
77
+ },
66
78
  },
67
79
  'streaming': {
68
80
  // kucoin does not support built-in ws protocol-level ping-pong
@@ -166,6 +178,95 @@ export default class kucoin extends kucoinRest {
166
178
  }
167
179
  return await this.watch(url, messageHash, message, subscriptionHash, subscription);
168
180
  }
181
+ async subscribePublicUta(messageHash, channel, symbol, params = {}, subscription = undefined) {
182
+ const requestId = this.requestId().toString();
183
+ const market = this.market(symbol);
184
+ const urlType = market['contract'] ? 'futures' : 'spot';
185
+ const tradeType = urlType.toUpperCase();
186
+ let action = 'subscribe';
187
+ if (subscription !== undefined) {
188
+ const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
189
+ action = unsubscribe ? 'unsubscribe' : action;
190
+ }
191
+ const request = {
192
+ 'id': requestId,
193
+ 'action': action,
194
+ 'channel': channel,
195
+ 'tradeType': tradeType,
196
+ 'symbol': market['id'],
197
+ };
198
+ const message = this.extend(request, params);
199
+ const url = this.safeString(this.urls['api']['ws'], urlType);
200
+ const client = this.client(url);
201
+ if (!(messageHash in client.subscriptions)) {
202
+ client.subscriptions[requestId] = messageHash;
203
+ }
204
+ return await this.watch(url, messageHash, message, messageHash, subscription);
205
+ }
206
+ async subscribePrivateUta(messageHashes, subscribeHash, channel, symbol = undefined, params = {}, subscription = undefined) {
207
+ this.checkRequiredCredentials();
208
+ const requestId = this.requestId().toString();
209
+ let action = 'subscribe';
210
+ if (subscription !== undefined) {
211
+ const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
212
+ action = unsubscribe ? 'unsubscribe' : action;
213
+ }
214
+ const request = {
215
+ 'id': requestId,
216
+ 'action': action,
217
+ 'channel': channel,
218
+ };
219
+ if (symbol !== undefined) {
220
+ const market = this.market(symbol);
221
+ request['symbol'] = market['id'];
222
+ }
223
+ const message = this.extend(request, params);
224
+ const url = await this.getUtaUrl();
225
+ const client = this.client(url);
226
+ if (!(subscribeHash in client.subscriptions)) {
227
+ client.subscriptions[requestId] = subscribeHash;
228
+ }
229
+ return await this.watchMultiple(url, messageHashes, message, [subscribeHash], subscription);
230
+ }
231
+ async getUtaUrl() {
232
+ const utaToken = await this.authenticateUta();
233
+ return this.urls['api']['ws']['private'] + '?token=' + utaToken;
234
+ }
235
+ async authenticateUta() {
236
+ this.checkRequiredCredentials();
237
+ const utaToken = this.safeValue(this.options, 'utaToken');
238
+ const lastUpdate = this.safeInteger(this.options, 'utaTokenLastUpdate', 0);
239
+ let refreshInterval = 1000 * 60 * 60 * 24; // 24 hours
240
+ refreshInterval = this.safeInteger(this.options, 'utaTokenRefreshInterval', refreshInterval);
241
+ const now = this.milliseconds();
242
+ const expired = (now - lastUpdate) >= refreshInterval;
243
+ const messageHash = 'utaToken';
244
+ const url = this.urls['api']['ws']['private'];
245
+ const client = this.client(url);
246
+ if ((utaToken === undefined) || expired) {
247
+ if (messageHash in client.futures) {
248
+ // wait the existing future if it's already being fetched by another call
249
+ await client.future(messageHash);
250
+ }
251
+ else {
252
+ // fetch new token and store the future to the .futures to prevent concurrent fetches
253
+ client.future(messageHash);
254
+ try {
255
+ const response = await this.privatePostBulletPrivate({ 'version': 'v2' });
256
+ const data = this.safeDict(response, 'data', {});
257
+ const utaTokenString = this.safeString(data, 'token');
258
+ this.options['utaTokenLastUpdate'] = now;
259
+ this.options['utaToken'] = utaTokenString;
260
+ client.resolve(utaTokenString, messageHash);
261
+ }
262
+ catch (e) {
263
+ this.options['utaToken'] = undefined;
264
+ client.reject(e, messageHash);
265
+ }
266
+ }
267
+ }
268
+ return this.safeString(this.options, 'utaToken');
269
+ }
169
270
  async unSubscribe(url, messageHash, topic, subscriptionHash, params = {}, subscription = undefined) {
170
271
  return await this.unSubscribeMultiple(url, [messageHash], topic, [subscriptionHash], params, subscription);
171
272
  }
@@ -214,14 +315,24 @@ export default class kucoin extends kucoinRest {
214
315
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
215
316
  * @see https://www.kucoin.com/docs-new/3470063w0
216
317
  * @see https://www.kucoin.com/docs-new/3470081w0
318
+ * @see https://www.kucoin.com/docs-new/3470222w0
217
319
  * @param {string} symbol unified symbol of the market to fetch the ticker for
218
320
  * @param {object} [params] extra parameters specific to the exchange API endpoint
321
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
219
322
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
220
323
  */
221
324
  async watchTicker(symbol, params = {}) {
222
325
  await this.loadMarkets();
223
326
  const market = this.market(symbol);
224
327
  symbol = market['symbol'];
328
+ let messageHash = 'ticker:' + symbol;
329
+ let uta = false;
330
+ [uta, params] = this.handleOptionAndParams(params, 'watchTicker', 'uta', uta);
331
+ if (uta) {
332
+ messageHash = 'uta:' + messageHash;
333
+ const channel = 'ticker';
334
+ return await this.subscribePublicUta(messageHash, channel, symbol, params);
335
+ }
225
336
  const isFuturesMethod = market['contract'];
226
337
  const url = await this.negotiate(false, isFuturesMethod);
227
338
  let method = '/market/snapshot';
@@ -232,7 +343,6 @@ export default class kucoin extends kucoinRest {
232
343
  [method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
233
344
  }
234
345
  const topic = method + ':' + market['id'];
235
- const messageHash = 'ticker:' + symbol;
236
346
  return await this.subscribe(url, messageHash, topic, params);
237
347
  }
238
348
  /**
@@ -241,8 +351,10 @@ export default class kucoin extends kucoinRest {
241
351
  * @description unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
242
352
  * @see https://www.kucoin.com/docs-new/3470063w0
243
353
  * @see https://www.kucoin.com/docs-new/3470081w0
354
+ * @see https://www.kucoin.com/docs-new/3470222w0
244
355
  * @param {string} symbol unified symbol of the market to fetch the ticker for
245
356
  * @param {object} [params] extra parameters specific to the exchange API endpoint
357
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
246
358
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
247
359
  */
248
360
  async unWatchTicker(symbol, params = {}) {
@@ -250,28 +362,39 @@ export default class kucoin extends kucoinRest {
250
362
  const market = this.market(symbol);
251
363
  symbol = market['symbol'];
252
364
  const isFuturesMethod = market['contract'];
253
- const url = await this.negotiate(false, isFuturesMethod);
254
- let method = '/market/snapshot';
255
- if (isFuturesMethod) {
256
- method = '/contractMarket/ticker';
365
+ let uta = false;
366
+ [uta, params] = this.handleOptionAndParams(params, 'unWatchTicker', 'uta', uta);
367
+ const subscription = {
368
+ 'symbols': [symbol],
369
+ 'topic': 'ticker',
370
+ 'unsubscribe': true,
371
+ };
372
+ let subMessageHash = 'ticker:' + symbol;
373
+ if (uta) {
374
+ subMessageHash = 'uta:' + subMessageHash;
375
+ subscription['subMessageHashes'] = [subMessageHash];
376
+ const utaMessageHash = 'unsubscribe:' + subMessageHash;
377
+ subscription['messageHashes'] = [utaMessageHash];
378
+ return await this.subscribePublicUta(utaMessageHash, 'ticker', symbol, params, subscription);
257
379
  }
258
380
  else {
259
- [method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
260
- }
261
- const topic = method + ':' + market['id'];
262
- const messageHash = 'unsubscribe:ticker:' + symbol;
263
- const subMessageHash = 'ticker:' + symbol;
264
- const subscription = {
381
+ const url = await this.negotiate(false, isFuturesMethod);
382
+ let method = '/market/snapshot';
383
+ if (isFuturesMethod) {
384
+ method = '/contractMarket/ticker';
385
+ }
386
+ else {
387
+ [method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
388
+ }
389
+ const topic = method + ':' + market['id'];
390
+ const messageHash = 'unsubscribe:' + subMessageHash;
265
391
  // we have to add the topic to the messageHashes and subMessageHashes
266
392
  // because handleSubscriptionStatus needs them to remove the subscription from the client
267
393
  // without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
268
- 'messageHashes': [messageHash, topic],
269
- 'subMessageHashes': [subMessageHash, topic],
270
- 'topic': 'ticker',
271
- 'unsubscribe': true,
272
- 'symbols': [symbol],
273
- };
274
- return await this.unSubscribe(url, messageHash, topic, subMessageHash, params, subscription);
394
+ subscription['messageHashes'] = [messageHash, topic];
395
+ subscription['subMessageHashes'] = [subMessageHash, topic];
396
+ return await this.unSubscribe(url, messageHash, topic, subMessageHash, params, subscription);
397
+ }
275
398
  }
276
399
  /**
277
400
  * @method
@@ -279,10 +402,12 @@ export default class kucoin extends kucoinRest {
279
402
  * @see https://www.kucoin.com/docs-new/3470063w0
280
403
  * @see https://www.kucoin.com/docs-new/3470064w0
281
404
  * @see https://www.kucoin.com/docs-new/3470081w0
405
+ * @see https://www.kucoin.com/docs-new/3470222w0
282
406
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
283
407
  * @param {string[]} symbols unified symbol of the market to fetch the ticker for
284
408
  * @param {object} [params] extra parameters specific to the exchange API endpoint
285
409
  * @param {string} [params.method] *spot markets only* either '/market/snapshot' or '/market/ticker' default is '/market/ticker'
410
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
286
411
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
287
412
  */
288
413
  async watchTickers(symbols = undefined, params = {}) {
@@ -291,9 +416,11 @@ export default class kucoin extends kucoinRest {
291
416
  const firstMarket = this.getMarketFromSymbols(symbols);
292
417
  let marketType = undefined;
293
418
  [marketType, params] = this.handleMarketTypeAndParams('watchTickers', firstMarket, params);
419
+ let uta = false;
420
+ [uta, params] = this.handleOptionAndParams(params, 'watchTickers', 'uta', uta);
294
421
  const isFuturesMethod = (marketType !== 'spot') && (marketType !== 'margin');
295
- if (isFuturesMethod && symbols === undefined) {
296
- throw new ArgumentsRequired(this.id + ' watchTickers() requires a list of symbols for ' + marketType + ' markets');
422
+ if ((isFuturesMethod || uta) && symbols === undefined) {
423
+ throw new ArgumentsRequired(this.id + ' watchTickers() requires a list of symbols for ' + marketType + ' markets and unified trading account (uta)');
297
424
  }
298
425
  const messageHash = 'tickers';
299
426
  let method = '/market/ticker';
@@ -334,6 +461,49 @@ export default class kucoin extends kucoinRest {
334
461
  }
335
462
  return this.filterByArray(this.tickers, 'symbol', symbols);
336
463
  }
464
+ async subscribePublicMultipleUta(messageHashes, channel, symbols, params = {}, subscription = undefined) {
465
+ const requestId = this.requestId().toString();
466
+ const market = this.getMarketFromSymbols(symbols);
467
+ const urlType = market['contract'] ? 'futures' : 'spot';
468
+ const tradeType = urlType.toUpperCase();
469
+ let action = 'subscribe';
470
+ if (subscription !== undefined) {
471
+ const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
472
+ action = unsubscribe ? 'unsubscribe' : action;
473
+ }
474
+ const request = {
475
+ 'id': requestId,
476
+ 'action': action,
477
+ 'channel': channel,
478
+ 'tradeType': tradeType,
479
+ 'symbols': this.marketIds(symbols),
480
+ };
481
+ const message = this.extend(request, params);
482
+ const url = this.safeString(this.urls['api']['ws'], urlType);
483
+ const client = this.client(url);
484
+ const messageHashWithSymbols = channel + ':' + symbols.join(',');
485
+ if (!(messageHashWithSymbols in client.subscriptions)) {
486
+ client.subscriptions[requestId] = messageHashWithSymbols;
487
+ }
488
+ return await this.watchMultiple(url, messageHashes, message, messageHashes, subscription);
489
+ }
490
+ async watchUtaTickers(symbols = undefined, params = {}) {
491
+ await this.loadMarkets();
492
+ symbols = this.marketSymbols(symbols, undefined, false, true);
493
+ const messageHash = 'uta:ticker';
494
+ const messageHashes = [];
495
+ for (let i = 0; i < symbols.length; i++) {
496
+ const symbol = this.safeString(symbols, i);
497
+ const market = this.market(symbol);
498
+ const subMessageHash = messageHash + ':' + market['symbol'];
499
+ messageHashes.push(subMessageHash);
500
+ }
501
+ const tickers = await this.subscribePublicMultipleUta(messageHashes, 'ticker', symbols, params);
502
+ if (this.newUpdates) {
503
+ return tickers;
504
+ }
505
+ return this.filterByArray(this.tickers, 'symbol', symbols);
506
+ }
337
507
  handleTicker(client, message) {
338
508
  //
339
509
  // market/snapshot
@@ -425,7 +595,7 @@ export default class kucoin extends kucoinRest {
425
595
  }
426
596
  const data = this.safeDict(message, 'data', {});
427
597
  const rawTicker = this.safeDict(data, 'data', data);
428
- const ticker = this.parseTicker(rawTicker, market);
598
+ const ticker = this.parseSpotOrUtaTicker(rawTicker, market);
429
599
  const symbol = ticker['symbol'];
430
600
  this.tickers[symbol] = ticker;
431
601
  const messageHash = 'ticker:' + symbol;
@@ -469,6 +639,61 @@ export default class kucoin extends kucoinRest {
469
639
  const messageHash = 'ticker:' + market['symbol'];
470
640
  client.resolve(ticker, messageHash);
471
641
  }
642
+ handleUtaTicker(client, message) {
643
+ //
644
+ // {
645
+ // "T": "ticker.SPOT",
646
+ // "P": "1774100940787520626",
647
+ // "d": {
648
+ // "A": "0.5972689",
649
+ // "B": "23.3114947",
650
+ // "E": 20310552932,
651
+ // "M": "1774100940780000000",
652
+ // "S": "SELL",
653
+ // "a": "2155.55",
654
+ // "b": "2155.54",
655
+ // "l": "2155.54",
656
+ // "q": "0.0001529",
657
+ // "s": "ETH-USDT"
658
+ // }
659
+ // }
660
+ //
661
+ const data = this.safeDict(message, 'd', {});
662
+ const marketId = this.safeString(data, 's');
663
+ const market = this.safeMarket(marketId);
664
+ const ticker = this.parseWsUtaTicker(data, market);
665
+ this.tickers[market['symbol']] = ticker;
666
+ const messageHash = 'uta:ticker:' + market['symbol'];
667
+ client.resolve(ticker, messageHash);
668
+ }
669
+ parseWsUtaTicker(ticker, market = undefined) {
670
+ const symbol = this.safeString(market, 'symbol');
671
+ market = this.safeMarket(symbol, market);
672
+ const timestamp = this.safeIntegerProduct(ticker, 'M', 0.000001);
673
+ return this.safeTicker({
674
+ 'symbol': symbol,
675
+ 'timestamp': timestamp,
676
+ 'datetime': this.iso8601(timestamp),
677
+ 'high': undefined,
678
+ 'low': undefined,
679
+ 'bid': this.safeString(ticker, 'a'),
680
+ 'bidVolume': this.safeString(ticker, 'A'),
681
+ 'ask': this.safeString(ticker, 'b'),
682
+ 'askVolume': this.safeString(ticker, 'B'),
683
+ 'vwap': undefined,
684
+ 'open': undefined,
685
+ 'close': undefined,
686
+ 'last': this.safeString(ticker, 'l'),
687
+ 'previousClose': undefined,
688
+ 'change': undefined,
689
+ 'percentage': undefined,
690
+ 'average': undefined,
691
+ 'baseVolume': undefined,
692
+ 'quoteVolume': undefined,
693
+ 'markPrice': undefined,
694
+ 'info': ticker,
695
+ }, market);
696
+ }
472
697
  /**
473
698
  * @method
474
699
  * @name kucoin#watchBidsAsks
@@ -604,27 +829,43 @@ export default class kucoin extends kucoinRest {
604
829
  * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
605
830
  * @see https://www.kucoin.com/docs-new/3470071w0
606
831
  * @see https://www.kucoin.com/docs-new/3470086w0
832
+ * @see https://www.kucoin.com/docs-new/3470223w0
607
833
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
608
834
  * @param {string} timeframe the length of time each candle represents
609
835
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
610
836
  * @param {int} [limit] the maximum amount of candles to fetch
611
837
  * @param {object} [params] extra parameters specific to the exchange API endpoint
838
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
612
839
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
613
840
  */
614
841
  async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
615
842
  await this.loadMarkets();
616
843
  const market = this.market(symbol);
617
844
  symbol = market['symbol'];
618
- const isFuturesMethod = market['contract'];
619
- const url = await this.negotiate(false, isFuturesMethod);
620
845
  const period = this.safeString(this.timeframes, timeframe, timeframe);
621
- let channelName = '/market/candles:';
622
- if (isFuturesMethod) {
623
- channelName = '/contractMarket/limitCandle:';
846
+ let messageHash = 'candles:' + symbol + ':' + timeframe;
847
+ let uta = false;
848
+ [uta, params] = this.handleOptionAndParams(params, 'watchOHLCV', 'uta', uta);
849
+ let ohlcv = undefined;
850
+ if (uta) {
851
+ const channel = 'kline';
852
+ messageHash = 'uta:' + messageHash;
853
+ const extendedParams = {
854
+ 'interval': period,
855
+ };
856
+ params = this.extend(extendedParams, params);
857
+ ohlcv = await this.subscribePublicUta(messageHash, channel, symbol, this.extend(extendedParams, params));
858
+ }
859
+ else {
860
+ const isFuturesMethod = market['contract'];
861
+ const url = await this.negotiate(false, isFuturesMethod);
862
+ let channelName = '/market/candles:';
863
+ if (isFuturesMethod) {
864
+ channelName = '/contractMarket/limitCandle:';
865
+ }
866
+ const topic = channelName + market['id'] + '_' + period;
867
+ ohlcv = await this.subscribe(url, messageHash, topic, params);
624
868
  }
625
- const topic = channelName + market['id'] + '_' + period;
626
- const messageHash = 'candles:' + symbol + ':' + timeframe;
627
- const ohlcv = await this.subscribe(url, messageHash, topic, params);
628
869
  if (this.newUpdates) {
629
870
  limit = ohlcv.getLimit(symbol, limit);
630
871
  }
@@ -636,38 +877,54 @@ export default class kucoin extends kucoinRest {
636
877
  * @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
637
878
  * @see https://www.kucoin.com/docs-new/3470071w0
638
879
  * @see https://www.kucoin.com/docs-new/3470086w0
880
+ * @see https://www.kucoin.com/docs-new/3470223w0
639
881
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
640
882
  * @param {string} timeframe the length of time each candle represents
641
883
  * @param {object} [params] extra parameters specific to the exchange API endpoint
884
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
642
885
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
643
886
  */
644
887
  async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
645
888
  await this.loadMarkets();
646
889
  const market = this.market(symbol);
647
890
  symbol = market['symbol'];
648
- const isFuturesMethod = market['contract'];
649
- const url = await this.negotiate(false, isFuturesMethod);
650
- let channelName = '/market/candles:';
651
- if (isFuturesMethod) {
652
- channelName = '/contractMarket/limitCandle:';
653
- }
891
+ let uta = false;
892
+ [uta, params] = this.handleOptionAndParams(params, 'unWatchOHLCV', 'uta', uta);
654
893
  const period = this.safeString(this.timeframes, timeframe, timeframe);
655
- const topic = channelName + market['id'] + '_' + period;
656
- const messageHash = 'unsubscribe:candles:' + symbol + ':' + timeframe;
657
- const subMessageHash = 'candles:' + symbol + ':' + timeframe;
658
894
  const symbolAndTimeframe = [symbol, timeframe];
659
895
  const subscription = {
660
- // we have to add the topic to the messageHashes and subMessageHashes
661
- // because handleSubscriptionStatus needs them to remove the subscription from the client
662
- // without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
663
- 'messageHashes': [messageHash, topic],
664
- 'subMessageHashes': [subMessageHash, topic],
665
- 'topic': 'ohlcv',
666
- 'unsubscribe': true,
667
896
  'symbols': [symbol],
668
897
  'symbolsAndTimeframes': [symbolAndTimeframe],
898
+ 'topic': 'ohlcv',
899
+ 'unsubscribe': true,
669
900
  };
670
- return await this.unSubscribe(url, messageHash, topic, messageHash, params, subscription);
901
+ let subMessageHash = 'candles:' + symbol + ':' + timeframe;
902
+ if (uta) {
903
+ subMessageHash = 'uta:' + subMessageHash;
904
+ subscription['subMessageHashes'] = [subMessageHash];
905
+ const utaMessageHash = 'unsubscribe:' + subMessageHash;
906
+ subscription['messageHashes'] = [utaMessageHash];
907
+ const extendedParams = {
908
+ 'interval': period,
909
+ };
910
+ return await this.subscribePublicUta(utaMessageHash, 'kline', symbol, this.extend(extendedParams, params), subscription);
911
+ }
912
+ else {
913
+ const isFuturesMethod = market['contract'];
914
+ const url = await this.negotiate(false, isFuturesMethod);
915
+ let channelName = '/market/candles:';
916
+ if (isFuturesMethod) {
917
+ channelName = '/contractMarket/limitCandle:';
918
+ }
919
+ const messageHash = 'unsubscribe:' + subMessageHash;
920
+ const topic = channelName + market['id'] + '_' + period;
921
+ // we have to add the topic to the messageHashes and subMessageHashes
922
+ // because handleSubscriptionStatus needs them to remove the subscription from the client
923
+ // without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
924
+ subscription['messageHashes'] = [messageHash, topic];
925
+ subscription['subMessageHashes'] = [subMessageHash, topic];
926
+ return await this.unSubscribe(url, messageHash, topic, messageHash, params, subscription);
927
+ }
671
928
  }
672
929
  handleOHLCV(client, message) {
673
930
  //
@@ -741,19 +998,82 @@ export default class kucoin extends kucoinRest {
741
998
  stored.append(parsed);
742
999
  client.resolve(stored, messageHash);
743
1000
  }
1001
+ handleUtaOHLCV(client, message) {
1002
+ //
1003
+ // {
1004
+ // "T": "kline.SPOT",
1005
+ // "P": "1774621652314890314",
1006
+ // "d": {
1007
+ // "a": "195333.419819132",
1008
+ // "s": "ETH-USDT",
1009
+ // "C": 1774621680,
1010
+ // "c": "1973.4",
1011
+ // "S": false,
1012
+ // "v": "98.941095",
1013
+ // "h": "1974.97",
1014
+ // "i": "1min",
1015
+ // "l": "1973.4",
1016
+ // "O": 1774621620,
1017
+ // "o": "1974.34"
1018
+ // }
1019
+ // }
1020
+ //
1021
+ const data = this.safeDict(message, 'd', {});
1022
+ const marketId = this.safeString(data, 's');
1023
+ const market = this.safeMarket(marketId);
1024
+ const symbol = market['symbol'];
1025
+ const interval = this.safeString(data, 'i');
1026
+ const timeframe = this.findTimeframe(interval);
1027
+ const messageHash = 'uta:candles:' + symbol + ':' + timeframe;
1028
+ this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
1029
+ let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
1030
+ if (stored === undefined) {
1031
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
1032
+ stored = new ArrayCacheByTimestamp(limit);
1033
+ this.ohlcvs[symbol][timeframe] = stored;
1034
+ }
1035
+ const parsed = [
1036
+ this.safeIntegerProduct(data, 'O', 1000),
1037
+ this.safeNumber(data, 'o'),
1038
+ this.safeNumber(data, 'h'),
1039
+ this.safeNumber(data, 'l'),
1040
+ this.safeNumber(data, 'c'),
1041
+ this.safeNumber(data, 'v'),
1042
+ ];
1043
+ stored.append(parsed);
1044
+ client.resolve(stored, messageHash);
1045
+ }
744
1046
  /**
745
1047
  * @method
746
1048
  * @name kucoin#watchTrades
747
1049
  * @description get the list of most recent trades for a particular symbol
748
1050
  * @see https://www.kucoin.com/docs-new/3470072w0
749
1051
  * @see https://www.kucoin.com/docs-new/3470084w0
1052
+ * @see https://www.kucoin.com/docs-new/3470224w0
750
1053
  * @param {string} symbol unified symbol of the market to fetch trades for
751
1054
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
752
1055
  * @param {int} [limit] the maximum amount of trades to fetch
753
1056
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1057
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
754
1058
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
755
1059
  */
756
1060
  async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1061
+ let uta = false;
1062
+ [uta, params] = this.handleOptionAndParams(params, 'watchTrades', 'uta', uta);
1063
+ if (uta) {
1064
+ await this.loadMarkets();
1065
+ const market = this.market(symbol);
1066
+ symbol = market['symbol'];
1067
+ const messageHash = 'uta:trades:' + symbol;
1068
+ const channel = 'trade';
1069
+ const trades = await this.subscribePublicUta(messageHash, channel, symbol, params);
1070
+ if (this.newUpdates) {
1071
+ const first = this.safeValue(trades, 0);
1072
+ const tradeSymbol = this.safeString(first, 'symbol');
1073
+ limit = trades.getLimit(tradeSymbol, limit);
1074
+ }
1075
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
1076
+ }
757
1077
  return await this.watchTradesForSymbols([symbol], since, limit, params);
758
1078
  }
759
1079
  /**
@@ -849,11 +1169,31 @@ export default class kucoin extends kucoinRest {
849
1169
  * @description unWatches trades stream
850
1170
  * @see https://www.kucoin.com/docs-new/3470072w0
851
1171
  * @see https://www.kucoin.com/docs-new/3470084w0
1172
+ * @see https://www.kucoin.com/docs-new/3470224w0
852
1173
  * @param {string} symbol unified symbol of the market to fetch trades for
853
1174
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1175
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
854
1176
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
855
1177
  */
856
1178
  async unWatchTrades(symbol, params = {}) {
1179
+ let uta = false;
1180
+ [uta, params] = this.handleOptionAndParams(params, 'watchTrades', 'uta', uta);
1181
+ if (uta) {
1182
+ await this.loadMarkets();
1183
+ const market = this.market(symbol);
1184
+ symbol = market['symbol'];
1185
+ const subMessageHash = 'uta:trades:' + symbol;
1186
+ const messageHash = 'unsubscribe:' + subMessageHash;
1187
+ const channel = 'trade';
1188
+ const subscription = {
1189
+ 'messageHashes': [messageHash],
1190
+ 'subMessageHashes': [subMessageHash],
1191
+ 'topic': 'trades',
1192
+ 'unsubscribe': true,
1193
+ 'symbols': [symbol],
1194
+ };
1195
+ return await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
1196
+ }
857
1197
  return await this.unWatchTradesForSymbols([symbol], params);
858
1198
  }
859
1199
  handleTrade(client, message) {
@@ -891,17 +1231,106 @@ export default class kucoin extends kucoinRest {
891
1231
  cache.append(trade);
892
1232
  client.resolve(cache, messageHash);
893
1233
  }
1234
+ handleUtaTrade(client, message) {
1235
+ //
1236
+ // {
1237
+ // "T": "trade.SPOT",
1238
+ // "P": "1774618231151398133",
1239
+ // "d": {
1240
+ // "E": "20745928670070784",
1241
+ // "M": "1774618231141000000",
1242
+ // "S": "buy",
1243
+ // "p": "1995.49",
1244
+ // "q": "0.3142324",
1245
+ // "s": "ETH-USDT",
1246
+ // "ti": "20745928670070784"
1247
+ // }
1248
+ // }
1249
+ //
1250
+ const data = this.safeDict(message, 'd', {});
1251
+ const marketId = this.safeString(data, 'symbol');
1252
+ const market = this.safeMarket(marketId);
1253
+ const trade = this.parseWsUtaTrade(data, market);
1254
+ const symbol = trade['symbol'];
1255
+ const messageHash = 'uta:trades:' + symbol;
1256
+ if (!(symbol in this.trades)) {
1257
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
1258
+ const stored = new ArrayCache(limit);
1259
+ this.trades[symbol] = stored;
1260
+ }
1261
+ const cache = this.trades[symbol];
1262
+ cache.append(trade);
1263
+ client.resolve(cache, messageHash);
1264
+ }
1265
+ parseWsUtaTrade(trade, market = undefined) {
1266
+ // trades
1267
+ // {
1268
+ // "E": "20745928670070784",
1269
+ // "M": "1774618231141000000",
1270
+ // "S": "buy",
1271
+ // "p": "1995.49",
1272
+ // "q": "0.3142324",
1273
+ // "s": "ETH-USDT",
1274
+ // "ti": "20745928670070784"
1275
+ // }
1276
+ //
1277
+ // myTrades
1278
+ // {
1279
+ // "E": "1774977429843000000",
1280
+ // "S": "SELL",
1281
+ // "p": "0.09211",
1282
+ // "q": "10",
1283
+ // "s": "DOGE-USDT",
1284
+ // "lR": "TAKER",
1285
+ // "oT": "MARKET",
1286
+ // "oi": "428507829452754944",
1287
+ // "ti": 20801647764195330
1288
+ // }
1289
+ //
1290
+ const marketId = this.safeString(trade, 's');
1291
+ market = this.safeMarket(marketId, market);
1292
+ const timestamp = this.safeIntegerProduct2(trade, 'M', 'E', 0.000001);
1293
+ let fee = undefined;
1294
+ const feeCost = this.safeString(trade, 'f');
1295
+ if (feeCost !== undefined) {
1296
+ const feeCurrencyId = this.safeString(trade, 'fC');
1297
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
1298
+ fee = {
1299
+ 'cost': feeCost,
1300
+ 'currency': feeCurrencyCode,
1301
+ };
1302
+ }
1303
+ return this.safeTrade({
1304
+ 'info': trade,
1305
+ 'id': this.safeString(trade, 'ti'),
1306
+ 'order': this.safeString(trade, 'oi'),
1307
+ 'timestamp': timestamp,
1308
+ 'datetime': this.iso8601(timestamp),
1309
+ 'symbol': market['symbol'],
1310
+ 'type': this.safeStringLower(trade, 'oT'),
1311
+ 'side': this.safeStringLower(trade, 'S'),
1312
+ 'takerOrMaker': this.safeStringLower(trade, 'lR'),
1313
+ 'price': this.safeString(trade, 'p'),
1314
+ 'amount': this.safeString(trade, 'q'),
1315
+ 'cost': undefined,
1316
+ 'fee': fee,
1317
+ }, market);
1318
+ }
894
1319
  /**
895
1320
  * @method
896
1321
  * @name kucoin#watchOrderBook
897
- * @see https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
898
- * @see https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-market-data
899
- * @see https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-5-best-ask-bid-orders
900
- * @see https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-50-best-ask-bid-orders
1322
+ * @see https://www.kucoin.com/docs-new/3470069w0 // spot level 5
1323
+ * @see https://www.kucoin.com/docs-new/3470070w0 // spot level 50
1324
+ * @see https://www.kucoin.com/docs-new/3470068w0 // spot incremental
1325
+ * @see https://www.kucoin.com/docs-new/3470083w0 // futures level 5
1326
+ * @see https://www.kucoin.com/docs-new/3470097w0 // futures level 50
1327
+ * @see https://www.kucoin.com/docs-new/3470082w0 // futures incremental
1328
+ * @see https://www.kucoin.com/docs-new/3470221w0 // uta
901
1329
  * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
902
1330
  * @param {string} symbol unified symbol of the market to fetch the order book for
903
1331
  * @param {int} [limit] the maximum amount of order book entries to return
904
1332
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1333
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
905
1334
  * @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
906
1335
  * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
907
1336
  */
@@ -921,6 +1350,30 @@ export default class kucoin extends kucoinRest {
921
1350
  // If the size=0, update the sequence and remove the price of which the
922
1351
  // size is 0 out of level 2. Fr other cases, please update the price.
923
1352
  //
1353
+ let uta = false;
1354
+ [uta, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'uta', uta);
1355
+ if (uta) {
1356
+ await this.loadMarkets();
1357
+ const market = this.market(symbol);
1358
+ symbol = market['symbol'];
1359
+ let depth = 'increment'; // '1', '5', '50' or 'increment'
1360
+ [depth, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'utaDepth', depth);
1361
+ const messageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
1362
+ const channel = 'obu';
1363
+ let subscription = {};
1364
+ if ((depth === 'increment')) { // other streams return the entire orderbook, so we don't need to fetch the snapshot through REST
1365
+ subscription = {
1366
+ 'method': this.handleOrderBookSubscription,
1367
+ 'symbols': [symbol],
1368
+ 'limit': limit,
1369
+ };
1370
+ }
1371
+ params = this.extend(params, {
1372
+ 'depth': depth,
1373
+ });
1374
+ const orderbook = await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
1375
+ return orderbook.limit();
1376
+ }
924
1377
  return await this.watchOrderBookForSymbols([symbol], limit, params);
925
1378
  }
926
1379
  /**
@@ -933,10 +1386,34 @@ export default class kucoin extends kucoinRest {
933
1386
  * @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
934
1387
  * @param {string} symbol unified symbol of the market to fetch the order book for
935
1388
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1389
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
936
1390
  * @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
937
1391
  * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
938
1392
  */
939
1393
  async unWatchOrderBook(symbol, params = {}) {
1394
+ let uta = false;
1395
+ [uta, params] = this.handleOptionAndParams(params, 'unWatchOrderBook', 'uta', uta);
1396
+ if (uta) {
1397
+ await this.loadMarkets();
1398
+ const market = this.market(symbol);
1399
+ symbol = market['symbol'];
1400
+ let depth = 'increment'; // '1', '5', '50' or 'increment'
1401
+ [depth, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'utaDepth', depth);
1402
+ params = this.extend(params, {
1403
+ 'depth': depth,
1404
+ });
1405
+ const subMessageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
1406
+ const messageHash = 'unsubscribe:' + subMessageHash;
1407
+ const channel = 'obu';
1408
+ const subscription = {
1409
+ 'messageHashes': [messageHash],
1410
+ 'subMessageHashes': [subMessageHash],
1411
+ 'topic': 'orderbook',
1412
+ 'unsubscribe': true,
1413
+ 'symbols': [symbol],
1414
+ };
1415
+ return await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
1416
+ }
940
1417
  return await this.unWatchOrderBookForSymbols([symbol], params);
941
1418
  }
942
1419
  /**
@@ -948,6 +1425,7 @@ export default class kucoin extends kucoinRest {
948
1425
  * @see https://www.kucoin.com/docs-new/3470083w0 // futures level 5
949
1426
  * @see https://www.kucoin.com/docs-new/3470097w0 // futures level 50
950
1427
  * @see https://www.kucoin.com/docs-new/3470082w0 // futures incremental
1428
+ * @see https://www.kucoin.com/docs-new/3470221w0 // uta
951
1429
  * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
952
1430
  * @param {string[]} symbols unified array of symbols
953
1431
  * @param {int} [limit] the maximum amount of order book entries to return
@@ -1151,6 +1629,66 @@ export default class kucoin extends kucoinRest {
1151
1629
  this.handleDelta(this.orderbooks[symbol], data);
1152
1630
  client.resolve(this.orderbooks[symbol], messageHash);
1153
1631
  }
1632
+ handleUtaOrderBook(client, message) {
1633
+ //
1634
+ // snapshot
1635
+ // {
1636
+ // "T": "obu.SPOT",
1637
+ // "dp": "50",
1638
+ // "t": "snapshot",
1639
+ // "P": "1774624848680504909",
1640
+ // "d": {
1641
+ // "C": 20452522782,
1642
+ // "M": "1774624848673000000",
1643
+ // "O": 20452522782,
1644
+ // "a": [ [ "66532.5", "0.46243848" ] ],
1645
+ // "b": [ [ "66532.4", "0.09489" ] ],
1646
+ // "s": "ETH-USDT"
1647
+ // }
1648
+ // }
1649
+ //
1650
+ const type = this.safeString(message, 't');
1651
+ const data = this.safeDict(message, 'd', {});
1652
+ const marketId = this.safeString(data, 's');
1653
+ const market = this.safeMarket(marketId);
1654
+ const symbol = market['symbol'];
1655
+ const timestamp = this.safeIntegerProduct(data, 'M', 0.000001);
1656
+ if (!(symbol in this.orderbooks)) {
1657
+ this.orderbooks[symbol] = this.orderBook();
1658
+ }
1659
+ const orderbook = this.orderbooks[symbol];
1660
+ const depth = this.safeString(message, 'dp');
1661
+ const messageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
1662
+ if (type === 'snapshot') {
1663
+ const parsed = this.parseOrderBook(data, symbol, timestamp, 'b', 'a', 0, 1);
1664
+ parsed['nonce'] = this.safeInteger(data, 'O');
1665
+ orderbook.reset(parsed);
1666
+ this.orderbooks[symbol] = orderbook;
1667
+ }
1668
+ else {
1669
+ const nonce = this.safeInteger(orderbook, 'nonce');
1670
+ const deltaEnd = this.safeInteger(data, 'C');
1671
+ if (nonce === undefined) {
1672
+ const cacheLength = orderbook.cache.length;
1673
+ const subscription = this.safeValue(client.subscriptions, messageHash, {});
1674
+ const limit = this.safeInteger(subscription, 'limit');
1675
+ const snapshotDelay = this.handleOption('watchOrderBook', 'snapshotDelay', 5);
1676
+ const utaParams = {
1677
+ 'uta': true,
1678
+ };
1679
+ if (cacheLength === snapshotDelay) {
1680
+ this.spawn(this.loadOrderBook, client, messageHash, symbol, limit, utaParams);
1681
+ }
1682
+ orderbook.cache.push(data);
1683
+ return;
1684
+ }
1685
+ else if (nonce >= deltaEnd) {
1686
+ return;
1687
+ }
1688
+ }
1689
+ this.handleDelta(this.orderbooks[symbol], data);
1690
+ client.resolve(this.orderbooks[symbol], messageHash);
1691
+ }
1154
1692
  getCacheIndex(orderbook, cache) {
1155
1693
  const firstDelta = this.safeValue(cache, 0);
1156
1694
  const nonce = this.safeInteger(orderbook, 'nonce');
@@ -1169,11 +1707,15 @@ export default class kucoin extends kucoinRest {
1169
1707
  return cache.length;
1170
1708
  }
1171
1709
  handleDelta(orderbook, delta) {
1172
- const timestamp = this.safeInteger2(delta, 'time', 'timestamp');
1173
- orderbook['nonce'] = this.safeInteger2(delta, 'sequenceEnd', 'sequence', timestamp);
1710
+ let timestamp = this.safeIntegerProduct(delta, 'M', 0.000001);
1711
+ if (timestamp === undefined) {
1712
+ timestamp = this.safeInteger2(delta, 'time', 'timestamp');
1713
+ }
1714
+ orderbook['nonce'] = this.safeIntegerN(delta, ['sequenceEnd', 'sequence', 'C'], timestamp);
1174
1715
  orderbook['timestamp'] = timestamp;
1175
1716
  orderbook['datetime'] = this.iso8601(timestamp);
1176
1717
  const change = this.safeString(delta, 'change');
1718
+ const changes = this.safeDict(delta, 'changes', delta);
1177
1719
  const storedBids = orderbook['bids'];
1178
1720
  const storedAsks = orderbook['asks'];
1179
1721
  if (change !== undefined) {
@@ -1191,13 +1733,18 @@ export default class kucoin extends kucoinRest {
1191
1733
  storedAsks.storeArray(value);
1192
1734
  }
1193
1735
  }
1194
- else {
1195
- const changes = this.safeDict(delta, 'changes', delta);
1736
+ else if (changes !== undefined) {
1196
1737
  const bids = this.safeList(changes, 'bids', []);
1197
1738
  const asks = this.safeList(changes, 'asks', []);
1198
1739
  this.handleBidAsks(storedBids, bids);
1199
1740
  this.handleBidAsks(storedAsks, asks);
1200
1741
  }
1742
+ else {
1743
+ const bids = this.safeList2(delta, 'bids', 'b', []);
1744
+ const asks = this.safeList2(delta, 'asks', 'a', []);
1745
+ this.handleBidAsks(storedBids, bids);
1746
+ this.handleBidAsks(storedAsks, asks);
1747
+ }
1201
1748
  }
1202
1749
  handleBidAsks(bookSide, bidAsks) {
1203
1750
  for (let i = 0; i < bidAsks.length; i++) {
@@ -1225,11 +1772,18 @@ export default class kucoin extends kucoinRest {
1225
1772
  }
1226
1773
  handleSubscriptionStatus(client, message) {
1227
1774
  //
1775
+ // classic
1228
1776
  // {
1229
1777
  // "id": "1578090438322",
1230
1778
  // "type": "ack"
1231
1779
  // }
1232
1780
  //
1781
+ // uta
1782
+ // {
1783
+ // "id": "1",
1784
+ // "result": true
1785
+ // }
1786
+ //
1233
1787
  const id = this.safeString(message, 'id');
1234
1788
  if (!(id in client.subscriptions)) {
1235
1789
  return;
@@ -1264,6 +1818,17 @@ export default class kucoin extends kucoinRest {
1264
1818
  // "type": "welcome",
1265
1819
  // }
1266
1820
  //
1821
+ // uta
1822
+ // {
1823
+ // "sessionId": "ddfb0cbd-f7a7-40c2-9129-445bbb830c54",
1824
+ // "message": "welcome",
1825
+ // "pingInterval": 18000
1826
+ // }
1827
+ //
1828
+ const pingInterval = this.safeInteger(message, 'pingInterval');
1829
+ if (pingInterval !== undefined) {
1830
+ client.keepAlive = pingInterval;
1831
+ }
1267
1832
  return message;
1268
1833
  }
1269
1834
  /**
@@ -1274,18 +1839,20 @@ export default class kucoin extends kucoinRest {
1274
1839
  * @see https://www.kucoin.com/docs-new/3470139w0 // spot trigger orders
1275
1840
  * @see https://www.kucoin.com/docs-new/3470090w0 // contract regular orders
1276
1841
  * @see https://www.kucoin.com/docs-new/3470091w0 // contract trigger orders
1842
+ * @see https://www.kucoin.com/docs-new/3470228w0 // uta orders
1277
1843
  * @param {string} symbol unified market symbol of the market orders were made in
1278
1844
  * @param {int} [since] the earliest time in ms to fetch orders for
1279
1845
  * @param {int} [limit] the maximum number of order structures to retrieve
1280
1846
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1847
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta)
1281
1848
  * @param {boolean} [params.trigger] trigger orders are watched if true
1282
1849
  * @param {string} [params.type] 'spot' or 'swap' (default is 'spot' if symbol is not provided)
1283
1850
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/?id=order-structure}
1284
1851
  */
1285
1852
  async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1286
1853
  await this.loadMarkets();
1287
- const trigger = this.safeBool2(params, 'stop', 'trigger');
1288
- params = this.omit(params, ['stop', 'trigger']);
1854
+ let uta = await this.isUTAEnabled();
1855
+ [uta, params] = this.handleOptionAndParams(params, 'watchOrders', 'uta', uta);
1289
1856
  let market = undefined;
1290
1857
  let messageHash = 'orders';
1291
1858
  if (symbol !== undefined) {
@@ -1293,22 +1860,38 @@ export default class kucoin extends kucoinRest {
1293
1860
  symbol = market['symbol'];
1294
1861
  messageHash = messageHash + ':' + symbol;
1295
1862
  }
1296
- let marketType = undefined;
1297
- [marketType, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
1298
- const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
1299
- const url = await this.negotiate(true, isFuturesMethod);
1300
- let topic = trigger ? '/spotMarket/advancedOrders' : '/spotMarket/tradeOrders';
1301
- if (isFuturesMethod) {
1302
- topic = trigger ? '/contractMarket/advancedOrders' : '/contractMarket/tradeOrders';
1863
+ let orders = undefined;
1864
+ if (uta) {
1865
+ params = this.extend(params, {
1866
+ 'tradeType': 'UNIFIED',
1867
+ });
1868
+ messageHash = 'uta:' + messageHash;
1869
+ let channel = 'order';
1870
+ if (symbol === undefined) {
1871
+ channel += 'All';
1872
+ }
1873
+ orders = await this.subscribePrivateUta([messageHash], messageHash, channel, symbol, params);
1303
1874
  }
1304
- if (symbol === undefined) {
1305
- const suffix = this.getOrdersMessageHashSuffix(topic);
1306
- messageHash += suffix;
1875
+ else {
1876
+ const trigger = this.safeBool2(params, 'stop', 'trigger');
1877
+ params = this.omit(params, ['stop', 'trigger']);
1878
+ let marketType = undefined;
1879
+ [marketType, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
1880
+ const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
1881
+ const url = await this.negotiate(true, isFuturesMethod);
1882
+ let topic = trigger ? '/spotMarket/advancedOrders' : '/spotMarket/tradeOrders';
1883
+ if (isFuturesMethod) {
1884
+ topic = trigger ? '/contractMarket/advancedOrders' : '/contractMarket/tradeOrders';
1885
+ }
1886
+ if (symbol === undefined) {
1887
+ const suffix = this.getOrdersMessageHashSuffix(topic);
1888
+ messageHash += suffix;
1889
+ }
1890
+ const request = {
1891
+ 'privateChannel': true,
1892
+ };
1893
+ orders = await this.subscribe(url, messageHash, topic, this.extend(request, params));
1307
1894
  }
1308
- const request = {
1309
- 'privateChannel': true,
1310
- };
1311
- const orders = await this.subscribe(url, messageHash, topic, this.extend(request, params));
1312
1895
  if (this.newUpdates) {
1313
1896
  limit = orders.getLimit(symbol, limit);
1314
1897
  }
@@ -1442,6 +2025,90 @@ export default class kucoin extends kucoinRest {
1442
2025
  'trades': undefined,
1443
2026
  }, market);
1444
2027
  }
2028
+ parseWsUtaOrder(order, market = undefined) {
2029
+ //
2030
+ // {
2031
+ // "tT": "FUTURES",
2032
+ // "oi": "427737326394129559",
2033
+ // "ci": "",
2034
+ // "os": 5,
2035
+ // "eT": "CANCEL",
2036
+ // "s": "DOGEUSDTM",
2037
+ // "S": "SELL",
2038
+ // "oT": "MARKET",
2039
+ // "lR": "",
2040
+ // "oS": "USER",
2041
+ // "p": "",
2042
+ // "ti": "",
2043
+ // "q": "1",
2044
+ // "qU": "UNIT",
2045
+ // "fS": "0",
2046
+ // "lS": "0",
2047
+ // "ls": "0",
2048
+ // "aP": "0",
2049
+ // "f": "0",
2050
+ // "fC": "USDT",
2051
+ // "t": "0",
2052
+ // "cR": "USER",
2053
+ // "cS": "1",
2054
+ // "rS": "0",
2055
+ // "tD": "DOWN",
2056
+ // "tP": "0.01",
2057
+ // "tPT": "MP",
2058
+ // "pP": "",
2059
+ // "pPT": "",
2060
+ // "lP": "",
2061
+ // "lPT": "",
2062
+ // "toi": "427737326102335488",
2063
+ // "stp": "",
2064
+ // "rO": true,
2065
+ // "tIF": "GTC",
2066
+ // "pO": false,
2067
+ // "O": "1774793727626043888",
2068
+ // "U": 1774794309608959200
2069
+ // }
2070
+ //
2071
+ const timestamp = this.safeIntegerProduct(order, 'O', 0.000001);
2072
+ const rawStatus = this.safeString(order, 'os');
2073
+ const marketId = this.safeString(order, 's');
2074
+ const rawTimeInForce = this.safeString(order, 'tIF');
2075
+ const remainSize = this.safeString(order, 'rS');
2076
+ const canceledSize = this.safeString(order, 'cS');
2077
+ const remaining = Precise.stringAdd(remainSize, canceledSize);
2078
+ market = this.safeMarket(marketId, market);
2079
+ const fee = {
2080
+ 'cost': this.safeString(order, 'f'),
2081
+ 'currency': this.safeCurrencyCode(this.safeString(order, 'fC')),
2082
+ };
2083
+ // todo check amount for other qU values
2084
+ return this.safeOrder({
2085
+ 'info': order,
2086
+ 'id': this.safeString(order, 'oi'),
2087
+ 'clientOrderId': this.safeString(order, 'ci'),
2088
+ 'datetime': this.iso8601(timestamp),
2089
+ 'timestamp': timestamp,
2090
+ 'lastTradeTimestamp': undefined,
2091
+ 'lastUpdateTimestamp': this.safeIntegerProduct(order, 'U', 0.000001),
2092
+ 'status': this.parseOrderStatus(rawStatus),
2093
+ 'symbol': market['symbol'],
2094
+ 'type': this.safeStringLower(order, 'oT'),
2095
+ 'timeInForce': this.parseOrderTimeInForce(rawTimeInForce),
2096
+ 'side': this.safeStringLower(order, 'S'),
2097
+ 'price': this.safeString(order, 'p'),
2098
+ 'average': this.safeString(order, 'aP'),
2099
+ 'amount': this.safeString(order, 'q'),
2100
+ 'filled': this.safeString(order, 'fS'),
2101
+ 'remaining': remaining,
2102
+ 'triggerPrice': this.safeString(order, 'tP'),
2103
+ 'takeProfitPrice': this.safeString(order, 'pP'),
2104
+ 'stopLossPrice': this.safeString(order, 'lP'),
2105
+ 'cost': this.safeString(order, 'c'),
2106
+ 'trades': undefined,
2107
+ 'fee': fee,
2108
+ 'reduceOnly': this.safeBool(order, 'rO'),
2109
+ 'postOnly': this.safeBool(order, 'pO'),
2110
+ }, market);
2111
+ }
1445
2112
  handleOrder(client, message) {
1446
2113
  //
1447
2114
  // Trigger Orders
@@ -1496,17 +2163,80 @@ export default class kucoin extends kucoinRest {
1496
2163
  const symbolSpecificMessageHash = messageHash + ':' + symbol;
1497
2164
  client.resolve(cachedOrders, symbolSpecificMessageHash);
1498
2165
  }
2166
+ handleUtaOrder(client, message) {
2167
+ //
2168
+ // {
2169
+ // "T": "orderAll.UNIFIED",
2170
+ // "P": "1774794309609274499",
2171
+ // "d": {
2172
+ // "tT": "FUTURES",
2173
+ // "oi": "427737326394129559",
2174
+ // "ci": "",
2175
+ // "os": 5,
2176
+ // "eT": "CANCEL",
2177
+ // "s": "DOGEUSDTM",
2178
+ // "S": "SELL",
2179
+ // "oT": "MARKET",
2180
+ // "lR": "",
2181
+ // "oS": "USER",
2182
+ // "p": "",
2183
+ // "ti": "",
2184
+ // "q": "1",
2185
+ // "qU": "UNIT",
2186
+ // "fS": "0",
2187
+ // "lS": "0",
2188
+ // "ls": "0",
2189
+ // "aP": "0",
2190
+ // "f": "0",
2191
+ // "fC": "USDT",
2192
+ // "t": "0",
2193
+ // "cR": "USER",
2194
+ // "cS": "1",
2195
+ // "rS": "0",
2196
+ // "tD": "DOWN",
2197
+ // "tP": "0.01",
2198
+ // "tPT": "MP",
2199
+ // "pP": "",
2200
+ // "pPT": "",
2201
+ // "lP": "",
2202
+ // "lPT": "",
2203
+ // "toi": "427737326102335488",
2204
+ // "stp": "",
2205
+ // "rO": true,
2206
+ // "tIF": "GTC",
2207
+ // "pO": false,
2208
+ // "O": "1774793727626043888",
2209
+ // "U": 1774794309608959200
2210
+ // }
2211
+ // }
2212
+ //
2213
+ const data = this.safeDict(message, 'd', {});
2214
+ const parsed = this.parseWsUtaOrder(data);
2215
+ const symbol = this.safeString(parsed, 'symbol');
2216
+ if (this.orders === undefined) {
2217
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
2218
+ this.orders = new ArrayCacheBySymbolById(limit);
2219
+ }
2220
+ const cachedOrders = this.orders;
2221
+ cachedOrders.append(parsed);
2222
+ const messageHash = 'uta:orders';
2223
+ const symbolSpecificMessageHash = messageHash + ':' + symbol;
2224
+ client.resolve(cachedOrders, symbolSpecificMessageHash);
2225
+ client.resolve(cachedOrders, messageHash);
2226
+ }
1499
2227
  /**
1500
2228
  * @method
1501
2229
  * @name kucoin#watchMyTrades
1502
2230
  * @description watches information on multiple trades made by the user on spot
1503
2231
  * @see https://www.kucoin.com/docs-new/3470074w0
1504
2232
  * @see https://www.kucoin.com/docs-new/3470090w0
2233
+ * @see https://www.kucoin.com/docs-new/3470264w0
1505
2234
  * @param {string} symbol unified market symbol of the market trades were made in
1506
2235
  * @param {int} [since] the earliest time in ms to fetch trades for
1507
2236
  * @param {int} [limit] the maximum number of trade structures to retrieve
1508
2237
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1509
- * @param {string} [params.method] '/spotMarket/tradeOrders' or '/spot/tradeFills' or '/contractMarket/tradeOrders', default is '/spotMarket/tradeOrders'
2238
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta)
2239
+ * @param {string} [params.method] *classic (non-uta) account only* '/spotMarket/tradeOrders' or '/spot/tradeFills' or '/contractMarket/tradeOrders', default is '/spotMarket/tradeOrders'
1510
2240
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=trade-structure}
1511
2241
  */
1512
2242
  async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1521,18 +2251,31 @@ export default class kucoin extends kucoinRest {
1521
2251
  let marketType = undefined;
1522
2252
  [marketType, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
1523
2253
  const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
1524
- const url = await this.negotiate(true, isFuturesMethod);
1525
- let topic = isFuturesMethod ? '/contractMarket/tradeOrders' : '/spotMarket/tradeOrders';
1526
- const optionName = isFuturesMethod ? 'contractMethod' : 'spotMethod';
1527
- [topic, params] = this.handleOptionAndParams2(params, 'watchMyTrades', optionName, 'method', topic);
1528
- const request = {
1529
- 'privateChannel': true,
1530
- };
1531
- if (symbol === undefined) {
1532
- const suffix = this.getMyTradesMessageHashSuffix(topic);
1533
- messageHash += suffix;
2254
+ let uta = await this.isUTAEnabled();
2255
+ [uta, params] = this.handleOptionAndParams(params, 'watchMyTrades', 'uta', uta);
2256
+ let trades = undefined;
2257
+ if (uta) {
2258
+ params = this.extend(params, {
2259
+ 'tradeType': 'UNIFIED',
2260
+ });
2261
+ messageHash = 'uta:' + messageHash;
2262
+ const channel = 'execution.lite';
2263
+ trades = await this.subscribePrivateUta([messageHash], channel, channel, undefined, params);
2264
+ }
2265
+ else {
2266
+ const url = await this.negotiate(true, isFuturesMethod);
2267
+ let topic = isFuturesMethod ? '/contractMarket/tradeOrders' : '/spotMarket/tradeOrders';
2268
+ const optionName = isFuturesMethod ? 'contractMethod' : 'spotMethod';
2269
+ [topic, params] = this.handleOptionAndParams2(params, 'watchMyTrades', optionName, 'method', topic);
2270
+ const request = {
2271
+ 'privateChannel': true,
2272
+ };
2273
+ if (symbol === undefined) {
2274
+ const suffix = this.getMyTradesMessageHashSuffix(topic);
2275
+ messageHash += suffix;
2276
+ }
2277
+ trades = await this.subscribe(url, messageHash, topic, this.extend(request, params));
1534
2278
  }
1535
- const trades = await this.subscribe(url, messageHash, topic, this.extend(request, params));
1536
2279
  if (this.newUpdates) {
1537
2280
  limit = trades.getLimit(symbol, limit);
1538
2281
  }
@@ -1590,6 +2333,40 @@ export default class kucoin extends kucoinRest {
1590
2333
  const symbolSpecificMessageHash = messageHash + ':' + parsed['symbol'];
1591
2334
  client.resolve(this.myTrades, symbolSpecificMessageHash);
1592
2335
  }
2336
+ handleUtaMyTrade(client, message) {
2337
+ //
2338
+ // {
2339
+ // "T": "execution.lite.UNIFIED",
2340
+ // "P": "1774977429844510434",
2341
+ // "d": {
2342
+ // "E": "1774977429843000000",
2343
+ // "S": "SELL",
2344
+ // "p": "0.09211",
2345
+ // "q": "10",
2346
+ // "s": "DOGE-USDT",
2347
+ // "lR": "TAKER",
2348
+ // "oT": "MARKET",
2349
+ // "oi": "428507829452754944",
2350
+ // "ti": 20801647764195330
2351
+ // }
2352
+ // }
2353
+ //
2354
+ const data = this.safeDict(message, 'd', {});
2355
+ const marketId = this.safeString(data, 's');
2356
+ const market = this.safeMarket(marketId);
2357
+ const trade = this.parseWsUtaTrade(data, market);
2358
+ const symbol = trade['symbol'];
2359
+ if (this.myTrades === undefined) {
2360
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
2361
+ this.myTrades = new ArrayCacheBySymbolById(limit);
2362
+ }
2363
+ const cache = this.myTrades;
2364
+ cache.append(trade);
2365
+ const messageHash = 'uta:myTrades';
2366
+ const symbolMessageHash = messageHash + ':' + symbol;
2367
+ client.resolve(this.myTrades, messageHash);
2368
+ client.resolve(cache, symbolMessageHash);
2369
+ }
1593
2370
  parseWsTrade(trade, market = undefined) {
1594
2371
  //
1595
2372
  // /spotMarket/tradeOrders
@@ -1675,19 +2452,35 @@ export default class kucoin extends kucoinRest {
1675
2452
  * @description watch balance and get the amount of funds available for trading or funds locked in orders
1676
2453
  * @see https://www.kucoin.com/docs-new/3470075w0 // spot balance
1677
2454
  * @see https://www.kucoin.com/docs-new/3470092w0 // contract balance
2455
+ * @see https://www.kucoin.com/docs-new/3470231w0 // uta balance
1678
2456
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1679
- * @param {string} [params.type] 'spot' or 'swap' (default is 'spot')
2457
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta)
2458
+ * @param {string} [params.type] *classic (non-uta) account only* 'spot' or 'swap' (default is 'spot')
1680
2459
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
1681
2460
  */
1682
2461
  async watchBalance(params = {}) {
1683
2462
  await this.loadMarkets();
1684
- const defaultType = this.safeString(this.options, 'defaultType', 'spot');
1685
- const type = this.safeString(params, 'type', defaultType);
2463
+ let uta = await this.isUTAEnabled();
2464
+ [uta, params] = this.handleOptionAndParams(params, 'watchBalance', 'uta', uta);
2465
+ let defaultType = uta ? 'unified' : 'spot';
2466
+ let type = defaultType;
2467
+ if (!uta) {
2468
+ defaultType = this.safeString(this.options, 'defaultType', defaultType);
2469
+ type = this.safeString(params, 'type', defaultType);
2470
+ }
1686
2471
  params = this.omit(params, 'type');
1687
2472
  const accountsByType = this.safeDict(this.options, 'accountsByType', {});
1688
2473
  const uniformType = this.safeString(accountsByType, type, type);
1689
- const isFuturesMethod = (uniformType === 'contract');
1690
- const url = await this.negotiate(true, isFuturesMethod);
2474
+ const isClassicFuturesMethod = (uniformType === 'contract');
2475
+ let subscriptionHash = isClassicFuturesMethod ? '/contractAccount/wallet' : '/account/balance';
2476
+ let url = undefined;
2477
+ if (uta) {
2478
+ url = await this.getUtaUrl();
2479
+ subscriptionHash = uniformType;
2480
+ }
2481
+ else {
2482
+ url = await this.negotiate(true, isClassicFuturesMethod);
2483
+ }
1691
2484
  const client = this.client(url);
1692
2485
  this.setBalanceCache(client, uniformType);
1693
2486
  const options = this.safeDict(this.options, 'watchBalance');
@@ -1697,20 +2490,28 @@ export default class kucoin extends kucoinRest {
1697
2490
  await client.future(uniformType + ':fetchBalanceSnapshot');
1698
2491
  }
1699
2492
  const messageHash = uniformType + ':balance';
1700
- const requestId = this.requestId().toString();
1701
- const subscriptionHash = isFuturesMethod ? '/contractAccount/wallet' : '/account/balance';
1702
- const request = {
1703
- 'id': requestId,
1704
- 'type': 'subscribe',
1705
- 'topic': subscriptionHash,
1706
- 'response': true,
1707
- 'privateChannel': true,
1708
- };
1709
- const message = this.extend(request, params);
1710
- if (!(subscriptionHash in client.subscriptions)) {
1711
- client.subscriptions[requestId] = subscriptionHash;
2493
+ if (uta) {
2494
+ const extendedParams = {
2495
+ 'accountType': uniformType,
2496
+ };
2497
+ const channel = 'balance';
2498
+ return await this.subscribePrivateUta([messageHash], subscriptionHash, channel, undefined, this.extend(extendedParams, params));
2499
+ }
2500
+ else {
2501
+ const requestId = this.requestId().toString();
2502
+ const request = {
2503
+ 'id': requestId,
2504
+ 'type': 'subscribe',
2505
+ 'topic': subscriptionHash,
2506
+ 'response': true,
2507
+ 'privateChannel': true,
2508
+ };
2509
+ const message = this.extend(request, params);
2510
+ if (!(subscriptionHash in client.subscriptions)) {
2511
+ client.subscriptions[requestId] = subscriptionHash;
2512
+ }
2513
+ return await this.watch(url, messageHash, message, uniformType);
1712
2514
  }
1713
- return await this.watch(url, messageHash, message, type);
1714
2515
  }
1715
2516
  setBalanceCache(client, type) {
1716
2517
  if ((type in client.subscriptions) && (type in this.balance)) {
@@ -1730,8 +2531,10 @@ export default class kucoin extends kucoinRest {
1730
2531
  }
1731
2532
  }
1732
2533
  async loadBalanceSnapshot(client, messageHash, type) {
2534
+ const uta = (type === 'unified');
1733
2535
  const params = {
1734
2536
  'type': type,
2537
+ 'uta': uta,
1735
2538
  };
1736
2539
  const response = await this.fetchBalance(params);
1737
2540
  this.balance[type] = this.extend(response, this.safeValue(this.balance, type, {}));
@@ -1846,6 +2649,42 @@ export default class kucoin extends kucoinRest {
1846
2649
  const messageHash = uniformType + ':balance';
1847
2650
  client.resolve(this.balance[uniformType], messageHash);
1848
2651
  }
2652
+ handleUtaBalance(client, message) {
2653
+ //
2654
+ // {
2655
+ // "T": "balance.UNIFIED",
2656
+ // "P": "1774982552507478380",
2657
+ // "d": {
2658
+ // "c": "USDT",
2659
+ // "e": "100.0030439507",
2660
+ // "b": "100.0030439507",
2661
+ // "a": "89.9930439507",
2662
+ // "h": "10.0100000000",
2663
+ // "U": "1774982552505000000",
2664
+ // "l": "0.0000000000"
2665
+ // }
2666
+ // }
2667
+ //
2668
+ const type = 'unified';
2669
+ const data = this.safeDict(message, 'd', {});
2670
+ const currencyId = this.safeString(data, 'c');
2671
+ const code = this.safeCurrencyCode(currencyId);
2672
+ if (!(type in this.balance)) {
2673
+ this.balance[type] = {};
2674
+ }
2675
+ this.balance[type]['info'] = data;
2676
+ const timestamp = this.safeIntegerProduct(data, 'U', 0.000001);
2677
+ this.balance[type]['timestamp'] = timestamp;
2678
+ this.balance[type]['datetime'] = this.iso8601(timestamp);
2679
+ const account = this.account();
2680
+ account['free'] = this.safeString(data, 'a');
2681
+ account['used'] = this.safeString(data, 'h');
2682
+ account['total'] = this.safeString(data, 'b');
2683
+ this.balance[type][code] = account;
2684
+ this.balance[type] = this.safeBalance(this.balance[type]);
2685
+ const messageHash = type + ':balance';
2686
+ client.resolve(this.balance[type], messageHash);
2687
+ }
1849
2688
  /**
1850
2689
  * @method
1851
2690
  * @name kucoin#watchPosition
@@ -1878,6 +2717,55 @@ export default class kucoin extends kucoinRest {
1878
2717
  }
1879
2718
  return await this.subscribe(url, messageHash, topic, this.extend(request, params));
1880
2719
  }
2720
+ /**
2721
+ * @method
2722
+ * @name kucoin#watchPositions
2723
+ * @see https://www.kucoin.com/docs-new/3470233w0
2724
+ * @description watch all open positions
2725
+ * @param {string[]} [symbols] list of unified market symbols
2726
+ * @param {int} [since] the earliest time in ms to fetch positions for
2727
+ * @param {int} [limit] the maximum number of positions to retrieve
2728
+ * @param {object} params extra parameters specific to the exchange API endpoint
2729
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta)
2730
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
2731
+ */
2732
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
2733
+ await this.loadMarkets();
2734
+ let uta = await this.isUTAEnabled();
2735
+ [uta, params] = this.handleOptionAndParams(params, 'watchPositions', 'uta', uta);
2736
+ const tradeType = uta ? 'UNIFIED' : 'TRADE';
2737
+ const messageHash = 'positions';
2738
+ const messageHashes = [];
2739
+ symbols = this.marketSymbols(symbols);
2740
+ if (symbols === undefined) {
2741
+ messageHashes.push(messageHash);
2742
+ }
2743
+ else {
2744
+ for (let i = 0; i < symbols.length; i++) {
2745
+ const symbol = symbols[i];
2746
+ messageHashes.push(messageHash + ':' + symbol);
2747
+ }
2748
+ }
2749
+ const url = await this.getUtaUrl();
2750
+ const client = this.client(url);
2751
+ this.setPositionsCache(client, uta);
2752
+ const fetchPositionSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', true);
2753
+ const awaitPositionSnapshot = this.handleOption('watchPositions', 'awaitPositionsSnapshot', true);
2754
+ const cache = this.positions;
2755
+ if (fetchPositionSnapshot && awaitPositionSnapshot && cache === undefined) {
2756
+ const snapshot = await client.future('fetchPositionsSnapshot');
2757
+ return this.filterBySymbolsSinceLimit(snapshot, symbols, since, limit, true);
2758
+ }
2759
+ const channel = 'positionAll';
2760
+ params = this.extend(params, {
2761
+ 'tradeType': tradeType,
2762
+ });
2763
+ const newPositions = await this.subscribePrivateUta(messageHashes, channel, channel, undefined, params);
2764
+ if (this.newUpdates) {
2765
+ return newPositions;
2766
+ }
2767
+ return this.filterBySymbolsSinceLimit(cache, symbols, since, limit, true);
2768
+ }
1881
2769
  getCurrentPosition(symbol) {
1882
2770
  if (this.positions === undefined) {
1883
2771
  return undefined;
@@ -1887,6 +2775,40 @@ export default class kucoin extends kucoinRest {
1887
2775
  const values = Object.values(symbolCache);
1888
2776
  return this.safeValue(values, 0);
1889
2777
  }
2778
+ setPositionsCache(client, uta) {
2779
+ if (!(this.isEmpty(this.positions))) {
2780
+ return;
2781
+ }
2782
+ const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', false);
2783
+ if (fetchPositionsSnapshot) {
2784
+ const messageHash = 'fetchPositionsSnapshot';
2785
+ if (!(messageHash in client.futures)) {
2786
+ client.future(messageHash);
2787
+ this.spawn(this.loadPositionsSnapshot, client, messageHash, uta);
2788
+ }
2789
+ }
2790
+ else {
2791
+ this.positions = new ArrayCacheBySymbolById();
2792
+ }
2793
+ }
2794
+ async loadPositionsSnapshot(client, messageHash, uta) {
2795
+ const positions = await this.fetchPositions(undefined, { 'uta': uta });
2796
+ this.positions = new ArrayCacheBySymbolById();
2797
+ const cache = this.positions;
2798
+ for (let i = 0; i < positions.length; i++) {
2799
+ const position = positions[i];
2800
+ const contracts = this.safeNumber(position, 'contracts', 0);
2801
+ if (contracts > 0) {
2802
+ cache.append(position);
2803
+ }
2804
+ }
2805
+ // don't remove the future from the .futures cache
2806
+ if (messageHash in client.futures) {
2807
+ const future = client.futures[messageHash];
2808
+ future.resolve(cache);
2809
+ client.resolve(cache, 'positions');
2810
+ }
2811
+ }
1890
2812
  setPositionCache(client, symbol) {
1891
2813
  const fetchPositionSnapshot = this.handleOption('watchPosition', 'fetchPositionSnapshot', false);
1892
2814
  if (fetchPositionSnapshot) {
@@ -2022,6 +2944,114 @@ export default class kucoin extends kucoinRest {
2022
2944
  cache.append(position);
2023
2945
  client.resolve(position, messageHash);
2024
2946
  }
2947
+ handleUtaPosition(client, message) {
2948
+ //
2949
+ // {
2950
+ // "T": "positionAll.UNIFIED",
2951
+ // "P": "1774805155993190995",
2952
+ // "d": {
2953
+ // "pi": "30000000000084845",
2954
+ // "s": "DOGEUSDTM",
2955
+ // "mM": "CROSS",
2956
+ // "q": "3",
2957
+ // "eP": "0.09038666666666666666",
2958
+ // "pV": "27.021",
2959
+ // "mP": "0.09007",
2960
+ // "lP": "0.00001",
2961
+ // "bP": "0.00001",
2962
+ // "l": "4.5",
2963
+ // "uPL": "-0.095",
2964
+ // "rPL": "-0.01473705",
2965
+ // "iM": "6.0046666666666666666",
2966
+ // "mmr": "0.007",
2967
+ // "mtM": "0.189147",
2968
+ // "U": "1774805155988000000",
2969
+ // "O": 1774793727585000000
2970
+ // }
2971
+ // }
2972
+ //
2973
+ if (this.positions === undefined) {
2974
+ this.positions = new ArrayCacheBySymbolById();
2975
+ }
2976
+ const data = this.safeDict(message, 'd', {});
2977
+ const marketId = this.safeString(data, 's');
2978
+ const symbol = this.safeSymbol(marketId);
2979
+ const cache = this.positions;
2980
+ const currentPosition = this.getCurrentPosition(symbol);
2981
+ const newPosition = this.parseWsUtaPosition(data);
2982
+ const keys = Object.keys(newPosition);
2983
+ for (let i = 0; i < keys.length; i++) {
2984
+ const key = keys[i];
2985
+ if (newPosition[key] === undefined) {
2986
+ delete newPosition[key];
2987
+ }
2988
+ }
2989
+ const position = this.extend(currentPosition, newPosition);
2990
+ cache.append(position);
2991
+ const messageHash = 'positions';
2992
+ const symbolMessageHash = messageHash + ':' + symbol;
2993
+ client.resolve(this.positions, messageHash);
2994
+ client.resolve(this.positions, symbolMessageHash);
2995
+ }
2996
+ parseWsUtaPosition(position, market = undefined) {
2997
+ //
2998
+ // {
2999
+ // "pi": "30000000000084845",
3000
+ // "s": "DOGEUSDTM",
3001
+ // "mM": "CROSS",
3002
+ // "q": "3",
3003
+ // "eP": "0.09038666666666666666",
3004
+ // "pV": "27.021",
3005
+ // "mP": "0.09007",
3006
+ // "lP": "0.00001",
3007
+ // "bP": "0.00001",
3008
+ // "l": "4.5",
3009
+ // "uPL": "-0.095",
3010
+ // "rPL": "-0.01473705",
3011
+ // "iM": "6.0046666666666666666",
3012
+ // "mmr": "0.007",
3013
+ // "mtM": "0.189147",
3014
+ // "U": "1774805155988000000",
3015
+ // "O": 1774793727585000000
3016
+ // }
3017
+ //
3018
+ const marketId = this.safeString(position, 's');
3019
+ market = this.safeMarket(marketId, market);
3020
+ const symbol = market['symbol'];
3021
+ const timestamp = this.safeIntegerProduct(position, 'O', 0.000001);
3022
+ const amountString = this.safeString(position, 'q');
3023
+ const size = Precise.stringAbs(amountString);
3024
+ const side = Precise.stringGt(amountString, '0') ? 'long' : 'short';
3025
+ return this.safePosition({
3026
+ 'info': position,
3027
+ 'id': this.safeString(position, 'pi'),
3028
+ 'symbol': symbol,
3029
+ 'timestamp': timestamp,
3030
+ 'datetime': this.iso8601(timestamp),
3031
+ 'lastUpdateTimestamp': this.safeIntegerProduct(position, 'U', 0.000001),
3032
+ 'initialMargin': this.safeNumber(position, 'iM'),
3033
+ 'initialMarginPercentage': undefined,
3034
+ 'maintenanceMargin': this.safeNumber(position, 'mtM'),
3035
+ 'maintenanceMarginPercentage': this.safeNumber(position, 'mmr'),
3036
+ 'entryPrice': this.safeNumber(position, 'eP'),
3037
+ 'notional': this.safeNumber(position, 'pV'),
3038
+ 'leverage': this.safeNumber(position, 'l'),
3039
+ 'unrealizedPnl': this.safeNumber(position, 'uPL'),
3040
+ 'contracts': this.parseNumber(size),
3041
+ 'contractSize': this.safeNumber(market, 'contractSize'),
3042
+ 'realizedPnl': this.safeNumber(position, 'rPL'),
3043
+ 'marginRatio': undefined,
3044
+ 'liquidationPrice': this.safeNumber(position, 'lP'),
3045
+ 'markPrice': this.safeNumber(position, 'mP'),
3046
+ 'lastPrice': undefined,
3047
+ 'collateral': undefined,
3048
+ 'marginMode': this.safeStringLower(position, 'mM'),
3049
+ 'side': side,
3050
+ 'percentage': undefined,
3051
+ 'stopLossPrice': undefined,
3052
+ 'takeProfitPrice': undefined,
3053
+ });
3054
+ }
2025
3055
  handleSubject(client, message) {
2026
3056
  //
2027
3057
  // {
@@ -2044,7 +3074,7 @@ export default class kucoin extends kucoinRest {
2044
3074
  this.handleTicker(client, message);
2045
3075
  return;
2046
3076
  }
2047
- const subject = this.safeString(message, 'subject');
3077
+ const subject = this.safeString2(message, 'subject', 'T');
2048
3078
  const methods = {
2049
3079
  'level1': this.handleBidAsk,
2050
3080
  'level2': this.handleOrderBook,
@@ -2069,6 +3099,40 @@ export default class kucoin extends kucoinRest {
2069
3099
  'position.change': this.handlePosition,
2070
3100
  'position.settlement': this.handlePosition,
2071
3101
  'position.adjustRiskLimit': this.handlePosition,
3102
+ // uta messages
3103
+ 'ticker.SPOT': this.handleUtaTicker,
3104
+ 'ticker.FUTURES': this.handleUtaTicker,
3105
+ 'trade.SPOT': this.handleUtaTrade,
3106
+ 'trade.FUTURES': this.handleUtaTrade,
3107
+ 'kline.SPOT': this.handleUtaOHLCV,
3108
+ 'kline.FUTURES': this.handleUtaOHLCV,
3109
+ 'obu.SPOT': this.handleUtaOrderBook,
3110
+ 'obu.FUTURES': this.handleUtaOrderBook,
3111
+ 'order.UNIFIED': this.handleUtaOrder,
3112
+ 'order.SPOT': this.handleUtaOrder,
3113
+ 'order.FUTURES': this.handleUtaOrder,
3114
+ 'order.CROSS': this.handleUtaOrder,
3115
+ 'order.ISOLATED': this.handleUtaOrder,
3116
+ 'orderAll.UNIFIED': this.handleUtaOrder,
3117
+ 'orderAll.SPOT': this.handleUtaOrder,
3118
+ 'orderAll.FUTURES': this.handleUtaOrder,
3119
+ 'orderAll.CROSS': this.handleUtaOrder,
3120
+ 'orderAll.ISOLATED': this.handleUtaOrder,
3121
+ 'execution.UNIFIED': this.handleUtaMyTrade,
3122
+ 'execution.SPOT': this.handleUtaMyTrade,
3123
+ 'execution.FUTURES': this.handleUtaMyTrade,
3124
+ 'execution.CROSS': this.handleUtaMyTrade,
3125
+ 'execution.ISOLATED': this.handleUtaMyTrade,
3126
+ 'execution.lite.UNIFIED': this.handleUtaMyTrade,
3127
+ 'execution.lite.SPOT': this.handleUtaMyTrade,
3128
+ 'execution.lite.FUTURES': this.handleUtaMyTrade,
3129
+ 'execution.lite.CROSS': this.handleUtaMyTrade,
3130
+ 'execution.lite.ISOLATED': this.handleUtaMyTrade,
3131
+ 'position.UNIFIED': this.handleUtaPosition,
3132
+ 'position.FUTURES': this.handleUtaPosition,
3133
+ 'positionAll.UNIFIED': this.handleUtaPosition,
3134
+ 'positionAll.FUTURES': this.handleUtaPosition,
3135
+ 'balance.UNIFIED': this.handleUtaBalance,
2072
3136
  };
2073
3137
  const method = this.safeValue(methods, subject);
2074
3138
  if (method !== undefined) {
@@ -2098,7 +3162,14 @@ export default class kucoin extends kucoinRest {
2098
3162
  // "data": "type is not supported"
2099
3163
  // }
2100
3164
  //
2101
- const data = this.safeString(message, 'data', '');
3165
+ // uta
3166
+ // {
3167
+ // "id": "1",
3168
+ // "result": false,
3169
+ // "reason": "missing `symbol` for topic: Position"
3170
+ // }
3171
+ //
3172
+ const data = this.safeString2(message, 'data', 'reason', '');
2102
3173
  if (data === 'token is expired') {
2103
3174
  let type = 'public';
2104
3175
  if (client.url.indexOf('connectId=private') >= 0) {
@@ -2110,7 +3181,7 @@ export default class kucoin extends kucoinRest {
2110
3181
  return false;
2111
3182
  }
2112
3183
  handleMessage(client, message) {
2113
- const type = this.safeString(message, 'type');
3184
+ const type = this.safeString2(message, 'type', 'message');
2114
3185
  const methods = {
2115
3186
  // 'heartbeat': this.handleHeartbeat,
2116
3187
  'welcome': this.handleSystemStatus,
@@ -2123,6 +3194,16 @@ export default class kucoin extends kucoinRest {
2123
3194
  if (method !== undefined) {
2124
3195
  method.call(this, client, message);
2125
3196
  }
3197
+ else if ('T' in message) { // uta messages
3198
+ this.handleSubject(client, message);
3199
+ }
3200
+ else if ('result' in message) { // subscription uta messages
3201
+ const result = this.safeBool(message, 'result', true);
3202
+ if (!result) {
3203
+ this.handleErrorMessage(client, message);
3204
+ }
3205
+ this.handleSubscriptionStatus(client, message);
3206
+ }
2126
3207
  }
2127
3208
  getMessageHash(elementName, symbol = undefined) {
2128
3209
  // method from kucoinfutures