ccxt 4.4.77 → 4.4.78

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 (936) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +7 -7
  3. package/dist/cjs/ccxt.js +8 -4
  4. package/dist/cjs/src/abstract/ace.js +1 -1
  5. package/dist/cjs/src/abstract/alpaca.js +1 -1
  6. package/dist/cjs/src/abstract/apex.js +9 -0
  7. package/dist/cjs/src/abstract/ascendex.js +1 -1
  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/bitvavo.js +1 -1
  26. package/dist/cjs/src/abstract/bl3p.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/coinlist.js +1 -1
  42. package/dist/cjs/src/abstract/coinmate.js +1 -1
  43. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  44. package/dist/cjs/src/abstract/coinone.js +1 -1
  45. package/dist/cjs/src/abstract/coinsph.js +1 -1
  46. package/dist/cjs/src/abstract/coinspot.js +1 -1
  47. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  48. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  49. package/dist/cjs/src/abstract/defx.js +1 -1
  50. package/dist/cjs/src/abstract/delta.js +1 -1
  51. package/dist/cjs/src/abstract/deribit.js +1 -1
  52. package/dist/cjs/src/abstract/derive.js +1 -1
  53. package/dist/cjs/src/abstract/digifinex.js +1 -1
  54. package/dist/cjs/src/abstract/ellipx.js +1 -1
  55. package/dist/cjs/src/abstract/exmo.js +1 -1
  56. package/dist/cjs/src/abstract/gate.js +1 -1
  57. package/dist/cjs/src/abstract/gemini.js +1 -1
  58. package/dist/cjs/src/abstract/hashkey.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/huobijp.js +1 -1
  63. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  64. package/dist/cjs/src/abstract/idex.js +1 -1
  65. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  66. package/dist/cjs/src/abstract/indodax.js +1 -1
  67. package/dist/cjs/src/abstract/kraken.js +1 -1
  68. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  69. package/dist/cjs/src/abstract/kucoin.js +1 -1
  70. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  71. package/dist/cjs/src/abstract/kuna.js +1 -1
  72. package/dist/cjs/src/abstract/latoken.js +1 -1
  73. package/dist/cjs/src/abstract/lbank.js +1 -1
  74. package/dist/cjs/src/abstract/luno.js +1 -1
  75. package/dist/cjs/src/abstract/mercado.js +1 -1
  76. package/dist/cjs/src/abstract/mexc.js +1 -1
  77. package/dist/cjs/src/abstract/ndax.js +1 -1
  78. package/dist/cjs/src/abstract/novadax.js +1 -1
  79. package/dist/cjs/src/abstract/oceanex.js +1 -1
  80. package/dist/cjs/src/abstract/okcoin.js +1 -1
  81. package/dist/cjs/src/abstract/okx.js +1 -1
  82. package/dist/cjs/src/abstract/onetrading.js +1 -1
  83. package/dist/cjs/src/abstract/oxfun.js +1 -1
  84. package/dist/cjs/src/abstract/p2b.js +1 -1
  85. package/dist/cjs/src/abstract/paradex.js +1 -1
  86. package/dist/cjs/src/abstract/paymium.js +1 -1
  87. package/dist/cjs/src/abstract/phemex.js +1 -1
  88. package/dist/cjs/src/abstract/poloniex.js +1 -1
  89. package/dist/cjs/src/abstract/probit.js +1 -1
  90. package/dist/cjs/src/abstract/timex.js +1 -1
  91. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  92. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  93. package/dist/cjs/src/abstract/upbit.js +1 -1
  94. package/dist/cjs/src/abstract/vertex.js +1 -1
  95. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  96. package/dist/cjs/src/abstract/whitebit.js +1 -1
  97. package/dist/cjs/src/abstract/woo.js +1 -1
  98. package/dist/cjs/src/abstract/woofipro.js +1 -1
  99. package/dist/cjs/src/abstract/xt.js +1 -1
  100. package/dist/cjs/src/abstract/yobit.js +1 -1
  101. package/dist/cjs/src/abstract/zaif.js +1 -1
  102. package/dist/cjs/src/abstract/zonda.js +1 -1
  103. package/dist/cjs/src/ace.js +1 -1
  104. package/dist/cjs/src/alpaca.js +1 -1
  105. package/dist/cjs/src/apex.js +1949 -0
  106. package/dist/cjs/src/ascendex.js +1 -1
  107. package/dist/cjs/src/base/Exchange.js +42 -2
  108. package/dist/cjs/src/base/Precise.js +6 -0
  109. package/dist/cjs/src/base/errors.js +6 -0
  110. package/dist/cjs/src/base/functions/crypto.js +1 -1
  111. package/dist/cjs/src/base/functions/encode.js +1 -1
  112. package/dist/cjs/src/base/functions/misc.js +1 -0
  113. package/dist/cjs/src/base/functions/number.js +6 -0
  114. package/dist/cjs/src/base/functions/platform.js +6 -0
  115. package/dist/cjs/src/base/functions/rsa.js +1 -0
  116. package/dist/cjs/src/base/functions/string.js +6 -0
  117. package/dist/cjs/src/base/functions/throttle.js +1 -1
  118. package/dist/cjs/src/base/functions/time.js +6 -0
  119. package/dist/cjs/src/base/functions/totp.js +1 -0
  120. package/dist/cjs/src/base/functions/type.js +6 -0
  121. package/dist/cjs/src/base/functions.js +1 -1
  122. package/dist/cjs/src/base/ws/Cache.js +6 -0
  123. package/dist/cjs/src/base/ws/Client.js +1 -0
  124. package/dist/cjs/src/base/ws/Future.js +1 -1
  125. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  126. package/dist/cjs/src/base/ws/OrderBookSide.js +6 -0
  127. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  128. package/dist/cjs/src/bequant.js +1 -1
  129. package/dist/cjs/src/bigone.js +1 -1
  130. package/dist/cjs/src/binance.js +2 -2
  131. package/dist/cjs/src/binancecoinm.js +1 -1
  132. package/dist/cjs/src/binanceus.js +1 -1
  133. package/dist/cjs/src/binanceusdm.js +1 -1
  134. package/dist/cjs/src/bingx.js +1 -1
  135. package/dist/cjs/src/bit2c.js +1 -1
  136. package/dist/cjs/src/bitbank.js +1 -1
  137. package/dist/cjs/src/bitbns.js +1 -1
  138. package/dist/cjs/src/bitfinex.js +1 -1
  139. package/dist/cjs/src/bitflyer.js +1 -1
  140. package/dist/cjs/src/bitget.js +139 -71
  141. package/dist/cjs/src/bithumb.js +1 -1
  142. package/dist/cjs/src/bitmart.js +1 -1
  143. package/dist/cjs/src/bitmex.js +5 -5
  144. package/dist/cjs/src/bitopro.js +1 -1
  145. package/dist/cjs/src/bitrue.js +1 -1
  146. package/dist/cjs/src/bitso.js +1 -1
  147. package/dist/cjs/src/bitstamp.js +1 -1
  148. package/dist/cjs/src/bitteam.js +1 -1
  149. package/dist/cjs/src/bl3p.js +1 -1
  150. package/dist/cjs/src/blockchaincom.js +1 -1
  151. package/dist/cjs/src/blofin.js +1 -1
  152. package/dist/cjs/src/btcalpha.js +1 -1
  153. package/dist/cjs/src/btcbox.js +1 -1
  154. package/dist/cjs/src/btcmarkets.js +1 -1
  155. package/dist/cjs/src/btcturk.js +1 -1
  156. package/dist/cjs/src/bybit.js +1 -1
  157. package/dist/cjs/src/cex.js +2 -2
  158. package/dist/cjs/src/coinbase.js +32 -3
  159. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  160. package/dist/cjs/src/coincatch.js +69 -1
  161. package/dist/cjs/src/coincheck.js +1 -1
  162. package/dist/cjs/src/coinex.js +1 -1
  163. package/dist/cjs/src/coinlist.js +1 -0
  164. package/dist/cjs/src/coinmate.js +1 -1
  165. package/dist/cjs/src/coinmetro.js +1 -1
  166. package/dist/cjs/src/coinone.js +1 -1
  167. package/dist/cjs/src/coinsph.js +1 -0
  168. package/dist/cjs/src/coinspot.js +1 -1
  169. package/dist/cjs/src/cryptocom.js +1 -1
  170. package/dist/cjs/src/cryptomus.js +1 -1
  171. package/dist/cjs/src/defx.js +1 -1
  172. package/dist/cjs/src/delta.js +1 -1
  173. package/dist/cjs/src/deribit.js +1 -1
  174. package/dist/cjs/src/derive.js +1 -1
  175. package/dist/cjs/src/digifinex.js +1 -1
  176. package/dist/cjs/src/ellipx.js +1 -1
  177. package/dist/cjs/src/exmo.js +1 -1
  178. package/dist/cjs/src/fmfwio.js +1 -1
  179. package/dist/cjs/src/gate.js +1 -1
  180. package/dist/cjs/src/gateio.js +1 -1
  181. package/dist/cjs/src/gemini.js +1 -1
  182. package/dist/cjs/src/hashkey.js +1 -1
  183. package/dist/cjs/src/hitbtc.js +4 -0
  184. package/dist/cjs/src/hollaex.js +1 -1
  185. package/dist/cjs/src/htx.js +1 -1
  186. package/dist/cjs/src/huobi.js +1 -1
  187. package/dist/cjs/src/huobijp.js +1 -1
  188. package/dist/cjs/src/hyperliquid.js +14 -5
  189. package/dist/cjs/src/idex.js +1 -1
  190. package/dist/cjs/src/independentreserve.js +1 -1
  191. package/dist/cjs/src/indodax.js +1 -1
  192. package/dist/cjs/src/kraken.js +1 -1
  193. package/dist/cjs/src/krakenfutures.js +1 -1
  194. package/dist/cjs/src/kucoin.js +1 -1
  195. package/dist/cjs/src/kucoinfutures.js +1 -1
  196. package/dist/cjs/src/kuna.js +1 -1
  197. package/dist/cjs/src/latoken.js +1 -1
  198. package/dist/cjs/src/lbank.js +1 -1
  199. package/dist/cjs/src/luno.js +1 -1
  200. package/dist/cjs/src/mercado.js +1 -1
  201. package/dist/cjs/src/mexc.js +51 -58
  202. package/dist/cjs/src/myokx.js +1 -1
  203. package/dist/cjs/src/ndax.js +1 -1
  204. package/dist/cjs/src/novadax.js +1 -1
  205. package/dist/cjs/src/oceanex.js +1 -1
  206. package/dist/cjs/src/okcoin.js +1 -1
  207. package/dist/cjs/src/okx.js +1 -1
  208. package/dist/cjs/src/onetrading.js +1 -1
  209. package/dist/cjs/src/oxfun.js +1 -1
  210. package/dist/cjs/src/p2b.js +1 -1
  211. package/dist/cjs/src/paradex.js +1 -1
  212. package/dist/cjs/src/paymium.js +1 -1
  213. package/dist/cjs/src/phemex.js +2 -1
  214. package/dist/cjs/src/poloniex.js +2 -2
  215. package/dist/cjs/src/pro/alpaca.js +1 -1
  216. package/dist/cjs/src/pro/apex.js +1043 -0
  217. package/dist/cjs/src/pro/ascendex.js +1 -1
  218. package/dist/cjs/src/pro/bequant.js +1 -1
  219. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  220. package/dist/cjs/src/pro/binanceus.js +1 -1
  221. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  222. package/dist/cjs/src/pro/bingx.js +1 -1
  223. package/dist/cjs/src/pro/bitfinex.js +1 -1
  224. package/dist/cjs/src/pro/bitget.js +1 -1
  225. package/dist/cjs/src/pro/bithumb.js +1 -1
  226. package/dist/cjs/src/pro/bitmart.js +1 -1
  227. package/dist/cjs/src/pro/bitmex.js +1 -1
  228. package/dist/cjs/src/pro/bitrue.js +1 -1
  229. package/dist/cjs/src/pro/bitstamp.js +1 -1
  230. package/dist/cjs/src/pro/bitvavo.js +1 -1
  231. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  232. package/dist/cjs/src/pro/blofin.js +1 -1
  233. package/dist/cjs/src/pro/bybit.js +1 -1
  234. package/dist/cjs/src/pro/cex.js +1 -1
  235. package/dist/cjs/src/pro/coinbase.js +5 -9
  236. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  237. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  238. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  239. package/dist/cjs/src/pro/coincatch.js +1 -1
  240. package/dist/cjs/src/pro/coincheck.js +1 -1
  241. package/dist/cjs/src/pro/coinex.js +1 -1
  242. package/dist/cjs/src/pro/coinone.js +1 -1
  243. package/dist/cjs/src/pro/cryptocom.js +1 -1
  244. package/dist/cjs/src/pro/defx.js +1 -1
  245. package/dist/cjs/src/pro/deribit.js +1 -1
  246. package/dist/cjs/src/pro/exmo.js +1 -1
  247. package/dist/cjs/src/pro/gate.js +28 -3
  248. package/dist/cjs/src/pro/gateio.js +1 -1
  249. package/dist/cjs/src/pro/gemini.js +1 -1
  250. package/dist/cjs/src/pro/hashkey.js +1 -1
  251. package/dist/cjs/src/pro/hitbtc.js +1 -1
  252. package/dist/cjs/src/pro/hollaex.js +3 -3
  253. package/dist/cjs/src/pro/htx.js +1 -1
  254. package/dist/cjs/src/pro/huobi.js +1 -1
  255. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  256. package/dist/cjs/src/pro/idex.js +1 -1
  257. package/dist/cjs/src/pro/independentreserve.js +1 -1
  258. package/dist/cjs/src/pro/kraken.js +1 -1
  259. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  260. package/dist/cjs/src/pro/kucoin.js +1 -1
  261. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  262. package/dist/cjs/src/pro/lbank.js +1 -0
  263. package/dist/cjs/src/pro/luno.js +1 -1
  264. package/dist/cjs/src/pro/mexc.js +1 -1
  265. package/dist/cjs/src/pro/myokx.js +1 -1
  266. package/dist/cjs/src/pro/ndax.js +1 -1
  267. package/dist/cjs/src/pro/okcoin.js +1 -1
  268. package/dist/cjs/src/pro/okx.js +1 -1
  269. package/dist/cjs/src/pro/onetrading.js +1 -1
  270. package/dist/cjs/src/pro/oxfun.js +1 -1
  271. package/dist/cjs/src/pro/p2b.js +3 -3
  272. package/dist/cjs/src/pro/paradex.js +1 -1
  273. package/dist/cjs/src/pro/phemex.js +1 -1
  274. package/dist/cjs/src/pro/poloniex.js +1 -1
  275. package/dist/cjs/src/pro/probit.js +1 -1
  276. package/dist/cjs/src/pro/tradeogre.js +283 -0
  277. package/dist/cjs/src/pro/upbit.js +1 -1
  278. package/dist/cjs/src/pro/whitebit.js +1 -1
  279. package/dist/cjs/src/pro/xt.js +1 -1
  280. package/dist/cjs/src/probit.js +2 -1
  281. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +6 -0
  282. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  283. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
  284. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +1 -0
  285. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +1 -0
  286. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +1 -0
  287. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +1 -0
  288. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +1 -0
  289. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +1 -0
  290. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +1 -0
  291. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +1 -0
  292. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +1 -0
  293. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +1 -0
  294. package/dist/cjs/src/static_dependencies/ethers/fragments.js +6 -0
  295. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +6 -0
  296. package/dist/cjs/src/static_dependencies/ethers/index.js +1 -10
  297. package/dist/cjs/src/static_dependencies/ethers/interface.js +6 -0
  298. package/dist/cjs/src/static_dependencies/ethers/typed.js +6 -0
  299. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +1 -13
  300. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +1 -6
  301. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +1 -9
  302. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +6 -0
  303. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
  304. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +1 -7
  305. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +1 -5
  306. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +6 -0
  307. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +1 -8
  308. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  309. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +1 -0
  310. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +1 -0
  311. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  312. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
  313. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
  314. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
  315. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +1 -0
  316. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  317. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
  318. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  319. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  320. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
  321. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  322. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
  323. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +6 -0
  324. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  325. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  326. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  327. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +1 -0
  328. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  329. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  330. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  331. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
  332. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  333. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  334. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  335. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  336. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +6 -0
  337. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +1 -0
  338. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +6 -0
  339. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +6 -0
  340. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +1 -0
  341. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +1 -0
  342. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +1 -0
  343. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +1 -0
  344. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +1 -0
  345. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +1 -0
  346. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  347. package/dist/cjs/src/static_dependencies/node-fetch/body.js +1 -5
  348. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +1 -0
  349. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +6 -0
  350. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +1 -0
  351. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +1 -5
  352. package/dist/cjs/src/static_dependencies/node-fetch/index.js +1 -7
  353. package/dist/cjs/src/static_dependencies/node-fetch/request.js +1 -7
  354. package/dist/cjs/src/static_dependencies/node-fetch/response.js +1 -5
  355. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
  356. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
  357. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +6 -0
  358. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +1 -0
  359. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +1 -0
  360. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +1 -0
  361. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +1 -0
  362. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
  363. package/dist/cjs/src/static_dependencies/scure-base/index.js +6 -0
  364. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  365. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  366. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +6 -0
  367. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
  368. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
  369. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +6 -0
  370. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +6 -0
  371. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +6 -0
  372. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  373. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  374. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  375. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +1 -0
  376. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +1 -0
  377. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
  378. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
  379. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
  380. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +1 -0
  381. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  382. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +1 -0
  383. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +1 -0
  384. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
  385. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +1 -0
  386. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -0
  387. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +1 -0
  388. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  389. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +1 -4
  390. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +1 -0
  391. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +1 -3
  392. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +1 -0
  393. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +1 -0
  394. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +1 -0
  395. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +1 -0
  396. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  397. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +6 -0
  398. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +2645 -0
  399. package/dist/cjs/src/timex.js +1 -0
  400. package/dist/cjs/src/tokocrypto.js +1 -1
  401. package/dist/cjs/src/tradeogre.js +3 -2
  402. package/dist/cjs/src/upbit.js +236 -48
  403. package/dist/cjs/src/vertex.js +1 -1
  404. package/dist/cjs/src/wavesexchange.js +1 -1
  405. package/dist/cjs/src/whitebit.js +2 -1
  406. package/dist/cjs/src/woo.js +4 -2
  407. package/dist/cjs/src/woofipro.js +1 -1
  408. package/dist/cjs/src/xt.js +10 -1
  409. package/dist/cjs/src/yobit.js +1 -1
  410. package/dist/cjs/src/zaif.js +1 -1
  411. package/dist/cjs/src/zonda.js +1 -1
  412. package/js/ccxt.d.ts +11 -5
  413. package/js/ccxt.js +14 -4
  414. package/js/src/abstract/alpaca.js +6 -0
  415. package/js/src/abstract/apex.d.ts +34 -0
  416. package/js/src/abstract/apex.js +11 -0
  417. package/js/src/abstract/ascendex.js +6 -0
  418. package/js/src/abstract/bequant.js +6 -0
  419. package/js/src/abstract/bigone.js +6 -0
  420. package/js/src/abstract/binance.js +6 -0
  421. package/js/src/abstract/binancecoinm.js +6 -0
  422. package/js/src/abstract/binanceus.js +6 -0
  423. package/js/src/abstract/binanceusdm.js +6 -0
  424. package/js/src/abstract/bingx.js +6 -0
  425. package/js/src/abstract/bit2c.js +6 -0
  426. package/js/src/abstract/bitbank.js +6 -0
  427. package/js/src/abstract/bitbns.js +6 -0
  428. package/js/src/abstract/bitfinex.js +6 -0
  429. package/js/src/abstract/bitflyer.js +6 -0
  430. package/js/src/abstract/bitget.js +6 -0
  431. package/js/src/abstract/bithumb.js +6 -0
  432. package/js/src/abstract/bitmart.js +6 -0
  433. package/js/src/abstract/bitmex.js +6 -0
  434. package/js/src/abstract/bitopro.js +6 -0
  435. package/js/src/abstract/bitrue.js +6 -0
  436. package/js/src/abstract/bitso.js +6 -0
  437. package/js/src/abstract/bitstamp.js +6 -0
  438. package/js/src/abstract/bitteam.js +6 -0
  439. package/js/src/abstract/bitvavo.js +6 -0
  440. package/js/src/abstract/bl3p.js +6 -0
  441. package/js/src/abstract/blockchaincom.js +6 -0
  442. package/js/src/abstract/blofin.js +6 -0
  443. package/js/src/abstract/btcalpha.js +6 -0
  444. package/js/src/abstract/btcbox.js +6 -0
  445. package/js/src/abstract/btcmarkets.js +6 -0
  446. package/js/src/abstract/btcturk.js +6 -0
  447. package/js/src/abstract/bybit.js +6 -0
  448. package/js/src/abstract/cex.js +6 -0
  449. package/js/src/abstract/coinbase.js +6 -0
  450. package/js/src/abstract/coinbaseadvanced.js +6 -0
  451. package/js/src/abstract/coinbaseexchange.js +6 -0
  452. package/js/src/abstract/coinbaseinternational.js +6 -0
  453. package/js/src/abstract/coincatch.js +6 -0
  454. package/js/src/abstract/coincheck.js +6 -0
  455. package/js/src/abstract/coinex.js +6 -0
  456. package/js/src/abstract/coinlist.js +6 -0
  457. package/js/src/abstract/coinmate.js +6 -0
  458. package/js/src/abstract/coinmetro.js +6 -0
  459. package/js/src/abstract/coinone.js +6 -0
  460. package/js/src/abstract/coinsph.js +6 -0
  461. package/js/src/abstract/coinspot.js +6 -0
  462. package/js/src/abstract/cryptocom.js +6 -0
  463. package/js/src/abstract/cryptomus.js +6 -0
  464. package/js/src/abstract/defx.js +6 -0
  465. package/js/src/abstract/delta.js +6 -0
  466. package/js/src/abstract/deribit.js +6 -0
  467. package/js/src/abstract/derive.js +6 -0
  468. package/js/src/abstract/digifinex.js +6 -0
  469. package/js/src/abstract/ellipx.js +6 -0
  470. package/js/src/abstract/exmo.js +6 -0
  471. package/js/src/abstract/fmfwio.js +6 -0
  472. package/js/src/abstract/gate.js +6 -0
  473. package/js/src/abstract/gateio.js +6 -0
  474. package/js/src/abstract/gemini.js +6 -0
  475. package/js/src/abstract/hashkey.js +6 -0
  476. package/js/src/abstract/hitbtc.js +6 -0
  477. package/js/src/abstract/hollaex.js +6 -0
  478. package/js/src/abstract/htx.js +6 -0
  479. package/js/src/abstract/huobi.js +6 -0
  480. package/js/src/abstract/huobijp.js +6 -0
  481. package/js/src/abstract/hyperliquid.js +6 -0
  482. package/js/src/abstract/idex.js +6 -0
  483. package/js/src/abstract/independentreserve.js +6 -0
  484. package/js/src/abstract/indodax.js +6 -0
  485. package/js/src/abstract/kraken.js +6 -0
  486. package/js/src/abstract/krakenfutures.js +6 -0
  487. package/js/src/abstract/kucoin.js +6 -0
  488. package/js/src/abstract/kucoinfutures.js +6 -0
  489. package/js/src/abstract/kuna.js +6 -0
  490. package/js/src/abstract/latoken.js +6 -0
  491. package/js/src/abstract/lbank.js +6 -0
  492. package/js/src/abstract/luno.js +6 -0
  493. package/js/src/abstract/mercado.js +6 -0
  494. package/js/src/abstract/mexc.js +6 -0
  495. package/js/src/abstract/myokx.js +6 -0
  496. package/js/src/abstract/ndax.js +6 -0
  497. package/js/src/abstract/novadax.js +6 -0
  498. package/js/src/abstract/oceanex.js +6 -0
  499. package/js/src/abstract/okcoin.js +6 -0
  500. package/js/src/abstract/okx.js +6 -0
  501. package/js/src/abstract/onetrading.js +6 -0
  502. package/js/src/abstract/oxfun.js +6 -0
  503. package/js/src/abstract/p2b.js +6 -0
  504. package/js/src/abstract/paradex.js +6 -0
  505. package/js/src/abstract/paymium.js +6 -0
  506. package/js/src/abstract/phemex.js +6 -0
  507. package/js/src/abstract/poloniex.js +6 -0
  508. package/js/src/abstract/probit.js +6 -0
  509. package/js/src/abstract/timex.js +6 -0
  510. package/js/src/abstract/tokocrypto.js +6 -0
  511. package/js/src/abstract/tradeogre.js +6 -0
  512. package/js/src/abstract/upbit.js +6 -0
  513. package/js/src/abstract/vertex.js +6 -0
  514. package/js/src/abstract/wavesexchange.js +6 -0
  515. package/js/src/abstract/whitebit.js +6 -0
  516. package/js/src/abstract/woo.js +6 -0
  517. package/js/src/abstract/woofipro.js +6 -0
  518. package/js/src/abstract/xt.js +6 -0
  519. package/js/src/abstract/yobit.js +6 -0
  520. package/js/src/abstract/zaif.js +6 -0
  521. package/js/src/abstract/zonda.js +6 -0
  522. package/js/src/alpaca.js +6 -0
  523. package/js/src/apex.d.ts +333 -0
  524. package/js/src/apex.js +1951 -0
  525. package/js/src/ascendex.d.ts +3 -3
  526. package/js/src/ascendex.js +6 -0
  527. package/js/src/base/Exchange.d.ts +2 -0
  528. package/js/src/base/Exchange.js +48 -1
  529. package/js/src/base/Precise.js +6 -0
  530. package/js/src/base/errorHierarchy.js +6 -0
  531. package/js/src/base/errors.js +6 -0
  532. package/js/src/base/functions/crypto.js +6 -0
  533. package/js/src/base/functions/encode.js +6 -0
  534. package/js/src/base/functions/generic.js +6 -0
  535. package/js/src/base/functions/misc.js +6 -0
  536. package/js/src/base/functions/number.js +6 -0
  537. package/js/src/base/functions/platform.js +6 -0
  538. package/js/src/base/functions/rsa.js +6 -0
  539. package/js/src/base/functions/string.js +6 -0
  540. package/js/src/base/functions/throttle.js +6 -0
  541. package/js/src/base/functions/time.js +6 -0
  542. package/js/src/base/functions/totp.js +6 -0
  543. package/js/src/base/functions/type.js +6 -0
  544. package/js/src/base/functions.js +6 -0
  545. package/js/src/base/types.js +6 -0
  546. package/js/src/base/ws/Cache.js +6 -0
  547. package/js/src/base/ws/Client.js +6 -0
  548. package/js/src/base/ws/Future.js +6 -0
  549. package/js/src/base/ws/OrderBook.js +6 -0
  550. package/js/src/base/ws/OrderBookSide.js +6 -0
  551. package/js/src/base/ws/WsClient.js +6 -0
  552. package/js/src/base/ws/functions.js +6 -0
  553. package/js/src/bequant.js +6 -0
  554. package/js/src/bigone.js +6 -0
  555. package/js/src/binance.d.ts +7 -7
  556. package/js/src/binance.js +7 -1
  557. package/js/src/binancecoinm.js +6 -0
  558. package/js/src/binanceus.js +6 -0
  559. package/js/src/binanceusdm.js +6 -0
  560. package/js/src/bingx.js +6 -0
  561. package/js/src/bit2c.js +6 -0
  562. package/js/src/bitbank.js +6 -0
  563. package/js/src/bitbns.js +6 -0
  564. package/js/src/bitfinex.d.ts +3 -3
  565. package/js/src/bitfinex.js +6 -0
  566. package/js/src/bitflyer.d.ts +2 -2
  567. package/js/src/bitflyer.js +6 -0
  568. package/js/src/bitget.d.ts +2 -0
  569. package/js/src/bitget.js +144 -70
  570. package/js/src/bithumb.js +6 -0
  571. package/js/src/bitmart.d.ts +4 -4
  572. package/js/src/bitmart.js +6 -0
  573. package/js/src/bitmex.d.ts +3 -3
  574. package/js/src/bitmex.js +10 -4
  575. package/js/src/bitopro.js +6 -0
  576. package/js/src/bitrue.js +6 -0
  577. package/js/src/bitso.js +6 -0
  578. package/js/src/bitstamp.js +6 -0
  579. package/js/src/bitteam.js +6 -0
  580. package/js/src/bitvavo.js +6 -0
  581. package/js/src/bl3p.js +6 -0
  582. package/js/src/blockchaincom.js +6 -0
  583. package/js/src/blofin.js +6 -0
  584. package/js/src/btcalpha.js +6 -0
  585. package/js/src/btcbox.js +6 -0
  586. package/js/src/btcmarkets.js +6 -0
  587. package/js/src/btcturk.js +6 -0
  588. package/js/src/bybit.js +6 -0
  589. package/js/src/cex.js +7 -1
  590. package/js/src/coinbase.d.ts +6 -4
  591. package/js/src/coinbase.js +38 -3
  592. package/js/src/coinbaseadvanced.js +6 -0
  593. package/js/src/coinbaseexchange.d.ts +1 -1
  594. package/js/src/coinbaseexchange.js +6 -0
  595. package/js/src/coinbaseinternational.js +6 -0
  596. package/js/src/coincatch.d.ts +11 -0
  597. package/js/src/coincatch.js +74 -0
  598. package/js/src/coincheck.js +6 -0
  599. package/js/src/coinex.js +6 -0
  600. package/js/src/coinlist.js +6 -0
  601. package/js/src/coinmate.js +6 -0
  602. package/js/src/coinmetro.js +6 -0
  603. package/js/src/coinone.js +6 -0
  604. package/js/src/coinsph.js +6 -0
  605. package/js/src/coinspot.js +6 -0
  606. package/js/src/cryptocom.d.ts +4 -4
  607. package/js/src/cryptocom.js +6 -0
  608. package/js/src/cryptomus.js +6 -0
  609. package/js/src/defx.js +6 -0
  610. package/js/src/delta.js +6 -0
  611. package/js/src/deribit.d.ts +4 -4
  612. package/js/src/deribit.js +6 -0
  613. package/js/src/derive.d.ts +3 -3
  614. package/js/src/derive.js +6 -0
  615. package/js/src/digifinex.d.ts +4 -4
  616. package/js/src/digifinex.js +6 -0
  617. package/js/src/ellipx.js +6 -0
  618. package/js/src/exmo.js +6 -0
  619. package/js/src/fmfwio.js +6 -0
  620. package/js/src/gate.js +6 -0
  621. package/js/src/gateio.js +6 -0
  622. package/js/src/gemini.js +6 -0
  623. package/js/src/hashkey.js +6 -0
  624. package/js/src/hitbtc.js +9 -0
  625. package/js/src/hollaex.js +6 -0
  626. package/js/src/htx.d.ts +4 -4
  627. package/js/src/htx.js +6 -0
  628. package/js/src/huobi.js +6 -0
  629. package/js/src/huobijp.js +6 -0
  630. package/js/src/hyperliquid.d.ts +1 -0
  631. package/js/src/hyperliquid.js +19 -4
  632. package/js/src/idex.js +6 -0
  633. package/js/src/independentreserve.js +6 -0
  634. package/js/src/indodax.js +6 -0
  635. package/js/src/kraken.d.ts +3 -3
  636. package/js/src/kraken.js +6 -0
  637. package/js/src/krakenfutures.d.ts +2 -2
  638. package/js/src/krakenfutures.js +6 -0
  639. package/js/src/kucoin.js +6 -0
  640. package/js/src/kucoinfutures.d.ts +5 -5
  641. package/js/src/kucoinfutures.js +6 -0
  642. package/js/src/kuna.js +6 -0
  643. package/js/src/latoken.js +6 -0
  644. package/js/src/lbank.js +6 -0
  645. package/js/src/luno.js +6 -0
  646. package/js/src/mercado.js +6 -0
  647. package/js/src/mexc.d.ts +1 -0
  648. package/js/src/mexc.js +56 -57
  649. package/js/src/myokx.js +6 -0
  650. package/js/src/ndax.js +6 -0
  651. package/js/src/novadax.js +6 -0
  652. package/js/src/oceanex.js +6 -0
  653. package/js/src/okcoin.js +6 -0
  654. package/js/src/okx.js +6 -0
  655. package/js/src/onetrading.js +6 -0
  656. package/js/src/oxfun.d.ts +3 -3
  657. package/js/src/oxfun.js +6 -0
  658. package/js/src/p2b.js +6 -0
  659. package/js/src/paradex.js +6 -0
  660. package/js/src/paymium.js +6 -0
  661. package/js/src/phemex.d.ts +3 -3
  662. package/js/src/phemex.js +8 -1
  663. package/js/src/poloniex.d.ts +3 -3
  664. package/js/src/poloniex.js +7 -1
  665. package/js/src/pro/alpaca.js +6 -0
  666. package/js/src/pro/apex.d.ts +160 -0
  667. package/js/src/pro/apex.js +1044 -0
  668. package/js/src/pro/ascendex.js +6 -0
  669. package/js/src/pro/bequant.js +6 -0
  670. package/js/src/pro/binance.js +6 -0
  671. package/js/src/pro/binancecoinm.js +6 -0
  672. package/js/src/pro/binanceus.js +6 -0
  673. package/js/src/pro/binanceusdm.js +6 -0
  674. package/js/src/pro/bingx.js +6 -0
  675. package/js/src/pro/bitfinex.js +6 -0
  676. package/js/src/pro/bitget.js +6 -0
  677. package/js/src/pro/bithumb.js +6 -0
  678. package/js/src/pro/bitmart.js +6 -0
  679. package/js/src/pro/bitmex.js +6 -0
  680. package/js/src/pro/bitopro.js +6 -0
  681. package/js/src/pro/bitrue.js +6 -0
  682. package/js/src/pro/bitstamp.js +6 -0
  683. package/js/src/pro/bitvavo.js +6 -0
  684. package/js/src/pro/blockchaincom.js +6 -0
  685. package/js/src/pro/blofin.js +6 -0
  686. package/js/src/pro/bybit.js +6 -0
  687. package/js/src/pro/cex.js +6 -0
  688. package/js/src/pro/coinbase.js +10 -8
  689. package/js/src/pro/coinbaseadvanced.js +6 -0
  690. package/js/src/pro/coinbaseexchange.js +6 -0
  691. package/js/src/pro/coinbaseinternational.js +6 -0
  692. package/js/src/pro/coincatch.js +6 -0
  693. package/js/src/pro/coincheck.js +6 -0
  694. package/js/src/pro/coinex.js +6 -0
  695. package/js/src/pro/coinone.js +6 -0
  696. package/js/src/pro/cryptocom.js +6 -0
  697. package/js/src/pro/defx.js +6 -0
  698. package/js/src/pro/deribit.js +6 -0
  699. package/js/src/pro/derive.js +6 -0
  700. package/js/src/pro/exmo.js +6 -0
  701. package/js/src/pro/gate.js +33 -2
  702. package/js/src/pro/gateio.js +6 -0
  703. package/js/src/pro/gemini.js +6 -0
  704. package/js/src/pro/hashkey.js +6 -0
  705. package/js/src/pro/hitbtc.js +6 -0
  706. package/js/src/pro/hollaex.js +8 -2
  707. package/js/src/pro/htx.js +6 -0
  708. package/js/src/pro/huobi.js +6 -0
  709. package/js/src/pro/huobijp.js +6 -0
  710. package/js/src/pro/hyperliquid.js +6 -0
  711. package/js/src/pro/idex.js +6 -0
  712. package/js/src/pro/independentreserve.js +6 -0
  713. package/js/src/pro/kraken.js +6 -0
  714. package/js/src/pro/krakenfutures.js +6 -0
  715. package/js/src/pro/kucoin.js +6 -0
  716. package/js/src/pro/kucoinfutures.js +6 -0
  717. package/js/src/pro/lbank.js +6 -0
  718. package/js/src/pro/luno.js +6 -0
  719. package/js/src/pro/mexc.js +6 -0
  720. package/js/src/pro/myokx.js +6 -0
  721. package/js/src/pro/ndax.js +6 -0
  722. package/js/src/pro/okcoin.js +6 -0
  723. package/js/src/pro/okx.js +6 -0
  724. package/js/src/pro/onetrading.js +6 -0
  725. package/js/src/pro/oxfun.js +6 -0
  726. package/js/src/pro/p2b.js +8 -2
  727. package/js/src/pro/paradex.js +6 -0
  728. package/js/src/pro/phemex.js +6 -0
  729. package/js/src/pro/poloniex.js +6 -0
  730. package/js/src/pro/probit.js +6 -0
  731. package/js/src/pro/tradeogre.d.ts +49 -0
  732. package/js/src/pro/tradeogre.js +284 -0
  733. package/js/src/pro/upbit.js +6 -0
  734. package/js/src/pro/vertex.js +6 -0
  735. package/js/src/pro/whitebit.js +6 -0
  736. package/js/src/pro/woo.js +6 -0
  737. package/js/src/pro/woofipro.js +6 -0
  738. package/js/src/pro/xt.js +6 -0
  739. package/js/src/probit.js +7 -0
  740. package/js/src/static_dependencies/ethers/abi-coder.js +6 -0
  741. package/js/src/static_dependencies/ethers/address/address.js +6 -0
  742. package/js/src/static_dependencies/ethers/address/checks.js +6 -0
  743. package/js/src/static_dependencies/ethers/address/contract-address.js +6 -0
  744. package/js/src/static_dependencies/ethers/address/index.js +6 -0
  745. package/js/src/static_dependencies/ethers/bytes32.js +6 -0
  746. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
  747. package/js/src/static_dependencies/ethers/coders/address.js +6 -0
  748. package/js/src/static_dependencies/ethers/coders/anonymous.js +6 -0
  749. package/js/src/static_dependencies/ethers/coders/array.js +6 -0
  750. package/js/src/static_dependencies/ethers/coders/boolean.js +6 -0
  751. package/js/src/static_dependencies/ethers/coders/bytes.js +6 -0
  752. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +6 -0
  753. package/js/src/static_dependencies/ethers/coders/null.js +6 -0
  754. package/js/src/static_dependencies/ethers/coders/number.js +6 -0
  755. package/js/src/static_dependencies/ethers/coders/string.js +6 -0
  756. package/js/src/static_dependencies/ethers/coders/tuple.js +6 -0
  757. package/js/src/static_dependencies/ethers/fragments.js +6 -0
  758. package/js/src/static_dependencies/ethers/hash/index.js +6 -0
  759. package/js/src/static_dependencies/ethers/hash/solidity.js +6 -0
  760. package/js/src/static_dependencies/ethers/hash/typed-data.js +6 -0
  761. package/js/src/static_dependencies/ethers/index.js +6 -0
  762. package/js/src/static_dependencies/ethers/interface.js +6 -0
  763. package/js/src/static_dependencies/ethers/typed.js +6 -0
  764. package/js/src/static_dependencies/ethers/utils/base58.js +6 -0
  765. package/js/src/static_dependencies/ethers/utils/base64-browser.js +6 -0
  766. package/js/src/static_dependencies/ethers/utils/base64.js +6 -0
  767. package/js/src/static_dependencies/ethers/utils/data.js +6 -0
  768. package/js/src/static_dependencies/ethers/utils/errors.js +6 -0
  769. package/js/src/static_dependencies/ethers/utils/events.js +6 -0
  770. package/js/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
  771. package/js/src/static_dependencies/ethers/utils/index.js +6 -0
  772. package/js/src/static_dependencies/ethers/utils/maths.js +6 -0
  773. package/js/src/static_dependencies/ethers/utils/properties.js +6 -0
  774. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +6 -0
  775. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +6 -0
  776. package/js/src/static_dependencies/ethers/utils/rlp.js +6 -0
  777. package/js/src/static_dependencies/ethers/utils/units.js +6 -0
  778. package/js/src/static_dependencies/ethers/utils/utf8.js +6 -0
  779. package/js/src/static_dependencies/ethers/utils/uuid.js +6 -0
  780. package/js/src/static_dependencies/fflake/browser.js +6 -0
  781. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +6 -0
  782. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +6 -0
  783. package/js/src/static_dependencies/jsencrypt/index.js +6 -0
  784. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +6 -0
  785. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
  786. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
  787. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
  788. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +6 -0
  789. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +6 -0
  790. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +6 -0
  791. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
  792. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +6 -0
  793. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +6 -0
  794. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
  795. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +6 -0
  796. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
  797. package/js/src/static_dependencies/messagepack/msgpack.js +6 -0
  798. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +6 -0
  799. package/js/src/static_dependencies/noble-curves/abstract/curve.js +6 -0
  800. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +6 -0
  801. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +6 -0
  802. package/js/src/static_dependencies/noble-curves/abstract/modular.js +6 -0
  803. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +6 -0
  804. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +6 -0
  805. package/js/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
  806. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +6 -0
  807. package/js/src/static_dependencies/noble-curves/bn.js +6 -0
  808. package/js/src/static_dependencies/noble-curves/ed25519.js +6 -0
  809. package/js/src/static_dependencies/noble-curves/ed448.js +6 -0
  810. package/js/src/static_dependencies/noble-curves/index.js +6 -0
  811. package/js/src/static_dependencies/noble-curves/jubjub.js +6 -0
  812. package/js/src/static_dependencies/noble-curves/p256.js +6 -0
  813. package/js/src/static_dependencies/noble-curves/p384.js +6 -0
  814. package/js/src/static_dependencies/noble-curves/p521.js +6 -0
  815. package/js/src/static_dependencies/noble-curves/pasta.js +6 -0
  816. package/js/src/static_dependencies/noble-curves/secp256k1.js +6 -0
  817. package/js/src/static_dependencies/noble-hashes/_assert.js +6 -0
  818. package/js/src/static_dependencies/noble-hashes/_blake2.js +6 -0
  819. package/js/src/static_dependencies/noble-hashes/_sha2.js +6 -0
  820. package/js/src/static_dependencies/noble-hashes/_u64.js +6 -0
  821. package/js/src/static_dependencies/noble-hashes/argon2.js +6 -0
  822. package/js/src/static_dependencies/noble-hashes/blake2b.js +6 -0
  823. package/js/src/static_dependencies/noble-hashes/blake2s.js +6 -0
  824. package/js/src/static_dependencies/noble-hashes/blake3.js +6 -0
  825. package/js/src/static_dependencies/noble-hashes/crypto.js +6 -0
  826. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +6 -0
  827. package/js/src/static_dependencies/noble-hashes/eskdf.js +6 -0
  828. package/js/src/static_dependencies/noble-hashes/hkdf.js +6 -0
  829. package/js/src/static_dependencies/noble-hashes/hmac.js +6 -0
  830. package/js/src/static_dependencies/noble-hashes/index.js +6 -0
  831. package/js/src/static_dependencies/noble-hashes/md5.js +6 -0
  832. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +6 -0
  833. package/js/src/static_dependencies/noble-hashes/ripemd160.js +6 -0
  834. package/js/src/static_dependencies/noble-hashes/scrypt.js +6 -0
  835. package/js/src/static_dependencies/noble-hashes/sha1.js +6 -0
  836. package/js/src/static_dependencies/noble-hashes/sha256.js +6 -0
  837. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +6 -0
  838. package/js/src/static_dependencies/noble-hashes/sha3.js +6 -0
  839. package/js/src/static_dependencies/noble-hashes/sha512.js +6 -0
  840. package/js/src/static_dependencies/noble-hashes/utils.js +6 -0
  841. package/js/src/static_dependencies/node-fetch/body.js +6 -0
  842. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +6 -0
  843. package/js/src/static_dependencies/node-fetch/errors/base.js +6 -0
  844. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +6 -0
  845. package/js/src/static_dependencies/node-fetch/headers.js +6 -0
  846. package/js/src/static_dependencies/node-fetch/index.js +6 -0
  847. package/js/src/static_dependencies/node-fetch/request.js +6 -0
  848. package/js/src/static_dependencies/node-fetch/response.js +6 -0
  849. package/js/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
  850. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
  851. package/js/src/static_dependencies/node-fetch/utils/is.js +6 -0
  852. package/js/src/static_dependencies/node-fetch/utils/referrer.js +6 -0
  853. package/js/src/static_dependencies/proxies/agent-base/helpers.js +6 -0
  854. package/js/src/static_dependencies/proxies/agent-base/index.js +6 -0
  855. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +6 -0
  856. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +6 -0
  857. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
  858. package/js/src/static_dependencies/qs/formats.cjs +6 -0
  859. package/js/src/static_dependencies/qs/index.cjs +6 -0
  860. package/js/src/static_dependencies/qs/parse.cjs +6 -0
  861. package/js/src/static_dependencies/qs/stringify.cjs +6 -0
  862. package/js/src/static_dependencies/qs/utils.cjs +6 -0
  863. package/js/src/static_dependencies/scure-base/index.js +6 -0
  864. package/js/src/static_dependencies/scure-starknet/index.js +6 -0
  865. package/js/src/static_dependencies/starknet/constants.js +6 -0
  866. package/js/src/static_dependencies/starknet/index.js +6 -0
  867. package/js/src/static_dependencies/starknet/types/cairoEnum.js +6 -0
  868. package/js/src/static_dependencies/starknet/types/calldata.js +6 -0
  869. package/js/src/static_dependencies/starknet/types/index.js +6 -0
  870. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
  871. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
  872. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +6 -0
  873. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +6 -0
  874. package/js/src/static_dependencies/starknet/types/lib/index.js +6 -0
  875. package/js/src/static_dependencies/starknet/types/typedData.js +6 -0
  876. package/js/src/static_dependencies/starknet/utils/address.js +6 -0
  877. package/js/src/static_dependencies/starknet/utils/assert.js +6 -0
  878. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +6 -0
  879. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +6 -0
  880. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +6 -0
  881. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +6 -0
  882. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +6 -0
  883. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
  884. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
  885. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
  886. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +6 -0
  887. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +6 -0
  888. package/js/src/static_dependencies/starknet/utils/calldata/index.js +6 -0
  889. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +6 -0
  890. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +6 -0
  891. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +6 -0
  892. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
  893. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +6 -0
  894. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +6 -0
  895. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +6 -0
  896. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +6 -0
  897. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +6 -0
  898. package/js/src/static_dependencies/starknet/utils/encode.js +6 -0
  899. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +6 -0
  900. package/js/src/static_dependencies/starknet/utils/hash/index.js +6 -0
  901. package/js/src/static_dependencies/starknet/utils/merkle.js +6 -0
  902. package/js/src/static_dependencies/starknet/utils/num.js +6 -0
  903. package/js/src/static_dependencies/starknet/utils/selector.js +6 -0
  904. package/js/src/static_dependencies/starknet/utils/shortString.js +6 -0
  905. package/js/src/static_dependencies/starknet/utils/starknetId.js +6 -0
  906. package/js/src/static_dependencies/starknet/utils/typedData.js +6 -0
  907. package/js/src/static_dependencies/starknet/utils/uint256.js +6 -0
  908. package/js/src/static_dependencies/starknet/utils/url.js +6 -0
  909. package/js/src/static_dependencies/watchable/src/index.js +6 -0
  910. package/js/src/static_dependencies/watchable/src/types.js +6 -0
  911. package/js/src/static_dependencies/watchable/src/unpromise.js +6 -0
  912. package/js/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  913. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  914. package/js/src/timex.js +6 -0
  915. package/js/src/tokocrypto.js +6 -0
  916. package/js/src/tradeogre.js +8 -1
  917. package/js/src/upbit.d.ts +34 -4
  918. package/js/src/upbit.js +241 -47
  919. package/js/src/vertex.d.ts +3 -3
  920. package/js/src/vertex.js +6 -0
  921. package/js/src/wavesexchange.js +6 -0
  922. package/js/src/whitebit.js +7 -0
  923. package/js/src/woo.d.ts +4 -4
  924. package/js/src/woo.js +9 -1
  925. package/js/src/woofipro.d.ts +4 -4
  926. package/js/src/woofipro.js +6 -0
  927. package/js/src/xt.d.ts +4 -4
  928. package/js/src/xt.js +15 -0
  929. package/js/src/yobit.js +6 -0
  930. package/js/src/zaif.js +6 -0
  931. package/js/src/zonda.js +6 -0
  932. package/package.json +2 -2
  933. package/js/src/abstract/ace.d.ts +0 -18
  934. package/js/src/abstract/ace.js +0 -5
  935. package/js/src/ace.d.ts +0 -158
  936. package/js/src/ace.js +0 -1175
@@ -0,0 +1,1044 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import apexRest from '../apex.js';
9
+ import { ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp } from '../base/ws/Cache.js';
10
+ import { ArgumentsRequired, AuthenticationError, ExchangeError } from '../base/errors.js';
11
+ import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
12
+ // ---------------------------------------------------------------------------
13
+ export default class apex extends apexRest {
14
+ describe() {
15
+ return this.deepExtend(super.describe(), {
16
+ 'has': {
17
+ 'ws': true,
18
+ 'watchTicker': true,
19
+ 'watchTickers': true,
20
+ 'watchOrderBook': true,
21
+ 'watchOrders': true,
22
+ 'watchTrades': true,
23
+ 'watchTradesForSymbols': false,
24
+ 'watchPositions': true,
25
+ 'watchMyTrades': true,
26
+ 'watchBalance': false,
27
+ 'watchOHLCV': true,
28
+ },
29
+ 'urls': {
30
+ 'logo': 'https://omni.apex.exchange/assets/logo_content-CY9uyFbz.svg',
31
+ 'api': {
32
+ 'ws': {
33
+ 'public': 'wss://quote.omni.apex.exchange/realtime_public?v=2',
34
+ 'private': 'wss://quote.omni.apex.exchange/realtime_private?v=2',
35
+ },
36
+ },
37
+ 'test': {
38
+ 'ws': {
39
+ 'public': 'wss://qa-quote.omni.apex.exchange/realtime_public?v=2',
40
+ 'private': 'wss://qa-quote.omni.apex.exchange/realtime_private?v=2',
41
+ },
42
+ },
43
+ 'www': 'https://apex.exchange/',
44
+ 'doc': 'https://api-docs.pro.apex.exchange',
45
+ 'fees': 'https://apex-pro.gitbook.io/apex-pro/apex-omni-live-now/trading-perpetual-contracts/trading-fees',
46
+ 'referral': 'https://omni.apex.exchange/trade',
47
+ },
48
+ 'options': {},
49
+ 'streaming': {
50
+ 'ping': this.ping,
51
+ 'keepAlive': 18000,
52
+ },
53
+ });
54
+ }
55
+ /**
56
+ * @method
57
+ * @name apex#watchTrades
58
+ * @description watches information on multiple trades made in a market
59
+ * @see https://api-docs.pro.apex.exchange/#websocket-v3-for-omni-websocket-endpoint
60
+ * @param {string} symbol unified market symbol of the market trades were made in
61
+ * @param {int} [since] the earliest time in ms to fetch trades for
62
+ * @param {int} [limit] the maximum number of trade structures to retrieve
63
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
64
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
65
+ */
66
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
67
+ return await this.watchTradesForSymbols([symbol], since, limit, params);
68
+ }
69
+ /**
70
+ * @method
71
+ * @name apex#watchTradesForSymbols
72
+ * @description get the list of most recent trades for a list of symbols
73
+ * @see https://api-docs.pro.apex.exchange/#websocket-v3-for-omni-websocket-endpoint
74
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
75
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
76
+ * @param {int} [limit] the maximum amount of trades to fetch
77
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
78
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
79
+ */
80
+ async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
81
+ await this.loadMarkets();
82
+ symbols = this.marketSymbols(symbols);
83
+ const symbolsLength = symbols.length;
84
+ if (symbolsLength === 0) {
85
+ throw new ArgumentsRequired(this.id + ' watchTradesForSymbols() requires a non-empty array of symbols');
86
+ }
87
+ const timeStamp = this.milliseconds().toString();
88
+ const url = this.urls['api']['ws']['public'] + '&timestamp=' + timeStamp;
89
+ const topics = [];
90
+ const messageHashes = [];
91
+ for (let i = 0; i < symbols.length; i++) {
92
+ const symbol = symbols[i];
93
+ const market = this.market(symbol);
94
+ const topic = 'recentlyTrade.H.' + market['id2'];
95
+ topics.push(topic);
96
+ const messageHash = 'trade:' + symbol;
97
+ messageHashes.push(messageHash);
98
+ }
99
+ const trades = await this.watchTopics(url, messageHashes, topics, params);
100
+ if (this.newUpdates) {
101
+ const first = this.safeValue(trades, 0);
102
+ const tradeSymbol = this.safeString(first, 'symbol');
103
+ limit = trades.getLimit(tradeSymbol, limit);
104
+ }
105
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
106
+ }
107
+ handleTrades(client, message) {
108
+ //
109
+ // {
110
+ // "topic": "recentlyTrade.H.BTCUSDT",
111
+ // "type": "snapshot",
112
+ // "ts": 1672304486868,
113
+ // "data": [
114
+ // {
115
+ // "T": 1672304486865,
116
+ // "s": "BTCUSDT",
117
+ // "S": "Buy",
118
+ // "v": "0.001",
119
+ // "p": "16578.50",
120
+ // "L": "PlusTick",
121
+ // "i": "20f43950-d8dd-5b31-9112-a178eb6023af",
122
+ // "BT": false
123
+ // }
124
+ // ]
125
+ // }
126
+ //
127
+ const data = this.safeValue(message, 'data', {});
128
+ const topic = this.safeString(message, 'topic');
129
+ const trades = data;
130
+ const parts = topic.split('.');
131
+ const marketId = this.safeString(parts, 2);
132
+ const market = this.safeMarket(marketId, undefined, undefined);
133
+ const symbol = market['symbol'];
134
+ let stored = this.safeValue(this.trades, symbol);
135
+ if (stored === undefined) {
136
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
137
+ stored = new ArrayCache(limit);
138
+ this.trades[symbol] = stored;
139
+ }
140
+ for (let j = 0; j < trades.length; j++) {
141
+ const parsed = this.parseWsTrade(trades[j], market);
142
+ stored.append(parsed);
143
+ }
144
+ const messageHash = 'trade' + ':' + symbol;
145
+ client.resolve(stored, messageHash);
146
+ }
147
+ parseWsTrade(trade, market = undefined) {
148
+ //
149
+ // public
150
+ // {
151
+ // "T": 1672304486865,
152
+ // "s": "BTCUSDT",
153
+ // "S": "Buy",
154
+ // "v": "0.001",
155
+ // "p": "16578.50",
156
+ // "L": "PlusTick",
157
+ // "i": "20f43950-d8dd-5b31-9112-a178eb6023af",
158
+ // "BT": false
159
+ // }
160
+ //
161
+ const id = this.safeStringN(trade, ['i', 'id', 'v']);
162
+ const marketId = this.safeStringN(trade, ['s', 'symbol']);
163
+ market = this.safeMarket(marketId, market, undefined);
164
+ const symbol = market['symbol'];
165
+ const timestamp = this.safeIntegerN(trade, ['t', 'T', 'createdAt']);
166
+ const side = this.safeStringLowerN(trade, ['S', 'side']);
167
+ const price = this.safeStringN(trade, ['p', 'price']);
168
+ const amount = this.safeStringN(trade, ['q', 'v', 'size']);
169
+ return this.safeTrade({
170
+ 'id': id,
171
+ 'info': trade,
172
+ 'timestamp': timestamp,
173
+ 'datetime': this.iso8601(timestamp),
174
+ 'symbol': symbol,
175
+ 'order': undefined,
176
+ 'type': undefined,
177
+ 'side': side,
178
+ 'takerOrMaker': undefined,
179
+ 'price': price,
180
+ 'amount': amount,
181
+ 'cost': undefined,
182
+ 'fee': undefined,
183
+ }, market);
184
+ }
185
+ /**
186
+ * @method
187
+ * @name apex#watchOrderBook
188
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
189
+ * @see https://api-docs.pro.apex.exchange/#websocket-v3-for-omni-websocket-endpoint
190
+ * @param {string} symbol unified symbol of the market to fetch the order book for
191
+ * @param {int} [limit] the maximum amount of order book entries to return.
192
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
193
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
194
+ */
195
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
196
+ return await this.watchOrderBookForSymbols([symbol], limit, params);
197
+ }
198
+ /**
199
+ * @method
200
+ * @name apex#watchOrderBookForSymbols
201
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
202
+ * @see https://api-docs.pro.apex.exchange/#websocket-v3-for-omni-websocket-endpoint
203
+ * @param {string[]} symbols unified array of symbols
204
+ * @param {int} [limit] the maximum amount of order book entries to return.
205
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
206
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
207
+ */
208
+ async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
209
+ await this.loadMarkets();
210
+ const symbolsLength = symbols.length;
211
+ if (symbolsLength === 0) {
212
+ throw new ArgumentsRequired(this.id + ' watchOrderBookForSymbols() requires a non-empty array of symbols');
213
+ }
214
+ symbols = this.marketSymbols(symbols);
215
+ const timeStamp = this.milliseconds().toString();
216
+ const url = this.urls['api']['ws']['public'] + '&timestamp=' + timeStamp;
217
+ const topics = [];
218
+ const messageHashes = [];
219
+ for (let i = 0; i < symbols.length; i++) {
220
+ const symbol = symbols[i];
221
+ const market = this.market(symbol);
222
+ if (limit === undefined) {
223
+ limit = 25;
224
+ }
225
+ const topic = 'orderBook' + limit.toString() + '.H.' + market['id2'];
226
+ topics.push(topic);
227
+ const messageHash = 'orderbook:' + symbol;
228
+ messageHashes.push(messageHash);
229
+ }
230
+ const orderbook = await this.watchTopics(url, messageHashes, topics, params);
231
+ return orderbook.limit();
232
+ }
233
+ async watchTopics(url, messageHashes, topics, params = {}) {
234
+ const request = {
235
+ 'op': 'subscribe',
236
+ 'args': topics,
237
+ };
238
+ const message = this.extend(request, params);
239
+ return await this.watchMultiple(url, messageHashes, message, messageHashes);
240
+ }
241
+ handleOrderBook(client, message) {
242
+ //
243
+ // {
244
+ // "topic": "orderbook25.H.BTCUSDT",
245
+ // "type": "snapshot",
246
+ // "ts": 1672304484978,
247
+ // "data": {
248
+ // "s": "BTCUSDT",
249
+ // "b": [
250
+ // ...,
251
+ // [
252
+ // "16493.50",
253
+ // "0.006"
254
+ // ],
255
+ // [
256
+ // "16493.00",
257
+ // "0.100"
258
+ // ]
259
+ // ],
260
+ // "a": [
261
+ // [
262
+ // "16611.00",
263
+ // "0.029"
264
+ // ],
265
+ // [
266
+ // "16612.00",
267
+ // "0.213"
268
+ // ],
269
+ // ],
270
+ // "u": 18521288,
271
+ // "seq": 7961638724
272
+ // }
273
+ // }
274
+ //
275
+ const type = this.safeString(message, 'type');
276
+ const isSnapshot = (type === 'snapshot');
277
+ const data = this.safeDict(message, 'data', {});
278
+ const marketId = this.safeString(data, 's');
279
+ const market = this.safeMarket(marketId, undefined, undefined);
280
+ const symbol = market['symbol'];
281
+ const timestamp = this.safeIntegerProduct(message, 'ts', 0.001);
282
+ if (!(symbol in this.orderbooks)) {
283
+ this.orderbooks[symbol] = this.orderBook();
284
+ }
285
+ const orderbook = this.orderbooks[symbol];
286
+ if (isSnapshot) {
287
+ const snapshot = this.parseOrderBook(data, symbol, timestamp, 'b', 'a');
288
+ orderbook.reset(snapshot);
289
+ }
290
+ else {
291
+ const asks = this.safeList(data, 'a', []);
292
+ const bids = this.safeList(data, 'b', []);
293
+ this.handleDeltas(orderbook['asks'], asks);
294
+ this.handleDeltas(orderbook['bids'], bids);
295
+ orderbook['timestamp'] = timestamp;
296
+ orderbook['datetime'] = this.iso8601(timestamp);
297
+ }
298
+ const messageHash = 'orderbook' + ':' + symbol;
299
+ this.orderbooks[symbol] = orderbook;
300
+ client.resolve(orderbook, messageHash);
301
+ }
302
+ handleDelta(bookside, delta) {
303
+ const bidAsk = this.parseBidAsk(delta, 0, 1);
304
+ bookside.storeArray(bidAsk);
305
+ }
306
+ handleDeltas(bookside, deltas) {
307
+ for (let i = 0; i < deltas.length; i++) {
308
+ this.handleDelta(bookside, deltas[i]);
309
+ }
310
+ }
311
+ /**
312
+ * @method
313
+ * @name apex#watchTicker
314
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
315
+ * @see https://api-docs.pro.apex.exchange/#websocket-v3-for-omni-websocket-endpoint
316
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
317
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
318
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
319
+ */
320
+ async watchTicker(symbol, params = {}) {
321
+ await this.loadMarkets();
322
+ const market = this.market(symbol);
323
+ symbol = market['symbol'];
324
+ const timeStamp = this.milliseconds().toString();
325
+ const url = this.urls['api']['ws']['public'] + '&timestamp=' + timeStamp;
326
+ const messageHash = 'ticker:' + symbol;
327
+ const topic = 'instrumentInfo' + '.H.' + market['id2'];
328
+ const topics = [topic];
329
+ return await this.watchTopics(url, [messageHash], topics, params);
330
+ }
331
+ /**
332
+ * @method
333
+ * @name apex#watchTickers
334
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
335
+ * @see https://api-docs.pro.apex.exchange/#websocket-v3-for-omni-websocket-endpoint
336
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
337
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
338
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
339
+ */
340
+ async watchTickers(symbols = undefined, params = {}) {
341
+ await this.loadMarkets();
342
+ symbols = this.marketSymbols(symbols, undefined, false);
343
+ const messageHashes = [];
344
+ const timeStamp = this.milliseconds().toString();
345
+ const url = this.urls['api']['ws']['public'] + '&timestamp=' + timeStamp;
346
+ const topics = [];
347
+ for (let i = 0; i < symbols.length; i++) {
348
+ const symbol = symbols[i];
349
+ const market = this.market(symbol);
350
+ const topic = 'instrumentInfo' + '.H.' + market['id2'];
351
+ topics.push(topic);
352
+ const messageHash = 'ticker:' + symbol;
353
+ messageHashes.push(messageHash);
354
+ }
355
+ const ticker = await this.watchTopics(url, messageHashes, topics, params);
356
+ if (this.newUpdates) {
357
+ const result = {};
358
+ result[ticker['symbol']] = ticker;
359
+ return result;
360
+ }
361
+ return this.filterByArray(this.tickers, 'symbol', symbols);
362
+ }
363
+ handleTicker(client, message) {
364
+ // "topic":"instrumentInfo.H.BTCUSDT",
365
+ // "type":"snapshot",
366
+ // "data":{
367
+ // "symbol":"BTCUSDT",
368
+ // "lastPrice":"21572.5",
369
+ // "price24hPcnt":"-0.0194318181818182",
370
+ // "highPrice24h":"25306.5",
371
+ // "lowPrice24h":"17001.5",
372
+ // "turnover24h":"1334891.4545",
373
+ // "volume24h":"64.896",
374
+ // "nextFundingTime":"2022-08-26T08:00:00Z",
375
+ // "oraclePrice":"21412.060000000002752512",
376
+ // "indexPrice":"21409.82",
377
+ // "openInterest":"49.598",
378
+ // "tradeCount":"0",
379
+ // "fundingRate":"0.0000125",
380
+ // "predictedFundingRate":"0.0000125"
381
+ // },
382
+ // "cs":44939063,
383
+ // "ts":1661500091955487
384
+ // }
385
+ const topic = this.safeString(message, 'topic', '');
386
+ const updateType = this.safeString(message, 'type', '');
387
+ const data = this.safeDict(message, 'data', {});
388
+ let symbol = undefined;
389
+ let parsed = undefined;
390
+ if ((updateType === 'snapshot')) {
391
+ parsed = this.parseTicker(data);
392
+ symbol = parsed['symbol'];
393
+ }
394
+ else if (updateType === 'delta') {
395
+ const topicParts = topic.split('.');
396
+ const topicLength = topicParts.length;
397
+ const marketId = this.safeString(topicParts, topicLength - 1);
398
+ const market = this.safeMarket(marketId, undefined, undefined);
399
+ symbol = market['symbol'];
400
+ const ticker = this.safeDict(this.tickers, symbol, {});
401
+ const rawTicker = this.safeDict(ticker, 'info', {});
402
+ const merged = this.extend(rawTicker, data);
403
+ parsed = this.parseTicker(merged);
404
+ }
405
+ const timestamp = this.safeIntegerProduct(message, 'ts', 0.001);
406
+ parsed['timestamp'] = timestamp;
407
+ parsed['datetime'] = this.iso8601(timestamp);
408
+ this.tickers[symbol] = parsed;
409
+ const messageHash = 'ticker:' + symbol;
410
+ client.resolve(this.tickers[symbol], messageHash);
411
+ }
412
+ /**
413
+ * @method
414
+ * @name apex#watchOHLCV
415
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
416
+ * @see https://api-docs.pro.apex.exchange/#websocket-v3-for-omni-websocket-endpoint
417
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
418
+ * @param {string} timeframe the length of time each candle represents
419
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
420
+ * @param {int} [limit] the maximum amount of candles to fetch
421
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
422
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
423
+ */
424
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
425
+ params['callerMethodName'] = 'watchOHLCV';
426
+ const result = await this.watchOHLCVForSymbols([[symbol, timeframe]], since, limit, params);
427
+ return result[symbol][timeframe];
428
+ }
429
+ /**
430
+ * @method
431
+ * @name apex#watchOHLCVForSymbols
432
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
433
+ * @see https://api-docs.pro.apex.exchange/#websocket-v3-for-omni-websocket-endpoint
434
+ * @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
435
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
436
+ * @param {int} [limit] the maximum amount of candles to fetch
437
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
438
+ * @returns {object} A list of candles ordered as timestamp, open, high, low, close, volume
439
+ */
440
+ async watchOHLCVForSymbols(symbolsAndTimeframes, since = undefined, limit = undefined, params = {}) {
441
+ await this.loadMarkets();
442
+ const timeStamp = this.milliseconds().toString();
443
+ const url = this.urls['api']['ws']['public'] + '&timestamp=' + timeStamp;
444
+ const rawHashes = [];
445
+ const messageHashes = [];
446
+ for (let i = 0; i < symbolsAndTimeframes.length; i++) {
447
+ const data = symbolsAndTimeframes[i];
448
+ let symbolString = this.safeString(data, 0);
449
+ const market = this.market(symbolString);
450
+ symbolString = market['id2'];
451
+ const unfiedTimeframe = this.safeString(data, 1, '1');
452
+ const timeframeId = this.safeString(this.timeframes, unfiedTimeframe, unfiedTimeframe);
453
+ rawHashes.push('candle.' + timeframeId + '.' + symbolString);
454
+ messageHashes.push('ohlcv::' + symbolString + '::' + unfiedTimeframe);
455
+ }
456
+ const [symbol, timeframe, stored] = await this.watchTopics(url, messageHashes, rawHashes, params);
457
+ if (this.newUpdates) {
458
+ limit = stored.getLimit(symbol, limit);
459
+ }
460
+ const filtered = this.filterBySinceLimit(stored, since, limit, 0, true);
461
+ return this.createOHLCVObject(symbol, timeframe, filtered);
462
+ }
463
+ handleOHLCV(client, message) {
464
+ //
465
+ // {
466
+ // "topic": "candle.5.BTCUSDT",
467
+ // "data": [
468
+ // {
469
+ // "start": 1672324800000,
470
+ // "end": 1672325099999,
471
+ // "interval": "5",
472
+ // "open": "16649.5",
473
+ // "close": "16677",
474
+ // "high": "16677",
475
+ // "low": "16608",
476
+ // "volume": "2.081",
477
+ // "turnover": "34666.4005",
478
+ // "confirm": false,
479
+ // "timestamp": 1672324988882
480
+ // }
481
+ // ],
482
+ // "ts": 1672324988882,
483
+ // "type": "snapshot"
484
+ // }
485
+ //
486
+ const data = this.safeValue(message, 'data', {});
487
+ const topic = this.safeString(message, 'topic');
488
+ const topicParts = topic.split('.');
489
+ const topicLength = topicParts.length;
490
+ const timeframeId = this.safeString(topicParts, 1);
491
+ const timeframe = this.findTimeframe(timeframeId);
492
+ const marketId = this.safeString(topicParts, topicLength - 1);
493
+ const isSpot = client.url.indexOf('spot') > -1;
494
+ const marketType = isSpot ? 'spot' : 'contract';
495
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
496
+ const symbol = market['symbol'];
497
+ const ohlcvsByTimeframe = this.safeValue(this.ohlcvs, symbol);
498
+ if (ohlcvsByTimeframe === undefined) {
499
+ this.ohlcvs[symbol] = {};
500
+ }
501
+ if (this.safeValue(ohlcvsByTimeframe, timeframe) === undefined) {
502
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
503
+ this.ohlcvs[symbol][timeframe] = new ArrayCacheByTimestamp(limit);
504
+ }
505
+ const stored = this.ohlcvs[symbol][timeframe];
506
+ for (let i = 0; i < data.length; i++) {
507
+ const parsed = this.parseWsOHLCV(data[i]);
508
+ stored.append(parsed);
509
+ }
510
+ const messageHash = 'ohlcv::' + symbol + '::' + timeframe;
511
+ const resolveData = [symbol, timeframe, stored];
512
+ client.resolve(resolveData, messageHash);
513
+ }
514
+ parseWsOHLCV(ohlcv, market = undefined) {
515
+ //
516
+ // {
517
+ // "start": 1670363160000,
518
+ // "end": 1670363219999,
519
+ // "interval": "1",
520
+ // "open": "16987.5",
521
+ // "close": "16987.5",
522
+ // "high": "16988",
523
+ // "low": "16987.5",
524
+ // "volume": "23.511",
525
+ // "turnover": "399396.344",
526
+ // "confirm": false,
527
+ // "timestamp": 1670363219614
528
+ // }
529
+ //
530
+ return [
531
+ this.safeInteger(ohlcv, 'start'),
532
+ this.safeNumber(ohlcv, 'open'),
533
+ this.safeNumber(ohlcv, 'high'),
534
+ this.safeNumber(ohlcv, 'low'),
535
+ this.safeNumber(ohlcv, 'close'),
536
+ this.safeNumber2(ohlcv, 'volume', 'turnover'),
537
+ ];
538
+ }
539
+ /**
540
+ * @method
541
+ * @name apex#watchMyTrades
542
+ * @description watches information on multiple trades made by the user
543
+ * @see https://api-docs.pro.apex.exchange/#private-websocket
544
+ * @param {string} symbol unified market symbol of the market orders were made in
545
+ * @param {int} [since] the earliest time in ms to fetch orders for
546
+ * @param {int} [limit] the maximum number of order structures to retrieve
547
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
548
+ * @param {boolean} [params.unifiedMargin] use unified margin account
549
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
550
+ */
551
+ async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
552
+ let messageHash = 'myTrades';
553
+ await this.loadMarkets();
554
+ if (symbol !== undefined) {
555
+ symbol = this.symbol(symbol);
556
+ messageHash += ':' + symbol;
557
+ }
558
+ const timeStamp = this.milliseconds().toString();
559
+ const url = this.urls['api']['ws']['private'] + '&timestamp=' + timeStamp;
560
+ await this.authenticate(url);
561
+ const trades = await this.watchTopics(url, [messageHash], ['myTrades'], params);
562
+ if (this.newUpdates) {
563
+ limit = trades.getLimit(symbol, limit);
564
+ }
565
+ return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
566
+ }
567
+ /**
568
+ * @method
569
+ * @name apex#watchPositions
570
+ * @see https://api-docs.pro.apex.exchange/#private-websocket
571
+ * @description watch all open positions
572
+ * @param {string[]} [symbols] list of unified market symbols
573
+ * @param {int} [since] the earliest time in ms to fetch positions for
574
+ * @param {int} [limit] the maximum number of positions to retrieve
575
+ * @param {object} params extra parameters specific to the exchange API endpoint
576
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
577
+ */
578
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
579
+ await this.loadMarkets();
580
+ let messageHash = '';
581
+ if (!this.isEmpty(symbols)) {
582
+ symbols = this.marketSymbols(symbols);
583
+ messageHash = '::' + symbols.join(',');
584
+ }
585
+ const timeStamp = this.milliseconds().toString();
586
+ const url = this.urls['api']['ws']['private'] + '&timestamp=' + timeStamp;
587
+ messageHash = 'positions' + messageHash;
588
+ const client = this.client(url);
589
+ await this.authenticate(url);
590
+ this.setPositionsCache(client, symbols);
591
+ const cache = this.positions;
592
+ if (cache === undefined) {
593
+ const snapshot = await client.future('fetchPositionsSnapshot');
594
+ return this.filterBySymbolsSinceLimit(snapshot, symbols, since, limit, true);
595
+ }
596
+ const topics = ['positions'];
597
+ const newPositions = await this.watchTopics(url, [messageHash], topics, params);
598
+ if (this.newUpdates) {
599
+ return newPositions;
600
+ }
601
+ return this.filterBySymbolsSinceLimit(cache, symbols, since, limit, true);
602
+ }
603
+ /**
604
+ * @method
605
+ * @name apex#watchOrders
606
+ * @description watches information on multiple orders made by the user
607
+ * @see https://api-docs.pro.apex.exchange/#private-websocket
608
+ * @param {string} symbol unified market symbol of the market orders were made in
609
+ * @param {int} [since] the earliest time in ms to fetch orders for
610
+ * @param {int} [limit] the maximum number of order structures to retrieve
611
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
612
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
613
+ */
614
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
615
+ await this.loadMarkets();
616
+ let messageHash = 'orders';
617
+ if (symbol !== undefined) {
618
+ symbol = this.symbol(symbol);
619
+ messageHash += ':' + symbol;
620
+ }
621
+ const timeStamp = this.milliseconds().toString();
622
+ const url = this.urls['api']['ws']['private'] + '&timestamp=' + timeStamp;
623
+ await this.authenticate(url);
624
+ const topics = ['orders'];
625
+ const orders = await this.watchTopics(url, [messageHash], topics, params);
626
+ if (this.newUpdates) {
627
+ limit = orders.getLimit(symbol, limit);
628
+ }
629
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
630
+ }
631
+ handleMyTrades(client, lists) {
632
+ // [
633
+ // {
634
+ // "symbol":"ETH-USDT",
635
+ // "side":"BUY",
636
+ // "orderId":"2048046080",
637
+ // "fee":"0.625000",
638
+ // "liquidity":"TAKER",
639
+ // "accountId":"1024000",
640
+ // "createdAt":1652185521361,
641
+ // "isOpen":true,
642
+ // "size":"0.500",
643
+ // "price":"2500.0",
644
+ // "quoteAmount":"1250.0000",
645
+ // "id":"2048000182272",
646
+ // "updatedAt":1652185678345
647
+ // }
648
+ // ]
649
+ if (this.myTrades === undefined) {
650
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
651
+ this.myTrades = new ArrayCacheBySymbolById(limit);
652
+ }
653
+ const trades = this.myTrades;
654
+ const symbols = {};
655
+ for (let i = 0; i < lists.length; i++) {
656
+ const rawTrade = lists[i];
657
+ let parsed = undefined;
658
+ parsed = this.parseWsTrade(rawTrade);
659
+ const symbol = parsed['symbol'];
660
+ symbols[symbol] = true;
661
+ trades.append(parsed);
662
+ }
663
+ const keys = Object.keys(symbols);
664
+ for (let i = 0; i < keys.length; i++) {
665
+ const currentMessageHash = 'myTrades:' + keys[i];
666
+ client.resolve(trades, currentMessageHash);
667
+ }
668
+ // non-symbol specific
669
+ const messageHash = 'myTrades';
670
+ client.resolve(trades, messageHash);
671
+ }
672
+ handleOrder(client, lists) {
673
+ // [
674
+ // {
675
+ // "symbol":"ETH-USDT",
676
+ // "cumSuccessFillFee":"0.625000",
677
+ // "trailingPercent":"0",
678
+ // "type":"LIMIT",
679
+ // "unfillableAt":1654779600000,
680
+ // "isDeleverage":false,
681
+ // "createdAt":1652185521339,
682
+ // "price":"2500.0",
683
+ // "cumSuccessFillValue":"0",
684
+ // "id":"2048046080",
685
+ // "cancelReason":"",
686
+ // "timeInForce":1,
687
+ // "updatedAt":1652185521392,
688
+ // "limitFee":"0.625000",
689
+ // "side":"BUY",
690
+ // "clientOrderId":"522843990",
691
+ // "triggerPrice":"",
692
+ // "expiresAt":1654779600000,
693
+ // "cumSuccessFillSize":"0",
694
+ // "accountId":"1024000",
695
+ // "size":"0.500",
696
+ // "reduceOnly":false,
697
+ // "isLiquidate":false,
698
+ // "remainingSize":"0.000",
699
+ // "status":"PENDING"
700
+ // }
701
+ // ]
702
+ if (this.orders === undefined) {
703
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
704
+ this.orders = new ArrayCacheBySymbolById(limit);
705
+ }
706
+ const orders = this.orders;
707
+ const symbols = {};
708
+ for (let i = 0; i < lists.length; i++) {
709
+ let parsed = undefined;
710
+ parsed = this.parseOrder(lists[i]);
711
+ const symbol = parsed['symbol'];
712
+ symbols[symbol] = true;
713
+ orders.append(parsed);
714
+ }
715
+ const symbolsArray = Object.keys(symbols);
716
+ for (let i = 0; i < symbolsArray.length; i++) {
717
+ const currentMessageHash = 'orders:' + symbolsArray[i];
718
+ client.resolve(orders, currentMessageHash);
719
+ }
720
+ const messageHash = 'orders';
721
+ client.resolve(orders, messageHash);
722
+ }
723
+ setPositionsCache(client, symbols = undefined) {
724
+ if (this.positions !== undefined) {
725
+ return;
726
+ }
727
+ const messageHash = 'fetchPositionsSnapshot';
728
+ if (!(messageHash in client.futures)) {
729
+ client.future(messageHash);
730
+ this.spawn(this.loadPositionsSnapshot, client, messageHash);
731
+ }
732
+ }
733
+ async loadPositionsSnapshot(client, messageHash) {
734
+ // as only one ws channel gives positions for all types, for snapshot must load all positions
735
+ const fetchFunctions = [
736
+ this.fetchPositions(undefined),
737
+ ];
738
+ const promises = await Promise.all(fetchFunctions);
739
+ this.positions = new ArrayCacheBySymbolBySide();
740
+ const cache = this.positions;
741
+ for (let i = 0; i < promises.length; i++) {
742
+ const positions = promises[i];
743
+ for (let ii = 0; ii < positions.length; ii++) {
744
+ const position = positions[ii];
745
+ cache.append(position);
746
+ }
747
+ }
748
+ // don't remove the future from the .futures cache
749
+ const future = client.futures[messageHash];
750
+ future.resolve(cache);
751
+ client.resolve(cache, 'positions');
752
+ }
753
+ handlePositions(client, lists) {
754
+ //
755
+ // [
756
+ // {
757
+ // "symbol":"ETH-USDT",
758
+ // "exitPrice":"0",
759
+ // "side":"LONG",
760
+ // "maxSize":"2820.000",
761
+ // "sumOpen":"1.820",
762
+ // "sumClose":"0.000",
763
+ // "netFunding":"0.000000",
764
+ // "entryPrice":"2500.000000000000000000",
765
+ // "accountId":"1024000",
766
+ // "createdAt":1652179377769,
767
+ // "size":"1.820",
768
+ // "realizedPnl":"0",
769
+ // "closedAt":1652185521392,
770
+ // "updatedAt":1652185521392
771
+ // }
772
+ // ]
773
+ //
774
+ // each account is connected to a different endpoint
775
+ // and has exactly one subscriptionhash which is the account type
776
+ if (this.positions === undefined) {
777
+ this.positions = new ArrayCacheBySymbolBySide();
778
+ }
779
+ const cache = this.positions;
780
+ const newPositions = [];
781
+ for (let i = 0; i < lists.length; i++) {
782
+ const rawPosition = lists[i];
783
+ const position = this.parsePosition(rawPosition);
784
+ const side = this.safeString(position, 'side');
785
+ // hacky solution to handle closing positions
786
+ // without crashing, we should handle this properly later
787
+ newPositions.push(position);
788
+ if (side === undefined || side === '') {
789
+ // closing update, adding both sides to "reset" both sides
790
+ // since we don't know which side is being closed
791
+ position['side'] = 'long';
792
+ cache.append(position);
793
+ position['side'] = 'short';
794
+ cache.append(position);
795
+ position['side'] = undefined;
796
+ }
797
+ else {
798
+ // regular update
799
+ cache.append(position);
800
+ }
801
+ }
802
+ const messageHashes = this.findMessageHashes(client, 'positions::');
803
+ for (let i = 0; i < messageHashes.length; i++) {
804
+ const messageHash = messageHashes[i];
805
+ const parts = messageHash.split('::');
806
+ const symbolsString = parts[1];
807
+ const symbols = symbolsString.split(',');
808
+ const positions = this.filterByArray(newPositions, 'symbol', symbols, false);
809
+ if (!this.isEmpty(positions)) {
810
+ client.resolve(positions, messageHash);
811
+ }
812
+ }
813
+ client.resolve(newPositions, 'positions');
814
+ }
815
+ async authenticate(url, params = {}) {
816
+ this.checkRequiredCredentials();
817
+ const timestamp = this.milliseconds().toString();
818
+ const request_path = '/ws/accounts';
819
+ const http_method = 'GET';
820
+ const messageString = (timestamp + http_method + request_path);
821
+ const signature = this.hmac(this.encode(messageString), this.encode(this.stringToBase64(this.secret)), sha256, 'base64');
822
+ const messageHash = 'authenticated';
823
+ const client = this.client(url);
824
+ const future = client.future(messageHash);
825
+ const authenticated = this.safeValue(client.subscriptions, messageHash);
826
+ if (authenticated === undefined) {
827
+ // auth sign
828
+ const request = {
829
+ 'type': 'login',
830
+ 'topics': ['ws_zk_accounts_v3'],
831
+ 'httpMethod': http_method,
832
+ 'requestPath': request_path,
833
+ 'apiKey': this.apiKey,
834
+ 'passphrase': this.password,
835
+ 'timestamp': timestamp,
836
+ 'signature': signature,
837
+ };
838
+ const message = {
839
+ 'op': 'login',
840
+ 'args': [JSON.stringify(request)],
841
+ };
842
+ this.watch(url, messageHash, message, messageHash);
843
+ }
844
+ return await future;
845
+ }
846
+ handleErrorMessage(client, message) {
847
+ //
848
+ // {
849
+ // "success": false,
850
+ // "ret_msg": "error:invalid op",
851
+ // "conn_id": "5e079fdd-9c7f-404d-9dbf-969d650838b5",
852
+ // "request": { op: '', args: null }
853
+ // }
854
+ //
855
+ // auth error
856
+ //
857
+ // {
858
+ // "success": false,
859
+ // "ret_msg": "error:USVC1111",
860
+ // "conn_id": "e73770fb-a0dc-45bd-8028-140e20958090",
861
+ // "request": {
862
+ // "op": "auth",
863
+ // "args": [
864
+ // "9rFT6uR4uz9Imkw4Wx",
865
+ // "1653405853543",
866
+ // "542e71bd85597b4db0290f0ce2d13ed1fd4bb5df3188716c1e9cc69a879f7889"
867
+ // ]
868
+ // }
869
+ //
870
+ // { code: '-10009', desc: "Invalid period!" }
871
+ //
872
+ // {
873
+ // "reqId":"1",
874
+ // "retCode":170131,
875
+ // "retMsg":"Insufficient balance.",
876
+ // "op":"order.create",
877
+ // "data":{
878
+ //
879
+ // },
880
+ // "header":{
881
+ // "X-Bapi-Limit":"20",
882
+ // "X-Bapi-Limit-Status":"19",
883
+ // "X-Bapi-Limit-Reset-Timestamp":"1714236608944",
884
+ // "Traceid":"3d7168a137bf32a947b7e5e6a575ac7f",
885
+ // "Timenow":"1714236608946"
886
+ // },
887
+ // "connId":"cojifin88smerbj9t560-406"
888
+ // }
889
+ //
890
+ const code = this.safeStringN(message, ['code', 'ret_code', 'retCode']);
891
+ try {
892
+ if (code !== undefined && code !== '0') {
893
+ const feedback = this.id + ' ' + this.json(message);
894
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
895
+ const msg = this.safeString2(message, 'retMsg', 'ret_msg');
896
+ this.throwBroadlyMatchedException(this.exceptions['broad'], msg, feedback);
897
+ throw new ExchangeError(feedback);
898
+ }
899
+ const success = this.safeValue(message, 'success');
900
+ if (success !== undefined && !success) {
901
+ const ret_msg = this.safeString(message, 'ret_msg');
902
+ const request = this.safeValue(message, 'request', {});
903
+ const op = this.safeString(request, 'op');
904
+ if (op === 'auth') {
905
+ throw new AuthenticationError('Authentication failed: ' + ret_msg);
906
+ }
907
+ else {
908
+ throw new ExchangeError(this.id + ' ' + ret_msg);
909
+ }
910
+ }
911
+ return false;
912
+ }
913
+ catch (error) {
914
+ if (error instanceof AuthenticationError) {
915
+ const messageHash = 'authenticated';
916
+ client.reject(error, messageHash);
917
+ if (messageHash in client.subscriptions) {
918
+ delete client.subscriptions[messageHash];
919
+ }
920
+ }
921
+ else {
922
+ const messageHash = this.safeString(message, 'reqId');
923
+ client.reject(error, messageHash);
924
+ }
925
+ return true;
926
+ }
927
+ }
928
+ handleMessage(client, message) {
929
+ if (this.handleErrorMessage(client, message)) {
930
+ return;
931
+ }
932
+ const topic = this.safeString2(message, 'topic', 'op', '');
933
+ const methods = {
934
+ 'ws_zk_accounts_v3': this.handleAccount,
935
+ 'orderBook': this.handleOrderBook,
936
+ 'depth': this.handleOrderBook,
937
+ 'candle': this.handleOHLCV,
938
+ 'kline': this.handleOHLCV,
939
+ 'ticker': this.handleTicker,
940
+ 'instrumentInfo': this.handleTicker,
941
+ 'trade': this.handleTrades,
942
+ 'recentlyTrade': this.handleTrades,
943
+ 'pong': this.handlePong,
944
+ 'auth': this.handleAuthenticate,
945
+ };
946
+ const exacMethod = this.safeValue(methods, topic);
947
+ if (exacMethod !== undefined) {
948
+ exacMethod.call(this, client, message);
949
+ return;
950
+ }
951
+ const keys = Object.keys(methods);
952
+ for (let i = 0; i < keys.length; i++) {
953
+ const key = keys[i];
954
+ if (topic.indexOf(keys[i]) >= 0) {
955
+ const method = methods[key];
956
+ method.call(this, client, message);
957
+ return;
958
+ }
959
+ }
960
+ // unified auth acknowledgement
961
+ const type = this.safeString(message, 'type');
962
+ if (type === 'AUTH_RESP') {
963
+ this.handleAuthenticate(client, message);
964
+ }
965
+ }
966
+ ping(client) {
967
+ const timeStamp = this.milliseconds().toString();
968
+ return {
969
+ 'args': [timeStamp],
970
+ 'op': 'ping',
971
+ };
972
+ }
973
+ handlePong(client, message) {
974
+ //
975
+ // {
976
+ // "success": true,
977
+ // "ret_msg": "pong",
978
+ // "conn_id": "db3158a0-8960-44b9-a9de-ac350ee13158",
979
+ // "request": { op: "ping", args: null }
980
+ // }
981
+ //
982
+ // { pong: 1653296711335 }
983
+ //
984
+ client.lastPong = this.safeInteger(message, 'pong');
985
+ return message;
986
+ }
987
+ handleAccount(client, message) {
988
+ const contents = this.safeDict(message, 'contents', {});
989
+ const fills = this.safeList(contents, 'fills', []);
990
+ if (fills !== undefined) {
991
+ this.handleMyTrades(client, fills);
992
+ }
993
+ const positions = this.safeList(contents, 'positions', []);
994
+ if (positions !== undefined) {
995
+ this.handlePositions(client, positions);
996
+ }
997
+ const orders = this.safeList(contents, 'orders', []);
998
+ if (orders !== undefined) {
999
+ this.handleOrder(client, orders);
1000
+ }
1001
+ }
1002
+ handleAuthenticate(client, message) {
1003
+ //
1004
+ // {
1005
+ // "success": true,
1006
+ // "ret_msg": '',
1007
+ // "op": "auth",
1008
+ // "conn_id": "ce3dpomvha7dha97tvp0-2xh"
1009
+ // }
1010
+ //
1011
+ const success = this.safeValue(message, 'success');
1012
+ const code = this.safeInteger(message, 'retCode');
1013
+ const messageHash = 'authenticated';
1014
+ if (success || code === 0) {
1015
+ const future = this.safeValue(client.futures, messageHash);
1016
+ future.resolve(true);
1017
+ }
1018
+ else {
1019
+ const error = new AuthenticationError(this.id + ' ' + this.json(message));
1020
+ client.reject(error, messageHash);
1021
+ if (messageHash in client.subscriptions) {
1022
+ delete client.subscriptions[messageHash];
1023
+ }
1024
+ }
1025
+ return message;
1026
+ }
1027
+ handleSubscriptionStatus(client, message) {
1028
+ //
1029
+ // {
1030
+ // "topic": "kline",
1031
+ // "event": "sub",
1032
+ // "params": {
1033
+ // "symbol": "LTCUSDT",
1034
+ // "binary": "false",
1035
+ // "klineType": "1m",
1036
+ // "symbolName": "LTCUSDT"
1037
+ // },
1038
+ // "code": "0",
1039
+ // "msg": "Success"
1040
+ // }
1041
+ //
1042
+ return message;
1043
+ }
1044
+ }