ccxt-ir 4.10.0 → 4.12.0

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 (1059) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +10 -1
  4. package/dist/cjs/src/abstract/bidarz.js +11 -0
  5. package/dist/cjs/src/bidarz.js +337 -0
  6. package/dist/cjs/src/bit24.js +4 -3
  7. package/dist/cjs/src/changefa.js +342 -0
  8. package/dist/cjs/src/ourbit.js +445 -0
  9. package/js/ccxt.d.ts +11 -2
  10. package/js/ccxt.js +8 -2
  11. package/js/src/abstract/bidarz.d.ts +9 -0
  12. package/js/src/abstract/bidarz.js +11 -0
  13. package/js/src/abstract/changefa.d.ts +8 -0
  14. package/js/src/abstract/changefa.js +11 -0
  15. package/js/src/abstract/ourbit.d.ts +10 -0
  16. package/js/src/abstract/ourbit.js +11 -0
  17. package/js/src/bidarz.d.ts +22 -0
  18. package/js/src/bidarz.js +336 -0
  19. package/js/src/bit24.js +4 -3
  20. package/js/src/changefa.d.ts +20 -0
  21. package/js/src/changefa.js +341 -0
  22. package/js/src/ourbit.d.ts +21 -0
  23. package/js/src/ourbit.js +444 -0
  24. package/js/src/src/abantether.d.ts +21 -0
  25. package/js/src/src/abantether.js +353 -0
  26. package/js/src/src/abstract/abantether.d.ts +8 -0
  27. package/js/src/src/abstract/abantether.js +11 -0
  28. package/js/src/src/abstract/afratether.d.ts +9 -0
  29. package/js/src/src/abstract/afratether.js +11 -0
  30. package/js/src/src/abstract/alpaca.d.ts +77 -0
  31. package/js/src/src/abstract/alpaca.js +11 -0
  32. package/js/src/src/abstract/apex.d.ts +34 -0
  33. package/js/src/src/abstract/apex.js +11 -0
  34. package/js/src/src/abstract/arzinja.d.ts +8 -0
  35. package/js/src/src/abstract/arzinja.js +11 -0
  36. package/js/src/src/abstract/arzplus.d.ts +11 -0
  37. package/js/src/src/abstract/arzplus.js +11 -0
  38. package/js/src/src/abstract/ascendex.d.ts +80 -0
  39. package/js/src/src/abstract/ascendex.js +11 -0
  40. package/js/src/src/abstract/asretether.d.ts +8 -0
  41. package/js/src/src/abstract/asretether.js +11 -0
  42. package/js/src/src/abstract/bidarz.d.ts +9 -0
  43. package/js/src/src/abstract/bidarz.js +11 -0
  44. package/js/src/src/abstract/bigone.d.ts +48 -0
  45. package/js/src/src/abstract/bigone.js +11 -0
  46. package/js/src/src/abstract/binance.d.ts +773 -0
  47. package/js/src/src/abstract/binance.js +11 -0
  48. package/js/src/src/abstract/bingx.d.ts +165 -0
  49. package/js/src/src/abstract/bingx.js +11 -0
  50. package/js/src/src/abstract/bit24.d.ts +9 -0
  51. package/js/src/src/abstract/bit24.js +11 -0
  52. package/js/src/src/abstract/bit2c.d.ts +30 -0
  53. package/js/src/src/abstract/bit2c.js +11 -0
  54. package/js/src/src/abstract/bitbank.d.ts +35 -0
  55. package/js/src/src/abstract/bitbank.js +11 -0
  56. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  57. package/js/src/src/abstract/bitbarg.js +11 -0
  58. package/js/src/src/abstract/bitbns.d.ts +43 -0
  59. package/js/src/src/abstract/bitbns.js +11 -0
  60. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  61. package/js/src/src/abstract/bitfinex.js +11 -0
  62. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  63. package/js/src/src/abstract/bitflyer.js +11 -0
  64. package/js/src/src/abstract/bitget.d.ts +578 -0
  65. package/js/src/src/abstract/bitget.js +11 -0
  66. package/js/src/src/abstract/bithumb.d.ts +35 -0
  67. package/js/src/src/abstract/bithumb.js +11 -0
  68. package/js/src/src/abstract/bitimen.d.ts +10 -0
  69. package/js/src/src/abstract/bitimen.js +11 -0
  70. package/js/src/src/abstract/bitir.d.ts +10 -0
  71. package/js/src/src/abstract/bitir.js +11 -0
  72. package/js/src/src/abstract/bitmart.d.ts +120 -0
  73. package/js/src/src/abstract/bitmart.js +11 -0
  74. package/js/src/src/abstract/bitmex.d.ts +100 -0
  75. package/js/src/src/abstract/bitmex.js +11 -0
  76. package/js/src/src/abstract/bitopro.d.ts +33 -0
  77. package/js/src/src/abstract/bitopro.js +11 -0
  78. package/js/src/src/abstract/bitpin.d.ts +11 -0
  79. package/js/src/src/abstract/bitpin.js +11 -0
  80. package/js/src/src/abstract/bitrue.d.ts +75 -0
  81. package/js/src/src/abstract/bitrue.js +11 -0
  82. package/js/src/src/abstract/bitso.d.ts +46 -0
  83. package/js/src/src/abstract/bitso.js +11 -0
  84. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  85. package/js/src/src/abstract/bitstamp.js +11 -0
  86. package/js/src/src/abstract/bitteam.d.ts +32 -0
  87. package/js/src/src/abstract/bitteam.js +11 -0
  88. package/js/src/src/abstract/bittrade.d.ts +117 -0
  89. package/js/src/src/abstract/bittrade.js +11 -0
  90. package/js/src/src/abstract/bitunix.d.ts +9 -0
  91. package/js/src/src/abstract/bitunix.js +11 -0
  92. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  93. package/js/src/src/abstract/bitvavo.js +11 -0
  94. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  95. package/js/src/src/abstract/blockchaincom.js +11 -0
  96. package/js/src/src/abstract/blofin.d.ts +70 -0
  97. package/js/src/src/abstract/blofin.js +11 -0
  98. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  99. package/js/src/src/abstract/btcalpha.js +11 -0
  100. package/js/src/src/abstract/btcbox.d.ts +18 -0
  101. package/js/src/src/abstract/btcbox.js +11 -0
  102. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  103. package/js/src/src/abstract/btcmarkets.js +11 -0
  104. package/js/src/src/abstract/btcturk.d.ts +23 -0
  105. package/js/src/src/abstract/btcturk.js +11 -0
  106. package/js/src/src/abstract/bybit.d.ts +316 -0
  107. package/js/src/src/abstract/bybit.js +11 -0
  108. package/js/src/src/abstract/bydfi.d.ts +11 -0
  109. package/js/src/src/abstract/bydfi.js +11 -0
  110. package/js/src/src/abstract/cafearz.d.ts +8 -0
  111. package/js/src/src/abstract/cafearz.js +11 -0
  112. package/js/src/src/abstract/cex.d.ts +35 -0
  113. package/js/src/src/abstract/cex.js +11 -0
  114. package/js/src/src/abstract/coinbase.d.ts +97 -0
  115. package/js/src/src/abstract/coinbase.js +11 -0
  116. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  117. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  118. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  119. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  120. package/js/src/src/abstract/coincatch.d.ts +97 -0
  121. package/js/src/src/abstract/coincatch.js +11 -0
  122. package/js/src/src/abstract/coincheck.d.ts +36 -0
  123. package/js/src/src/abstract/coincheck.js +11 -0
  124. package/js/src/src/abstract/coinex.d.ts +240 -0
  125. package/js/src/src/abstract/coinex.js +11 -0
  126. package/js/src/src/abstract/coinmate.d.ts +65 -0
  127. package/js/src/src/abstract/coinmate.js +11 -0
  128. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  129. package/js/src/src/abstract/coinmetro.js +11 -0
  130. package/js/src/src/abstract/coinone.d.ts +70 -0
  131. package/js/src/src/abstract/coinone.js +11 -0
  132. package/js/src/src/abstract/coinsph.d.ts +57 -0
  133. package/js/src/src/abstract/coinsph.js +11 -0
  134. package/js/src/src/abstract/coinspot.d.ts +31 -0
  135. package/js/src/src/abstract/coinspot.js +11 -0
  136. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  137. package/js/src/src/abstract/cryptocom.js +11 -0
  138. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  139. package/js/src/src/abstract/cryptomus.js +11 -0
  140. package/js/src/src/abstract/defx.d.ts +72 -0
  141. package/js/src/src/abstract/defx.js +11 -0
  142. package/js/src/src/abstract/delta.d.ts +53 -0
  143. package/js/src/src/abstract/delta.js +11 -0
  144. package/js/src/src/abstract/deribit.d.ts +129 -0
  145. package/js/src/src/abstract/deribit.js +11 -0
  146. package/js/src/src/abstract/derive.d.ts +120 -0
  147. package/js/src/src/abstract/derive.js +11 -0
  148. package/js/src/src/abstract/digifinex.d.ts +95 -0
  149. package/js/src/src/abstract/digifinex.js +11 -0
  150. package/js/src/src/abstract/ellipx.d.ts +28 -0
  151. package/js/src/src/abstract/ellipx.js +11 -0
  152. package/js/src/src/abstract/eterex.d.ts +8 -0
  153. package/js/src/src/abstract/eterex.js +11 -0
  154. package/js/src/src/abstract/excoino.d.ts +10 -0
  155. package/js/src/src/abstract/excoino.js +11 -0
  156. package/js/src/src/abstract/exir.d.ts +11 -0
  157. package/js/src/src/abstract/exir.js +11 -0
  158. package/js/src/src/abstract/exmo.d.ts +58 -0
  159. package/js/src/src/abstract/exmo.js +11 -0
  160. package/js/src/src/abstract/exnovin.d.ts +9 -0
  161. package/js/src/src/abstract/exnovin.js +11 -0
  162. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  163. package/js/src/src/abstract/farhadexchange.js +11 -0
  164. package/js/src/src/abstract/foxbit.d.ts +29 -0
  165. package/js/src/src/abstract/foxbit.js +11 -0
  166. package/js/src/src/abstract/gate.d.ts +287 -0
  167. package/js/src/src/abstract/gate.js +11 -0
  168. package/js/src/src/abstract/gemini.d.ts +62 -0
  169. package/js/src/src/abstract/gemini.js +11 -0
  170. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  171. package/js/src/src/abstract/hamtapay.js +11 -0
  172. package/js/src/src/abstract/hashkey.d.ts +70 -0
  173. package/js/src/src/abstract/hashkey.js +11 -0
  174. package/js/src/src/abstract/hibachi.d.ts +29 -0
  175. package/js/src/src/abstract/hibachi.js +11 -0
  176. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  177. package/js/src/src/abstract/hitbtc.js +11 -0
  178. package/js/src/src/abstract/hitobit.d.ts +11 -0
  179. package/js/src/src/abstract/hitobit.js +11 -0
  180. package/js/src/src/abstract/hollaex.d.ts +36 -0
  181. package/js/src/src/abstract/hollaex.js +11 -0
  182. package/js/src/src/abstract/htx.d.ts +551 -0
  183. package/js/src/src/abstract/htx.js +11 -0
  184. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  185. package/js/src/src/abstract/hyperliquid.js +11 -0
  186. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  187. package/js/src/src/abstract/independentreserve.js +11 -0
  188. package/js/src/src/abstract/indodax.d.ts +29 -0
  189. package/js/src/src/abstract/indodax.js +11 -0
  190. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  191. package/js/src/src/abstract/iranexchange.js +11 -0
  192. package/js/src/src/abstract/jibitex.d.ts +10 -0
  193. package/js/src/src/abstract/jibitex.js +11 -0
  194. package/js/src/src/abstract/kcex.d.ts +10 -0
  195. package/js/src/src/abstract/kcex.js +11 -0
  196. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  197. package/js/src/src/abstract/kifpoolme.js +11 -0
  198. package/js/src/src/abstract/kraken.d.ts +61 -0
  199. package/js/src/src/abstract/kraken.js +11 -0
  200. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  201. package/js/src/src/abstract/krakenfutures.js +11 -0
  202. package/js/src/src/abstract/kucoin.d.ts +227 -0
  203. package/js/src/src/abstract/kucoin.js +11 -0
  204. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  205. package/js/src/src/abstract/kucoinfutures.js +11 -0
  206. package/js/src/src/abstract/latoken.d.ts +59 -0
  207. package/js/src/src/abstract/latoken.js +11 -0
  208. package/js/src/src/abstract/lbank.d.ts +65 -0
  209. package/js/src/src/abstract/lbank.js +11 -0
  210. package/js/src/src/abstract/luno.d.ts +41 -0
  211. package/js/src/src/abstract/luno.js +11 -0
  212. package/js/src/src/abstract/mazdax.d.ts +11 -0
  213. package/js/src/src/abstract/mazdax.js +11 -0
  214. package/js/src/src/abstract/mercado.d.ts +28 -0
  215. package/js/src/src/abstract/mercado.js +11 -0
  216. package/js/src/src/abstract/mexc.d.ts +183 -0
  217. package/js/src/src/abstract/mexc.js +11 -0
  218. package/js/src/src/abstract/modetrade.d.ts +122 -0
  219. package/js/src/src/abstract/modetrade.js +11 -0
  220. package/js/src/src/abstract/ndax.d.ts +100 -0
  221. package/js/src/src/abstract/ndax.js +11 -0
  222. package/js/src/src/abstract/nobitex.d.ts +10 -0
  223. package/js/src/src/abstract/nobitex.js +11 -0
  224. package/js/src/src/abstract/novadax.d.ts +32 -0
  225. package/js/src/src/abstract/novadax.js +11 -0
  226. package/js/src/src/abstract/oceanex.d.ts +30 -0
  227. package/js/src/src/abstract/oceanex.js +11 -0
  228. package/js/src/src/abstract/okcoin.d.ts +77 -0
  229. package/js/src/src/abstract/okcoin.js +11 -0
  230. package/js/src/src/abstract/okexchange.d.ts +11 -0
  231. package/js/src/src/abstract/okexchange.js +11 -0
  232. package/js/src/src/abstract/okx.d.ts +352 -0
  233. package/js/src/src/abstract/okx.js +11 -0
  234. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  235. package/js/src/src/abstract/ompfinex.js +11 -0
  236. package/js/src/src/abstract/onetrading.d.ts +26 -0
  237. package/js/src/src/abstract/onetrading.js +11 -0
  238. package/js/src/src/abstract/oxfun.d.ts +37 -0
  239. package/js/src/src/abstract/oxfun.js +11 -0
  240. package/js/src/src/abstract/p2b.d.ts +25 -0
  241. package/js/src/src/abstract/p2b.js +11 -0
  242. package/js/src/src/abstract/paradex.d.ts +66 -0
  243. package/js/src/src/abstract/paradex.js +11 -0
  244. package/js/src/src/abstract/paymium.d.ts +31 -0
  245. package/js/src/src/abstract/paymium.js +11 -0
  246. package/js/src/src/abstract/phemex.d.ts +120 -0
  247. package/js/src/src/abstract/phemex.js +11 -0
  248. package/js/src/src/abstract/pingi.d.ts +9 -0
  249. package/js/src/src/abstract/pingi.js +11 -0
  250. package/js/src/src/abstract/poloniex.d.ts +108 -0
  251. package/js/src/src/abstract/poloniex.js +11 -0
  252. package/js/src/src/abstract/pooleno.d.ts +8 -0
  253. package/js/src/src/abstract/pooleno.js +11 -0
  254. package/js/src/src/abstract/probit.d.ts +26 -0
  255. package/js/src/src/abstract/probit.js +11 -0
  256. package/js/src/src/abstract/raastin.d.ts +11 -0
  257. package/js/src/src/abstract/raastin.js +11 -0
  258. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  259. package/js/src/src/abstract/ramzinex.js +11 -0
  260. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  261. package/js/src/src/abstract/sarmayex.js +11 -0
  262. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  263. package/js/src/src/abstract/sarrafex.js +11 -0
  264. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  265. package/js/src/src/abstract/tabdeal.js +11 -0
  266. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  267. package/js/src/src/abstract/tehran_exchange.js +11 -0
  268. package/js/src/src/abstract/tetherland.d.ts +8 -0
  269. package/js/src/src/abstract/tetherland.js +11 -0
  270. package/js/src/src/abstract/timex.d.ts +65 -0
  271. package/js/src/src/abstract/timex.js +11 -0
  272. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  273. package/js/src/src/abstract/tokocrypto.js +11 -0
  274. package/js/src/src/abstract/toobit.d.ts +10 -0
  275. package/js/src/src/abstract/toobit.js +11 -0
  276. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  277. package/js/src/src/abstract/tradeogre.js +11 -0
  278. package/js/src/src/abstract/twox.d.ts +8 -0
  279. package/js/src/src/abstract/twox.js +11 -0
  280. package/js/src/src/abstract/ubitex.d.ts +10 -0
  281. package/js/src/src/abstract/ubitex.js +11 -0
  282. package/js/src/src/abstract/upbit.d.ts +58 -0
  283. package/js/src/src/abstract/upbit.js +11 -0
  284. package/js/src/src/abstract/vertex.d.ts +22 -0
  285. package/js/src/src/abstract/vertex.js +11 -0
  286. package/js/src/src/abstract/wallex.d.ts +11 -0
  287. package/js/src/src/abstract/wallex.js +11 -0
  288. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  289. package/js/src/src/abstract/wavesexchange.js +11 -0
  290. package/js/src/src/abstract/whitebit.d.ts +117 -0
  291. package/js/src/src/abstract/whitebit.js +11 -0
  292. package/js/src/src/abstract/woo.d.ts +144 -0
  293. package/js/src/src/abstract/woo.js +11 -0
  294. package/js/src/src/abstract/woofipro.d.ts +122 -0
  295. package/js/src/src/abstract/woofipro.js +11 -0
  296. package/js/src/src/abstract/xt.d.ts +160 -0
  297. package/js/src/src/abstract/xt.js +11 -0
  298. package/js/src/src/abstract/yobit.d.ts +19 -0
  299. package/js/src/src/abstract/yobit.js +11 -0
  300. package/js/src/src/abstract/zaif.d.ts +41 -0
  301. package/js/src/src/abstract/zaif.js +11 -0
  302. package/js/src/src/abstract/zonda.d.ts +56 -0
  303. package/js/src/src/abstract/zonda.js +11 -0
  304. package/js/src/src/afratether.d.ts +21 -0
  305. package/js/src/src/afratether.js +356 -0
  306. package/js/src/src/alpaca.d.ts +332 -0
  307. package/js/src/src/alpaca.js +1908 -0
  308. package/js/src/src/apex.d.ts +333 -0
  309. package/js/src/src/apex.js +1942 -0
  310. package/js/src/src/arzinja.d.ts +21 -0
  311. package/js/src/src/arzinja.js +298 -0
  312. package/js/src/src/arzplus.d.ts +26 -0
  313. package/js/src/src/arzplus.js +581 -0
  314. package/js/src/src/ascendex.d.ts +424 -0
  315. package/js/src/src/ascendex.js +3699 -0
  316. package/js/src/src/asretether.d.ts +21 -0
  317. package/js/src/src/asretether.js +324 -0
  318. package/js/src/src/base/Exchange.d.ts +926 -0
  319. package/js/src/src/base/Exchange.js +7399 -0
  320. package/js/src/src/base/Precise.d.ts +42 -0
  321. package/js/src/src/base/Precise.js +275 -0
  322. package/js/src/src/base/errors.d.ts +168 -0
  323. package/js/src/src/base/errors.js +255 -0
  324. package/js/src/src/base/functions/crypto.d.ts +16 -0
  325. package/js/src/src/base/functions/crypto.js +131 -0
  326. package/js/src/src/base/functions/encode.d.ts +4 -0
  327. package/js/src/src/base/functions/encode.js +32 -0
  328. package/js/src/src/base/functions/generic.d.ts +29 -0
  329. package/js/src/src/base/functions/generic.js +203 -0
  330. package/js/src/src/base/functions/misc.d.ts +9 -0
  331. package/js/src/src/base/functions/misc.js +101 -0
  332. package/js/src/src/base/functions/number.d.ts +27 -0
  333. package/js/src/src/base/functions/number.js +313 -0
  334. package/js/src/src/base/functions/platform.d.ts +7 -0
  335. package/js/src/src/base/functions/platform.js +27 -0
  336. package/js/src/src/base/functions/rsa.d.ts +5 -0
  337. package/js/src/src/base/functions/rsa.js +49 -0
  338. package/js/src/src/base/functions/string.d.ts +7 -0
  339. package/js/src/src/base/functions/string.js +44 -0
  340. package/js/src/src/base/functions/throttle.d.ts +6 -0
  341. package/js/src/src/base/functions/throttle.js +67 -0
  342. package/js/src/src/base/functions/time.d.ts +21 -0
  343. package/js/src/src/base/functions/time.js +171 -0
  344. package/js/src/src/base/functions/totp.d.ts +3 -0
  345. package/js/src/src/base/functions/totp.js +25 -0
  346. package/js/src/src/base/functions/type.d.ts +37 -0
  347. package/js/src/src/base/functions/type.js +179 -0
  348. package/js/src/src/base/functions.d.ts +10 -0
  349. package/js/src/src/base/functions.js +18 -0
  350. package/js/src/src/base/types.d.ts +586 -0
  351. package/js/src/src/base/types.js +7 -0
  352. package/js/src/src/base/ws/Cache.d.ts +27 -0
  353. package/js/src/src/base/ws/Cache.js +260 -0
  354. package/js/src/src/base/ws/Client.d.ts +53 -0
  355. package/js/src/src/base/ws/Client.js +307 -0
  356. package/js/src/src/base/ws/Future.d.ts +8 -0
  357. package/js/src/src/base/ws/Future.js +35 -0
  358. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  359. package/js/src/src/base/ws/OrderBook.js +130 -0
  360. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  361. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  362. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  363. package/js/src/src/base/ws/WsClient.js +69 -0
  364. package/js/src/src/bequant.d.ts +4 -0
  365. package/js/src/src/bequant.js +35 -0
  366. package/js/src/src/bidarz.d.ts +16 -0
  367. package/js/src/src/bidarz.js +327 -0
  368. package/js/src/src/bigone.d.ts +296 -0
  369. package/js/src/src/bigone.js +2340 -0
  370. package/js/src/src/binance.d.ts +1667 -0
  371. package/js/src/src/binance.js +14400 -0
  372. package/js/src/src/binancecoinm.d.ts +6 -0
  373. package/js/src/src/binancecoinm.js +51 -0
  374. package/js/src/src/binanceus.d.ts +4 -0
  375. package/js/src/src/binanceus.js +225 -0
  376. package/js/src/src/binanceusdm.d.ts +6 -0
  377. package/js/src/src/binanceusdm.js +63 -0
  378. package/js/src/src/bingx.d.ts +778 -0
  379. package/js/src/src/bingx.js +6705 -0
  380. package/js/src/src/bit24.d.ts +24 -0
  381. package/js/src/src/bit24.js +520 -0
  382. package/js/src/src/bit2c.d.ts +146 -0
  383. package/js/src/src/bit2c.js +1029 -0
  384. package/js/src/src/bitbank.d.ts +181 -0
  385. package/js/src/src/bitbank.js +1146 -0
  386. package/js/src/src/bitbarg.d.ts +21 -0
  387. package/js/src/src/bitbarg.js +312 -0
  388. package/js/src/src/bitbns.d.ts +184 -0
  389. package/js/src/src/bitbns.js +1288 -0
  390. package/js/src/src/bitfinex.d.ts +516 -0
  391. package/js/src/src/bitfinex.js +3951 -0
  392. package/js/src/src/bitflyer.d.ts +229 -0
  393. package/js/src/src/bitflyer.js +1209 -0
  394. package/js/src/src/bitget.d.ts +1109 -0
  395. package/js/src/src/bitget.js +11033 -0
  396. package/js/src/src/bithumb.d.ts +165 -0
  397. package/js/src/src/bithumb.js +1257 -0
  398. package/js/src/src/bitimen.d.ts +23 -0
  399. package/js/src/src/bitimen.js +424 -0
  400. package/js/src/src/bitir.d.ts +23 -0
  401. package/js/src/src/bitir.js +521 -0
  402. package/js/src/src/bitmart.d.ts +736 -0
  403. package/js/src/src/bitmart.js +5639 -0
  404. package/js/src/src/bitmex.d.ts +395 -0
  405. package/js/src/src/bitmex.js +3088 -0
  406. package/js/src/src/bitopro.d.ts +295 -0
  407. package/js/src/src/bitopro.js +1892 -0
  408. package/js/src/src/bitpin.d.ts +23 -0
  409. package/js/src/src/bitpin.js +487 -0
  410. package/js/src/src/bitrue.d.ts +384 -0
  411. package/js/src/src/bitrue.js +3382 -0
  412. package/js/src/src/bitso.d.ts +270 -0
  413. package/js/src/src/bitso.js +1881 -0
  414. package/js/src/src/bitstamp.d.ts +355 -0
  415. package/js/src/src/bitstamp.js +2445 -0
  416. package/js/src/src/bitteam.d.ts +229 -0
  417. package/js/src/src/bitteam.js +2420 -0
  418. package/js/src/src/bittrade.d.ts +298 -0
  419. package/js/src/src/bittrade.js +2050 -0
  420. package/js/src/src/bitunix.d.ts +21 -0
  421. package/js/src/src/bitunix.js +326 -0
  422. package/js/src/src/bitvavo.d.ts +311 -0
  423. package/js/src/src/bitvavo.js +2204 -0
  424. package/js/src/src/blockchaincom.d.ts +256 -0
  425. package/js/src/src/blockchaincom.js +1259 -0
  426. package/js/src/src/blofin.d.ts +439 -0
  427. package/js/src/src/blofin.js +2576 -0
  428. package/js/src/src/btcalpha.d.ts +209 -0
  429. package/js/src/src/btcalpha.js +1056 -0
  430. package/js/src/src/btcbox.d.ts +144 -0
  431. package/js/src/src/btcbox.js +834 -0
  432. package/js/src/src/btcmarkets.d.ts +253 -0
  433. package/js/src/src/btcmarkets.js +1418 -0
  434. package/js/src/src/btcturk.d.ts +161 -0
  435. package/js/src/src/btcturk.js +1058 -0
  436. package/js/src/src/bybit.d.ts +1097 -0
  437. package/js/src/src/bybit.js +9382 -0
  438. package/js/src/src/bydfi.d.ts +23 -0
  439. package/js/src/src/bydfi.js +434 -0
  440. package/js/src/src/cafearz.d.ts +21 -0
  441. package/js/src/src/cafearz.js +346 -0
  442. package/js/src/src/cex.d.ts +286 -0
  443. package/js/src/src/cex.js +1799 -0
  444. package/js/src/src/coinbase.d.ts +623 -0
  445. package/js/src/src/coinbase.js +5220 -0
  446. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  447. package/js/src/src/coinbaseadvanced.js +18 -0
  448. package/js/src/src/coinbaseexchange.d.ts +334 -0
  449. package/js/src/src/coinbaseexchange.js +2127 -0
  450. package/js/src/src/coinbaseinternational.d.ts +443 -0
  451. package/js/src/src/coinbaseinternational.js +2336 -0
  452. package/js/src/src/coincatch.d.ts +786 -0
  453. package/js/src/src/coincatch.js +5492 -0
  454. package/js/src/src/coincheck.d.ts +147 -0
  455. package/js/src/src/coincheck.js +962 -0
  456. package/js/src/src/coinex.d.ts +719 -0
  457. package/js/src/src/coinex.js +6166 -0
  458. package/js/src/src/coinmate.d.ts +202 -0
  459. package/js/src/src/coinmate.js +1215 -0
  460. package/js/src/src/coinmetro.d.ts +244 -0
  461. package/js/src/src/coinmetro.js +2024 -0
  462. package/js/src/src/coinone.d.ts +158 -0
  463. package/js/src/src/coinone.js +1278 -0
  464. package/js/src/src/coinsph.d.ts +310 -0
  465. package/js/src/src/coinsph.js +2203 -0
  466. package/js/src/src/coinspot.d.ts +108 -0
  467. package/js/src/src/coinspot.js +653 -0
  468. package/js/src/src/cryptocom.d.ts +463 -0
  469. package/js/src/src/cryptocom.js +3549 -0
  470. package/js/src/src/cryptomus.d.ts +158 -0
  471. package/js/src/src/cryptomus.js +1169 -0
  472. package/js/src/src/defx.d.ts +348 -0
  473. package/js/src/src/defx.js +2139 -0
  474. package/js/src/src/delta.d.ts +407 -0
  475. package/js/src/src/delta.js +3654 -0
  476. package/js/src/src/deribit.d.ts +516 -0
  477. package/js/src/src/deribit.js +3790 -0
  478. package/js/src/src/derive.d.ts +324 -0
  479. package/js/src/src/derive.js +2655 -0
  480. package/js/src/src/digifinex.d.ts +544 -0
  481. package/js/src/src/digifinex.js +4453 -0
  482. package/js/src/src/ellipx.d.ts +237 -0
  483. package/js/src/src/ellipx.js +2071 -0
  484. package/js/src/src/eterex.d.ts +21 -0
  485. package/js/src/src/eterex.js +299 -0
  486. package/js/src/src/excoino.d.ts +23 -0
  487. package/js/src/src/excoino.js +426 -0
  488. package/js/src/src/exir.d.ts +23 -0
  489. package/js/src/src/exir.js +403 -0
  490. package/js/src/src/exmo.d.ts +426 -0
  491. package/js/src/src/exmo.js +2825 -0
  492. package/js/src/src/exnovin.d.ts +22 -0
  493. package/js/src/src/exnovin.js +378 -0
  494. package/js/src/src/farhadexchange.d.ts +21 -0
  495. package/js/src/src/farhadexchange.js +280 -0
  496. package/js/src/src/fmfwio.d.ts +4 -0
  497. package/js/src/src/fmfwio.js +35 -0
  498. package/js/src/src/foxbit.d.ts +352 -0
  499. package/js/src/src/foxbit.js +2016 -0
  500. package/js/src/src/gate.d.ts +1071 -0
  501. package/js/src/src/gate.js +8282 -0
  502. package/js/src/src/gateio.d.ts +4 -0
  503. package/js/src/src/gateio.js +17 -0
  504. package/js/src/src/gemini.d.ts +257 -0
  505. package/js/src/src/gemini.js +2006 -0
  506. package/js/src/src/hamtapay.d.ts +21 -0
  507. package/js/src/src/hamtapay.js +303 -0
  508. package/js/src/src/hashkey.d.ts +628 -0
  509. package/js/src/src/hashkey.js +4363 -0
  510. package/js/src/src/hibachi.d.ts +346 -0
  511. package/js/src/src/hibachi.js +2137 -0
  512. package/js/src/src/hitbtc.d.ts +558 -0
  513. package/js/src/src/hitbtc.js +3847 -0
  514. package/js/src/src/hitobit.d.ts +23 -0
  515. package/js/src/src/hitobit.js +412 -0
  516. package/js/src/src/hollaex.d.ts +305 -0
  517. package/js/src/src/hollaex.js +2046 -0
  518. package/js/src/src/htx.d.ts +961 -0
  519. package/js/src/src/htx.js +9668 -0
  520. package/js/src/src/huobi.d.ts +4 -0
  521. package/js/src/src/huobi.js +17 -0
  522. package/js/src/src/hyperliquid.d.ts +651 -0
  523. package/js/src/src/hyperliquid.js +3937 -0
  524. package/js/src/src/independentreserve.d.ts +169 -0
  525. package/js/src/src/independentreserve.js +1115 -0
  526. package/js/src/src/indodax.d.ts +217 -0
  527. package/js/src/src/indodax.js +1454 -0
  528. package/js/src/src/iranexchange.d.ts +21 -0
  529. package/js/src/src/iranexchange.js +399 -0
  530. package/js/src/src/jibitex.d.ts +23 -0
  531. package/js/src/src/jibitex.js +416 -0
  532. package/js/src/src/kcex.d.ts +21 -0
  533. package/js/src/src/kcex.js +335 -0
  534. package/js/src/src/kifpoolme.d.ts +23 -0
  535. package/js/src/src/kifpoolme.js +410 -0
  536. package/js/src/src/kraken.d.ts +484 -0
  537. package/js/src/src/kraken.js +3518 -0
  538. package/js/src/src/krakenfutures.d.ts +362 -0
  539. package/js/src/src/krakenfutures.js +2885 -0
  540. package/js/src/src/kucoin.d.ts +759 -0
  541. package/js/src/src/kucoin.js +5153 -0
  542. package/js/src/src/kucoinfutures.d.ts +521 -0
  543. package/js/src/src/kucoinfutures.js +3381 -0
  544. package/js/src/src/latoken.d.ts +274 -0
  545. package/js/src/src/latoken.js +1824 -0
  546. package/js/src/src/lbank.d.ts +350 -0
  547. package/js/src/src/lbank.js +3146 -0
  548. package/js/src/src/luno.d.ts +252 -0
  549. package/js/src/src/luno.js +1479 -0
  550. package/js/src/src/mazdax.d.ts +23 -0
  551. package/js/src/src/mazdax.js +534 -0
  552. package/js/src/src/mercado.d.ts +160 -0
  553. package/js/src/src/mercado.js +1011 -0
  554. package/js/src/src/mexc.d.ts +768 -0
  555. package/js/src/src/mexc.js +6102 -0
  556. package/js/src/src/modetrade.d.ts +496 -0
  557. package/js/src/src/modetrade.js +2936 -0
  558. package/js/src/src/myokx.d.ts +4 -0
  559. package/js/src/src/myokx.js +54 -0
  560. package/js/src/src/ndax.d.ts +285 -0
  561. package/js/src/src/ndax.js +2598 -0
  562. package/js/src/src/nobitex.d.ts +23 -0
  563. package/js/src/src/nobitex.js +454 -0
  564. package/js/src/src/novadax.d.ts +279 -0
  565. package/js/src/src/novadax.js +1676 -0
  566. package/js/src/src/oceanex.d.ts +231 -0
  567. package/js/src/src/oceanex.js +1123 -0
  568. package/js/src/src/okcoin.d.ts +346 -0
  569. package/js/src/src/okcoin.js +3211 -0
  570. package/js/src/src/okexchange.d.ts +23 -0
  571. package/js/src/src/okexchange.js +373 -0
  572. package/js/src/src/okx.d.ts +1125 -0
  573. package/js/src/src/okx.js +9009 -0
  574. package/js/src/src/okxus.d.ts +4 -0
  575. package/js/src/src/okxus.js +54 -0
  576. package/js/src/src/ompfinex.d.ts +23 -0
  577. package/js/src/src/ompfinex.js +510 -0
  578. package/js/src/src/onetrading.d.ts +228 -0
  579. package/js/src/src/onetrading.js +1769 -0
  580. package/js/src/src/oxfun.d.ts +442 -0
  581. package/js/src/src/oxfun.js +2920 -0
  582. package/js/src/src/p2b.d.ts +189 -0
  583. package/js/src/src/p2b.js +1344 -0
  584. package/js/src/src/paradex.d.ts +389 -0
  585. package/js/src/src/paradex.js +2607 -0
  586. package/js/src/src/paymium.d.ts +133 -0
  587. package/js/src/src/paymium.js +644 -0
  588. package/js/src/src/phemex.d.ts +497 -0
  589. package/js/src/src/phemex.js +5333 -0
  590. package/js/src/src/pingi.d.ts +22 -0
  591. package/js/src/src/pingi.js +446 -0
  592. package/js/src/src/poloniex.d.ts +441 -0
  593. package/js/src/src/poloniex.js +3681 -0
  594. package/js/src/src/pooleno.d.ts +21 -0
  595. package/js/src/src/pooleno.js +347 -0
  596. package/js/src/src/pro/alpaca.d.ts +95 -0
  597. package/js/src/src/pro/alpaca.js +724 -0
  598. package/js/src/src/pro/apex.d.ts +160 -0
  599. package/js/src/src/pro/apex.js +1044 -0
  600. package/js/src/src/pro/ascendex.d.ts +99 -0
  601. package/js/src/src/pro/ascendex.js +1012 -0
  602. package/js/src/src/pro/bequant.d.ts +4 -0
  603. package/js/src/src/pro/bequant.js +42 -0
  604. package/js/src/src/pro/binance.d.ts +796 -0
  605. package/js/src/src/pro/binance.js +4373 -0
  606. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  607. package/js/src/src/pro/binancecoinm.js +32 -0
  608. package/js/src/src/pro/binanceus.d.ts +4 -0
  609. package/js/src/src/pro/binanceus.js +52 -0
  610. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  611. package/js/src/src/pro/binanceusdm.js +37 -0
  612. package/js/src/src/pro/bingx.d.ts +151 -0
  613. package/js/src/src/pro/bingx.js +1568 -0
  614. package/js/src/src/pro/bitfinex.d.ts +99 -0
  615. package/js/src/src/pro/bitfinex.js +1165 -0
  616. package/js/src/src/pro/bitget.d.ts +257 -0
  617. package/js/src/src/pro/bitget.js +2327 -0
  618. package/js/src/src/pro/bithumb.d.ts +59 -0
  619. package/js/src/src/pro/bithumb.js +395 -0
  620. package/js/src/src/pro/bitmart.d.ts +168 -0
  621. package/js/src/src/pro/bitmart.js +1686 -0
  622. package/js/src/src/pro/bitmex.d.ts +170 -0
  623. package/js/src/src/pro/bitmex.js +1760 -0
  624. package/js/src/src/pro/bitopro.d.ts +69 -0
  625. package/js/src/src/pro/bitopro.js +477 -0
  626. package/js/src/src/pro/bitrue.d.ts +40 -0
  627. package/js/src/src/pro/bitrue.js +461 -0
  628. package/js/src/src/pro/bitstamp.d.ts +53 -0
  629. package/js/src/src/pro/bitstamp.js +587 -0
  630. package/js/src/src/pro/bittrade.d.ts +66 -0
  631. package/js/src/src/pro/bittrade.js +606 -0
  632. package/js/src/src/pro/bitvavo.d.ts +321 -0
  633. package/js/src/src/pro/bitvavo.js +1451 -0
  634. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  635. package/js/src/src/pro/blockchaincom.js +777 -0
  636. package/js/src/src/pro/blofin.d.ts +174 -0
  637. package/js/src/src/pro/blofin.js +743 -0
  638. package/js/src/src/pro/bybit.d.ts +397 -0
  639. package/js/src/src/pro/bybit.js +2519 -0
  640. package/js/src/src/pro/cex.d.ts +220 -0
  641. package/js/src/src/pro/cex.js +1535 -0
  642. package/js/src/src/pro/coinbase.d.ts +119 -0
  643. package/js/src/src/pro/coinbase.js +736 -0
  644. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  645. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  646. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  647. package/js/src/src/pro/coinbaseexchange.js +969 -0
  648. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  649. package/js/src/src/pro/coinbaseinternational.js +804 -0
  650. package/js/src/src/pro/coincatch.d.ts +207 -0
  651. package/js/src/src/pro/coincatch.js +1562 -0
  652. package/js/src/src/pro/coincheck.d.ts +33 -0
  653. package/js/src/src/pro/coincheck.js +210 -0
  654. package/js/src/src/pro/coinex.d.ts +147 -0
  655. package/js/src/src/pro/coinex.js +1426 -0
  656. package/js/src/src/pro/coinone.d.ts +51 -0
  657. package/js/src/src/pro/coinone.js +413 -0
  658. package/js/src/src/pro/cryptocom.d.ts +300 -0
  659. package/js/src/src/pro/cryptocom.js +1414 -0
  660. package/js/src/src/pro/defx.d.ts +236 -0
  661. package/js/src/src/pro/defx.js +865 -0
  662. package/js/src/src/pro/deribit.d.ts +163 -0
  663. package/js/src/src/pro/deribit.js +1066 -0
  664. package/js/src/src/pro/derive.d.ts +100 -0
  665. package/js/src/src/pro/derive.js +753 -0
  666. package/js/src/src/pro/exmo.d.ts +97 -0
  667. package/js/src/src/pro/exmo.js +903 -0
  668. package/js/src/src/pro/gate.d.ts +360 -0
  669. package/js/src/src/pro/gate.js +2119 -0
  670. package/js/src/src/pro/gateio.d.ts +4 -0
  671. package/js/src/src/pro/gateio.js +17 -0
  672. package/js/src/src/pro/gemini.d.ts +106 -0
  673. package/js/src/src/pro/gemini.js +932 -0
  674. package/js/src/src/pro/hashkey.d.ts +121 -0
  675. package/js/src/src/pro/hashkey.js +843 -0
  676. package/js/src/src/pro/hitbtc.d.ts +235 -0
  677. package/js/src/src/pro/hitbtc.js +1400 -0
  678. package/js/src/src/pro/hollaex.d.ts +77 -0
  679. package/js/src/src/pro/hollaex.js +604 -0
  680. package/js/src/src/pro/htx.d.ts +141 -0
  681. package/js/src/src/pro/htx.js +2415 -0
  682. package/js/src/src/pro/huobi.d.ts +4 -0
  683. package/js/src/src/pro/huobi.js +17 -0
  684. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  685. package/js/src/src/pro/hyperliquid.js +1126 -0
  686. package/js/src/src/pro/independentreserve.d.ts +36 -0
  687. package/js/src/src/pro/independentreserve.js +287 -0
  688. package/js/src/src/pro/kraken.d.ts +233 -0
  689. package/js/src/src/pro/kraken.js +1785 -0
  690. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  691. package/js/src/src/pro/krakenfutures.js +1592 -0
  692. package/js/src/src/pro/kucoin.d.ts +221 -0
  693. package/js/src/src/pro/kucoin.js +1430 -0
  694. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  695. package/js/src/src/pro/kucoinfutures.js +1295 -0
  696. package/js/src/src/pro/lbank.d.ts +134 -0
  697. package/js/src/src/pro/lbank.js +950 -0
  698. package/js/src/src/pro/luno.d.ts +44 -0
  699. package/js/src/src/pro/luno.js +322 -0
  700. package/js/src/src/pro/mexc.d.ts +210 -0
  701. package/js/src/src/pro/mexc.js +2009 -0
  702. package/js/src/src/pro/modetrade.d.ts +155 -0
  703. package/js/src/src/pro/modetrade.js +1335 -0
  704. package/js/src/src/pro/myokx.d.ts +4 -0
  705. package/js/src/src/pro/myokx.js +39 -0
  706. package/js/src/src/pro/ndax.d.ts +60 -0
  707. package/js/src/src/pro/ndax.js +545 -0
  708. package/js/src/src/pro/okcoin.d.ts +91 -0
  709. package/js/src/src/pro/okcoin.js +763 -0
  710. package/js/src/src/pro/okx.d.ts +408 -0
  711. package/js/src/src/pro/okx.js +2479 -0
  712. package/js/src/src/pro/okxus.d.ts +4 -0
  713. package/js/src/src/pro/okxus.js +39 -0
  714. package/js/src/src/pro/onetrading.d.ts +107 -0
  715. package/js/src/src/pro/onetrading.js +1343 -0
  716. package/js/src/src/pro/oxfun.d.ts +234 -0
  717. package/js/src/src/pro/oxfun.js +1112 -0
  718. package/js/src/src/pro/p2b.d.ts +104 -0
  719. package/js/src/src/pro/p2b.js +506 -0
  720. package/js/src/src/pro/paradex.d.ts +54 -0
  721. package/js/src/src/pro/paradex.js +370 -0
  722. package/js/src/src/pro/phemex.d.ts +129 -0
  723. package/js/src/src/pro/phemex.js +1569 -0
  724. package/js/src/src/pro/poloniex.d.ts +214 -0
  725. package/js/src/src/pro/poloniex.js +1318 -0
  726. package/js/src/src/pro/probit.d.ts +91 -0
  727. package/js/src/src/pro/probit.js +593 -0
  728. package/js/src/src/pro/tradeogre.d.ts +49 -0
  729. package/js/src/src/pro/tradeogre.js +284 -0
  730. package/js/src/src/pro/upbit.d.ts +124 -0
  731. package/js/src/src/pro/upbit.js +689 -0
  732. package/js/src/src/pro/vertex.d.ts +104 -0
  733. package/js/src/src/pro/vertex.js +999 -0
  734. package/js/src/src/pro/whitebit.d.ts +123 -0
  735. package/js/src/src/pro/whitebit.js +971 -0
  736. package/js/src/src/pro/woo.d.ts +161 -0
  737. package/js/src/src/pro/woo.js +1351 -0
  738. package/js/src/src/pro/woofipro.d.ts +155 -0
  739. package/js/src/src/pro/woofipro.js +1335 -0
  740. package/js/src/src/pro/xt.d.ts +165 -0
  741. package/js/src/src/pro/xt.js +1230 -0
  742. package/js/src/src/probit.d.ts +283 -0
  743. package/js/src/src/probit.js +1935 -0
  744. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  745. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  746. package/js/src/src/raastin.d.ts +24 -0
  747. package/js/src/src/raastin.js +494 -0
  748. package/js/src/src/ramzinex.d.ts +23 -0
  749. package/js/src/src/ramzinex.js +510 -0
  750. package/js/src/src/sarmayex.d.ts +21 -0
  751. package/js/src/src/sarmayex.js +376 -0
  752. package/js/src/src/sarrafex.d.ts +23 -0
  753. package/js/src/src/sarrafex.js +501 -0
  754. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  755. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  756. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  757. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  758. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  759. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  760. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  761. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  762. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  763. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  764. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  765. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  766. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  767. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  768. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  769. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  770. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  771. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  772. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  773. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  774. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  775. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  776. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  777. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  778. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  779. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  780. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  781. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  782. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  783. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  784. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  785. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  786. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  787. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  788. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  789. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  790. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  791. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  792. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  793. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  794. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  795. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  796. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  797. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  798. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  799. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  800. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  801. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  802. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  803. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  804. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  805. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  806. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  807. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  808. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  809. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  810. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  811. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  812. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  813. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  814. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  815. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  816. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  817. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  818. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  819. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  820. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  821. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  822. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  823. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  824. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  825. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  826. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  827. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  828. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  829. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  830. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  831. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  832. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  833. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  834. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  835. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  836. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  837. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  838. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  850. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  851. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  852. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  853. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  854. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  855. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  856. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  857. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  858. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  859. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  860. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  861. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  862. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  868. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  869. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  870. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  871. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  872. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  873. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  874. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  875. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  876. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  877. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  878. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  879. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  880. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  881. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  882. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  883. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  884. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  885. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  886. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  887. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  888. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  889. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  890. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  891. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  892. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  893. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  894. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  895. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  896. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  897. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  898. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  899. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  900. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  901. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  902. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  903. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  904. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  905. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  906. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  907. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  908. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  909. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  910. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  911. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  912. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  913. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  914. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  915. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  916. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  917. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  918. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  919. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  920. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  921. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  922. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  923. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  924. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  925. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  926. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  927. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  928. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  929. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  930. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  931. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  932. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  933. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  934. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  935. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  936. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  937. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  938. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  939. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  940. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  941. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  942. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  943. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  944. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  945. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  946. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  947. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  948. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  949. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  950. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  951. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  952. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  953. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  954. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  955. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  956. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  957. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  958. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  959. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  960. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  984. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  985. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  986. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  987. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  988. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  989. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  990. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  991. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  992. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  993. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  994. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  995. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  996. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  997. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  998. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  999. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  1000. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  1001. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  1002. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  1003. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  1004. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  1005. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  1006. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  1007. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  1008. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  1009. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1010. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1011. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1012. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1013. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1014. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1015. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1016. package/js/src/src/tabdeal.d.ts +23 -0
  1017. package/js/src/src/tabdeal.js +387 -0
  1018. package/js/src/src/tehran_exchange.d.ts +21 -0
  1019. package/js/src/src/tehran_exchange.js +333 -0
  1020. package/js/src/src/tetherland.d.ts +21 -0
  1021. package/js/src/src/tetherland.js +367 -0
  1022. package/js/src/src/timex.d.ts +247 -0
  1023. package/js/src/src/timex.js +1792 -0
  1024. package/js/src/src/tokocrypto.d.ts +261 -0
  1025. package/js/src/src/tokocrypto.js +2641 -0
  1026. package/js/src/src/toobit.d.ts +22 -0
  1027. package/js/src/src/toobit.js +445 -0
  1028. package/js/src/src/tradeogre.d.ts +149 -0
  1029. package/js/src/src/tradeogre.js +878 -0
  1030. package/js/src/src/twox.d.ts +21 -0
  1031. package/js/src/src/twox.js +371 -0
  1032. package/js/src/src/ubitex.d.ts +23 -0
  1033. package/js/src/src/ubitex.js +433 -0
  1034. package/js/src/src/upbit.d.ts +377 -0
  1035. package/js/src/src/upbit.js +2340 -0
  1036. package/js/src/src/vertex.d.ts +346 -0
  1037. package/js/src/src/vertex.js +3146 -0
  1038. package/js/src/src/wallex.d.ts +23 -0
  1039. package/js/src/src/wallex.js +467 -0
  1040. package/js/src/src/wavesexchange.d.ts +244 -0
  1041. package/js/src/src/wavesexchange.js +2747 -0
  1042. package/js/src/src/whitebit.d.ts +571 -0
  1043. package/js/src/src/whitebit.js +3437 -0
  1044. package/js/src/src/woo.d.ts +727 -0
  1045. package/js/src/src/woo.js +4183 -0
  1046. package/js/src/src/woofipro.d.ts +497 -0
  1047. package/js/src/src/woofipro.js +2941 -0
  1048. package/js/src/src/xt.d.ts +568 -0
  1049. package/js/src/src/xt.js +5184 -0
  1050. package/js/src/src/yobit.d.ts +197 -0
  1051. package/js/src/src/yobit.js +1453 -0
  1052. package/js/src/src/zaif.d.ts +136 -0
  1053. package/js/src/src/zaif.js +821 -0
  1054. package/js/src/src/zonda.d.ts +214 -0
  1055. package/js/src/src/zonda.js +1984 -0
  1056. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
  1057. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +1 -1
  1058. package/js/test.js +9 -17
  1059. package/package.json +1 -1
@@ -0,0 +1,2519 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import bybitRest from '../bybit.js';
9
+ import { ArgumentsRequired, AuthenticationError, ExchangeError, BadRequest, NotSupported } from '../base/errors.js';
10
+ import { ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp } from '../base/ws/Cache.js';
11
+ import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
12
+ // ---------------------------------------------------------------------------
13
+ export default class bybit extends bybitRest {
14
+ describe() {
15
+ return this.deepExtend(super.describe(), {
16
+ 'has': {
17
+ 'ws': true,
18
+ 'createOrderWs': true,
19
+ 'editOrderWs': true,
20
+ 'fetchOpenOrdersWs': false,
21
+ 'fetchOrderWs': false,
22
+ 'cancelOrderWs': true,
23
+ 'cancelOrdersWs': false,
24
+ 'cancelAllOrdersWs': false,
25
+ 'fetchTradesWs': false,
26
+ 'fetchBalanceWs': false,
27
+ 'watchBalance': true,
28
+ 'watchBidsAsks': true,
29
+ 'watchLiquidations': true,
30
+ 'watchLiquidationsForSymbols': false,
31
+ 'watchMyLiquidations': false,
32
+ 'watchMyLiquidationsForSymbols': false,
33
+ 'watchMyTrades': true,
34
+ 'watchOHLCV': true,
35
+ 'watchOHLCVForSymbols': true,
36
+ 'watchOrderBook': true,
37
+ 'watchOrderBookForSymbols': true,
38
+ 'watchOrders': true,
39
+ 'watchTicker': true,
40
+ 'watchTickers': true,
41
+ 'watchTrades': true,
42
+ 'watchPositions': true,
43
+ 'watchTradesForSymbols': true,
44
+ 'unWatchTicker': true,
45
+ 'unWatchTickers': true,
46
+ 'unWatchOHLCV': true,
47
+ 'unWatchOHLCVForSymbols': true,
48
+ 'unWatchOrderBook': true,
49
+ 'unWatchOrderBookForSymbols': true,
50
+ 'unWatchTrades': true,
51
+ 'unWatchTradesForSymbols': true,
52
+ 'unWatchMyTrades': true,
53
+ 'unWatchOrders': true,
54
+ 'unWatchPositions': true,
55
+ },
56
+ 'urls': {
57
+ 'api': {
58
+ 'ws': {
59
+ 'public': {
60
+ 'spot': 'wss://stream.{hostname}/v5/public/spot',
61
+ 'inverse': 'wss://stream.{hostname}/v5/public/inverse',
62
+ 'option': 'wss://stream.{hostname}/v5/public/option',
63
+ 'linear': 'wss://stream.{hostname}/v5/public/linear',
64
+ },
65
+ 'private': {
66
+ 'spot': {
67
+ 'unified': 'wss://stream.{hostname}/v5/private',
68
+ 'nonUnified': 'wss://stream.{hostname}/spot/private/v3',
69
+ },
70
+ 'contract': 'wss://stream.{hostname}/v5/private',
71
+ 'usdc': 'wss://stream.{hostname}/trade/option/usdc/private/v1',
72
+ 'trade': 'wss://stream.bybit.com/v5/trade',
73
+ },
74
+ },
75
+ },
76
+ 'test': {
77
+ 'ws': {
78
+ 'public': {
79
+ 'spot': 'wss://stream-testnet.{hostname}/v5/public/spot',
80
+ 'inverse': 'wss://stream-testnet.{hostname}/v5/public/inverse',
81
+ 'linear': 'wss://stream-testnet.{hostname}/v5/public/linear',
82
+ 'option': 'wss://stream-testnet.{hostname}/v5/public/option',
83
+ },
84
+ 'private': {
85
+ 'spot': {
86
+ 'unified': 'wss://stream-testnet.{hostname}/v5/private',
87
+ 'nonUnified': 'wss://stream-testnet.{hostname}/spot/private/v3',
88
+ },
89
+ 'contract': 'wss://stream-testnet.{hostname}/v5/private',
90
+ 'usdc': 'wss://stream-testnet.{hostname}/trade/option/usdc/private/v1',
91
+ 'trade': 'wss://stream-testnet.bybit.com/v5/trade',
92
+ },
93
+ },
94
+ },
95
+ 'demotrading': {
96
+ 'ws': {
97
+ 'public': {
98
+ 'spot': 'wss://stream.{hostname}/v5/public/spot',
99
+ 'inverse': 'wss://stream.{hostname}/v5/public/inverse',
100
+ 'option': 'wss://stream.{hostname}/v5/public/option',
101
+ 'linear': 'wss://stream.{hostname}/v5/public/linear',
102
+ },
103
+ 'private': {
104
+ 'spot': {
105
+ 'unified': 'wss://stream-demo.{hostname}/v5/private',
106
+ 'nonUnified': 'wss://stream-demo.{hostname}/spot/private/v3',
107
+ },
108
+ 'contract': 'wss://stream-demo.{hostname}/v5/private',
109
+ 'usdc': 'wss://stream-demo.{hostname}/trade/option/usdc/private/v1',
110
+ 'trade': 'wss://stream-demo.bybit.com/v5/trade',
111
+ },
112
+ },
113
+ },
114
+ },
115
+ 'options': {
116
+ 'watchTicker': {
117
+ 'name': 'tickers', // 'tickers' for 24hr statistical ticker or 'tickers_lt' for leverage token ticker
118
+ },
119
+ 'watchPositions': {
120
+ 'fetchPositionsSnapshot': true,
121
+ 'awaitPositionsSnapshot': true, // whether to wait for the positions snapshot before providing updates
122
+ },
123
+ 'watchMyTrades': {
124
+ // filter execType: https://bybit-exchange.github.io/docs/api-explorer/v5/position/execution
125
+ 'filterExecTypes': [
126
+ 'Trade', 'AdlTrade', 'BustTrade', 'Settle',
127
+ ],
128
+ },
129
+ 'spot': {
130
+ 'timeframes': {
131
+ '1m': '1m',
132
+ '3m': '3m',
133
+ '5m': '5m',
134
+ '15m': '15m',
135
+ '30m': '30m',
136
+ '1h': '1h',
137
+ '2h': '2h',
138
+ '4h': '4h',
139
+ '6h': '6h',
140
+ '12h': '12h',
141
+ '1d': '1d',
142
+ '1w': '1w',
143
+ '1M': '1M',
144
+ },
145
+ },
146
+ 'contract': {
147
+ 'timeframes': {
148
+ '1m': '1',
149
+ '3m': '3',
150
+ '5m': '5',
151
+ '15m': '15',
152
+ '30m': '30',
153
+ '1h': '60',
154
+ '2h': '120',
155
+ '4h': '240',
156
+ '6h': '360',
157
+ '12h': '720',
158
+ '1d': 'D',
159
+ '1w': 'W',
160
+ '1M': 'M',
161
+ },
162
+ },
163
+ },
164
+ 'streaming': {
165
+ 'ping': this.ping,
166
+ 'keepAlive': 18000,
167
+ },
168
+ });
169
+ }
170
+ requestId() {
171
+ const requestId = this.sum(this.safeInteger(this.options, 'requestId', 0), 1);
172
+ this.options['requestId'] = requestId;
173
+ return requestId;
174
+ }
175
+ async getUrlByMarketType(symbol = undefined, isPrivate = false, method = undefined, params = {}) {
176
+ const accessibility = isPrivate ? 'private' : 'public';
177
+ let isUsdcSettled = undefined;
178
+ let isSpot = undefined;
179
+ let type = undefined;
180
+ let market = undefined;
181
+ let url = this.urls['api']['ws'];
182
+ if (symbol !== undefined) {
183
+ market = this.market(symbol);
184
+ isUsdcSettled = market['settle'] === 'USDC';
185
+ type = market['type'];
186
+ }
187
+ else {
188
+ [type, params] = this.handleMarketTypeAndParams(method, undefined, params);
189
+ let defaultSettle = this.safeString(this.options, 'defaultSettle');
190
+ defaultSettle = this.safeString2(params, 'settle', 'defaultSettle', defaultSettle);
191
+ isUsdcSettled = (defaultSettle === 'USDC');
192
+ }
193
+ isSpot = (type === 'spot');
194
+ if (isPrivate) {
195
+ const unified = await this.isUnifiedEnabled();
196
+ const isUnifiedMargin = this.safeBool(unified, 0, false);
197
+ const isUnifiedAccount = this.safeBool(unified, 1, false);
198
+ if (isUsdcSettled && !isUnifiedMargin && !isUnifiedAccount) {
199
+ url = url[accessibility]['usdc'];
200
+ }
201
+ else {
202
+ url = url[accessibility]['contract'];
203
+ }
204
+ }
205
+ else {
206
+ if (isSpot) {
207
+ url = url[accessibility]['spot'];
208
+ }
209
+ else if ((type === 'swap') || (type === 'future')) {
210
+ let subType = undefined;
211
+ [subType, params] = this.handleSubTypeAndParams(method, market, params, 'linear');
212
+ url = url[accessibility][subType];
213
+ }
214
+ else {
215
+ // option
216
+ url = url[accessibility]['option'];
217
+ }
218
+ }
219
+ url = this.implodeHostname(url);
220
+ return url;
221
+ }
222
+ cleanParams(params) {
223
+ params = this.omit(params, ['type', 'subType', 'settle', 'defaultSettle', 'unifiedMargin']);
224
+ return params;
225
+ }
226
+ /**
227
+ * @method
228
+ * @name bybit#createOrderWs
229
+ * @description create a trade order
230
+ * @see https://bybit-exchange.github.io/docs/v5/order/create-order
231
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/trade/guideline#createamendcancel-order
232
+ * @param {string} symbol unified symbol of the market to create an order in
233
+ * @param {string} type 'market' or 'limit'
234
+ * @param {string} side 'buy' or 'sell'
235
+ * @param {float} amount how much of currency you want to trade in units of base currency
236
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
237
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
238
+ * @param {string} [params.timeInForce] "GTC", "IOC", "FOK"
239
+ * @param {bool} [params.postOnly] true or false whether the order is post-only
240
+ * @param {bool} [params.reduceOnly] true or false whether the order is reduce-only
241
+ * @param {string} [params.positionIdx] *contracts only* 0 for one-way mode, 1 buy side of hedged mode, 2 sell side of hedged mode
242
+ * @param {boolean} [params.isLeverage] *unified spot only* false then spot trading true then margin trading
243
+ * @param {string} [params.tpslMode] *contract only* 'full' or 'partial'
244
+ * @param {string} [params.mmp] *option only* market maker protection
245
+ * @param {string} [params.triggerDirection] *contract only* the direction for trigger orders, 'above' or 'below'
246
+ * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at
247
+ * @param {float} [params.stopLossPrice] The price at which a stop loss order is triggered at
248
+ * @param {float} [params.takeProfitPrice] The price at which a take profit order is triggered at
249
+ * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered
250
+ * @param {float} [params.takeProfit.triggerPrice] take profit trigger price
251
+ * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered
252
+ * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price
253
+ * @param {string} [params.trailingAmount] the quote amount to trail away from the current market price
254
+ * @param {string} [params.trailingTriggerPrice] the price to trigger a trailing order, default uses the price argument
255
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
256
+ */
257
+ async createOrderWs(symbol, type, side, amount, price = undefined, params = {}) {
258
+ await this.loadMarkets();
259
+ const orderRequest = this.createOrderRequest(symbol, type, side, amount, price, params, true);
260
+ const url = this.urls['api']['ws']['private']['trade'];
261
+ await this.authenticate(url);
262
+ const requestId = this.requestId().toString();
263
+ const request = {
264
+ 'op': 'order.create',
265
+ 'reqId': requestId,
266
+ 'args': [
267
+ orderRequest,
268
+ ],
269
+ 'header': {
270
+ 'X-BAPI-TIMESTAMP': this.milliseconds().toString(),
271
+ 'X-BAPI-RECV-WINDOW': this.options['recvWindow'].toString(),
272
+ },
273
+ };
274
+ return await this.watch(url, requestId, request, requestId, true);
275
+ }
276
+ /**
277
+ * @method
278
+ * @name bybit#editOrderWs
279
+ * @description edit a trade order
280
+ * @see https://bybit-exchange.github.io/docs/v5/order/amend-order
281
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/trade/guideline#createamendcancel-order
282
+ * @param {string} id cancel order id
283
+ * @param {string} symbol unified symbol of the market to create an order in
284
+ * @param {string} type 'market' or 'limit'
285
+ * @param {string} side 'buy' or 'sell'
286
+ * @param {float} amount how much of currency you want to trade in units of base currency
287
+ * @param {float} price the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
288
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
289
+ * @param {float} [params.triggerPrice] The price that a trigger order is triggered at
290
+ * @param {float} [params.stopLossPrice] The price that a stop loss order is triggered at
291
+ * @param {float} [params.takeProfitPrice] The price that a take profit order is triggered at
292
+ * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice that the attached take profit order will be triggered
293
+ * @param {float} [params.takeProfit.triggerPrice] take profit trigger price
294
+ * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice that the attached stop loss order will be triggered
295
+ * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price
296
+ * @param {string} [params.triggerBy] 'IndexPrice', 'MarkPrice' or 'LastPrice', default is 'LastPrice', required if no initial value for triggerPrice
297
+ * @param {string} [params.slTriggerBy] 'IndexPrice', 'MarkPrice' or 'LastPrice', default is 'LastPrice', required if no initial value for stopLoss
298
+ * @param {string} [params.tpTriggerby] 'IndexPrice', 'MarkPrice' or 'LastPrice', default is 'LastPrice', required if no initial value for takeProfit
299
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
300
+ */
301
+ async editOrderWs(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
302
+ await this.loadMarkets();
303
+ const orderRequest = this.editOrderRequest(id, symbol, type, side, amount, price, params);
304
+ const url = this.urls['api']['ws']['private']['trade'];
305
+ await this.authenticate(url);
306
+ const requestId = this.requestId().toString();
307
+ const request = {
308
+ 'op': 'order.amend',
309
+ 'reqId': requestId,
310
+ 'args': [
311
+ orderRequest,
312
+ ],
313
+ 'header': {
314
+ 'X-BAPI-TIMESTAMP': this.milliseconds().toString(),
315
+ 'X-BAPI-RECV-WINDOW': this.options['recvWindow'].toString(),
316
+ },
317
+ };
318
+ return await this.watch(url, requestId, request, requestId, true);
319
+ }
320
+ /**
321
+ * @method
322
+ * @name bybit#cancelOrderWs
323
+ * @description cancels an open order
324
+ * @see https://bybit-exchange.github.io/docs/v5/order/cancel-order
325
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/trade/guideline#createamendcancel-order
326
+ * @param {string} id order id
327
+ * @param {string} symbol unified symbol of the market the order was made in
328
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
329
+ * @param {boolean} [params.trigger] *spot only* whether the order is a trigger order
330
+ * @param {string} [params.orderFilter] *spot only* 'Order' or 'StopOrder' or 'tpslOrder'
331
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
332
+ */
333
+ async cancelOrderWs(id, symbol = undefined, params = {}) {
334
+ await this.loadMarkets();
335
+ const orderRequest = this.cancelOrderRequest(id, symbol, params);
336
+ const url = this.urls['api']['ws']['private']['trade'];
337
+ await this.authenticate(url);
338
+ const requestId = this.requestId().toString();
339
+ if ('orderFilter' in orderRequest) {
340
+ delete orderRequest['orderFilter'];
341
+ }
342
+ const request = {
343
+ 'op': 'order.cancel',
344
+ 'reqId': requestId,
345
+ 'args': [
346
+ orderRequest,
347
+ ],
348
+ 'header': {
349
+ 'X-BAPI-TIMESTAMP': this.milliseconds().toString(),
350
+ 'X-BAPI-RECV-WINDOW': this.options['recvWindow'].toString(),
351
+ },
352
+ };
353
+ return await this.watch(url, requestId, request, requestId, true);
354
+ }
355
+ /**
356
+ * @method
357
+ * @name bybit#watchTicker
358
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
359
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/ticker
360
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-ticker
361
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
362
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
363
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
364
+ */
365
+ async watchTicker(symbol, params = {}) {
366
+ await this.loadMarkets();
367
+ const market = this.market(symbol);
368
+ symbol = market['symbol'];
369
+ const messageHash = 'ticker:' + symbol;
370
+ const url = await this.getUrlByMarketType(symbol, false, 'watchTicker', params);
371
+ params = this.cleanParams(params);
372
+ const options = this.safeValue(this.options, 'watchTicker', {});
373
+ let topic = this.safeString(options, 'name', 'tickers');
374
+ if (!market['spot'] && topic !== 'tickers') {
375
+ throw new BadRequest(this.id + ' watchTicker() only supports name tickers for contract markets');
376
+ }
377
+ topic += '.' + market['id'];
378
+ const topics = [topic];
379
+ return await this.watchTopics(url, [messageHash], topics, params);
380
+ }
381
+ /**
382
+ * @method
383
+ * @name bybit#watchTickers
384
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
385
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/ticker
386
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-ticker
387
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
388
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
389
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
390
+ */
391
+ async watchTickers(symbols = undefined, params = {}) {
392
+ await this.loadMarkets();
393
+ symbols = this.marketSymbols(symbols, undefined, false);
394
+ const messageHashes = [];
395
+ const url = await this.getUrlByMarketType(symbols[0], false, 'watchTickers', params);
396
+ params = this.cleanParams(params);
397
+ const options = this.safeValue(this.options, 'watchTickers', {});
398
+ const topic = this.safeString(options, 'name', 'tickers');
399
+ const marketIds = this.marketIds(symbols);
400
+ const topics = [];
401
+ for (let i = 0; i < marketIds.length; i++) {
402
+ const marketId = marketIds[i];
403
+ topics.push(topic + '.' + marketId);
404
+ messageHashes.push('ticker:' + symbols[i]);
405
+ }
406
+ const ticker = await this.watchTopics(url, messageHashes, topics, params);
407
+ if (this.newUpdates) {
408
+ const result = {};
409
+ result[ticker['symbol']] = ticker;
410
+ return result;
411
+ }
412
+ return this.filterByArray(this.tickers, 'symbol', symbols);
413
+ }
414
+ /**
415
+ * @method
416
+ * @name bybit#unWatchTickers
417
+ * @description unWatches a price ticker
418
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/ticker
419
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-ticker
420
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
421
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
422
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
423
+ */
424
+ async unWatchTickers(symbols = undefined, params = {}) {
425
+ await this.loadMarkets();
426
+ symbols = this.marketSymbols(symbols, undefined, false);
427
+ const options = this.safeValue(this.options, 'watchTickers', {});
428
+ const topic = this.safeString(options, 'name', 'tickers');
429
+ const messageHashes = [];
430
+ const subMessageHashes = [];
431
+ const marketIds = this.marketIds(symbols);
432
+ const topics = [];
433
+ for (let i = 0; i < marketIds.length; i++) {
434
+ const marketId = marketIds[i];
435
+ const symbol = symbols[i];
436
+ topics.push(topic + '.' + marketId);
437
+ subMessageHashes.push('ticker:' + symbol);
438
+ messageHashes.push('unsubscribe:ticker:' + symbol);
439
+ }
440
+ const url = await this.getUrlByMarketType(symbols[0], false, 'watchTickers', params);
441
+ return await this.unWatchTopics(url, 'ticker', symbols, messageHashes, subMessageHashes, topics, params);
442
+ }
443
+ /**
444
+ * @method
445
+ * @name bybit#unWatchTicker
446
+ * @description unWatches a price ticker
447
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/ticker
448
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-ticker
449
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
450
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
451
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
452
+ */
453
+ async unWatchTicker(symbols, params = {}) {
454
+ await this.loadMarkets();
455
+ return await this.unWatchTickers([symbols], params);
456
+ }
457
+ handleTicker(client, message) {
458
+ //
459
+ // linear
460
+ // {
461
+ // "topic": "tickers.BTCUSDT",
462
+ // "type": "snapshot",
463
+ // "data": {
464
+ // "symbol": "BTCUSDT",
465
+ // "tickDirection": "PlusTick",
466
+ // "price24hPcnt": "0.017103",
467
+ // "lastPrice": "17216.00",
468
+ // "prevPrice24h": "16926.50",
469
+ // "highPrice24h": "17281.50",
470
+ // "lowPrice24h": "16915.00",
471
+ // "prevPrice1h": "17238.00",
472
+ // "markPrice": "17217.33",
473
+ // "indexPrice": "17227.36",
474
+ // "openInterest": "68744.761",
475
+ // "openInterestValue": "1183601235.91",
476
+ // "turnover24h": "1570383121.943499",
477
+ // "volume24h": "91705.276",
478
+ // "nextFundingTime": "1673280000000",
479
+ // "fundingRate": "-0.000212",
480
+ // "bid1Price": "17215.50",
481
+ // "bid1Size": "84.489",
482
+ // "ask1Price": "17216.00",
483
+ // "ask1Size": "83.020"
484
+ // },
485
+ // "cs": 24987956059,
486
+ // "ts": 1673272861686
487
+ // }
488
+ //
489
+ // option
490
+ // {
491
+ // "id": "tickers.BTC-6JAN23-17500-C-2480334983-1672917511074",
492
+ // "topic": "tickers.BTC-6JAN23-17500-C",
493
+ // "ts": 1672917511074,
494
+ // "data": {
495
+ // "symbol": "BTC-6JAN23-17500-C",
496
+ // "bidPrice": "0",
497
+ // "bidSize": "0",
498
+ // "bidIv": "0",
499
+ // "askPrice": "10",
500
+ // "askSize": "5.1",
501
+ // "askIv": "0.514",
502
+ // "lastPrice": "10",
503
+ // "highPrice24h": "25",
504
+ // "lowPrice24h": "5",
505
+ // "markPrice": "7.86976724",
506
+ // "indexPrice": "16823.73",
507
+ // "markPriceIv": "0.4896",
508
+ // "underlyingPrice": "16815.1",
509
+ // "openInterest": "49.85",
510
+ // "turnover24h": "446802.8473",
511
+ // "volume24h": "26.55",
512
+ // "totalVolume": "86",
513
+ // "totalTurnover": "1437431",
514
+ // "delta": "0.047831",
515
+ // "gamma": "0.00021453",
516
+ // "vega": "0.81351067",
517
+ // "theta": "-19.9115368",
518
+ // "predictedDeliveryPrice": "0",
519
+ // "change24h": "-0.33333334"
520
+ // },
521
+ // "type": "snapshot"
522
+ // }
523
+ //
524
+ // spot
525
+ // {
526
+ // "topic": "tickers.BTCUSDT",
527
+ // "ts": 1673853746003,
528
+ // "type": "snapshot",
529
+ // "cs": 2588407389,
530
+ // "data": {
531
+ // "symbol": "BTCUSDT",
532
+ // "lastPrice": "21109.77",
533
+ // "highPrice24h": "21426.99",
534
+ // "lowPrice24h": "20575",
535
+ // "prevPrice24h": "20704.93",
536
+ // "volume24h": "6780.866843",
537
+ // "turnover24h": "141946527.22907118",
538
+ // "price24hPcnt": "0.0196",
539
+ // "usdIndexPrice": "21120.2400136"
540
+ // }
541
+ // }
542
+ //
543
+ // lt ticker
544
+ // {
545
+ // "topic": "tickers_lt.EOS3LUSDT",
546
+ // "ts": 1672325446847,
547
+ // "type": "snapshot",
548
+ // "data": {
549
+ // "symbol": "EOS3LUSDT",
550
+ // "lastPrice": "0.41477848043290448",
551
+ // "highPrice24h": "0.435285472510871305",
552
+ // "lowPrice24h": "0.394601507960931382",
553
+ // "prevPrice24h": "0.431502290172376349",
554
+ // "price24hPcnt": "-0.0388"
555
+ // }
556
+ // }
557
+ // swap delta
558
+ // {
559
+ // "topic":"tickers.AAVEUSDT",
560
+ // "type":"delta",
561
+ // "data":{
562
+ // "symbol":"AAVEUSDT",
563
+ // "bid1Price":"112.89",
564
+ // "bid1Size":"2.12",
565
+ // "ask1Price":"112.90",
566
+ // "ask1Size":"5.02"
567
+ // },
568
+ // "cs":78039939929,
569
+ // "ts":1709210212704
570
+ // }
571
+ //
572
+ const topic = this.safeString(message, 'topic', '');
573
+ const updateType = this.safeString(message, 'type', '');
574
+ const data = this.safeDict(message, 'data', {});
575
+ const isSpot = this.safeString(data, 'usdIndexPrice') !== undefined;
576
+ const type = isSpot ? 'spot' : 'contract';
577
+ let symbol = undefined;
578
+ let parsed = undefined;
579
+ if ((updateType === 'snapshot')) {
580
+ parsed = this.parseTicker(data);
581
+ symbol = parsed['symbol'];
582
+ }
583
+ else if (updateType === 'delta') {
584
+ const topicParts = topic.split('.');
585
+ const topicLength = topicParts.length;
586
+ const marketId = this.safeString(topicParts, topicLength - 1);
587
+ const market = this.safeMarket(marketId, undefined, undefined, type);
588
+ symbol = market['symbol'];
589
+ // update the info in place
590
+ const ticker = this.safeDict(this.tickers, symbol, {});
591
+ const rawTicker = this.safeDict(ticker, 'info', {});
592
+ const merged = this.extend(rawTicker, data);
593
+ parsed = this.parseTicker(merged);
594
+ }
595
+ const timestamp = this.safeInteger(message, 'ts');
596
+ parsed['timestamp'] = timestamp;
597
+ parsed['datetime'] = this.iso8601(timestamp);
598
+ this.tickers[symbol] = parsed;
599
+ const messageHash = 'ticker:' + symbol;
600
+ client.resolve(this.tickers[symbol], messageHash);
601
+ }
602
+ /**
603
+ * @method
604
+ * @name bybit#watchBidsAsks
605
+ * @description watches best bid & ask for symbols
606
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/orderbook
607
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
608
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
609
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
610
+ */
611
+ async watchBidsAsks(symbols = undefined, params = {}) {
612
+ await this.loadMarkets();
613
+ symbols = this.marketSymbols(symbols, undefined, false);
614
+ const messageHashes = [];
615
+ const url = await this.getUrlByMarketType(symbols[0], false, 'watchBidsAsks', params);
616
+ params = this.cleanParams(params);
617
+ const marketIds = this.marketIds(symbols);
618
+ const topics = [];
619
+ for (let i = 0; i < marketIds.length; i++) {
620
+ const marketId = marketIds[i];
621
+ const topic = 'orderbook.1.' + marketId;
622
+ topics.push(topic);
623
+ messageHashes.push('bidask:' + symbols[i]);
624
+ }
625
+ const ticker = await this.watchTopics(url, messageHashes, topics, params);
626
+ if (this.newUpdates) {
627
+ return ticker;
628
+ }
629
+ return this.filterByArray(this.bidsasks, 'symbol', symbols);
630
+ }
631
+ parseWsBidAsk(orderbook, market = undefined) {
632
+ const timestamp = this.safeInteger(orderbook, 'timestamp');
633
+ const bids = this.sortBy(this.aggregate(orderbook['bids']), 0);
634
+ const asks = this.sortBy(this.aggregate(orderbook['asks']), 0);
635
+ const bestBid = this.safeList(bids, 0, []);
636
+ const bestAsk = this.safeList(asks, 0, []);
637
+ return this.safeTicker({
638
+ 'symbol': market['symbol'],
639
+ 'timestamp': timestamp,
640
+ 'datetime': this.iso8601(timestamp),
641
+ 'ask': this.safeNumber(bestAsk, 0),
642
+ 'askVolume': this.safeNumber(bestAsk, 1),
643
+ 'bid': this.safeNumber(bestBid, 0),
644
+ 'bidVolume': this.safeNumber(bestBid, 1),
645
+ 'info': orderbook,
646
+ }, market);
647
+ }
648
+ /**
649
+ * @method
650
+ * @name bybit#watchOHLCV
651
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
652
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/kline
653
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-kline
654
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
655
+ * @param {string} timeframe the length of time each candle represents
656
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
657
+ * @param {int} [limit] the maximum amount of candles to fetch
658
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
659
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
660
+ */
661
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
662
+ params['callerMethodName'] = 'watchOHLCV';
663
+ const result = await this.watchOHLCVForSymbols([[symbol, timeframe]], since, limit, params);
664
+ return result[symbol][timeframe];
665
+ }
666
+ /**
667
+ * @method
668
+ * @name bybit#watchOHLCVForSymbols
669
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
670
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/kline
671
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-kline
672
+ * @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
673
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
674
+ * @param {int} [limit] the maximum amount of candles to fetch
675
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
676
+ * @returns {object} A list of candles ordered as timestamp, open, high, low, close, volume
677
+ */
678
+ async watchOHLCVForSymbols(symbolsAndTimeframes, since = undefined, limit = undefined, params = {}) {
679
+ await this.loadMarkets();
680
+ const symbols = this.getListFromObjectValues(symbolsAndTimeframes, 0);
681
+ const marketSymbols = this.marketSymbols(symbols, undefined, false, true, true);
682
+ const firstSymbol = marketSymbols[0];
683
+ const url = await this.getUrlByMarketType(firstSymbol, false, 'watchOHLCVForSymbols', params);
684
+ const rawHashes = [];
685
+ const messageHashes = [];
686
+ for (let i = 0; i < symbolsAndTimeframes.length; i++) {
687
+ const data = symbolsAndTimeframes[i];
688
+ let symbolString = this.safeString(data, 0);
689
+ const market = this.market(symbolString);
690
+ symbolString = market['symbol'];
691
+ const unfiedTimeframe = this.safeString(data, 1);
692
+ const timeframeId = this.safeString(this.timeframes, unfiedTimeframe, unfiedTimeframe);
693
+ rawHashes.push('kline.' + timeframeId + '.' + market['id']);
694
+ messageHashes.push('ohlcv::' + symbolString + '::' + unfiedTimeframe);
695
+ }
696
+ const [symbol, timeframe, stored] = await this.watchTopics(url, messageHashes, rawHashes, params);
697
+ if (this.newUpdates) {
698
+ limit = stored.getLimit(symbol, limit);
699
+ }
700
+ const filtered = this.filterBySinceLimit(stored, since, limit, 0, true);
701
+ return this.createOHLCVObject(symbol, timeframe, filtered);
702
+ }
703
+ /**
704
+ * @method
705
+ * @name bybit#unWatchOHLCVForSymbols
706
+ * @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
707
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/kline
708
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-kline
709
+ * @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
710
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
711
+ * @returns {object} A list of candles ordered as timestamp, open, high, low, close, volume
712
+ */
713
+ async unWatchOHLCVForSymbols(symbolsAndTimeframes, params = {}) {
714
+ await this.loadMarkets();
715
+ const symbols = this.getListFromObjectValues(symbolsAndTimeframes, 0);
716
+ const marketSymbols = this.marketSymbols(symbols, undefined, false, true, true);
717
+ const firstSymbol = marketSymbols[0];
718
+ const url = await this.getUrlByMarketType(firstSymbol, false, 'watchOHLCVForSymbols', params);
719
+ const rawHashes = [];
720
+ const subMessageHashes = [];
721
+ const messageHashes = [];
722
+ for (let i = 0; i < symbolsAndTimeframes.length; i++) {
723
+ const data = symbolsAndTimeframes[i];
724
+ let symbolString = this.safeString(data, 0);
725
+ const market = this.market(symbolString);
726
+ symbolString = market['symbol'];
727
+ const unfiedTimeframe = this.safeString(data, 1);
728
+ const timeframeId = this.safeString(this.timeframes, unfiedTimeframe, unfiedTimeframe);
729
+ rawHashes.push('kline.' + timeframeId + '.' + market['id']);
730
+ subMessageHashes.push('ohlcv::' + symbolString + '::' + unfiedTimeframe);
731
+ messageHashes.push('unsubscribe::ohlcv::' + symbolString + '::' + unfiedTimeframe);
732
+ }
733
+ const subExtension = {
734
+ 'symbolsAndTimeframes': symbolsAndTimeframes,
735
+ };
736
+ return await this.unWatchTopics(url, 'ohlcv', symbols, messageHashes, subMessageHashes, rawHashes, params, subExtension);
737
+ }
738
+ /**
739
+ * @method
740
+ * @name bybit#unWatchOHLCV
741
+ * @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
742
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/kline
743
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/etp-kline
744
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
745
+ * @param {string} timeframe the length of time each candle represents
746
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
747
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
748
+ */
749
+ async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
750
+ params['callerMethodName'] = 'watchOHLCV';
751
+ return await this.unWatchOHLCVForSymbols([[symbol, timeframe]], params);
752
+ }
753
+ handleOHLCV(client, message) {
754
+ //
755
+ // {
756
+ // "topic": "kline.5.BTCUSDT",
757
+ // "data": [
758
+ // {
759
+ // "start": 1672324800000,
760
+ // "end": 1672325099999,
761
+ // "interval": "5",
762
+ // "open": "16649.5",
763
+ // "close": "16677",
764
+ // "high": "16677",
765
+ // "low": "16608",
766
+ // "volume": "2.081",
767
+ // "turnover": "34666.4005",
768
+ // "confirm": false,
769
+ // "timestamp": 1672324988882
770
+ // }
771
+ // ],
772
+ // "ts": 1672324988882,
773
+ // "type": "snapshot"
774
+ // }
775
+ //
776
+ const data = this.safeValue(message, 'data', {});
777
+ const topic = this.safeString(message, 'topic');
778
+ const topicParts = topic.split('.');
779
+ const topicLength = topicParts.length;
780
+ const timeframeId = this.safeString(topicParts, 1);
781
+ const timeframe = this.findTimeframe(timeframeId);
782
+ const marketId = this.safeString(topicParts, topicLength - 1);
783
+ const isSpot = client.url.indexOf('spot') > -1;
784
+ const marketType = isSpot ? 'spot' : 'contract';
785
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
786
+ const symbol = market['symbol'];
787
+ const ohlcvsByTimeframe = this.safeValue(this.ohlcvs, symbol);
788
+ if (ohlcvsByTimeframe === undefined) {
789
+ this.ohlcvs[symbol] = {};
790
+ }
791
+ if (this.safeValue(ohlcvsByTimeframe, timeframe) === undefined) {
792
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
793
+ this.ohlcvs[symbol][timeframe] = new ArrayCacheByTimestamp(limit);
794
+ }
795
+ const stored = this.ohlcvs[symbol][timeframe];
796
+ for (let i = 0; i < data.length; i++) {
797
+ const parsed = this.parseWsOHLCV(data[i], market);
798
+ stored.append(parsed);
799
+ }
800
+ const messageHash = 'ohlcv::' + symbol + '::' + timeframe;
801
+ const resolveData = [symbol, timeframe, stored];
802
+ client.resolve(resolveData, messageHash);
803
+ }
804
+ parseWsOHLCV(ohlcv, market = undefined) {
805
+ //
806
+ // {
807
+ // "start": 1670363160000,
808
+ // "end": 1670363219999,
809
+ // "interval": "1",
810
+ // "open": "16987.5",
811
+ // "close": "16987.5",
812
+ // "high": "16988",
813
+ // "low": "16987.5",
814
+ // "volume": "23.511",
815
+ // "turnover": "399396.344",
816
+ // "confirm": false,
817
+ // "timestamp": 1670363219614
818
+ // }
819
+ //
820
+ const volumeIndex = (market['inverse']) ? 'turnover' : 'volume';
821
+ return [
822
+ this.safeInteger(ohlcv, 'start'),
823
+ this.safeNumber(ohlcv, 'open'),
824
+ this.safeNumber(ohlcv, 'high'),
825
+ this.safeNumber(ohlcv, 'low'),
826
+ this.safeNumber(ohlcv, 'close'),
827
+ this.safeNumber(ohlcv, volumeIndex),
828
+ ];
829
+ }
830
+ /**
831
+ * @method
832
+ * @name bybit#watchOrderBook
833
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
834
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/orderbook
835
+ * @param {string} symbol unified symbol of the market to fetch the order book for
836
+ * @param {int} [limit] the maximum amount of order book entries to return.
837
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
838
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
839
+ */
840
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
841
+ return await this.watchOrderBookForSymbols([symbol], limit, params);
842
+ }
843
+ /**
844
+ * @method
845
+ * @name bybit#watchOrderBookForSymbols
846
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
847
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/orderbook
848
+ * @param {string[]} symbols unified array of symbols
849
+ * @param {int} [limit] the maximum amount of order book entries to return.
850
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
851
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
852
+ */
853
+ async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
854
+ await this.loadMarkets();
855
+ const symbolsLength = symbols.length;
856
+ if (symbolsLength === 0) {
857
+ throw new ArgumentsRequired(this.id + ' watchOrderBookForSymbols() requires a non-empty array of symbols');
858
+ }
859
+ symbols = this.marketSymbols(symbols);
860
+ const url = await this.getUrlByMarketType(symbols[0], false, 'watchOrderBook', params);
861
+ params = this.cleanParams(params);
862
+ const market = this.market(symbols[0]);
863
+ if (limit === undefined) {
864
+ limit = (market['spot']) ? 50 : 500;
865
+ if (market['option']) {
866
+ limit = 100;
867
+ }
868
+ }
869
+ else {
870
+ const limits = {
871
+ 'spot': [1, 50, 200, 1000],
872
+ 'option': [25, 100],
873
+ 'default': [1, 50, 200, 500, 1000],
874
+ };
875
+ const selectedLimits = this.safeList2(limits, market['type'], 'default');
876
+ if (!this.inArray(limit, selectedLimits)) {
877
+ throw new BadRequest(this.id + ' watchOrderBookForSymbols(): for ' + market['type'] + ' markets limit can be one of: ' + this.json(selectedLimits));
878
+ }
879
+ }
880
+ const topics = [];
881
+ const messageHashes = [];
882
+ for (let i = 0; i < symbols.length; i++) {
883
+ const symbol = symbols[i];
884
+ const marketId = this.marketId(symbol);
885
+ const topic = 'orderbook.' + limit.toString() + '.' + marketId;
886
+ topics.push(topic);
887
+ const messageHash = 'orderbook:' + symbol;
888
+ messageHashes.push(messageHash);
889
+ }
890
+ const orderbook = await this.watchTopics(url, messageHashes, topics, params);
891
+ return orderbook.limit();
892
+ }
893
+ /**
894
+ * @method
895
+ * @name bybit#unWatchOrderBookForSymbols
896
+ * @description unsubscribe from the orderbook channel
897
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/orderbook
898
+ * @param {string[]} symbols unified symbol of the market to unwatch the trades for
899
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
900
+ * @param {int} [params.limit] orderbook limit, default is undefined
901
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
902
+ */
903
+ async unWatchOrderBookForSymbols(symbols, params = {}) {
904
+ await this.loadMarkets();
905
+ symbols = this.marketSymbols(symbols, undefined, false);
906
+ let channel = 'orderbook.';
907
+ let limit = this.safeInteger(params, 'limit');
908
+ if (limit !== undefined) {
909
+ params = this.omit(params, 'limit');
910
+ }
911
+ else {
912
+ const firstMarket = this.market(symbols[0]);
913
+ limit = firstMarket['spot'] ? 50 : 500;
914
+ }
915
+ channel += limit.toString();
916
+ const subMessageHashes = [];
917
+ const messageHashes = [];
918
+ const topics = [];
919
+ for (let i = 0; i < symbols.length; i++) {
920
+ const symbol = symbols[i];
921
+ const market = this.market(symbol);
922
+ const marketId = market['id'];
923
+ const topic = channel + '.' + marketId;
924
+ messageHashes.push('unsubscribe:orderbook:' + symbol);
925
+ subMessageHashes.push('orderbook:' + symbol);
926
+ topics.push(topic);
927
+ }
928
+ const url = await this.getUrlByMarketType(symbols[0], false, 'watchOrderBook', params);
929
+ return await this.unWatchTopics(url, 'orderbook', symbols, messageHashes, subMessageHashes, topics, params);
930
+ }
931
+ /**
932
+ * @method
933
+ * @name bybit#unWatchOrderBook
934
+ * @description unsubscribe from the orderbook channel
935
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/orderbook
936
+ * @param {string} symbol symbol of the market to unwatch the trades for
937
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
938
+ * @param {int} [params.limit] orderbook limit, default is undefined
939
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
940
+ */
941
+ async unWatchOrderBook(symbol, params = {}) {
942
+ await this.loadMarkets();
943
+ return await this.unWatchOrderBookForSymbols([symbol], params);
944
+ }
945
+ handleOrderBook(client, message) {
946
+ //
947
+ // {
948
+ // "topic": "orderbook.50.BTCUSDT",
949
+ // "type": "snapshot",
950
+ // "ts": 1672304484978,
951
+ // "data": {
952
+ // "s": "BTCUSDT",
953
+ // "b": [
954
+ // ...,
955
+ // [
956
+ // "16493.50",
957
+ // "0.006"
958
+ // ],
959
+ // [
960
+ // "16493.00",
961
+ // "0.100"
962
+ // ]
963
+ // ],
964
+ // "a": [
965
+ // [
966
+ // "16611.00",
967
+ // "0.029"
968
+ // ],
969
+ // [
970
+ // "16612.00",
971
+ // "0.213"
972
+ // ],
973
+ // ],
974
+ // "u": 18521288,
975
+ // "seq": 7961638724
976
+ // }
977
+ // }
978
+ //
979
+ const topic = this.safeString(message, 'topic');
980
+ const limit = topic.split('.')[1];
981
+ const isSpot = client.url.indexOf('spot') >= 0;
982
+ const type = this.safeString(message, 'type');
983
+ const isSnapshot = (type === 'snapshot');
984
+ const data = this.safeDict(message, 'data', {});
985
+ const marketId = this.safeString(data, 's');
986
+ const marketType = isSpot ? 'spot' : 'contract';
987
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
988
+ const symbol = market['symbol'];
989
+ const timestamp = this.safeInteger(message, 'ts');
990
+ if (!(symbol in this.orderbooks)) {
991
+ this.orderbooks[symbol] = this.orderBook();
992
+ }
993
+ const orderbook = this.orderbooks[symbol];
994
+ if (isSnapshot) {
995
+ const snapshot = this.parseOrderBook(data, symbol, timestamp, 'b', 'a');
996
+ orderbook.reset(snapshot);
997
+ }
998
+ else {
999
+ const asks = this.safeList(data, 'a', []);
1000
+ const bids = this.safeList(data, 'b', []);
1001
+ this.handleDeltas(orderbook['asks'], asks);
1002
+ this.handleDeltas(orderbook['bids'], bids);
1003
+ orderbook['timestamp'] = timestamp;
1004
+ orderbook['datetime'] = this.iso8601(timestamp);
1005
+ }
1006
+ const messageHash = 'orderbook' + ':' + symbol;
1007
+ this.orderbooks[symbol] = orderbook;
1008
+ client.resolve(orderbook, messageHash);
1009
+ if (limit === '1') {
1010
+ const bidask = this.parseWsBidAsk(this.orderbooks[symbol], market);
1011
+ const newBidsAsks = {};
1012
+ newBidsAsks[symbol] = bidask;
1013
+ this.bidsasks[symbol] = bidask;
1014
+ client.resolve(newBidsAsks, 'bidask:' + symbol);
1015
+ }
1016
+ }
1017
+ handleDelta(bookside, delta) {
1018
+ const bidAsk = this.parseBidAsk(delta, 0, 1);
1019
+ bookside.storeArray(bidAsk);
1020
+ }
1021
+ handleDeltas(bookside, deltas) {
1022
+ for (let i = 0; i < deltas.length; i++) {
1023
+ this.handleDelta(bookside, deltas[i]);
1024
+ }
1025
+ }
1026
+ /**
1027
+ * @method
1028
+ * @name bybit#watchTrades
1029
+ * @description watches information on multiple trades made in a market
1030
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/trade
1031
+ * @param {string} symbol unified market symbol of the market trades were made in
1032
+ * @param {int} [since] the earliest time in ms to fetch trades for
1033
+ * @param {int} [limit] the maximum number of trade structures to retrieve
1034
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1035
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1036
+ */
1037
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1038
+ return await this.watchTradesForSymbols([symbol], since, limit, params);
1039
+ }
1040
+ /**
1041
+ * @method
1042
+ * @name bybit#watchTradesForSymbols
1043
+ * @description get the list of most recent trades for a list of symbols
1044
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/trade
1045
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
1046
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1047
+ * @param {int} [limit] the maximum amount of trades to fetch
1048
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1049
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1050
+ */
1051
+ async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
1052
+ await this.loadMarkets();
1053
+ symbols = this.marketSymbols(symbols);
1054
+ const symbolsLength = symbols.length;
1055
+ if (symbolsLength === 0) {
1056
+ throw new ArgumentsRequired(this.id + ' watchTradesForSymbols() requires a non-empty array of symbols');
1057
+ }
1058
+ params = this.cleanParams(params);
1059
+ const url = await this.getUrlByMarketType(symbols[0], false, 'watchTrades', params);
1060
+ const topics = [];
1061
+ const messageHashes = [];
1062
+ for (let i = 0; i < symbols.length; i++) {
1063
+ const symbol = symbols[i];
1064
+ const market = this.market(symbol);
1065
+ const topic = 'publicTrade.' + market['id'];
1066
+ topics.push(topic);
1067
+ const messageHash = 'trade:' + symbol;
1068
+ messageHashes.push(messageHash);
1069
+ }
1070
+ const trades = await this.watchTopics(url, messageHashes, topics, params);
1071
+ if (this.newUpdates) {
1072
+ const first = this.safeValue(trades, 0);
1073
+ const tradeSymbol = this.safeString(first, 'symbol');
1074
+ limit = trades.getLimit(tradeSymbol, limit);
1075
+ }
1076
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
1077
+ }
1078
+ /**
1079
+ * @method
1080
+ * @name bybit#unWatchTradesForSymbols
1081
+ * @description unsubscribe from the trades channel
1082
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/trade
1083
+ * @param {string[]} symbols unified symbol of the market to unwatch the trades for
1084
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1085
+ * @returns {any} status of the unwatch request
1086
+ */
1087
+ async unWatchTradesForSymbols(symbols, params = {}) {
1088
+ await this.loadMarkets();
1089
+ symbols = this.marketSymbols(symbols, undefined, false, true);
1090
+ const url = await this.getUrlByMarketType(symbols[0], false, 'unWatchTradesForSymbols', params);
1091
+ const messageHashes = [];
1092
+ const topics = [];
1093
+ const subMessageHashes = [];
1094
+ for (let i = 0; i < symbols.length; i++) {
1095
+ const symbol = symbols[i];
1096
+ const market = this.market(symbol);
1097
+ const topic = 'publicTrade.' + market['id'];
1098
+ topics.push(topic);
1099
+ const messageHash = 'unsubscribe:trade:' + symbol;
1100
+ messageHashes.push(messageHash);
1101
+ subMessageHashes.push('trade:' + symbol);
1102
+ }
1103
+ return await this.unWatchTopics(url, 'trades', symbols, messageHashes, subMessageHashes, topics, params);
1104
+ }
1105
+ /**
1106
+ * @method
1107
+ * @name bybit#unWatchTrades
1108
+ * @description unsubscribe from the trades channel
1109
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/trade
1110
+ * @param {string} symbol unified symbol of the market to unwatch the trades for
1111
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1112
+ * @returns {any} status of the unwatch request
1113
+ */
1114
+ async unWatchTrades(symbol, params = {}) {
1115
+ await this.loadMarkets();
1116
+ return await this.unWatchTradesForSymbols([symbol], params);
1117
+ }
1118
+ handleTrades(client, message) {
1119
+ //
1120
+ // {
1121
+ // "topic": "publicTrade.BTCUSDT",
1122
+ // "type": "snapshot",
1123
+ // "ts": 1672304486868,
1124
+ // "data": [
1125
+ // {
1126
+ // "T": 1672304486865,
1127
+ // "s": "BTCUSDT",
1128
+ // "S": "Buy",
1129
+ // "v": "0.001",
1130
+ // "p": "16578.50",
1131
+ // "L": "PlusTick",
1132
+ // "i": "20f43950-d8dd-5b31-9112-a178eb6023af",
1133
+ // "BT": false
1134
+ // }
1135
+ // ]
1136
+ // }
1137
+ //
1138
+ const data = this.safeValue(message, 'data', {});
1139
+ const topic = this.safeString(message, 'topic');
1140
+ const trades = data;
1141
+ const parts = topic.split('.');
1142
+ const isSpot = client.url.indexOf('spot') >= 0;
1143
+ const marketType = (isSpot) ? 'spot' : 'contract';
1144
+ const marketId = this.safeString(parts, 1);
1145
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
1146
+ const symbol = market['symbol'];
1147
+ let stored = this.safeValue(this.trades, symbol);
1148
+ if (stored === undefined) {
1149
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
1150
+ stored = new ArrayCache(limit);
1151
+ this.trades[symbol] = stored;
1152
+ }
1153
+ for (let j = 0; j < trades.length; j++) {
1154
+ const parsed = this.parseWsTrade(trades[j], market);
1155
+ stored.append(parsed);
1156
+ }
1157
+ const messageHash = 'trade' + ':' + symbol;
1158
+ client.resolve(stored, messageHash);
1159
+ }
1160
+ parseWsTrade(trade, market = undefined) {
1161
+ //
1162
+ // public
1163
+ // {
1164
+ // "T": 1672304486865,
1165
+ // "s": "BTCUSDT",
1166
+ // "S": "Buy",
1167
+ // "v": "0.001",
1168
+ // "p": "16578.50",
1169
+ // "L": "PlusTick",
1170
+ // "i": "20f43950-d8dd-5b31-9112-a178eb6023af",
1171
+ // "BT": false
1172
+ // }
1173
+ //
1174
+ // spot private
1175
+ // {
1176
+ // "e": "ticketInfo",
1177
+ // "E": "1662348310386",
1178
+ // "s": "BTCUSDT",
1179
+ // "q": "0.001007",
1180
+ // "t": "1662348310373",
1181
+ // "p": "19842.02",
1182
+ // "T": "2100000000002220938",
1183
+ // "o": "1238261807653647872",
1184
+ // "c": "spotx008",
1185
+ // "O": "1238225004531834368",
1186
+ // "a": "533287",
1187
+ // "A": "642908",
1188
+ // "m": false,
1189
+ // "S": "BUY"
1190
+ // }
1191
+ //
1192
+ const id = this.safeStringN(trade, ['i', 'T', 'v']);
1193
+ const isContract = ('BT' in trade);
1194
+ let marketType = isContract ? 'contract' : 'spot';
1195
+ if (market !== undefined) {
1196
+ marketType = market['type'];
1197
+ }
1198
+ const marketId = this.safeString(trade, 's');
1199
+ market = this.safeMarket(marketId, market, undefined, marketType);
1200
+ const symbol = market['symbol'];
1201
+ const timestamp = this.safeInteger2(trade, 't', 'T');
1202
+ let side = this.safeStringLower(trade, 'S');
1203
+ let takerOrMaker = undefined;
1204
+ const m = this.safeValue(trade, 'm');
1205
+ if (side === undefined) {
1206
+ side = m ? 'buy' : 'sell';
1207
+ }
1208
+ else {
1209
+ // spot private
1210
+ takerOrMaker = m;
1211
+ }
1212
+ const price = this.safeString(trade, 'p');
1213
+ const amount = this.safeString2(trade, 'q', 'v');
1214
+ const orderId = this.safeString(trade, 'o');
1215
+ return this.safeTrade({
1216
+ 'id': id,
1217
+ 'info': trade,
1218
+ 'timestamp': timestamp,
1219
+ 'datetime': this.iso8601(timestamp),
1220
+ 'symbol': symbol,
1221
+ 'order': orderId,
1222
+ 'type': undefined,
1223
+ 'side': side,
1224
+ 'takerOrMaker': takerOrMaker,
1225
+ 'price': price,
1226
+ 'amount': amount,
1227
+ 'cost': undefined,
1228
+ 'fee': undefined,
1229
+ }, market);
1230
+ }
1231
+ getPrivateType(url) {
1232
+ if (url.indexOf('spot') >= 0) {
1233
+ return 'spot';
1234
+ }
1235
+ else if (url.indexOf('v5/private') >= 0) {
1236
+ return 'unified';
1237
+ }
1238
+ else {
1239
+ return 'usdc';
1240
+ }
1241
+ }
1242
+ /**
1243
+ * @method
1244
+ * @name bybit#watchMyTrades
1245
+ * @description watches information on multiple trades made by the user
1246
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/private/execution
1247
+ * @param {string} symbol unified market symbol of the market orders were made in
1248
+ * @param {int} [since] the earliest time in ms to fetch orders for
1249
+ * @param {int} [limit] the maximum number of order structures to retrieve
1250
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1251
+ * @param {boolean} [params.unifiedMargin] use unified margin account
1252
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1253
+ */
1254
+ async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1255
+ const method = 'watchMyTrades';
1256
+ let messageHash = 'myTrades';
1257
+ await this.loadMarkets();
1258
+ if (symbol !== undefined) {
1259
+ symbol = this.symbol(symbol);
1260
+ messageHash += ':' + symbol;
1261
+ }
1262
+ const url = await this.getUrlByMarketType(symbol, true, method, params);
1263
+ await this.authenticate(url);
1264
+ const topicByMarket = {
1265
+ 'spot': 'ticketInfo',
1266
+ 'unified': 'execution',
1267
+ 'usdc': 'user.openapi.perp.trade',
1268
+ };
1269
+ const topic = this.safeValue(topicByMarket, this.getPrivateType(url));
1270
+ const trades = await this.watchTopics(url, [messageHash], [topic], params);
1271
+ if (this.newUpdates) {
1272
+ limit = trades.getLimit(symbol, limit);
1273
+ }
1274
+ return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
1275
+ }
1276
+ /**
1277
+ * @method
1278
+ * @name bybit#unWatchMyTrades
1279
+ * @description unWatches information on multiple trades made by the user
1280
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/private/execution
1281
+ * @param {string} symbol unified market symbol of the market orders were made in
1282
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1283
+ * @param {boolean} [params.unifiedMargin] use unified margin account
1284
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1285
+ */
1286
+ async unWatchMyTrades(symbol = undefined, params = {}) {
1287
+ const method = 'watchMyTrades';
1288
+ const messageHash = 'unsubscribe:myTrades';
1289
+ const subHash = 'myTrades';
1290
+ await this.loadMarkets();
1291
+ if (symbol !== undefined) {
1292
+ throw new NotSupported(this.id + ' unWatchMyTrades() does not support a symbol parameter, you must unwatch all my trades');
1293
+ }
1294
+ const url = await this.getUrlByMarketType(symbol, true, method, params);
1295
+ await this.authenticate(url);
1296
+ const topicByMarket = {
1297
+ 'spot': 'ticketInfo',
1298
+ 'unified': 'execution',
1299
+ 'usdc': 'user.openapi.perp.trade',
1300
+ };
1301
+ const topic = this.safeValue(topicByMarket, this.getPrivateType(url));
1302
+ return await this.unWatchTopics(url, 'myTrades', [], [messageHash], [subHash], [topic], params);
1303
+ }
1304
+ handleMyTrades(client, message) {
1305
+ //
1306
+ // spot
1307
+ // {
1308
+ // "type": "snapshot",
1309
+ // "topic": "ticketInfo",
1310
+ // "ts": "1662348310388",
1311
+ // "data": [
1312
+ // {
1313
+ // "e": "ticketInfo",
1314
+ // "E": "1662348310386",
1315
+ // "s": "BTCUSDT",
1316
+ // "q": "0.001007",
1317
+ // "t": "1662348310373",
1318
+ // "p": "19842.02",
1319
+ // "T": "2100000000002220938",
1320
+ // "o": "1238261807653647872",
1321
+ // "c": "spotx008",
1322
+ // "O": "1238225004531834368",
1323
+ // "a": "533287",
1324
+ // "A": "642908",
1325
+ // "m": false,
1326
+ // "S": "BUY"
1327
+ // }
1328
+ // ]
1329
+ // }
1330
+ // unified
1331
+ // {
1332
+ // "id": "592324803b2785-26fa-4214-9963-bdd4727f07be",
1333
+ // "topic": "execution",
1334
+ // "creationTime": 1672364174455,
1335
+ // "data": [
1336
+ // {
1337
+ // "category": "linear",
1338
+ // "symbol": "XRPUSDT",
1339
+ // "execFee": "0.005061",
1340
+ // "execId": "7e2ae69c-4edf-5800-a352-893d52b446aa",
1341
+ // "execPrice": "0.3374",
1342
+ // "execQty": "25",
1343
+ // "execType": "Trade",
1344
+ // "execValue": "8.435",
1345
+ // "isMaker": false,
1346
+ // "feeRate": "0.0006",
1347
+ // "tradeIv": "",
1348
+ // "markIv": "",
1349
+ // "blockTradeId": "",
1350
+ // "markPrice": "0.3391",
1351
+ // "indexPrice": "",
1352
+ // "underlyingPrice": "",
1353
+ // "leavesQty": "0",
1354
+ // "orderId": "f6e324ff-99c2-4e89-9739-3086e47f9381",
1355
+ // "orderLinkId": "",
1356
+ // "orderPrice": "0.3207",
1357
+ // "orderQty": "25",
1358
+ // "orderType": "Market",
1359
+ // "stopOrderType": "UNKNOWN",
1360
+ // "side": "Sell",
1361
+ // "execTime": "1672364174443",
1362
+ // "isLeverage": "0"
1363
+ // }
1364
+ // ]
1365
+ // }
1366
+ //
1367
+ const topic = this.safeString(message, 'topic');
1368
+ const spot = topic === 'ticketInfo';
1369
+ let data = this.safeValue(message, 'data', []);
1370
+ if (!Array.isArray(data)) {
1371
+ data = this.safeValue(data, 'result', []);
1372
+ }
1373
+ if (this.myTrades === undefined) {
1374
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
1375
+ this.myTrades = new ArrayCacheBySymbolById(limit);
1376
+ }
1377
+ const trades = this.myTrades;
1378
+ const symbols = {};
1379
+ const filterExecTypes = this.handleOption('watchMyTrades', 'filterExecTypes', []);
1380
+ for (let i = 0; i < data.length; i++) {
1381
+ const rawTrade = data[i];
1382
+ let parsed = undefined;
1383
+ if (spot) {
1384
+ parsed = this.parseWsTrade(rawTrade);
1385
+ }
1386
+ else {
1387
+ // filter unified trades
1388
+ const execType = this.safeString(rawTrade, 'execType', '');
1389
+ if (!this.inArray(execType, filterExecTypes)) {
1390
+ continue;
1391
+ }
1392
+ parsed = this.parseTrade(rawTrade);
1393
+ }
1394
+ const symbol = parsed['symbol'];
1395
+ symbols[symbol] = true;
1396
+ trades.append(parsed);
1397
+ }
1398
+ const keys = Object.keys(symbols);
1399
+ for (let i = 0; i < keys.length; i++) {
1400
+ const currentMessageHash = 'myTrades:' + keys[i];
1401
+ client.resolve(trades, currentMessageHash);
1402
+ }
1403
+ // non-symbol specific
1404
+ const messageHash = 'myTrades';
1405
+ client.resolve(trades, messageHash);
1406
+ }
1407
+ /**
1408
+ * @method
1409
+ * @name bybit#watchPositions
1410
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/private/position
1411
+ * @description watch all open positions
1412
+ * @param {string[]} [symbols] list of unified market symbols
1413
+ * @param {int} [since] the earliest time in ms to fetch positions for
1414
+ * @param {int} [limit] the maximum number of positions to retrieve
1415
+ * @param {object} params extra parameters specific to the exchange API endpoint
1416
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
1417
+ */
1418
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
1419
+ await this.loadMarkets();
1420
+ const method = 'watchPositions';
1421
+ let messageHash = '';
1422
+ if (!this.isEmpty(symbols)) {
1423
+ symbols = this.marketSymbols(symbols);
1424
+ messageHash = '::' + symbols.join(',');
1425
+ }
1426
+ const firstSymbol = this.safeString(symbols, 0);
1427
+ const url = await this.getUrlByMarketType(firstSymbol, true, method, params);
1428
+ messageHash = 'positions' + messageHash;
1429
+ const client = this.client(url);
1430
+ await this.authenticate(url);
1431
+ this.setPositionsCache(client, symbols);
1432
+ const cache = this.positions;
1433
+ const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', true);
1434
+ const awaitPositionsSnapshot = this.handleOption('watchPositions', 'awaitPositionsSnapshot', true);
1435
+ if (fetchPositionsSnapshot && awaitPositionsSnapshot && cache === undefined) {
1436
+ const snapshot = await client.future('fetchPositionsSnapshot');
1437
+ return this.filterBySymbolsSinceLimit(snapshot, symbols, since, limit, true);
1438
+ }
1439
+ const topics = ['position'];
1440
+ const newPositions = await this.watchTopics(url, [messageHash], topics, params);
1441
+ if (this.newUpdates) {
1442
+ return newPositions;
1443
+ }
1444
+ return this.filterBySymbolsSinceLimit(cache, symbols, since, limit, true);
1445
+ }
1446
+ setPositionsCache(client, symbols = undefined) {
1447
+ if (this.positions !== undefined) {
1448
+ return;
1449
+ }
1450
+ const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', true);
1451
+ if (fetchPositionsSnapshot) {
1452
+ const messageHash = 'fetchPositionsSnapshot';
1453
+ if (!(messageHash in client.futures)) {
1454
+ client.future(messageHash);
1455
+ this.spawn(this.loadPositionsSnapshot, client, messageHash);
1456
+ }
1457
+ }
1458
+ else {
1459
+ this.positions = new ArrayCacheBySymbolBySide();
1460
+ }
1461
+ }
1462
+ async loadPositionsSnapshot(client, messageHash) {
1463
+ // as only one ws channel gives positions for all types, for snapshot must load all positions
1464
+ const fetchFunctions = [
1465
+ this.fetchPositions(undefined, { 'type': 'swap', 'subType': 'linear' }),
1466
+ this.fetchPositions(undefined, { 'type': 'swap', 'subType': 'inverse' }),
1467
+ ];
1468
+ const promises = await Promise.all(fetchFunctions);
1469
+ this.positions = new ArrayCacheBySymbolBySide();
1470
+ const cache = this.positions;
1471
+ for (let i = 0; i < promises.length; i++) {
1472
+ const positions = promises[i];
1473
+ for (let ii = 0; ii < positions.length; ii++) {
1474
+ const position = positions[ii];
1475
+ cache.append(position);
1476
+ }
1477
+ }
1478
+ // don't remove the future from the .futures cache
1479
+ const future = client.futures[messageHash];
1480
+ future.resolve(cache);
1481
+ client.resolve(cache, 'position');
1482
+ }
1483
+ handlePositions(client, message) {
1484
+ //
1485
+ // {
1486
+ // topic: 'position',
1487
+ // id: '504b2671629b08e3c4f6960382a59363:3bc4028023786545:0:01',
1488
+ // creationTime: 1694566055295,
1489
+ // data: [{
1490
+ // bustPrice: '15.00',
1491
+ // category: 'inverse',
1492
+ // createdTime: '1670083436351',
1493
+ // cumRealisedPnl: '0.00011988',
1494
+ // entryPrice: '19358.58553268',
1495
+ // leverage: '10',
1496
+ // liqPrice: '15.00',
1497
+ // markPrice: '25924.00',
1498
+ // positionBalance: '0.0000156',
1499
+ // positionIdx: 0,
1500
+ // positionMM: '0.001',
1501
+ // positionIM: '0.0000015497',
1502
+ // positionStatus: 'Normal',
1503
+ // positionValue: '0.00015497',
1504
+ // riskId: 1,
1505
+ // riskLimitValue: '150',
1506
+ // side: 'Buy',
1507
+ // size: '3',
1508
+ // stopLoss: '0.00',
1509
+ // symbol: 'BTCUSD',
1510
+ // takeProfit: '0.00',
1511
+ // tpslMode: 'Full',
1512
+ // tradeMode: 0,
1513
+ // autoAddMargin: 1,
1514
+ // trailingStop: '0.00',
1515
+ // unrealisedPnl: '0.00003925',
1516
+ // updatedTime: '1694566055293',
1517
+ // adlRankIndicator: 3
1518
+ // }]
1519
+ // }
1520
+ //
1521
+ // each account is connected to a different endpoint
1522
+ // and has exactly one subscriptionhash which is the account type
1523
+ if (this.positions === undefined) {
1524
+ this.positions = new ArrayCacheBySymbolBySide();
1525
+ }
1526
+ const cache = this.positions;
1527
+ const newPositions = [];
1528
+ const rawPositions = this.safeValue(message, 'data', []);
1529
+ for (let i = 0; i < rawPositions.length; i++) {
1530
+ const rawPosition = rawPositions[i];
1531
+ const position = this.parsePosition(rawPosition);
1532
+ const side = this.safeString(position, 'side');
1533
+ // hacky solution to handle closing positions
1534
+ // without crashing, we should handle this properly later
1535
+ newPositions.push(position);
1536
+ if (side === undefined || side === '') {
1537
+ // closing update, adding both sides to "reset" both sides
1538
+ // since we don't know which side is being closed
1539
+ position['side'] = 'long';
1540
+ cache.append(position);
1541
+ position['side'] = 'short';
1542
+ cache.append(position);
1543
+ position['side'] = undefined;
1544
+ }
1545
+ else {
1546
+ // regular update
1547
+ cache.append(position);
1548
+ }
1549
+ }
1550
+ const messageHashes = this.findMessageHashes(client, 'positions::');
1551
+ for (let i = 0; i < messageHashes.length; i++) {
1552
+ const messageHash = messageHashes[i];
1553
+ const parts = messageHash.split('::');
1554
+ const symbolsString = parts[1];
1555
+ const symbols = symbolsString.split(',');
1556
+ const positions = this.filterByArray(newPositions, 'symbol', symbols, false);
1557
+ if (!this.isEmpty(positions)) {
1558
+ client.resolve(positions, messageHash);
1559
+ }
1560
+ }
1561
+ client.resolve(newPositions, 'positions');
1562
+ }
1563
+ /**
1564
+ * @method
1565
+ * @name bybit#unWatchPositions
1566
+ * @description unWatches all open positions
1567
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/private/position
1568
+ * @param {string[]} [symbols] list of unified market symbols
1569
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1570
+ * @returns {object} status of the unwatch request
1571
+ */
1572
+ async unWatchPositions(symbols = undefined, params = {}) {
1573
+ await this.loadMarkets();
1574
+ const method = 'watchPositions';
1575
+ const messageHash = 'unsubscribe:positions';
1576
+ const subHash = 'positions';
1577
+ if (!this.isEmpty(symbols)) {
1578
+ throw new NotSupported(this.id + ' unWatchPositions() does not support a symbol parameter, you must unwatch all orders');
1579
+ }
1580
+ const url = await this.getUrlByMarketType(undefined, true, method, params);
1581
+ await this.authenticate(url);
1582
+ const topics = ['position'];
1583
+ return await this.unWatchTopics(url, 'positions', symbols, [messageHash], [subHash], topics, params);
1584
+ }
1585
+ /**
1586
+ * @method
1587
+ * @name bybit#watchLiquidations
1588
+ * @description watch the public liquidations of a trading pair
1589
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/public/liquidation
1590
+ * @param {string} symbol unified CCXT market symbol
1591
+ * @param {int} [since] the earliest time in ms to fetch liquidations for
1592
+ * @param {int} [limit] the maximum number of liquidation structures to retrieve
1593
+ * @param {object} [params] exchange specific parameters for the bitmex api endpoint
1594
+ * @param {string} [params.method] exchange specific method, supported: liquidation, allLiquidation
1595
+ * @returns {object} an array of [liquidation structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#liquidation-structure}
1596
+ */
1597
+ async watchLiquidations(symbol, since = undefined, limit = undefined, params = {}) {
1598
+ await this.loadMarkets();
1599
+ const market = this.market(symbol);
1600
+ symbol = market['symbol'];
1601
+ const url = await this.getUrlByMarketType(symbol, false, 'watchLiquidations', params);
1602
+ params = this.cleanParams(params);
1603
+ let method = undefined;
1604
+ [method, params] = this.handleOptionAndParams(params, 'watchLiquidations', 'method', 'liquidation');
1605
+ const messageHash = 'liquidations::' + symbol;
1606
+ const topic = method + '.' + market['id'];
1607
+ const newLiquidation = await this.watchTopics(url, [messageHash], [topic], params);
1608
+ if (this.newUpdates) {
1609
+ return newLiquidation;
1610
+ }
1611
+ return this.filterBySymbolsSinceLimit(this.liquidations, [symbol], since, limit, true);
1612
+ }
1613
+ handleLiquidation(client, message) {
1614
+ //
1615
+ // {
1616
+ // "data": {
1617
+ // "price": "0.03803",
1618
+ // "side": "Buy",
1619
+ // "size": "1637",
1620
+ // "symbol": "GALAUSDT",
1621
+ // "updatedTime": 1673251091822
1622
+ // },
1623
+ // "topic": "liquidation.GALAUSDT",
1624
+ // "ts": 1673251091822,
1625
+ // "type": "snapshot"
1626
+ // }
1627
+ //
1628
+ // {
1629
+ // "topic": "allLiquidation.ROSEUSDT",
1630
+ // "type": "snapshot",
1631
+ // "ts": 1739502303204,
1632
+ // "data": [
1633
+ // {
1634
+ // "T": 1739502302929,
1635
+ // "s": "ROSEUSDT",
1636
+ // "S": "Sell",
1637
+ // "v": "20000",
1638
+ // "p": "0.04499"
1639
+ // }
1640
+ // ]
1641
+ // }
1642
+ //
1643
+ if (Array.isArray(message['data'])) {
1644
+ const rawLiquidations = this.safeList(message, 'data', []);
1645
+ for (let i = 0; i < rawLiquidations.length; i++) {
1646
+ const rawLiquidation = rawLiquidations[i];
1647
+ const marketId = this.safeString(rawLiquidation, 's');
1648
+ const market = this.safeMarket(marketId, undefined, '', 'contract');
1649
+ const symbol = market['symbol'];
1650
+ const liquidation = this.parseWsLiquidation(rawLiquidation, market);
1651
+ let liquidations = this.safeValue(this.liquidations, symbol);
1652
+ if (liquidations === undefined) {
1653
+ const limit = this.safeInteger(this.options, 'liquidationsLimit', 1000);
1654
+ liquidations = new ArrayCache(limit);
1655
+ }
1656
+ liquidations.append(liquidation);
1657
+ this.liquidations[symbol] = liquidations;
1658
+ client.resolve([liquidation], 'liquidations');
1659
+ client.resolve([liquidation], 'liquidations::' + symbol);
1660
+ }
1661
+ }
1662
+ else {
1663
+ const rawLiquidation = this.safeDict(message, 'data', {});
1664
+ const marketId = this.safeString(rawLiquidation, 'symbol');
1665
+ const market = this.safeMarket(marketId, undefined, '', 'contract');
1666
+ const symbol = market['symbol'];
1667
+ const liquidation = this.parseWsLiquidation(rawLiquidation, market);
1668
+ let liquidations = this.safeValue(this.liquidations, symbol);
1669
+ if (liquidations === undefined) {
1670
+ const limit = this.safeInteger(this.options, 'liquidationsLimit', 1000);
1671
+ liquidations = new ArrayCache(limit);
1672
+ }
1673
+ liquidations.append(liquidation);
1674
+ this.liquidations[symbol] = liquidations;
1675
+ client.resolve([liquidation], 'liquidations');
1676
+ client.resolve([liquidation], 'liquidations::' + symbol);
1677
+ }
1678
+ }
1679
+ parseWsLiquidation(liquidation, market = undefined) {
1680
+ //
1681
+ // {
1682
+ // "price": "0.03803",
1683
+ // "side": "Buy",
1684
+ // "size": "1637",
1685
+ // "symbol": "GALAUSDT",
1686
+ // "updatedTime": 1673251091822
1687
+ // }
1688
+ //
1689
+ // {
1690
+ // "T": 1739502302929,
1691
+ // "s": "ROSEUSDT",
1692
+ // "S": "Sell",
1693
+ // "v": "20000",
1694
+ // "p": "0.04499"
1695
+ // }
1696
+ //
1697
+ const marketId = this.safeString2(liquidation, 'symbol', 's');
1698
+ market = this.safeMarket(marketId, market, '', 'contract');
1699
+ const timestamp = this.safeInteger2(liquidation, 'updatedTime', 'T');
1700
+ return this.safeLiquidation({
1701
+ 'info': liquidation,
1702
+ 'symbol': market['symbol'],
1703
+ 'contracts': this.safeNumber2(liquidation, 'size', 'v'),
1704
+ 'contractSize': this.safeNumber(market, 'contractSize'),
1705
+ 'price': this.safeNumber2(liquidation, 'price', 'p'),
1706
+ 'side': this.safeStringLower(liquidation, 'side', 'S'),
1707
+ 'baseValue': undefined,
1708
+ 'quoteValue': undefined,
1709
+ 'timestamp': timestamp,
1710
+ 'datetime': this.iso8601(timestamp),
1711
+ });
1712
+ }
1713
+ /**
1714
+ * @method
1715
+ * @name bybit#watchOrders
1716
+ * @description watches information on multiple orders made by the user
1717
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/private/order
1718
+ * @param {string} symbol unified market symbol of the market orders were made in
1719
+ * @param {int} [since] the earliest time in ms to fetch orders for
1720
+ * @param {int} [limit] the maximum number of order structures to retrieve
1721
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1722
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1723
+ */
1724
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1725
+ await this.loadMarkets();
1726
+ const method = 'watchOrders';
1727
+ let messageHash = 'orders';
1728
+ if (symbol !== undefined) {
1729
+ symbol = this.symbol(symbol);
1730
+ messageHash += ':' + symbol;
1731
+ }
1732
+ const url = await this.getUrlByMarketType(symbol, true, method, params);
1733
+ await this.authenticate(url);
1734
+ const topicsByMarket = {
1735
+ 'spot': ['order', 'stopOrder'],
1736
+ 'unified': ['order'],
1737
+ 'usdc': ['user.openapi.perp.order'],
1738
+ };
1739
+ const topics = this.safeValue(topicsByMarket, this.getPrivateType(url));
1740
+ const orders = await this.watchTopics(url, [messageHash], topics, params);
1741
+ if (this.newUpdates) {
1742
+ limit = orders.getLimit(symbol, limit);
1743
+ }
1744
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
1745
+ }
1746
+ /**
1747
+ * @method
1748
+ * @name bybit#unWatchOrders
1749
+ * @description unWatches information on multiple orders made by the user
1750
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/private/order
1751
+ * @param {string} symbol unified market symbol of the market orders were made in
1752
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1753
+ * @param {boolean} [params.unifiedMargin] use unified margin account
1754
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1755
+ */
1756
+ async unWatchOrders(symbol = undefined, params = {}) {
1757
+ await this.loadMarkets();
1758
+ const method = 'watchOrders';
1759
+ const messageHash = 'unsubscribe:orders';
1760
+ const subHash = 'orders';
1761
+ if (symbol !== undefined) {
1762
+ throw new NotSupported(this.id + ' unWatchOrders() does not support a symbol parameter, you must unwatch all orders');
1763
+ }
1764
+ const url = await this.getUrlByMarketType(symbol, true, method, params);
1765
+ await this.authenticate(url);
1766
+ const topicsByMarket = {
1767
+ 'spot': ['order', 'stopOrder'],
1768
+ 'unified': ['order'],
1769
+ 'usdc': ['user.openapi.perp.order'],
1770
+ };
1771
+ const topics = this.safeValue(topicsByMarket, this.getPrivateType(url));
1772
+ return await this.unWatchTopics(url, 'orders', [], [messageHash], [subHash], topics, params);
1773
+ }
1774
+ handleOrderWs(client, message) {
1775
+ //
1776
+ // {
1777
+ // "reqId":"1",
1778
+ // "retCode":0,
1779
+ // "retMsg":"OK",
1780
+ // "op":"order.create",
1781
+ // "data":{
1782
+ // "orderId":"1673523595617593600",
1783
+ // "orderLinkId":"1673523595617593601"
1784
+ // },
1785
+ // "header":{
1786
+ // "X-Bapi-Limit":"20",
1787
+ // "X-Bapi-Limit-Status":"19",
1788
+ // "X-Bapi-Limit-Reset-Timestamp":"1714235558880",
1789
+ // "Traceid":"584a06d373f2fdcb3a4dfdd81d27df11",
1790
+ // "Timenow":"1714235558881"
1791
+ // },
1792
+ // "connId":"cojidqec0hv9fgvhtbt0-40e"
1793
+ // }
1794
+ //
1795
+ const messageHash = this.safeString(message, 'reqId');
1796
+ const data = this.safeDict(message, 'data');
1797
+ const order = this.parseOrder(data);
1798
+ client.resolve(order, messageHash);
1799
+ }
1800
+ handleOrder(client, message) {
1801
+ //
1802
+ // spot
1803
+ // {
1804
+ // "type": "snapshot",
1805
+ // "topic": "order",
1806
+ // "ts": "1662348310441",
1807
+ // "data": [
1808
+ // {
1809
+ // "e": "order",
1810
+ // "E": "1662348310441",
1811
+ // "s": "BTCUSDT",
1812
+ // "c": "spotx008",
1813
+ // "S": "BUY",
1814
+ // "o": "MARKET_OF_QUOTE",
1815
+ // "f": "GTC",
1816
+ // "q": "20",
1817
+ // "p": "0",
1818
+ // "X": "CANCELED",
1819
+ // "i": "1238261807653647872",
1820
+ // "M": "1238225004531834368",
1821
+ // "l": "0.001007",
1822
+ // "z": "0.001007",
1823
+ // "L": "19842.02",
1824
+ // "n": "0",
1825
+ // "N": "BTC",
1826
+ // "u": true,
1827
+ // "w": true,
1828
+ // "m": false,
1829
+ // "O": "1662348310368",
1830
+ // "Z": "19.98091414",
1831
+ // "A": "0",
1832
+ // "C": false,
1833
+ // "v": "0",
1834
+ // "d": "NO_LIQ",
1835
+ // "t": "2100000000002220938"
1836
+ // }
1837
+ // ]
1838
+ // }
1839
+ // unified
1840
+ // {
1841
+ // "id": "5923240c6880ab-c59f-420b-9adb-3639adc9dd90",
1842
+ // "topic": "order",
1843
+ // "creationTime": 1672364262474,
1844
+ // "data": [
1845
+ // {
1846
+ // "symbol": "ETH-30DEC22-1400-C",
1847
+ // "orderId": "5cf98598-39a7-459e-97bf-76ca765ee020",
1848
+ // "side": "Sell",
1849
+ // "orderType": "Market",
1850
+ // "cancelType": "UNKNOWN",
1851
+ // "price": "72.5",
1852
+ // "qty": "1",
1853
+ // "orderIv": "",
1854
+ // "timeInForce": "IOC",
1855
+ // "orderStatus": "Filled",
1856
+ // "orderLinkId": "",
1857
+ // "lastPriceOnCreated": "",
1858
+ // "reduceOnly": false,
1859
+ // "leavesQty": "",
1860
+ // "leavesValue": "",
1861
+ // "cumExecQty": "1",
1862
+ // "cumExecValue": "75",
1863
+ // "avgPrice": "75",
1864
+ // "blockTradeId": "",
1865
+ // "positionIdx": 0,
1866
+ // "cumExecFee": "0.358635",
1867
+ // "createdTime": "1672364262444",
1868
+ // "updatedTime": "1672364262457",
1869
+ // "rejectReason": "EC_NoError",
1870
+ // "stopOrderType": "",
1871
+ // "triggerPrice": "",
1872
+ // "takeProfit": "",
1873
+ // "stopLoss": "",
1874
+ // "tpTriggerBy": "",
1875
+ // "slTriggerBy": "",
1876
+ // "triggerDirection": 0,
1877
+ // "triggerBy": "",
1878
+ // "closeOnTrigger": false,
1879
+ // "category": "option"
1880
+ // }
1881
+ // ]
1882
+ // }
1883
+ //
1884
+ if (this.orders === undefined) {
1885
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
1886
+ this.orders = new ArrayCacheBySymbolById(limit);
1887
+ }
1888
+ const orders = this.orders;
1889
+ let rawOrders = this.safeValue(message, 'data', []);
1890
+ const first = this.safeValue(rawOrders, 0, {});
1891
+ const category = this.safeString(first, 'category');
1892
+ const isSpot = category === 'spot';
1893
+ if (!isSpot) {
1894
+ rawOrders = this.safeValue(rawOrders, 'result', rawOrders);
1895
+ }
1896
+ const symbols = {};
1897
+ for (let i = 0; i < rawOrders.length; i++) {
1898
+ const parsed = this.parseOrder(rawOrders[i]);
1899
+ // if (isSpot) {
1900
+ // parsed = this.parseWsSpotOrder (rawOrders[i]);
1901
+ // } else {
1902
+ // parsed = this.parseOrder (rawOrders[i]);
1903
+ // }
1904
+ const symbol = parsed['symbol'];
1905
+ symbols[symbol] = true;
1906
+ orders.append(parsed);
1907
+ }
1908
+ const symbolsArray = Object.keys(symbols);
1909
+ for (let i = 0; i < symbolsArray.length; i++) {
1910
+ const currentMessageHash = 'orders:' + symbolsArray[i];
1911
+ client.resolve(orders, currentMessageHash);
1912
+ }
1913
+ const messageHash = 'orders';
1914
+ client.resolve(orders, messageHash);
1915
+ }
1916
+ /**
1917
+ * @method
1918
+ * @name bybit#watchBalance
1919
+ * @description watch balance and get the amount of funds available for trading or funds locked in orders
1920
+ * @see https://bybit-exchange.github.io/docs/v5/websocket/private/wallet
1921
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1922
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1923
+ */
1924
+ async watchBalance(params = {}) {
1925
+ await this.loadMarkets();
1926
+ const method = 'watchBalance';
1927
+ let messageHash = 'balances';
1928
+ let type = undefined;
1929
+ [type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
1930
+ let subType = undefined;
1931
+ [subType, params] = this.handleSubTypeAndParams('watchBalance', undefined, params);
1932
+ const unified = await this.isUnifiedEnabled();
1933
+ const isUnifiedMargin = this.safeBool(unified, 0, false);
1934
+ const isUnifiedAccount = this.safeBool(unified, 1, false);
1935
+ const url = await this.getUrlByMarketType(undefined, true, method, params);
1936
+ await this.authenticate(url);
1937
+ const topicByMarket = {
1938
+ 'spot': 'outboundAccountInfo',
1939
+ 'unified': 'wallet',
1940
+ };
1941
+ if (isUnifiedAccount) {
1942
+ // unified account
1943
+ if (subType === 'inverse') {
1944
+ messageHash += ':contract';
1945
+ }
1946
+ else {
1947
+ messageHash += ':unified';
1948
+ }
1949
+ }
1950
+ if (!isUnifiedMargin && !isUnifiedAccount) {
1951
+ // normal account using v5
1952
+ if (type === 'spot') {
1953
+ messageHash += ':spot';
1954
+ }
1955
+ else {
1956
+ messageHash += ':contract';
1957
+ }
1958
+ }
1959
+ if (isUnifiedMargin) {
1960
+ // unified margin account using v5
1961
+ if (type === 'spot') {
1962
+ messageHash += ':spot';
1963
+ }
1964
+ else {
1965
+ if (subType === 'linear') {
1966
+ messageHash += ':unified';
1967
+ }
1968
+ else {
1969
+ messageHash += ':contract';
1970
+ }
1971
+ }
1972
+ }
1973
+ const topics = [this.safeValue(topicByMarket, this.getPrivateType(url))];
1974
+ return await this.watchTopics(url, [messageHash], topics, params);
1975
+ }
1976
+ handleBalance(client, message) {
1977
+ //
1978
+ // spot
1979
+ // {
1980
+ // "type": "snapshot",
1981
+ // "topic": "outboundAccountInfo",
1982
+ // "ts": "1662107217641",
1983
+ // "data": [
1984
+ // {
1985
+ // "e": "outboundAccountInfo",
1986
+ // "E": "1662107217640",
1987
+ // "T": true,
1988
+ // "W": true,
1989
+ // "D": true,
1990
+ // "B": [
1991
+ // {
1992
+ // "a": "USDT",
1993
+ // "f": "176.81254174",
1994
+ // "l": "201.575"
1995
+ // }
1996
+ // ]
1997
+ // }
1998
+ // ]
1999
+ // }
2000
+ // unified
2001
+ // {
2002
+ // "id": "5923242c464be9-25ca-483d-a743-c60101fc656f",
2003
+ // "topic": "wallet",
2004
+ // "creationTime": 1672364262482,
2005
+ // "data": [
2006
+ // {
2007
+ // "accountIMRate": "0.016",
2008
+ // "accountMMRate": "0.003",
2009
+ // "totalEquity": "12837.78330098",
2010
+ // "totalWalletBalance": "12840.4045924",
2011
+ // "totalMarginBalance": "12837.78330188",
2012
+ // "totalAvailableBalance": "12632.05767702",
2013
+ // "totalPerpUPL": "-2.62129051",
2014
+ // "totalInitialMargin": "205.72562486",
2015
+ // "totalMaintenanceMargin": "39.42876721",
2016
+ // "coin": [
2017
+ // {
2018
+ // "coin": "USDC",
2019
+ // "equity": "200.62572554",
2020
+ // "usdValue": "200.62572554",
2021
+ // "walletBalance": "201.34882644",
2022
+ // "availableToWithdraw": "0",
2023
+ // "availableToBorrow": "1500000",
2024
+ // "borrowAmount": "0",
2025
+ // "accruedInterest": "0",
2026
+ // "totalOrderIM": "0",
2027
+ // "totalPositionIM": "202.99874213",
2028
+ // "totalPositionMM": "39.14289747",
2029
+ // "unrealisedPnl": "74.2768991",
2030
+ // "cumRealisedPnl": "-209.1544627",
2031
+ // "bonus": "0"
2032
+ // },
2033
+ // {
2034
+ // "coin": "BTC",
2035
+ // "equity": "0.06488393",
2036
+ // "usdValue": "1023.08402268",
2037
+ // "walletBalance": "0.06488393",
2038
+ // "availableToWithdraw": "0.06488393",
2039
+ // "availableToBorrow": "2.5",
2040
+ // "borrowAmount": "0",
2041
+ // "accruedInterest": "0",
2042
+ // "totalOrderIM": "0",
2043
+ // "totalPositionIM": "0",
2044
+ // "totalPositionMM": "0",
2045
+ // "unrealisedPnl": "0",
2046
+ // "cumRealisedPnl": "0",
2047
+ // "bonus": "0"
2048
+ // },
2049
+ // {
2050
+ // "coin": "ETH",
2051
+ // "equity": "0",
2052
+ // "usdValue": "0",
2053
+ // "walletBalance": "0",
2054
+ // "availableToWithdraw": "0",
2055
+ // "availableToBorrow": "26",
2056
+ // "borrowAmount": "0",
2057
+ // "accruedInterest": "0",
2058
+ // "totalOrderIM": "0",
2059
+ // "totalPositionIM": "0",
2060
+ // "totalPositionMM": "0",
2061
+ // "unrealisedPnl": "0",
2062
+ // "cumRealisedPnl": "0",
2063
+ // "bonus": "0"
2064
+ // },
2065
+ // {
2066
+ // "coin": "USDT",
2067
+ // "equity": "11726.64664904",
2068
+ // "usdValue": "11613.58597018",
2069
+ // "walletBalance": "11728.54414904",
2070
+ // "availableToWithdraw": "11723.92075829",
2071
+ // "availableToBorrow": "2500000",
2072
+ // "borrowAmount": "0",
2073
+ // "accruedInterest": "0",
2074
+ // "totalOrderIM": "0",
2075
+ // "totalPositionIM": "2.72589075",
2076
+ // "totalPositionMM": "0.28576575",
2077
+ // "unrealisedPnl": "-1.8975",
2078
+ // "cumRealisedPnl": "0.64782276",
2079
+ // "bonus": "0"
2080
+ // },
2081
+ // {
2082
+ // "coin": "EOS3L",
2083
+ // "equity": "215.0570412",
2084
+ // "usdValue": "0",
2085
+ // "walletBalance": "215.0570412",
2086
+ // "availableToWithdraw": "215.0570412",
2087
+ // "availableToBorrow": "0",
2088
+ // "borrowAmount": "0",
2089
+ // "accruedInterest": "",
2090
+ // "totalOrderIM": "0",
2091
+ // "totalPositionIM": "0",
2092
+ // "totalPositionMM": "0",
2093
+ // "unrealisedPnl": "0",
2094
+ // "cumRealisedPnl": "0",
2095
+ // "bonus": "0"
2096
+ // },
2097
+ // {
2098
+ // "coin": "BIT",
2099
+ // "equity": "1.82",
2100
+ // "usdValue": "0.48758257",
2101
+ // "walletBalance": "1.82",
2102
+ // "availableToWithdraw": "1.82",
2103
+ // "availableToBorrow": "0",
2104
+ // "borrowAmount": "0",
2105
+ // "accruedInterest": "",
2106
+ // "totalOrderIM": "0",
2107
+ // "totalPositionIM": "0",
2108
+ // "totalPositionMM": "0",
2109
+ // "unrealisedPnl": "0",
2110
+ // "cumRealisedPnl": "0",
2111
+ // "bonus": "0"
2112
+ // }
2113
+ // ],
2114
+ // "accountType": "UNIFIED"
2115
+ // }
2116
+ // ]
2117
+ // }
2118
+ //
2119
+ if (this.balance === undefined) {
2120
+ this.balance = {};
2121
+ }
2122
+ let messageHash = 'balance';
2123
+ const topic = this.safeValue(message, 'topic');
2124
+ let info = undefined;
2125
+ let rawBalances = [];
2126
+ let account = undefined;
2127
+ if (topic === 'outboundAccountInfo') {
2128
+ account = 'spot';
2129
+ const data = this.safeValue(message, 'data', []);
2130
+ for (let i = 0; i < data.length; i++) {
2131
+ const B = this.safeValue(data[i], 'B', []);
2132
+ rawBalances = this.arrayConcat(rawBalances, B);
2133
+ }
2134
+ info = rawBalances;
2135
+ }
2136
+ if (topic === 'wallet') {
2137
+ const data = this.safeValue(message, 'data', {});
2138
+ for (let i = 0; i < data.length; i++) {
2139
+ const result = this.safeValue(data, 0, {});
2140
+ account = this.safeStringLower(result, 'accountType');
2141
+ rawBalances = this.arrayConcat(rawBalances, this.safeValue(result, 'coin', []));
2142
+ }
2143
+ info = data;
2144
+ }
2145
+ for (let i = 0; i < rawBalances.length; i++) {
2146
+ this.parseWsBalance(rawBalances[i], account);
2147
+ }
2148
+ if (account !== undefined) {
2149
+ if (this.safeValue(this.balance, account) === undefined) {
2150
+ this.balance[account] = {};
2151
+ }
2152
+ this.balance[account]['info'] = info;
2153
+ const timestamp = this.safeInteger(message, 'ts');
2154
+ this.balance[account]['timestamp'] = timestamp;
2155
+ this.balance[account]['datetime'] = this.iso8601(timestamp);
2156
+ this.balance[account] = this.safeBalance(this.balance[account]);
2157
+ messageHash = 'balances:' + account;
2158
+ client.resolve(this.balance[account], messageHash);
2159
+ }
2160
+ else {
2161
+ this.balance['info'] = info;
2162
+ const timestamp = this.safeInteger(message, 'ts');
2163
+ this.balance['timestamp'] = timestamp;
2164
+ this.balance['datetime'] = this.iso8601(timestamp);
2165
+ this.balance = this.safeBalance(this.balance);
2166
+ messageHash = 'balances';
2167
+ client.resolve(this.balance, messageHash);
2168
+ }
2169
+ }
2170
+ parseWsBalance(balance, accountType = undefined) {
2171
+ //
2172
+ // spot
2173
+ // {
2174
+ // "a": "USDT",
2175
+ // "f": "176.81254174",
2176
+ // "l": "201.575"
2177
+ // }
2178
+ // unified
2179
+ // {
2180
+ // "coin": "BTC",
2181
+ // "equity": "0.06488393",
2182
+ // "usdValue": "1023.08402268",
2183
+ // "walletBalance": "0.06488393",
2184
+ // "availableToWithdraw": "0.06488393",
2185
+ // "availableToBorrow": "2.5",
2186
+ // "borrowAmount": "0",
2187
+ // "accruedInterest": "0",
2188
+ // "totalOrderIM": "0",
2189
+ // "totalPositionIM": "0",
2190
+ // "totalPositionMM": "0",
2191
+ // "unrealisedPnl": "0",
2192
+ // "cumRealisedPnl": "0",
2193
+ // "bonus": "0"
2194
+ // }
2195
+ //
2196
+ const account = this.account();
2197
+ const currencyId = this.safeString2(balance, 'a', 'coin');
2198
+ const code = this.safeCurrencyCode(currencyId);
2199
+ account['free'] = this.safeStringN(balance, ['availableToWithdraw', 'f', 'free', 'availableToWithdraw']);
2200
+ account['used'] = this.safeString2(balance, 'l', 'locked');
2201
+ account['total'] = this.safeString(balance, 'walletBalance');
2202
+ if (accountType !== undefined) {
2203
+ if (this.safeValue(this.balance, accountType) === undefined) {
2204
+ this.balance[accountType] = {};
2205
+ }
2206
+ this.balance[accountType][code] = account;
2207
+ }
2208
+ else {
2209
+ this.balance[code] = account;
2210
+ }
2211
+ }
2212
+ async watchTopics(url, messageHashes, topics, params = {}) {
2213
+ const request = {
2214
+ 'op': 'subscribe',
2215
+ 'req_id': this.requestId(),
2216
+ 'args': topics,
2217
+ };
2218
+ const message = this.extend(request, params);
2219
+ return await this.watchMultiple(url, messageHashes, message, messageHashes);
2220
+ }
2221
+ async unWatchTopics(url, topic, symbols, messageHashes, subMessageHashes, topics, params = {}, subExtension = {}) {
2222
+ const reqId = this.requestId();
2223
+ const request = {
2224
+ 'op': 'unsubscribe',
2225
+ 'req_id': reqId,
2226
+ 'args': topics,
2227
+ };
2228
+ const subscription = {
2229
+ 'id': reqId,
2230
+ 'topic': topic,
2231
+ 'messageHashes': messageHashes,
2232
+ 'subMessageHashes': subMessageHashes,
2233
+ 'symbols': symbols,
2234
+ };
2235
+ const message = this.extend(request, params);
2236
+ return await this.watchMultiple(url, messageHashes, message, messageHashes, this.extend(subscription, subExtension));
2237
+ }
2238
+ async authenticate(url, params = {}) {
2239
+ this.checkRequiredCredentials();
2240
+ const messageHash = 'authenticated';
2241
+ const client = this.client(url);
2242
+ const future = client.future(messageHash);
2243
+ const authenticated = this.safeValue(client.subscriptions, messageHash);
2244
+ if (authenticated === undefined) {
2245
+ const expiresInt = this.milliseconds() + 10000;
2246
+ const expires = this.numberToString(expiresInt);
2247
+ const path = 'GET/realtime';
2248
+ const auth = path + expires;
2249
+ const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256, 'hex');
2250
+ const request = {
2251
+ 'op': 'auth',
2252
+ 'args': [
2253
+ this.apiKey, expires, signature,
2254
+ ],
2255
+ };
2256
+ const message = this.extend(request, params);
2257
+ this.watch(url, messageHash, message, messageHash);
2258
+ }
2259
+ return await future;
2260
+ }
2261
+ handleErrorMessage(client, message) {
2262
+ //
2263
+ // {
2264
+ // "success": false,
2265
+ // "ret_msg": "error:invalid op",
2266
+ // "conn_id": "5e079fdd-9c7f-404d-9dbf-969d650838b5",
2267
+ // "request": { op: '', args: null }
2268
+ // }
2269
+ //
2270
+ // auth error
2271
+ //
2272
+ // {
2273
+ // "success": false,
2274
+ // "ret_msg": "error:USVC1111",
2275
+ // "conn_id": "e73770fb-a0dc-45bd-8028-140e20958090",
2276
+ // "request": {
2277
+ // "op": "auth",
2278
+ // "args": [
2279
+ // "9rFT6uR4uz9Imkw4Wx",
2280
+ // "1653405853543",
2281
+ // "542e71bd85597b4db0290f0ce2d13ed1fd4bb5df3188716c1e9cc69a879f7889"
2282
+ // ]
2283
+ // }
2284
+ //
2285
+ // { code: '-10009', desc: "Invalid period!" }
2286
+ //
2287
+ // {
2288
+ // "reqId":"1",
2289
+ // "retCode":170131,
2290
+ // "retMsg":"Insufficient balance.",
2291
+ // "op":"order.create",
2292
+ // "data":{
2293
+ //
2294
+ // },
2295
+ // "header":{
2296
+ // "X-Bapi-Limit":"20",
2297
+ // "X-Bapi-Limit-Status":"19",
2298
+ // "X-Bapi-Limit-Reset-Timestamp":"1714236608944",
2299
+ // "Traceid":"3d7168a137bf32a947b7e5e6a575ac7f",
2300
+ // "Timenow":"1714236608946"
2301
+ // },
2302
+ // "connId":"cojifin88smerbj9t560-406"
2303
+ // }
2304
+ //
2305
+ const code = this.safeStringN(message, ['code', 'ret_code', 'retCode']);
2306
+ try {
2307
+ if (code !== undefined && code !== '0') {
2308
+ const feedback = this.id + ' ' + this.json(message);
2309
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
2310
+ const msg = this.safeString2(message, 'retMsg', 'ret_msg');
2311
+ this.throwBroadlyMatchedException(this.exceptions['broad'], msg, feedback);
2312
+ throw new ExchangeError(feedback);
2313
+ }
2314
+ const success = this.safeValue(message, 'success');
2315
+ if (success !== undefined && !success) {
2316
+ const ret_msg = this.safeString(message, 'ret_msg');
2317
+ const request = this.safeValue(message, 'request', {});
2318
+ const op = this.safeString(request, 'op');
2319
+ if (op === 'auth') {
2320
+ throw new AuthenticationError('Authentication failed: ' + ret_msg);
2321
+ }
2322
+ else {
2323
+ throw new ExchangeError(this.id + ' ' + ret_msg);
2324
+ }
2325
+ }
2326
+ return false;
2327
+ }
2328
+ catch (error) {
2329
+ if (error instanceof AuthenticationError) {
2330
+ const messageHash = 'authenticated';
2331
+ client.reject(error, messageHash);
2332
+ if (messageHash in client.subscriptions) {
2333
+ delete client.subscriptions[messageHash];
2334
+ }
2335
+ }
2336
+ else {
2337
+ const messageHash = this.safeString(message, 'reqId');
2338
+ client.reject(error, messageHash);
2339
+ }
2340
+ return true;
2341
+ }
2342
+ }
2343
+ handleMessage(client, message) {
2344
+ if (this.handleErrorMessage(client, message)) {
2345
+ return;
2346
+ }
2347
+ // contract pong
2348
+ const ret_msg = this.safeString(message, 'ret_msg');
2349
+ if (ret_msg === 'pong') {
2350
+ this.handlePong(client, message);
2351
+ return;
2352
+ }
2353
+ // spot pong
2354
+ const pong = this.safeInteger(message, 'pong');
2355
+ if (pong !== undefined) {
2356
+ this.handlePong(client, message);
2357
+ return;
2358
+ }
2359
+ // pong
2360
+ const event = this.safeString(message, 'event');
2361
+ if (event === 'sub') {
2362
+ this.handleSubscriptionStatus(client, message);
2363
+ return;
2364
+ }
2365
+ const topic = this.safeString2(message, 'topic', 'op', '');
2366
+ const methods = {
2367
+ 'orderbook': this.handleOrderBook,
2368
+ 'kline': this.handleOHLCV,
2369
+ 'order': this.handleOrder,
2370
+ 'stopOrder': this.handleOrder,
2371
+ 'ticker': this.handleTicker,
2372
+ 'trade': this.handleTrades,
2373
+ 'publicTrade': this.handleTrades,
2374
+ 'depth': this.handleOrderBook,
2375
+ 'wallet': this.handleBalance,
2376
+ 'outboundAccountInfo': this.handleBalance,
2377
+ 'execution': this.handleMyTrades,
2378
+ 'ticketInfo': this.handleMyTrades,
2379
+ 'user.openapi.perp.trade': this.handleMyTrades,
2380
+ 'position': this.handlePositions,
2381
+ 'liquidation': this.handleLiquidation,
2382
+ 'allLiquidation': this.handleLiquidation,
2383
+ 'pong': this.handlePong,
2384
+ 'order.create': this.handleOrderWs,
2385
+ 'order.amend': this.handleOrderWs,
2386
+ 'order.cancel': this.handleOrderWs,
2387
+ 'auth': this.handleAuthenticate,
2388
+ 'unsubscribe': this.handleUnSubscribe,
2389
+ };
2390
+ const exacMethod = this.safeValue(methods, topic);
2391
+ if (exacMethod !== undefined) {
2392
+ exacMethod.call(this, client, message);
2393
+ return;
2394
+ }
2395
+ const keys = Object.keys(methods);
2396
+ for (let i = 0; i < keys.length; i++) {
2397
+ const key = keys[i];
2398
+ if (topic.indexOf(keys[i]) >= 0) {
2399
+ const method = methods[key];
2400
+ method.call(this, client, message);
2401
+ return;
2402
+ }
2403
+ }
2404
+ // unified auth acknowledgement
2405
+ const type = this.safeString(message, 'type');
2406
+ if (type === 'AUTH_RESP') {
2407
+ this.handleAuthenticate(client, message);
2408
+ }
2409
+ }
2410
+ ping(client) {
2411
+ return {
2412
+ 'req_id': this.requestId(),
2413
+ 'op': 'ping',
2414
+ };
2415
+ }
2416
+ handlePong(client, message) {
2417
+ //
2418
+ // {
2419
+ // "success": true,
2420
+ // "ret_msg": "pong",
2421
+ // "conn_id": "db3158a0-8960-44b9-a9de-ac350ee13158",
2422
+ // "request": { op: "ping", args: null }
2423
+ // }
2424
+ //
2425
+ // { pong: 1653296711335 }
2426
+ //
2427
+ client.lastPong = this.safeInteger(message, 'pong');
2428
+ return message;
2429
+ }
2430
+ handleAuthenticate(client, message) {
2431
+ //
2432
+ // {
2433
+ // "success": true,
2434
+ // "ret_msg": '',
2435
+ // "op": "auth",
2436
+ // "conn_id": "ce3dpomvha7dha97tvp0-2xh"
2437
+ // }
2438
+ //
2439
+ // {
2440
+ // "retCode":0,
2441
+ // "retMsg":"OK",
2442
+ // "op":"auth",
2443
+ // "connId":"cojifin88smerbj9t560-404"
2444
+ // }
2445
+ //
2446
+ const success = this.safeValue(message, 'success');
2447
+ const code = this.safeInteger(message, 'retCode');
2448
+ const messageHash = 'authenticated';
2449
+ if (success || code === 0) {
2450
+ const future = this.safeValue(client.futures, messageHash);
2451
+ future.resolve(true);
2452
+ }
2453
+ else {
2454
+ const error = new AuthenticationError(this.id + ' ' + this.json(message));
2455
+ client.reject(error, messageHash);
2456
+ if (messageHash in client.subscriptions) {
2457
+ delete client.subscriptions[messageHash];
2458
+ }
2459
+ }
2460
+ return message;
2461
+ }
2462
+ handleSubscriptionStatus(client, message) {
2463
+ //
2464
+ // {
2465
+ // "topic": "kline",
2466
+ // "event": "sub",
2467
+ // "params": {
2468
+ // "symbol": "LTCUSDT",
2469
+ // "binary": "false",
2470
+ // "klineType": "1m",
2471
+ // "symbolName": "LTCUSDT"
2472
+ // },
2473
+ // "code": "0",
2474
+ // "msg": "Success"
2475
+ // }
2476
+ //
2477
+ return message;
2478
+ }
2479
+ handleUnSubscribe(client, message) {
2480
+ //
2481
+ // {"success":true,"ret_msg":"","conn_id":"7188110e-6908-41e9-b863-6365127e92ad","req_id":"3","op":"unsubscribe"}
2482
+ //
2483
+ // client.subscription will be something like:
2484
+ // {
2485
+ // "publicTrade.LTCUSDT":true,
2486
+ // "publicTrade.ADAUSDT":true,
2487
+ // "unsubscribe:trade:LTC/USDT:USDT": {
2488
+ // "id":4,
2489
+ // "subHash": "trade:LTC/USDT"
2490
+ // },
2491
+ // }
2492
+ const reqId = this.safeString(message, 'req_id');
2493
+ const keys = Object.keys(client.subscriptions);
2494
+ for (let i = 0; i < keys.length; i++) {
2495
+ const messageHash = keys[i];
2496
+ if (!(messageHash in client.subscriptions)) {
2497
+ continue;
2498
+ // the previous iteration can have deleted the messageHash from the subscriptions
2499
+ }
2500
+ if (messageHash.startsWith('unsubscribe')) {
2501
+ const subscription = client.subscriptions[messageHash];
2502
+ const subId = this.safeString(subscription, 'id');
2503
+ if (reqId !== subId) {
2504
+ continue;
2505
+ }
2506
+ const messageHashes = this.safeList(subscription, 'messageHashes', []);
2507
+ const subMessageHashes = this.safeList(subscription, 'subMessageHashes', []);
2508
+ for (let j = 0; j < messageHashes.length; j++) {
2509
+ const unsubHash = messageHashes[j];
2510
+ const subHash = subMessageHashes[j];
2511
+ const usePrefix = (subHash === 'orders') || (subHash === 'myTrades');
2512
+ this.cleanUnsubscription(client, subHash, unsubHash, usePrefix);
2513
+ }
2514
+ this.cleanCache(subscription);
2515
+ }
2516
+ }
2517
+ return message;
2518
+ }
2519
+ }