ccxt 4.5.4 → 4.5.5

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 (912) hide show
  1. package/README.md +6 -5
  2. package/dist/ccxt.browser.min.js +6 -6
  3. package/dist/cjs/ccxt.js +6 -1
  4. package/dist/cjs/src/abstract/alpaca.js +1 -1
  5. package/dist/cjs/src/abstract/apex.js +1 -1
  6. package/dist/cjs/src/abstract/ascendex.js +1 -1
  7. package/dist/cjs/src/abstract/backpack.js +11 -0
  8. package/dist/cjs/src/abstract/bigone.js +1 -1
  9. package/dist/cjs/src/abstract/binance.js +1 -1
  10. package/dist/cjs/src/abstract/bingx.js +1 -1
  11. package/dist/cjs/src/abstract/bit2c.js +1 -1
  12. package/dist/cjs/src/abstract/bitbank.js +1 -1
  13. package/dist/cjs/src/abstract/bitbns.js +1 -1
  14. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  15. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  16. package/dist/cjs/src/abstract/bitget.js +1 -1
  17. package/dist/cjs/src/abstract/bithumb.js +1 -1
  18. package/dist/cjs/src/abstract/bitmart.js +1 -1
  19. package/dist/cjs/src/abstract/bitmex.js +1 -1
  20. package/dist/cjs/src/abstract/bitopro.js +1 -1
  21. package/dist/cjs/src/abstract/bitrue.js +1 -1
  22. package/dist/cjs/src/abstract/bitso.js +1 -1
  23. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  24. package/dist/cjs/src/abstract/bitteam.js +1 -1
  25. package/dist/cjs/src/abstract/bittrade.js +1 -1
  26. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  27. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  28. package/dist/cjs/src/abstract/blofin.js +1 -1
  29. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  30. package/dist/cjs/src/abstract/btcbox.js +1 -1
  31. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  32. package/dist/cjs/src/abstract/btcturk.js +1 -1
  33. package/dist/cjs/src/abstract/bybit.js +1 -1
  34. package/dist/cjs/src/abstract/cex.js +1 -1
  35. package/dist/cjs/src/abstract/coinbase.js +1 -1
  36. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  37. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  38. package/dist/cjs/src/abstract/coincatch.js +1 -1
  39. package/dist/cjs/src/abstract/coincheck.js +1 -1
  40. package/dist/cjs/src/abstract/coinex.js +1 -1
  41. package/dist/cjs/src/abstract/coinmate.js +1 -1
  42. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  43. package/dist/cjs/src/abstract/coinone.js +1 -1
  44. package/dist/cjs/src/abstract/coinsph.js +1 -1
  45. package/dist/cjs/src/abstract/coinspot.js +1 -1
  46. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  47. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  48. package/dist/cjs/src/abstract/defx.js +1 -1
  49. package/dist/cjs/src/abstract/delta.js +1 -1
  50. package/dist/cjs/src/abstract/deribit.js +1 -1
  51. package/dist/cjs/src/abstract/derive.js +1 -1
  52. package/dist/cjs/src/abstract/digifinex.js +1 -1
  53. package/dist/cjs/src/abstract/exmo.js +1 -1
  54. package/dist/cjs/src/abstract/foxbit.js +1 -1
  55. package/dist/cjs/src/abstract/gate.js +1 -1
  56. package/dist/cjs/src/abstract/gemini.js +1 -1
  57. package/dist/cjs/src/abstract/hashkey.js +1 -1
  58. package/dist/cjs/src/abstract/hibachi.js +1 -1
  59. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  60. package/dist/cjs/src/abstract/hollaex.js +1 -1
  61. package/dist/cjs/src/abstract/htx.js +1 -1
  62. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  63. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  64. package/dist/cjs/src/abstract/indodax.js +1 -1
  65. package/dist/cjs/src/abstract/kraken.js +1 -1
  66. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  67. package/dist/cjs/src/abstract/kucoin.js +1 -1
  68. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  69. package/dist/cjs/src/abstract/latoken.js +1 -1
  70. package/dist/cjs/src/abstract/lbank.js +1 -1
  71. package/dist/cjs/src/abstract/luno.js +1 -1
  72. package/dist/cjs/src/abstract/mercado.js +1 -1
  73. package/dist/cjs/src/abstract/mexc.js +1 -1
  74. package/dist/cjs/src/abstract/modetrade.js +1 -1
  75. package/dist/cjs/src/abstract/ndax.js +1 -1
  76. package/dist/cjs/src/abstract/novadax.js +1 -1
  77. package/dist/cjs/src/abstract/oceanex.js +1 -1
  78. package/dist/cjs/src/abstract/okcoin.js +1 -1
  79. package/dist/cjs/src/abstract/okx.js +1 -1
  80. package/dist/cjs/src/abstract/onetrading.js +1 -1
  81. package/dist/cjs/src/abstract/oxfun.js +1 -1
  82. package/dist/cjs/src/abstract/p2b.js +1 -1
  83. package/dist/cjs/src/abstract/paradex.js +1 -1
  84. package/dist/cjs/src/abstract/paymium.js +1 -1
  85. package/dist/cjs/src/abstract/phemex.js +1 -1
  86. package/dist/cjs/src/abstract/poloniex.js +1 -1
  87. package/dist/cjs/src/abstract/probit.js +1 -1
  88. package/dist/cjs/src/abstract/timex.js +1 -1
  89. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  90. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  91. package/dist/cjs/src/abstract/upbit.js +1 -1
  92. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  93. package/dist/cjs/src/abstract/whitebit.js +1 -1
  94. package/dist/cjs/src/abstract/woo.js +1 -1
  95. package/dist/cjs/src/abstract/woofipro.js +1 -1
  96. package/dist/cjs/src/abstract/xt.js +1 -1
  97. package/dist/cjs/src/abstract/yobit.js +1 -1
  98. package/dist/cjs/src/abstract/zaif.js +1 -1
  99. package/dist/cjs/src/abstract/zonda.js +1 -1
  100. package/dist/cjs/src/alpaca.js +1 -1
  101. package/dist/cjs/src/apex.js +1 -1
  102. package/dist/cjs/src/ascendex.js +1 -1
  103. package/dist/cjs/src/backpack.js +2280 -0
  104. package/dist/cjs/src/base/Exchange.js +97 -60
  105. package/dist/cjs/src/base/Precise.js +0 -6
  106. package/dist/cjs/src/base/errors.js +0 -6
  107. package/dist/cjs/src/base/functions/crypto.js +1 -1
  108. package/dist/cjs/src/base/functions/encode.js +1 -1
  109. package/dist/cjs/src/base/functions/misc.js +0 -1
  110. package/dist/cjs/src/base/functions/number.js +0 -6
  111. package/dist/cjs/src/base/functions/platform.js +0 -6
  112. package/dist/cjs/src/base/functions/rsa.js +0 -1
  113. package/dist/cjs/src/base/functions/string.js +0 -6
  114. package/dist/cjs/src/base/functions/throttle.js +1 -1
  115. package/dist/cjs/src/base/functions/time.js +0 -6
  116. package/dist/cjs/src/base/functions/totp.js +0 -1
  117. package/dist/cjs/src/base/functions/type.js +0 -6
  118. package/dist/cjs/src/base/functions.js +1 -1
  119. package/dist/cjs/src/base/ws/Cache.js +0 -6
  120. package/dist/cjs/src/base/ws/Client.js +0 -1
  121. package/dist/cjs/src/base/ws/Future.js +1 -1
  122. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  123. package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
  124. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  125. package/dist/cjs/src/bequant.js +1 -1
  126. package/dist/cjs/src/bigone.js +1 -1
  127. package/dist/cjs/src/binance.js +1 -1
  128. package/dist/cjs/src/binancecoinm.js +1 -1
  129. package/dist/cjs/src/binanceus.js +1 -1
  130. package/dist/cjs/src/binanceusdm.js +1 -1
  131. package/dist/cjs/src/bingx.js +1 -1
  132. package/dist/cjs/src/bit2c.js +1 -1
  133. package/dist/cjs/src/bitbank.js +2 -2
  134. package/dist/cjs/src/bitbns.js +1 -1
  135. package/dist/cjs/src/bitfinex.js +1 -1
  136. package/dist/cjs/src/bitflyer.js +1 -1
  137. package/dist/cjs/src/bitget.js +57 -10
  138. package/dist/cjs/src/bithumb.js +1 -1
  139. package/dist/cjs/src/bitmart.js +1 -1
  140. package/dist/cjs/src/bitmex.js +1 -1
  141. package/dist/cjs/src/bitopro.js +1 -1
  142. package/dist/cjs/src/bitrue.js +1 -1
  143. package/dist/cjs/src/bitso.js +1 -1
  144. package/dist/cjs/src/bitstamp.js +1 -1
  145. package/dist/cjs/src/bitteam.js +1 -1
  146. package/dist/cjs/src/bittrade.js +1 -1
  147. package/dist/cjs/src/blockchaincom.js +1 -1
  148. package/dist/cjs/src/blofin.js +1 -1
  149. package/dist/cjs/src/btcalpha.js +1 -1
  150. package/dist/cjs/src/btcbox.js +1 -1
  151. package/dist/cjs/src/btcmarkets.js +1 -1
  152. package/dist/cjs/src/btcturk.js +1 -1
  153. package/dist/cjs/src/bybit.js +1 -1
  154. package/dist/cjs/src/cex.js +1 -1
  155. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  156. package/dist/cjs/src/coincatch.js +2 -2
  157. package/dist/cjs/src/coincheck.js +1 -1
  158. package/dist/cjs/src/coinex.js +1 -1
  159. package/dist/cjs/src/coinmate.js +1 -1
  160. package/dist/cjs/src/coinmetro.js +12 -1
  161. package/dist/cjs/src/coinone.js +1 -1
  162. package/dist/cjs/src/coinsph.js +0 -1
  163. package/dist/cjs/src/coinspot.js +1 -1
  164. package/dist/cjs/src/cryptocom.js +1 -1
  165. package/dist/cjs/src/cryptomus.js +1 -1
  166. package/dist/cjs/src/defx.js +1 -1
  167. package/dist/cjs/src/delta.js +1 -1
  168. package/dist/cjs/src/deribit.js +1 -1
  169. package/dist/cjs/src/derive.js +1 -1
  170. package/dist/cjs/src/digifinex.js +1 -1
  171. package/dist/cjs/src/exmo.js +1 -1
  172. package/dist/cjs/src/fmfwio.js +1 -1
  173. package/dist/cjs/src/foxbit.js +1 -1
  174. package/dist/cjs/src/gate.js +8 -2
  175. package/dist/cjs/src/gateio.js +1 -1
  176. package/dist/cjs/src/gemini.js +11 -6
  177. package/dist/cjs/src/hashkey.js +1 -1
  178. package/dist/cjs/src/hibachi.js +1 -1
  179. package/dist/cjs/src/hitbtc.js +0 -1
  180. package/dist/cjs/src/hollaex.js +1 -1
  181. package/dist/cjs/src/htx.js +1 -1
  182. package/dist/cjs/src/huobi.js +1 -1
  183. package/dist/cjs/src/hyperliquid.js +1 -1
  184. package/dist/cjs/src/independentreserve.js +1 -1
  185. package/dist/cjs/src/indodax.js +1 -1
  186. package/dist/cjs/src/kraken.js +1 -1
  187. package/dist/cjs/src/krakenfutures.js +2 -2
  188. package/dist/cjs/src/kucoin.js +1 -1
  189. package/dist/cjs/src/kucoinfutures.js +52 -4
  190. package/dist/cjs/src/latoken.js +1 -1
  191. package/dist/cjs/src/lbank.js +1 -1
  192. package/dist/cjs/src/luno.js +1 -1
  193. package/dist/cjs/src/mercado.js +1 -1
  194. package/dist/cjs/src/mexc.js +1 -1
  195. package/dist/cjs/src/modetrade.js +1 -1
  196. package/dist/cjs/src/myokx.js +1 -1
  197. package/dist/cjs/src/ndax.js +1 -1
  198. package/dist/cjs/src/novadax.js +1 -1
  199. package/dist/cjs/src/oceanex.js +1 -1
  200. package/dist/cjs/src/okcoin.js +1 -1
  201. package/dist/cjs/src/okx.js +25 -15
  202. package/dist/cjs/src/okxus.js +1 -1
  203. package/dist/cjs/src/onetrading.js +161 -66
  204. package/dist/cjs/src/oxfun.js +1 -1
  205. package/dist/cjs/src/p2b.js +1 -1
  206. package/dist/cjs/src/paradex.js +1 -1
  207. package/dist/cjs/src/paymium.js +1 -1
  208. package/dist/cjs/src/phemex.js +15 -9
  209. package/dist/cjs/src/poloniex.js +1 -1
  210. package/dist/cjs/src/pro/alpaca.js +1 -1
  211. package/dist/cjs/src/pro/apex.js +1 -1
  212. package/dist/cjs/src/pro/ascendex.js +1 -1
  213. package/dist/cjs/src/pro/backpack.js +1325 -0
  214. package/dist/cjs/src/pro/bequant.js +1 -1
  215. package/dist/cjs/src/pro/binance.js +9 -0
  216. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  217. package/dist/cjs/src/pro/binanceus.js +1 -1
  218. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  219. package/dist/cjs/src/pro/bingx.js +1 -1
  220. package/dist/cjs/src/pro/bitfinex.js +1 -1
  221. package/dist/cjs/src/pro/bitget.js +41 -12
  222. package/dist/cjs/src/pro/bithumb.js +1 -1
  223. package/dist/cjs/src/pro/bitmart.js +1 -1
  224. package/dist/cjs/src/pro/bitmex.js +1 -1
  225. package/dist/cjs/src/pro/bitrue.js +1 -1
  226. package/dist/cjs/src/pro/bitstamp.js +1 -1
  227. package/dist/cjs/src/pro/bitvavo.js +1 -1
  228. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  229. package/dist/cjs/src/pro/blofin.js +1 -1
  230. package/dist/cjs/src/pro/bybit.js +4 -1
  231. package/dist/cjs/src/pro/cex.js +1 -1
  232. package/dist/cjs/src/pro/coinbase.js +227 -1
  233. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  234. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  235. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  236. package/dist/cjs/src/pro/coincatch.js +1 -1
  237. package/dist/cjs/src/pro/coincheck.js +1 -1
  238. package/dist/cjs/src/pro/coinex.js +1 -1
  239. package/dist/cjs/src/pro/coinone.js +1 -1
  240. package/dist/cjs/src/pro/cryptocom.js +1 -1
  241. package/dist/cjs/src/pro/defx.js +1 -1
  242. package/dist/cjs/src/pro/deribit.js +1 -1
  243. package/dist/cjs/src/pro/exmo.js +1 -1
  244. package/dist/cjs/src/pro/gate.js +1 -1
  245. package/dist/cjs/src/pro/gateio.js +1 -1
  246. package/dist/cjs/src/pro/gemini.js +1 -1
  247. package/dist/cjs/src/pro/hashkey.js +1 -1
  248. package/dist/cjs/src/pro/hitbtc.js +1 -1
  249. package/dist/cjs/src/pro/hollaex.js +1 -1
  250. package/dist/cjs/src/pro/htx.js +1 -1
  251. package/dist/cjs/src/pro/huobi.js +1 -1
  252. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  253. package/dist/cjs/src/pro/independentreserve.js +1 -1
  254. package/dist/cjs/src/pro/kraken.js +1 -1
  255. package/dist/cjs/src/pro/krakenfutures.js +1 -1
  256. package/dist/cjs/src/pro/kucoin.js +1 -1
  257. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  258. package/dist/cjs/src/pro/lbank.js +0 -1
  259. package/dist/cjs/src/pro/luno.js +1 -1
  260. package/dist/cjs/src/pro/mexc.js +1 -1
  261. package/dist/cjs/src/pro/myokx.js +1 -1
  262. package/dist/cjs/src/pro/ndax.js +1 -1
  263. package/dist/cjs/src/pro/okcoin.js +1 -1
  264. package/dist/cjs/src/pro/okx.js +1 -1
  265. package/dist/cjs/src/pro/okxus.js +1 -1
  266. package/dist/cjs/src/pro/onetrading.js +1 -1
  267. package/dist/cjs/src/pro/oxfun.js +1 -1
  268. package/dist/cjs/src/pro/p2b.js +1 -1
  269. package/dist/cjs/src/pro/paradex.js +1 -1
  270. package/dist/cjs/src/pro/phemex.js +1 -1
  271. package/dist/cjs/src/pro/poloniex.js +1 -1
  272. package/dist/cjs/src/pro/probit.js +1 -1
  273. package/dist/cjs/src/pro/tradeogre.js +1 -1
  274. package/dist/cjs/src/pro/upbit.js +1 -1
  275. package/dist/cjs/src/pro/whitebit.js +1 -1
  276. package/dist/cjs/src/pro/xt.js +1 -1
  277. package/dist/cjs/src/probit.js +1 -1
  278. package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +1 -0
  279. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
  280. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  281. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  282. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
  283. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
  284. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
  285. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
  286. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
  287. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
  288. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
  289. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
  290. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
  291. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
  292. package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
  293. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  294. package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
  295. package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
  296. package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
  297. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
  298. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
  299. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
  300. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
  301. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  302. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
  303. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
  304. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
  305. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
  306. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  307. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
  308. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
  309. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  310. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  311. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  312. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  313. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
  314. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  315. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  316. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  317. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  318. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  319. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  320. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  321. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
  322. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  323. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  324. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  325. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
  326. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  327. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  328. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  329. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  330. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  331. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  332. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  333. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  334. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
  335. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
  336. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
  337. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
  338. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
  339. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
  340. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
  341. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
  342. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
  343. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
  344. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  345. package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
  346. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
  347. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
  348. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
  349. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
  350. package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
  351. package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
  352. package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
  353. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  354. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  355. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
  356. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
  357. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
  358. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
  359. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
  360. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  361. package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
  362. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  363. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  364. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
  365. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  366. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  367. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
  368. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
  369. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
  370. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  371. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  372. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  373. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
  374. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
  375. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  376. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  377. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  378. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
  379. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  380. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
  381. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
  382. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  383. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
  384. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
  385. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
  386. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  387. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
  388. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
  389. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
  390. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
  391. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
  392. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
  393. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
  394. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  395. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
  396. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  397. package/dist/cjs/src/timex.js +0 -1
  398. package/dist/cjs/src/tokocrypto.js +1 -1
  399. package/dist/cjs/src/tradeogre.js +1 -1
  400. package/dist/cjs/src/upbit.js +1 -1
  401. package/dist/cjs/src/wavesexchange.js +1 -1
  402. package/dist/cjs/src/whitebit.js +1 -1
  403. package/dist/cjs/src/woo.js +1 -1
  404. package/dist/cjs/src/woofipro.js +1 -1
  405. package/dist/cjs/src/xt.js +10 -1
  406. package/dist/cjs/src/yobit.js +10 -1
  407. package/dist/cjs/src/zaif.js +1 -1
  408. package/dist/cjs/src/zonda.js +1 -1
  409. package/js/ccxt.d.ts +8 -2
  410. package/js/ccxt.js +6 -8
  411. package/js/src/abstract/alpaca.js +0 -6
  412. package/js/src/abstract/apex.js +0 -6
  413. package/js/src/abstract/ascendex.js +0 -6
  414. package/js/src/abstract/backpack.d.ts +63 -0
  415. package/js/src/abstract/backpack.js +5 -0
  416. package/js/src/abstract/bequant.js +0 -6
  417. package/js/src/abstract/bigone.js +0 -6
  418. package/js/src/abstract/binance.js +0 -6
  419. package/js/src/abstract/binancecoinm.js +0 -6
  420. package/js/src/abstract/binanceus.js +0 -6
  421. package/js/src/abstract/binanceusdm.js +0 -6
  422. package/js/src/abstract/bingx.js +0 -6
  423. package/js/src/abstract/bit2c.js +0 -6
  424. package/js/src/abstract/bitbank.js +0 -6
  425. package/js/src/abstract/bitbns.js +0 -6
  426. package/js/src/abstract/bitfinex.js +0 -6
  427. package/js/src/abstract/bitflyer.js +0 -6
  428. package/js/src/abstract/bitget.js +0 -6
  429. package/js/src/abstract/bithumb.js +0 -6
  430. package/js/src/abstract/bitmart.js +0 -6
  431. package/js/src/abstract/bitmex.js +0 -6
  432. package/js/src/abstract/bitopro.js +0 -6
  433. package/js/src/abstract/bitrue.js +0 -6
  434. package/js/src/abstract/bitso.js +0 -6
  435. package/js/src/abstract/bitstamp.js +0 -6
  436. package/js/src/abstract/bitteam.js +0 -6
  437. package/js/src/abstract/bittrade.js +0 -6
  438. package/js/src/abstract/bitvavo.js +0 -6
  439. package/js/src/abstract/blockchaincom.js +0 -6
  440. package/js/src/abstract/blofin.js +0 -6
  441. package/js/src/abstract/btcalpha.js +0 -6
  442. package/js/src/abstract/btcbox.js +0 -6
  443. package/js/src/abstract/btcmarkets.js +0 -6
  444. package/js/src/abstract/btcturk.js +0 -6
  445. package/js/src/abstract/bybit.js +0 -6
  446. package/js/src/abstract/cex.js +0 -6
  447. package/js/src/abstract/coinbase.js +0 -6
  448. package/js/src/abstract/coinbaseadvanced.js +0 -6
  449. package/js/src/abstract/coinbaseexchange.js +0 -6
  450. package/js/src/abstract/coinbaseinternational.js +0 -6
  451. package/js/src/abstract/coincatch.js +0 -6
  452. package/js/src/abstract/coincheck.js +0 -6
  453. package/js/src/abstract/coinex.js +0 -6
  454. package/js/src/abstract/coinmate.js +0 -6
  455. package/js/src/abstract/coinmetro.js +0 -6
  456. package/js/src/abstract/coinone.js +0 -6
  457. package/js/src/abstract/coinsph.js +0 -6
  458. package/js/src/abstract/coinspot.js +0 -6
  459. package/js/src/abstract/cryptocom.js +0 -6
  460. package/js/src/abstract/cryptomus.js +0 -6
  461. package/js/src/abstract/defx.js +0 -6
  462. package/js/src/abstract/delta.js +0 -6
  463. package/js/src/abstract/deribit.js +0 -6
  464. package/js/src/abstract/derive.js +0 -6
  465. package/js/src/abstract/digifinex.js +0 -6
  466. package/js/src/abstract/exmo.js +0 -6
  467. package/js/src/abstract/fmfwio.js +0 -6
  468. package/js/src/abstract/foxbit.js +0 -6
  469. package/js/src/abstract/gate.js +0 -6
  470. package/js/src/abstract/gateio.js +0 -6
  471. package/js/src/abstract/gemini.js +0 -6
  472. package/js/src/abstract/hashkey.js +0 -6
  473. package/js/src/abstract/hibachi.js +0 -6
  474. package/js/src/abstract/hitbtc.js +0 -6
  475. package/js/src/abstract/hollaex.js +0 -6
  476. package/js/src/abstract/htx.js +0 -6
  477. package/js/src/abstract/huobi.js +0 -6
  478. package/js/src/abstract/hyperliquid.js +0 -6
  479. package/js/src/abstract/independentreserve.js +0 -6
  480. package/js/src/abstract/indodax.js +0 -6
  481. package/js/src/abstract/kraken.js +0 -6
  482. package/js/src/abstract/krakenfutures.js +0 -6
  483. package/js/src/abstract/kucoin.js +0 -6
  484. package/js/src/abstract/kucoinfutures.d.ts +1 -0
  485. package/js/src/abstract/kucoinfutures.js +0 -6
  486. package/js/src/abstract/latoken.js +0 -6
  487. package/js/src/abstract/lbank.js +0 -6
  488. package/js/src/abstract/luno.js +0 -6
  489. package/js/src/abstract/mercado.js +0 -6
  490. package/js/src/abstract/mexc.js +0 -6
  491. package/js/src/abstract/modetrade.js +0 -6
  492. package/js/src/abstract/myokx.js +0 -6
  493. package/js/src/abstract/ndax.js +0 -6
  494. package/js/src/abstract/novadax.js +0 -6
  495. package/js/src/abstract/oceanex.js +0 -6
  496. package/js/src/abstract/okcoin.js +0 -6
  497. package/js/src/abstract/okx.js +0 -6
  498. package/js/src/abstract/okxus.js +0 -6
  499. package/js/src/abstract/onetrading.js +0 -6
  500. package/js/src/abstract/oxfun.js +0 -6
  501. package/js/src/abstract/p2b.js +0 -6
  502. package/js/src/abstract/paradex.js +0 -6
  503. package/js/src/abstract/paymium.js +0 -6
  504. package/js/src/abstract/phemex.d.ts +1 -1
  505. package/js/src/abstract/phemex.js +0 -6
  506. package/js/src/abstract/poloniex.js +0 -6
  507. package/js/src/abstract/probit.js +0 -6
  508. package/js/src/abstract/timex.js +0 -6
  509. package/js/src/abstract/tokocrypto.js +0 -6
  510. package/js/src/abstract/tradeogre.js +0 -6
  511. package/js/src/abstract/upbit.js +0 -6
  512. package/js/src/abstract/wavesexchange.js +0 -6
  513. package/js/src/abstract/whitebit.js +0 -6
  514. package/js/src/abstract/woo.js +0 -6
  515. package/js/src/abstract/woofipro.js +0 -6
  516. package/js/src/abstract/xt.js +0 -6
  517. package/js/src/abstract/yobit.js +0 -6
  518. package/js/src/abstract/zaif.js +0 -6
  519. package/js/src/abstract/zonda.js +0 -6
  520. package/js/src/alpaca.js +0 -6
  521. package/js/src/apex.js +0 -6
  522. package/js/src/ascendex.js +0 -6
  523. package/js/src/backpack.d.ts +371 -0
  524. package/js/src/backpack.js +2273 -0
  525. package/js/src/base/Exchange.d.ts +39 -40
  526. package/js/src/base/Exchange.js +102 -70
  527. package/js/src/base/Precise.js +0 -6
  528. package/js/src/base/errorHierarchy.js +0 -6
  529. package/js/src/base/errors.js +0 -6
  530. package/js/src/base/functions/crypto.js +0 -6
  531. package/js/src/base/functions/encode.js +0 -6
  532. package/js/src/base/functions/generic.js +0 -6
  533. package/js/src/base/functions/misc.js +0 -6
  534. package/js/src/base/functions/number.js +0 -6
  535. package/js/src/base/functions/platform.js +0 -6
  536. package/js/src/base/functions/rsa.js +0 -6
  537. package/js/src/base/functions/string.js +0 -6
  538. package/js/src/base/functions/throttle.js +0 -6
  539. package/js/src/base/functions/time.js +0 -6
  540. package/js/src/base/functions/totp.js +0 -6
  541. package/js/src/base/functions/type.js +0 -6
  542. package/js/src/base/functions.js +0 -6
  543. package/js/src/base/types.d.ts +1 -3
  544. package/js/src/base/types.js +0 -6
  545. package/js/src/base/ws/Cache.js +0 -6
  546. package/js/src/base/ws/Client.js +0 -6
  547. package/js/src/base/ws/Future.js +0 -6
  548. package/js/src/base/ws/OrderBook.js +0 -6
  549. package/js/src/base/ws/OrderBookSide.js +0 -6
  550. package/js/src/base/ws/WsClient.js +0 -6
  551. package/js/src/base/ws/functions.js +0 -6
  552. package/js/src/bequant.js +0 -6
  553. package/js/src/bigone.js +0 -6
  554. package/js/src/binance.d.ts +1 -1
  555. package/js/src/binance.js +0 -6
  556. package/js/src/binancecoinm.js +0 -6
  557. package/js/src/binanceus.js +0 -6
  558. package/js/src/binanceusdm.js +0 -6
  559. package/js/src/bingx.js +0 -6
  560. package/js/src/bit2c.js +0 -6
  561. package/js/src/bitbank.js +1 -7
  562. package/js/src/bitbns.js +0 -6
  563. package/js/src/bitfinex.js +0 -6
  564. package/js/src/bitflyer.js +0 -6
  565. package/js/src/bitget.d.ts +3 -1
  566. package/js/src/bitget.js +56 -15
  567. package/js/src/bithumb.js +0 -6
  568. package/js/src/bitmart.js +0 -6
  569. package/js/src/bitmex.js +0 -6
  570. package/js/src/bitopro.js +0 -6
  571. package/js/src/bitrue.js +0 -6
  572. package/js/src/bitso.js +0 -6
  573. package/js/src/bitstamp.js +0 -6
  574. package/js/src/bitteam.js +0 -6
  575. package/js/src/bittrade.js +0 -6
  576. package/js/src/bitvavo.js +0 -6
  577. package/js/src/blockchaincom.js +0 -6
  578. package/js/src/blofin.js +0 -6
  579. package/js/src/btcalpha.js +0 -6
  580. package/js/src/btcbox.js +0 -6
  581. package/js/src/btcmarkets.js +0 -6
  582. package/js/src/btcturk.js +0 -6
  583. package/js/src/bybit.js +0 -6
  584. package/js/src/cex.js +0 -6
  585. package/js/src/coinbase.d.ts +1 -1
  586. package/js/src/coinbase.js +0 -6
  587. package/js/src/coinbaseadvanced.js +0 -6
  588. package/js/src/coinbaseexchange.js +0 -6
  589. package/js/src/coinbaseinternational.js +0 -6
  590. package/js/src/coincatch.js +1 -7
  591. package/js/src/coincheck.js +0 -6
  592. package/js/src/coinex.js +0 -6
  593. package/js/src/coinmate.js +0 -6
  594. package/js/src/coinmetro.js +11 -6
  595. package/js/src/coinone.js +0 -6
  596. package/js/src/coinsph.js +0 -6
  597. package/js/src/coinspot.js +0 -6
  598. package/js/src/cryptocom.js +0 -6
  599. package/js/src/cryptomus.js +0 -6
  600. package/js/src/defx.js +0 -6
  601. package/js/src/delta.js +0 -6
  602. package/js/src/deribit.js +0 -6
  603. package/js/src/derive.js +0 -6
  604. package/js/src/digifinex.js +0 -6
  605. package/js/src/exmo.js +0 -6
  606. package/js/src/fmfwio.js +0 -6
  607. package/js/src/foxbit.js +0 -6
  608. package/js/src/gate.d.ts +6 -0
  609. package/js/src/gate.js +7 -7
  610. package/js/src/gateio.js +0 -6
  611. package/js/src/gemini.js +10 -11
  612. package/js/src/hashkey.js +0 -6
  613. package/js/src/hibachi.js +0 -6
  614. package/js/src/hitbtc.js +0 -6
  615. package/js/src/hollaex.js +0 -6
  616. package/js/src/htx.js +0 -6
  617. package/js/src/huobi.js +0 -6
  618. package/js/src/hyperliquid.js +0 -6
  619. package/js/src/independentreserve.js +0 -6
  620. package/js/src/indodax.js +0 -6
  621. package/js/src/kraken.js +0 -6
  622. package/js/src/krakenfutures.js +1 -7
  623. package/js/src/kucoin.js +0 -6
  624. package/js/src/kucoinfutures.d.ts +14 -1
  625. package/js/src/kucoinfutures.js +51 -9
  626. package/js/src/latoken.js +0 -6
  627. package/js/src/lbank.js +0 -6
  628. package/js/src/luno.js +0 -6
  629. package/js/src/mercado.js +0 -6
  630. package/js/src/mexc.js +0 -6
  631. package/js/src/modetrade.js +0 -6
  632. package/js/src/myokx.js +0 -6
  633. package/js/src/ndax.js +0 -6
  634. package/js/src/novadax.js +0 -6
  635. package/js/src/oceanex.js +0 -6
  636. package/js/src/okcoin.js +0 -6
  637. package/js/src/okx.js +24 -20
  638. package/js/src/okxus.js +0 -6
  639. package/js/src/onetrading.d.ts +1 -0
  640. package/js/src/onetrading.js +160 -71
  641. package/js/src/oxfun.js +0 -6
  642. package/js/src/p2b.js +0 -6
  643. package/js/src/paradex.js +0 -6
  644. package/js/src/paymium.js +0 -6
  645. package/js/src/phemex.d.ts +3 -3
  646. package/js/src/phemex.js +15 -15
  647. package/js/src/poloniex.js +0 -6
  648. package/js/src/pro/alpaca.js +0 -6
  649. package/js/src/pro/apex.js +0 -6
  650. package/js/src/pro/ascendex.js +0 -6
  651. package/js/src/pro/backpack.d.ts +264 -0
  652. package/js/src/pro/backpack.js +1318 -0
  653. package/js/src/pro/bequant.js +0 -6
  654. package/js/src/pro/binance.js +9 -6
  655. package/js/src/pro/binancecoinm.js +0 -6
  656. package/js/src/pro/binanceus.js +0 -6
  657. package/js/src/pro/binanceusdm.js +0 -6
  658. package/js/src/pro/bingx.js +0 -6
  659. package/js/src/pro/bitfinex.js +0 -6
  660. package/js/src/pro/bitget.d.ts +6 -0
  661. package/js/src/pro/bitget.js +40 -17
  662. package/js/src/pro/bithumb.js +0 -6
  663. package/js/src/pro/bitmart.js +0 -6
  664. package/js/src/pro/bitmex.js +0 -6
  665. package/js/src/pro/bitopro.js +0 -6
  666. package/js/src/pro/bitrue.js +0 -6
  667. package/js/src/pro/bitstamp.js +0 -6
  668. package/js/src/pro/bittrade.js +0 -6
  669. package/js/src/pro/bitvavo.js +0 -6
  670. package/js/src/pro/blockchaincom.js +0 -6
  671. package/js/src/pro/blofin.js +0 -6
  672. package/js/src/pro/bybit.js +3 -6
  673. package/js/src/pro/cex.js +0 -6
  674. package/js/src/pro/coinbase.d.ts +85 -0
  675. package/js/src/pro/coinbase.js +226 -6
  676. package/js/src/pro/coinbaseadvanced.js +0 -6
  677. package/js/src/pro/coinbaseexchange.js +0 -6
  678. package/js/src/pro/coinbaseinternational.js +0 -6
  679. package/js/src/pro/coincatch.js +0 -6
  680. package/js/src/pro/coincheck.js +0 -6
  681. package/js/src/pro/coinex.js +0 -6
  682. package/js/src/pro/coinone.js +0 -6
  683. package/js/src/pro/cryptocom.js +0 -6
  684. package/js/src/pro/defx.js +0 -6
  685. package/js/src/pro/deribit.js +0 -6
  686. package/js/src/pro/derive.js +0 -6
  687. package/js/src/pro/exmo.js +0 -6
  688. package/js/src/pro/gate.js +0 -6
  689. package/js/src/pro/gateio.js +0 -6
  690. package/js/src/pro/gemini.js +0 -6
  691. package/js/src/pro/hashkey.js +0 -6
  692. package/js/src/pro/hitbtc.js +0 -6
  693. package/js/src/pro/hollaex.js +0 -6
  694. package/js/src/pro/htx.js +0 -6
  695. package/js/src/pro/huobi.js +0 -6
  696. package/js/src/pro/hyperliquid.js +0 -6
  697. package/js/src/pro/independentreserve.js +0 -6
  698. package/js/src/pro/kraken.js +0 -6
  699. package/js/src/pro/krakenfutures.js +0 -6
  700. package/js/src/pro/kucoin.js +0 -6
  701. package/js/src/pro/kucoinfutures.js +0 -6
  702. package/js/src/pro/lbank.js +0 -6
  703. package/js/src/pro/luno.js +0 -6
  704. package/js/src/pro/mexc.js +0 -6
  705. package/js/src/pro/modetrade.js +0 -6
  706. package/js/src/pro/myokx.js +0 -6
  707. package/js/src/pro/ndax.js +0 -6
  708. package/js/src/pro/okcoin.js +0 -6
  709. package/js/src/pro/okx.js +0 -6
  710. package/js/src/pro/okxus.js +0 -6
  711. package/js/src/pro/onetrading.js +0 -6
  712. package/js/src/pro/oxfun.js +0 -6
  713. package/js/src/pro/p2b.js +0 -6
  714. package/js/src/pro/paradex.js +0 -6
  715. package/js/src/pro/phemex.js +0 -6
  716. package/js/src/pro/poloniex.js +0 -6
  717. package/js/src/pro/probit.js +0 -6
  718. package/js/src/pro/tradeogre.js +0 -6
  719. package/js/src/pro/upbit.js +0 -6
  720. package/js/src/pro/whitebit.js +0 -6
  721. package/js/src/pro/woo.js +0 -6
  722. package/js/src/pro/woofipro.js +0 -6
  723. package/js/src/pro/xt.js +0 -6
  724. package/js/src/probit.js +0 -6
  725. package/js/src/protobuf/mexc/compiled.cjs +0 -6
  726. package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
  727. package/js/src/static_dependencies/ethers/address/address.js +0 -6
  728. package/js/src/static_dependencies/ethers/address/checks.js +0 -6
  729. package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
  730. package/js/src/static_dependencies/ethers/address/index.js +0 -6
  731. package/js/src/static_dependencies/ethers/bytes32.js +0 -6
  732. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
  733. package/js/src/static_dependencies/ethers/coders/address.js +0 -6
  734. package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
  735. package/js/src/static_dependencies/ethers/coders/array.js +0 -6
  736. package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
  737. package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
  738. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
  739. package/js/src/static_dependencies/ethers/coders/null.js +0 -6
  740. package/js/src/static_dependencies/ethers/coders/number.js +0 -6
  741. package/js/src/static_dependencies/ethers/coders/string.js +0 -6
  742. package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
  743. package/js/src/static_dependencies/ethers/fragments.js +0 -6
  744. package/js/src/static_dependencies/ethers/hash/index.js +0 -6
  745. package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
  746. package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
  747. package/js/src/static_dependencies/ethers/index.js +0 -6
  748. package/js/src/static_dependencies/ethers/interface.js +0 -6
  749. package/js/src/static_dependencies/ethers/typed.js +0 -6
  750. package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
  751. package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
  752. package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
  753. package/js/src/static_dependencies/ethers/utils/data.js +0 -6
  754. package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
  755. package/js/src/static_dependencies/ethers/utils/events.js +0 -6
  756. package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
  757. package/js/src/static_dependencies/ethers/utils/index.js +0 -6
  758. package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
  759. package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
  760. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
  761. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
  762. package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
  763. package/js/src/static_dependencies/ethers/utils/units.js +0 -6
  764. package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
  765. package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
  766. package/js/src/static_dependencies/fflake/browser.js +0 -6
  767. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
  768. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
  769. package/js/src/static_dependencies/jsencrypt/index.js +0 -6
  770. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
  771. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
  772. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
  773. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
  774. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
  775. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
  776. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
  777. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
  778. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
  779. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
  780. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
  781. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
  782. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
  783. package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
  784. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
  785. package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
  786. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
  787. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
  788. package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
  789. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
  790. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
  791. package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
  792. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
  793. package/js/src/static_dependencies/noble-curves/bn.js +0 -6
  794. package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
  795. package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
  796. package/js/src/static_dependencies/noble-curves/index.js +0 -6
  797. package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
  798. package/js/src/static_dependencies/noble-curves/p256.js +0 -6
  799. package/js/src/static_dependencies/noble-curves/p384.js +0 -6
  800. package/js/src/static_dependencies/noble-curves/p521.js +0 -6
  801. package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
  802. package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
  803. package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
  804. package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
  805. package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
  806. package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
  807. package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
  808. package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
  809. package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
  810. package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
  811. package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
  812. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
  813. package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
  814. package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
  815. package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
  816. package/js/src/static_dependencies/noble-hashes/index.js +0 -6
  817. package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
  818. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
  819. package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
  820. package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
  821. package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
  822. package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
  823. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
  824. package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
  825. package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
  826. package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
  827. package/js/src/static_dependencies/node-fetch/body.js +0 -6
  828. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
  829. package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
  830. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
  831. package/js/src/static_dependencies/node-fetch/headers.js +0 -6
  832. package/js/src/static_dependencies/node-fetch/index.js +0 -6
  833. package/js/src/static_dependencies/node-fetch/request.js +0 -6
  834. package/js/src/static_dependencies/node-fetch/response.js +0 -6
  835. package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
  836. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
  837. package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
  838. package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
  839. package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
  840. package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
  841. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
  842. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
  843. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
  844. package/js/src/static_dependencies/qs/formats.cjs +0 -6
  845. package/js/src/static_dependencies/qs/index.cjs +0 -6
  846. package/js/src/static_dependencies/qs/parse.cjs +0 -6
  847. package/js/src/static_dependencies/qs/stringify.cjs +0 -6
  848. package/js/src/static_dependencies/qs/utils.cjs +0 -6
  849. package/js/src/static_dependencies/scure-base/index.js +0 -6
  850. package/js/src/static_dependencies/scure-starknet/index.js +0 -6
  851. package/js/src/static_dependencies/starknet/constants.js +0 -6
  852. package/js/src/static_dependencies/starknet/index.js +0 -6
  853. package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
  854. package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
  855. package/js/src/static_dependencies/starknet/types/index.js +0 -6
  856. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
  857. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
  858. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
  859. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
  860. package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
  861. package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
  862. package/js/src/static_dependencies/starknet/utils/address.js +0 -6
  863. package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
  864. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
  865. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
  866. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
  867. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
  868. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
  869. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
  870. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
  871. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
  872. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
  873. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
  874. package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
  875. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
  876. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
  877. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
  878. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
  879. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
  880. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
  881. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
  882. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
  883. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
  884. package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
  885. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
  886. package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
  887. package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
  888. package/js/src/static_dependencies/starknet/utils/num.js +0 -6
  889. package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
  890. package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
  891. package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
  892. package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
  893. package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
  894. package/js/src/static_dependencies/starknet/utils/url.js +0 -6
  895. package/js/src/static_dependencies/watchable/src/index.js +0 -6
  896. package/js/src/static_dependencies/watchable/src/types.js +0 -6
  897. package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
  898. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
  899. package/js/src/timex.js +0 -6
  900. package/js/src/tokocrypto.js +0 -6
  901. package/js/src/tradeogre.js +0 -6
  902. package/js/src/upbit.js +0 -6
  903. package/js/src/wavesexchange.js +0 -6
  904. package/js/src/whitebit.js +0 -6
  905. package/js/src/woo.js +0 -6
  906. package/js/src/woofipro.js +0 -6
  907. package/js/src/xt.d.ts +1 -0
  908. package/js/src/xt.js +9 -6
  909. package/js/src/yobit.js +9 -6
  910. package/js/src/zaif.js +0 -6
  911. package/js/src/zonda.js +0 -6
  912. package/package.json +1 -1
@@ -0,0 +1,1318 @@
1
+ // ---------------------------------------------------------------------------
2
+ import backpackRest from '../backpack.js';
3
+ import { ArgumentsRequired, ExchangeError } from '../base/errors.js';
4
+ import { ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp } from '../base/ws/Cache.js';
5
+ import { eddsa } from '../base/functions/crypto.js';
6
+ import { ed25519 } from '../static_dependencies/noble-curves/ed25519.js';
7
+ // ---------------------------------------------------------------------------
8
+ export default class backpack extends backpackRest {
9
+ describe() {
10
+ return this.deepExtend(super.describe(), {
11
+ 'has': {
12
+ 'ws': true,
13
+ 'watchBalance': false,
14
+ 'watchBidsAsks': true,
15
+ 'watchMyTrades': false,
16
+ 'watchOHLCV': true,
17
+ 'watchOHLCVForSymbols': true,
18
+ 'watchOrderBook': true,
19
+ 'watchOrderBookForSymbols': true,
20
+ 'watchOrders': true,
21
+ 'watchPositions': true,
22
+ 'watchTicker': true,
23
+ 'watchTickers': true,
24
+ 'watchTrades': true,
25
+ 'watchTradesForSymbols': true,
26
+ 'unwatchBidsAsks': true,
27
+ 'unwatchOHLCV': true,
28
+ 'unwatchOHLCVForSymbols': true,
29
+ 'unwatchOrderBook': true,
30
+ 'unwatchOrderBookForSymbols': true,
31
+ 'unwatchTicker': true,
32
+ 'unwatchTickers': true,
33
+ 'unWatchTrades': true,
34
+ 'unWatchTradesForSymbols': true,
35
+ 'unWatchOrders': true,
36
+ 'unWatchPositions': true,
37
+ },
38
+ 'urls': {
39
+ 'api': {
40
+ 'ws': {
41
+ 'public': 'wss://ws.backpack.exchange',
42
+ 'private': 'wss://ws.backpack.exchange',
43
+ },
44
+ },
45
+ },
46
+ 'options': {
47
+ 'timeframes': {},
48
+ },
49
+ 'streaming': {
50
+ 'ping': this.ping,
51
+ 'keepAlive': 119000,
52
+ },
53
+ });
54
+ }
55
+ async watchPublic(topics, messageHashes, params = {}, unwatch = false) {
56
+ await this.loadMarkets();
57
+ const url = this.urls['api']['ws']['public'];
58
+ const method = unwatch ? 'UNSUBSCRIBE' : 'SUBSCRIBE';
59
+ const request = {
60
+ 'method': method,
61
+ 'params': topics,
62
+ };
63
+ const message = this.deepExtend(request, params);
64
+ if (unwatch) {
65
+ this.handleUnsubscriptions(url, messageHashes, message);
66
+ return undefined;
67
+ }
68
+ return await this.watchMultiple(url, messageHashes, message, messageHashes);
69
+ }
70
+ async watchPrivate(topics, messageHashes, params = {}, unwatch = false) {
71
+ this.checkRequiredCredentials();
72
+ const url = this.urls['api']['ws']['private'];
73
+ const instruction = 'subscribe';
74
+ const ts = this.nonce().toString();
75
+ const method = unwatch ? 'UNSUBSCRIBE' : 'SUBSCRIBE';
76
+ const recvWindow = this.safeString2(this.options, 'recvWindow', 'X-Window', '5000');
77
+ const payload = 'instruction=' + instruction + '&' + 'timestamp=' + ts + '&window=' + recvWindow;
78
+ const secretBytes = this.base64ToBinary(this.secret);
79
+ const seed = this.arraySlice(secretBytes, 0, 32);
80
+ const signature = eddsa(this.encode(payload), seed, ed25519);
81
+ const request = {
82
+ 'method': method,
83
+ 'params': topics,
84
+ 'signature': [this.apiKey, signature, ts, recvWindow],
85
+ };
86
+ const message = this.deepExtend(request, params);
87
+ if (unwatch) {
88
+ this.handleUnsubscriptions(url, messageHashes, message);
89
+ return undefined;
90
+ }
91
+ return await this.watchMultiple(url, messageHashes, message, messageHashes);
92
+ }
93
+ handleUnsubscriptions(url, messageHashes, message) {
94
+ const client = this.client(url);
95
+ this.watchMultiple(url, messageHashes, message, messageHashes);
96
+ for (let i = 0; i < messageHashes.length; i++) {
97
+ const messageHash = messageHashes[i];
98
+ const subMessageHash = messageHash.replace('unsubscribe:', '');
99
+ this.cleanUnsubscription(client, subMessageHash, messageHash);
100
+ if (messageHash.indexOf('ticker') >= 0) {
101
+ const symbol = messageHash.replace('unsubscribe:ticker:', '');
102
+ if (symbol in this.tickers) {
103
+ delete this.tickers[symbol];
104
+ }
105
+ }
106
+ else if (messageHash.indexOf('bidask') >= 0) {
107
+ const symbol = messageHash.replace('unsubscribe:bidask:', '');
108
+ if (symbol in this.bidsasks) {
109
+ delete this.bidsasks[symbol];
110
+ }
111
+ }
112
+ else if (messageHash.indexOf('candles') >= 0) {
113
+ const splitHashes = messageHash.split(':');
114
+ const symbol = this.safeString(splitHashes, 2);
115
+ const timeframe = this.safeString(splitHashes, 3);
116
+ if (symbol in this.ohlcvs) {
117
+ if (timeframe in this.ohlcvs[symbol]) {
118
+ delete this.ohlcvs[symbol][timeframe];
119
+ }
120
+ }
121
+ }
122
+ else if (messageHash.indexOf('orderbook') >= 0) {
123
+ const symbol = messageHash.replace('unsubscribe:orderbook:', '');
124
+ if (symbol in this.orderbooks) {
125
+ delete this.orderbooks[symbol];
126
+ }
127
+ }
128
+ else if (messageHash.indexOf('trades') >= 0) {
129
+ const symbol = messageHash.replace('unsubscribe:trades:', '');
130
+ if (symbol in this.trades) {
131
+ delete this.trades[symbol];
132
+ }
133
+ }
134
+ else if (messageHash.indexOf('orders') >= 0) {
135
+ if (messageHash === 'unsubscribe:orders') {
136
+ const cache = this.orders;
137
+ const keys = Object.keys(cache);
138
+ for (let j = 0; j < keys.length; j++) {
139
+ const symbol = keys[j];
140
+ delete this.orders[symbol];
141
+ }
142
+ }
143
+ else {
144
+ const symbol = messageHash.replace('unsubscribe:orders:', '');
145
+ if (symbol in this.orders) {
146
+ delete this.orders[symbol];
147
+ }
148
+ }
149
+ }
150
+ else if (messageHash.indexOf('positions') >= 0) {
151
+ if (messageHash === 'unsubscribe:positions') {
152
+ const cache = this.positions;
153
+ const keys = Object.keys(cache);
154
+ for (let j = 0; j < keys.length; j++) {
155
+ const symbol = keys[j];
156
+ delete this.positions[symbol];
157
+ }
158
+ }
159
+ else {
160
+ const symbol = messageHash.replace('unsubscribe:positions:', '');
161
+ if (symbol in this.positions) {
162
+ delete this.positions[symbol];
163
+ }
164
+ }
165
+ }
166
+ }
167
+ }
168
+ /**
169
+ * @method
170
+ * @name backpack#watchTicker
171
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
172
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Ticker
173
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
174
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
175
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
176
+ */
177
+ async watchTicker(symbol, params = {}) {
178
+ await this.loadMarkets();
179
+ const market = this.market(symbol);
180
+ symbol = market['symbol'];
181
+ const topic = 'ticker' + '.' + market['id'];
182
+ const messageHash = 'ticker' + ':' + symbol;
183
+ return await this.watchPublic([topic], [messageHash], params);
184
+ }
185
+ /**
186
+ * @method
187
+ * @name backpack#unWatchTicker
188
+ * @description unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
189
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Ticker
190
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
191
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
192
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
193
+ */
194
+ async unWatchTicker(symbol, params = {}) {
195
+ return await this.unWatchTickers([symbol], params);
196
+ }
197
+ /**
198
+ * @method
199
+ * @name backpack#watchTickers
200
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
201
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Ticker
202
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
203
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
204
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
205
+ */
206
+ async watchTickers(symbols = undefined, params = {}) {
207
+ await this.loadMarkets();
208
+ symbols = this.marketSymbols(symbols, undefined, false);
209
+ const messageHashes = [];
210
+ const topics = [];
211
+ for (let i = 0; i < symbols.length; i++) {
212
+ const symbol = symbols[i];
213
+ const marketId = this.marketId(symbol);
214
+ messageHashes.push('ticker:' + symbol);
215
+ topics.push('ticker.' + marketId);
216
+ }
217
+ await this.watchPublic(topics, messageHashes, params);
218
+ return this.filterByArray(this.tickers, 'symbol', symbols);
219
+ }
220
+ /**
221
+ * @method
222
+ * @name backpack#unWatchTickers
223
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
224
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Ticker
225
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
226
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
227
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
228
+ */
229
+ async unWatchTickers(symbols = undefined, params = {}) {
230
+ await this.loadMarkets();
231
+ symbols = this.marketSymbols(symbols, undefined, false);
232
+ const topics = [];
233
+ const messageHashes = [];
234
+ for (let i = 0; i < symbols.length; i++) {
235
+ const symbol = symbols[i];
236
+ const marketId = this.marketId(symbol);
237
+ topics.push('ticker.' + marketId);
238
+ messageHashes.push('unsubscribe:ticker:' + symbol);
239
+ }
240
+ return await this.watchPublic(topics, messageHashes, params, true);
241
+ }
242
+ handleTicker(client, message) {
243
+ //
244
+ // {
245
+ // data: {
246
+ // E: '1754176123312507',
247
+ // V: '19419526.742584',
248
+ // c: '3398.57',
249
+ // e: 'ticker',
250
+ // h: '3536.65',
251
+ // l: '3371.8',
252
+ // n: 17152,
253
+ // o: '3475.45',
254
+ // s: 'ETH_USDC',
255
+ // v: '5573.5827'
256
+ // },
257
+ // stream: 'bookTicker.ETH_USDC'
258
+ // }
259
+ //
260
+ const ticker = this.safeDict(message, 'data', {});
261
+ const marketId = this.safeString(ticker, 's');
262
+ const market = this.safeMarket(marketId);
263
+ const symbol = this.safeSymbol(marketId, market);
264
+ const parsedTicker = this.parseWsTicker(ticker, market);
265
+ const messageHash = 'ticker' + ':' + symbol;
266
+ this.tickers[symbol] = parsedTicker;
267
+ client.resolve(parsedTicker, messageHash);
268
+ }
269
+ parseWsTicker(ticker, market = undefined) {
270
+ //
271
+ // {
272
+ // E: '1754178406415232',
273
+ // V: '19303818.6923',
274
+ // c: '3407.54',
275
+ // e: 'ticker',
276
+ // h: '3536.65',
277
+ // l: '3369.18',
278
+ // n: 17272,
279
+ // o: '3481.71',
280
+ // s: 'ETH_USDC',
281
+ // v: '5542.3911'
282
+ // }
283
+ //
284
+ const microseconds = this.safeInteger(ticker, 'E');
285
+ const timestamp = this.parseToInt(microseconds / 1000);
286
+ const marketId = this.safeString(ticker, 's');
287
+ market = this.safeMarket(marketId, market);
288
+ const symbol = this.safeSymbol(marketId, market);
289
+ const last = this.safeString(ticker, 'c');
290
+ const open = this.safeString(ticker, 'o');
291
+ return this.safeTicker({
292
+ 'symbol': symbol,
293
+ 'timestamp': timestamp,
294
+ 'datetime': this.iso8601(timestamp),
295
+ 'high': this.safeNumber(ticker, 'h'),
296
+ 'low': this.safeNumber(ticker, 'l'),
297
+ 'bid': undefined,
298
+ 'bidVolume': undefined,
299
+ 'ask': undefined,
300
+ 'askVolume': undefined,
301
+ 'vwap': undefined,
302
+ 'open': open,
303
+ 'close': last,
304
+ 'last': last,
305
+ 'previousClose': undefined,
306
+ 'change': undefined,
307
+ 'percentage': undefined,
308
+ 'average': undefined,
309
+ 'baseVolume': this.safeString(ticker, 'v'),
310
+ 'quoteVolume': this.safeString(ticker, 'V'),
311
+ 'info': ticker,
312
+ }, market);
313
+ }
314
+ /**
315
+ * @method
316
+ * @name backpack#watchBidsAsks
317
+ * @description watches best bid & ask for symbols
318
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Book-ticker
319
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
320
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
321
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
322
+ */
323
+ async watchBidsAsks(symbols = undefined, params = {}) {
324
+ await this.loadMarkets();
325
+ symbols = this.marketSymbols(symbols, undefined, false);
326
+ const topics = [];
327
+ const messageHashes = [];
328
+ for (let i = 0; i < symbols.length; i++) {
329
+ const symbol = symbols[i];
330
+ const marketId = this.marketId(symbol);
331
+ topics.push('bookTicker.' + marketId);
332
+ messageHashes.push('bidask:' + symbol);
333
+ }
334
+ await this.watchPublic(topics, messageHashes, params);
335
+ return this.filterByArray(this.bidsasks, 'symbol', symbols);
336
+ }
337
+ /**
338
+ * @method
339
+ * @name backpack#unWatchBidsAsks
340
+ * @description unWatches best bid & ask for symbols
341
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
342
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
343
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
344
+ */
345
+ async unWatchBidsAsks(symbols = undefined, params = {}) {
346
+ await this.loadMarkets();
347
+ symbols = this.marketSymbols(symbols, undefined, false);
348
+ const topics = [];
349
+ const messageHashes = [];
350
+ for (let i = 0; i < symbols.length; i++) {
351
+ const symbol = symbols[i];
352
+ const marketId = this.marketId(symbol);
353
+ topics.push('bookTicker.' + marketId);
354
+ messageHashes.push('unsubscribe:bidask:' + symbol);
355
+ }
356
+ return await this.watchPublic(topics, messageHashes, params, true);
357
+ }
358
+ handleBidAsk(client, message) {
359
+ //
360
+ // {
361
+ // data: {
362
+ // A: '0.4087',
363
+ // B: '0.0020',
364
+ // E: '1754517402450016',
365
+ // T: '1754517402449064',
366
+ // a: '3667.50',
367
+ // b: '3667.49',
368
+ // e: 'bookTicker',
369
+ // s: 'ETH_USDC',
370
+ // u: 1328288557
371
+ // },
372
+ // stream: 'bookTicker.ETH_USDC'
373
+ // }
374
+ const data = this.safeDict(message, 'data', {});
375
+ const marketId = this.safeString(data, 's');
376
+ const market = this.safeMarket(marketId);
377
+ const symbol = this.safeSymbol(marketId, market);
378
+ const parsedBidAsk = this.parseWsBidAsk(data, market);
379
+ const messageHash = 'bidask' + ':' + symbol;
380
+ this.bidsasks[symbol] = parsedBidAsk;
381
+ client.resolve(parsedBidAsk, messageHash);
382
+ }
383
+ parseWsBidAsk(ticker, market = undefined) {
384
+ //
385
+ // {
386
+ // A: '0.4087',
387
+ // B: '0.0020',
388
+ // E: '1754517402450016',
389
+ // T: '1754517402449064',
390
+ // a: '3667.50',
391
+ // b: '3667.49',
392
+ // e: 'bookTicker',
393
+ // s: 'ETH_USDC',
394
+ // u: 1328288557
395
+ // }
396
+ //
397
+ const marketId = this.safeString(ticker, 's');
398
+ market = this.safeMarket(marketId, market);
399
+ const symbol = this.safeString(market, 'symbol');
400
+ const microseconds = this.safeInteger(ticker, 'E');
401
+ const timestamp = this.parseToInt(microseconds / 1000);
402
+ const ask = this.safeString(ticker, 'a');
403
+ const askVolume = this.safeString(ticker, 'A');
404
+ const bid = this.safeString(ticker, 'b');
405
+ const bidVolume = this.safeString(ticker, 'B');
406
+ return this.safeTicker({
407
+ 'symbol': symbol,
408
+ 'timestamp': timestamp,
409
+ 'datetime': this.iso8601(timestamp),
410
+ 'ask': ask,
411
+ 'askVolume': askVolume,
412
+ 'bid': bid,
413
+ 'bidVolume': bidVolume,
414
+ 'info': ticker,
415
+ }, market);
416
+ }
417
+ /**
418
+ * @method
419
+ * @name backpack#watchOHLCV
420
+ * @description watches historical candlestick data containing the open, high, low, close price, and the volume of a market
421
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/K-Line
422
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
423
+ * @param {string} timeframe the length of time each candle represents
424
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
425
+ * @param {int} [limit] the maximum amount of candles to fetch
426
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
427
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
428
+ */
429
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
430
+ const result = await this.watchOHLCVForSymbols([[symbol, timeframe]], since, limit, params);
431
+ return result[symbol][timeframe];
432
+ }
433
+ /**
434
+ * @method
435
+ * @name backpack#unWatchOHLCV
436
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
437
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/K-Line
438
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
439
+ * @param {string} timeframe the length of time each candle represents
440
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
441
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
442
+ */
443
+ async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
444
+ return await this.unWatchOHLCVForSymbols([[symbol, timeframe]], params);
445
+ }
446
+ /**
447
+ * @method
448
+ * @name backpack#watchOHLCVForSymbols
449
+ * @description watches historical candlestick data containing the open, high, low, close price, and the volume of a market
450
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/K-Line
451
+ * @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
452
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
453
+ * @param {int} [limit] the maximum amount of candles to fetch
454
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
455
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
456
+ */
457
+ async watchOHLCVForSymbols(symbolsAndTimeframes, since = undefined, limit = undefined, params = {}) {
458
+ const symbolsLength = symbolsAndTimeframes.length;
459
+ if (symbolsLength === 0 || !Array.isArray(symbolsAndTimeframes[0])) {
460
+ throw new ArgumentsRequired(this.id + " watchOHLCVForSymbols() requires a an array of symbols and timeframes, like ['ETH/USDC', '1m']");
461
+ }
462
+ await this.loadMarkets();
463
+ const topics = [];
464
+ const messageHashes = [];
465
+ for (let i = 0; i < symbolsAndTimeframes.length; i++) {
466
+ const symbolAndTimeframe = symbolsAndTimeframes[i];
467
+ const marketId = this.safeString(symbolAndTimeframe, 0);
468
+ const market = this.market(marketId);
469
+ const tf = this.safeString(symbolAndTimeframe, 1);
470
+ const interval = this.safeString(this.timeframes, tf, tf);
471
+ topics.push('kline.' + interval + '.' + market['id']);
472
+ messageHashes.push('candles:' + market['symbol'] + ':' + interval);
473
+ }
474
+ const [symbol, timeframe, candles] = await this.watchPublic(topics, messageHashes, params);
475
+ if (this.newUpdates) {
476
+ limit = candles.getLimit(symbol, limit);
477
+ }
478
+ const filtered = this.filterBySinceLimit(candles, since, limit, 0, true);
479
+ return this.createOHLCVObject(symbol, timeframe, filtered);
480
+ }
481
+ /**
482
+ * @method
483
+ * @name backpack#unWatchOHLCVForSymbols
484
+ * @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
485
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/K-Line
486
+ * @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
487
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
488
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
489
+ */
490
+ async unWatchOHLCVForSymbols(symbolsAndTimeframes, params = {}) {
491
+ const symbolsLength = symbolsAndTimeframes.length;
492
+ if (symbolsLength === 0 || !Array.isArray(symbolsAndTimeframes[0])) {
493
+ throw new ArgumentsRequired(this.id + " unWatchOHLCVForSymbols() requires a an array of symbols and timeframes, like ['ETH/USDC', '1m']");
494
+ }
495
+ await this.loadMarkets();
496
+ const topics = [];
497
+ const messageHashes = [];
498
+ for (let i = 0; i < symbolsAndTimeframes.length; i++) {
499
+ const symbolAndTimeframe = symbolsAndTimeframes[i];
500
+ const marketId = this.safeString(symbolAndTimeframe, 0);
501
+ const market = this.market(marketId);
502
+ const tf = this.safeString(symbolAndTimeframe, 1);
503
+ const interval = this.safeString(this.timeframes, tf, tf);
504
+ topics.push('kline.' + interval + '.' + market['id']);
505
+ messageHashes.push('unsubscribe:candles:' + market['symbol'] + ':' + interval);
506
+ }
507
+ return await this.watchPublic(topics, messageHashes, params, true);
508
+ }
509
+ handleOHLCV(client, message) {
510
+ //
511
+ // {
512
+ // data: {
513
+ // E: '1754519557526056',
514
+ // T: '2025-08-07T00:00:00',
515
+ // X: false,
516
+ // c: '3680.520000000',
517
+ // e: 'kline',
518
+ // h: '3681.370000000',
519
+ // l: '3667.650000000',
520
+ // n: 255,
521
+ // o: '3670.150000000',
522
+ // s: 'ETH_USDC',
523
+ // t: '2025-08-06T22:00:00',
524
+ // v: '62.2621000'
525
+ // },
526
+ // stream: 'kline.2h.ETH_USDC'
527
+ // }
528
+ //
529
+ const data = this.safeDict(message, 'data', {});
530
+ const marketId = this.safeString(data, 's');
531
+ const market = this.market(marketId);
532
+ const symbol = market['symbol'];
533
+ const stream = this.safeString(message, 'stream');
534
+ const parts = stream.split('.');
535
+ const timeframe = this.safeString(parts, 1);
536
+ if (!(symbol in this.ohlcvs)) {
537
+ this.ohlcvs[symbol] = {};
538
+ }
539
+ if (!(timeframe in this.ohlcvs[symbol])) {
540
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
541
+ const stored = new ArrayCacheByTimestamp(limit);
542
+ this.ohlcvs[symbol][timeframe] = stored;
543
+ }
544
+ const ohlcv = this.ohlcvs[symbol][timeframe];
545
+ const parsed = this.parseWsOHLCV(data);
546
+ ohlcv.append(parsed);
547
+ const messageHash = 'candles:' + symbol + ':' + timeframe;
548
+ client.resolve([symbol, timeframe, ohlcv], messageHash);
549
+ }
550
+ parseWsOHLCV(ohlcv, market = undefined) {
551
+ //
552
+ // {
553
+ // E: '1754519557526056',
554
+ // T: '2025-08-07T00:00:00',
555
+ // X: false,
556
+ // c: '3680.520000000',
557
+ // e: 'kline',
558
+ // h: '3681.370000000',
559
+ // l: '3667.650000000',
560
+ // n: 255,
561
+ // o: '3670.150000000',
562
+ // s: 'ETH_USDC',
563
+ // t: '2025-08-06T22:00:00',
564
+ // v: '62.2621000'
565
+ // },
566
+ //
567
+ return [
568
+ this.parse8601(this.safeString(ohlcv, 'T')),
569
+ this.safeNumber(ohlcv, 'o'),
570
+ this.safeNumber(ohlcv, 'h'),
571
+ this.safeNumber(ohlcv, 'l'),
572
+ this.safeNumber(ohlcv, 'c'),
573
+ this.safeNumber(ohlcv, 'v'),
574
+ ];
575
+ }
576
+ /**
577
+ * @method
578
+ * @name backpack#watchTrades
579
+ * @description watches information on multiple trades made in a market
580
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Trade
581
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
582
+ * @param {int} [since] the earliest time in ms to fetch trades for
583
+ * @param {int} [limit] the maximum number of trade structures to retrieve
584
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
585
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
586
+ */
587
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
588
+ return await this.watchTradesForSymbols([symbol], since, limit, params);
589
+ }
590
+ /**
591
+ * @method
592
+ * @name backpack#unWatchTrades
593
+ * @description unWatches from the stream channel
594
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Trade
595
+ * @param {string} symbol unified symbol of the market to fetch trades for
596
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
597
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
598
+ */
599
+ async unWatchTrades(symbol, params = {}) {
600
+ return await this.unWatchTradesForSymbols([symbol], params);
601
+ }
602
+ /**
603
+ * @method
604
+ * @name backpack#watchTradesForSymbols
605
+ * @description watches information on multiple trades made in a market
606
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Trade
607
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
608
+ * @param {int} [since] the earliest time in ms to fetch trades for
609
+ * @param {int} [limit] the maximum number of trade structures to retrieve
610
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
611
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
612
+ */
613
+ async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
614
+ await this.loadMarkets();
615
+ symbols = this.marketSymbols(symbols);
616
+ const symbolsLength = symbols.length;
617
+ if (symbolsLength === 0) {
618
+ throw new ArgumentsRequired(this.id + ' watchTradesForSymbols() requires a non-empty array of symbols');
619
+ }
620
+ const topics = [];
621
+ const messageHashes = [];
622
+ for (let i = 0; i < symbols.length; i++) {
623
+ const symbol = symbols[i];
624
+ const marketId = this.marketId(symbol);
625
+ topics.push('trade.' + marketId);
626
+ messageHashes.push('trades:' + symbol);
627
+ }
628
+ const trades = await this.watchPublic(topics, messageHashes, params);
629
+ if (this.newUpdates) {
630
+ const first = this.safeValue(trades, 0);
631
+ const tradeSymbol = this.safeString(first, 'symbol');
632
+ limit = trades.getLimit(tradeSymbol, limit);
633
+ }
634
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
635
+ }
636
+ /**
637
+ * @method
638
+ * @name backpack#unWatchTradesForSymbols
639
+ * @description unWatches from the stream channel
640
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Trade
641
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
642
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
643
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
644
+ */
645
+ async unWatchTradesForSymbols(symbols, params = {}) {
646
+ await this.loadMarkets();
647
+ symbols = this.marketSymbols(symbols);
648
+ const symbolsLength = symbols.length;
649
+ if (symbolsLength === 0) {
650
+ throw new ArgumentsRequired(this.id + ' unWatchTradesForSymbols() requires a non-empty array of symbols');
651
+ }
652
+ const topics = [];
653
+ const messageHashes = [];
654
+ for (let i = 0; i < symbols.length; i++) {
655
+ const symbol = symbols[i];
656
+ const marketId = this.marketId(symbol);
657
+ topics.push('trade.' + marketId);
658
+ messageHashes.push('unsubscribe:trades:' + symbol);
659
+ }
660
+ return await this.watchPublic(topics, messageHashes, params, true);
661
+ }
662
+ handleTrades(client, message) {
663
+ //
664
+ // {
665
+ // data: {
666
+ // E: '1754601477746429',
667
+ // T: '1754601477744000',
668
+ // a: '5121860761',
669
+ // b: '5121861755',
670
+ // e: 'trade',
671
+ // m: false,
672
+ // p: '3870.25',
673
+ // q: '0.0008',
674
+ // s: 'ETH_USDC_PERP',
675
+ // t: 10782547
676
+ // },
677
+ // stream: 'trade.ETH_USDC_PERP'
678
+ // }
679
+ //
680
+ const data = this.safeDict(message, 'data', {});
681
+ const marketId = this.safeString(data, 's');
682
+ const market = this.market(marketId);
683
+ const symbol = market['symbol'];
684
+ if (!(symbol in this.trades)) {
685
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
686
+ const stored = new ArrayCache(limit);
687
+ this.trades[symbol] = stored;
688
+ }
689
+ const cache = this.trades[symbol];
690
+ const trade = this.parseWsTrade(data, market);
691
+ cache.append(trade);
692
+ const messageHash = 'trades:' + symbol;
693
+ client.resolve(cache, messageHash);
694
+ client.resolve(cache, 'trades');
695
+ }
696
+ parseWsTrade(trade, market = undefined) {
697
+ //
698
+ // {
699
+ // E: '1754601477746429',
700
+ // T: '1754601477744000',
701
+ // a: '5121860761',
702
+ // b: '5121861755',
703
+ // e: 'trade',
704
+ // m: false,
705
+ // p: '3870.25',
706
+ // q: '0.0008',
707
+ // s: 'ETH_USDC_PERP',
708
+ // t: 10782547
709
+ // }
710
+ //
711
+ const microseconds = this.safeInteger(trade, 'E');
712
+ const timestamp = this.parseToInt(microseconds / 1000);
713
+ const id = this.safeString(trade, 't');
714
+ const marketId = this.safeString(trade, 's');
715
+ market = this.safeMarket(marketId, market);
716
+ const isMaker = this.safeBool(trade, 'm');
717
+ const side = isMaker ? 'sell' : 'buy';
718
+ const takerOrMaker = isMaker ? 'maker' : 'taker';
719
+ const price = this.safeString(trade, 'p');
720
+ const amount = this.safeString(trade, 'q');
721
+ let orderId = undefined;
722
+ if (side === 'buy') {
723
+ orderId = this.safeString(trade, 'b');
724
+ }
725
+ else {
726
+ orderId = this.safeString(trade, 'a');
727
+ }
728
+ return this.safeTrade({
729
+ 'info': trade,
730
+ 'id': id,
731
+ 'timestamp': timestamp,
732
+ 'datetime': this.iso8601(timestamp),
733
+ 'symbol': market['symbol'],
734
+ 'order': orderId,
735
+ 'type': undefined,
736
+ 'side': side,
737
+ 'takerOrMaker': takerOrMaker,
738
+ 'price': price,
739
+ 'amount': amount,
740
+ 'cost': undefined,
741
+ 'fee': {
742
+ 'currency': undefined,
743
+ 'cost': undefined,
744
+ },
745
+ }, market);
746
+ }
747
+ /**
748
+ * @method
749
+ * @name backpack#watchOrderBook
750
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
751
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Depth
752
+ * @param {string} symbol unified symbol of the market to fetch the order book for
753
+ * @param {int} [limit] the maximum amount of order book entries to return
754
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
755
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
756
+ */
757
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
758
+ return await this.watchOrderBookForSymbols([symbol], limit, params);
759
+ }
760
+ /**
761
+ * @method
762
+ * @name backpack#watchOrderBookForSymbols
763
+ * @see https://docs.backpack.exchange/#tag/Streams/Public/Depth
764
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
765
+ * @param {string[]} symbols unified array of symbols
766
+ * @param {int} [limit] the maximum amount of order book entries to return
767
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
768
+ * @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
769
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
770
+ */
771
+ async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
772
+ await this.loadMarkets();
773
+ symbols = this.marketSymbols(symbols, undefined, false);
774
+ const marketIds = this.marketIds(symbols);
775
+ const messageHashes = [];
776
+ const topics = [];
777
+ for (let i = 0; i < symbols.length; i++) {
778
+ const symbol = symbols[i];
779
+ messageHashes.push('orderbook:' + symbol);
780
+ const marketId = marketIds[i];
781
+ const topic = 'depth.' + marketId;
782
+ topics.push(topic);
783
+ }
784
+ const orderbook = await this.watchPublic(topics, messageHashes, params);
785
+ return orderbook.limit(); // todo check if limit is needed
786
+ }
787
+ /**
788
+ * @method
789
+ * @name backpack#unWatchOrderBook
790
+ * @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
791
+ * @param {string} symbol unified array of symbols
792
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
793
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
794
+ */
795
+ async unWatchOrderBook(symbol, params = {}) {
796
+ return await this.unWatchOrderBookForSymbols([symbol], params);
797
+ }
798
+ /**
799
+ * @method
800
+ * @name kucoin#unWatchOrderBookForSymbols
801
+ * @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
802
+ * @param {string[]} symbols unified array of symbols
803
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
804
+ * @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
805
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
806
+ */
807
+ async unWatchOrderBookForSymbols(symbols, params = {}) {
808
+ await this.loadMarkets();
809
+ symbols = this.marketSymbols(symbols, undefined, false);
810
+ const marketIds = this.marketIds(symbols);
811
+ const messageHashes = [];
812
+ const topics = [];
813
+ for (let i = 0; i < symbols.length; i++) {
814
+ const symbol = symbols[i];
815
+ messageHashes.push('unsubscribe:orderbook:' + symbol);
816
+ const marketId = marketIds[i];
817
+ const topic = 'depth.' + marketId;
818
+ topics.push(topic);
819
+ }
820
+ return await this.watchPublic(topics, messageHashes, params, true);
821
+ }
822
+ handleOrderBook(client, message) {
823
+ //
824
+ // initial snapshot is fetched with ccxt's fetchOrderBook
825
+ // the feed does not include a snapshot, just the deltas
826
+ //
827
+ // {
828
+ // "data": {
829
+ // "E": "1754903057555305",
830
+ // "T": "1754903057554352",
831
+ // "U": 1345937436,
832
+ // "a": [],
833
+ // "b": [],
834
+ // "e": "depth",
835
+ // "s": "ETH_USDC",
836
+ // "u": 1345937436
837
+ // },
838
+ // "stream": "depth.ETH_USDC"
839
+ // }
840
+ //
841
+ const data = this.safeDict(message, 'data', {});
842
+ const marketId = this.safeString(data, 's');
843
+ const symbol = this.safeSymbol(marketId);
844
+ if (!(symbol in this.orderbooks)) {
845
+ this.orderbooks[symbol] = this.orderBook();
846
+ }
847
+ const storedOrderBook = this.orderbooks[symbol];
848
+ const nonce = this.safeInteger(storedOrderBook, 'nonce');
849
+ const deltaNonce = this.safeInteger(data, 'u');
850
+ const messageHash = 'orderbook:' + symbol;
851
+ if (nonce === undefined) {
852
+ const cacheLength = storedOrderBook.cache.length;
853
+ // the rest API is very delayed
854
+ // usually it takes at least 9 deltas to resolve
855
+ const snapshotDelay = this.handleOption('watchOrderBook', 'snapshotDelay', 10);
856
+ if (cacheLength === snapshotDelay) {
857
+ this.spawn(this.loadOrderBook, client, messageHash, symbol, null, {});
858
+ }
859
+ storedOrderBook.cache.push(data);
860
+ return;
861
+ }
862
+ else if (nonce >= deltaNonce) {
863
+ return;
864
+ }
865
+ this.handleDelta(storedOrderBook, data);
866
+ client.resolve(storedOrderBook, messageHash);
867
+ }
868
+ handleDelta(orderbook, delta) {
869
+ const timestamp = this.parseToInt(this.safeInteger(delta, 'T') / 1000);
870
+ orderbook['timestamp'] = timestamp;
871
+ orderbook['datetime'] = this.iso8601(timestamp);
872
+ orderbook['nonce'] = this.safeInteger(delta, 'u');
873
+ const bids = this.safeDict(delta, 'b', []);
874
+ const asks = this.safeDict(delta, 'a', []);
875
+ const storedBids = orderbook['bids'];
876
+ const storedAsks = orderbook['asks'];
877
+ this.handleBidAsks(storedBids, bids);
878
+ this.handleBidAsks(storedAsks, asks);
879
+ }
880
+ handleBidAsks(bookSide, bidAsks) {
881
+ for (let i = 0; i < bidAsks.length; i++) {
882
+ const bidAsk = this.parseBidAsk(bidAsks[i]);
883
+ bookSide.storeArray(bidAsk);
884
+ }
885
+ }
886
+ getCacheIndex(orderbook, cache) {
887
+ const firstDelta = this.safeDict(cache, 0);
888
+ const nonce = this.safeInteger(orderbook, 'nonce');
889
+ const firstDeltaStart = this.safeInteger(firstDelta, 'sequenceStart');
890
+ if (nonce < firstDeltaStart - 1) {
891
+ return -1;
892
+ }
893
+ for (let i = 0; i < cache.length; i++) {
894
+ const delta = cache[i];
895
+ const deltaStart = this.safeInteger(delta, 'sequenceStart');
896
+ const deltaEnd = this.safeInteger(delta, 'sequenceEnd');
897
+ if ((nonce >= deltaStart - 1) && (nonce < deltaEnd)) {
898
+ return i;
899
+ }
900
+ }
901
+ return cache.length;
902
+ }
903
+ /**
904
+ * @method
905
+ * @name backpack#watchOrders
906
+ * @description watches information on multiple orders made by the user
907
+ * @see https://docs.backpack.exchange/#tag/Streams/Private/Order-update
908
+ * @param {string} [symbol] unified market symbol of the market orders were made in
909
+ * @param {int} [since] the earliest time in ms to fetch orders for
910
+ * @param {int} [limit] the maximum number of order structures to retrieve
911
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
912
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
913
+ */
914
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
915
+ await this.loadMarkets();
916
+ let market = undefined;
917
+ if (symbol !== undefined) {
918
+ market = this.market(symbol);
919
+ symbol = market['symbol'];
920
+ }
921
+ let topic = 'account.orderUpdate';
922
+ let messageHash = 'orders';
923
+ if (market !== undefined) {
924
+ topic = 'account.orderUpdate.' + market['id'];
925
+ messageHash = 'orders:' + symbol;
926
+ }
927
+ const orders = await this.watchPrivate([topic], [messageHash], params);
928
+ if (this.newUpdates) {
929
+ limit = orders.getLimit(symbol, limit);
930
+ }
931
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
932
+ }
933
+ /**
934
+ * @method
935
+ * @name backpack#unWatchOrders
936
+ * @description unWatches information on multiple orders made by the user
937
+ * @see https://docs.backpack.exchange/#tag/Streams/Private/Order-update
938
+ * @param {string} [symbol] unified market symbol of the market orders were made in
939
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
940
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
941
+ */
942
+ async unWatchOrders(symbol = undefined, params = {}) {
943
+ await this.loadMarkets();
944
+ let market = undefined;
945
+ if (symbol !== undefined) {
946
+ market = this.market(symbol);
947
+ symbol = market['symbol'];
948
+ }
949
+ let topic = 'account.orderUpdate';
950
+ let messageHash = 'unsubscribe:orders';
951
+ if (market !== undefined) {
952
+ topic = 'account.orderUpdate.' + market['id'];
953
+ messageHash = 'unsubscribe:orders:' + symbol;
954
+ }
955
+ return await this.watchPrivate([topic], [messageHash], params, true);
956
+ }
957
+ handleOrder(client, message) {
958
+ //
959
+ // {
960
+ // data: {
961
+ // E: '1754939110175843',
962
+ // O: 'USER',
963
+ // Q: '4.30',
964
+ // S: 'Bid',
965
+ // T: '1754939110174703',
966
+ // V: 'RejectTaker',
967
+ // X: 'New',
968
+ // Z: '0',
969
+ // e: 'orderAccepted',
970
+ // f: 'GTC',
971
+ // i: '5406825793',
972
+ // o: 'MARKET',
973
+ // q: '0.0010',
974
+ // r: false,
975
+ // s: 'ETH_USDC',
976
+ // t: null,
977
+ // z: '0'
978
+ // },
979
+ // stream: 'account.orderUpdate.ETH_USDC'
980
+ // }
981
+ //
982
+ const messageHash = 'orders';
983
+ const data = this.safeDict(message, 'data', {});
984
+ const marketId = this.safeString(data, 's');
985
+ const market = this.safeMarket(marketId);
986
+ const symbol = market['symbol'];
987
+ const parsed = this.parseWsOrder(data, market);
988
+ let orders = this.orders;
989
+ if (orders === undefined) {
990
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
991
+ orders = new ArrayCacheBySymbolById(limit);
992
+ this.orders = orders;
993
+ }
994
+ orders.append(parsed);
995
+ client.resolve(orders, messageHash);
996
+ const symbolSpecificMessageHash = messageHash + ':' + symbol;
997
+ client.resolve(orders, symbolSpecificMessageHash);
998
+ }
999
+ parseWsOrder(order, market = undefined) {
1000
+ //
1001
+ // {
1002
+ // E: '1754939110175879',
1003
+ // L: '4299.16',
1004
+ // N: 'ETH',
1005
+ // O: 'USER',
1006
+ // Q: '4.30',
1007
+ // S: 'Bid',
1008
+ // T: '1754939110174705',
1009
+ // V: 'RejectTaker',
1010
+ // X: 'Filled',
1011
+ // Z: '4.299160',
1012
+ // e: 'orderFill',
1013
+ // f: 'GTC',
1014
+ // i: '5406825793',
1015
+ // l: '0.0010',
1016
+ // m: false,
1017
+ // n: '0.000001',
1018
+ // o: 'MARKET',
1019
+ // q: '0.0010',
1020
+ // r: false,
1021
+ // s: 'ETH_USDC',
1022
+ // t: 2888471,
1023
+ // z: '0.0010'
1024
+ // },
1025
+ //
1026
+ const id = this.safeString(order, 'i');
1027
+ const clientOrderId = this.safeString(order, 'c');
1028
+ const microseconds = this.safeInteger(order, 'E');
1029
+ const timestamp = this.parseToInt(microseconds / 1000);
1030
+ const status = this.parseWsOrderStatus(this.safeString(order, 'X'), market);
1031
+ const marketId = this.safeString(order, 's');
1032
+ market = this.safeMarket(marketId, market);
1033
+ const symbol = market['symbol'];
1034
+ const type = this.safeStringLower(order, 'o');
1035
+ const timeInForce = this.safeString(order, 'f');
1036
+ const side = this.parseWsOrderSide(this.safeString(order, 'S'));
1037
+ const price = this.safeString(order, 'p');
1038
+ const triggerPrice = this.safeNumber(order, 'P');
1039
+ const amount = this.safeString(order, 'q');
1040
+ const cost = this.safeString(order, 'Z');
1041
+ const filled = this.safeString(order, 'l');
1042
+ let fee = undefined;
1043
+ const feeCurrency = this.safeString(order, 'N');
1044
+ if (feeCurrency !== undefined) {
1045
+ fee = {
1046
+ 'currency': feeCurrency,
1047
+ 'cost': undefined,
1048
+ };
1049
+ }
1050
+ return this.safeOrder({
1051
+ 'id': id,
1052
+ 'clientOrderId': clientOrderId,
1053
+ 'timestamp': timestamp,
1054
+ 'datetime': this.iso8601(timestamp),
1055
+ 'lastTradeTimestamp': undefined,
1056
+ 'status': status,
1057
+ 'symbol': symbol,
1058
+ 'type': type,
1059
+ 'timeInForce': timeInForce,
1060
+ 'side': side,
1061
+ 'price': price,
1062
+ 'stopPrice': undefined,
1063
+ 'triggerPrice': triggerPrice,
1064
+ 'average': undefined,
1065
+ 'amount': amount,
1066
+ 'cost': cost,
1067
+ 'filled': filled,
1068
+ 'remaining': undefined,
1069
+ 'fee': fee,
1070
+ 'trades': undefined,
1071
+ 'info': order,
1072
+ }, market);
1073
+ }
1074
+ parseWsOrderStatus(status, market = undefined) {
1075
+ const statuses = {
1076
+ 'New': 'open',
1077
+ 'Filled': 'closed',
1078
+ 'Cancelled': 'canceled',
1079
+ 'Expired': 'canceled',
1080
+ 'PartiallyFilled': 'open',
1081
+ 'TriggerPending': 'open',
1082
+ 'TriggerFailed': 'rejected',
1083
+ };
1084
+ return this.safeString(statuses, status, status);
1085
+ }
1086
+ parseWsOrderSide(side) {
1087
+ const sides = {
1088
+ 'Bid': 'buy',
1089
+ 'Ask': 'sell',
1090
+ };
1091
+ return this.safeString(sides, side, side);
1092
+ }
1093
+ /**
1094
+ * @method
1095
+ * @name backpack#watchPositions
1096
+ * @description watch all open positions
1097
+ * @see https://docs.backpack.exchange/#tag/Streams/Private/Position-update
1098
+ * @param {string[]} [symbols] list of unified market symbols to watch positions for
1099
+ * @param {int} [since] the earliest time in ms to fetch positions for
1100
+ * @param {int} [limit] the maximum number of positions to retrieve
1101
+ * @param {object} params extra parameters specific to the exchange API endpoint
1102
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
1103
+ */
1104
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
1105
+ await this.loadMarkets();
1106
+ symbols = this.marketSymbols(symbols);
1107
+ const messageHashes = [];
1108
+ const topics = [];
1109
+ if (symbols !== undefined) {
1110
+ for (let i = 0; i < symbols.length; i++) {
1111
+ const symbol = symbols[i];
1112
+ messageHashes.push('positions' + ':' + symbol);
1113
+ topics.push('account.positionUpdate.' + this.marketId(symbol));
1114
+ }
1115
+ }
1116
+ else {
1117
+ messageHashes.push('positions');
1118
+ topics.push('account.positionUpdate');
1119
+ }
1120
+ const positions = await this.watchPrivate(topics, messageHashes, params);
1121
+ if (this.newUpdates) {
1122
+ return positions;
1123
+ }
1124
+ return this.filterBySymbolsSinceLimit(this.positions, symbols, since, limit, true);
1125
+ }
1126
+ /**
1127
+ * @method
1128
+ * @name backpack#unWatchPositions
1129
+ * @description unWatches from the stream channel
1130
+ * @see https://docs.backpack.exchange/#tag/Streams/Private/Position-update
1131
+ * @param {string[]} [symbols] list of unified market symbols to watch positions for
1132
+ * @param {object} params extra parameters specific to the exchange API endpoint
1133
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
1134
+ */
1135
+ async unWatchPositions(symbols = undefined, params = {}) {
1136
+ await this.loadMarkets();
1137
+ symbols = this.marketSymbols(symbols);
1138
+ const messageHashes = [];
1139
+ const topics = [];
1140
+ if (symbols !== undefined) {
1141
+ for (let i = 0; i < symbols.length; i++) {
1142
+ const symbol = symbols[i];
1143
+ messageHashes.push('unsubscribe:positions' + ':' + symbol);
1144
+ topics.push('account.positionUpdate.' + this.marketId(symbol));
1145
+ }
1146
+ }
1147
+ else {
1148
+ messageHashes.push('unsubscribe:positions');
1149
+ topics.push('account.positionUpdate');
1150
+ }
1151
+ return await this.watchPrivate(topics, messageHashes, params, true);
1152
+ }
1153
+ handlePositions(client, message) {
1154
+ //
1155
+ // {
1156
+ // data: {
1157
+ // B: '4236.36',
1158
+ // E: '1754943862040486',
1159
+ // M: '4235.88650933',
1160
+ // P: '-0.000473',
1161
+ // Q: '0.0010',
1162
+ // T: '1754943862040487',
1163
+ // b: '4238.479',
1164
+ // e: 'positionOpened',
1165
+ // f: '0.02',
1166
+ // i: 5411399049,
1167
+ // l: '0',
1168
+ // m: '0.0125',
1169
+ // n: '4.23588650933',
1170
+ // p: '0',
1171
+ // q: '0.0010',
1172
+ // s: 'ETH_USDC_PERP'
1173
+ // },
1174
+ // stream: 'account.positionUpdate'
1175
+ // }
1176
+ //
1177
+ const messageHash = 'positions';
1178
+ const data = this.safeDict(message, 'data', {});
1179
+ if (this.positions === undefined) {
1180
+ this.positions = new ArrayCacheBySymbolById();
1181
+ }
1182
+ const cache = this.positions;
1183
+ const parsedPosition = this.parseWsPosition(data);
1184
+ const microseconds = this.safeInteger(data, 'E');
1185
+ const timestamp = this.parseToInt(microseconds / 1000);
1186
+ parsedPosition['timestamp'] = timestamp;
1187
+ parsedPosition['datetime'] = this.iso8601(timestamp);
1188
+ cache.append(parsedPosition);
1189
+ const symbolSpecificMessageHash = messageHash + ':' + parsedPosition['symbol'];
1190
+ client.resolve([parsedPosition], messageHash);
1191
+ client.resolve([parsedPosition], symbolSpecificMessageHash);
1192
+ }
1193
+ parseWsPosition(position, market = undefined) {
1194
+ //
1195
+ // {
1196
+ // B: '4236.36',
1197
+ // E: '1754943862040486',
1198
+ // M: '4235.88650933',
1199
+ // P: '-0.000473',
1200
+ // Q: '0.0010',
1201
+ // T: '1754943862040487',
1202
+ // b: '4238.479',
1203
+ // e: 'positionOpened',
1204
+ // f: '0.02',
1205
+ // i: 5411399049,
1206
+ // l: '0',
1207
+ // m: '0.0125',
1208
+ // n: '4.23588650933',
1209
+ // p: '0',
1210
+ // q: '0.0010',
1211
+ // s: 'ETH_USDC_PERP'
1212
+ // }
1213
+ //
1214
+ const id = this.safeString(position, 'i');
1215
+ const marketId = this.safeString(position, 's');
1216
+ market = this.safeMarket(marketId, market);
1217
+ const symbol = market['symbol'];
1218
+ const notional = this.safeString(position, 'n');
1219
+ const liquidationPrice = this.safeString(position, 'l');
1220
+ const entryPrice = this.safeString(position, 'b');
1221
+ const realizedPnl = this.safeString(position, 'p');
1222
+ const unrealisedPnl = this.safeString(position, 'P');
1223
+ const contracts = this.safeString(position, 'Q');
1224
+ const markPrice = this.safeString(position, 'M');
1225
+ const netQuantity = this.safeNumber(position, 'q');
1226
+ let hedged = false;
1227
+ let side = 'long';
1228
+ if (netQuantity < 0) {
1229
+ side = 'short';
1230
+ }
1231
+ if (netQuantity === undefined) {
1232
+ hedged = undefined;
1233
+ side = undefined;
1234
+ }
1235
+ const microseconds = this.safeInteger(position, 'E');
1236
+ const timestamp = this.parseToInt(microseconds / 1000);
1237
+ const maintenanceMarginPercentage = this.safeNumber(position, 'm');
1238
+ const initialMarginPercentage = this.safeNumber(position, 'f');
1239
+ return this.safePosition({
1240
+ 'info': position,
1241
+ 'id': id,
1242
+ 'symbol': symbol,
1243
+ 'notional': notional,
1244
+ 'marginMode': undefined,
1245
+ 'liquidationPrice': liquidationPrice,
1246
+ 'entryPrice': entryPrice,
1247
+ 'realizedPnl': realizedPnl,
1248
+ 'unrealizedPnl': unrealisedPnl,
1249
+ 'percentage': undefined,
1250
+ 'contracts': contracts,
1251
+ 'contractSize': undefined,
1252
+ 'markPrice': markPrice,
1253
+ 'side': side,
1254
+ 'hedged': hedged,
1255
+ 'timestamp': timestamp,
1256
+ 'datetime': this.iso8601(timestamp),
1257
+ 'maintenanceMargin': undefined,
1258
+ 'maintenanceMarginPercentage': maintenanceMarginPercentage,
1259
+ 'collateral': undefined,
1260
+ 'initialMargin': undefined,
1261
+ 'initialMarginPercentage': initialMarginPercentage,
1262
+ 'leverage': undefined,
1263
+ 'marginRatio': undefined,
1264
+ });
1265
+ }
1266
+ handleMessage(client, message) {
1267
+ if (!this.handleErrorMessage(client, message)) {
1268
+ return;
1269
+ }
1270
+ const data = this.safeDict(message, 'data');
1271
+ const event = this.safeString(data, 'e');
1272
+ if (event === 'ticker') {
1273
+ this.handleTicker(client, message);
1274
+ }
1275
+ else if (event === 'bookTicker') {
1276
+ this.handleBidAsk(client, message);
1277
+ }
1278
+ else if (event === 'kline') {
1279
+ this.handleOHLCV(client, message);
1280
+ }
1281
+ else if (event === 'trade') {
1282
+ this.handleTrades(client, message);
1283
+ }
1284
+ else if (event === 'depth') {
1285
+ this.handleOrderBook(client, message);
1286
+ }
1287
+ else if (event === 'orderAccepted' || event === 'orderUpdate' || event === 'orderFill' || event === 'orderCancelled' || event === 'orderExpired' || event === 'orderModified' || event === 'triggerPlaced' || event === 'triggerFailed') {
1288
+ this.handleOrder(client, message);
1289
+ }
1290
+ else if (event === 'positionAdjusted' || event === 'positionOpened' || event === 'positionClosed' || event === 'positionUpdated') {
1291
+ this.handlePositions(client, message);
1292
+ }
1293
+ }
1294
+ handleErrorMessage(client, message) {
1295
+ //
1296
+ // {
1297
+ // id: null,
1298
+ // error: {
1299
+ // code: 4006,
1300
+ // message: 'Invalid stream'
1301
+ // }
1302
+ // }
1303
+ //
1304
+ const error = this.safeDict(message, 'error', {});
1305
+ const code = this.safeInteger(error, 'code');
1306
+ try {
1307
+ if (code !== undefined) {
1308
+ const msg = this.safeString(error, 'message');
1309
+ throw new ExchangeError(this.id + ' ' + msg);
1310
+ }
1311
+ return true;
1312
+ }
1313
+ catch (e) {
1314
+ client.reject(e);
1315
+ }
1316
+ return true;
1317
+ }
1318
+ }