ccxt 4.5.4 → 4.5.6

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