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
@@ -7,7 +7,7 @@ var errors = require('../base/errors.js');
7
7
  var Precise = require('../base/Precise.js');
8
8
  var Cache = require('../base/ws/Cache.js');
9
9
 
10
- // ----------------------------------------------------------------------------
10
+ // ---------------------------------------------------------------------------
11
11
  // ---------------------------------------------------------------------------
12
12
  class kucoin extends kucoin$1["default"] {
13
13
  describe() {
@@ -40,7 +40,20 @@ class kucoin extends kucoin$1["default"] {
40
40
  'unWatchTrades': true,
41
41
  'unWatchhTradesForSymbols': true,
42
42
  },
43
+ 'urls': {
44
+ // only for pro (uta) accounts
45
+ 'api': {
46
+ 'ws': {
47
+ 'spot': 'wss://x-push-spot.kucoin.com',
48
+ 'futures': 'wss://x-push-futures.kucoin.com',
49
+ 'private': 'wss://wsapi-push.kucoin.com',
50
+ },
51
+ },
52
+ },
43
53
  'options': {
54
+ 'utaToken': undefined,
55
+ 'utaTokenLastUpdate': 0,
56
+ 'utaTokenRefreshInterval': 1000 * 60 * 60 * 24,
44
57
  'tradesLimit': 1000,
45
58
  'watchTicker': {
46
59
  'spotMethod': '/market/snapshot', // '/market/ticker'
@@ -48,6 +61,7 @@ class kucoin extends kucoin$1["default"] {
48
61
  'watchOrderBook': {
49
62
  'snapshotDelay': 5,
50
63
  'snapshotMaxRetries': 3,
64
+ 'utaDepth': 'increment',
51
65
  'spotMethod': '/market/level2',
52
66
  'contractMethod': '/contractMarket/level2', // '/contractMarket/level2Depth5' or '/contractMarket/level2Depth20'
53
67
  },
@@ -62,6 +76,10 @@ class kucoin extends kucoin$1["default"] {
62
76
  'fetchPositionSnapshot': true,
63
77
  'awaitPositionSnapshot': true, // whether to wait for the position snapshot before providing updates
64
78
  },
79
+ 'watchPositions': {
80
+ 'fetchPositionsSnapshot': true,
81
+ 'awaitPositionsSnapshot': true, // whether to wait for the positions snapshot before providing updates
82
+ },
65
83
  },
66
84
  'streaming': {
67
85
  // kucoin does not support built-in ws protocol-level ping-pong
@@ -165,6 +183,95 @@ class kucoin extends kucoin$1["default"] {
165
183
  }
166
184
  return await this.watch(url, messageHash, message, subscriptionHash, subscription);
167
185
  }
186
+ async subscribePublicUta(messageHash, channel, symbol, params = {}, subscription = undefined) {
187
+ const requestId = this.requestId().toString();
188
+ const market = this.market(symbol);
189
+ const urlType = market['contract'] ? 'futures' : 'spot';
190
+ const tradeType = urlType.toUpperCase();
191
+ let action = 'subscribe';
192
+ if (subscription !== undefined) {
193
+ const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
194
+ action = unsubscribe ? 'unsubscribe' : action;
195
+ }
196
+ const request = {
197
+ 'id': requestId,
198
+ 'action': action,
199
+ 'channel': channel,
200
+ 'tradeType': tradeType,
201
+ 'symbol': market['id'],
202
+ };
203
+ const message = this.extend(request, params);
204
+ const url = this.safeString(this.urls['api']['ws'], urlType);
205
+ const client = this.client(url);
206
+ if (!(messageHash in client.subscriptions)) {
207
+ client.subscriptions[requestId] = messageHash;
208
+ }
209
+ return await this.watch(url, messageHash, message, messageHash, subscription);
210
+ }
211
+ async subscribePrivateUta(messageHashes, subscribeHash, channel, symbol = undefined, params = {}, subscription = undefined) {
212
+ this.checkRequiredCredentials();
213
+ const requestId = this.requestId().toString();
214
+ let action = 'subscribe';
215
+ if (subscription !== undefined) {
216
+ const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
217
+ action = unsubscribe ? 'unsubscribe' : action;
218
+ }
219
+ const request = {
220
+ 'id': requestId,
221
+ 'action': action,
222
+ 'channel': channel,
223
+ };
224
+ if (symbol !== undefined) {
225
+ const market = this.market(symbol);
226
+ request['symbol'] = market['id'];
227
+ }
228
+ const message = this.extend(request, params);
229
+ const url = await this.getUtaUrl();
230
+ const client = this.client(url);
231
+ if (!(subscribeHash in client.subscriptions)) {
232
+ client.subscriptions[requestId] = subscribeHash;
233
+ }
234
+ return await this.watchMultiple(url, messageHashes, message, [subscribeHash], subscription);
235
+ }
236
+ async getUtaUrl() {
237
+ const utaToken = await this.authenticateUta();
238
+ return this.urls['api']['ws']['private'] + '?token=' + utaToken;
239
+ }
240
+ async authenticateUta() {
241
+ this.checkRequiredCredentials();
242
+ const utaToken = this.safeValue(this.options, 'utaToken');
243
+ const lastUpdate = this.safeInteger(this.options, 'utaTokenLastUpdate', 0);
244
+ let refreshInterval = 1000 * 60 * 60 * 24; // 24 hours
245
+ refreshInterval = this.safeInteger(this.options, 'utaTokenRefreshInterval', refreshInterval);
246
+ const now = this.milliseconds();
247
+ const expired = (now - lastUpdate) >= refreshInterval;
248
+ const messageHash = 'utaToken';
249
+ const url = this.urls['api']['ws']['private'];
250
+ const client = this.client(url);
251
+ if ((utaToken === undefined) || expired) {
252
+ if (messageHash in client.futures) {
253
+ // wait the existing future if it's already being fetched by another call
254
+ await client.future(messageHash);
255
+ }
256
+ else {
257
+ // fetch new token and store the future to the .futures to prevent concurrent fetches
258
+ client.future(messageHash);
259
+ try {
260
+ const response = await this.privatePostBulletPrivate({ 'version': 'v2' });
261
+ const data = this.safeDict(response, 'data', {});
262
+ const utaTokenString = this.safeString(data, 'token');
263
+ this.options['utaTokenLastUpdate'] = now;
264
+ this.options['utaToken'] = utaTokenString;
265
+ client.resolve(utaTokenString, messageHash);
266
+ }
267
+ catch (e) {
268
+ this.options['utaToken'] = undefined;
269
+ client.reject(e, messageHash);
270
+ }
271
+ }
272
+ }
273
+ return this.safeString(this.options, 'utaToken');
274
+ }
168
275
  async unSubscribe(url, messageHash, topic, subscriptionHash, params = {}, subscription = undefined) {
169
276
  return await this.unSubscribeMultiple(url, [messageHash], topic, [subscriptionHash], params, subscription);
170
277
  }
@@ -213,14 +320,24 @@ class kucoin extends kucoin$1["default"] {
213
320
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
214
321
  * @see https://www.kucoin.com/docs-new/3470063w0
215
322
  * @see https://www.kucoin.com/docs-new/3470081w0
323
+ * @see https://www.kucoin.com/docs-new/3470222w0
216
324
  * @param {string} symbol unified symbol of the market to fetch the ticker for
217
325
  * @param {object} [params] extra parameters specific to the exchange API endpoint
326
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
218
327
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
219
328
  */
220
329
  async watchTicker(symbol, params = {}) {
221
330
  await this.loadMarkets();
222
331
  const market = this.market(symbol);
223
332
  symbol = market['symbol'];
333
+ let messageHash = 'ticker:' + symbol;
334
+ let uta = false;
335
+ [uta, params] = this.handleOptionAndParams(params, 'watchTicker', 'uta', uta);
336
+ if (uta) {
337
+ messageHash = 'uta:' + messageHash;
338
+ const channel = 'ticker';
339
+ return await this.subscribePublicUta(messageHash, channel, symbol, params);
340
+ }
224
341
  const isFuturesMethod = market['contract'];
225
342
  const url = await this.negotiate(false, isFuturesMethod);
226
343
  let method = '/market/snapshot';
@@ -231,7 +348,6 @@ class kucoin extends kucoin$1["default"] {
231
348
  [method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
232
349
  }
233
350
  const topic = method + ':' + market['id'];
234
- const messageHash = 'ticker:' + symbol;
235
351
  return await this.subscribe(url, messageHash, topic, params);
236
352
  }
237
353
  /**
@@ -240,8 +356,10 @@ class kucoin extends kucoin$1["default"] {
240
356
  * @description unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
241
357
  * @see https://www.kucoin.com/docs-new/3470063w0
242
358
  * @see https://www.kucoin.com/docs-new/3470081w0
359
+ * @see https://www.kucoin.com/docs-new/3470222w0
243
360
  * @param {string} symbol unified symbol of the market to fetch the ticker for
244
361
  * @param {object} [params] extra parameters specific to the exchange API endpoint
362
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
245
363
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
246
364
  */
247
365
  async unWatchTicker(symbol, params = {}) {
@@ -249,28 +367,39 @@ class kucoin extends kucoin$1["default"] {
249
367
  const market = this.market(symbol);
250
368
  symbol = market['symbol'];
251
369
  const isFuturesMethod = market['contract'];
252
- const url = await this.negotiate(false, isFuturesMethod);
253
- let method = '/market/snapshot';
254
- if (isFuturesMethod) {
255
- method = '/contractMarket/ticker';
370
+ let uta = false;
371
+ [uta, params] = this.handleOptionAndParams(params, 'unWatchTicker', 'uta', uta);
372
+ const subscription = {
373
+ 'symbols': [symbol],
374
+ 'topic': 'ticker',
375
+ 'unsubscribe': true,
376
+ };
377
+ let subMessageHash = 'ticker:' + symbol;
378
+ if (uta) {
379
+ subMessageHash = 'uta:' + subMessageHash;
380
+ subscription['subMessageHashes'] = [subMessageHash];
381
+ const utaMessageHash = 'unsubscribe:' + subMessageHash;
382
+ subscription['messageHashes'] = [utaMessageHash];
383
+ return await this.subscribePublicUta(utaMessageHash, 'ticker', symbol, params, subscription);
256
384
  }
257
385
  else {
258
- [method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
259
- }
260
- const topic = method + ':' + market['id'];
261
- const messageHash = 'unsubscribe:ticker:' + symbol;
262
- const subMessageHash = 'ticker:' + symbol;
263
- const subscription = {
386
+ const url = await this.negotiate(false, isFuturesMethod);
387
+ let method = '/market/snapshot';
388
+ if (isFuturesMethod) {
389
+ method = '/contractMarket/ticker';
390
+ }
391
+ else {
392
+ [method, params] = this.handleOptionAndParams(params, 'watchTicker', 'spotMethod', method);
393
+ }
394
+ const topic = method + ':' + market['id'];
395
+ const messageHash = 'unsubscribe:' + subMessageHash;
264
396
  // we have to add the topic to the messageHashes and subMessageHashes
265
397
  // because handleSubscriptionStatus needs them to remove the subscription from the client
266
398
  // without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
267
- 'messageHashes': [messageHash, topic],
268
- 'subMessageHashes': [subMessageHash, topic],
269
- 'topic': 'ticker',
270
- 'unsubscribe': true,
271
- 'symbols': [symbol],
272
- };
273
- return await this.unSubscribe(url, messageHash, topic, subMessageHash, params, subscription);
399
+ subscription['messageHashes'] = [messageHash, topic];
400
+ subscription['subMessageHashes'] = [subMessageHash, topic];
401
+ return await this.unSubscribe(url, messageHash, topic, subMessageHash, params, subscription);
402
+ }
274
403
  }
275
404
  /**
276
405
  * @method
@@ -278,10 +407,12 @@ class kucoin extends kucoin$1["default"] {
278
407
  * @see https://www.kucoin.com/docs-new/3470063w0
279
408
  * @see https://www.kucoin.com/docs-new/3470064w0
280
409
  * @see https://www.kucoin.com/docs-new/3470081w0
410
+ * @see https://www.kucoin.com/docs-new/3470222w0
281
411
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
282
412
  * @param {string[]} symbols unified symbol of the market to fetch the ticker for
283
413
  * @param {object} [params] extra parameters specific to the exchange API endpoint
284
414
  * @param {string} [params.method] *spot markets only* either '/market/snapshot' or '/market/ticker' default is '/market/ticker'
415
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
285
416
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/?id=ticker-structure}
286
417
  */
287
418
  async watchTickers(symbols = undefined, params = {}) {
@@ -290,9 +421,11 @@ class kucoin extends kucoin$1["default"] {
290
421
  const firstMarket = this.getMarketFromSymbols(symbols);
291
422
  let marketType = undefined;
292
423
  [marketType, params] = this.handleMarketTypeAndParams('watchTickers', firstMarket, params);
424
+ let uta = false;
425
+ [uta, params] = this.handleOptionAndParams(params, 'watchTickers', 'uta', uta);
293
426
  const isFuturesMethod = (marketType !== 'spot') && (marketType !== 'margin');
294
- if (isFuturesMethod && symbols === undefined) {
295
- throw new errors.ArgumentsRequired(this.id + ' watchTickers() requires a list of symbols for ' + marketType + ' markets');
427
+ if ((isFuturesMethod || uta) && symbols === undefined) {
428
+ throw new errors.ArgumentsRequired(this.id + ' watchTickers() requires a list of symbols for ' + marketType + ' markets and unified trading account (uta)');
296
429
  }
297
430
  const messageHash = 'tickers';
298
431
  let method = '/market/ticker';
@@ -333,6 +466,49 @@ class kucoin extends kucoin$1["default"] {
333
466
  }
334
467
  return this.filterByArray(this.tickers, 'symbol', symbols);
335
468
  }
469
+ async subscribePublicMultipleUta(messageHashes, channel, symbols, params = {}, subscription = undefined) {
470
+ const requestId = this.requestId().toString();
471
+ const market = this.getMarketFromSymbols(symbols);
472
+ const urlType = market['contract'] ? 'futures' : 'spot';
473
+ const tradeType = urlType.toUpperCase();
474
+ let action = 'subscribe';
475
+ if (subscription !== undefined) {
476
+ const unsubscribe = this.safeBool(subscription, 'unsubscribe', false);
477
+ action = unsubscribe ? 'unsubscribe' : action;
478
+ }
479
+ const request = {
480
+ 'id': requestId,
481
+ 'action': action,
482
+ 'channel': channel,
483
+ 'tradeType': tradeType,
484
+ 'symbols': this.marketIds(symbols),
485
+ };
486
+ const message = this.extend(request, params);
487
+ const url = this.safeString(this.urls['api']['ws'], urlType);
488
+ const client = this.client(url);
489
+ const messageHashWithSymbols = channel + ':' + symbols.join(',');
490
+ if (!(messageHashWithSymbols in client.subscriptions)) {
491
+ client.subscriptions[requestId] = messageHashWithSymbols;
492
+ }
493
+ return await this.watchMultiple(url, messageHashes, message, messageHashes, subscription);
494
+ }
495
+ async watchUtaTickers(symbols = undefined, params = {}) {
496
+ await this.loadMarkets();
497
+ symbols = this.marketSymbols(symbols, undefined, false, true);
498
+ const messageHash = 'uta:ticker';
499
+ const messageHashes = [];
500
+ for (let i = 0; i < symbols.length; i++) {
501
+ const symbol = this.safeString(symbols, i);
502
+ const market = this.market(symbol);
503
+ const subMessageHash = messageHash + ':' + market['symbol'];
504
+ messageHashes.push(subMessageHash);
505
+ }
506
+ const tickers = await this.subscribePublicMultipleUta(messageHashes, 'ticker', symbols, params);
507
+ if (this.newUpdates) {
508
+ return tickers;
509
+ }
510
+ return this.filterByArray(this.tickers, 'symbol', symbols);
511
+ }
336
512
  handleTicker(client, message) {
337
513
  //
338
514
  // market/snapshot
@@ -424,7 +600,7 @@ class kucoin extends kucoin$1["default"] {
424
600
  }
425
601
  const data = this.safeDict(message, 'data', {});
426
602
  const rawTicker = this.safeDict(data, 'data', data);
427
- const ticker = this.parseTicker(rawTicker, market);
603
+ const ticker = this.parseSpotOrUtaTicker(rawTicker, market);
428
604
  const symbol = ticker['symbol'];
429
605
  this.tickers[symbol] = ticker;
430
606
  const messageHash = 'ticker:' + symbol;
@@ -468,6 +644,61 @@ class kucoin extends kucoin$1["default"] {
468
644
  const messageHash = 'ticker:' + market['symbol'];
469
645
  client.resolve(ticker, messageHash);
470
646
  }
647
+ handleUtaTicker(client, message) {
648
+ //
649
+ // {
650
+ // "T": "ticker.SPOT",
651
+ // "P": "1774100940787520626",
652
+ // "d": {
653
+ // "A": "0.5972689",
654
+ // "B": "23.3114947",
655
+ // "E": 20310552932,
656
+ // "M": "1774100940780000000",
657
+ // "S": "SELL",
658
+ // "a": "2155.55",
659
+ // "b": "2155.54",
660
+ // "l": "2155.54",
661
+ // "q": "0.0001529",
662
+ // "s": "ETH-USDT"
663
+ // }
664
+ // }
665
+ //
666
+ const data = this.safeDict(message, 'd', {});
667
+ const marketId = this.safeString(data, 's');
668
+ const market = this.safeMarket(marketId);
669
+ const ticker = this.parseWsUtaTicker(data, market);
670
+ this.tickers[market['symbol']] = ticker;
671
+ const messageHash = 'uta:ticker:' + market['symbol'];
672
+ client.resolve(ticker, messageHash);
673
+ }
674
+ parseWsUtaTicker(ticker, market = undefined) {
675
+ const symbol = this.safeString(market, 'symbol');
676
+ market = this.safeMarket(symbol, market);
677
+ const timestamp = this.safeIntegerProduct(ticker, 'M', 0.000001);
678
+ return this.safeTicker({
679
+ 'symbol': symbol,
680
+ 'timestamp': timestamp,
681
+ 'datetime': this.iso8601(timestamp),
682
+ 'high': undefined,
683
+ 'low': undefined,
684
+ 'bid': this.safeString(ticker, 'a'),
685
+ 'bidVolume': this.safeString(ticker, 'A'),
686
+ 'ask': this.safeString(ticker, 'b'),
687
+ 'askVolume': this.safeString(ticker, 'B'),
688
+ 'vwap': undefined,
689
+ 'open': undefined,
690
+ 'close': undefined,
691
+ 'last': this.safeString(ticker, 'l'),
692
+ 'previousClose': undefined,
693
+ 'change': undefined,
694
+ 'percentage': undefined,
695
+ 'average': undefined,
696
+ 'baseVolume': undefined,
697
+ 'quoteVolume': undefined,
698
+ 'markPrice': undefined,
699
+ 'info': ticker,
700
+ }, market);
701
+ }
471
702
  /**
472
703
  * @method
473
704
  * @name kucoin#watchBidsAsks
@@ -603,27 +834,43 @@ class kucoin extends kucoin$1["default"] {
603
834
  * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
604
835
  * @see https://www.kucoin.com/docs-new/3470071w0
605
836
  * @see https://www.kucoin.com/docs-new/3470086w0
837
+ * @see https://www.kucoin.com/docs-new/3470223w0
606
838
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
607
839
  * @param {string} timeframe the length of time each candle represents
608
840
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
609
841
  * @param {int} [limit] the maximum amount of candles to fetch
610
842
  * @param {object} [params] extra parameters specific to the exchange API endpoint
843
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
611
844
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
612
845
  */
613
846
  async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
614
847
  await this.loadMarkets();
615
848
  const market = this.market(symbol);
616
849
  symbol = market['symbol'];
617
- const isFuturesMethod = market['contract'];
618
- const url = await this.negotiate(false, isFuturesMethod);
619
850
  const period = this.safeString(this.timeframes, timeframe, timeframe);
620
- let channelName = '/market/candles:';
621
- if (isFuturesMethod) {
622
- channelName = '/contractMarket/limitCandle:';
851
+ let messageHash = 'candles:' + symbol + ':' + timeframe;
852
+ let uta = false;
853
+ [uta, params] = this.handleOptionAndParams(params, 'watchOHLCV', 'uta', uta);
854
+ let ohlcv = undefined;
855
+ if (uta) {
856
+ const channel = 'kline';
857
+ messageHash = 'uta:' + messageHash;
858
+ const extendedParams = {
859
+ 'interval': period,
860
+ };
861
+ params = this.extend(extendedParams, params);
862
+ ohlcv = await this.subscribePublicUta(messageHash, channel, symbol, this.extend(extendedParams, params));
863
+ }
864
+ else {
865
+ const isFuturesMethod = market['contract'];
866
+ const url = await this.negotiate(false, isFuturesMethod);
867
+ let channelName = '/market/candles:';
868
+ if (isFuturesMethod) {
869
+ channelName = '/contractMarket/limitCandle:';
870
+ }
871
+ const topic = channelName + market['id'] + '_' + period;
872
+ ohlcv = await this.subscribe(url, messageHash, topic, params);
623
873
  }
624
- const topic = channelName + market['id'] + '_' + period;
625
- const messageHash = 'candles:' + symbol + ':' + timeframe;
626
- const ohlcv = await this.subscribe(url, messageHash, topic, params);
627
874
  if (this.newUpdates) {
628
875
  limit = ohlcv.getLimit(symbol, limit);
629
876
  }
@@ -635,38 +882,54 @@ class kucoin extends kucoin$1["default"] {
635
882
  * @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
636
883
  * @see https://www.kucoin.com/docs-new/3470071w0
637
884
  * @see https://www.kucoin.com/docs-new/3470086w0
885
+ * @see https://www.kucoin.com/docs-new/3470223w0
638
886
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
639
887
  * @param {string} timeframe the length of time each candle represents
640
888
  * @param {object} [params] extra parameters specific to the exchange API endpoint
889
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
641
890
  * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
642
891
  */
643
892
  async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
644
893
  await this.loadMarkets();
645
894
  const market = this.market(symbol);
646
895
  symbol = market['symbol'];
647
- const isFuturesMethod = market['contract'];
648
- const url = await this.negotiate(false, isFuturesMethod);
649
- let channelName = '/market/candles:';
650
- if (isFuturesMethod) {
651
- channelName = '/contractMarket/limitCandle:';
652
- }
896
+ let uta = false;
897
+ [uta, params] = this.handleOptionAndParams(params, 'unWatchOHLCV', 'uta', uta);
653
898
  const period = this.safeString(this.timeframes, timeframe, timeframe);
654
- const topic = channelName + market['id'] + '_' + period;
655
- const messageHash = 'unsubscribe:candles:' + symbol + ':' + timeframe;
656
- const subMessageHash = 'candles:' + symbol + ':' + timeframe;
657
899
  const symbolAndTimeframe = [symbol, timeframe];
658
900
  const subscription = {
659
- // we have to add the topic to the messageHashes and subMessageHashes
660
- // because handleSubscriptionStatus needs them to remove the subscription from the client
661
- // without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
662
- 'messageHashes': [messageHash, topic],
663
- 'subMessageHashes': [subMessageHash, topic],
664
- 'topic': 'ohlcv',
665
- 'unsubscribe': true,
666
901
  'symbols': [symbol],
667
902
  'symbolsAndTimeframes': [symbolAndTimeframe],
903
+ 'topic': 'ohlcv',
904
+ 'unsubscribe': true,
668
905
  };
669
- return await this.unSubscribe(url, messageHash, topic, messageHash, params, subscription);
906
+ let subMessageHash = 'candles:' + symbol + ':' + timeframe;
907
+ if (uta) {
908
+ subMessageHash = 'uta:' + subMessageHash;
909
+ subscription['subMessageHashes'] = [subMessageHash];
910
+ const utaMessageHash = 'unsubscribe:' + subMessageHash;
911
+ subscription['messageHashes'] = [utaMessageHash];
912
+ const extendedParams = {
913
+ 'interval': period,
914
+ };
915
+ return await this.subscribePublicUta(utaMessageHash, 'kline', symbol, this.extend(extendedParams, params), subscription);
916
+ }
917
+ else {
918
+ const isFuturesMethod = market['contract'];
919
+ const url = await this.negotiate(false, isFuturesMethod);
920
+ let channelName = '/market/candles:';
921
+ if (isFuturesMethod) {
922
+ channelName = '/contractMarket/limitCandle:';
923
+ }
924
+ const messageHash = 'unsubscribe:' + subMessageHash;
925
+ const topic = channelName + market['id'] + '_' + period;
926
+ // we have to add the topic to the messageHashes and subMessageHashes
927
+ // because handleSubscriptionStatus needs them to remove the subscription from the client
928
+ // without them subscription would never be removed and re-subscribe would fail because of duplicate subscriptionHash
929
+ subscription['messageHashes'] = [messageHash, topic];
930
+ subscription['subMessageHashes'] = [subMessageHash, topic];
931
+ return await this.unSubscribe(url, messageHash, topic, messageHash, params, subscription);
932
+ }
670
933
  }
671
934
  handleOHLCV(client, message) {
672
935
  //
@@ -740,19 +1003,82 @@ class kucoin extends kucoin$1["default"] {
740
1003
  stored.append(parsed);
741
1004
  client.resolve(stored, messageHash);
742
1005
  }
1006
+ handleUtaOHLCV(client, message) {
1007
+ //
1008
+ // {
1009
+ // "T": "kline.SPOT",
1010
+ // "P": "1774621652314890314",
1011
+ // "d": {
1012
+ // "a": "195333.419819132",
1013
+ // "s": "ETH-USDT",
1014
+ // "C": 1774621680,
1015
+ // "c": "1973.4",
1016
+ // "S": false,
1017
+ // "v": "98.941095",
1018
+ // "h": "1974.97",
1019
+ // "i": "1min",
1020
+ // "l": "1973.4",
1021
+ // "O": 1774621620,
1022
+ // "o": "1974.34"
1023
+ // }
1024
+ // }
1025
+ //
1026
+ const data = this.safeDict(message, 'd', {});
1027
+ const marketId = this.safeString(data, 's');
1028
+ const market = this.safeMarket(marketId);
1029
+ const symbol = market['symbol'];
1030
+ const interval = this.safeString(data, 'i');
1031
+ const timeframe = this.findTimeframe(interval);
1032
+ const messageHash = 'uta:candles:' + symbol + ':' + timeframe;
1033
+ this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
1034
+ let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
1035
+ if (stored === undefined) {
1036
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
1037
+ stored = new Cache.ArrayCacheByTimestamp(limit);
1038
+ this.ohlcvs[symbol][timeframe] = stored;
1039
+ }
1040
+ const parsed = [
1041
+ this.safeIntegerProduct(data, 'O', 1000),
1042
+ this.safeNumber(data, 'o'),
1043
+ this.safeNumber(data, 'h'),
1044
+ this.safeNumber(data, 'l'),
1045
+ this.safeNumber(data, 'c'),
1046
+ this.safeNumber(data, 'v'),
1047
+ ];
1048
+ stored.append(parsed);
1049
+ client.resolve(stored, messageHash);
1050
+ }
743
1051
  /**
744
1052
  * @method
745
1053
  * @name kucoin#watchTrades
746
1054
  * @description get the list of most recent trades for a particular symbol
747
1055
  * @see https://www.kucoin.com/docs-new/3470072w0
748
1056
  * @see https://www.kucoin.com/docs-new/3470084w0
1057
+ * @see https://www.kucoin.com/docs-new/3470224w0
749
1058
  * @param {string} symbol unified symbol of the market to fetch trades for
750
1059
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
751
1060
  * @param {int} [limit] the maximum amount of trades to fetch
752
1061
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1062
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
753
1063
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
754
1064
  */
755
1065
  async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1066
+ let uta = false;
1067
+ [uta, params] = this.handleOptionAndParams(params, 'watchTrades', 'uta', uta);
1068
+ if (uta) {
1069
+ await this.loadMarkets();
1070
+ const market = this.market(symbol);
1071
+ symbol = market['symbol'];
1072
+ const messageHash = 'uta:trades:' + symbol;
1073
+ const channel = 'trade';
1074
+ const trades = await this.subscribePublicUta(messageHash, channel, symbol, params);
1075
+ if (this.newUpdates) {
1076
+ const first = this.safeValue(trades, 0);
1077
+ const tradeSymbol = this.safeString(first, 'symbol');
1078
+ limit = trades.getLimit(tradeSymbol, limit);
1079
+ }
1080
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
1081
+ }
756
1082
  return await this.watchTradesForSymbols([symbol], since, limit, params);
757
1083
  }
758
1084
  /**
@@ -848,11 +1174,31 @@ class kucoin extends kucoin$1["default"] {
848
1174
  * @description unWatches trades stream
849
1175
  * @see https://www.kucoin.com/docs-new/3470072w0
850
1176
  * @see https://www.kucoin.com/docs-new/3470084w0
1177
+ * @see https://www.kucoin.com/docs-new/3470224w0
851
1178
  * @param {string} symbol unified symbol of the market to fetch trades for
852
1179
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1180
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
853
1181
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=public-trades}
854
1182
  */
855
1183
  async unWatchTrades(symbol, params = {}) {
1184
+ let uta = false;
1185
+ [uta, params] = this.handleOptionAndParams(params, 'watchTrades', 'uta', uta);
1186
+ if (uta) {
1187
+ await this.loadMarkets();
1188
+ const market = this.market(symbol);
1189
+ symbol = market['symbol'];
1190
+ const subMessageHash = 'uta:trades:' + symbol;
1191
+ const messageHash = 'unsubscribe:' + subMessageHash;
1192
+ const channel = 'trade';
1193
+ const subscription = {
1194
+ 'messageHashes': [messageHash],
1195
+ 'subMessageHashes': [subMessageHash],
1196
+ 'topic': 'trades',
1197
+ 'unsubscribe': true,
1198
+ 'symbols': [symbol],
1199
+ };
1200
+ return await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
1201
+ }
856
1202
  return await this.unWatchTradesForSymbols([symbol], params);
857
1203
  }
858
1204
  handleTrade(client, message) {
@@ -890,17 +1236,106 @@ class kucoin extends kucoin$1["default"] {
890
1236
  cache.append(trade);
891
1237
  client.resolve(cache, messageHash);
892
1238
  }
1239
+ handleUtaTrade(client, message) {
1240
+ //
1241
+ // {
1242
+ // "T": "trade.SPOT",
1243
+ // "P": "1774618231151398133",
1244
+ // "d": {
1245
+ // "E": "20745928670070784",
1246
+ // "M": "1774618231141000000",
1247
+ // "S": "buy",
1248
+ // "p": "1995.49",
1249
+ // "q": "0.3142324",
1250
+ // "s": "ETH-USDT",
1251
+ // "ti": "20745928670070784"
1252
+ // }
1253
+ // }
1254
+ //
1255
+ const data = this.safeDict(message, 'd', {});
1256
+ const marketId = this.safeString(data, 'symbol');
1257
+ const market = this.safeMarket(marketId);
1258
+ const trade = this.parseWsUtaTrade(data, market);
1259
+ const symbol = trade['symbol'];
1260
+ const messageHash = 'uta:trades:' + symbol;
1261
+ if (!(symbol in this.trades)) {
1262
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
1263
+ const stored = new Cache.ArrayCache(limit);
1264
+ this.trades[symbol] = stored;
1265
+ }
1266
+ const cache = this.trades[symbol];
1267
+ cache.append(trade);
1268
+ client.resolve(cache, messageHash);
1269
+ }
1270
+ parseWsUtaTrade(trade, market = undefined) {
1271
+ // trades
1272
+ // {
1273
+ // "E": "20745928670070784",
1274
+ // "M": "1774618231141000000",
1275
+ // "S": "buy",
1276
+ // "p": "1995.49",
1277
+ // "q": "0.3142324",
1278
+ // "s": "ETH-USDT",
1279
+ // "ti": "20745928670070784"
1280
+ // }
1281
+ //
1282
+ // myTrades
1283
+ // {
1284
+ // "E": "1774977429843000000",
1285
+ // "S": "SELL",
1286
+ // "p": "0.09211",
1287
+ // "q": "10",
1288
+ // "s": "DOGE-USDT",
1289
+ // "lR": "TAKER",
1290
+ // "oT": "MARKET",
1291
+ // "oi": "428507829452754944",
1292
+ // "ti": 20801647764195330
1293
+ // }
1294
+ //
1295
+ const marketId = this.safeString(trade, 's');
1296
+ market = this.safeMarket(marketId, market);
1297
+ const timestamp = this.safeIntegerProduct2(trade, 'M', 'E', 0.000001);
1298
+ let fee = undefined;
1299
+ const feeCost = this.safeString(trade, 'f');
1300
+ if (feeCost !== undefined) {
1301
+ const feeCurrencyId = this.safeString(trade, 'fC');
1302
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
1303
+ fee = {
1304
+ 'cost': feeCost,
1305
+ 'currency': feeCurrencyCode,
1306
+ };
1307
+ }
1308
+ return this.safeTrade({
1309
+ 'info': trade,
1310
+ 'id': this.safeString(trade, 'ti'),
1311
+ 'order': this.safeString(trade, 'oi'),
1312
+ 'timestamp': timestamp,
1313
+ 'datetime': this.iso8601(timestamp),
1314
+ 'symbol': market['symbol'],
1315
+ 'type': this.safeStringLower(trade, 'oT'),
1316
+ 'side': this.safeStringLower(trade, 'S'),
1317
+ 'takerOrMaker': this.safeStringLower(trade, 'lR'),
1318
+ 'price': this.safeString(trade, 'p'),
1319
+ 'amount': this.safeString(trade, 'q'),
1320
+ 'cost': undefined,
1321
+ 'fee': fee,
1322
+ }, market);
1323
+ }
893
1324
  /**
894
1325
  * @method
895
1326
  * @name kucoin#watchOrderBook
896
- * @see https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
897
- * @see https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-market-data
898
- * @see https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-5-best-ask-bid-orders
899
- * @see https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-50-best-ask-bid-orders
1327
+ * @see https://www.kucoin.com/docs-new/3470069w0 // spot level 5
1328
+ * @see https://www.kucoin.com/docs-new/3470070w0 // spot level 50
1329
+ * @see https://www.kucoin.com/docs-new/3470068w0 // spot incremental
1330
+ * @see https://www.kucoin.com/docs-new/3470083w0 // futures level 5
1331
+ * @see https://www.kucoin.com/docs-new/3470097w0 // futures level 50
1332
+ * @see https://www.kucoin.com/docs-new/3470082w0 // futures incremental
1333
+ * @see https://www.kucoin.com/docs-new/3470221w0 // uta
900
1334
  * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
901
1335
  * @param {string} symbol unified symbol of the market to fetch the order book for
902
1336
  * @param {int} [limit] the maximum amount of order book entries to return
903
1337
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1338
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
904
1339
  * @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
905
1340
  * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
906
1341
  */
@@ -920,6 +1355,30 @@ class kucoin extends kucoin$1["default"] {
920
1355
  // If the size=0, update the sequence and remove the price of which the
921
1356
  // size is 0 out of level 2. Fr other cases, please update the price.
922
1357
  //
1358
+ let uta = false;
1359
+ [uta, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'uta', uta);
1360
+ if (uta) {
1361
+ await this.loadMarkets();
1362
+ const market = this.market(symbol);
1363
+ symbol = market['symbol'];
1364
+ let depth = 'increment'; // '1', '5', '50' or 'increment'
1365
+ [depth, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'utaDepth', depth);
1366
+ const messageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
1367
+ const channel = 'obu';
1368
+ let subscription = {};
1369
+ if ((depth === 'increment')) { // other streams return the entire orderbook, so we don't need to fetch the snapshot through REST
1370
+ subscription = {
1371
+ 'method': this.handleOrderBookSubscription,
1372
+ 'symbols': [symbol],
1373
+ 'limit': limit,
1374
+ };
1375
+ }
1376
+ params = this.extend(params, {
1377
+ 'depth': depth,
1378
+ });
1379
+ const orderbook = await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
1380
+ return orderbook.limit();
1381
+ }
923
1382
  return await this.watchOrderBookForSymbols([symbol], limit, params);
924
1383
  }
925
1384
  /**
@@ -932,10 +1391,34 @@ class kucoin extends kucoin$1["default"] {
932
1391
  * @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
933
1392
  * @param {string} symbol unified symbol of the market to fetch the order book for
934
1393
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1394
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), default is false
935
1395
  * @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
936
1396
  * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/?id=order-book-structure} indexed by market symbols
937
1397
  */
938
1398
  async unWatchOrderBook(symbol, params = {}) {
1399
+ let uta = false;
1400
+ [uta, params] = this.handleOptionAndParams(params, 'unWatchOrderBook', 'uta', uta);
1401
+ if (uta) {
1402
+ await this.loadMarkets();
1403
+ const market = this.market(symbol);
1404
+ symbol = market['symbol'];
1405
+ let depth = 'increment'; // '1', '5', '50' or 'increment'
1406
+ [depth, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'utaDepth', depth);
1407
+ params = this.extend(params, {
1408
+ 'depth': depth,
1409
+ });
1410
+ const subMessageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
1411
+ const messageHash = 'unsubscribe:' + subMessageHash;
1412
+ const channel = 'obu';
1413
+ const subscription = {
1414
+ 'messageHashes': [messageHash],
1415
+ 'subMessageHashes': [subMessageHash],
1416
+ 'topic': 'orderbook',
1417
+ 'unsubscribe': true,
1418
+ 'symbols': [symbol],
1419
+ };
1420
+ return await this.subscribePublicUta(messageHash, channel, symbol, params, subscription);
1421
+ }
939
1422
  return await this.unWatchOrderBookForSymbols([symbol], params);
940
1423
  }
941
1424
  /**
@@ -947,6 +1430,7 @@ class kucoin extends kucoin$1["default"] {
947
1430
  * @see https://www.kucoin.com/docs-new/3470083w0 // futures level 5
948
1431
  * @see https://www.kucoin.com/docs-new/3470097w0 // futures level 50
949
1432
  * @see https://www.kucoin.com/docs-new/3470082w0 // futures incremental
1433
+ * @see https://www.kucoin.com/docs-new/3470221w0 // uta
950
1434
  * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
951
1435
  * @param {string[]} symbols unified array of symbols
952
1436
  * @param {int} [limit] the maximum amount of order book entries to return
@@ -1150,6 +1634,66 @@ class kucoin extends kucoin$1["default"] {
1150
1634
  this.handleDelta(this.orderbooks[symbol], data);
1151
1635
  client.resolve(this.orderbooks[symbol], messageHash);
1152
1636
  }
1637
+ handleUtaOrderBook(client, message) {
1638
+ //
1639
+ // snapshot
1640
+ // {
1641
+ // "T": "obu.SPOT",
1642
+ // "dp": "50",
1643
+ // "t": "snapshot",
1644
+ // "P": "1774624848680504909",
1645
+ // "d": {
1646
+ // "C": 20452522782,
1647
+ // "M": "1774624848673000000",
1648
+ // "O": 20452522782,
1649
+ // "a": [ [ "66532.5", "0.46243848" ] ],
1650
+ // "b": [ [ "66532.4", "0.09489" ] ],
1651
+ // "s": "ETH-USDT"
1652
+ // }
1653
+ // }
1654
+ //
1655
+ const type = this.safeString(message, 't');
1656
+ const data = this.safeDict(message, 'd', {});
1657
+ const marketId = this.safeString(data, 's');
1658
+ const market = this.safeMarket(marketId);
1659
+ const symbol = market['symbol'];
1660
+ const timestamp = this.safeIntegerProduct(data, 'M', 0.000001);
1661
+ if (!(symbol in this.orderbooks)) {
1662
+ this.orderbooks[symbol] = this.orderBook();
1663
+ }
1664
+ const orderbook = this.orderbooks[symbol];
1665
+ const depth = this.safeString(message, 'dp');
1666
+ const messageHash = 'uta:orderbook:' + symbol + ':depth:' + depth;
1667
+ if (type === 'snapshot') {
1668
+ const parsed = this.parseOrderBook(data, symbol, timestamp, 'b', 'a', 0, 1);
1669
+ parsed['nonce'] = this.safeInteger(data, 'O');
1670
+ orderbook.reset(parsed);
1671
+ this.orderbooks[symbol] = orderbook;
1672
+ }
1673
+ else {
1674
+ const nonce = this.safeInteger(orderbook, 'nonce');
1675
+ const deltaEnd = this.safeInteger(data, 'C');
1676
+ if (nonce === undefined) {
1677
+ const cacheLength = orderbook.cache.length;
1678
+ const subscription = this.safeValue(client.subscriptions, messageHash, {});
1679
+ const limit = this.safeInteger(subscription, 'limit');
1680
+ const snapshotDelay = this.handleOption('watchOrderBook', 'snapshotDelay', 5);
1681
+ const utaParams = {
1682
+ 'uta': true,
1683
+ };
1684
+ if (cacheLength === snapshotDelay) {
1685
+ this.spawn(this.loadOrderBook, client, messageHash, symbol, limit, utaParams);
1686
+ }
1687
+ orderbook.cache.push(data);
1688
+ return;
1689
+ }
1690
+ else if (nonce >= deltaEnd) {
1691
+ return;
1692
+ }
1693
+ }
1694
+ this.handleDelta(this.orderbooks[symbol], data);
1695
+ client.resolve(this.orderbooks[symbol], messageHash);
1696
+ }
1153
1697
  getCacheIndex(orderbook, cache) {
1154
1698
  const firstDelta = this.safeValue(cache, 0);
1155
1699
  const nonce = this.safeInteger(orderbook, 'nonce');
@@ -1168,11 +1712,15 @@ class kucoin extends kucoin$1["default"] {
1168
1712
  return cache.length;
1169
1713
  }
1170
1714
  handleDelta(orderbook, delta) {
1171
- const timestamp = this.safeInteger2(delta, 'time', 'timestamp');
1172
- orderbook['nonce'] = this.safeInteger2(delta, 'sequenceEnd', 'sequence', timestamp);
1715
+ let timestamp = this.safeIntegerProduct(delta, 'M', 0.000001);
1716
+ if (timestamp === undefined) {
1717
+ timestamp = this.safeInteger2(delta, 'time', 'timestamp');
1718
+ }
1719
+ orderbook['nonce'] = this.safeIntegerN(delta, ['sequenceEnd', 'sequence', 'C'], timestamp);
1173
1720
  orderbook['timestamp'] = timestamp;
1174
1721
  orderbook['datetime'] = this.iso8601(timestamp);
1175
1722
  const change = this.safeString(delta, 'change');
1723
+ const changes = this.safeDict(delta, 'changes', delta);
1176
1724
  const storedBids = orderbook['bids'];
1177
1725
  const storedAsks = orderbook['asks'];
1178
1726
  if (change !== undefined) {
@@ -1190,13 +1738,18 @@ class kucoin extends kucoin$1["default"] {
1190
1738
  storedAsks.storeArray(value);
1191
1739
  }
1192
1740
  }
1193
- else {
1194
- const changes = this.safeDict(delta, 'changes', delta);
1741
+ else if (changes !== undefined) {
1195
1742
  const bids = this.safeList(changes, 'bids', []);
1196
1743
  const asks = this.safeList(changes, 'asks', []);
1197
1744
  this.handleBidAsks(storedBids, bids);
1198
1745
  this.handleBidAsks(storedAsks, asks);
1199
1746
  }
1747
+ else {
1748
+ const bids = this.safeList2(delta, 'bids', 'b', []);
1749
+ const asks = this.safeList2(delta, 'asks', 'a', []);
1750
+ this.handleBidAsks(storedBids, bids);
1751
+ this.handleBidAsks(storedAsks, asks);
1752
+ }
1200
1753
  }
1201
1754
  handleBidAsks(bookSide, bidAsks) {
1202
1755
  for (let i = 0; i < bidAsks.length; i++) {
@@ -1224,11 +1777,18 @@ class kucoin extends kucoin$1["default"] {
1224
1777
  }
1225
1778
  handleSubscriptionStatus(client, message) {
1226
1779
  //
1780
+ // classic
1227
1781
  // {
1228
1782
  // "id": "1578090438322",
1229
1783
  // "type": "ack"
1230
1784
  // }
1231
1785
  //
1786
+ // uta
1787
+ // {
1788
+ // "id": "1",
1789
+ // "result": true
1790
+ // }
1791
+ //
1232
1792
  const id = this.safeString(message, 'id');
1233
1793
  if (!(id in client.subscriptions)) {
1234
1794
  return;
@@ -1263,6 +1823,17 @@ class kucoin extends kucoin$1["default"] {
1263
1823
  // "type": "welcome",
1264
1824
  // }
1265
1825
  //
1826
+ // uta
1827
+ // {
1828
+ // "sessionId": "ddfb0cbd-f7a7-40c2-9129-445bbb830c54",
1829
+ // "message": "welcome",
1830
+ // "pingInterval": 18000
1831
+ // }
1832
+ //
1833
+ const pingInterval = this.safeInteger(message, 'pingInterval');
1834
+ if (pingInterval !== undefined) {
1835
+ client.keepAlive = pingInterval;
1836
+ }
1266
1837
  return message;
1267
1838
  }
1268
1839
  /**
@@ -1273,18 +1844,20 @@ class kucoin extends kucoin$1["default"] {
1273
1844
  * @see https://www.kucoin.com/docs-new/3470139w0 // spot trigger orders
1274
1845
  * @see https://www.kucoin.com/docs-new/3470090w0 // contract regular orders
1275
1846
  * @see https://www.kucoin.com/docs-new/3470091w0 // contract trigger orders
1847
+ * @see https://www.kucoin.com/docs-new/3470228w0 // uta orders
1276
1848
  * @param {string} symbol unified market symbol of the market orders were made in
1277
1849
  * @param {int} [since] the earliest time in ms to fetch orders for
1278
1850
  * @param {int} [limit] the maximum number of order structures to retrieve
1279
1851
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1852
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta)
1280
1853
  * @param {boolean} [params.trigger] trigger orders are watched if true
1281
1854
  * @param {string} [params.type] 'spot' or 'swap' (default is 'spot' if symbol is not provided)
1282
1855
  * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/?id=order-structure}
1283
1856
  */
1284
1857
  async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1285
1858
  await this.loadMarkets();
1286
- const trigger = this.safeBool2(params, 'stop', 'trigger');
1287
- params = this.omit(params, ['stop', 'trigger']);
1859
+ let uta = await this.isUTAEnabled();
1860
+ [uta, params] = this.handleOptionAndParams(params, 'watchOrders', 'uta', uta);
1288
1861
  let market = undefined;
1289
1862
  let messageHash = 'orders';
1290
1863
  if (symbol !== undefined) {
@@ -1292,22 +1865,38 @@ class kucoin extends kucoin$1["default"] {
1292
1865
  symbol = market['symbol'];
1293
1866
  messageHash = messageHash + ':' + symbol;
1294
1867
  }
1295
- let marketType = undefined;
1296
- [marketType, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
1297
- const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
1298
- const url = await this.negotiate(true, isFuturesMethod);
1299
- let topic = trigger ? '/spotMarket/advancedOrders' : '/spotMarket/tradeOrders';
1300
- if (isFuturesMethod) {
1301
- topic = trigger ? '/contractMarket/advancedOrders' : '/contractMarket/tradeOrders';
1868
+ let orders = undefined;
1869
+ if (uta) {
1870
+ params = this.extend(params, {
1871
+ 'tradeType': 'UNIFIED',
1872
+ });
1873
+ messageHash = 'uta:' + messageHash;
1874
+ let channel = 'order';
1875
+ if (symbol === undefined) {
1876
+ channel += 'All';
1877
+ }
1878
+ orders = await this.subscribePrivateUta([messageHash], messageHash, channel, symbol, params);
1302
1879
  }
1303
- if (symbol === undefined) {
1304
- const suffix = this.getOrdersMessageHashSuffix(topic);
1305
- messageHash += suffix;
1880
+ else {
1881
+ const trigger = this.safeBool2(params, 'stop', 'trigger');
1882
+ params = this.omit(params, ['stop', 'trigger']);
1883
+ let marketType = undefined;
1884
+ [marketType, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
1885
+ const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
1886
+ const url = await this.negotiate(true, isFuturesMethod);
1887
+ let topic = trigger ? '/spotMarket/advancedOrders' : '/spotMarket/tradeOrders';
1888
+ if (isFuturesMethod) {
1889
+ topic = trigger ? '/contractMarket/advancedOrders' : '/contractMarket/tradeOrders';
1890
+ }
1891
+ if (symbol === undefined) {
1892
+ const suffix = this.getOrdersMessageHashSuffix(topic);
1893
+ messageHash += suffix;
1894
+ }
1895
+ const request = {
1896
+ 'privateChannel': true,
1897
+ };
1898
+ orders = await this.subscribe(url, messageHash, topic, this.extend(request, params));
1306
1899
  }
1307
- const request = {
1308
- 'privateChannel': true,
1309
- };
1310
- const orders = await this.subscribe(url, messageHash, topic, this.extend(request, params));
1311
1900
  if (this.newUpdates) {
1312
1901
  limit = orders.getLimit(symbol, limit);
1313
1902
  }
@@ -1441,6 +2030,90 @@ class kucoin extends kucoin$1["default"] {
1441
2030
  'trades': undefined,
1442
2031
  }, market);
1443
2032
  }
2033
+ parseWsUtaOrder(order, market = undefined) {
2034
+ //
2035
+ // {
2036
+ // "tT": "FUTURES",
2037
+ // "oi": "427737326394129559",
2038
+ // "ci": "",
2039
+ // "os": 5,
2040
+ // "eT": "CANCEL",
2041
+ // "s": "DOGEUSDTM",
2042
+ // "S": "SELL",
2043
+ // "oT": "MARKET",
2044
+ // "lR": "",
2045
+ // "oS": "USER",
2046
+ // "p": "",
2047
+ // "ti": "",
2048
+ // "q": "1",
2049
+ // "qU": "UNIT",
2050
+ // "fS": "0",
2051
+ // "lS": "0",
2052
+ // "ls": "0",
2053
+ // "aP": "0",
2054
+ // "f": "0",
2055
+ // "fC": "USDT",
2056
+ // "t": "0",
2057
+ // "cR": "USER",
2058
+ // "cS": "1",
2059
+ // "rS": "0",
2060
+ // "tD": "DOWN",
2061
+ // "tP": "0.01",
2062
+ // "tPT": "MP",
2063
+ // "pP": "",
2064
+ // "pPT": "",
2065
+ // "lP": "",
2066
+ // "lPT": "",
2067
+ // "toi": "427737326102335488",
2068
+ // "stp": "",
2069
+ // "rO": true,
2070
+ // "tIF": "GTC",
2071
+ // "pO": false,
2072
+ // "O": "1774793727626043888",
2073
+ // "U": 1774794309608959200
2074
+ // }
2075
+ //
2076
+ const timestamp = this.safeIntegerProduct(order, 'O', 0.000001);
2077
+ const rawStatus = this.safeString(order, 'os');
2078
+ const marketId = this.safeString(order, 's');
2079
+ const rawTimeInForce = this.safeString(order, 'tIF');
2080
+ const remainSize = this.safeString(order, 'rS');
2081
+ const canceledSize = this.safeString(order, 'cS');
2082
+ const remaining = Precise["default"].stringAdd(remainSize, canceledSize);
2083
+ market = this.safeMarket(marketId, market);
2084
+ const fee = {
2085
+ 'cost': this.safeString(order, 'f'),
2086
+ 'currency': this.safeCurrencyCode(this.safeString(order, 'fC')),
2087
+ };
2088
+ // todo check amount for other qU values
2089
+ return this.safeOrder({
2090
+ 'info': order,
2091
+ 'id': this.safeString(order, 'oi'),
2092
+ 'clientOrderId': this.safeString(order, 'ci'),
2093
+ 'datetime': this.iso8601(timestamp),
2094
+ 'timestamp': timestamp,
2095
+ 'lastTradeTimestamp': undefined,
2096
+ 'lastUpdateTimestamp': this.safeIntegerProduct(order, 'U', 0.000001),
2097
+ 'status': this.parseOrderStatus(rawStatus),
2098
+ 'symbol': market['symbol'],
2099
+ 'type': this.safeStringLower(order, 'oT'),
2100
+ 'timeInForce': this.parseOrderTimeInForce(rawTimeInForce),
2101
+ 'side': this.safeStringLower(order, 'S'),
2102
+ 'price': this.safeString(order, 'p'),
2103
+ 'average': this.safeString(order, 'aP'),
2104
+ 'amount': this.safeString(order, 'q'),
2105
+ 'filled': this.safeString(order, 'fS'),
2106
+ 'remaining': remaining,
2107
+ 'triggerPrice': this.safeString(order, 'tP'),
2108
+ 'takeProfitPrice': this.safeString(order, 'pP'),
2109
+ 'stopLossPrice': this.safeString(order, 'lP'),
2110
+ 'cost': this.safeString(order, 'c'),
2111
+ 'trades': undefined,
2112
+ 'fee': fee,
2113
+ 'reduceOnly': this.safeBool(order, 'rO'),
2114
+ 'postOnly': this.safeBool(order, 'pO'),
2115
+ }, market);
2116
+ }
1444
2117
  handleOrder(client, message) {
1445
2118
  //
1446
2119
  // Trigger Orders
@@ -1495,17 +2168,80 @@ class kucoin extends kucoin$1["default"] {
1495
2168
  const symbolSpecificMessageHash = messageHash + ':' + symbol;
1496
2169
  client.resolve(cachedOrders, symbolSpecificMessageHash);
1497
2170
  }
2171
+ handleUtaOrder(client, message) {
2172
+ //
2173
+ // {
2174
+ // "T": "orderAll.UNIFIED",
2175
+ // "P": "1774794309609274499",
2176
+ // "d": {
2177
+ // "tT": "FUTURES",
2178
+ // "oi": "427737326394129559",
2179
+ // "ci": "",
2180
+ // "os": 5,
2181
+ // "eT": "CANCEL",
2182
+ // "s": "DOGEUSDTM",
2183
+ // "S": "SELL",
2184
+ // "oT": "MARKET",
2185
+ // "lR": "",
2186
+ // "oS": "USER",
2187
+ // "p": "",
2188
+ // "ti": "",
2189
+ // "q": "1",
2190
+ // "qU": "UNIT",
2191
+ // "fS": "0",
2192
+ // "lS": "0",
2193
+ // "ls": "0",
2194
+ // "aP": "0",
2195
+ // "f": "0",
2196
+ // "fC": "USDT",
2197
+ // "t": "0",
2198
+ // "cR": "USER",
2199
+ // "cS": "1",
2200
+ // "rS": "0",
2201
+ // "tD": "DOWN",
2202
+ // "tP": "0.01",
2203
+ // "tPT": "MP",
2204
+ // "pP": "",
2205
+ // "pPT": "",
2206
+ // "lP": "",
2207
+ // "lPT": "",
2208
+ // "toi": "427737326102335488",
2209
+ // "stp": "",
2210
+ // "rO": true,
2211
+ // "tIF": "GTC",
2212
+ // "pO": false,
2213
+ // "O": "1774793727626043888",
2214
+ // "U": 1774794309608959200
2215
+ // }
2216
+ // }
2217
+ //
2218
+ const data = this.safeDict(message, 'd', {});
2219
+ const parsed = this.parseWsUtaOrder(data);
2220
+ const symbol = this.safeString(parsed, 'symbol');
2221
+ if (this.orders === undefined) {
2222
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
2223
+ this.orders = new Cache.ArrayCacheBySymbolById(limit);
2224
+ }
2225
+ const cachedOrders = this.orders;
2226
+ cachedOrders.append(parsed);
2227
+ const messageHash = 'uta:orders';
2228
+ const symbolSpecificMessageHash = messageHash + ':' + symbol;
2229
+ client.resolve(cachedOrders, symbolSpecificMessageHash);
2230
+ client.resolve(cachedOrders, messageHash);
2231
+ }
1498
2232
  /**
1499
2233
  * @method
1500
2234
  * @name kucoin#watchMyTrades
1501
2235
  * @description watches information on multiple trades made by the user on spot
1502
2236
  * @see https://www.kucoin.com/docs-new/3470074w0
1503
2237
  * @see https://www.kucoin.com/docs-new/3470090w0
2238
+ * @see https://www.kucoin.com/docs-new/3470264w0
1504
2239
  * @param {string} symbol unified market symbol of the market trades were made in
1505
2240
  * @param {int} [since] the earliest time in ms to fetch trades for
1506
2241
  * @param {int} [limit] the maximum number of trade structures to retrieve
1507
2242
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1508
- * @param {string} [params.method] '/spotMarket/tradeOrders' or '/spot/tradeFills' or '/contractMarket/tradeOrders', default is '/spotMarket/tradeOrders'
2243
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta)
2244
+ * @param {string} [params.method] *classic (non-uta) account only* '/spotMarket/tradeOrders' or '/spot/tradeFills' or '/contractMarket/tradeOrders', default is '/spotMarket/tradeOrders'
1509
2245
  * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/?id=trade-structure}
1510
2246
  */
1511
2247
  async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
@@ -1520,18 +2256,31 @@ class kucoin extends kucoin$1["default"] {
1520
2256
  let marketType = undefined;
1521
2257
  [marketType, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
1522
2258
  const isFuturesMethod = ((marketType !== 'spot') && (marketType !== 'margin'));
1523
- const url = await this.negotiate(true, isFuturesMethod);
1524
- let topic = isFuturesMethod ? '/contractMarket/tradeOrders' : '/spotMarket/tradeOrders';
1525
- const optionName = isFuturesMethod ? 'contractMethod' : 'spotMethod';
1526
- [topic, params] = this.handleOptionAndParams2(params, 'watchMyTrades', optionName, 'method', topic);
1527
- const request = {
1528
- 'privateChannel': true,
1529
- };
1530
- if (symbol === undefined) {
1531
- const suffix = this.getMyTradesMessageHashSuffix(topic);
1532
- messageHash += suffix;
2259
+ let uta = await this.isUTAEnabled();
2260
+ [uta, params] = this.handleOptionAndParams(params, 'watchMyTrades', 'uta', uta);
2261
+ let trades = undefined;
2262
+ if (uta) {
2263
+ params = this.extend(params, {
2264
+ 'tradeType': 'UNIFIED',
2265
+ });
2266
+ messageHash = 'uta:' + messageHash;
2267
+ const channel = 'execution.lite';
2268
+ trades = await this.subscribePrivateUta([messageHash], channel, channel, undefined, params);
2269
+ }
2270
+ else {
2271
+ const url = await this.negotiate(true, isFuturesMethod);
2272
+ let topic = isFuturesMethod ? '/contractMarket/tradeOrders' : '/spotMarket/tradeOrders';
2273
+ const optionName = isFuturesMethod ? 'contractMethod' : 'spotMethod';
2274
+ [topic, params] = this.handleOptionAndParams2(params, 'watchMyTrades', optionName, 'method', topic);
2275
+ const request = {
2276
+ 'privateChannel': true,
2277
+ };
2278
+ if (symbol === undefined) {
2279
+ const suffix = this.getMyTradesMessageHashSuffix(topic);
2280
+ messageHash += suffix;
2281
+ }
2282
+ trades = await this.subscribe(url, messageHash, topic, this.extend(request, params));
1533
2283
  }
1534
- const trades = await this.subscribe(url, messageHash, topic, this.extend(request, params));
1535
2284
  if (this.newUpdates) {
1536
2285
  limit = trades.getLimit(symbol, limit);
1537
2286
  }
@@ -1589,6 +2338,40 @@ class kucoin extends kucoin$1["default"] {
1589
2338
  const symbolSpecificMessageHash = messageHash + ':' + parsed['symbol'];
1590
2339
  client.resolve(this.myTrades, symbolSpecificMessageHash);
1591
2340
  }
2341
+ handleUtaMyTrade(client, message) {
2342
+ //
2343
+ // {
2344
+ // "T": "execution.lite.UNIFIED",
2345
+ // "P": "1774977429844510434",
2346
+ // "d": {
2347
+ // "E": "1774977429843000000",
2348
+ // "S": "SELL",
2349
+ // "p": "0.09211",
2350
+ // "q": "10",
2351
+ // "s": "DOGE-USDT",
2352
+ // "lR": "TAKER",
2353
+ // "oT": "MARKET",
2354
+ // "oi": "428507829452754944",
2355
+ // "ti": 20801647764195330
2356
+ // }
2357
+ // }
2358
+ //
2359
+ const data = this.safeDict(message, 'd', {});
2360
+ const marketId = this.safeString(data, 's');
2361
+ const market = this.safeMarket(marketId);
2362
+ const trade = this.parseWsUtaTrade(data, market);
2363
+ const symbol = trade['symbol'];
2364
+ if (this.myTrades === undefined) {
2365
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
2366
+ this.myTrades = new Cache.ArrayCacheBySymbolById(limit);
2367
+ }
2368
+ const cache = this.myTrades;
2369
+ cache.append(trade);
2370
+ const messageHash = 'uta:myTrades';
2371
+ const symbolMessageHash = messageHash + ':' + symbol;
2372
+ client.resolve(this.myTrades, messageHash);
2373
+ client.resolve(cache, symbolMessageHash);
2374
+ }
1592
2375
  parseWsTrade(trade, market = undefined) {
1593
2376
  //
1594
2377
  // /spotMarket/tradeOrders
@@ -1674,19 +2457,35 @@ class kucoin extends kucoin$1["default"] {
1674
2457
  * @description watch balance and get the amount of funds available for trading or funds locked in orders
1675
2458
  * @see https://www.kucoin.com/docs-new/3470075w0 // spot balance
1676
2459
  * @see https://www.kucoin.com/docs-new/3470092w0 // contract balance
2460
+ * @see https://www.kucoin.com/docs-new/3470231w0 // uta balance
1677
2461
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1678
- * @param {string} [params.type] 'spot' or 'swap' (default is 'spot')
2462
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta)
2463
+ * @param {string} [params.type] *classic (non-uta) account only* 'spot' or 'swap' (default is 'spot')
1679
2464
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/?id=balance-structure}
1680
2465
  */
1681
2466
  async watchBalance(params = {}) {
1682
2467
  await this.loadMarkets();
1683
- const defaultType = this.safeString(this.options, 'defaultType', 'spot');
1684
- const type = this.safeString(params, 'type', defaultType);
2468
+ let uta = await this.isUTAEnabled();
2469
+ [uta, params] = this.handleOptionAndParams(params, 'watchBalance', 'uta', uta);
2470
+ let defaultType = uta ? 'unified' : 'spot';
2471
+ let type = defaultType;
2472
+ if (!uta) {
2473
+ defaultType = this.safeString(this.options, 'defaultType', defaultType);
2474
+ type = this.safeString(params, 'type', defaultType);
2475
+ }
1685
2476
  params = this.omit(params, 'type');
1686
2477
  const accountsByType = this.safeDict(this.options, 'accountsByType', {});
1687
2478
  const uniformType = this.safeString(accountsByType, type, type);
1688
- const isFuturesMethod = (uniformType === 'contract');
1689
- const url = await this.negotiate(true, isFuturesMethod);
2479
+ const isClassicFuturesMethod = (uniformType === 'contract');
2480
+ let subscriptionHash = isClassicFuturesMethod ? '/contractAccount/wallet' : '/account/balance';
2481
+ let url = undefined;
2482
+ if (uta) {
2483
+ url = await this.getUtaUrl();
2484
+ subscriptionHash = uniformType;
2485
+ }
2486
+ else {
2487
+ url = await this.negotiate(true, isClassicFuturesMethod);
2488
+ }
1690
2489
  const client = this.client(url);
1691
2490
  this.setBalanceCache(client, uniformType);
1692
2491
  const options = this.safeDict(this.options, 'watchBalance');
@@ -1696,20 +2495,28 @@ class kucoin extends kucoin$1["default"] {
1696
2495
  await client.future(uniformType + ':fetchBalanceSnapshot');
1697
2496
  }
1698
2497
  const messageHash = uniformType + ':balance';
1699
- const requestId = this.requestId().toString();
1700
- const subscriptionHash = isFuturesMethod ? '/contractAccount/wallet' : '/account/balance';
1701
- const request = {
1702
- 'id': requestId,
1703
- 'type': 'subscribe',
1704
- 'topic': subscriptionHash,
1705
- 'response': true,
1706
- 'privateChannel': true,
1707
- };
1708
- const message = this.extend(request, params);
1709
- if (!(subscriptionHash in client.subscriptions)) {
1710
- client.subscriptions[requestId] = subscriptionHash;
2498
+ if (uta) {
2499
+ const extendedParams = {
2500
+ 'accountType': uniformType,
2501
+ };
2502
+ const channel = 'balance';
2503
+ return await this.subscribePrivateUta([messageHash], subscriptionHash, channel, undefined, this.extend(extendedParams, params));
2504
+ }
2505
+ else {
2506
+ const requestId = this.requestId().toString();
2507
+ const request = {
2508
+ 'id': requestId,
2509
+ 'type': 'subscribe',
2510
+ 'topic': subscriptionHash,
2511
+ 'response': true,
2512
+ 'privateChannel': true,
2513
+ };
2514
+ const message = this.extend(request, params);
2515
+ if (!(subscriptionHash in client.subscriptions)) {
2516
+ client.subscriptions[requestId] = subscriptionHash;
2517
+ }
2518
+ return await this.watch(url, messageHash, message, uniformType);
1711
2519
  }
1712
- return await this.watch(url, messageHash, message, type);
1713
2520
  }
1714
2521
  setBalanceCache(client, type) {
1715
2522
  if ((type in client.subscriptions) && (type in this.balance)) {
@@ -1729,8 +2536,10 @@ class kucoin extends kucoin$1["default"] {
1729
2536
  }
1730
2537
  }
1731
2538
  async loadBalanceSnapshot(client, messageHash, type) {
2539
+ const uta = (type === 'unified');
1732
2540
  const params = {
1733
2541
  'type': type,
2542
+ 'uta': uta,
1734
2543
  };
1735
2544
  const response = await this.fetchBalance(params);
1736
2545
  this.balance[type] = this.extend(response, this.safeValue(this.balance, type, {}));
@@ -1845,6 +2654,42 @@ class kucoin extends kucoin$1["default"] {
1845
2654
  const messageHash = uniformType + ':balance';
1846
2655
  client.resolve(this.balance[uniformType], messageHash);
1847
2656
  }
2657
+ handleUtaBalance(client, message) {
2658
+ //
2659
+ // {
2660
+ // "T": "balance.UNIFIED",
2661
+ // "P": "1774982552507478380",
2662
+ // "d": {
2663
+ // "c": "USDT",
2664
+ // "e": "100.0030439507",
2665
+ // "b": "100.0030439507",
2666
+ // "a": "89.9930439507",
2667
+ // "h": "10.0100000000",
2668
+ // "U": "1774982552505000000",
2669
+ // "l": "0.0000000000"
2670
+ // }
2671
+ // }
2672
+ //
2673
+ const type = 'unified';
2674
+ const data = this.safeDict(message, 'd', {});
2675
+ const currencyId = this.safeString(data, 'c');
2676
+ const code = this.safeCurrencyCode(currencyId);
2677
+ if (!(type in this.balance)) {
2678
+ this.balance[type] = {};
2679
+ }
2680
+ this.balance[type]['info'] = data;
2681
+ const timestamp = this.safeIntegerProduct(data, 'U', 0.000001);
2682
+ this.balance[type]['timestamp'] = timestamp;
2683
+ this.balance[type]['datetime'] = this.iso8601(timestamp);
2684
+ const account = this.account();
2685
+ account['free'] = this.safeString(data, 'a');
2686
+ account['used'] = this.safeString(data, 'h');
2687
+ account['total'] = this.safeString(data, 'b');
2688
+ this.balance[type][code] = account;
2689
+ this.balance[type] = this.safeBalance(this.balance[type]);
2690
+ const messageHash = type + ':balance';
2691
+ client.resolve(this.balance[type], messageHash);
2692
+ }
1848
2693
  /**
1849
2694
  * @method
1850
2695
  * @name kucoin#watchPosition
@@ -1877,6 +2722,55 @@ class kucoin extends kucoin$1["default"] {
1877
2722
  }
1878
2723
  return await this.subscribe(url, messageHash, topic, this.extend(request, params));
1879
2724
  }
2725
+ /**
2726
+ * @method
2727
+ * @name kucoin#watchPositions
2728
+ * @see https://www.kucoin.com/docs-new/3470233w0
2729
+ * @description watch all open positions
2730
+ * @param {string[]} [symbols] list of unified market symbols
2731
+ * @param {int} [since] the earliest time in ms to fetch positions for
2732
+ * @param {int} [limit] the maximum number of positions to retrieve
2733
+ * @param {object} params extra parameters specific to the exchange API endpoint
2734
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta)
2735
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
2736
+ */
2737
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
2738
+ await this.loadMarkets();
2739
+ let uta = await this.isUTAEnabled();
2740
+ [uta, params] = this.handleOptionAndParams(params, 'watchPositions', 'uta', uta);
2741
+ const tradeType = uta ? 'UNIFIED' : 'TRADE';
2742
+ const messageHash = 'positions';
2743
+ const messageHashes = [];
2744
+ symbols = this.marketSymbols(symbols);
2745
+ if (symbols === undefined) {
2746
+ messageHashes.push(messageHash);
2747
+ }
2748
+ else {
2749
+ for (let i = 0; i < symbols.length; i++) {
2750
+ const symbol = symbols[i];
2751
+ messageHashes.push(messageHash + ':' + symbol);
2752
+ }
2753
+ }
2754
+ const url = await this.getUtaUrl();
2755
+ const client = this.client(url);
2756
+ this.setPositionsCache(client, uta);
2757
+ const fetchPositionSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', true);
2758
+ const awaitPositionSnapshot = this.handleOption('watchPositions', 'awaitPositionsSnapshot', true);
2759
+ const cache = this.positions;
2760
+ if (fetchPositionSnapshot && awaitPositionSnapshot && cache === undefined) {
2761
+ const snapshot = await client.future('fetchPositionsSnapshot');
2762
+ return this.filterBySymbolsSinceLimit(snapshot, symbols, since, limit, true);
2763
+ }
2764
+ const channel = 'positionAll';
2765
+ params = this.extend(params, {
2766
+ 'tradeType': tradeType,
2767
+ });
2768
+ const newPositions = await this.subscribePrivateUta(messageHashes, channel, channel, undefined, params);
2769
+ if (this.newUpdates) {
2770
+ return newPositions;
2771
+ }
2772
+ return this.filterBySymbolsSinceLimit(cache, symbols, since, limit, true);
2773
+ }
1880
2774
  getCurrentPosition(symbol) {
1881
2775
  if (this.positions === undefined) {
1882
2776
  return undefined;
@@ -1886,6 +2780,40 @@ class kucoin extends kucoin$1["default"] {
1886
2780
  const values = Object.values(symbolCache);
1887
2781
  return this.safeValue(values, 0);
1888
2782
  }
2783
+ setPositionsCache(client, uta) {
2784
+ if (!(this.isEmpty(this.positions))) {
2785
+ return;
2786
+ }
2787
+ const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', false);
2788
+ if (fetchPositionsSnapshot) {
2789
+ const messageHash = 'fetchPositionsSnapshot';
2790
+ if (!(messageHash in client.futures)) {
2791
+ client.future(messageHash);
2792
+ this.spawn(this.loadPositionsSnapshot, client, messageHash, uta);
2793
+ }
2794
+ }
2795
+ else {
2796
+ this.positions = new Cache.ArrayCacheBySymbolById();
2797
+ }
2798
+ }
2799
+ async loadPositionsSnapshot(client, messageHash, uta) {
2800
+ const positions = await this.fetchPositions(undefined, { 'uta': uta });
2801
+ this.positions = new Cache.ArrayCacheBySymbolById();
2802
+ const cache = this.positions;
2803
+ for (let i = 0; i < positions.length; i++) {
2804
+ const position = positions[i];
2805
+ const contracts = this.safeNumber(position, 'contracts', 0);
2806
+ if (contracts > 0) {
2807
+ cache.append(position);
2808
+ }
2809
+ }
2810
+ // don't remove the future from the .futures cache
2811
+ if (messageHash in client.futures) {
2812
+ const future = client.futures[messageHash];
2813
+ future.resolve(cache);
2814
+ client.resolve(cache, 'positions');
2815
+ }
2816
+ }
1889
2817
  setPositionCache(client, symbol) {
1890
2818
  const fetchPositionSnapshot = this.handleOption('watchPosition', 'fetchPositionSnapshot', false);
1891
2819
  if (fetchPositionSnapshot) {
@@ -2021,6 +2949,114 @@ class kucoin extends kucoin$1["default"] {
2021
2949
  cache.append(position);
2022
2950
  client.resolve(position, messageHash);
2023
2951
  }
2952
+ handleUtaPosition(client, message) {
2953
+ //
2954
+ // {
2955
+ // "T": "positionAll.UNIFIED",
2956
+ // "P": "1774805155993190995",
2957
+ // "d": {
2958
+ // "pi": "30000000000084845",
2959
+ // "s": "DOGEUSDTM",
2960
+ // "mM": "CROSS",
2961
+ // "q": "3",
2962
+ // "eP": "0.09038666666666666666",
2963
+ // "pV": "27.021",
2964
+ // "mP": "0.09007",
2965
+ // "lP": "0.00001",
2966
+ // "bP": "0.00001",
2967
+ // "l": "4.5",
2968
+ // "uPL": "-0.095",
2969
+ // "rPL": "-0.01473705",
2970
+ // "iM": "6.0046666666666666666",
2971
+ // "mmr": "0.007",
2972
+ // "mtM": "0.189147",
2973
+ // "U": "1774805155988000000",
2974
+ // "O": 1774793727585000000
2975
+ // }
2976
+ // }
2977
+ //
2978
+ if (this.positions === undefined) {
2979
+ this.positions = new Cache.ArrayCacheBySymbolById();
2980
+ }
2981
+ const data = this.safeDict(message, 'd', {});
2982
+ const marketId = this.safeString(data, 's');
2983
+ const symbol = this.safeSymbol(marketId);
2984
+ const cache = this.positions;
2985
+ const currentPosition = this.getCurrentPosition(symbol);
2986
+ const newPosition = this.parseWsUtaPosition(data);
2987
+ const keys = Object.keys(newPosition);
2988
+ for (let i = 0; i < keys.length; i++) {
2989
+ const key = keys[i];
2990
+ if (newPosition[key] === undefined) {
2991
+ delete newPosition[key];
2992
+ }
2993
+ }
2994
+ const position = this.extend(currentPosition, newPosition);
2995
+ cache.append(position);
2996
+ const messageHash = 'positions';
2997
+ const symbolMessageHash = messageHash + ':' + symbol;
2998
+ client.resolve(this.positions, messageHash);
2999
+ client.resolve(this.positions, symbolMessageHash);
3000
+ }
3001
+ parseWsUtaPosition(position, market = undefined) {
3002
+ //
3003
+ // {
3004
+ // "pi": "30000000000084845",
3005
+ // "s": "DOGEUSDTM",
3006
+ // "mM": "CROSS",
3007
+ // "q": "3",
3008
+ // "eP": "0.09038666666666666666",
3009
+ // "pV": "27.021",
3010
+ // "mP": "0.09007",
3011
+ // "lP": "0.00001",
3012
+ // "bP": "0.00001",
3013
+ // "l": "4.5",
3014
+ // "uPL": "-0.095",
3015
+ // "rPL": "-0.01473705",
3016
+ // "iM": "6.0046666666666666666",
3017
+ // "mmr": "0.007",
3018
+ // "mtM": "0.189147",
3019
+ // "U": "1774805155988000000",
3020
+ // "O": 1774793727585000000
3021
+ // }
3022
+ //
3023
+ const marketId = this.safeString(position, 's');
3024
+ market = this.safeMarket(marketId, market);
3025
+ const symbol = market['symbol'];
3026
+ const timestamp = this.safeIntegerProduct(position, 'O', 0.000001);
3027
+ const amountString = this.safeString(position, 'q');
3028
+ const size = Precise["default"].stringAbs(amountString);
3029
+ const side = Precise["default"].stringGt(amountString, '0') ? 'long' : 'short';
3030
+ return this.safePosition({
3031
+ 'info': position,
3032
+ 'id': this.safeString(position, 'pi'),
3033
+ 'symbol': symbol,
3034
+ 'timestamp': timestamp,
3035
+ 'datetime': this.iso8601(timestamp),
3036
+ 'lastUpdateTimestamp': this.safeIntegerProduct(position, 'U', 0.000001),
3037
+ 'initialMargin': this.safeNumber(position, 'iM'),
3038
+ 'initialMarginPercentage': undefined,
3039
+ 'maintenanceMargin': this.safeNumber(position, 'mtM'),
3040
+ 'maintenanceMarginPercentage': this.safeNumber(position, 'mmr'),
3041
+ 'entryPrice': this.safeNumber(position, 'eP'),
3042
+ 'notional': this.safeNumber(position, 'pV'),
3043
+ 'leverage': this.safeNumber(position, 'l'),
3044
+ 'unrealizedPnl': this.safeNumber(position, 'uPL'),
3045
+ 'contracts': this.parseNumber(size),
3046
+ 'contractSize': this.safeNumber(market, 'contractSize'),
3047
+ 'realizedPnl': this.safeNumber(position, 'rPL'),
3048
+ 'marginRatio': undefined,
3049
+ 'liquidationPrice': this.safeNumber(position, 'lP'),
3050
+ 'markPrice': this.safeNumber(position, 'mP'),
3051
+ 'lastPrice': undefined,
3052
+ 'collateral': undefined,
3053
+ 'marginMode': this.safeStringLower(position, 'mM'),
3054
+ 'side': side,
3055
+ 'percentage': undefined,
3056
+ 'stopLossPrice': undefined,
3057
+ 'takeProfitPrice': undefined,
3058
+ });
3059
+ }
2024
3060
  handleSubject(client, message) {
2025
3061
  //
2026
3062
  // {
@@ -2043,7 +3079,7 @@ class kucoin extends kucoin$1["default"] {
2043
3079
  this.handleTicker(client, message);
2044
3080
  return;
2045
3081
  }
2046
- const subject = this.safeString(message, 'subject');
3082
+ const subject = this.safeString2(message, 'subject', 'T');
2047
3083
  const methods = {
2048
3084
  'level1': this.handleBidAsk,
2049
3085
  'level2': this.handleOrderBook,
@@ -2068,6 +3104,40 @@ class kucoin extends kucoin$1["default"] {
2068
3104
  'position.change': this.handlePosition,
2069
3105
  'position.settlement': this.handlePosition,
2070
3106
  'position.adjustRiskLimit': this.handlePosition,
3107
+ // uta messages
3108
+ 'ticker.SPOT': this.handleUtaTicker,
3109
+ 'ticker.FUTURES': this.handleUtaTicker,
3110
+ 'trade.SPOT': this.handleUtaTrade,
3111
+ 'trade.FUTURES': this.handleUtaTrade,
3112
+ 'kline.SPOT': this.handleUtaOHLCV,
3113
+ 'kline.FUTURES': this.handleUtaOHLCV,
3114
+ 'obu.SPOT': this.handleUtaOrderBook,
3115
+ 'obu.FUTURES': this.handleUtaOrderBook,
3116
+ 'order.UNIFIED': this.handleUtaOrder,
3117
+ 'order.SPOT': this.handleUtaOrder,
3118
+ 'order.FUTURES': this.handleUtaOrder,
3119
+ 'order.CROSS': this.handleUtaOrder,
3120
+ 'order.ISOLATED': this.handleUtaOrder,
3121
+ 'orderAll.UNIFIED': this.handleUtaOrder,
3122
+ 'orderAll.SPOT': this.handleUtaOrder,
3123
+ 'orderAll.FUTURES': this.handleUtaOrder,
3124
+ 'orderAll.CROSS': this.handleUtaOrder,
3125
+ 'orderAll.ISOLATED': this.handleUtaOrder,
3126
+ 'execution.UNIFIED': this.handleUtaMyTrade,
3127
+ 'execution.SPOT': this.handleUtaMyTrade,
3128
+ 'execution.FUTURES': this.handleUtaMyTrade,
3129
+ 'execution.CROSS': this.handleUtaMyTrade,
3130
+ 'execution.ISOLATED': this.handleUtaMyTrade,
3131
+ 'execution.lite.UNIFIED': this.handleUtaMyTrade,
3132
+ 'execution.lite.SPOT': this.handleUtaMyTrade,
3133
+ 'execution.lite.FUTURES': this.handleUtaMyTrade,
3134
+ 'execution.lite.CROSS': this.handleUtaMyTrade,
3135
+ 'execution.lite.ISOLATED': this.handleUtaMyTrade,
3136
+ 'position.UNIFIED': this.handleUtaPosition,
3137
+ 'position.FUTURES': this.handleUtaPosition,
3138
+ 'positionAll.UNIFIED': this.handleUtaPosition,
3139
+ 'positionAll.FUTURES': this.handleUtaPosition,
3140
+ 'balance.UNIFIED': this.handleUtaBalance,
2071
3141
  };
2072
3142
  const method = this.safeValue(methods, subject);
2073
3143
  if (method !== undefined) {
@@ -2097,7 +3167,14 @@ class kucoin extends kucoin$1["default"] {
2097
3167
  // "data": "type is not supported"
2098
3168
  // }
2099
3169
  //
2100
- const data = this.safeString(message, 'data', '');
3170
+ // uta
3171
+ // {
3172
+ // "id": "1",
3173
+ // "result": false,
3174
+ // "reason": "missing `symbol` for topic: Position"
3175
+ // }
3176
+ //
3177
+ const data = this.safeString2(message, 'data', 'reason', '');
2101
3178
  if (data === 'token is expired') {
2102
3179
  let type = 'public';
2103
3180
  if (client.url.indexOf('connectId=private') >= 0) {
@@ -2109,7 +3186,7 @@ class kucoin extends kucoin$1["default"] {
2109
3186
  return false;
2110
3187
  }
2111
3188
  handleMessage(client, message) {
2112
- const type = this.safeString(message, 'type');
3189
+ const type = this.safeString2(message, 'type', 'message');
2113
3190
  const methods = {
2114
3191
  // 'heartbeat': this.handleHeartbeat,
2115
3192
  'welcome': this.handleSystemStatus,
@@ -2122,6 +3199,16 @@ class kucoin extends kucoin$1["default"] {
2122
3199
  if (method !== undefined) {
2123
3200
  method.call(this, client, message);
2124
3201
  }
3202
+ else if ('T' in message) { // uta messages
3203
+ this.handleSubject(client, message);
3204
+ }
3205
+ else if ('result' in message) { // subscription uta messages
3206
+ const result = this.safeBool(message, 'result', true);
3207
+ if (!result) {
3208
+ this.handleErrorMessage(client, message);
3209
+ }
3210
+ this.handleSubscriptionStatus(client, message);
3211
+ }
2125
3212
  }
2126
3213
  getMessageHash(elementName, symbol = undefined) {
2127
3214
  // method from kucoinfutures