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,2327 @@
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 bitgetRest from '../bitget.js';
9
+ import { AuthenticationError, BadRequest, ArgumentsRequired, ChecksumError, ExchangeError, RateLimitExceeded, UnsubscribeError } from '../base/errors.js';
10
+ import { Precise } from '../base/Precise.js';
11
+ import { ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp } from '../base/ws/Cache.js';
12
+ import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class bitget
16
+ * @augments Exchange
17
+ * @description watching delivery future markets is not yet implemented (perpertual future & swap is implemented)
18
+ */
19
+ export default class bitget extends bitgetRest {
20
+ describe() {
21
+ return this.deepExtend(super.describe(), {
22
+ 'has': {
23
+ 'ws': true,
24
+ 'createOrderWs': false,
25
+ 'editOrderWs': false,
26
+ 'fetchOpenOrdersWs': false,
27
+ 'fetchOrderWs': false,
28
+ 'cancelOrderWs': false,
29
+ 'cancelOrdersWs': false,
30
+ 'cancelAllOrdersWs': false,
31
+ 'watchBalance': true,
32
+ 'watchMyTrades': true,
33
+ 'watchOHLCV': true,
34
+ 'watchOHLCVForSymbols': false,
35
+ 'watchOrderBook': true,
36
+ 'watchOrderBookForSymbols': true,
37
+ 'watchOrders': true,
38
+ 'watchTicker': true,
39
+ 'watchTickers': true,
40
+ 'watchBidsAsks': true,
41
+ 'watchTrades': true,
42
+ 'watchTradesForSymbols': true,
43
+ 'watchPositions': true,
44
+ },
45
+ 'urls': {
46
+ 'api': {
47
+ 'ws': {
48
+ 'public': 'wss://ws.bitget.com/v2/ws/public',
49
+ 'private': 'wss://ws.bitget.com/v2/ws/private',
50
+ 'utaPublic': 'wss://ws.bitget.com/v3/ws/public',
51
+ 'utaPrivate': 'wss://ws.bitget.com/v3/ws/private',
52
+ },
53
+ 'demo': {
54
+ 'public': 'wss://wspap.bitget.com/v2/ws/public',
55
+ 'private': 'wss://wspap.bitget.com/v2/ws/private',
56
+ 'utaPublic': 'wss://wspap.bitget.com/v3/ws/public',
57
+ 'utaPrivate': 'wss://wspap.bitget.com/v3/ws/private',
58
+ },
59
+ },
60
+ },
61
+ 'options': {
62
+ 'tradesLimit': 1000,
63
+ 'OHLCVLimit': 1000,
64
+ // WS timeframes differ from REST timeframes
65
+ 'timeframes': {
66
+ '1m': '1m',
67
+ '5m': '5m',
68
+ '15m': '15m',
69
+ '30m': '30m',
70
+ '1h': '1H',
71
+ '4h': '4H',
72
+ '6h': '6H',
73
+ '12h': '12H',
74
+ '1d': '1D',
75
+ '1w': '1W',
76
+ },
77
+ 'watchOrderBook': {
78
+ 'checksum': true,
79
+ },
80
+ 'watchTrades': {
81
+ 'ignoreDuplicates': true,
82
+ },
83
+ },
84
+ 'streaming': {
85
+ 'ping': this.ping,
86
+ },
87
+ 'exceptions': {
88
+ 'ws': {
89
+ 'exact': {
90
+ '30001': BadRequest,
91
+ '30002': AuthenticationError,
92
+ '30003': BadRequest,
93
+ '30004': AuthenticationError,
94
+ '30005': AuthenticationError,
95
+ '30006': RateLimitExceeded,
96
+ '30007': RateLimitExceeded,
97
+ '30011': AuthenticationError,
98
+ '30012': AuthenticationError,
99
+ '30013': AuthenticationError,
100
+ '30014': BadRequest,
101
+ '30015': AuthenticationError,
102
+ '30016': BadRequest, // { event: 'error', code: 30016, msg: 'Param error' }
103
+ },
104
+ 'broad': {},
105
+ },
106
+ },
107
+ });
108
+ }
109
+ getInstType(market, uta = false, params = {}) {
110
+ if ((uta === undefined) || !uta) {
111
+ [uta, params] = this.handleOptionAndParams(params, 'getInstType', 'uta', false);
112
+ }
113
+ let instType = undefined;
114
+ if (market === undefined) {
115
+ [instType, params] = this.handleProductTypeAndParams(undefined, params);
116
+ }
117
+ else if ((market['swap']) || (market['future'])) {
118
+ [instType, params] = this.handleProductTypeAndParams(market, params);
119
+ }
120
+ else {
121
+ instType = 'SPOT';
122
+ }
123
+ let instypeAux = undefined;
124
+ [instypeAux, params] = this.handleOptionAndParams(params, 'getInstType', 'instType', instType);
125
+ instType = instypeAux;
126
+ if (uta) {
127
+ instType = instType.toLowerCase();
128
+ }
129
+ return [instType, params];
130
+ }
131
+ /**
132
+ * @method
133
+ * @name bitget#watchTicker
134
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
135
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Tickers-Channel
136
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Tickers-Channel
137
+ * @see https://www.bitget.com/api-doc/uta/websocket/public/Tickers-Channel
138
+ * @param {string} symbol unified symbol of the market to watch the ticker for
139
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
140
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
141
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
142
+ */
143
+ async watchTicker(symbol, params = {}) {
144
+ await this.loadMarkets();
145
+ const market = this.market(symbol);
146
+ symbol = market['symbol'];
147
+ const messageHash = 'ticker:' + symbol;
148
+ let instType = undefined;
149
+ let uta = undefined;
150
+ [uta, params] = this.handleOptionAndParams(params, 'watchTicker', 'uta', false);
151
+ [instType, params] = this.getInstType(market, uta, params);
152
+ const args = {
153
+ 'instType': instType,
154
+ };
155
+ const topicOrChannel = uta ? 'topic' : 'channel';
156
+ const symbolOrInstId = uta ? 'symbol' : 'instId';
157
+ args[topicOrChannel] = 'ticker';
158
+ args[symbolOrInstId] = market['id'];
159
+ return await this.watchPublic(messageHash, args, params);
160
+ }
161
+ /**
162
+ * @method
163
+ * @name bitget#unWatchTicker
164
+ * @description unsubscribe from the ticker channel
165
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Tickers-Channel
166
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Tickers-Channel
167
+ * @param {string} symbol unified symbol of the market to unwatch the ticker for
168
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
169
+ * @returns {any} status of the unwatch request
170
+ */
171
+ async unWatchTicker(symbol, params = {}) {
172
+ await this.loadMarkets();
173
+ return await this.unWatchChannel(symbol, 'ticker', 'ticker', params);
174
+ }
175
+ /**
176
+ * @method
177
+ * @name bitget#watchTickers
178
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
179
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Tickers-Channel
180
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Tickers-Channel
181
+ * @see https://www.bitget.com/api-doc/uta/websocket/public/Tickers-Channel
182
+ * @param {string[]} symbols unified symbol of the market to watch the tickers for
183
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
184
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
185
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
186
+ */
187
+ async watchTickers(symbols = undefined, params = {}) {
188
+ await this.loadMarkets();
189
+ symbols = this.marketSymbols(symbols, undefined, false);
190
+ const market = this.market(symbols[0]);
191
+ let instType = undefined;
192
+ let uta = undefined;
193
+ [uta, params] = this.handleOptionAndParams(params, 'watchTickers', 'uta', false);
194
+ [instType, params] = this.getInstType(market, uta, params);
195
+ const topics = [];
196
+ const messageHashes = [];
197
+ for (let i = 0; i < symbols.length; i++) {
198
+ const symbol = symbols[i];
199
+ const marketInner = this.market(symbol);
200
+ const args = {
201
+ 'instType': instType,
202
+ };
203
+ const topicOrChannel = uta ? 'topic' : 'channel';
204
+ const symbolOrInstId = uta ? 'symbol' : 'instId';
205
+ args[topicOrChannel] = 'ticker';
206
+ args[symbolOrInstId] = marketInner['id'];
207
+ topics.push(args);
208
+ messageHashes.push('ticker:' + symbol);
209
+ }
210
+ const tickers = await this.watchPublicMultiple(messageHashes, topics, params);
211
+ if (this.newUpdates) {
212
+ const result = {};
213
+ result[tickers['symbol']] = tickers;
214
+ return result;
215
+ }
216
+ return this.filterByArray(this.tickers, 'symbol', symbols);
217
+ }
218
+ handleTicker(client, message) {
219
+ //
220
+ // default
221
+ //
222
+ // {
223
+ // "action": "snapshot",
224
+ // "arg": {
225
+ // "instType": "SPOT",
226
+ // "channel": "ticker",
227
+ // "instId": "BTCUSDT"
228
+ // },
229
+ // "data": [
230
+ // {
231
+ // "instId": "BTCUSDT",
232
+ // "lastPr": "43528.19",
233
+ // "open24h": "42267.78",
234
+ // "high24h": "44490.00",
235
+ // "low24h": "41401.53",
236
+ // "change24h": "0.03879",
237
+ // "bidPr": "43528",
238
+ // "askPr": "43528.01",
239
+ // "bidSz": "0.0334",
240
+ // "askSz": "0.1917",
241
+ // "baseVolume": "15002.4216",
242
+ // "quoteVolume": "648006446.7164",
243
+ // "openUtc": "44071.18",
244
+ // "changeUtc24h": "-0.01232",
245
+ // "ts": "1701842994338"
246
+ // }
247
+ // ],
248
+ // "ts": 1701842994341
249
+ // }
250
+ //
251
+ // uta
252
+ //
253
+ // {
254
+ // "action": "snapshot",
255
+ // "arg": { "instType": "spot", topic: "ticker", symbol: "BTCUSDT" },
256
+ // "data": [
257
+ // {
258
+ // "highPrice24h": "120255.61",
259
+ // "lowPrice24h": "116145.88",
260
+ // "openPrice24h": "118919.38",
261
+ // "lastPrice": "119818.83",
262
+ // "turnover24h": "215859996.272276",
263
+ // "volume24h": "1819.756798",
264
+ // "bid1Price": "119811.26",
265
+ // "ask1Price": "119831.18",
266
+ // "bid1Size": "0.008732",
267
+ // "ask1Size": "0.004297",
268
+ // "price24hPcnt": "0.02002"
269
+ // }
270
+ // ],
271
+ // "ts": 1753230479687
272
+ // }
273
+ //
274
+ this.handleBidAsk(client, message);
275
+ const ticker = this.parseWsTicker(message);
276
+ const symbol = ticker['symbol'];
277
+ this.tickers[symbol] = ticker;
278
+ const messageHash = 'ticker:' + symbol;
279
+ client.resolve(ticker, messageHash);
280
+ }
281
+ parseWsTicker(message, market = undefined) {
282
+ //
283
+ // spot
284
+ //
285
+ // {
286
+ // "action": "snapshot",
287
+ // "arg": {
288
+ // "instType": "SPOT",
289
+ // "channel": "ticker",
290
+ // "instId": "BTCUSDT"
291
+ // },
292
+ // "data": [
293
+ // {
294
+ // "instId": "BTCUSDT",
295
+ // "lastPr": "43528.19",
296
+ // "open24h": "42267.78",
297
+ // "high24h": "44490.00",
298
+ // "low24h": "41401.53",
299
+ // "change24h": "0.03879",
300
+ // "bidPr": "43528",
301
+ // "askPr": "43528.01",
302
+ // "bidSz": "0.0334",
303
+ // "askSz": "0.1917",
304
+ // "baseVolume": "15002.4216",
305
+ // "quoteVolume": "648006446.7164",
306
+ // "openUtc": "44071.18",
307
+ // "changeUtc24h": "-0.01232",
308
+ // "ts": "1701842994338"
309
+ // }
310
+ // ],
311
+ // "ts": 1701842994341
312
+ // }
313
+ //
314
+ // contract
315
+ //
316
+ // {
317
+ // "action": "snapshot",
318
+ // "arg": {
319
+ // "instType": "USDT-FUTURES",
320
+ // "channel": "ticker",
321
+ // "instId": "BTCUSDT"
322
+ // },
323
+ // "data": [
324
+ // {
325
+ // "instId": "BTCUSDT",
326
+ // "lastPr": "43480.4",
327
+ // "bidPr": "43476.3",
328
+ // "askPr": "43476.8",
329
+ // "bidSz": "0.1",
330
+ // "askSz": "3.055",
331
+ // "open24h": "42252.3",
332
+ // "high24h": "44518.2",
333
+ // "low24h": "41387.0",
334
+ // "change24h": "0.03875",
335
+ // "fundingRate": "0.000096",
336
+ // "nextFundingTime": "1701849600000",
337
+ // "markPrice": "43476.4",
338
+ // "indexPrice": "43478.4",
339
+ // "holdingAmount": "50670.787",
340
+ // "baseVolume": "120187.104",
341
+ // "quoteVolume": "5167385048.693",
342
+ // "openUtc": "44071.4",
343
+ // "symbolType": "1",
344
+ // "symbol": "BTCUSDT",
345
+ // "deliveryPrice": "0",
346
+ // "ts": "1701843962811"
347
+ // }
348
+ // ],
349
+ // "ts": 1701843962812
350
+ // }
351
+ //
352
+ // uta
353
+ //
354
+ // {
355
+ // "action": "snapshot",
356
+ // "arg": { "instType": "spot", topic: "ticker", symbol: "BTCUSDT" },
357
+ // "data": [
358
+ // {
359
+ // "highPrice24h": "120255.61",
360
+ // "lowPrice24h": "116145.88",
361
+ // "openPrice24h": "118919.38",
362
+ // "lastPrice": "119818.83",
363
+ // "turnover24h": "215859996.272276",
364
+ // "volume24h": "1819.756798",
365
+ // "bid1Price": "119811.26",
366
+ // "ask1Price": "119831.18",
367
+ // "bid1Size": "0.008732",
368
+ // "ask1Size": "0.004297",
369
+ // "price24hPcnt": "0.02002"
370
+ // }
371
+ // ],
372
+ // "ts": 1753230479687
373
+ // }
374
+ //
375
+ const arg = this.safeValue(message, 'arg', {});
376
+ const data = this.safeValue(message, 'data', []);
377
+ const ticker = this.safeValue(data, 0, {});
378
+ const utaTimestamp = this.safeInteger(message, 'ts');
379
+ const timestamp = this.safeInteger(ticker, 'ts', utaTimestamp);
380
+ const instType = this.safeStringLower(arg, 'instType');
381
+ const marketType = (instType === 'spot') ? 'spot' : 'contract';
382
+ const utaMarketId = this.safeString(arg, 'symbol');
383
+ const marketId = this.safeString(ticker, 'instId', utaMarketId);
384
+ market = this.safeMarket(marketId, market, undefined, marketType);
385
+ const close = this.safeString2(ticker, 'lastPr', 'lastPrice');
386
+ const changeDecimal = this.safeString(ticker, 'change24h', '');
387
+ const change = this.safeString(ticker, 'price24hPcnt', Precise.stringMul(changeDecimal, '100'));
388
+ return this.safeTicker({
389
+ 'symbol': market['symbol'],
390
+ 'timestamp': timestamp,
391
+ 'datetime': this.iso8601(timestamp),
392
+ 'high': this.safeString2(ticker, 'high24h', 'highPrice24h'),
393
+ 'low': this.safeString2(ticker, 'low24h', 'lowPrice24h'),
394
+ 'bid': this.safeString2(ticker, 'bidPr', 'bid1Price'),
395
+ 'bidVolume': this.safeString2(ticker, 'bidSz', 'bid1Size'),
396
+ 'ask': this.safeString2(ticker, 'askPr', 'ask1Price'),
397
+ 'askVolume': this.safeString2(ticker, 'askSz', 'ask1Size'),
398
+ 'vwap': undefined,
399
+ 'open': this.safeString2(ticker, 'open24h', 'openPrice24h'),
400
+ 'close': close,
401
+ 'last': close,
402
+ 'previousClose': undefined,
403
+ 'change': undefined,
404
+ 'percentage': change,
405
+ 'average': undefined,
406
+ 'baseVolume': this.safeString2(ticker, 'baseVolume', 'volume24h'),
407
+ 'quoteVolume': this.safeString2(ticker, 'quoteVolume', 'turnover24h'),
408
+ 'info': ticker,
409
+ }, market);
410
+ }
411
+ /**
412
+ * @method
413
+ * @name bitget#watchBidsAsks
414
+ * @description watches best bid & ask for symbols
415
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Tickers-Channel
416
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Tickers-Channel
417
+ * @see https://www.bitget.com/api-doc/uta/websocket/public/Tickers-Channel
418
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
419
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
420
+ * @param {boolean} [params.uta] set to true for the unified trading account (uta), defaults to false
421
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
422
+ */
423
+ async watchBidsAsks(symbols = undefined, params = {}) {
424
+ await this.loadMarkets();
425
+ symbols = this.marketSymbols(symbols, undefined, false);
426
+ const market = this.market(symbols[0]);
427
+ let instType = undefined;
428
+ let uta = undefined;
429
+ [uta, params] = this.handleOptionAndParams(params, 'watchBidsAsks', 'uta', false);
430
+ [instType, params] = this.getInstType(market, uta, params);
431
+ const topics = [];
432
+ const messageHashes = [];
433
+ for (let i = 0; i < symbols.length; i++) {
434
+ const symbol = symbols[i];
435
+ const marketInner = this.market(symbol);
436
+ const args = {
437
+ 'instType': instType,
438
+ };
439
+ const topicOrChannel = uta ? 'topic' : 'channel';
440
+ const symbolOrInstId = uta ? 'symbol' : 'instId';
441
+ args[topicOrChannel] = 'ticker';
442
+ args[symbolOrInstId] = marketInner['id'];
443
+ topics.push(args);
444
+ messageHashes.push('bidask:' + symbol);
445
+ }
446
+ const tickers = await this.watchPublicMultiple(messageHashes, topics, params);
447
+ if (this.newUpdates) {
448
+ const result = {};
449
+ result[tickers['symbol']] = tickers;
450
+ return result;
451
+ }
452
+ return this.filterByArray(this.bidsasks, 'symbol', symbols);
453
+ }
454
+ handleBidAsk(client, message) {
455
+ const ticker = this.parseWsBidAsk(message);
456
+ const symbol = ticker['symbol'];
457
+ this.bidsasks[symbol] = ticker;
458
+ const messageHash = 'bidask:' + symbol;
459
+ client.resolve(ticker, messageHash);
460
+ }
461
+ parseWsBidAsk(message, market = undefined) {
462
+ const arg = this.safeValue(message, 'arg', {});
463
+ const data = this.safeValue(message, 'data', []);
464
+ const ticker = this.safeValue(data, 0, {});
465
+ const utaTimestamp = this.safeInteger(message, 'ts');
466
+ const timestamp = this.safeInteger(ticker, 'ts', utaTimestamp);
467
+ const instType = this.safeStringLower(arg, 'instType');
468
+ const marketType = (instType === 'spot') ? 'spot' : 'contract';
469
+ const utaMarketId = this.safeString(arg, 'symbol');
470
+ const marketId = this.safeString(ticker, 'instId', utaMarketId);
471
+ market = this.safeMarket(marketId, market, undefined, marketType);
472
+ return this.safeTicker({
473
+ 'symbol': market['symbol'],
474
+ 'timestamp': timestamp,
475
+ 'datetime': this.iso8601(timestamp),
476
+ 'ask': this.safeString2(ticker, 'askPr', 'ask1Price'),
477
+ 'askVolume': this.safeString2(ticker, 'askSz', 'ask1Size'),
478
+ 'bid': this.safeString2(ticker, 'bidPr', 'bid1Price'),
479
+ 'bidVolume': this.safeString2(ticker, 'bidSz', 'bid1Size'),
480
+ 'info': ticker,
481
+ }, market);
482
+ }
483
+ /**
484
+ * @method
485
+ * @name bitget#watchOHLCV
486
+ * @description watches historical candlestick data containing the open, high, low, close price, and the volume of a market
487
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Candlesticks-Channel
488
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Candlesticks-Channel
489
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
490
+ * @param {string} timeframe the length of time each candle represents
491
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
492
+ * @param {int} [limit] the maximum amount of candles to fetch
493
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
494
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
495
+ */
496
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
497
+ await this.loadMarkets();
498
+ const market = this.market(symbol);
499
+ symbol = market['symbol'];
500
+ const timeframes = this.safeValue(this.options, 'timeframes');
501
+ const interval = this.safeString(timeframes, timeframe);
502
+ const messageHash = 'candles:' + timeframe + ':' + symbol;
503
+ let instType = undefined;
504
+ [instType, params] = this.getInstType(market, false, params);
505
+ const args = {
506
+ 'instType': instType,
507
+ 'channel': 'candle' + interval,
508
+ 'instId': market['id'],
509
+ };
510
+ const ohlcv = await this.watchPublic(messageHash, args, params);
511
+ if (this.newUpdates) {
512
+ limit = ohlcv.getLimit(symbol, limit);
513
+ }
514
+ return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
515
+ }
516
+ /**
517
+ * @method
518
+ * @name bitget#unWatchOHLCV
519
+ * @description unsubscribe from the ohlcv channel
520
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Candlesticks-Channel
521
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Candlesticks-Channel
522
+ * @param {string} symbol unified symbol of the market to unwatch the ohlcv for
523
+ * @param {string} [timeframe] the period for the ratio, default is 1 minute
524
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
525
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
526
+ */
527
+ async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
528
+ await this.loadMarkets();
529
+ const timeframes = this.safeDict(this.options, 'timeframes');
530
+ const interval = this.safeString(timeframes, timeframe);
531
+ const channel = 'candle' + interval;
532
+ return await this.unWatchChannel(symbol, channel, 'candles:' + timeframe, params);
533
+ }
534
+ handleOHLCV(client, message) {
535
+ //
536
+ // {
537
+ // "action": "snapshot",
538
+ // "arg": {
539
+ // "instType": "SPOT",
540
+ // "channel": "candle1m",
541
+ // "instId": "BTCUSDT"
542
+ // },
543
+ // "data": [
544
+ // [
545
+ // "1701871620000",
546
+ // "44080.23",
547
+ // "44080.23",
548
+ // "44028.5",
549
+ // "44028.51",
550
+ // "9.9287",
551
+ // "437404.105512",
552
+ // "437404.105512"
553
+ // ],
554
+ // [
555
+ // "1701871680000",
556
+ // "44028.51",
557
+ // "44108.11",
558
+ // "44028.5",
559
+ // "44108.11",
560
+ // "17.139",
561
+ // "755436.870643",
562
+ // "755436.870643"
563
+ // ],
564
+ // ],
565
+ // "ts": 1701901610417
566
+ // }
567
+ //
568
+ const arg = this.safeValue(message, 'arg', {});
569
+ const instType = this.safeString(arg, 'instType');
570
+ const marketType = (instType === 'SPOT') ? 'spot' : 'contract';
571
+ const marketId = this.safeString(arg, 'instId');
572
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
573
+ const symbol = market['symbol'];
574
+ this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
575
+ const channel = this.safeString(arg, 'channel');
576
+ const interval = channel.replace('candle', '');
577
+ const timeframes = this.safeValue(this.options, 'timeframes');
578
+ const timeframe = this.findTimeframe(interval, timeframes);
579
+ let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
580
+ if (stored === undefined) {
581
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
582
+ stored = new ArrayCacheByTimestamp(limit);
583
+ this.ohlcvs[symbol][timeframe] = stored;
584
+ }
585
+ const data = this.safeValue(message, 'data', []);
586
+ for (let i = 0; i < data.length; i++) {
587
+ const parsed = this.parseWsOHLCV(data[i], market);
588
+ stored.append(parsed);
589
+ }
590
+ const messageHash = 'candles:' + timeframe + ':' + symbol;
591
+ client.resolve(stored, messageHash);
592
+ }
593
+ parseWsOHLCV(ohlcv, market = undefined) {
594
+ //
595
+ // [
596
+ // "1701871620000", // timestamp
597
+ // "44080.23", // open
598
+ // "44080.23", // high
599
+ // "44028.5", // low
600
+ // "44028.51", // close
601
+ // "9.9287", // base volume
602
+ // "437404.105512", // quote volume
603
+ // "437404.105512" // USDT volume
604
+ // ]
605
+ //
606
+ const volumeIndex = (market['inverse']) ? 6 : 5;
607
+ return [
608
+ this.safeInteger(ohlcv, 0),
609
+ this.safeNumber(ohlcv, 1),
610
+ this.safeNumber(ohlcv, 2),
611
+ this.safeNumber(ohlcv, 3),
612
+ this.safeNumber(ohlcv, 4),
613
+ this.safeNumber(ohlcv, volumeIndex),
614
+ ];
615
+ }
616
+ /**
617
+ * @method
618
+ * @name bitget#watchOrderBook
619
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
620
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Depth-Channel
621
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Order-Book-Channel
622
+ * @param {string} symbol unified symbol of the market to fetch the order book for
623
+ * @param {int} [limit] the maximum amount of order book entries to return
624
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
625
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
626
+ */
627
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
628
+ return await this.watchOrderBookForSymbols([symbol], limit, params);
629
+ }
630
+ /**
631
+ * @method
632
+ * @name bitget#unWatchOrderBook
633
+ * @description unsubscribe from the orderbook channel
634
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Depth-Channel
635
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Order-Book-Channel
636
+ * @param {string} symbol unified symbol of the market to fetch the order book for
637
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
638
+ * @param {int} [params.limit] orderbook limit, default is undefined
639
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
640
+ */
641
+ async unWatchOrderBook(symbol, params = {}) {
642
+ await this.loadMarkets();
643
+ let channel = 'books';
644
+ const limit = this.safeInteger(params, 'limit');
645
+ if ((limit === 1) || (limit === 5) || (limit === 15)) {
646
+ params = this.omit(params, 'limit');
647
+ channel += limit.toString();
648
+ }
649
+ return await this.unWatchChannel(symbol, channel, 'orderbook', params);
650
+ }
651
+ async unWatchChannel(symbol, channel, messageHashTopic, params = {}) {
652
+ await this.loadMarkets();
653
+ const market = this.market(symbol);
654
+ const messageHash = 'unsubscribe:' + messageHashTopic + ':' + market['symbol'];
655
+ let instType = undefined;
656
+ [instType, params] = this.getInstType(market, false, params);
657
+ const args = {
658
+ 'instType': instType,
659
+ 'channel': channel,
660
+ 'instId': market['id'],
661
+ };
662
+ return await this.unWatchPublic(messageHash, args, params);
663
+ }
664
+ /**
665
+ * @method
666
+ * @name bitget#watchOrderBookForSymbols
667
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
668
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Depth-Channel
669
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/Order-Book-Channel
670
+ * @param {string[]} symbols unified array of symbols
671
+ * @param {int} [limit] the maximum amount of order book entries to return
672
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
673
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
674
+ */
675
+ async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
676
+ await this.loadMarkets();
677
+ symbols = this.marketSymbols(symbols);
678
+ let channel = 'books';
679
+ let incrementalFeed = true;
680
+ if ((limit === 1) || (limit === 5) || (limit === 15)) {
681
+ channel += limit.toString();
682
+ incrementalFeed = false;
683
+ }
684
+ const topics = [];
685
+ const messageHashes = [];
686
+ for (let i = 0; i < symbols.length; i++) {
687
+ const symbol = symbols[i];
688
+ const market = this.market(symbol);
689
+ let instType = undefined;
690
+ [instType, params] = this.getInstType(market, false, params);
691
+ const args = {
692
+ 'instType': instType,
693
+ 'channel': channel,
694
+ 'instId': market['id'],
695
+ };
696
+ topics.push(args);
697
+ messageHashes.push('orderbook:' + symbol);
698
+ }
699
+ const orderbook = await this.watchPublicMultiple(messageHashes, topics, params);
700
+ if (incrementalFeed) {
701
+ return orderbook.limit();
702
+ }
703
+ else {
704
+ return orderbook;
705
+ }
706
+ }
707
+ handleOrderBook(client, message) {
708
+ //
709
+ // {
710
+ // "action":"snapshot",
711
+ // "arg":{
712
+ // "instType":"SPOT",
713
+ // "channel":"books5",
714
+ // "instId":"BTCUSDT"
715
+ // },
716
+ // "data":[
717
+ // {
718
+ // "asks":[
719
+ // ["21041.11","0.0445"],
720
+ // ["21041.16","0.0411"],
721
+ // ["21041.21","0.0421"],
722
+ // ["21041.26","0.0811"],
723
+ // ["21041.65","1.9465"]
724
+ // ],
725
+ // "bids":[
726
+ // ["21040.76","0.0417"],
727
+ // ["21040.71","0.0434"],
728
+ // ["21040.66","0.1141"],
729
+ // ["21040.61","0.3004"],
730
+ // ["21040.60","1.3357"]
731
+ // ],
732
+ // "checksum": -1367582038,
733
+ // "ts":"1656413855484"
734
+ // }
735
+ // ]
736
+ // }
737
+ //
738
+ const arg = this.safeValue(message, 'arg');
739
+ const channel = this.safeString(arg, 'channel');
740
+ const instType = this.safeString(arg, 'instType');
741
+ const marketType = (instType === 'SPOT') ? 'spot' : 'contract';
742
+ const marketId = this.safeString(arg, 'instId');
743
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
744
+ const symbol = market['symbol'];
745
+ const messageHash = 'orderbook:' + symbol;
746
+ const data = this.safeValue(message, 'data');
747
+ const rawOrderBook = this.safeValue(data, 0);
748
+ const timestamp = this.safeInteger(rawOrderBook, 'ts');
749
+ const incrementalBook = channel === 'books';
750
+ if (incrementalBook) {
751
+ // storedOrderBook = this.safeValue (this.orderbooks, symbol);
752
+ if (!(symbol in this.orderbooks)) {
753
+ // const ob = this.orderBook ({});
754
+ const ob = this.countedOrderBook({});
755
+ ob['symbol'] = symbol;
756
+ this.orderbooks[symbol] = ob;
757
+ }
758
+ const storedOrderBook = this.orderbooks[symbol];
759
+ const asks = this.safeValue(rawOrderBook, 'asks', []);
760
+ const bids = this.safeValue(rawOrderBook, 'bids', []);
761
+ this.handleDeltas(storedOrderBook['asks'], asks);
762
+ this.handleDeltas(storedOrderBook['bids'], bids);
763
+ storedOrderBook['timestamp'] = timestamp;
764
+ storedOrderBook['datetime'] = this.iso8601(timestamp);
765
+ const checksum = this.handleOption('watchOrderBook', 'checksum', true);
766
+ const isSnapshot = this.safeString(message, 'action') === 'snapshot'; // snapshot does not have a checksum
767
+ if (!isSnapshot && checksum) {
768
+ const storedAsks = storedOrderBook['asks'];
769
+ const storedBids = storedOrderBook['bids'];
770
+ const asksLength = storedAsks.length;
771
+ const bidsLength = storedBids.length;
772
+ const payloadArray = [];
773
+ for (let i = 0; i < 25; i++) {
774
+ if (i < bidsLength) {
775
+ payloadArray.push(storedBids[i][2][0]);
776
+ payloadArray.push(storedBids[i][2][1]);
777
+ }
778
+ if (i < asksLength) {
779
+ payloadArray.push(storedAsks[i][2][0]);
780
+ payloadArray.push(storedAsks[i][2][1]);
781
+ }
782
+ }
783
+ const payload = payloadArray.join(':');
784
+ const calculatedChecksum = this.crc32(payload, true);
785
+ const responseChecksum = this.safeInteger(rawOrderBook, 'checksum');
786
+ if (calculatedChecksum !== responseChecksum) {
787
+ // if (messageHash in client.subscriptions) {
788
+ // // delete client.subscriptions[messageHash];
789
+ // // delete this.orderbooks[symbol];
790
+ // }
791
+ this.spawn(this.handleCheckSumError, client, symbol, messageHash);
792
+ return;
793
+ }
794
+ }
795
+ }
796
+ else {
797
+ const orderbook = this.orderBook({});
798
+ const parsedOrderbook = this.parseOrderBook(rawOrderBook, symbol, timestamp);
799
+ orderbook.reset(parsedOrderbook);
800
+ this.orderbooks[symbol] = orderbook;
801
+ }
802
+ client.resolve(this.orderbooks[symbol], messageHash);
803
+ }
804
+ async handleCheckSumError(client, symbol, messageHash) {
805
+ await this.unWatchOrderBook(symbol);
806
+ const error = new ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
807
+ client.reject(error, messageHash);
808
+ }
809
+ handleDelta(bookside, delta) {
810
+ const bidAsk = this.parseBidAsk(delta, 0, 1);
811
+ // we store the string representations in the orderbook for checksum calculation
812
+ // this simplifies the code for generating checksums as we do not need to do any complex number transformations
813
+ bidAsk.push(delta);
814
+ bookside.storeArray(bidAsk);
815
+ }
816
+ handleDeltas(bookside, deltas) {
817
+ for (let i = 0; i < deltas.length; i++) {
818
+ this.handleDelta(bookside, deltas[i]);
819
+ }
820
+ }
821
+ /**
822
+ * @method
823
+ * @name bitget#watchTrades
824
+ * @description get the list of most recent trades for a particular symbol
825
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Trades-Channel
826
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/New-Trades-Channel
827
+ * @param {string} symbol unified symbol of the market to fetch trades for
828
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
829
+ * @param {int} [limit] the maximum amount of trades to fetch
830
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
831
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
832
+ */
833
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
834
+ return await this.watchTradesForSymbols([symbol], since, limit, params);
835
+ }
836
+ /**
837
+ * @method
838
+ * @name bitget#watchTradesForSymbols
839
+ * @description get the list of most recent trades for a particular symbol
840
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Trades-Channel
841
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/New-Trades-Channel
842
+ * @param {string[]} symbols unified symbol of the market to fetch trades for
843
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
844
+ * @param {int} [limit] the maximum amount of trades to fetch
845
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
846
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
847
+ */
848
+ async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
849
+ const symbolsLength = symbols.length;
850
+ if (symbolsLength === 0) {
851
+ throw new ArgumentsRequired(this.id + ' watchTradesForSymbols() requires a non-empty array of symbols');
852
+ }
853
+ await this.loadMarkets();
854
+ symbols = this.marketSymbols(symbols);
855
+ const topics = [];
856
+ const messageHashes = [];
857
+ for (let i = 0; i < symbols.length; i++) {
858
+ const symbol = symbols[i];
859
+ const market = this.market(symbol);
860
+ let instType = undefined;
861
+ [instType, params] = this.getInstType(market, false, params);
862
+ const args = {
863
+ 'instType': instType,
864
+ 'channel': 'trade',
865
+ 'instId': market['id'],
866
+ };
867
+ topics.push(args);
868
+ messageHashes.push('trade:' + symbol);
869
+ }
870
+ const trades = await this.watchPublicMultiple(messageHashes, topics, params);
871
+ if (this.newUpdates) {
872
+ const first = this.safeValue(trades, 0);
873
+ const tradeSymbol = this.safeString(first, 'symbol');
874
+ limit = trades.getLimit(tradeSymbol, limit);
875
+ }
876
+ const result = this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
877
+ if (this.handleOption('watchTrades', 'ignoreDuplicates', true)) {
878
+ let filtered = this.removeRepeatedTradesFromArray(result);
879
+ filtered = this.sortBy(filtered, 'timestamp');
880
+ return filtered;
881
+ }
882
+ return result;
883
+ }
884
+ /**
885
+ * @method
886
+ * @name bitget#unWatchTrades
887
+ * @description unsubscribe from the trades channel
888
+ * @see https://www.bitget.com/api-doc/spot/websocket/public/Trades-Channel
889
+ * @see https://www.bitget.com/api-doc/contract/websocket/public/New-Trades-Channel
890
+ * @param {string} symbol unified symbol of the market to unwatch the trades for
891
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
892
+ * @returns {any} status of the unwatch request
893
+ */
894
+ async unWatchTrades(symbol, params = {}) {
895
+ await this.loadMarkets();
896
+ return await this.unWatchChannel(symbol, 'trade', 'trade', params);
897
+ }
898
+ handleTrades(client, message) {
899
+ //
900
+ // {
901
+ // "action": "snapshot",
902
+ // "arg": { "instType": "SPOT", "channel": "trade", "instId": "BTCUSDT" },
903
+ // "data": [
904
+ // {
905
+ // "ts": "1701910980366",
906
+ // "price": "43854.01",
907
+ // "size": "0.0535",
908
+ // "side": "buy",
909
+ // "tradeId": "1116461060594286593"
910
+ // },
911
+ // ],
912
+ // "ts": 1701910980730
913
+ // }
914
+ //
915
+ const arg = this.safeValue(message, 'arg', {});
916
+ const instType = this.safeString(arg, 'instType');
917
+ const marketType = (instType === 'SPOT') ? 'spot' : 'contract';
918
+ const marketId = this.safeString(arg, 'instId');
919
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
920
+ const symbol = market['symbol'];
921
+ let stored = this.safeValue(this.trades, symbol);
922
+ if (stored === undefined) {
923
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
924
+ stored = new ArrayCache(limit);
925
+ this.trades[symbol] = stored;
926
+ }
927
+ const data = this.safeList(message, 'data', []);
928
+ const length = data.length;
929
+ // fix chronological order by reversing
930
+ for (let i = 0; i < length; i++) {
931
+ const index = length - i - 1;
932
+ const rawTrade = data[index];
933
+ const parsed = this.parseWsTrade(rawTrade, market);
934
+ stored.append(parsed);
935
+ }
936
+ const messageHash = 'trade:' + symbol;
937
+ client.resolve(stored, messageHash);
938
+ }
939
+ parseWsTrade(trade, market = undefined) {
940
+ //
941
+ // {
942
+ // "ts": "1701910980366",
943
+ // "price": "43854.01",
944
+ // "size": "0.0535",
945
+ // "side": "buy",
946
+ // "tradeId": "1116461060594286593"
947
+ // }
948
+ // swap private
949
+ //
950
+ // {
951
+ // "orderId": "1169142761031114781",
952
+ // "tradeId": "1169142761312637004",
953
+ // "symbol": "LTCUSDT",
954
+ // "orderType": "market",
955
+ // "side": "buy",
956
+ // "price": "80.87",
957
+ // "baseVolume": "0.1",
958
+ // "quoteVolume": "8.087",
959
+ // "profit": "0",
960
+ // "tradeSide": "open",
961
+ // "posMode": "hedge_mode",
962
+ // "tradeScope": "taker",
963
+ // "feeDetail": [
964
+ // {
965
+ // "feeCoin": "USDT",
966
+ // "deduction": "no",
967
+ // "totalDeductionFee": "0",
968
+ // "totalFee": "-0.0048522"
969
+ // }
970
+ // ],
971
+ // "cTime": "1714471276596",
972
+ // "uTime": "1714471276596"
973
+ // }
974
+ // spot private
975
+ // {
976
+ // "orderId": "1169142457356959747",
977
+ // "tradeId": "1169142457636958209",
978
+ // "symbol": "LTCUSDT",
979
+ // "orderType": "market",
980
+ // "side": "buy",
981
+ // "priceAvg": "81.069",
982
+ // "size": "0.074",
983
+ // "amount": "5.999106",
984
+ // "tradeScope": "taker",
985
+ // "feeDetail": [
986
+ // {
987
+ // "feeCoin": "LTC",
988
+ // "deduction": "no",
989
+ // "totalDeductionFee": "0",
990
+ // "totalFee": "0.000074"
991
+ // }
992
+ // ],
993
+ // "cTime": "1714471204194",
994
+ // "uTime": "1714471204194"
995
+ // }
996
+ //
997
+ const instId = this.safeString2(trade, 'symbol', 'instId');
998
+ const posMode = this.safeString(trade, 'posMode');
999
+ const defaultType = (posMode !== undefined) ? 'contract' : 'spot';
1000
+ if (market === undefined) {
1001
+ market = this.safeMarket(instId, undefined, undefined, defaultType);
1002
+ }
1003
+ const timestamp = this.safeIntegerN(trade, ['uTime', 'cTime', 'ts']);
1004
+ const feeDetail = this.safeList(trade, 'feeDetail', []);
1005
+ const first = this.safeDict(feeDetail, 0);
1006
+ let fee = undefined;
1007
+ if (first !== undefined) {
1008
+ const feeCurrencyId = this.safeString(first, 'feeCoin');
1009
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
1010
+ fee = {
1011
+ 'cost': Precise.stringAbs(this.safeString(first, 'totalFee')),
1012
+ 'currency': feeCurrencyCode,
1013
+ };
1014
+ }
1015
+ return this.safeTrade({
1016
+ 'info': trade,
1017
+ 'id': this.safeString(trade, 'tradeId'),
1018
+ 'order': this.safeString(trade, 'orderId'),
1019
+ 'timestamp': timestamp,
1020
+ 'datetime': this.iso8601(timestamp),
1021
+ 'symbol': market['symbol'],
1022
+ 'type': this.safeString(trade, 'orderType'),
1023
+ 'side': this.safeString(trade, 'side'),
1024
+ 'takerOrMaker': this.safeString(trade, 'tradeScope'),
1025
+ 'price': this.safeString2(trade, 'priceAvg', 'price'),
1026
+ 'amount': this.safeString2(trade, 'size', 'baseVolume'),
1027
+ 'cost': this.safeString2(trade, 'amount', 'quoteVolume'),
1028
+ 'fee': fee,
1029
+ }, market);
1030
+ }
1031
+ /**
1032
+ * @method
1033
+ * @name bitget#watchPositions
1034
+ * @description watch all open positions
1035
+ * @see https://www.bitget.com/api-doc/contract/websocket/private/Positions-Channel
1036
+ * @param {string[]|undefined} symbols list of unified market symbols
1037
+ * @param {int} [since] the earliest time in ms to fetch positions for
1038
+ * @param {int} [limit] the maximum number of positions to retrieve
1039
+ * @param {object} params extra parameters specific to the exchange API endpoint
1040
+ * @param {string} [params.instType] one of 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES', default is 'USDT-FUTURES'
1041
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
1042
+ */
1043
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
1044
+ await this.loadMarkets();
1045
+ let market = undefined;
1046
+ let messageHash = '';
1047
+ const subscriptionHash = 'positions';
1048
+ let instType = 'USDT-FUTURES';
1049
+ symbols = this.marketSymbols(symbols);
1050
+ if (!this.isEmpty(symbols)) {
1051
+ market = this.getMarketFromSymbols(symbols);
1052
+ [instType, params] = this.getInstType(market, false, params);
1053
+ }
1054
+ messageHash = instType + ':positions' + messageHash;
1055
+ const args = {
1056
+ 'instType': instType,
1057
+ 'channel': 'positions',
1058
+ 'instId': 'default',
1059
+ };
1060
+ const newPositions = await this.watchPrivate(messageHash, subscriptionHash, args, params);
1061
+ if (this.newUpdates) {
1062
+ return newPositions;
1063
+ }
1064
+ return this.filterBySymbolsSinceLimit(newPositions, symbols, since, limit, true);
1065
+ }
1066
+ handlePositions(client, message) {
1067
+ //
1068
+ // {
1069
+ // "action": "snapshot",
1070
+ // "arg": {
1071
+ // "instType": "USDT-FUTURES",
1072
+ // "channel": "positions",
1073
+ // "instId": "default"
1074
+ // },
1075
+ // "data": [
1076
+ // {
1077
+ // "posId": "926036334386778112",
1078
+ // "instId": "BTCUSDT",
1079
+ // "marginCoin": "USDT",
1080
+ // "marginSize": "2.19245",
1081
+ // "marginMode": "crossed",
1082
+ // "holdSide": "long",
1083
+ // "posMode": "hedge_mode",
1084
+ // "total": "0.001",
1085
+ // "available": "0.001",
1086
+ // "frozen": "0",
1087
+ // "openPriceAvg": "43849",
1088
+ // "leverage": 20,
1089
+ // "achievedProfits": "0",
1090
+ // "unrealizedPL": "-0.0032",
1091
+ // "unrealizedPLR": "-0.00145955438",
1092
+ // "liquidationPrice": "17629.684814834",
1093
+ // "keepMarginRate": "0.004",
1094
+ // "marginRate": "0.007634649185",
1095
+ // "cTime": "1652331666985",
1096
+ // "uTime": "1701913016923",
1097
+ // "autoMargin": "off"
1098
+ // },
1099
+ // ...
1100
+ // ]
1101
+ // "ts": 1701913043767
1102
+ // }
1103
+ //
1104
+ const arg = this.safeValue(message, 'arg', {});
1105
+ const instType = this.safeString(arg, 'instType', '');
1106
+ if (this.positions === undefined) {
1107
+ this.positions = {};
1108
+ }
1109
+ const action = this.safeString(message, 'action');
1110
+ if (!(instType in this.positions) || (action === 'snapshot')) {
1111
+ this.positions[instType] = new ArrayCacheBySymbolBySide();
1112
+ }
1113
+ const cache = this.positions[instType];
1114
+ const rawPositions = this.safeValue(message, 'data', []);
1115
+ const newPositions = [];
1116
+ for (let i = 0; i < rawPositions.length; i++) {
1117
+ const rawPosition = rawPositions[i];
1118
+ const marketId = this.safeString(rawPosition, 'instId');
1119
+ const market = this.safeMarket(marketId, undefined, undefined, 'contract');
1120
+ const position = this.parseWsPosition(rawPosition, market);
1121
+ newPositions.push(position);
1122
+ cache.append(position);
1123
+ }
1124
+ const messageHashes = this.findMessageHashes(client, instType + ':positions::');
1125
+ for (let i = 0; i < messageHashes.length; i++) {
1126
+ const messageHash = messageHashes[i];
1127
+ const parts = messageHash.split('::');
1128
+ const symbolsString = parts[1];
1129
+ const symbols = symbolsString.split(',');
1130
+ const positions = this.filterByArray(newPositions, 'symbol', symbols, false);
1131
+ if (!this.isEmpty(positions)) {
1132
+ client.resolve(positions, messageHash);
1133
+ }
1134
+ }
1135
+ client.resolve(newPositions, instType + ':positions');
1136
+ }
1137
+ parseWsPosition(position, market = undefined) {
1138
+ //
1139
+ // {
1140
+ // "posId": "926036334386778112",
1141
+ // "instId": "BTCUSDT",
1142
+ // "marginCoin": "USDT",
1143
+ // "marginSize": "2.19245",
1144
+ // "marginMode": "crossed",
1145
+ // "holdSide": "long",
1146
+ // "posMode": "hedge_mode",
1147
+ // "total": "0.001",
1148
+ // "available": "0.001",
1149
+ // "frozen": "0",
1150
+ // "openPriceAvg": "43849",
1151
+ // "leverage": 20,
1152
+ // "achievedProfits": "0",
1153
+ // "unrealizedPL": "-0.0032",
1154
+ // "unrealizedPLR": "-0.00145955438",
1155
+ // "liquidationPrice": "17629.684814834",
1156
+ // "keepMarginRate": "0.004",
1157
+ // "marginRate": "0.007634649185",
1158
+ // "cTime": "1652331666985",
1159
+ // "uTime": "1701913016923",
1160
+ // "autoMargin": "off"
1161
+ // }
1162
+ //
1163
+ const marketId = this.safeString(position, 'instId');
1164
+ const marginModeId = this.safeString(position, 'marginMode');
1165
+ const marginMode = this.getSupportedMapping(marginModeId, {
1166
+ 'crossed': 'cross',
1167
+ 'isolated': 'isolated',
1168
+ });
1169
+ const hedgedId = this.safeString(position, 'posMode');
1170
+ const hedged = (hedgedId === 'hedge_mode') ? true : false;
1171
+ const timestamp = this.safeInteger2(position, 'uTime', 'cTime');
1172
+ const percentageDecimal = this.safeString(position, 'unrealizedPLR');
1173
+ const percentage = Precise.stringMul(percentageDecimal, '100');
1174
+ let contractSize = undefined;
1175
+ if (market !== undefined) {
1176
+ contractSize = market['contractSize'];
1177
+ }
1178
+ return this.safePosition({
1179
+ 'info': position,
1180
+ 'id': this.safeString(position, 'posId'),
1181
+ 'symbol': this.safeSymbol(marketId, market, undefined, 'contract'),
1182
+ 'notional': undefined,
1183
+ 'marginMode': marginMode,
1184
+ 'liquidationPrice': this.safeNumber(position, 'liquidationPrice'),
1185
+ 'entryPrice': this.safeNumber(position, 'openPriceAvg'),
1186
+ 'unrealizedPnl': this.safeNumber(position, 'unrealizedPL'),
1187
+ 'percentage': this.parseNumber(percentage),
1188
+ 'contracts': this.safeNumber(position, 'total'),
1189
+ 'contractSize': contractSize,
1190
+ 'markPrice': undefined,
1191
+ 'side': this.safeString(position, 'holdSide'),
1192
+ 'hedged': hedged,
1193
+ 'timestamp': timestamp,
1194
+ 'datetime': this.iso8601(timestamp),
1195
+ 'maintenanceMargin': undefined,
1196
+ 'maintenanceMarginPercentage': this.safeNumber(position, 'keepMarginRate'),
1197
+ 'collateral': undefined,
1198
+ 'initialMargin': undefined,
1199
+ 'initialMarginPercentage': undefined,
1200
+ 'leverage': this.safeNumber(position, 'leverage'),
1201
+ 'marginRatio': this.safeNumber(position, 'marginRate'),
1202
+ });
1203
+ }
1204
+ /**
1205
+ * @method
1206
+ * @name bitget#watchOrders
1207
+ * @description watches information on multiple orders made by the user
1208
+ * @see https://www.bitget.com/api-doc/spot/websocket/private/Order-Channel
1209
+ * @see https://www.bitget.com/api-doc/contract/websocket/private/Order-Channel
1210
+ * @see https://www.bitget.com/api-doc/contract/websocket/private/Plan-Order-Channel
1211
+ * @see https://www.bitget.com/api-doc/margin/cross/websocket/private/Cross-Orders
1212
+ * @see https://www.bitget.com/api-doc/margin/isolated/websocket/private/Isolate-Orders
1213
+ * @param {string} symbol unified market symbol of the market orders were made in
1214
+ * @param {int} [since] the earliest time in ms to fetch orders for
1215
+ * @param {int} [limit] the maximum number of order structures to retrieve
1216
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1217
+ * @param {boolean} [params.trigger] *contract only* set to true for watching trigger orders
1218
+ * @param {string} [params.marginMode] 'isolated' or 'cross' for watching spot margin orders]
1219
+ * @param {string} [params.type] 'spot', 'swap'
1220
+ * @param {string} [params.subType] 'linear', 'inverse'
1221
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1222
+ */
1223
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1224
+ await this.loadMarkets();
1225
+ let market = undefined;
1226
+ let marketId = undefined;
1227
+ let isTrigger = undefined;
1228
+ [isTrigger, params] = this.isTriggerOrder(params);
1229
+ let messageHash = (isTrigger) ? 'triggerOrder' : 'order';
1230
+ let subscriptionHash = 'order:trades';
1231
+ if (symbol !== undefined) {
1232
+ market = this.market(symbol);
1233
+ symbol = market['symbol'];
1234
+ marketId = market['id'];
1235
+ messageHash = messageHash + ':' + symbol;
1236
+ }
1237
+ const productType = this.safeString(params, 'productType');
1238
+ let type = undefined;
1239
+ [type, params] = this.handleMarketTypeAndParams('watchOrders', market, params);
1240
+ let subType = undefined;
1241
+ [subType, params] = this.handleSubTypeAndParams('watchOrders', market, params, 'linear');
1242
+ if ((type === 'spot' || type === 'margin') && (symbol === undefined)) {
1243
+ marketId = 'default';
1244
+ }
1245
+ if ((productType === undefined) && (type !== 'spot') && (symbol === undefined)) {
1246
+ messageHash = messageHash + ':' + subType;
1247
+ }
1248
+ else if (productType === 'USDT-FUTURES') {
1249
+ messageHash = messageHash + ':linear';
1250
+ }
1251
+ else if (productType === 'COIN-FUTURES') {
1252
+ messageHash = messageHash + ':inverse';
1253
+ }
1254
+ else if (productType === 'USDC-FUTURES') {
1255
+ messageHash = messageHash + ':usdcfutures'; // non unified channel
1256
+ }
1257
+ let instType = undefined;
1258
+ if (market === undefined && type === 'spot') {
1259
+ instType = 'SPOT';
1260
+ }
1261
+ else {
1262
+ [instType, params] = this.getInstType(market, false, params);
1263
+ }
1264
+ if (type === 'spot' && (symbol !== undefined)) {
1265
+ subscriptionHash = subscriptionHash + ':' + symbol;
1266
+ }
1267
+ if (isTrigger) {
1268
+ subscriptionHash = subscriptionHash + ':stop'; // we don't want to re-use the same subscription hash for stop orders
1269
+ }
1270
+ const instId = (type === 'spot' || type === 'margin') ? marketId : 'default'; // different from other streams here the 'rest' id is required for spot markets, contract markets require default here
1271
+ let channel = isTrigger ? 'orders-algo' : 'orders';
1272
+ let marginMode = undefined;
1273
+ [marginMode, params] = this.handleMarginModeAndParams('watchOrders', params);
1274
+ if (marginMode !== undefined) {
1275
+ instType = 'MARGIN';
1276
+ messageHash = messageHash + ':' + marginMode;
1277
+ if (marginMode === 'isolated') {
1278
+ channel = 'orders-isolated';
1279
+ }
1280
+ else {
1281
+ channel = 'orders-crossed';
1282
+ }
1283
+ }
1284
+ subscriptionHash = subscriptionHash + ':' + instType;
1285
+ const args = {
1286
+ 'instType': instType,
1287
+ 'channel': channel,
1288
+ 'instId': instId,
1289
+ };
1290
+ const orders = await this.watchPrivate(messageHash, subscriptionHash, args, params);
1291
+ if (this.newUpdates) {
1292
+ limit = orders.getLimit(symbol, limit);
1293
+ }
1294
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
1295
+ }
1296
+ handleOrder(client, message) {
1297
+ //
1298
+ // spot
1299
+ //
1300
+ // {
1301
+ // "action": "snapshot",
1302
+ // "arg": { "instType": "SPOT", "channel": "orders", "instId": "BTCUSDT" },
1303
+ // "data": [
1304
+ // // see all examples in parseWsOrder
1305
+ // ],
1306
+ // "ts": 1701923297285
1307
+ // }
1308
+ //
1309
+ // contract
1310
+ //
1311
+ // {
1312
+ // "action": "snapshot",
1313
+ // "arg": { "instType": "USDT-FUTURES", "channel": "orders", "instId": "default" },
1314
+ // "data": [
1315
+ // // see all examples in parseWsOrder
1316
+ // ],
1317
+ // "ts": 1701920595879
1318
+ // }
1319
+ //
1320
+ // isolated and cross margin
1321
+ //
1322
+ // {
1323
+ // "action": "snapshot",
1324
+ // "arg": { "instType": "MARGIN", "channel": "orders-crossed", "instId": "BTCUSDT" },
1325
+ // "data": [
1326
+ // // see examples in parseWsOrder
1327
+ // ],
1328
+ // "ts": 1701923982497
1329
+ // }
1330
+ //
1331
+ const arg = this.safeDict(message, 'arg', {});
1332
+ const channel = this.safeString(arg, 'channel');
1333
+ const instType = this.safeString(arg, 'instType');
1334
+ const argInstId = this.safeString(arg, 'instId');
1335
+ let marketType = undefined;
1336
+ if (instType === 'SPOT') {
1337
+ marketType = 'spot';
1338
+ }
1339
+ else if (instType === 'MARGIN') {
1340
+ marketType = 'spot';
1341
+ }
1342
+ else {
1343
+ marketType = 'contract';
1344
+ }
1345
+ const isLinearSwap = (instType === 'USDT-FUTURES');
1346
+ const isInverseSwap = (instType === 'COIN-FUTURES');
1347
+ const isUSDCFutures = (instType === 'USDC-FUTURES');
1348
+ const data = this.safeValue(message, 'data', []);
1349
+ if (this.orders === undefined) {
1350
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
1351
+ this.orders = new ArrayCacheBySymbolById(limit);
1352
+ this.triggerOrders = new ArrayCacheBySymbolById(limit);
1353
+ }
1354
+ const isTrigger = (channel === 'orders-algo') || (channel === 'ordersAlgo');
1355
+ const stored = isTrigger ? this.triggerOrders : this.orders;
1356
+ const messageHash = isTrigger ? 'triggerOrder' : 'order';
1357
+ const marketSymbols = {};
1358
+ for (let i = 0; i < data.length; i++) {
1359
+ const order = data[i];
1360
+ const marketId = this.safeString(order, 'instId', argInstId);
1361
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
1362
+ const parsed = this.parseWsOrder(order, market);
1363
+ stored.append(parsed);
1364
+ const symbol = parsed['symbol'];
1365
+ marketSymbols[symbol] = true;
1366
+ }
1367
+ const keys = Object.keys(marketSymbols);
1368
+ for (let i = 0; i < keys.length; i++) {
1369
+ const symbol = keys[i];
1370
+ let innerMessageHash = messageHash + ':' + symbol;
1371
+ if (channel === 'orders-crossed') {
1372
+ innerMessageHash = innerMessageHash + ':cross';
1373
+ }
1374
+ else if (channel === 'orders-isolated') {
1375
+ innerMessageHash = innerMessageHash + ':isolated';
1376
+ }
1377
+ client.resolve(stored, innerMessageHash);
1378
+ }
1379
+ client.resolve(stored, messageHash);
1380
+ if (isLinearSwap) {
1381
+ client.resolve(stored, 'order:linear');
1382
+ }
1383
+ if (isInverseSwap) {
1384
+ client.resolve(stored, 'order:inverse');
1385
+ }
1386
+ if (isUSDCFutures) {
1387
+ client.resolve(stored, 'order:usdcfutures');
1388
+ }
1389
+ }
1390
+ parseWsOrder(order, market = undefined) {
1391
+ //
1392
+ // spot
1393
+ //
1394
+ // {
1395
+ // instId: 'EOSUSDT',
1396
+ // orderId: '1171779081105780739',
1397
+ // price: '0.81075', // limit price, field not present for market orders
1398
+ // clientOid: 'a2330139-1d04-4d78-98be-07de3cfd1055',
1399
+ // notional: '5.675250', // this is not cost! but notional
1400
+ // newSize: '7.0000', // this is not cost! quanity (for limit order or market sell) or cost (for market buy order)
1401
+ // size: '5.6752', // this is not cost, neither quanity, but notional! this field for "spot" can be ignored at all
1402
+ // // Note: for limit order (even filled) we don't have cost value in response, only in market order
1403
+ // orderType: 'limit', // limit, market
1404
+ // force: 'gtc',
1405
+ // side: 'buy',
1406
+ // accBaseVolume: '0.0000', // in case of 'filled', this would be set (for limit orders, this is the only indicator of the amount filled)
1407
+ // priceAvg: '0.00000', // in case of 'filled', this would be set
1408
+ // status: 'live', // live, filled, partially_filled
1409
+ // cTime: '1715099824215',
1410
+ // uTime: '1715099824215',
1411
+ // feeDetail: [],
1412
+ // enterPointSource: 'API'
1413
+ // #### trigger order has these additional fields: ####
1414
+ // "triggerPrice": "35100",
1415
+ // "price": "35100", // this is same as trigger price
1416
+ // "executePrice": "35123", // this is limit price
1417
+ // "triggerType": "fill_price",
1418
+ // "planType": "amount",
1419
+ // #### in case order had a partial fill: ####
1420
+ // fillPrice: '35123',
1421
+ // tradeId: '1171775539946528779',
1422
+ // baseVolume: '7', // field present in market order
1423
+ // fillTime: '1715098979937',
1424
+ // fillFee: '-0.0069987',
1425
+ // fillFeeCoin: 'BTC',
1426
+ // tradeScope: 'T',
1427
+ // }
1428
+ //
1429
+ // contract
1430
+ //
1431
+ // {
1432
+ // accBaseVolume: '0', // total amount filled during lifetime for order
1433
+ // cTime: '1715065875539',
1434
+ // clientOid: '1171636690041344003',
1435
+ // enterPointSource: 'API',
1436
+ // feeDetail: [ {
1437
+ // "feeCoin": "USDT",
1438
+ // "fee": "-0.162003"
1439
+ // } ],
1440
+ // force: 'gtc',
1441
+ // instId: 'SEOSSUSDT',
1442
+ // leverage: '10',
1443
+ // marginCoin: 'USDT',
1444
+ // marginMode: 'crossed',
1445
+ // notionalUsd: '10.4468',
1446
+ // orderId: '1171636690028761089',
1447
+ // orderType: 'market',
1448
+ // posMode: 'hedge_mode', // one_way_mode, hedge_mode
1449
+ // posSide: 'short', // short, long, net
1450
+ // price: '0', // zero for market order
1451
+ // reduceOnly: 'no',
1452
+ // side: 'sell',
1453
+ // size: '13', // this is contracts amount
1454
+ // status: 'live', // live, filled, cancelled
1455
+ // tradeSide: 'open',
1456
+ // uTime: '1715065875539'
1457
+ // #### when filled order is incoming, these additional fields are present too: ###
1458
+ // baseVolume: '9', // amount filled for the incoming update/trade
1459
+ // accBaseVolume: '13', // i.e. 9 has been filled from 13 amount (this value is same as 'size')
1460
+ // fillFee: '-0.0062712',
1461
+ // fillFeeCoin: 'SUSDT',
1462
+ // fillNotionalUsd: '10.452',
1463
+ // fillPrice: '0.804',
1464
+ // fillTime: '1715065875605',
1465
+ // pnl: '0',
1466
+ // priceAvg: '0.804',
1467
+ // tradeId: '1171636690314407937',
1468
+ // tradeScope: 'T',
1469
+ // #### trigger order has these additional fields:
1470
+ // "triggerPrice": "0.800000000",
1471
+ // "price": "0.800000000", // <-- this is same as trigger price, actual limit-price is not present in initial response
1472
+ // "triggerType": "mark_price",
1473
+ // "triggerTime": "1715082796679",
1474
+ // "planType": "pl",
1475
+ // "actualSize": "0.000000000",
1476
+ // "stopSurplusTriggerType": "fill_price",
1477
+ // "stopLossTriggerType": "fill_price",
1478
+ // }
1479
+ //
1480
+ // isolated and cross margin
1481
+ //
1482
+ // {
1483
+ // enterPointSource: "web",
1484
+ // feeDetail: [
1485
+ // {
1486
+ // feeCoin: "AAVE",
1487
+ // deduction: "no",
1488
+ // totalDeductionFee: "0",
1489
+ // totalFee: "-0.00010740",
1490
+ // },
1491
+ // ],
1492
+ // force: "gtc",
1493
+ // orderType: "limit",
1494
+ // price: "93.170000000",
1495
+ // fillPrice: "93.170000000",
1496
+ // baseSize: "0.110600000", // total amount of order
1497
+ // quoteSize: "10.304602000", // total cost of order (independently if order is filled or pending)
1498
+ // baseVolume: "0.107400000", // filled amount of order (during order's lifecycle, and not for this specific incoming update)
1499
+ // fillTotalAmount: "10.006458000", // filled cost of order (during order's lifecycle, and not for this specific incoming update)
1500
+ // side: "buy",
1501
+ // status: "partially_filled",
1502
+ // cTime: "1717875017306",
1503
+ // clientOid: "b57afe789a06454e9c560a2aab7f7201",
1504
+ // loanType: "auto-loan",
1505
+ // orderId: "1183419084588060673",
1506
+ // }
1507
+ //
1508
+ const isSpot = !('posMode' in order);
1509
+ const isMargin = ('loanType' in order);
1510
+ const marketId = this.safeString(order, 'instId');
1511
+ market = this.safeMarket(marketId, market);
1512
+ const timestamp = this.safeInteger(order, 'cTime');
1513
+ const symbol = market['symbol'];
1514
+ const rawStatus = this.safeString(order, 'status');
1515
+ const orderFee = this.safeValue(order, 'feeDetail', []);
1516
+ const fee = this.safeValue(orderFee, 0);
1517
+ const feeAmount = this.safeString(fee, 'fee');
1518
+ let feeObject = undefined;
1519
+ if (feeAmount !== undefined) {
1520
+ const feeCurrency = this.safeString(fee, 'feeCoin');
1521
+ feeObject = {
1522
+ 'cost': this.parseNumber(Precise.stringAbs(feeAmount)),
1523
+ 'currency': this.safeCurrencyCode(feeCurrency),
1524
+ };
1525
+ }
1526
+ const triggerPrice = this.safeNumber(order, 'triggerPrice');
1527
+ const isTriggerOrder = (triggerPrice !== undefined);
1528
+ let price = undefined;
1529
+ if (!isTriggerOrder) {
1530
+ price = this.safeNumber(order, 'price');
1531
+ }
1532
+ else if (isSpot && isTriggerOrder) {
1533
+ // for spot trigger order, limit price is this
1534
+ price = this.safeNumber(order, 'executePrice');
1535
+ }
1536
+ const avgPrice = this.omitZero(this.safeString2(order, 'priceAvg', 'fillPrice'));
1537
+ const side = this.safeString(order, 'side');
1538
+ const type = this.safeString(order, 'orderType');
1539
+ const accBaseVolume = this.omitZero(this.safeString(order, 'accBaseVolume'));
1540
+ const newSizeValue = this.omitZero(this.safeString(order, 'newSize'));
1541
+ const isMarketOrder = (type === 'market');
1542
+ const isBuy = (side === 'buy');
1543
+ let totalAmount = undefined;
1544
+ let filledAmount = undefined;
1545
+ let cost = undefined;
1546
+ let remaining = undefined;
1547
+ let totalFilled = this.safeString(order, 'accBaseVolume');
1548
+ if (isSpot) {
1549
+ if (isMargin) {
1550
+ totalAmount = this.safeString(order, 'baseSize');
1551
+ totalFilled = this.safeString(order, 'baseVolume');
1552
+ cost = this.safeString(order, 'fillTotalAmount');
1553
+ }
1554
+ else {
1555
+ const partialFillAmount = this.safeString(order, 'baseVolume');
1556
+ if (partialFillAmount !== undefined) {
1557
+ filledAmount = partialFillAmount;
1558
+ }
1559
+ else {
1560
+ filledAmount = totalFilled;
1561
+ }
1562
+ if (isMarketOrder) {
1563
+ if (isBuy) {
1564
+ totalAmount = accBaseVolume;
1565
+ cost = newSizeValue;
1566
+ }
1567
+ else {
1568
+ totalAmount = newSizeValue;
1569
+ // we don't have cost for market-sell order
1570
+ }
1571
+ }
1572
+ else {
1573
+ totalAmount = this.safeString(order, 'newSize');
1574
+ // we don't have cost for limit order
1575
+ }
1576
+ }
1577
+ }
1578
+ else {
1579
+ // baseVolume should not be used for "amount" for contracts !
1580
+ filledAmount = this.safeString(order, 'baseVolume');
1581
+ totalAmount = this.safeString(order, 'size');
1582
+ cost = this.safeString(order, 'fillNotionalUsd');
1583
+ }
1584
+ remaining = Precise.stringSub(totalAmount, totalFilled);
1585
+ return this.safeOrder({
1586
+ 'info': order,
1587
+ 'symbol': symbol,
1588
+ 'id': this.safeString(order, 'orderId'),
1589
+ 'clientOrderId': this.safeString(order, 'clientOid'),
1590
+ 'timestamp': timestamp,
1591
+ 'datetime': this.iso8601(timestamp),
1592
+ 'lastTradeTimestamp': this.safeInteger(order, 'uTime'),
1593
+ 'type': type,
1594
+ 'timeInForce': this.safeStringUpper(order, 'force'),
1595
+ 'postOnly': undefined,
1596
+ 'side': side,
1597
+ 'price': price,
1598
+ 'triggerPrice': triggerPrice,
1599
+ 'amount': totalAmount,
1600
+ 'cost': cost,
1601
+ 'average': avgPrice,
1602
+ 'filled': filledAmount,
1603
+ 'remaining': remaining,
1604
+ 'status': this.parseWsOrderStatus(rawStatus),
1605
+ 'fee': feeObject,
1606
+ 'trades': undefined,
1607
+ }, market);
1608
+ }
1609
+ parseWsOrderStatus(status) {
1610
+ const statuses = {
1611
+ 'live': 'open',
1612
+ 'partially_filled': 'open',
1613
+ 'filled': 'closed',
1614
+ 'cancelled': 'canceled',
1615
+ 'not_trigger': 'open',
1616
+ };
1617
+ return this.safeString(statuses, status, status);
1618
+ }
1619
+ /**
1620
+ * @method
1621
+ * @name bitget#watchMyTrades
1622
+ * @description watches trades made by the user
1623
+ * @see https://www.bitget.com/api-doc/contract/websocket/private/Order-Channel
1624
+ * @param {str} symbol unified market symbol
1625
+ * @param {int} [since] the earliest time in ms to fetch trades for
1626
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1627
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1628
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1629
+ */
1630
+ async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1631
+ await this.loadMarkets();
1632
+ let market = undefined;
1633
+ let messageHash = 'myTrades';
1634
+ if (symbol !== undefined) {
1635
+ market = this.market(symbol);
1636
+ symbol = market['symbol'];
1637
+ messageHash = messageHash + ':' + symbol;
1638
+ }
1639
+ let type = undefined;
1640
+ [type, params] = this.handleMarketTypeAndParams('watchMyTrades', market, params);
1641
+ let instType = undefined;
1642
+ if (market === undefined && type === 'spot') {
1643
+ instType = 'spot';
1644
+ }
1645
+ else {
1646
+ [instType, params] = this.getInstType(market, false, params);
1647
+ }
1648
+ const subscriptionHash = 'fill:' + instType;
1649
+ const args = {
1650
+ 'instType': instType,
1651
+ 'channel': 'fill',
1652
+ 'instId': 'default',
1653
+ };
1654
+ const trades = await this.watchPrivate(messageHash, subscriptionHash, args, params);
1655
+ if (this.newUpdates) {
1656
+ limit = trades.getLimit(symbol, limit);
1657
+ }
1658
+ return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
1659
+ }
1660
+ handleMyTrades(client, message) {
1661
+ //
1662
+ // spot
1663
+ // {
1664
+ // "action": "snapshot",
1665
+ // "arg": {
1666
+ // "instType": "SPOT",
1667
+ // "channel": "fill",
1668
+ // "instId": "default"
1669
+ // },
1670
+ // "data": [
1671
+ // {
1672
+ // "orderId": "1169142457356959747",
1673
+ // "tradeId": "1169142457636958209",
1674
+ // "symbol": "LTCUSDT",
1675
+ // "orderType": "market",
1676
+ // "side": "buy",
1677
+ // "priceAvg": "81.069",
1678
+ // "size": "0.074",
1679
+ // "amount": "5.999106",
1680
+ // "tradeScope": "taker",
1681
+ // "feeDetail": [
1682
+ // {
1683
+ // "feeCoin": "LTC",
1684
+ // "deduction": "no",
1685
+ // "totalDeductionFee": "0",
1686
+ // "totalFee": "0.000074"
1687
+ // }
1688
+ // ],
1689
+ // "cTime": "1714471204194",
1690
+ // "uTime": "1714471204194"
1691
+ // }
1692
+ // ],
1693
+ // "ts": 1714471204270
1694
+ // }
1695
+ // swap
1696
+ // {
1697
+ // "action": "snapshot",
1698
+ // "arg": {
1699
+ // "instType": "USDT-FUTURES",
1700
+ // "channel": "fill",
1701
+ // "instId": "default"
1702
+ // },
1703
+ // "data": [
1704
+ // {
1705
+ // "orderId": "1169142761031114781",
1706
+ // "tradeId": "1169142761312637004",
1707
+ // "symbol": "LTCUSDT",
1708
+ // "orderType": "market",
1709
+ // "side": "buy",
1710
+ // "price": "80.87",
1711
+ // "baseVolume": "0.1",
1712
+ // "quoteVolume": "8.087",
1713
+ // "profit": "0",
1714
+ // "tradeSide": "open",
1715
+ // "posMode": "hedge_mode",
1716
+ // "tradeScope": "taker",
1717
+ // "feeDetail": [
1718
+ // {
1719
+ // "feeCoin": "USDT",
1720
+ // "deduction": "no",
1721
+ // "totalDeductionFee": "0",
1722
+ // "totalFee": "-0.0048522"
1723
+ // }
1724
+ // ],
1725
+ // "cTime": "1714471276596",
1726
+ // "uTime": "1714471276596"
1727
+ // }
1728
+ // ],
1729
+ // "ts": 1714471276629
1730
+ // }
1731
+ //
1732
+ if (this.myTrades === undefined) {
1733
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
1734
+ this.myTrades = new ArrayCache(limit);
1735
+ }
1736
+ const stored = this.myTrades;
1737
+ const data = this.safeList(message, 'data', []);
1738
+ const length = data.length;
1739
+ const messageHash = 'myTrades';
1740
+ for (let i = 0; i < length; i++) {
1741
+ const trade = data[i];
1742
+ const parsed = this.parseWsTrade(trade);
1743
+ stored.append(parsed);
1744
+ const symbol = parsed['symbol'];
1745
+ const symbolSpecificMessageHash = 'myTrades:' + symbol;
1746
+ client.resolve(stored, symbolSpecificMessageHash);
1747
+ }
1748
+ client.resolve(stored, messageHash);
1749
+ }
1750
+ /**
1751
+ * @method
1752
+ * @name bitget#watchBalance
1753
+ * @description watch balance and get the amount of funds available for trading or funds locked in orders
1754
+ * @see https://www.bitget.com/api-doc/spot/websocket/private/Account-Channel
1755
+ * @see https://www.bitget.com/api-doc/contract/websocket/private/Account-Channel
1756
+ * @see https://www.bitget.com/api-doc/margin/cross/websocket/private/Margin-Cross-Account-Assets
1757
+ * @see https://www.bitget.com/api-doc/margin/isolated/websocket/private/Margin-isolated-account-assets
1758
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1759
+ * @param {str} [params.type] spot or contract if not provided this.options['defaultType'] is used
1760
+ * @param {string} [params.instType] one of 'SPOT', 'MARGIN', 'USDT-FUTURES', 'USDC-FUTURES', 'COIN-FUTURES', 'SUSDT-FUTURES', 'SUSDC-FUTURES' or 'SCOIN-FUTURES'
1761
+ * @param {string} [params.marginMode] 'isolated' or 'cross' for watching spot margin balances
1762
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1763
+ */
1764
+ async watchBalance(params = {}) {
1765
+ let type = undefined;
1766
+ [type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
1767
+ let marginMode = undefined;
1768
+ [marginMode, params] = this.handleMarginModeAndParams('watchBalance', params);
1769
+ let instType = undefined;
1770
+ let channel = 'account';
1771
+ if ((type === 'swap') || (type === 'future')) {
1772
+ instType = 'USDT-FUTURES';
1773
+ }
1774
+ else if (marginMode !== undefined) {
1775
+ instType = 'MARGIN';
1776
+ if (marginMode === 'isolated') {
1777
+ channel = 'account-isolated';
1778
+ }
1779
+ else {
1780
+ channel = 'account-crossed';
1781
+ }
1782
+ }
1783
+ else {
1784
+ instType = 'SPOT';
1785
+ }
1786
+ [instType, params] = this.handleOptionAndParams(params, 'watchBalance', 'instType', instType);
1787
+ const args = {
1788
+ 'instType': instType,
1789
+ 'channel': channel,
1790
+ 'coin': 'default',
1791
+ };
1792
+ const messageHash = 'balance:' + instType.toLowerCase();
1793
+ return await this.watchPrivate(messageHash, messageHash, args, params);
1794
+ }
1795
+ handleBalance(client, message) {
1796
+ //
1797
+ // spot
1798
+ //
1799
+ // {
1800
+ // "action": "snapshot",
1801
+ // "arg": { "instType": "SPOT", "channel": "account", "coin": "default" },
1802
+ // "data": [
1803
+ // {
1804
+ // "coin": "USDT",
1805
+ // "available": "19.1430952856087",
1806
+ // "frozen": "7",
1807
+ // "locked": "0",
1808
+ // "limitAvailable": "0",
1809
+ // "uTime": "1701931970487"
1810
+ // },
1811
+ // ],
1812
+ // "ts": 1701931970487
1813
+ // }
1814
+ //
1815
+ // swap
1816
+ //
1817
+ // {
1818
+ // "action": "snapshot",
1819
+ // "arg": { "instType": "USDT-FUTURES", "channel": "account", "coin": "default" },
1820
+ // "data": [
1821
+ // {
1822
+ // "marginCoin": "USDT",
1823
+ // "frozen": "5.36581500",
1824
+ // "available": "26.14309528",
1825
+ // "maxOpenPosAvailable": "20.77728028",
1826
+ // "maxTransferOut": "20.77728028",
1827
+ // "equity": "26.14309528",
1828
+ // "usdtEquity": "26.143095285166"
1829
+ // }
1830
+ // ],
1831
+ // "ts": 1701932570822
1832
+ // }
1833
+ //
1834
+ // margin
1835
+ //
1836
+ // {
1837
+ // "action": "snapshot",
1838
+ // "arg": { "instType": "MARGIN", "channel": "account-crossed", "coin": "default" },
1839
+ // "data": [
1840
+ // {
1841
+ // "uTime": "1701933110544",
1842
+ // "id": "1096916799926710272",
1843
+ // "coin": "USDT",
1844
+ // "available": "16.24309528",
1845
+ // "borrow": "0.00000000",
1846
+ // "frozen": "9.90000000",
1847
+ // "interest": "0.00000000",
1848
+ // "coupon": "0.00000000"
1849
+ // }
1850
+ // ],
1851
+ // "ts": 1701933110544
1852
+ // }
1853
+ //
1854
+ const data = this.safeValue(message, 'data', []);
1855
+ for (let i = 0; i < data.length; i++) {
1856
+ const rawBalance = data[i];
1857
+ const currencyId = this.safeString2(rawBalance, 'coin', 'marginCoin');
1858
+ const code = this.safeCurrencyCode(currencyId);
1859
+ const account = (code in this.balance) ? this.balance[code] : this.account();
1860
+ const borrow = this.safeString(rawBalance, 'borrow');
1861
+ if (borrow !== undefined) {
1862
+ const interest = this.safeString(rawBalance, 'interest');
1863
+ account['debt'] = Precise.stringAdd(borrow, interest);
1864
+ }
1865
+ const freeQuery = ('maxTransferOut' in rawBalance) ? 'maxTransferOut' : 'available';
1866
+ account['free'] = this.safeString(rawBalance, freeQuery);
1867
+ account['total'] = this.safeString(rawBalance, 'equity');
1868
+ account['used'] = this.safeString(rawBalance, 'frozen');
1869
+ this.balance[code] = account;
1870
+ }
1871
+ this.balance = this.safeBalance(this.balance);
1872
+ const arg = this.safeValue(message, 'arg');
1873
+ const instType = this.safeStringLower(arg, 'instType');
1874
+ const messageHash = 'balance:' + instType;
1875
+ client.resolve(this.balance, messageHash);
1876
+ }
1877
+ async watchPublic(messageHash, args, params = {}) {
1878
+ let uta = undefined;
1879
+ let url = undefined;
1880
+ [uta, params] = this.handleOptionAndParams(params, 'watchPublic', 'uta', false);
1881
+ if (uta) {
1882
+ url = this.urls['api']['ws']['utaPublic'];
1883
+ }
1884
+ else {
1885
+ url = this.urls['api']['ws']['public'];
1886
+ }
1887
+ const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
1888
+ if (sandboxMode) {
1889
+ const instType = this.safeString(args, 'instType');
1890
+ if ((instType !== 'SCOIN-FUTURES') && (instType !== 'SUSDT-FUTURES') && (instType !== 'SUSDC-FUTURES')) {
1891
+ if (uta) {
1892
+ url = this.urls['api']['demo']['utaPublic'];
1893
+ }
1894
+ else {
1895
+ url = this.urls['api']['demo']['public'];
1896
+ }
1897
+ }
1898
+ }
1899
+ const request = {
1900
+ 'op': 'subscribe',
1901
+ 'args': [args],
1902
+ };
1903
+ const message = this.extend(request, params);
1904
+ return await this.watch(url, messageHash, message, messageHash);
1905
+ }
1906
+ async unWatchPublic(messageHash, args, params = {}) {
1907
+ let uta = undefined;
1908
+ let url = undefined;
1909
+ [uta, params] = this.handleOptionAndParams(params, 'unWatchPublic', 'uta', false);
1910
+ if (uta) {
1911
+ url = this.urls['api']['ws']['utaPublic'];
1912
+ }
1913
+ else {
1914
+ url = this.urls['api']['ws']['public'];
1915
+ }
1916
+ const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
1917
+ if (sandboxMode) {
1918
+ const instType = this.safeString(args, 'instType');
1919
+ if ((instType !== 'SCOIN-FUTURES') && (instType !== 'SUSDT-FUTURES') && (instType !== 'SUSDC-FUTURES')) {
1920
+ if (uta) {
1921
+ url = this.urls['api']['demo']['utaPublic'];
1922
+ }
1923
+ else {
1924
+ url = this.urls['api']['demo']['public'];
1925
+ }
1926
+ }
1927
+ }
1928
+ const request = {
1929
+ 'op': 'unsubscribe',
1930
+ 'args': [args],
1931
+ };
1932
+ const message = this.extend(request, params);
1933
+ return await this.watch(url, messageHash, message, messageHash);
1934
+ }
1935
+ async watchPublicMultiple(messageHashes, argsArray, params = {}) {
1936
+ let uta = undefined;
1937
+ let url = undefined;
1938
+ [uta, params] = this.handleOptionAndParams(params, 'watchPublicMultiple', 'uta', false);
1939
+ if (uta) {
1940
+ url = this.urls['api']['ws']['utaPublic'];
1941
+ }
1942
+ else {
1943
+ url = this.urls['api']['ws']['public'];
1944
+ }
1945
+ const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
1946
+ if (sandboxMode) {
1947
+ const argsArrayFirst = this.safeDict(argsArray, 0, {});
1948
+ const instType = this.safeString(argsArrayFirst, 'instType');
1949
+ if ((instType !== 'SCOIN-FUTURES') && (instType !== 'SUSDT-FUTURES') && (instType !== 'SUSDC-FUTURES')) {
1950
+ if (uta) {
1951
+ url = this.urls['api']['demo']['utaPublic'];
1952
+ }
1953
+ else {
1954
+ url = this.urls['api']['demo']['public'];
1955
+ }
1956
+ }
1957
+ }
1958
+ const request = {
1959
+ 'op': 'subscribe',
1960
+ 'args': argsArray,
1961
+ };
1962
+ const message = this.extend(request, params);
1963
+ return await this.watchMultiple(url, messageHashes, message, messageHashes);
1964
+ }
1965
+ async authenticate(params = {}) {
1966
+ this.checkRequiredCredentials();
1967
+ const url = this.safeString(params, 'url');
1968
+ const client = this.client(url);
1969
+ const messageHash = 'authenticated';
1970
+ const future = client.future(messageHash);
1971
+ const authenticated = this.safeValue(client.subscriptions, messageHash);
1972
+ if (authenticated === undefined) {
1973
+ const timestamp = this.seconds().toString();
1974
+ const auth = timestamp + 'GET' + '/user/verify';
1975
+ const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256, 'base64');
1976
+ const operation = 'login';
1977
+ const request = {
1978
+ 'op': operation,
1979
+ 'args': [
1980
+ {
1981
+ 'apiKey': this.apiKey,
1982
+ 'passphrase': this.password,
1983
+ 'timestamp': timestamp,
1984
+ 'sign': signature,
1985
+ },
1986
+ ],
1987
+ };
1988
+ const message = this.extend(request, params);
1989
+ this.watch(url, messageHash, message, messageHash);
1990
+ }
1991
+ return await future;
1992
+ }
1993
+ async watchPrivate(messageHash, subscriptionHash, args, params = {}) {
1994
+ let url = this.urls['api']['ws']['private'];
1995
+ const sandboxMode = this.safeBool2(this.options, 'sandboxMode', 'sandbox', false);
1996
+ if (sandboxMode) {
1997
+ const instType = this.safeString(args, 'instType');
1998
+ if ((instType !== 'SCOIN-FUTURES') && (instType !== 'SUSDT-FUTURES') && (instType !== 'SUSDC-FUTURES')) {
1999
+ url = this.urls['api']['demo']['private'];
2000
+ }
2001
+ }
2002
+ await this.authenticate({ 'url': url });
2003
+ const request = {
2004
+ 'op': 'subscribe',
2005
+ 'args': [args],
2006
+ };
2007
+ const message = this.extend(request, params);
2008
+ return await this.watch(url, messageHash, message, subscriptionHash);
2009
+ }
2010
+ handleAuthenticate(client, message) {
2011
+ //
2012
+ // { event: "login", code: 0 }
2013
+ //
2014
+ const messageHash = 'authenticated';
2015
+ const future = this.safeValue(client.futures, messageHash);
2016
+ future.resolve(true);
2017
+ }
2018
+ handleErrorMessage(client, message) {
2019
+ //
2020
+ // { event: "error", code: 30015, msg: "Invalid sign" }
2021
+ //
2022
+ const event = this.safeString(message, 'event');
2023
+ try {
2024
+ if (event === 'error') {
2025
+ const code = this.safeString(message, 'code');
2026
+ const feedback = this.id + ' ' + this.json(message);
2027
+ this.throwExactlyMatchedException(this.exceptions['ws']['exact'], code, feedback);
2028
+ const msg = this.safeString(message, 'msg', '');
2029
+ this.throwBroadlyMatchedException(this.exceptions['ws']['broad'], msg, feedback);
2030
+ throw new ExchangeError(feedback);
2031
+ }
2032
+ return false;
2033
+ }
2034
+ catch (e) {
2035
+ if (e instanceof AuthenticationError) {
2036
+ const messageHash = 'authenticated';
2037
+ client.reject(e, messageHash);
2038
+ if (messageHash in client.subscriptions) {
2039
+ delete client.subscriptions[messageHash];
2040
+ }
2041
+ }
2042
+ else {
2043
+ // Note: if error happens on a subscribe event, user will have to close exchange to resubscribe. Issue #19041
2044
+ client.reject(e);
2045
+ }
2046
+ return true;
2047
+ }
2048
+ }
2049
+ handleMessage(client, message) {
2050
+ //
2051
+ // {
2052
+ // "action": "snapshot",
2053
+ // "arg": { instType: 'SPOT', channel: "ticker", instId: "BTCUSDT" },
2054
+ // "data": [
2055
+ // {
2056
+ // "instId": "BTCUSDT",
2057
+ // "last": "21150.53",
2058
+ // "open24h": "20759.65",
2059
+ // "high24h": "21202.29",
2060
+ // "low24h": "20518.82",
2061
+ // "bestBid": "21150.500000",
2062
+ // "bestAsk": "21150.600000",
2063
+ // "baseVolume": "25402.1961",
2064
+ // "quoteVolume": "530452554.2156",
2065
+ // "ts": 1656408934044,
2066
+ // "labeId": 0
2067
+ // }
2068
+ // ]
2069
+ // }
2070
+ // pong message
2071
+ // "pong"
2072
+ //
2073
+ // login
2074
+ //
2075
+ // { event: "login", code: 0 }
2076
+ //
2077
+ // subscribe
2078
+ //
2079
+ // {
2080
+ // "event": "subscribe",
2081
+ // "arg": { instType: 'SPOT', channel: "account", instId: "default" }
2082
+ // }
2083
+ // unsubscribe
2084
+ // {
2085
+ // "op":"unsubscribe",
2086
+ // "args":[
2087
+ // {
2088
+ // "instType":"USDT-FUTURES",
2089
+ // "channel":"ticker",
2090
+ // "instId":"BTCUSDT"
2091
+ // }
2092
+ // ]
2093
+ // }
2094
+ //
2095
+ // uta
2096
+ //
2097
+ // {
2098
+ // "action": "snapshot",
2099
+ // "arg": { "instType": "spot", topic: "ticker", symbol: "BTCUSDT" },
2100
+ // "data": [
2101
+ // {
2102
+ // "highPrice24h": "120255.61",
2103
+ // "lowPrice24h": "116145.88",
2104
+ // "openPrice24h": "118919.38",
2105
+ // "lastPrice": "119818.83",
2106
+ // "turnover24h": "215859996.272276",
2107
+ // "volume24h": "1819.756798",
2108
+ // "bid1Price": "119811.26",
2109
+ // "ask1Price": "119831.18",
2110
+ // "bid1Size": "0.008732",
2111
+ // "ask1Size": "0.004297",
2112
+ // "price24hPcnt": "0.02002"
2113
+ // }
2114
+ // ],
2115
+ // "ts": 1753230479687
2116
+ // }
2117
+ //
2118
+ if (this.handleErrorMessage(client, message)) {
2119
+ return;
2120
+ }
2121
+ const content = this.safeString(message, 'message');
2122
+ if (content === 'pong') {
2123
+ this.handlePong(client, message);
2124
+ return;
2125
+ }
2126
+ if (message === 'pong') {
2127
+ this.handlePong(client, message);
2128
+ return;
2129
+ }
2130
+ const event = this.safeString(message, 'event');
2131
+ if (event === 'login') {
2132
+ this.handleAuthenticate(client, message);
2133
+ return;
2134
+ }
2135
+ if (event === 'subscribe') {
2136
+ this.handleSubscriptionStatus(client, message);
2137
+ return;
2138
+ }
2139
+ if (event === 'unsubscribe') {
2140
+ this.handleUnSubscriptionStatus(client, message);
2141
+ return;
2142
+ }
2143
+ const methods = {
2144
+ 'ticker': this.handleTicker,
2145
+ 'trade': this.handleTrades,
2146
+ 'fill': this.handleMyTrades,
2147
+ 'orders': this.handleOrder,
2148
+ 'ordersAlgo': this.handleOrder,
2149
+ 'orders-algo': this.handleOrder,
2150
+ 'orders-crossed': this.handleOrder,
2151
+ 'orders-isolated': this.handleOrder,
2152
+ 'account': this.handleBalance,
2153
+ 'positions': this.handlePositions,
2154
+ 'account-isolated': this.handleBalance,
2155
+ 'account-crossed': this.handleBalance,
2156
+ };
2157
+ const arg = this.safeValue(message, 'arg', {});
2158
+ const topic = this.safeValue2(arg, 'channel', 'topic', '');
2159
+ const method = this.safeValue(methods, topic);
2160
+ if (method !== undefined) {
2161
+ method.call(this, client, message);
2162
+ }
2163
+ if (topic.indexOf('candle') >= 0) {
2164
+ this.handleOHLCV(client, message);
2165
+ }
2166
+ if (topic.indexOf('books') >= 0) {
2167
+ this.handleOrderBook(client, message);
2168
+ }
2169
+ }
2170
+ ping(client) {
2171
+ return 'ping';
2172
+ }
2173
+ handlePong(client, message) {
2174
+ client.lastPong = this.milliseconds();
2175
+ return message;
2176
+ }
2177
+ handleSubscriptionStatus(client, message) {
2178
+ //
2179
+ // {
2180
+ // "event": "subscribe",
2181
+ // "arg": { instType: 'SPOT', channel: "account", instId: "default" }
2182
+ // }
2183
+ //
2184
+ return message;
2185
+ }
2186
+ handleOrderBookUnSubscription(client, message) {
2187
+ //
2188
+ // {"event":"unsubscribe","arg":{"instType":"SPOT","channel":"books","instId":"BTCUSDT"}}
2189
+ //
2190
+ const arg = this.safeDict(message, 'arg', {});
2191
+ const instType = this.safeStringLower(arg, 'instType');
2192
+ const type = (instType === 'spot') ? 'spot' : 'contract';
2193
+ const instId = this.safeString(arg, 'instId');
2194
+ const market = this.safeMarket(instId, undefined, undefined, type);
2195
+ const symbol = market['symbol'];
2196
+ const messageHash = 'unsubscribe:orderbook:' + market['symbol'];
2197
+ const subMessageHash = 'orderbook:' + symbol;
2198
+ if (symbol in this.orderbooks) {
2199
+ delete this.orderbooks[symbol];
2200
+ }
2201
+ if (subMessageHash in client.subscriptions) {
2202
+ delete client.subscriptions[subMessageHash];
2203
+ }
2204
+ if (messageHash in client.subscriptions) {
2205
+ delete client.subscriptions[messageHash];
2206
+ }
2207
+ const error = new UnsubscribeError(this.id + ' orderbook ' + symbol);
2208
+ client.reject(error, subMessageHash);
2209
+ client.resolve(true, messageHash);
2210
+ }
2211
+ handleTradesUnSubscription(client, message) {
2212
+ //
2213
+ // {"event":"unsubscribe","arg":{"instType":"SPOT","channel":"trade","instId":"BTCUSDT"}}
2214
+ //
2215
+ const arg = this.safeDict(message, 'arg', {});
2216
+ const instType = this.safeStringLower(arg, 'instType');
2217
+ const type = (instType === 'spot') ? 'spot' : 'contract';
2218
+ const instId = this.safeString(arg, 'instId');
2219
+ const market = this.safeMarket(instId, undefined, undefined, type);
2220
+ const symbol = market['symbol'];
2221
+ const messageHash = 'unsubscribe:trade:' + market['symbol'];
2222
+ const subMessageHash = 'trade:' + symbol;
2223
+ if (symbol in this.trades) {
2224
+ delete this.trades[symbol];
2225
+ }
2226
+ if (subMessageHash in client.subscriptions) {
2227
+ delete client.subscriptions[subMessageHash];
2228
+ }
2229
+ if (messageHash in client.subscriptions) {
2230
+ delete client.subscriptions[messageHash];
2231
+ }
2232
+ const error = new UnsubscribeError(this.id + ' trades ' + symbol);
2233
+ client.reject(error, subMessageHash);
2234
+ client.resolve(true, messageHash);
2235
+ }
2236
+ handleTickerUnSubscription(client, message) {
2237
+ //
2238
+ // {"event":"unsubscribe","arg":{"instType":"SPOT","channel":"trade","instId":"BTCUSDT"}}
2239
+ //
2240
+ const arg = this.safeDict(message, 'arg', {});
2241
+ const instType = this.safeStringLower(arg, 'instType');
2242
+ const type = (instType === 'spot') ? 'spot' : 'contract';
2243
+ const instId = this.safeString2(arg, 'instId', 'symbol');
2244
+ const market = this.safeMarket(instId, undefined, undefined, type);
2245
+ const symbol = market['symbol'];
2246
+ const messageHash = 'unsubscribe:ticker:' + market['symbol'];
2247
+ const subMessageHash = 'ticker:' + symbol;
2248
+ if (symbol in this.tickers) {
2249
+ delete this.tickers[symbol];
2250
+ }
2251
+ if (subMessageHash in client.subscriptions) {
2252
+ delete client.subscriptions[subMessageHash];
2253
+ }
2254
+ if (messageHash in client.subscriptions) {
2255
+ delete client.subscriptions[messageHash];
2256
+ }
2257
+ const error = new UnsubscribeError(this.id + ' ticker ' + symbol);
2258
+ client.reject(error, subMessageHash);
2259
+ client.resolve(true, messageHash);
2260
+ }
2261
+ handleOHLCVUnSubscription(client, message) {
2262
+ //
2263
+ // {"event":"unsubscribe","arg":{"instType":"SPOT","channel":"candle1m","instId":"BTCUSDT"}}
2264
+ //
2265
+ const arg = this.safeDict(message, 'arg', {});
2266
+ const instType = this.safeStringLower(arg, 'instType');
2267
+ const type = (instType === 'spot') ? 'spot' : 'contract';
2268
+ const instId = this.safeString(arg, 'instId');
2269
+ const channel = this.safeString(arg, 'channel');
2270
+ const interval = channel.replace('candle', '');
2271
+ const timeframes = this.safeValue(this.options, 'timeframes');
2272
+ const timeframe = this.findTimeframe(interval, timeframes);
2273
+ const market = this.safeMarket(instId, undefined, undefined, type);
2274
+ const symbol = market['symbol'];
2275
+ const messageHash = 'unsubscribe:candles:' + timeframe + ':' + market['symbol'];
2276
+ const subMessageHash = 'candles:' + timeframe + ':' + symbol;
2277
+ if (symbol in this.ohlcvs) {
2278
+ if (timeframe in this.ohlcvs[symbol]) {
2279
+ delete this.ohlcvs[symbol][timeframe];
2280
+ }
2281
+ }
2282
+ this.cleanUnsubscription(client, subMessageHash, messageHash);
2283
+ }
2284
+ handleUnSubscriptionStatus(client, message) {
2285
+ //
2286
+ // {
2287
+ // "op":"unsubscribe",
2288
+ // "args":[
2289
+ // {
2290
+ // "instType":"USDT-FUTURES",
2291
+ // "channel":"ticker",
2292
+ // "instId":"BTCUSDT"
2293
+ // },
2294
+ // {
2295
+ // "instType":"USDT-FUTURES",
2296
+ // "channel":"candle1m",
2297
+ // "instId":"BTCUSDT"
2298
+ // }
2299
+ // ]
2300
+ // }
2301
+ // or
2302
+ // {"event":"unsubscribe","arg":{"instType":"SPOT","channel":"books","instId":"BTCUSDT"}}
2303
+ //
2304
+ let argsList = this.safeList(message, 'args');
2305
+ if (argsList === undefined) {
2306
+ argsList = [this.safeDict(message, 'arg', {})];
2307
+ }
2308
+ for (let i = 0; i < argsList.length; i++) {
2309
+ const arg = argsList[i];
2310
+ const channel = this.safeString2(arg, 'channel', 'topic');
2311
+ if (channel === 'books') {
2312
+ // for now only unWatchOrderBook is supporteod
2313
+ this.handleOrderBookUnSubscription(client, message);
2314
+ }
2315
+ else if (channel === 'trade') {
2316
+ this.handleTradesUnSubscription(client, message);
2317
+ }
2318
+ else if (channel === 'ticker') {
2319
+ this.handleTickerUnSubscription(client, message);
2320
+ }
2321
+ else if (channel.startsWith('candle')) {
2322
+ this.handleOHLCVUnSubscription(client, message);
2323
+ }
2324
+ }
2325
+ return message;
2326
+ }
2327
+ }