ccxt 4.5.4 → 4.5.6

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 (930) hide show
  1. package/README.md +7 -6
  2. package/dist/ccxt.browser.min.js +15 -15
  3. package/dist/cjs/ccxt.js +11 -6
  4. package/dist/cjs/src/abstract/alpaca.js +1 -1
  5. package/dist/cjs/src/abstract/apex.js +1 -1
  6. package/dist/cjs/src/abstract/ascendex.js +1 -1
  7. package/dist/cjs/src/abstract/backpack.js +11 -0
  8. package/dist/cjs/src/abstract/bigone.js +1 -1
  9. package/dist/cjs/src/abstract/binance.js +1 -1
  10. package/dist/cjs/src/abstract/bingx.js +1 -1
  11. package/dist/cjs/src/abstract/bit2c.js +1 -1
  12. package/dist/cjs/src/abstract/bitbank.js +1 -1
  13. package/dist/cjs/src/abstract/bitbns.js +1 -1
  14. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  15. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  16. package/dist/cjs/src/abstract/bitget.js +1 -1
  17. package/dist/cjs/src/abstract/bithumb.js +1 -1
  18. package/dist/cjs/src/abstract/bitmart.js +1 -1
  19. package/dist/cjs/src/abstract/bitmex.js +1 -1
  20. package/dist/cjs/src/abstract/bitopro.js +1 -1
  21. package/dist/cjs/src/abstract/bitrue.js +1 -1
  22. package/dist/cjs/src/abstract/bitso.js +1 -1
  23. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  24. package/dist/cjs/src/abstract/bitteam.js +1 -1
  25. package/dist/cjs/src/abstract/bittrade.js +1 -1
  26. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  27. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  28. package/dist/cjs/src/abstract/blofin.js +1 -1
  29. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  30. package/dist/cjs/src/abstract/btcbox.js +1 -1
  31. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  32. package/dist/cjs/src/abstract/btcturk.js +1 -1
  33. package/dist/cjs/src/abstract/bybit.js +1 -1
  34. package/dist/cjs/src/abstract/cex.js +1 -1
  35. package/dist/cjs/src/abstract/coinbase.js +1 -1
  36. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  37. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  38. package/dist/cjs/src/abstract/coincatch.js +1 -1
  39. package/dist/cjs/src/abstract/coincheck.js +1 -1
  40. package/dist/cjs/src/abstract/coinex.js +1 -1
  41. package/dist/cjs/src/abstract/coinmate.js +1 -1
  42. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  43. package/dist/cjs/src/abstract/coinone.js +1 -1
  44. package/dist/cjs/src/abstract/coinsph.js +1 -1
  45. package/dist/cjs/src/abstract/coinspot.js +1 -1
  46. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  47. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  48. package/dist/cjs/src/abstract/defx.js +1 -1
  49. package/dist/cjs/src/abstract/delta.js +1 -1
  50. package/dist/cjs/src/abstract/deribit.js +1 -1
  51. package/dist/cjs/src/abstract/derive.js +1 -1
  52. package/dist/cjs/src/abstract/digifinex.js +1 -1
  53. package/dist/cjs/src/abstract/exmo.js +1 -1
  54. package/dist/cjs/src/abstract/foxbit.js +1 -1
  55. package/dist/cjs/src/abstract/gate.js +1 -1
  56. package/dist/cjs/src/abstract/gemini.js +1 -1
  57. package/dist/cjs/src/abstract/hashkey.js +1 -1
  58. package/dist/cjs/src/abstract/hibachi.js +1 -1
  59. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  60. package/dist/cjs/src/abstract/hollaex.js +1 -1
  61. package/dist/cjs/src/abstract/htx.js +1 -1
  62. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  63. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  64. package/dist/cjs/src/abstract/indodax.js +1 -1
  65. package/dist/cjs/src/abstract/kraken.js +1 -1
  66. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  67. package/dist/cjs/src/abstract/kucoin.js +1 -1
  68. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  69. package/dist/cjs/src/abstract/latoken.js +1 -1
  70. package/dist/cjs/src/abstract/lbank.js +1 -1
  71. package/dist/cjs/src/abstract/luno.js +1 -1
  72. package/dist/cjs/src/abstract/mercado.js +1 -1
  73. package/dist/cjs/src/abstract/mexc.js +1 -1
  74. package/dist/cjs/src/abstract/modetrade.js +1 -1
  75. package/dist/cjs/src/abstract/ndax.js +1 -1
  76. package/dist/cjs/src/abstract/novadax.js +1 -1
  77. package/dist/cjs/src/abstract/oceanex.js +1 -1
  78. package/dist/cjs/src/abstract/okcoin.js +1 -1
  79. package/dist/cjs/src/abstract/okx.js +1 -1
  80. package/dist/cjs/src/abstract/onetrading.js +1 -1
  81. package/dist/cjs/src/abstract/oxfun.js +1 -1
  82. package/dist/cjs/src/abstract/p2b.js +1 -1
  83. package/dist/cjs/src/abstract/paradex.js +1 -1
  84. package/dist/cjs/src/abstract/paymium.js +1 -1
  85. package/dist/cjs/src/abstract/phemex.js +1 -1
  86. package/dist/cjs/src/abstract/poloniex.js +1 -1
  87. package/dist/cjs/src/abstract/probit.js +1 -1
  88. package/dist/cjs/src/abstract/timex.js +1 -1
  89. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  90. package/dist/cjs/src/abstract/toobit.js +11 -0
  91. package/dist/cjs/src/abstract/upbit.js +1 -1
  92. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  93. package/dist/cjs/src/abstract/whitebit.js +1 -1
  94. package/dist/cjs/src/abstract/woo.js +1 -1
  95. package/dist/cjs/src/abstract/woofipro.js +1 -1
  96. package/dist/cjs/src/abstract/xt.js +1 -1
  97. package/dist/cjs/src/abstract/yobit.js +1 -1
  98. package/dist/cjs/src/abstract/zaif.js +1 -1
  99. package/dist/cjs/src/abstract/zonda.js +1 -1
  100. package/dist/cjs/src/alpaca.js +1 -1
  101. package/dist/cjs/src/apex.js +1 -1
  102. package/dist/cjs/src/ascendex.js +1 -1
  103. package/dist/cjs/src/backpack.js +2280 -0
  104. package/dist/cjs/src/base/Exchange.js +226 -62
  105. package/dist/cjs/src/base/Precise.js +0 -6
  106. package/dist/cjs/src/base/errors.js +0 -6
  107. package/dist/cjs/src/base/functions/crypto.js +1 -1
  108. package/dist/cjs/src/base/functions/encode.js +1 -1
  109. package/dist/cjs/src/base/functions/misc.js +0 -1
  110. package/dist/cjs/src/base/functions/number.js +0 -6
  111. package/dist/cjs/src/base/functions/platform.js +0 -6
  112. package/dist/cjs/src/base/functions/rsa.js +0 -1
  113. package/dist/cjs/src/base/functions/string.js +0 -6
  114. package/dist/cjs/src/base/functions/throttle.js +1 -1
  115. package/dist/cjs/src/base/functions/time.js +0 -6
  116. package/dist/cjs/src/base/functions/totp.js +0 -1
  117. package/dist/cjs/src/base/functions/type.js +0 -6
  118. package/dist/cjs/src/base/functions.js +1 -1
  119. package/dist/cjs/src/base/ws/Cache.js +0 -6
  120. package/dist/cjs/src/base/ws/Client.js +0 -1
  121. package/dist/cjs/src/base/ws/Future.js +1 -1
  122. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  123. package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
  124. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  125. package/dist/cjs/src/bequant.js +1 -1
  126. package/dist/cjs/src/bigone.js +5 -5
  127. package/dist/cjs/src/binance.js +80 -21
  128. package/dist/cjs/src/binancecoinm.js +1 -1
  129. package/dist/cjs/src/binanceus.js +1 -1
  130. package/dist/cjs/src/binanceusdm.js +1 -1
  131. package/dist/cjs/src/bingx.js +6 -3
  132. package/dist/cjs/src/bit2c.js +1 -1
  133. package/dist/cjs/src/bitbank.js +2 -2
  134. package/dist/cjs/src/bitbns.js +1 -1
  135. package/dist/cjs/src/bitfinex.js +1 -1
  136. package/dist/cjs/src/bitflyer.js +1 -1
  137. package/dist/cjs/src/bitget.js +73 -19
  138. package/dist/cjs/src/bithumb.js +1 -1
  139. package/dist/cjs/src/bitmart.js +1 -1
  140. package/dist/cjs/src/bitmex.js +1 -1
  141. package/dist/cjs/src/bitopro.js +1 -1
  142. package/dist/cjs/src/bitrue.js +1 -1
  143. package/dist/cjs/src/bitso.js +1 -1
  144. package/dist/cjs/src/bitstamp.js +1 -1
  145. package/dist/cjs/src/bitteam.js +1 -1
  146. package/dist/cjs/src/bittrade.js +1 -1
  147. package/dist/cjs/src/blockchaincom.js +1 -1
  148. package/dist/cjs/src/blofin.js +1 -1
  149. package/dist/cjs/src/btcalpha.js +1 -1
  150. package/dist/cjs/src/btcbox.js +1 -1
  151. package/dist/cjs/src/btcmarkets.js +1 -1
  152. package/dist/cjs/src/btcturk.js +1 -1
  153. package/dist/cjs/src/bybit.js +187 -128
  154. package/dist/cjs/src/cex.js +1 -1
  155. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  156. package/dist/cjs/src/coincatch.js +2 -2
  157. package/dist/cjs/src/coincheck.js +1 -1
  158. package/dist/cjs/src/coinex.js +1 -1
  159. package/dist/cjs/src/coinmate.js +1 -1
  160. package/dist/cjs/src/coinmetro.js +12 -1
  161. package/dist/cjs/src/coinone.js +1 -1
  162. package/dist/cjs/src/coinsph.js +4 -2
  163. package/dist/cjs/src/coinspot.js +1 -1
  164. package/dist/cjs/src/cryptocom.js +7 -4
  165. package/dist/cjs/src/cryptomus.js +1 -1
  166. package/dist/cjs/src/defx.js +1 -1
  167. package/dist/cjs/src/delta.js +1 -1
  168. package/dist/cjs/src/deribit.js +1 -1
  169. package/dist/cjs/src/derive.js +1 -1
  170. package/dist/cjs/src/digifinex.js +1 -1
  171. package/dist/cjs/src/exmo.js +1 -1
  172. package/dist/cjs/src/fmfwio.js +1 -1
  173. package/dist/cjs/src/foxbit.js +1 -1
  174. package/dist/cjs/src/gate.js +9 -3
  175. package/dist/cjs/src/gateio.js +1 -1
  176. package/dist/cjs/src/gemini.js +13 -8
  177. package/dist/cjs/src/hashkey.js +1 -1
  178. package/dist/cjs/src/hibachi.js +1 -1
  179. package/dist/cjs/src/hitbtc.js +0 -1
  180. package/dist/cjs/src/hollaex.js +1 -1
  181. package/dist/cjs/src/htx.js +1 -1
  182. package/dist/cjs/src/huobi.js +1 -1
  183. package/dist/cjs/src/hyperliquid.js +4 -1
  184. package/dist/cjs/src/independentreserve.js +1 -1
  185. package/dist/cjs/src/indodax.js +1 -1
  186. package/dist/cjs/src/kraken.js +7 -3
  187. package/dist/cjs/src/krakenfutures.js +2 -2
  188. package/dist/cjs/src/kucoin.js +2 -3
  189. package/dist/cjs/src/kucoinfutures.js +52 -4
  190. package/dist/cjs/src/latoken.js +1 -1
  191. package/dist/cjs/src/lbank.js +1 -1
  192. package/dist/cjs/src/luno.js +5 -2
  193. package/dist/cjs/src/mercado.js +1 -1
  194. package/dist/cjs/src/mexc.js +5 -2
  195. package/dist/cjs/src/modetrade.js +1 -1
  196. package/dist/cjs/src/myokx.js +1 -1
  197. package/dist/cjs/src/ndax.js +1 -1
  198. package/dist/cjs/src/novadax.js +1 -1
  199. package/dist/cjs/src/oceanex.js +1 -1
  200. package/dist/cjs/src/okcoin.js +5 -2
  201. package/dist/cjs/src/okx.js +59 -18
  202. package/dist/cjs/src/okxus.js +1 -1
  203. package/dist/cjs/src/onetrading.js +161 -66
  204. package/dist/cjs/src/oxfun.js +1 -1
  205. package/dist/cjs/src/p2b.js +1 -1
  206. package/dist/cjs/src/paradex.js +1 -1
  207. package/dist/cjs/src/paymium.js +1 -1
  208. package/dist/cjs/src/phemex.js +16 -10
  209. package/dist/cjs/src/poloniex.js +1 -1
  210. package/dist/cjs/src/pro/alpaca.js +1 -1
  211. package/dist/cjs/src/pro/apex.js +2 -1
  212. package/dist/cjs/src/pro/ascendex.js +1 -1
  213. package/dist/cjs/src/pro/backpack.js +1325 -0
  214. package/dist/cjs/src/pro/bequant.js +1 -1
  215. package/dist/cjs/src/pro/binance.js +159 -19
  216. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  217. package/dist/cjs/src/pro/binanceus.js +1 -1
  218. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  219. package/dist/cjs/src/pro/bingx.js +1 -1
  220. package/dist/cjs/src/pro/bitfinex.js +1 -1
  221. package/dist/cjs/src/pro/bitget.js +373 -88
  222. package/dist/cjs/src/pro/bithumb.js +1 -1
  223. package/dist/cjs/src/pro/bitmart.js +1 -1
  224. package/dist/cjs/src/pro/bitmex.js +1 -1
  225. package/dist/cjs/src/pro/bitrue.js +1 -1
  226. package/dist/cjs/src/pro/bitstamp.js +1 -1
  227. package/dist/cjs/src/pro/bitvavo.js +1 -1
  228. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  229. package/dist/cjs/src/pro/blofin.js +1 -1
  230. package/dist/cjs/src/pro/bybit.js +4 -1
  231. package/dist/cjs/src/pro/cex.js +2 -1
  232. package/dist/cjs/src/pro/coinbase.js +227 -1
  233. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  234. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  235. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  236. package/dist/cjs/src/pro/coincatch.js +1 -1
  237. package/dist/cjs/src/pro/coincheck.js +1 -1
  238. package/dist/cjs/src/pro/coinex.js +1 -1
  239. package/dist/cjs/src/pro/coinone.js +1 -1
  240. package/dist/cjs/src/pro/cryptocom.js +1 -1
  241. package/dist/cjs/src/pro/defx.js +1 -1
  242. package/dist/cjs/src/pro/deribit.js +1 -1
  243. package/dist/cjs/src/pro/exmo.js +1 -1
  244. package/dist/cjs/src/pro/gate.js +1 -1
  245. package/dist/cjs/src/pro/gateio.js +1 -1
  246. package/dist/cjs/src/pro/gemini.js +1 -1
  247. package/dist/cjs/src/pro/hashkey.js +1 -1
  248. package/dist/cjs/src/pro/hitbtc.js +1 -1
  249. package/dist/cjs/src/pro/hollaex.js +1 -1
  250. package/dist/cjs/src/pro/htx.js +1 -1
  251. package/dist/cjs/src/pro/huobi.js +1 -1
  252. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  253. package/dist/cjs/src/pro/independentreserve.js +2 -1
  254. package/dist/cjs/src/pro/kraken.js +1 -1
  255. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  256. package/dist/cjs/src/pro/kucoin.js +1 -1
  257. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  258. package/dist/cjs/src/pro/lbank.js +0 -1
  259. package/dist/cjs/src/pro/luno.js +1 -1
  260. package/dist/cjs/src/pro/mexc.js +24 -24
  261. package/dist/cjs/src/pro/myokx.js +1 -1
  262. package/dist/cjs/src/pro/ndax.js +1 -1
  263. package/dist/cjs/src/pro/okcoin.js +1 -1
  264. package/dist/cjs/src/pro/okx.js +47 -11
  265. package/dist/cjs/src/pro/okxus.js +1 -1
  266. package/dist/cjs/src/pro/onetrading.js +1 -1
  267. package/dist/cjs/src/pro/oxfun.js +1 -1
  268. package/dist/cjs/src/pro/p2b.js +1 -1
  269. package/dist/cjs/src/pro/paradex.js +1 -1
  270. package/dist/cjs/src/pro/phemex.js +1 -1
  271. package/dist/cjs/src/pro/poloniex.js +1 -1
  272. package/dist/cjs/src/pro/probit.js +1 -1
  273. package/dist/cjs/src/pro/toobit.js +1163 -0
  274. package/dist/cjs/src/pro/upbit.js +1 -1
  275. package/dist/cjs/src/pro/whitebit.js +1 -1
  276. package/dist/cjs/src/pro/xt.js +1 -1
  277. package/dist/cjs/src/probit.js +1 -1
  278. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +1 -0
  279. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
  280. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  281. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  282. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
  283. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
  284. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
  285. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
  286. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
  287. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
  288. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
  289. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
  290. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
  291. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
  292. package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
  293. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  294. package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
  295. package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
  296. package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
  297. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
  298. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
  299. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
  300. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
  301. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  302. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
  303. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
  304. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
  305. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
  306. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  307. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
  308. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
  309. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  310. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  311. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  312. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  313. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
  314. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  315. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  316. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  317. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  318. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  319. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  320. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  321. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
  322. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  323. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  324. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  325. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
  326. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  327. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  328. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  329. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  330. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  331. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  332. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  333. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  334. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
  335. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
  336. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
  337. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
  338. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
  339. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
  340. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
  341. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
  342. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
  343. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
  344. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  345. package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
  346. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
  347. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
  348. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
  349. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
  350. package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
  351. package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
  352. package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
  353. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  354. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  355. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
  356. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
  357. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
  358. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
  359. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
  360. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  361. package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
  362. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  363. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  364. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
  365. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  366. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  367. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
  368. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
  369. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
  370. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  371. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  372. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  373. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
  374. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
  375. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  376. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  377. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  378. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
  379. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  380. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
  381. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
  382. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  383. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
  384. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
  385. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
  386. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  387. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
  388. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
  389. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
  390. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
  391. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
  392. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
  393. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
  394. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  395. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
  396. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  397. package/dist/cjs/src/timex.js +0 -1
  398. package/dist/cjs/src/tokocrypto.js +1 -1
  399. package/dist/cjs/src/toobit.js +2999 -0
  400. package/dist/cjs/src/upbit.js +1 -1
  401. package/dist/cjs/src/wavesexchange.js +1 -1
  402. package/dist/cjs/src/whitebit.js +1 -1
  403. package/dist/cjs/src/woo.js +1 -1
  404. package/dist/cjs/src/woofipro.js +1 -1
  405. package/dist/cjs/src/xt.js +10 -1
  406. package/dist/cjs/src/yobit.js +10 -1
  407. package/dist/cjs/src/zaif.js +1 -1
  408. package/dist/cjs/src/zonda.js +1 -1
  409. package/js/ccxt.d.ts +14 -8
  410. package/js/ccxt.js +10 -12
  411. package/js/src/abstract/alpaca.js +0 -6
  412. package/js/src/abstract/apex.js +0 -6
  413. package/js/src/abstract/ascendex.js +0 -6
  414. package/js/src/abstract/backpack.d.ts +63 -0
  415. package/js/src/abstract/backpack.js +5 -0
  416. package/js/src/abstract/bequant.js +0 -6
  417. package/js/src/abstract/bigone.js +0 -6
  418. package/js/src/abstract/binance.js +0 -6
  419. package/js/src/abstract/binancecoinm.js +0 -6
  420. package/js/src/abstract/binanceus.js +0 -6
  421. package/js/src/abstract/binanceusdm.js +0 -6
  422. package/js/src/abstract/bingx.js +0 -6
  423. package/js/src/abstract/bit2c.js +0 -6
  424. package/js/src/abstract/bitbank.js +0 -6
  425. package/js/src/abstract/bitbns.js +0 -6
  426. package/js/src/abstract/bitfinex.js +0 -6
  427. package/js/src/abstract/bitflyer.js +0 -6
  428. package/js/src/abstract/bitget.js +0 -6
  429. package/js/src/abstract/bithumb.js +0 -6
  430. package/js/src/abstract/bitmart.js +0 -6
  431. package/js/src/abstract/bitmex.js +0 -6
  432. package/js/src/abstract/bitopro.js +0 -6
  433. package/js/src/abstract/bitrue.js +0 -6
  434. package/js/src/abstract/bitso.js +0 -6
  435. package/js/src/abstract/bitstamp.js +0 -6
  436. package/js/src/abstract/bitteam.js +0 -6
  437. package/js/src/abstract/bittrade.js +0 -6
  438. package/js/src/abstract/bitvavo.js +0 -6
  439. package/js/src/abstract/blockchaincom.js +0 -6
  440. package/js/src/abstract/blofin.js +0 -6
  441. package/js/src/abstract/btcalpha.js +0 -6
  442. package/js/src/abstract/btcbox.js +0 -6
  443. package/js/src/abstract/btcmarkets.js +0 -6
  444. package/js/src/abstract/btcturk.js +0 -6
  445. package/js/src/abstract/bybit.js +0 -6
  446. package/js/src/abstract/cex.js +0 -6
  447. package/js/src/abstract/coinbase.js +0 -6
  448. package/js/src/abstract/coinbaseadvanced.js +0 -6
  449. package/js/src/abstract/coinbaseexchange.js +0 -6
  450. package/js/src/abstract/coinbaseinternational.js +0 -6
  451. package/js/src/abstract/coincatch.js +0 -6
  452. package/js/src/abstract/coincheck.js +0 -6
  453. package/js/src/abstract/coinex.js +0 -6
  454. package/js/src/abstract/coinmate.js +0 -6
  455. package/js/src/abstract/coinmetro.js +0 -6
  456. package/js/src/abstract/coinone.js +0 -6
  457. package/js/src/abstract/coinsph.js +0 -6
  458. package/js/src/abstract/coinspot.js +0 -6
  459. package/js/src/abstract/cryptocom.js +0 -6
  460. package/js/src/abstract/cryptomus.js +0 -6
  461. package/js/src/abstract/defx.js +0 -6
  462. package/js/src/abstract/delta.js +0 -6
  463. package/js/src/abstract/deribit.js +0 -6
  464. package/js/src/abstract/derive.js +0 -6
  465. package/js/src/abstract/digifinex.js +0 -6
  466. package/js/src/abstract/exmo.js +0 -6
  467. package/js/src/abstract/fmfwio.js +0 -6
  468. package/js/src/abstract/foxbit.js +0 -6
  469. package/js/src/abstract/gate.js +0 -6
  470. package/js/src/abstract/gateio.js +0 -6
  471. package/js/src/abstract/gemini.js +0 -6
  472. package/js/src/abstract/hashkey.js +0 -6
  473. package/js/src/abstract/hibachi.js +0 -6
  474. package/js/src/abstract/hitbtc.js +0 -6
  475. package/js/src/abstract/hollaex.js +0 -6
  476. package/js/src/abstract/htx.js +0 -6
  477. package/js/src/abstract/huobi.js +0 -6
  478. package/js/src/abstract/hyperliquid.js +0 -6
  479. package/js/src/abstract/independentreserve.js +0 -6
  480. package/js/src/abstract/indodax.js +0 -6
  481. package/js/src/abstract/kraken.js +0 -6
  482. package/js/src/abstract/krakenfutures.js +0 -6
  483. package/js/src/abstract/kucoin.js +0 -6
  484. package/js/src/abstract/kucoinfutures.d.ts +1 -0
  485. package/js/src/abstract/kucoinfutures.js +0 -6
  486. package/js/src/abstract/latoken.js +0 -6
  487. package/js/src/abstract/lbank.js +0 -6
  488. package/js/src/abstract/luno.js +0 -6
  489. package/js/src/abstract/mercado.js +0 -6
  490. package/js/src/abstract/mexc.js +0 -6
  491. package/js/src/abstract/modetrade.js +0 -6
  492. package/js/src/abstract/myokx.d.ts +1 -0
  493. package/js/src/abstract/myokx.js +0 -6
  494. package/js/src/abstract/ndax.js +0 -6
  495. package/js/src/abstract/novadax.js +0 -6
  496. package/js/src/abstract/oceanex.js +0 -6
  497. package/js/src/abstract/okcoin.js +0 -6
  498. package/js/src/abstract/okx.d.ts +1 -0
  499. package/js/src/abstract/okx.js +0 -6
  500. package/js/src/abstract/okxus.d.ts +1 -0
  501. package/js/src/abstract/okxus.js +0 -6
  502. package/js/src/abstract/onetrading.js +0 -6
  503. package/js/src/abstract/oxfun.js +0 -6
  504. package/js/src/abstract/p2b.js +0 -6
  505. package/js/src/abstract/paradex.js +0 -6
  506. package/js/src/abstract/paymium.js +0 -6
  507. package/js/src/abstract/phemex.d.ts +1 -1
  508. package/js/src/abstract/phemex.js +0 -6
  509. package/js/src/abstract/poloniex.js +0 -6
  510. package/js/src/abstract/probit.js +0 -6
  511. package/js/src/abstract/timex.js +0 -6
  512. package/js/src/abstract/tokocrypto.js +0 -6
  513. package/js/src/abstract/toobit.d.ts +66 -0
  514. package/js/src/abstract/toobit.js +5 -0
  515. package/js/src/abstract/upbit.js +0 -6
  516. package/js/src/abstract/wavesexchange.js +0 -6
  517. package/js/src/abstract/whitebit.js +0 -6
  518. package/js/src/abstract/woo.js +0 -6
  519. package/js/src/abstract/woofipro.js +0 -6
  520. package/js/src/abstract/xt.js +0 -6
  521. package/js/src/abstract/yobit.js +0 -6
  522. package/js/src/abstract/zaif.js +0 -6
  523. package/js/src/abstract/zonda.js +0 -6
  524. package/js/src/alpaca.js +0 -6
  525. package/js/src/apex.js +0 -6
  526. package/js/src/ascendex.js +0 -6
  527. package/js/src/backpack.d.ts +371 -0
  528. package/js/src/backpack.js +2273 -0
  529. package/js/src/base/Exchange.d.ts +48 -40
  530. package/js/src/base/Exchange.js +231 -72
  531. package/js/src/base/Precise.js +0 -6
  532. package/js/src/base/errorHierarchy.js +0 -6
  533. package/js/src/base/errors.js +0 -6
  534. package/js/src/base/functions/crypto.js +0 -6
  535. package/js/src/base/functions/encode.js +0 -6
  536. package/js/src/base/functions/generic.js +0 -6
  537. package/js/src/base/functions/misc.js +0 -6
  538. package/js/src/base/functions/number.js +0 -6
  539. package/js/src/base/functions/platform.js +0 -6
  540. package/js/src/base/functions/rsa.js +0 -6
  541. package/js/src/base/functions/string.js +0 -6
  542. package/js/src/base/functions/throttle.js +0 -6
  543. package/js/src/base/functions/time.js +0 -6
  544. package/js/src/base/functions/totp.js +0 -6
  545. package/js/src/base/functions/type.js +0 -6
  546. package/js/src/base/functions.js +0 -6
  547. package/js/src/base/types.d.ts +1 -3
  548. package/js/src/base/types.js +0 -6
  549. package/js/src/base/ws/Cache.js +0 -6
  550. package/js/src/base/ws/Client.js +0 -6
  551. package/js/src/base/ws/Future.js +0 -6
  552. package/js/src/base/ws/OrderBook.js +0 -6
  553. package/js/src/base/ws/OrderBookSide.js +0 -6
  554. package/js/src/base/ws/WsClient.js +0 -6
  555. package/js/src/base/ws/functions.js +0 -6
  556. package/js/src/bequant.js +0 -6
  557. package/js/src/bigone.js +4 -10
  558. package/js/src/binance.d.ts +10 -1
  559. package/js/src/binance.js +79 -26
  560. package/js/src/binancecoinm.js +0 -6
  561. package/js/src/binanceus.js +0 -6
  562. package/js/src/binanceusdm.js +0 -6
  563. package/js/src/bingx.js +5 -8
  564. package/js/src/bit2c.js +0 -6
  565. package/js/src/bitbank.js +1 -7
  566. package/js/src/bitbns.js +0 -6
  567. package/js/src/bitfinex.js +0 -6
  568. package/js/src/bitflyer.js +0 -6
  569. package/js/src/bitget.d.ts +3 -1
  570. package/js/src/bitget.js +72 -24
  571. package/js/src/bithumb.js +0 -6
  572. package/js/src/bitmart.js +0 -6
  573. package/js/src/bitmex.js +0 -6
  574. package/js/src/bitopro.js +0 -6
  575. package/js/src/bitrue.js +0 -6
  576. package/js/src/bitso.js +0 -6
  577. package/js/src/bitstamp.js +0 -6
  578. package/js/src/bitteam.js +0 -6
  579. package/js/src/bittrade.js +0 -6
  580. package/js/src/bitvavo.js +0 -6
  581. package/js/src/blockchaincom.js +0 -6
  582. package/js/src/blofin.js +0 -6
  583. package/js/src/btcalpha.js +0 -6
  584. package/js/src/btcbox.js +0 -6
  585. package/js/src/btcmarkets.js +0 -6
  586. package/js/src/btcturk.js +0 -6
  587. package/js/src/bybit.d.ts +8 -0
  588. package/js/src/bybit.js +186 -133
  589. package/js/src/cex.js +0 -6
  590. package/js/src/coinbase.d.ts +1 -1
  591. package/js/src/coinbase.js +0 -6
  592. package/js/src/coinbaseadvanced.js +0 -6
  593. package/js/src/coinbaseexchange.js +0 -6
  594. package/js/src/coinbaseinternational.js +0 -6
  595. package/js/src/coincatch.js +1 -7
  596. package/js/src/coincheck.js +0 -6
  597. package/js/src/coinex.js +0 -6
  598. package/js/src/coinmate.js +0 -6
  599. package/js/src/coinmetro.js +11 -6
  600. package/js/src/coinone.js +0 -6
  601. package/js/src/coinsph.js +4 -7
  602. package/js/src/coinspot.js +0 -6
  603. package/js/src/cryptocom.js +6 -9
  604. package/js/src/cryptomus.js +0 -6
  605. package/js/src/defx.js +0 -6
  606. package/js/src/delta.js +0 -6
  607. package/js/src/deribit.js +0 -6
  608. package/js/src/derive.js +0 -6
  609. package/js/src/digifinex.js +0 -6
  610. package/js/src/exmo.js +0 -6
  611. package/js/src/fmfwio.js +0 -6
  612. package/js/src/foxbit.js +0 -6
  613. package/js/src/gate.d.ts +6 -0
  614. package/js/src/gate.js +8 -8
  615. package/js/src/gateio.js +0 -6
  616. package/js/src/gemini.js +12 -13
  617. package/js/src/hashkey.js +0 -6
  618. package/js/src/hibachi.js +0 -6
  619. package/js/src/hitbtc.js +0 -6
  620. package/js/src/hollaex.js +0 -6
  621. package/js/src/htx.js +0 -6
  622. package/js/src/huobi.js +0 -6
  623. package/js/src/hyperliquid.js +3 -6
  624. package/js/src/independentreserve.js +0 -6
  625. package/js/src/indodax.js +0 -6
  626. package/js/src/kraken.d.ts +1 -1
  627. package/js/src/kraken.js +6 -8
  628. package/js/src/krakenfutures.js +1 -7
  629. package/js/src/kucoin.js +1 -8
  630. package/js/src/kucoinfutures.d.ts +14 -1
  631. package/js/src/kucoinfutures.js +51 -9
  632. package/js/src/latoken.js +0 -6
  633. package/js/src/lbank.js +0 -6
  634. package/js/src/luno.js +4 -7
  635. package/js/src/mercado.js +0 -6
  636. package/js/src/mexc.js +4 -7
  637. package/js/src/modetrade.js +0 -6
  638. package/js/src/myokx.js +0 -6
  639. package/js/src/ndax.js +0 -6
  640. package/js/src/novadax.js +0 -6
  641. package/js/src/oceanex.js +0 -6
  642. package/js/src/okcoin.js +4 -7
  643. package/js/src/okx.js +58 -23
  644. package/js/src/okxus.js +0 -6
  645. package/js/src/onetrading.d.ts +1 -0
  646. package/js/src/onetrading.js +160 -71
  647. package/js/src/oxfun.js +0 -6
  648. package/js/src/p2b.js +0 -6
  649. package/js/src/paradex.js +0 -6
  650. package/js/src/paymium.js +0 -6
  651. package/js/src/phemex.d.ts +3 -3
  652. package/js/src/phemex.js +16 -16
  653. package/js/src/poloniex.js +0 -6
  654. package/js/src/pro/alpaca.js +0 -6
  655. package/js/src/pro/apex.js +1 -6
  656. package/js/src/pro/ascendex.js +0 -6
  657. package/js/src/pro/backpack.d.ts +264 -0
  658. package/js/src/pro/backpack.js +1318 -0
  659. package/js/src/pro/bequant.js +0 -6
  660. package/js/src/pro/binance.d.ts +24 -0
  661. package/js/src/pro/binance.js +159 -25
  662. package/js/src/pro/binancecoinm.js +0 -6
  663. package/js/src/pro/binanceus.js +0 -6
  664. package/js/src/pro/binanceusdm.js +0 -6
  665. package/js/src/pro/bingx.js +0 -6
  666. package/js/src/pro/bitfinex.js +0 -6
  667. package/js/src/pro/bitget.d.ts +12 -0
  668. package/js/src/pro/bitget.js +372 -93
  669. package/js/src/pro/bithumb.js +0 -6
  670. package/js/src/pro/bitmart.js +0 -6
  671. package/js/src/pro/bitmex.js +0 -6
  672. package/js/src/pro/bitopro.js +0 -6
  673. package/js/src/pro/bitrue.js +0 -6
  674. package/js/src/pro/bitstamp.js +0 -6
  675. package/js/src/pro/bittrade.js +0 -6
  676. package/js/src/pro/bitvavo.js +0 -6
  677. package/js/src/pro/blockchaincom.js +0 -6
  678. package/js/src/pro/blofin.js +0 -6
  679. package/js/src/pro/bybit.js +3 -6
  680. package/js/src/pro/cex.js +1 -6
  681. package/js/src/pro/coinbase.d.ts +85 -0
  682. package/js/src/pro/coinbase.js +226 -6
  683. package/js/src/pro/coinbaseadvanced.js +0 -6
  684. package/js/src/pro/coinbaseexchange.js +0 -6
  685. package/js/src/pro/coinbaseinternational.js +0 -6
  686. package/js/src/pro/coincatch.js +0 -6
  687. package/js/src/pro/coincheck.js +0 -6
  688. package/js/src/pro/coinex.js +0 -6
  689. package/js/src/pro/coinone.js +0 -6
  690. package/js/src/pro/cryptocom.js +0 -6
  691. package/js/src/pro/defx.js +0 -6
  692. package/js/src/pro/deribit.js +0 -6
  693. package/js/src/pro/derive.js +0 -6
  694. package/js/src/pro/exmo.js +0 -6
  695. package/js/src/pro/gate.js +0 -6
  696. package/js/src/pro/gateio.js +0 -6
  697. package/js/src/pro/gemini.js +0 -6
  698. package/js/src/pro/hashkey.js +0 -6
  699. package/js/src/pro/hitbtc.js +0 -6
  700. package/js/src/pro/hollaex.js +0 -6
  701. package/js/src/pro/htx.js +0 -6
  702. package/js/src/pro/huobi.js +0 -6
  703. package/js/src/pro/hyperliquid.js +0 -6
  704. package/js/src/pro/independentreserve.js +1 -6
  705. package/js/src/pro/kraken.js +0 -6
  706. package/js/src/pro/krakenfutures.js +0 -6
  707. package/js/src/pro/kucoin.js +0 -6
  708. package/js/src/pro/kucoinfutures.js +0 -6
  709. package/js/src/pro/lbank.js +0 -6
  710. package/js/src/pro/luno.js +0 -6
  711. package/js/src/pro/mexc.js +23 -29
  712. package/js/src/pro/modetrade.js +0 -6
  713. package/js/src/pro/myokx.js +0 -6
  714. package/js/src/pro/ndax.js +0 -6
  715. package/js/src/pro/okcoin.js +0 -6
  716. package/js/src/pro/okx.d.ts +7 -1
  717. package/js/src/pro/okx.js +46 -16
  718. package/js/src/pro/okxus.js +0 -6
  719. package/js/src/pro/onetrading.js +0 -6
  720. package/js/src/pro/oxfun.js +0 -6
  721. package/js/src/pro/p2b.js +0 -6
  722. package/js/src/pro/paradex.js +0 -6
  723. package/js/src/pro/phemex.js +0 -6
  724. package/js/src/pro/poloniex.js +0 -6
  725. package/js/src/pro/probit.js +0 -6
  726. package/js/src/pro/toobit.d.ts +174 -0
  727. package/js/src/pro/toobit.js +1162 -0
  728. package/js/src/pro/upbit.js +0 -6
  729. package/js/src/pro/whitebit.js +0 -6
  730. package/js/src/pro/woo.js +0 -6
  731. package/js/src/pro/woofipro.js +0 -6
  732. package/js/src/pro/xt.js +0 -6
  733. package/js/src/probit.js +0 -6
  734. package/js/src/protobuf/mexc/compiled.cjs +0 -6
  735. package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
  736. package/js/src/static_dependencies/ethers/address/address.js +0 -6
  737. package/js/src/static_dependencies/ethers/address/checks.js +0 -6
  738. package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
  739. package/js/src/static_dependencies/ethers/address/index.js +0 -6
  740. package/js/src/static_dependencies/ethers/bytes32.js +0 -6
  741. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  742. package/js/src/static_dependencies/ethers/coders/address.js +0 -6
  743. package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
  744. package/js/src/static_dependencies/ethers/coders/array.js +0 -6
  745. package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
  746. package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
  747. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
  748. package/js/src/static_dependencies/ethers/coders/null.js +0 -6
  749. package/js/src/static_dependencies/ethers/coders/number.js +0 -6
  750. package/js/src/static_dependencies/ethers/coders/string.js +0 -6
  751. package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
  752. package/js/src/static_dependencies/ethers/fragments.js +0 -6
  753. package/js/src/static_dependencies/ethers/hash/index.js +0 -6
  754. package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
  755. package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  756. package/js/src/static_dependencies/ethers/index.js +0 -6
  757. package/js/src/static_dependencies/ethers/interface.js +0 -6
  758. package/js/src/static_dependencies/ethers/typed.js +0 -6
  759. package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
  760. package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
  761. package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
  762. package/js/src/static_dependencies/ethers/utils/data.js +0 -6
  763. package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
  764. package/js/src/static_dependencies/ethers/utils/events.js +0 -6
  765. package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  766. package/js/src/static_dependencies/ethers/utils/index.js +0 -6
  767. package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
  768. package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
  769. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
  770. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
  771. package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
  772. package/js/src/static_dependencies/ethers/utils/units.js +0 -6
  773. package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
  774. package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
  775. package/js/src/static_dependencies/fflake/browser.js +0 -6
  776. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
  777. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
  778. package/js/src/static_dependencies/jsencrypt/index.js +0 -6
  779. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
  780. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  781. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  782. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  783. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
  784. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
  785. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
  786. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  787. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
  788. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
  789. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  790. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
  791. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  792. package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
  793. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
  794. package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
  795. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
  796. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
  797. package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
  798. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
  799. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
  800. package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  801. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
  802. package/js/src/static_dependencies/noble-curves/bn.js +0 -6
  803. package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
  804. package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
  805. package/js/src/static_dependencies/noble-curves/index.js +0 -6
  806. package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
  807. package/js/src/static_dependencies/noble-curves/p256.js +0 -6
  808. package/js/src/static_dependencies/noble-curves/p384.js +0 -6
  809. package/js/src/static_dependencies/noble-curves/p521.js +0 -6
  810. package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
  811. package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
  812. package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
  813. package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
  814. package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
  815. package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
  816. package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
  817. package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
  818. package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
  819. package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
  820. package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
  821. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
  822. package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
  823. package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
  824. package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
  825. package/js/src/static_dependencies/noble-hashes/index.js +0 -6
  826. package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
  827. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
  828. package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
  829. package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
  830. package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
  831. package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
  832. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
  833. package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
  834. package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
  835. package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
  836. package/js/src/static_dependencies/node-fetch/body.js +0 -6
  837. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
  838. package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
  839. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
  840. package/js/src/static_dependencies/node-fetch/headers.js +0 -6
  841. package/js/src/static_dependencies/node-fetch/index.js +0 -6
  842. package/js/src/static_dependencies/node-fetch/request.js +0 -6
  843. package/js/src/static_dependencies/node-fetch/response.js +0 -6
  844. package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  845. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  846. package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
  847. package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
  848. package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
  849. package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
  850. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
  851. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
  852. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  853. package/js/src/static_dependencies/qs/formats.cjs +0 -6
  854. package/js/src/static_dependencies/qs/index.cjs +0 -6
  855. package/js/src/static_dependencies/qs/parse.cjs +0 -6
  856. package/js/src/static_dependencies/qs/stringify.cjs +0 -6
  857. package/js/src/static_dependencies/qs/utils.cjs +0 -6
  858. package/js/src/static_dependencies/scure-base/index.js +0 -6
  859. package/js/src/static_dependencies/scure-starknet/index.js +0 -6
  860. package/js/src/static_dependencies/starknet/constants.js +0 -6
  861. package/js/src/static_dependencies/starknet/index.js +0 -6
  862. package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
  863. package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
  864. package/js/src/static_dependencies/starknet/types/index.js +0 -6
  865. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  866. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  867. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
  868. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
  869. package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
  870. package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
  871. package/js/src/static_dependencies/starknet/utils/address.js +0 -6
  872. package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
  873. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
  874. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
  875. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
  876. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
  877. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
  878. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  879. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  880. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  881. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
  882. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
  883. package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
  884. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
  885. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
  886. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
  887. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  888. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
  889. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
  890. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
  891. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
  892. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
  893. package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
  894. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
  895. package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
  896. package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
  897. package/js/src/static_dependencies/starknet/utils/num.js +0 -6
  898. package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
  899. package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
  900. package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
  901. package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
  902. package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
  903. package/js/src/static_dependencies/starknet/utils/url.js +0 -6
  904. package/js/src/static_dependencies/watchable/src/index.js +0 -6
  905. package/js/src/static_dependencies/watchable/src/types.js +0 -6
  906. package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
  907. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  908. package/js/src/timex.js +0 -6
  909. package/js/src/tokocrypto.js +0 -6
  910. package/js/src/toobit.d.ts +456 -0
  911. package/js/src/toobit.js +2992 -0
  912. package/js/src/upbit.js +0 -6
  913. package/js/src/wavesexchange.js +0 -6
  914. package/js/src/whitebit.js +0 -6
  915. package/js/src/woo.js +0 -6
  916. package/js/src/woofipro.js +0 -6
  917. package/js/src/xt.d.ts +1 -0
  918. package/js/src/xt.js +9 -6
  919. package/js/src/yobit.js +9 -6
  920. package/js/src/zaif.js +0 -6
  921. package/js/src/zonda.js +0 -6
  922. package/package.json +1 -1
  923. package/dist/373.ccxt.browser.js +0 -7630
  924. package/dist/373.ccxt.browser.min.js +0 -1
  925. package/js/src/abstract/tradeogre.d.ts +0 -21
  926. package/js/src/abstract/tradeogre.js +0 -11
  927. package/js/src/pro/tradeogre.d.ts +0 -49
  928. package/js/src/pro/tradeogre.js +0 -284
  929. package/js/src/tradeogre.d.ts +0 -149
  930. package/js/src/tradeogre.js +0 -878
@@ -0,0 +1,1162 @@
1
+ // ---------------------------------------------------------------------------
2
+ import toobitRest from '../toobit.js';
3
+ import { AuthenticationError, ExchangeError, NotSupported } from '../base/errors.js';
4
+ import { ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp } from '../base/ws/Cache.js';
5
+ // ---------------------------------------------------------------------------
6
+ export default class toobit extends toobitRest {
7
+ describe() {
8
+ return this.deepExtend(super.describe(), {
9
+ 'has': {
10
+ 'ws': true,
11
+ 'watchBalance': true,
12
+ 'watchMyTrades': true,
13
+ 'watchOHLCV': true,
14
+ 'watchOHLCVForSymbols': true,
15
+ 'watchOrderBook': true,
16
+ 'watchOrderBookForSymbols': true,
17
+ 'watchOrders': true,
18
+ 'watchTicker': true,
19
+ 'watchTickers': true,
20
+ 'watchTrades': true,
21
+ 'watchTradesForSymbols': true,
22
+ // 'watchPosition': false,
23
+ },
24
+ 'urls': {
25
+ 'api': {
26
+ 'ws': {
27
+ 'common': 'wss://stream.toobit.com',
28
+ },
29
+ },
30
+ },
31
+ 'options': {
32
+ 'ws': {
33
+ 'timeframes': {
34
+ '1m': '1m',
35
+ '3m': '3m',
36
+ '5m': '5m',
37
+ '15m': '15m',
38
+ '30m': '30m',
39
+ '1h': '1h',
40
+ '2h': '2h',
41
+ '4h': '4h',
42
+ '6h': '6h',
43
+ '8h': '8h',
44
+ '12h': '12h',
45
+ '1d': '1d',
46
+ '1w': '1w',
47
+ '1M': '1M',
48
+ },
49
+ 'watchOrderBook': {
50
+ 'channel': 'depth', // depth, diffDepth
51
+ },
52
+ 'listenKeyRefreshRate': 1200000, // 20 mins
53
+ },
54
+ },
55
+ 'streaming': {
56
+ 'keepAlive': (60 - 1) * 5 * 1000,
57
+ 'ping': this.ping,
58
+ },
59
+ 'exceptions': {
60
+ 'ws': {
61
+ 'exact': {},
62
+ },
63
+ },
64
+ });
65
+ }
66
+ ping(client) {
67
+ return {
68
+ 'ping': this.milliseconds(),
69
+ };
70
+ }
71
+ handleMessage(client, message) {
72
+ //
73
+ // public
74
+ //
75
+ // {
76
+ // topic: "trade",
77
+ // symbol: "DOGEUSDT",
78
+ // symbolName: "DOGEUSDT",
79
+ // params: {
80
+ // realtimeInterval: "24h",
81
+ // binary: "false",
82
+ // },
83
+ // data: [
84
+ // {
85
+ // v: "4864732022868004630",
86
+ // t: 1757243788405,
87
+ // p: "0.21804",
88
+ // q: "80",
89
+ // m: true,
90
+ // },
91
+ // ],
92
+ // f: true, // initial first snapshot or not
93
+ // sendTime: 1757244002117,
94
+ // shared: false,
95
+ // }
96
+ //
97
+ // private
98
+ //
99
+ // [
100
+ // {
101
+ // e: 'outboundContractAccountInfo',
102
+ // E: '1758228398234',
103
+ // T: true,
104
+ // W: true,
105
+ // D: true,
106
+ // B: [ [Object] ]
107
+ // }
108
+ // ]
109
+ //
110
+ const topic = this.safeString(message, 'topic');
111
+ if (this.handleErrorMessage(client, message)) {
112
+ return;
113
+ }
114
+ //
115
+ // handle ping-pong: { ping: 1758540450000 }
116
+ //
117
+ const pongTimestamp = this.safeInteger(message, 'pong');
118
+ if (pongTimestamp !== undefined) {
119
+ this.handleIncomingPong(client, pongTimestamp);
120
+ return;
121
+ }
122
+ const methods = {
123
+ 'trade': this.handleTrades,
124
+ 'kline': this.handleOHLCV,
125
+ 'realtimes': this.handleTickers,
126
+ 'depth': this.handleOrderBookPartialSnapshot,
127
+ 'diffDepth': this.handleOrderBook,
128
+ 'outboundAccountInfo': this.handleBalance,
129
+ 'outboundContractAccountInfo': this.handleBalance,
130
+ 'executionReport': this.handleOrder,
131
+ 'contractExecutionReport': this.handleOrder,
132
+ 'ticketInfo': this.handleMyTrade,
133
+ 'outboundContractPositionInfo': this.handlePositions,
134
+ };
135
+ const method = this.safeValue(methods, topic);
136
+ if (method !== undefined) {
137
+ method.call(this, client, message);
138
+ }
139
+ else {
140
+ // check private streams
141
+ for (let i = 0; i < message.length; i++) {
142
+ const item = message[i];
143
+ const event = this.safeString(item, 'e');
144
+ const method2 = this.safeValue(methods, event);
145
+ if (method2 !== undefined) {
146
+ method2.call(this, client, item);
147
+ }
148
+ }
149
+ }
150
+ }
151
+ handleIncomingPong(client, pongTimestamp) {
152
+ client.lastPong = pongTimestamp;
153
+ }
154
+ /**
155
+ * @method
156
+ * @name toobit#watchTrades
157
+ * @description watches information on multiple trades made in a market
158
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#trade-streams
159
+ * @param {string} symbol unified market symbol of the market trades were made in
160
+ * @param {int} [since] the earliest time in ms to fetch trades for
161
+ * @param {int} [limit] the maximum number of trade structures to retrieve
162
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
163
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
164
+ */
165
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
166
+ return await this.watchTradesForSymbols([symbol], since, limit, params);
167
+ }
168
+ /**
169
+ * @method
170
+ * @name toobit#watchTradesForSymbols
171
+ * @description get the list of most recent trades for a list of symbols
172
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#trade-streams
173
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
174
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
175
+ * @param {int} [limit] the maximum amount of trades to fetch
176
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
177
+ * @param {string} [params.name] the name of the method to call, 'trade' or 'aggTrade', default is 'trade'
178
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
179
+ */
180
+ async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
181
+ await this.loadMarkets();
182
+ symbols = this.marketSymbols(symbols, undefined, false);
183
+ const messageHashes = [];
184
+ const subParams = [];
185
+ for (let i = 0; i < symbols.length; i++) {
186
+ const symbol = symbols[i];
187
+ const market = this.market(symbol);
188
+ messageHashes.push('trade::' + symbol);
189
+ const rawHash = market['id'];
190
+ subParams.push(rawHash);
191
+ }
192
+ const marketIds = this.marketIds(symbols);
193
+ const url = this.urls['api']['ws']['common'] + '/quote/ws/v1';
194
+ const request = {
195
+ 'symbol': marketIds.join(','),
196
+ 'topic': 'trade',
197
+ 'event': 'sub',
198
+ };
199
+ const trades = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes);
200
+ if (this.newUpdates) {
201
+ const first = this.safeValue(trades, 0);
202
+ const tradeSymbol = this.safeString(first, 'symbol');
203
+ limit = trades.getLimit(tradeSymbol, limit);
204
+ }
205
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
206
+ }
207
+ handleTrades(client, message) {
208
+ //
209
+ // {
210
+ // symbol: "DOGEUSDT",
211
+ // symbolName: "DOGEUSDT",
212
+ // topic: "trade",
213
+ // params: {
214
+ // realtimeInterval: "24h",
215
+ // binary: "false",
216
+ // },
217
+ // data: [
218
+ // {
219
+ // v: "4864732022868004630",
220
+ // t: 1757243788405,
221
+ // p: "0.21804",
222
+ // q: "80",
223
+ // m: true,
224
+ // },
225
+ // ],
226
+ // f: true, // initial first snapshot or not
227
+ // sendTime: 1757244002117,
228
+ // shared: false,
229
+ // }
230
+ //
231
+ const marketId = this.safeString(message, 'symbol');
232
+ const symbol = this.safeSymbol(marketId);
233
+ if (!(symbol in this.trades)) {
234
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
235
+ this.trades[symbol] = new ArrayCache(limit);
236
+ }
237
+ const stored = this.trades[symbol];
238
+ const data = this.safeList(message, 'data', []);
239
+ const parsed = this.parseWsTrades(data);
240
+ for (let i = 0; i < parsed.length; i++) {
241
+ const trade = parsed[i];
242
+ trade['symbol'] = symbol;
243
+ stored.append(trade);
244
+ }
245
+ const messageHash = 'trade::' + symbol;
246
+ client.resolve(stored, messageHash);
247
+ }
248
+ parseWsTrade(trade, market = undefined) {
249
+ return this.parseTrade(trade, market);
250
+ }
251
+ /**
252
+ * @method
253
+ * @name toobit#watchOHLCV
254
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
255
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#kline-candlestick-streams
256
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
257
+ * @param {string} timeframe the length of time each candle represents
258
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
259
+ * @param {int} [limit] the maximum amount of candles to fetch
260
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
261
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
262
+ */
263
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
264
+ params['callerMethodName'] = 'watchOHLCV';
265
+ const result = await this.watchOHLCVForSymbols([[symbol, timeframe]], since, limit, params);
266
+ return result[symbol][timeframe];
267
+ }
268
+ /**
269
+ * @method
270
+ * @name toobit#watchOHLCVForSymbols
271
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
272
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#kline-candlestick-streams
273
+ * @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
274
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
275
+ * @param {int} [limit] the maximum amount of candles to fetch
276
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
277
+ * @returns {object} A list of candles ordered as timestamp, open, high, low, close, volume
278
+ */
279
+ async watchOHLCVForSymbols(symbolsAndTimeframes, since = undefined, limit = undefined, params = {}) {
280
+ await this.loadMarkets();
281
+ const url = this.urls['api']['ws']['common'] + '/quote/ws/v1';
282
+ const messageHashes = [];
283
+ const timeframes = this.safeDict(this.options['ws'], 'timeframes', {});
284
+ const marketIds = [];
285
+ let selectedTimeframe = undefined;
286
+ for (let i = 0; i < symbolsAndTimeframes.length; i++) {
287
+ const data = symbolsAndTimeframes[i];
288
+ const symbolStr = this.safeString(data, 0);
289
+ const market = this.market(symbolStr);
290
+ const marketId = market['id'];
291
+ const unfiedTimeframe = this.safeString(data, 1, '1m');
292
+ const rawTimeframe = this.safeString(timeframes, unfiedTimeframe, unfiedTimeframe);
293
+ if (selectedTimeframe !== undefined && selectedTimeframe !== rawTimeframe) {
294
+ throw new NotSupported(this.id + ' watchOHLCVForSymbols() only supports a single timeframe for all symbols');
295
+ }
296
+ else {
297
+ selectedTimeframe = rawTimeframe;
298
+ }
299
+ marketIds.push(marketId);
300
+ messageHashes.push('ohlcv::' + symbolStr + '::' + unfiedTimeframe);
301
+ }
302
+ const request = {
303
+ 'symbol': marketIds.join(','),
304
+ 'topic': 'kline_' + selectedTimeframe,
305
+ 'event': 'sub',
306
+ };
307
+ const [symbol, timeframe, stored] = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes);
308
+ if (this.newUpdates) {
309
+ limit = stored.getLimit(symbol, limit);
310
+ }
311
+ const filtered = this.filterBySinceLimit(stored, since, limit, 0, true);
312
+ return this.createOHLCVObject(symbol, timeframe, filtered);
313
+ }
314
+ handleOHLCV(client, message) {
315
+ //
316
+ // {
317
+ // symbol: 'DOGEUSDT',
318
+ // symbolName: 'DOGEUSDT',
319
+ // klineType: '1m',
320
+ // topic: 'kline',
321
+ // params: { realtimeInterval: '24h', klineType: '1m', binary: 'false' },
322
+ // data: [
323
+ // {
324
+ // t: 1757251200000,
325
+ // s: 'DOGEUSDT',
326
+ // sn: 'DOGEUSDT',
327
+ // c: '0.21889',
328
+ // h: '0.21898',
329
+ // l: '0.21889',
330
+ // o: '0.21897',
331
+ // v: '5247',
332
+ // st: 0
333
+ // }
334
+ // ],
335
+ // f: true,
336
+ // sendTime: 1757251217643,
337
+ // shared: false
338
+ // }
339
+ //
340
+ const marketId = this.safeString(message, 'symbol');
341
+ const market = this.market(marketId);
342
+ const symbol = market['symbol'];
343
+ const params = this.safeDict(message, 'params', {});
344
+ const timeframeId = this.safeString(params, 'klineType');
345
+ const timeframe = this.findTimeframe(timeframeId);
346
+ if (!(symbol in this.ohlcvs)) {
347
+ this.ohlcvs[symbol] = {};
348
+ }
349
+ if (!(timeframe in this.ohlcvs[symbol])) {
350
+ const limit = this.safeInteger(this.options['ws'], 'OHLCVLimit', 1000);
351
+ this.ohlcvs[symbol][timeframe] = new ArrayCacheByTimestamp(limit);
352
+ }
353
+ const stored = this.ohlcvs[symbol][timeframe];
354
+ const data = this.safeList(message, 'data', []);
355
+ for (let i = 0; i < data.length; i++) {
356
+ const parsed = this.parseWsOHLCV(data[i], market);
357
+ stored.append(parsed);
358
+ }
359
+ const messageHash = 'ohlcv::' + symbol + '::' + timeframe;
360
+ const resolveData = [symbol, timeframe, stored];
361
+ client.resolve(resolveData, messageHash);
362
+ }
363
+ parseWsOHLCV(ohlcv, market = undefined) {
364
+ //
365
+ // {
366
+ // t: 1757251200000,
367
+ // o: '0.21897',
368
+ // h: '0.21898',
369
+ // l: '0.21889',
370
+ // c: '0.21889',
371
+ // v: '5247',
372
+ // s: 'DOGEUSDT',
373
+ // sn: 'DOGEUSDT',
374
+ // st: 0
375
+ // }
376
+ //
377
+ const parsed = this.parseOHLCV(ohlcv, market);
378
+ return parsed;
379
+ }
380
+ /**
381
+ * @method
382
+ * @name toobit#watchTicker
383
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#individual-symbol-ticker-streams
384
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
385
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
386
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
387
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
388
+ */
389
+ async watchTicker(symbol, params = {}) {
390
+ await this.loadMarkets();
391
+ symbol = this.symbol(symbol);
392
+ const tickers = await this.watchTickers([symbol], params);
393
+ return tickers[symbol];
394
+ }
395
+ /**
396
+ * @method
397
+ * @name toobit#watchTickers
398
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#individual-symbol-ticker-streams
399
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
400
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
401
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
402
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
403
+ */
404
+ async watchTickers(symbols = undefined, params = {}) {
405
+ await this.loadMarkets();
406
+ symbols = this.marketSymbols(symbols, undefined, false);
407
+ const messageHashes = [];
408
+ const subParams = [];
409
+ for (let i = 0; i < symbols.length; i++) {
410
+ const symbol = symbols[i];
411
+ const market = this.market(symbol);
412
+ messageHashes.push('ticker::' + symbol);
413
+ const rawHash = market['id'];
414
+ subParams.push(rawHash);
415
+ }
416
+ const marketIds = this.marketIds(symbols);
417
+ const url = this.urls['api']['ws']['common'] + '/quote/ws/v1';
418
+ const request = {
419
+ 'symbol': marketIds.join(','),
420
+ 'topic': 'realtimes',
421
+ 'event': 'sub',
422
+ };
423
+ const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes);
424
+ if (this.newUpdates) {
425
+ const result = {};
426
+ result[ticker['symbol']] = ticker;
427
+ return result;
428
+ }
429
+ return this.filterByArray(this.tickers, 'symbol', symbols);
430
+ }
431
+ handleTickers(client, message) {
432
+ //
433
+ // {
434
+ // "symbol": "DOGEUSDT",
435
+ // "symbolName": "DOGEUSDT",
436
+ // "topic": "realtimes",
437
+ // "params": {
438
+ // "realtimeInterval": "24h"
439
+ // },
440
+ // "data": [
441
+ // {
442
+ // "t": 1757257643683,
443
+ // "s": "DOGEUSDT",
444
+ // "o": "0.21462",
445
+ // "h": "0.22518",
446
+ // "l": "0.21229",
447
+ // "c": "0.2232",
448
+ // "v": "283337017",
449
+ // "qv": "62063771.42702",
450
+ // "sn": "DOGEUSDT",
451
+ // "m": "0.04",
452
+ // "e": 301,
453
+ // "c24h": "0.2232",
454
+ // "h24h": "0.22518",
455
+ // "l24h": "0.21229",
456
+ // "o24h": "0.21462",
457
+ // "v24h": "283337017",
458
+ // "qv24h": "62063771.42702",
459
+ // "m24h": "0.04"
460
+ // }
461
+ // ],
462
+ // "f": false,
463
+ // "sendTime": 1757257643751,
464
+ // "shared": false
465
+ // }
466
+ //
467
+ const data = this.safeList(message, 'data');
468
+ const newTickers = {};
469
+ for (let i = 0; i < data.length; i++) {
470
+ const ticker = data[i];
471
+ const parsed = this.parseWsTicker(ticker);
472
+ const symbol = parsed['symbol'];
473
+ this.tickers[symbol] = parsed;
474
+ newTickers[symbol] = parsed;
475
+ const messageHash = 'ticker::' + symbol;
476
+ client.resolve(parsed, messageHash);
477
+ }
478
+ client.resolve(newTickers, 'tickers');
479
+ }
480
+ parseWsTicker(ticker, market = undefined) {
481
+ return this.parseTicker(ticker, market);
482
+ }
483
+ /**
484
+ * @method
485
+ * @name toobit#watchOrderBook
486
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
487
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#partial-book-depth-streams
488
+ * @param {string} symbol unified symbol of the market to fetch the order book for
489
+ * @param {int} [limit] the maximum amount of order book entries to return.
490
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
491
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
492
+ */
493
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
494
+ return await this.watchOrderBookForSymbols([symbol], limit, params);
495
+ }
496
+ /**
497
+ * @method
498
+ * @name toobit#watchOrderBookForSymbols
499
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
500
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#partial-book-depth-streams
501
+ * @param {string[]} symbols unified array of symbols
502
+ * @param {int} [limit] the maximum amount of order book entries to return.
503
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
504
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
505
+ */
506
+ async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
507
+ await this.loadMarkets();
508
+ symbols = this.marketSymbols(symbols, undefined, false);
509
+ let channel = undefined;
510
+ [channel, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'channel', 'depth');
511
+ const messageHashes = [];
512
+ const subParams = [];
513
+ for (let i = 0; i < symbols.length; i++) {
514
+ const symbol = symbols[i];
515
+ const market = this.market(symbol);
516
+ messageHashes.push('orderBook::' + symbol + '::' + channel);
517
+ const rawHash = market['id'];
518
+ subParams.push(rawHash);
519
+ }
520
+ const marketIds = this.marketIds(symbols);
521
+ const url = this.urls['api']['ws']['common'] + '/quote/ws/v1';
522
+ const request = {
523
+ 'symbol': marketIds.join(','),
524
+ 'topic': channel,
525
+ 'event': 'sub',
526
+ };
527
+ const orderbook = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes);
528
+ return orderbook.limit();
529
+ }
530
+ handleOrderBook(client, message) {
531
+ //
532
+ // {
533
+ // symbol: 'DOGEUSDT',
534
+ // symbolName: 'DOGEUSDT',
535
+ // topic: 'depth',
536
+ // params: { realtimeInterval: '24h' },
537
+ // data: [
538
+ // {
539
+ // e: 301,
540
+ // t: 1757304842860,
541
+ // v: '9814355_1E-18',
542
+ // b: [Array],
543
+ // a: [Array],
544
+ // o: 0
545
+ // }
546
+ // ],
547
+ // f: false,
548
+ // sendTime: 1757304843047,
549
+ // shared: false
550
+ // }
551
+ //
552
+ const isSnapshot = this.safeBool(message, 'f', false);
553
+ if (isSnapshot) {
554
+ this.setOrderBookSnapshot(client, message, 'diffDepth');
555
+ return;
556
+ }
557
+ const marketId = this.safeString(message, 'symbol');
558
+ const market = this.safeMarket(marketId);
559
+ const symbol = market['symbol'];
560
+ const data = this.safeList(message, 'data', []);
561
+ for (let i = 0; i < data.length; i++) {
562
+ const entry = data[i];
563
+ const messageHash = 'orderBook::' + symbol + '::' + 'diffDepth';
564
+ if (!(symbol in this.orderbooks)) {
565
+ const limit = this.safeInteger(this.options['ws'], 'orderBookLimit', 1000);
566
+ this.orderbooks[symbol] = this.orderBook({}, limit);
567
+ }
568
+ const orderBook = this.orderbooks[symbol];
569
+ const timestamp = this.safeInteger(entry, 't');
570
+ const bids = this.safeList(entry, 'b', []);
571
+ const asks = this.safeList(entry, 'a', []);
572
+ this.handleDeltas(orderBook['asks'], asks);
573
+ this.handleDeltas(orderBook['bids'], bids);
574
+ orderBook['timestamp'] = timestamp;
575
+ this.orderbooks[symbol] = orderBook;
576
+ client.resolve(orderBook, messageHash);
577
+ }
578
+ }
579
+ handleDelta(bookside, delta) {
580
+ const bidAsk = this.parseBidAsk(delta);
581
+ bookside.storeArray(bidAsk);
582
+ }
583
+ handleOrderBookPartialSnapshot(client, message) {
584
+ //
585
+ // {
586
+ // symbol: 'DOGEUSDT',
587
+ // symbolName: 'DOGEUSDT',
588
+ // topic: 'depth',
589
+ // params: { realtimeInterval: '24h' },
590
+ // data: [
591
+ // {
592
+ // e: 301,
593
+ // s: 'DOGEUSDT',
594
+ // t: 1757304842860,
595
+ // v: '9814355_1E-18',
596
+ // b: [Array],
597
+ // a: [Array],
598
+ // o: 0
599
+ // }
600
+ // ],
601
+ // f: false,
602
+ // sendTime: 1757304843047,
603
+ // shared: false
604
+ // }
605
+ //
606
+ this.setOrderBookSnapshot(client, message, 'depth');
607
+ }
608
+ setOrderBookSnapshot(client, message, channel) {
609
+ const data = this.safeList(message, 'data', []);
610
+ const length = data.length;
611
+ if (length === 0) {
612
+ return;
613
+ }
614
+ for (let i = 0; i < length; i++) {
615
+ const entry = data[i];
616
+ const marketId = this.safeString(entry, 's');
617
+ const symbol = this.safeSymbol(marketId);
618
+ const messageHash = 'orderBook::' + symbol + '::' + channel;
619
+ if (!(symbol in this.orderbooks)) {
620
+ const limit = this.safeInteger(this.options['ws'], 'orderBookLimit', 1000);
621
+ this.orderbooks[symbol] = this.orderBook({}, limit);
622
+ }
623
+ const orderbook = this.orderbooks[symbol];
624
+ const timestamp = this.safeInteger(entry, 't');
625
+ const snapshot = this.parseOrderBook(entry, symbol, timestamp, 'b', 'a');
626
+ orderbook.reset(snapshot);
627
+ client.resolve(orderbook, messageHash);
628
+ }
629
+ }
630
+ /**
631
+ * @method
632
+ * @name toobit#watchBalance
633
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
634
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#payload-account-update
635
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
636
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
637
+ */
638
+ async watchBalance(params = {}) {
639
+ await this.loadMarkets();
640
+ await this.authenticate();
641
+ let marketType = undefined;
642
+ [marketType, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
643
+ const isSpot = (marketType === 'spot');
644
+ const type = isSpot ? 'spot' : 'contract';
645
+ const spotSubHash = 'spot:balance';
646
+ const swapSubHash = 'contract:private';
647
+ const spotMessageHash = 'spot:balance';
648
+ const swapMessageHash = 'contract:balance';
649
+ const messageHash = isSpot ? spotMessageHash : swapMessageHash;
650
+ const subscriptionHash = isSpot ? spotSubHash : swapSubHash;
651
+ const url = this.getUserStreamUrl();
652
+ const client = this.client(url);
653
+ this.setBalanceCache(client, marketType, subscriptionHash, params);
654
+ client.future(type + ':fetchBalanceSnapshot');
655
+ return await this.watch(url, messageHash, params, subscriptionHash);
656
+ }
657
+ setBalanceCache(client, marketType, subscriptionHash = undefined, params = {}) {
658
+ if (subscriptionHash in client.subscriptions) {
659
+ return;
660
+ }
661
+ const type = (marketType === 'spot') ? 'spot' : 'contract';
662
+ const messageHash = type + ':fetchBalanceSnapshot';
663
+ if (!(messageHash in client.futures)) {
664
+ client.future(messageHash);
665
+ this.spawn(this.loadBalanceSnapshot, client, messageHash, marketType);
666
+ }
667
+ }
668
+ handleBalance(client, message) {
669
+ //
670
+ // spot
671
+ //
672
+ // [
673
+ // {
674
+ // e: 'outboundAccountInfo',
675
+ // E: '1758226989725',
676
+ // T: true,
677
+ // W: true,
678
+ // D: true,
679
+ // B: [
680
+ // {
681
+ // a: "USDT",
682
+ // f: "6.37242839",
683
+ // l: "0",
684
+ // },
685
+ // ]
686
+ // }
687
+ // ]
688
+ //
689
+ // contract
690
+ //
691
+ // [
692
+ // {
693
+ // e: 'outboundContractAccountInfo',
694
+ // E: '1758226989742',
695
+ // T: true,
696
+ // W: true,
697
+ // D: true,
698
+ // B: [ [Object] ]
699
+ // }
700
+ // ]
701
+ //
702
+ const channel = this.safeString(message, 'e');
703
+ const data = this.safeList(message, 'B', []);
704
+ const timestamp = this.safeInteger(message, 'E');
705
+ const type = (channel === 'outboundContractAccountInfo') ? 'contract' : 'spot';
706
+ if (!(type in this.balance)) {
707
+ this.balance[type] = {};
708
+ }
709
+ this.balance[type]['info'] = data;
710
+ this.balance[type]['timestamp'] = timestamp;
711
+ this.balance[type]['datetime'] = this.iso8601(timestamp);
712
+ for (let i = 0; i < data.length; i++) {
713
+ const balance = data[i];
714
+ const currencyId = this.safeString(balance, 'a');
715
+ const code = this.safeCurrencyCode(currencyId);
716
+ const account = this.account();
717
+ account['info'] = balance;
718
+ account['used'] = this.safeString(balance, 'l');
719
+ account['free'] = this.safeString(balance, 'f');
720
+ this.balance[type][code] = account;
721
+ }
722
+ this.balance[type] = this.safeBalance(this.balance[type]);
723
+ client.resolve(this.balance[type], type + ':balance');
724
+ }
725
+ async loadBalanceSnapshot(client, messageHash, marketType) {
726
+ const response = await this.fetchBalance({ 'type': marketType });
727
+ const type = (marketType === 'spot') ? 'spot' : 'contract';
728
+ this.balance[type] = this.extend(response, this.safeDict(this.balance, type, {}));
729
+ // don't remove the future from the .futures cache
730
+ const future = client.futures[messageHash];
731
+ future.resolve();
732
+ client.resolve(this.balance[type], type + ':fetchBalanceSnapshot');
733
+ client.resolve(this.balance[type], type + ':balance'); // we should also resolve right away after snapshot, so user doesn't double-fetch balance
734
+ }
735
+ /**
736
+ * @method
737
+ * @name toobit#watchOrders
738
+ * @description watches information on multiple orders made by the user
739
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#payload-order-update
740
+ * @param {string} symbol unified market symbol of the market orders were made in
741
+ * @param {int} [since] the earliest time in ms to fetch orders for
742
+ * @param {int} [limit] the maximum number of order structures to retrieve
743
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
744
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
745
+ */
746
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
747
+ await this.loadMarkets();
748
+ await this.authenticate();
749
+ const market = this.marketOrNull(symbol);
750
+ symbol = this.safeString(market, 'symbol', symbol);
751
+ let messageHash = 'orders';
752
+ if (symbol !== undefined) {
753
+ messageHash = messageHash + ':' + symbol;
754
+ }
755
+ const url = this.getUserStreamUrl();
756
+ const orders = await this.watch(url, messageHash, params, messageHash);
757
+ if (this.newUpdates) {
758
+ limit = orders.getLimit(symbol, limit);
759
+ }
760
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
761
+ }
762
+ handleOrder(client, message) {
763
+ //
764
+ // {
765
+ // "e": "executionReport",
766
+ // "E": "1758311011844",
767
+ // "s": "DOGEUSDT",
768
+ // "c": "1758311011948",
769
+ // "S": "BUY",
770
+ // "o": "LIMIT",
771
+ // "f": "GTC",
772
+ // "q": "22",
773
+ // "p": "0.23",
774
+ // "pt": "INPUT",
775
+ // "X": "NEW",
776
+ // "i": "2043255292855185152",
777
+ // "l": "0", // Last executed quantity
778
+ // "z": "0", // Cumulative filled quantity
779
+ // "L": "0", // Last executed price
780
+ // "n": "0",
781
+ // "N": "",
782
+ // "u": true,
783
+ // "w": true,
784
+ // "m": false,
785
+ // "O": "1758311011833",
786
+ // "U": "1758311011841",
787
+ // "Z": "0",
788
+ // "C": false,
789
+ // "v": "0",
790
+ // "rp": "0",
791
+ // "td": "0"
792
+ // }
793
+ //
794
+ if (this.orders === undefined) {
795
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
796
+ this.orders = new ArrayCacheBySymbolById(limit);
797
+ }
798
+ const orders = this.orders;
799
+ const order = this.parseWsOrder(message);
800
+ orders.append(order);
801
+ let messageHash = 'orders';
802
+ client.resolve(orders, messageHash);
803
+ messageHash = 'orders:' + this.safeString(order, 'symbol');
804
+ client.resolve(orders, messageHash);
805
+ }
806
+ parseWsOrder(order, market = undefined) {
807
+ const timestamp = this.safeInteger(order, 'O');
808
+ const marketId = this.safeString(order, 's');
809
+ const symbol = this.safeSymbol(marketId, market);
810
+ const priceType = this.safeStringLower(order, 'pt');
811
+ const rawOrderType = this.safeStringLower(order, 'o');
812
+ let orderType = undefined;
813
+ if (priceType === 'market') {
814
+ orderType = 'market';
815
+ }
816
+ else {
817
+ orderType = rawOrderType;
818
+ }
819
+ const feeCost = this.safeNumber(order, 'n');
820
+ let fee = undefined;
821
+ if (feeCost !== undefined) {
822
+ fee = {
823
+ 'cost': feeCost,
824
+ 'currency': undefined,
825
+ };
826
+ }
827
+ return this.safeOrder({
828
+ 'info': order,
829
+ 'id': this.safeString(order, 'i'),
830
+ 'clientOrderId': this.safeString(order, 'c'),
831
+ 'timestamp': timestamp,
832
+ 'datetime': this.iso8601(timestamp),
833
+ 'lastUpdateTimestamp': this.safeInteger2(order, 'U', 'E'),
834
+ 'symbol': symbol,
835
+ 'type': orderType,
836
+ 'timeInForce': this.safeStringUpper(order, 'f'),
837
+ 'postOnly': undefined,
838
+ 'side': this.safeStringLower(order, 'S'),
839
+ 'price': this.safeString(order, 'L'),
840
+ 'stopPrice': undefined,
841
+ 'triggerPrice': undefined,
842
+ 'amount': this.safeString(order, 'q'),
843
+ 'cost': undefined,
844
+ 'average': this.safeString(order, 'p'),
845
+ 'filled': this.safeString(order, 'z'),
846
+ 'remaining': undefined,
847
+ 'status': this.parseOrderStatus(this.safeString(order, 'X')),
848
+ 'fee': fee,
849
+ 'trades': undefined,
850
+ }, market);
851
+ }
852
+ /**
853
+ * @method
854
+ * @name toobit#watchMyTrades
855
+ * @description watches information on multiple trades made by the user
856
+ * @see https://toobit-docs.github.io/apidocs/spot/v1/en/#payload-ticket-push
857
+ * @param {string} symbol unified market symbol of the market trades were made in
858
+ * @param {int} [since] the earliest time in ms to fetch trades for
859
+ * @param {int} [limit] the maximum number of trade structures to retrieve
860
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
861
+ * @param {boolean} [params.unifiedMargin] use unified margin account
862
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
863
+ */
864
+ async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
865
+ await this.loadMarkets();
866
+ await this.authenticate();
867
+ const market = this.marketOrNull(symbol);
868
+ symbol = this.safeString(market, 'symbol', symbol);
869
+ let messageHash = 'myTrades';
870
+ if (symbol !== undefined) {
871
+ messageHash = messageHash + ':' + symbol;
872
+ }
873
+ const url = this.getUserStreamUrl();
874
+ const trades = await this.watch(url, messageHash, params, messageHash);
875
+ if (this.newUpdates) {
876
+ limit = trades.getLimit(symbol, limit);
877
+ }
878
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
879
+ }
880
+ handleMyTrade(client, message) {
881
+ //
882
+ // {
883
+ // "e": "ticketInfo",
884
+ // "E": "1758314657847",
885
+ // "s": "DOGEUSDT",
886
+ // "q": "22.0",
887
+ // "t": "1758314657842",
888
+ // "p": "0.26667",
889
+ // "T": "4864732022877055421",
890
+ // "o": "2043285877770284800",
891
+ // "c": "1758314657002",
892
+ // "a": "1783404067076253952",
893
+ // "m": false,
894
+ // "S": "BUY"
895
+ // }
896
+ //
897
+ let myTrades = this.myTrades;
898
+ if (myTrades === undefined) {
899
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
900
+ myTrades = new ArrayCacheBySymbolById(limit);
901
+ }
902
+ const trade = this.parseMyTrade(message);
903
+ myTrades.append(trade);
904
+ let messageHash = 'myTrades:' + trade['symbol'];
905
+ client.resolve(myTrades, messageHash);
906
+ messageHash = 'myTrades';
907
+ client.resolve(myTrades, messageHash);
908
+ }
909
+ parseMyTrade(trade, market = undefined) {
910
+ const marketId = this.safeString(trade, 's');
911
+ const ts = this.safeString(trade, 't');
912
+ return this.safeTrade({
913
+ 'info': trade,
914
+ 'id': this.safeString(trade, 'T'),
915
+ 'timestamp': ts,
916
+ 'datetime': this.iso8601(ts),
917
+ 'symbol': this.safeSymbol(marketId, market),
918
+ 'order': this.safeString(trade, 'o'),
919
+ 'type': undefined,
920
+ 'side': this.safeStringLower(trade, 'S'),
921
+ 'takerOrMaker': this.safeBool(trade, 'm') ? 'maker' : 'taker',
922
+ 'price': this.safeString(trade, 'p'),
923
+ 'amount': this.safeString(trade, 'q'),
924
+ 'cost': undefined,
925
+ 'fee': undefined,
926
+ }, market);
927
+ }
928
+ /**
929
+ * @method
930
+ * @name toobit#watchPositions
931
+ * @see https://toobit-docs.github.io/apidocs/usdt_swap/v1/en/#event-position-update
932
+ * @description watch all open positions
933
+ * @param {string[]} [symbols] list of unified market symbols
934
+ * @param {int} [since] the earliest time in ms to fetch positions for
935
+ * @param {int} [limit] the maximum number of positions to retrieve
936
+ * @param {object} params extra parameters specific to the exchange API endpoint
937
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
938
+ */
939
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
940
+ await this.loadMarkets();
941
+ await this.authenticate();
942
+ let messageHash = '';
943
+ if (!this.isEmpty(symbols)) {
944
+ symbols = this.marketSymbols(symbols);
945
+ messageHash = '::' + symbols.join(',');
946
+ }
947
+ const url = this.getUserStreamUrl();
948
+ const client = this.client(url);
949
+ await this.authenticate(url);
950
+ this.setPositionsCache(client, symbols);
951
+ const cache = this.positions;
952
+ if (cache === undefined) {
953
+ const snapshot = await client.future('fetchPositionsSnapshot');
954
+ return this.filterBySymbolsSinceLimit(snapshot, symbols, since, limit, true);
955
+ }
956
+ const newPositions = await this.watch(url, messageHash, undefined, messageHash);
957
+ if (this.newUpdates) {
958
+ return newPositions;
959
+ }
960
+ return this.filterBySymbolsSinceLimit(cache, symbols, since, limit, true);
961
+ }
962
+ setPositionsCache(client, type, symbols = undefined, isPortfolioMargin = false) {
963
+ if (this.positions === undefined) {
964
+ this.positions = {};
965
+ }
966
+ if (type in this.positions) {
967
+ return;
968
+ }
969
+ const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', false);
970
+ if (fetchPositionsSnapshot) {
971
+ const messageHash = type + ':fetchPositionsSnapshot';
972
+ if (!(messageHash in client.futures)) {
973
+ client.future(messageHash);
974
+ this.spawn(this.loadPositionsSnapshot, client, messageHash, type, isPortfolioMargin);
975
+ }
976
+ }
977
+ else {
978
+ this.positions[type] = new ArrayCacheBySymbolBySide();
979
+ }
980
+ }
981
+ async loadPositionsSnapshot(client, messageHash, type) {
982
+ const params = {
983
+ 'type': type,
984
+ };
985
+ const positions = await this.fetchPositions(undefined, params);
986
+ this.positions[type] = new ArrayCacheBySymbolBySide();
987
+ const cache = this.positions[type];
988
+ for (let i = 0; i < positions.length; i++) {
989
+ const position = positions[i];
990
+ cache.append(position);
991
+ }
992
+ // don't remove the future from the .futures cache
993
+ const future = client.futures[messageHash];
994
+ future.resolve(cache);
995
+ client.resolve(cache, type + ':positions');
996
+ }
997
+ handlePositions(client, message) {
998
+ //
999
+ // [
1000
+ // {
1001
+ // e: 'outboundContractPositionInfo',
1002
+ // E: '1758316454554',
1003
+ // A: '1783404067076253954',
1004
+ // s: 'DOGE-SWAP-USDT',
1005
+ // S: 'LONG',
1006
+ // p: '0',
1007
+ // P: '0',
1008
+ // a: '0',
1009
+ // f: '0.1228',
1010
+ // m: '0',
1011
+ // r: '0',
1012
+ // up: '0',
1013
+ // pr: '0',
1014
+ // pv: '0',
1015
+ // v: '3.0',
1016
+ // mt: 'CROSS',
1017
+ // mm: '0',
1018
+ // mp: '0.265410000000000000'
1019
+ // }
1020
+ // ]
1021
+ //
1022
+ const subscriptions = Object.keys(client.subscriptions);
1023
+ const accountType = subscriptions[0];
1024
+ if (this.positions === undefined) {
1025
+ this.positions = {};
1026
+ }
1027
+ if (!(accountType in this.positions)) {
1028
+ this.positions[accountType] = new ArrayCacheBySymbolBySide();
1029
+ }
1030
+ const cache = this.positions[accountType];
1031
+ const newPositions = [];
1032
+ for (let i = 0; i < message.length; i++) {
1033
+ const rawPosition = message[i];
1034
+ const position = this.parseWsPosition(rawPosition);
1035
+ const timestamp = this.safeInteger(rawPosition, 'E');
1036
+ position['timestamp'] = timestamp;
1037
+ position['datetime'] = this.iso8601(timestamp);
1038
+ newPositions.push(position);
1039
+ cache.append(position);
1040
+ }
1041
+ const messageHashes = this.findMessageHashes(client, accountType + ':positions::');
1042
+ for (let i = 0; i < messageHashes.length; i++) {
1043
+ const messageHash = messageHashes[i];
1044
+ const parts = messageHash.split('::');
1045
+ const symbolsString = parts[1];
1046
+ const symbols = symbolsString.split(',');
1047
+ const positions = this.filterByArray(newPositions, 'symbol', symbols, false);
1048
+ if (!this.isEmpty(positions)) {
1049
+ client.resolve(positions, messageHash);
1050
+ }
1051
+ }
1052
+ client.resolve(newPositions, accountType + ':positions');
1053
+ }
1054
+ parseWsPosition(position, market = undefined) {
1055
+ const marketId = this.safeString(position, 's');
1056
+ return this.safePosition({
1057
+ 'info': position,
1058
+ 'id': undefined,
1059
+ 'symbol': this.safeSymbol(marketId, undefined),
1060
+ 'notional': this.omitZero(this.safeString(position, 'pv')),
1061
+ 'marginMode': this.safeStringLower(position, 'mt'),
1062
+ 'liquidationPrice': this.safeString(position, 'f'),
1063
+ 'entryPrice': this.safeString(position, 'p'),
1064
+ 'unrealizedPnl': this.safeString(position, 'up'),
1065
+ 'realizedPnl': this.safeNumber(position, 'r'),
1066
+ 'percentage': undefined,
1067
+ 'contracts': undefined,
1068
+ 'contractSize': undefined,
1069
+ 'markPrice': this.safeString(position, 'mp'),
1070
+ 'side': this.safeStringLower(position, 'S'),
1071
+ 'hedged': undefined,
1072
+ 'timestamp': undefined,
1073
+ 'datetime': undefined,
1074
+ 'maintenanceMargin': this.safeString(position, 'mm'),
1075
+ 'maintenanceMarginPercentage': undefined,
1076
+ 'collateral': undefined,
1077
+ 'initialMargin': this.omitZero(this.safeString(position, 'm')),
1078
+ 'initialMarginPercentage': undefined,
1079
+ 'leverage': this.safeString(position, 'v'),
1080
+ 'marginRatio': undefined,
1081
+ });
1082
+ }
1083
+ async authenticate(params = {}) {
1084
+ const client = this.client(this.getUserStreamUrl());
1085
+ const messageHash = 'authenticated';
1086
+ const future = client.future(messageHash);
1087
+ const authenticated = this.safeValue(client.subscriptions, messageHash);
1088
+ if (authenticated === undefined) {
1089
+ this.checkRequiredCredentials();
1090
+ const time = this.milliseconds();
1091
+ const lastAuthenticatedTime = this.safeInteger(this.options['ws'], 'lastAuthenticatedTime', 0);
1092
+ const listenKeyRefreshRate = this.safeInteger(this.options['ws'], 'listenKeyRefreshRate', 1200000);
1093
+ const delay = this.sum(listenKeyRefreshRate, 10000);
1094
+ if (time - lastAuthenticatedTime > delay) {
1095
+ try {
1096
+ client.subscriptions[messageHash] = true;
1097
+ const response = await this.privatePostApiV1UserDataStream(params);
1098
+ this.options['ws']['listenKey'] = this.safeString(response, 'listenKey');
1099
+ this.options['ws']['lastAuthenticatedTime'] = time;
1100
+ future.resolve(true);
1101
+ this.delay(listenKeyRefreshRate, this.keepAliveListenKey, params);
1102
+ }
1103
+ catch (e) {
1104
+ const err = new AuthenticationError(this.id + ' ' + this.json(e));
1105
+ client.reject(err, messageHash);
1106
+ if (messageHash in client.subscriptions) {
1107
+ delete client.subscriptions[messageHash];
1108
+ }
1109
+ }
1110
+ }
1111
+ }
1112
+ return await future;
1113
+ }
1114
+ async keepAliveListenKey(params = {}) {
1115
+ const options = this.safeValue(this.options, 'ws', {});
1116
+ const listenKey = this.safeString(options, 'listenKey');
1117
+ if (listenKey === undefined) {
1118
+ // A network error happened: we can't renew a listen key that does not exist.
1119
+ return;
1120
+ }
1121
+ try {
1122
+ const response = await this.privatePostApiV1UserDataStream(params);
1123
+ this.options['ws']['listenKey'] = this.safeString(response, 'listenKey');
1124
+ this.options['ws']['lastAuthenticatedTime'] = this.milliseconds();
1125
+ }
1126
+ catch (error) {
1127
+ const url = this.getUserStreamUrl();
1128
+ const client = this.client(url);
1129
+ const messageHashes = Object.keys(client.futures);
1130
+ for (let i = 0; i < messageHashes.length; i++) {
1131
+ const messageHash = messageHashes[i];
1132
+ client.reject(error, messageHash);
1133
+ }
1134
+ this.options['ws']['listenKey'] = undefined;
1135
+ this.options['ws']['lastAuthenticatedTime'] = 0;
1136
+ return;
1137
+ }
1138
+ // whether or not to schedule another listenKey keepAlive request
1139
+ const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 1200000);
1140
+ this.delay(listenKeyRefreshRate, this.keepAliveListenKey, params);
1141
+ }
1142
+ getUserStreamUrl() {
1143
+ return this.urls['api']['ws']['common'] + '/api/v1/ws/' + this.options['ws']['listenKey'];
1144
+ }
1145
+ handleErrorMessage(client, message) {
1146
+ //
1147
+ // {
1148
+ // "code": '-100010',
1149
+ // "desc": "Invalid Symbols!"
1150
+ // }
1151
+ //
1152
+ const code = this.safeString(message, 'code');
1153
+ if (code !== undefined) {
1154
+ const desc = this.safeString(message, 'desc');
1155
+ const msg = this.id + ' code: ' + code + ' message: ' + desc;
1156
+ const exception = new ExchangeError(msg); // c# fix
1157
+ client.reject(exception);
1158
+ return true;
1159
+ }
1160
+ return false;
1161
+ }
1162
+ }