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,2415 @@
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 htxRest from '../htx.js';
9
+ import { ExchangeError, InvalidNonce, ChecksumError, ArgumentsRequired, BadRequest, BadSymbol, AuthenticationError, NetworkError } from '../base/errors.js';
10
+ import { ArrayCache, ArrayCacheByTimestamp, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide } from '../base/ws/Cache.js';
11
+ import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
12
+ // ---------------------------------------------------------------------------
13
+ export default class htx extends htxRest {
14
+ describe() {
15
+ return this.deepExtend(super.describe(), {
16
+ 'has': {
17
+ 'ws': true,
18
+ 'createOrderWs': false,
19
+ 'editOrderWs': false,
20
+ 'fetchOpenOrdersWs': false,
21
+ 'fetchOrderWs': false,
22
+ 'cancelOrderWs': false,
23
+ 'cancelOrdersWs': false,
24
+ 'cancelAllOrdersWs': false,
25
+ 'fetchTradesWs': false,
26
+ 'fetchBalanceWs': false,
27
+ 'watchOrderBook': true,
28
+ 'watchOrders': true,
29
+ 'watchTickers': false,
30
+ 'watchTicker': true,
31
+ 'watchTrades': true,
32
+ 'watchTradesForSymbols': false,
33
+ 'watchMyTrades': true,
34
+ 'watchBalance': true,
35
+ 'watchOHLCV': true,
36
+ },
37
+ 'urls': {
38
+ 'api': {
39
+ 'ws': {
40
+ 'api': {
41
+ 'spot': {
42
+ 'public': 'wss://{hostname}/ws',
43
+ 'private': 'wss://{hostname}/ws/v2',
44
+ 'feed': 'wss://{hostname}/feed',
45
+ },
46
+ 'future': {
47
+ 'linear': {
48
+ 'public': 'wss://api.hbdm.com/linear-swap-ws',
49
+ 'private': 'wss://api.hbdm.com/linear-swap-notification',
50
+ },
51
+ 'inverse': {
52
+ 'public': 'wss://api.hbdm.com/ws',
53
+ 'private': 'wss://api.hbdm.com/notification',
54
+ },
55
+ },
56
+ 'swap': {
57
+ 'inverse': {
58
+ 'public': 'wss://api.hbdm.com/swap-ws',
59
+ 'private': 'wss://api.hbdm.com/swap-notification',
60
+ },
61
+ 'linear': {
62
+ 'public': 'wss://api.hbdm.com/linear-swap-ws',
63
+ 'private': 'wss://api.hbdm.com/linear-swap-notification',
64
+ },
65
+ },
66
+ },
67
+ // these settings work faster for clients hosted on AWS
68
+ 'api-aws': {
69
+ 'spot': {
70
+ 'public': 'wss://api-aws.huobi.pro/ws',
71
+ 'private': 'wss://api-aws.huobi.pro/ws/v2',
72
+ 'feed': 'wss://{hostname}/feed',
73
+ },
74
+ 'future': {
75
+ 'linear': {
76
+ 'public': 'wss://api.hbdm.vn/linear-swap-ws',
77
+ 'private': 'wss://api.hbdm.vn/linear-swap-notification',
78
+ },
79
+ 'inverse': {
80
+ 'public': 'wss://api.hbdm.vn/ws',
81
+ 'private': 'wss://api.hbdm.vn/notification',
82
+ },
83
+ },
84
+ 'swap': {
85
+ 'linear': {
86
+ 'public': 'wss://api.hbdm.vn/linear-swap-ws',
87
+ 'private': 'wss://api.hbdm.vn/linear-swap-notification',
88
+ },
89
+ 'inverse': {
90
+ 'public': 'wss://api.hbdm.vn/swap-ws',
91
+ 'private': 'wss://api.hbdm.vn/swap-notification',
92
+ },
93
+ },
94
+ },
95
+ },
96
+ },
97
+ },
98
+ 'options': {
99
+ 'tradesLimit': 1000,
100
+ 'OHLCVLimit': 1000,
101
+ 'api': 'api',
102
+ 'watchOrderBook': {
103
+ 'maxRetries': 3,
104
+ 'checksum': true,
105
+ },
106
+ 'ws': {
107
+ 'gunzip': true,
108
+ },
109
+ 'watchTicker': {
110
+ 'name': 'market.{marketId}.detail', // 'market.{marketId}.bbo' or 'market.{marketId}.ticker'
111
+ },
112
+ },
113
+ 'exceptions': {
114
+ 'ws': {
115
+ 'exact': {
116
+ 'bad-request': BadRequest,
117
+ '2002': AuthenticationError,
118
+ '2021': BadRequest,
119
+ '2001': BadSymbol,
120
+ '2011': BadSymbol,
121
+ '2040': BadRequest,
122
+ '4007': BadRequest, // { op: 'sub', cid: '1', topic: 'accounts_unify.USDT', 'err-code': 4007, 'err-msg': 'Non - single account user is not available, please check through the cross and isolated account asset interface', ts: 1698419318540 }
123
+ },
124
+ },
125
+ },
126
+ });
127
+ }
128
+ requestId() {
129
+ const requestId = this.sum(this.safeInteger(this.options, 'requestId', 0), 1);
130
+ this.options['requestId'] = requestId;
131
+ return requestId.toString();
132
+ }
133
+ /**
134
+ * @method
135
+ * @name htx#watchTicker
136
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
137
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53561-7773-11ed-9966-0242ac110003
138
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c33ab2-77ae-11ed-9966-0242ac110003
139
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
140
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
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 options = this.safeValue(this.options, 'watchTicker', {});
148
+ const topic = this.safeString(options, 'name', 'market.{marketId}.detail');
149
+ if (topic === 'market.{marketId}.ticker' && market['type'] !== 'spot') {
150
+ throw new BadRequest(this.id + ' watchTicker() with name market.{marketId}.ticker is only allowed for spot markets, use market.{marketId}.detail instead');
151
+ }
152
+ const messageHash = this.implodeParams(topic, { 'marketId': market['id'] });
153
+ const url = this.getUrlByMarketType(market['type'], market['linear']);
154
+ return await this.subscribePublic(url, symbol, messageHash, undefined, params);
155
+ }
156
+ handleTicker(client, message) {
157
+ //
158
+ // "market.btcusdt.detail"
159
+ // {
160
+ // "ch": "market.btcusdt.detail",
161
+ // "ts": 1583494163784,
162
+ // "tick": {
163
+ // "id": 209988464418,
164
+ // "low": 8988,
165
+ // "high": 9155.41,
166
+ // "open": 9078.91,
167
+ // "close": 9136.46,
168
+ // "vol": 237813910.5928412,
169
+ // "amount": 26184.202558551195,
170
+ // "version": 209988464418,
171
+ // "count": 265673
172
+ // }
173
+ // }
174
+ // "market.btcusdt.bbo"
175
+ // {
176
+ // "ch": "market.btcusdt.bbo",
177
+ // "ts": 1671941599613,
178
+ // "tick": {
179
+ // "seqId": 161499562790,
180
+ // "ask": 16829.51,
181
+ // "askSize": 0.707776,
182
+ // "bid": 16829.5,
183
+ // "bidSize": 1.685945,
184
+ // "quoteTime": 1671941599612,
185
+ // "symbol": "btcusdt"
186
+ // }
187
+ // }
188
+ //
189
+ const tick = this.safeValue(message, 'tick', {});
190
+ const ch = this.safeString(message, 'ch');
191
+ const parts = ch.split('.');
192
+ const marketId = this.safeString(parts, 1);
193
+ const market = this.safeMarket(marketId);
194
+ const ticker = this.parseTicker(tick, market);
195
+ const timestamp = this.safeValue(message, 'ts');
196
+ ticker['timestamp'] = timestamp;
197
+ ticker['datetime'] = this.iso8601(timestamp);
198
+ const symbol = ticker['symbol'];
199
+ this.tickers[symbol] = ticker;
200
+ client.resolve(ticker, ch);
201
+ return message;
202
+ }
203
+ /**
204
+ * @method
205
+ * @name htx#watchTrades
206
+ * @description get the list of most recent trades for a particular symbol
207
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53b69-7773-11ed-9966-0242ac110003
208
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c33c21-77ae-11ed-9966-0242ac110003
209
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c33cfe-77ae-11ed-9966-0242ac110003
210
+ * @param {string} symbol unified symbol of the market to fetch trades for
211
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
212
+ * @param {int} [limit] the maximum amount of trades to fetch
213
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
214
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
215
+ */
216
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
217
+ await this.loadMarkets();
218
+ const market = this.market(symbol);
219
+ symbol = market['symbol'];
220
+ const messageHash = 'market.' + market['id'] + '.trade.detail';
221
+ const url = this.getUrlByMarketType(market['type'], market['linear']);
222
+ const trades = await this.subscribePublic(url, symbol, messageHash, undefined, params);
223
+ if (this.newUpdates) {
224
+ limit = trades.getLimit(symbol, limit);
225
+ }
226
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
227
+ }
228
+ handleTrades(client, message) {
229
+ //
230
+ // {
231
+ // "ch": "market.btcusdt.trade.detail",
232
+ // "ts": 1583495834011,
233
+ // "tick": {
234
+ // "id": 105004645372,
235
+ // "ts": 1583495833751,
236
+ // "data": [
237
+ // {
238
+ // "id": 1.050046453727319e+22,
239
+ // "ts": 1583495833751,
240
+ // "tradeId": 102090727790,
241
+ // "amount": 0.003893,
242
+ // "price": 9150.01,
243
+ // "direction": "sell"
244
+ // }
245
+ // ]
246
+ // }
247
+ // }
248
+ //
249
+ const tick = this.safeValue(message, 'tick', {});
250
+ const data = this.safeValue(tick, 'data', {});
251
+ const ch = this.safeString(message, 'ch');
252
+ const parts = ch.split('.');
253
+ const marketId = this.safeString(parts, 1);
254
+ const market = this.safeMarket(marketId);
255
+ const symbol = market['symbol'];
256
+ let tradesCache = this.safeValue(this.trades, symbol);
257
+ if (tradesCache === undefined) {
258
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
259
+ tradesCache = new ArrayCache(limit);
260
+ this.trades[symbol] = tradesCache;
261
+ }
262
+ for (let i = 0; i < data.length; i++) {
263
+ const trade = this.parseTrade(data[i], market);
264
+ tradesCache.append(trade);
265
+ }
266
+ client.resolve(tradesCache, ch);
267
+ return message;
268
+ }
269
+ /**
270
+ * @method
271
+ * @name htx#watchOHLCV
272
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
273
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53241-7773-11ed-9966-0242ac110003
274
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c3346a-77ae-11ed-9966-0242ac110003
275
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c33563-77ae-11ed-9966-0242ac110003
276
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
277
+ * @param {string} timeframe the length of time each candle represents
278
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
279
+ * @param {int} [limit] the maximum amount of candles to fetch
280
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
281
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
282
+ */
283
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
284
+ await this.loadMarkets();
285
+ const market = this.market(symbol);
286
+ symbol = market['symbol'];
287
+ const interval = this.safeString(this.timeframes, timeframe, timeframe);
288
+ const messageHash = 'market.' + market['id'] + '.kline.' + interval;
289
+ const url = this.getUrlByMarketType(market['type'], market['linear']);
290
+ const ohlcv = await this.subscribePublic(url, symbol, messageHash, undefined, params);
291
+ if (this.newUpdates) {
292
+ limit = ohlcv.getLimit(symbol, limit);
293
+ }
294
+ return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
295
+ }
296
+ handleOHLCV(client, message) {
297
+ //
298
+ // {
299
+ // "ch": "market.btcusdt.kline.1min",
300
+ // "ts": 1583501786794,
301
+ // "tick": {
302
+ // "id": 1583501760,
303
+ // "open": 9094.5,
304
+ // "close": 9094.51,
305
+ // "low": 9094.5,
306
+ // "high": 9094.51,
307
+ // "amount": 0.44639786263800907,
308
+ // "vol": 4059.76919054,
309
+ // "count": 16
310
+ // }
311
+ // }
312
+ //
313
+ const ch = this.safeString(message, 'ch');
314
+ const parts = ch.split('.');
315
+ const marketId = this.safeString(parts, 1);
316
+ const market = this.safeMarket(marketId);
317
+ const symbol = market['symbol'];
318
+ const interval = this.safeString(parts, 3);
319
+ const timeframe = this.findTimeframe(interval);
320
+ this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
321
+ let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
322
+ if (stored === undefined) {
323
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
324
+ stored = new ArrayCacheByTimestamp(limit);
325
+ this.ohlcvs[symbol][timeframe] = stored;
326
+ }
327
+ const tick = this.safeValue(message, 'tick');
328
+ const parsed = this.parseOHLCV(tick, market);
329
+ stored.append(parsed);
330
+ client.resolve(stored, ch);
331
+ }
332
+ /**
333
+ * @method
334
+ * @name htx#watchOrderBook
335
+ * @see https://huobiapi.github.io/docs/dm/v1/en/#subscribe-market-depth-data
336
+ * @see https://huobiapi.github.io/docs/coin_margined_swap/v1/en/#subscribe-incremental-market-depth-data
337
+ * @see https://huobiapi.github.io/docs/usdt_swap/v1/en/#general-subscribe-incremental-market-depth-data
338
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
339
+ * @param {string} symbol unified symbol of the market to fetch the order book for
340
+ * @param {int} [limit] the maximum amount of order book entries to return
341
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
342
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
343
+ */
344
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
345
+ await this.loadMarkets();
346
+ const market = this.market(symbol);
347
+ symbol = market['symbol'];
348
+ const allowedLimits = [20, 150];
349
+ // 2) 5-level/20-level incremental MBP is a tick by tick feed,
350
+ // which means whenever there is an order book change at that level, it pushes an update;
351
+ // 150-levels/400-level incremental MBP feed is based on the gap
352
+ // between two snapshots at 100ms interval.
353
+ if (limit === undefined) {
354
+ limit = market['spot'] ? 150 : 20;
355
+ }
356
+ if (!this.inArray(limit, allowedLimits)) {
357
+ throw new ExchangeError(this.id + ' watchOrderBook market accepts limits of 20 and 150 only');
358
+ }
359
+ let messageHash = undefined;
360
+ if (market['spot']) {
361
+ messageHash = 'market.' + market['id'] + '.mbp.' + limit.toString();
362
+ }
363
+ else {
364
+ messageHash = 'market.' + market['id'] + '.depth.size_' + limit.toString() + '.high_freq';
365
+ }
366
+ const url = this.getUrlByMarketType(market['type'], market['linear'], false, true);
367
+ let method = this.handleOrderBookSubscription;
368
+ if (!market['spot']) {
369
+ params = this.extend(params);
370
+ params['data_type'] = 'incremental';
371
+ method = undefined;
372
+ }
373
+ const orderbook = await this.subscribePublic(url, symbol, messageHash, method, params);
374
+ return orderbook.limit();
375
+ }
376
+ handleOrderBookSnapshot(client, message, subscription) {
377
+ //
378
+ // {
379
+ // "id": 1583473663565,
380
+ // "rep": "market.btcusdt.mbp.150",
381
+ // "status": "ok",
382
+ // "ts": 1698359289261,
383
+ // "data": {
384
+ // "seqNum": 104999417756,
385
+ // "bids": [
386
+ // [9058.27, 0],
387
+ // [9058.43, 0],
388
+ // [9058.99, 0],
389
+ // ],
390
+ // "asks": [
391
+ // [9084.27, 0.2],
392
+ // [9085.69, 0],
393
+ // [9085.81, 0],
394
+ // ]
395
+ // }
396
+ // }
397
+ //
398
+ const symbol = this.safeString(subscription, 'symbol');
399
+ const messageHash = this.safeString(subscription, 'messageHash');
400
+ const id = this.safeString(message, 'id');
401
+ const lastTimestamp = this.safeInteger(subscription, 'lastTimestamp');
402
+ try {
403
+ const orderbook = this.orderbooks[symbol];
404
+ const data = this.safeValue(message, 'data');
405
+ const messages = orderbook.cache;
406
+ const firstMessage = this.safeValue(messages, 0, {});
407
+ const snapshot = this.parseOrderBook(data, symbol);
408
+ const tick = this.safeValue(firstMessage, 'tick');
409
+ const sequence = this.safeInteger(tick, 'prevSeqNum');
410
+ const nonce = this.safeInteger(data, 'seqNum');
411
+ snapshot['nonce'] = nonce;
412
+ const snapshotTimestamp = this.safeInteger(message, 'ts');
413
+ subscription['lastTimestamp'] = snapshotTimestamp;
414
+ const snapshotLimit = this.safeInteger(subscription, 'limit');
415
+ const snapshotOrderBook = this.orderBook(snapshot, snapshotLimit);
416
+ client.resolve(snapshotOrderBook, id);
417
+ if ((sequence === undefined) || (nonce < sequence)) {
418
+ const maxAttempts = this.handleOption('watchOrderBook', 'maxRetries', 3);
419
+ let numAttempts = this.safeInteger(subscription, 'numAttempts', 0);
420
+ // retry to synchronize if we have not reached maxAttempts yet
421
+ if (numAttempts < maxAttempts) {
422
+ // safety guard
423
+ if (messageHash in client.subscriptions) {
424
+ numAttempts = this.sum(numAttempts, 1);
425
+ const delayTime = this.sum(1000, lastTimestamp - snapshotTimestamp);
426
+ subscription['numAttempts'] = numAttempts;
427
+ client.subscriptions[messageHash] = subscription;
428
+ this.delay(delayTime, this.watchOrderBookSnapshot, client, message, subscription);
429
+ }
430
+ }
431
+ else {
432
+ // throw upon failing to synchronize in maxAttempts
433
+ throw new InvalidNonce(this.id + ' failed to synchronize WebSocket feed with the snapshot for symbol ' + symbol + ' in ' + maxAttempts.toString() + ' attempts');
434
+ }
435
+ }
436
+ else {
437
+ orderbook.reset(snapshot);
438
+ // unroll the accumulated deltas
439
+ for (let i = 0; i < messages.length; i++) {
440
+ this.handleOrderBookMessage(client, messages[i]);
441
+ }
442
+ orderbook.cache = [];
443
+ this.orderbooks[symbol] = orderbook;
444
+ client.resolve(orderbook, messageHash);
445
+ }
446
+ }
447
+ catch (e) {
448
+ delete client.subscriptions[messageHash];
449
+ delete this.orderbooks[symbol];
450
+ client.reject(e, messageHash);
451
+ }
452
+ }
453
+ async watchOrderBookSnapshot(client, message, subscription) {
454
+ const messageHash = this.safeString(subscription, 'messageHash');
455
+ const symbol = this.safeString(subscription, 'symbol');
456
+ const limit = this.safeInteger(subscription, 'limit');
457
+ const timestamp = this.safeInteger(message, 'ts');
458
+ const params = this.safeValue(subscription, 'params');
459
+ const attempts = this.safeInteger(subscription, 'numAttempts', 0);
460
+ const market = this.market(symbol);
461
+ const url = this.getUrlByMarketType(market['type'], market['linear'], false, true);
462
+ const requestId = this.requestId();
463
+ const request = {
464
+ 'req': messageHash,
465
+ 'id': requestId,
466
+ };
467
+ // this is a temporary subscription by a specific requestId
468
+ // it has a very short lifetime until the snapshot is received over ws
469
+ const snapshotSubscription = {
470
+ 'id': requestId,
471
+ 'messageHash': messageHash,
472
+ 'symbol': symbol,
473
+ 'limit': limit,
474
+ 'params': params,
475
+ 'numAttempts': attempts,
476
+ 'lastTimestamp': timestamp,
477
+ 'method': this.handleOrderBookSnapshot,
478
+ };
479
+ try {
480
+ const orderbook = await this.watch(url, requestId, request, requestId, snapshotSubscription);
481
+ return orderbook.limit();
482
+ }
483
+ catch (e) {
484
+ delete client.subscriptions[messageHash];
485
+ client.reject(e, messageHash);
486
+ }
487
+ return undefined;
488
+ }
489
+ handleDelta(bookside, delta) {
490
+ const price = this.safeFloat(delta, 0);
491
+ const amount = this.safeFloat(delta, 1);
492
+ bookside.store(price, amount);
493
+ }
494
+ handleDeltas(bookside, deltas) {
495
+ for (let i = 0; i < deltas.length; i++) {
496
+ this.handleDelta(bookside, deltas[i]);
497
+ }
498
+ }
499
+ handleOrderBookMessage(client, message) {
500
+ // spot markets
501
+ //
502
+ // {
503
+ // "ch": "market.btcusdt.mbp.150",
504
+ // "ts": 1583472025885,
505
+ // "tick": {
506
+ // "seqNum": 104998984994,
507
+ // "prevSeqNum": 104998984977,
508
+ // "bids": [
509
+ // [9058.27, 0],
510
+ // [9058.43, 0],
511
+ // [9058.99, 0],
512
+ // ],
513
+ // "asks": [
514
+ // [9084.27, 0.2],
515
+ // [9085.69, 0],
516
+ // [9085.81, 0],
517
+ // ]
518
+ // }
519
+ // }
520
+ //
521
+ // non-spot market update
522
+ //
523
+ // {
524
+ // "ch":"market.BTC220218.depth.size_150.high_freq",
525
+ // "tick":{
526
+ // "asks":[],
527
+ // "bids":[
528
+ // [43445.74,1],
529
+ // [43444.48,0 ],
530
+ // [40593.92,9]
531
+ // ],
532
+ // "ch":"market.BTC220218.depth.size_150.high_freq",
533
+ // "event":"update",
534
+ // "id":152727500274,
535
+ // "mrid":152727500274,
536
+ // "ts":1645023376098,
537
+ // "version":37536690
538
+ // },
539
+ // "ts":1645023376098
540
+ // }
541
+ // non-spot market snapshot
542
+ //
543
+ // {
544
+ // "ch":"market.BTC220218.depth.size_150.high_freq",
545
+ // "tick":{
546
+ // "asks":[
547
+ // [43445.74,1],
548
+ // [43444.48,0 ],
549
+ // [40593.92,9]
550
+ // ],
551
+ // "bids":[
552
+ // [43445.74,1],
553
+ // [43444.48,0 ],
554
+ // [40593.92,9]
555
+ // ],
556
+ // "ch":"market.BTC220218.depth.size_150.high_freq",
557
+ // "event":"snapshot",
558
+ // "id":152727500274,
559
+ // "mrid":152727500274,
560
+ // "ts":1645023376098,
561
+ // "version":37536690
562
+ // },
563
+ // "ts":1645023376098
564
+ // }
565
+ //
566
+ const ch = this.safeValue(message, 'ch');
567
+ const parts = ch.split('.');
568
+ const marketId = this.safeString(parts, 1);
569
+ const market = this.safeMarket(marketId);
570
+ const symbol = market['symbol'];
571
+ const orderbook = this.orderbooks[symbol];
572
+ const tick = this.safeValue(message, 'tick', {});
573
+ const seqNum = this.safeInteger(tick, 'seqNum');
574
+ const prevSeqNum = this.safeInteger(tick, 'prevSeqNum');
575
+ const event = this.safeString(tick, 'event');
576
+ const version = this.safeInteger(tick, 'version');
577
+ const timestamp = this.safeInteger(message, 'ts');
578
+ if (event === 'snapshot') {
579
+ const snapshot = this.parseOrderBook(tick, symbol, timestamp);
580
+ orderbook.reset(snapshot);
581
+ orderbook['nonce'] = version;
582
+ }
583
+ if ((prevSeqNum !== undefined) && prevSeqNum > orderbook['nonce']) {
584
+ const checksum = this.handleOption('watchOrderBook', 'checksum', true);
585
+ if (checksum) {
586
+ throw new ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
587
+ }
588
+ }
589
+ const spotConditon = market['spot'] && (prevSeqNum === orderbook['nonce']);
590
+ const nonSpotCondition = market['contract'] && (version - 1 === orderbook['nonce']);
591
+ if (spotConditon || nonSpotCondition) {
592
+ const asks = this.safeValue(tick, 'asks', []);
593
+ const bids = this.safeValue(tick, 'bids', []);
594
+ this.handleDeltas(orderbook['asks'], asks);
595
+ this.handleDeltas(orderbook['bids'], bids);
596
+ orderbook['nonce'] = spotConditon ? seqNum : version;
597
+ orderbook['timestamp'] = timestamp;
598
+ orderbook['datetime'] = this.iso8601(timestamp);
599
+ }
600
+ }
601
+ handleOrderBook(client, message) {
602
+ //
603
+ // deltas
604
+ //
605
+ // spot markets
606
+ //
607
+ // {
608
+ // "ch": "market.btcusdt.mbp.150",
609
+ // "ts": 1583472025885,
610
+ // "tick": {
611
+ // "seqNum": 104998984994,
612
+ // "prevSeqNum": 104998984977,
613
+ // "bids": [
614
+ // [9058.27, 0],
615
+ // [9058.43, 0],
616
+ // [9058.99, 0],
617
+ // ],
618
+ // "asks": [
619
+ // [9084.27, 0.2],
620
+ // [9085.69, 0],
621
+ // [9085.81, 0],
622
+ // ]
623
+ // }
624
+ // }
625
+ //
626
+ // non spot markets
627
+ //
628
+ // {
629
+ // "ch":"market.BTC220218.depth.size_150.high_freq",
630
+ // "tick":{
631
+ // "asks":[],
632
+ // "bids":[
633
+ // [43445.74,1],
634
+ // [43444.48,0 ],
635
+ // [40593.92,9]
636
+ // ],
637
+ // "ch":"market.BTC220218.depth.size_150.high_freq",
638
+ // "event":"update",
639
+ // "id":152727500274,
640
+ // "mrid":152727500274,
641
+ // "ts":1645023376098,
642
+ // "version":37536690
643
+ // },
644
+ // "ts":1645023376098
645
+ // }
646
+ //
647
+ const messageHash = this.safeString(message, 'ch');
648
+ const tick = this.safeDict(message, 'tick');
649
+ const event = this.safeString(tick, 'event');
650
+ const ch = this.safeString(message, 'ch');
651
+ const parts = ch.split('.');
652
+ const marketId = this.safeString(parts, 1);
653
+ const symbol = this.safeSymbol(marketId);
654
+ if (!(symbol in this.orderbooks)) {
655
+ const size = this.safeString(parts, 3);
656
+ const sizeParts = size.split('_');
657
+ const limit = this.safeInteger(sizeParts, 1);
658
+ this.orderbooks[symbol] = this.orderBook({}, limit);
659
+ }
660
+ const orderbook = this.orderbooks[symbol];
661
+ if ((event === undefined) && (orderbook['nonce'] === undefined)) {
662
+ orderbook.cache.push(message);
663
+ }
664
+ else {
665
+ this.handleOrderBookMessage(client, message);
666
+ client.resolve(orderbook, messageHash);
667
+ }
668
+ }
669
+ handleOrderBookSubscription(client, message, subscription) {
670
+ const symbol = this.safeString(subscription, 'symbol');
671
+ const market = this.market(symbol);
672
+ const limit = this.safeInteger(subscription, 'limit');
673
+ this.orderbooks[symbol] = this.orderBook({}, limit);
674
+ if (market['spot']) {
675
+ this.spawn(this.watchOrderBookSnapshot, client, message, subscription);
676
+ }
677
+ }
678
+ /**
679
+ * @method
680
+ * @name htx#watchMyTrades
681
+ * @description watches information on multiple trades made by the user
682
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53dd5-7773-11ed-9966-0242ac110003
683
+ * @param {string} symbol unified market symbol of the market trades were made in
684
+ * @param {int} [since] the earliest time in ms to fetch trades for
685
+ * @param {int} [limit] the maximum number of trade structures to retrieve
686
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
687
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
688
+ */
689
+ async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
690
+ this.checkRequiredCredentials();
691
+ await this.loadMarkets();
692
+ let type = undefined;
693
+ let marketId = '*'; // wildcard
694
+ let market = undefined;
695
+ let messageHash = undefined;
696
+ let channel = undefined;
697
+ let trades = undefined;
698
+ let subType = undefined;
699
+ if (symbol !== undefined) {
700
+ market = this.market(symbol);
701
+ symbol = market['symbol'];
702
+ type = market['type'];
703
+ subType = market['linear'] ? 'linear' : 'inverse';
704
+ marketId = market['lowercaseId'];
705
+ }
706
+ else {
707
+ type = this.safeString(this.options, 'defaultType', 'spot');
708
+ type = this.safeString(params, 'type', type);
709
+ subType = this.safeString2(this.options, 'subType', 'defaultSubType', 'linear');
710
+ subType = this.safeString(params, 'subType', subType);
711
+ params = this.omit(params, ['type', 'subType']);
712
+ }
713
+ if (type === 'spot') {
714
+ let mode = undefined;
715
+ if (mode === undefined) {
716
+ mode = this.safeString2(this.options, 'watchMyTrades', 'mode', '0');
717
+ mode = this.safeString(params, 'mode', mode);
718
+ params = this.omit(params, 'mode');
719
+ }
720
+ messageHash = 'trade.clearing' + '#' + marketId + '#' + mode;
721
+ channel = messageHash;
722
+ }
723
+ else {
724
+ const channelAndMessageHash = this.getOrderChannelAndMessageHash(type, subType, market, params);
725
+ channel = this.safeString(channelAndMessageHash, 0);
726
+ const orderMessageHash = this.safeString(channelAndMessageHash, 1);
727
+ // we will take advantage of the order messageHash because already handles stuff
728
+ // like symbol/margin/subtype/type variations
729
+ messageHash = orderMessageHash + ':' + 'trade';
730
+ }
731
+ trades = await this.subscribePrivate(channel, messageHash, type, subType, params);
732
+ if (this.newUpdates) {
733
+ limit = trades.getLimit(symbol, limit);
734
+ }
735
+ return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
736
+ }
737
+ getOrderChannelAndMessageHash(type, subType, market = undefined, params = {}) {
738
+ let messageHash = undefined;
739
+ let channel = undefined;
740
+ let orderType = this.safeString(this.options, 'orderType', 'orders'); // orders or matchOrders
741
+ orderType = this.safeString(params, 'orderType', orderType);
742
+ params = this.omit(params, 'orderType');
743
+ const marketCode = (market !== undefined) ? market['lowercaseId'].toLowerCase() : undefined;
744
+ const baseId = (market !== undefined) ? market['baseId'] : undefined;
745
+ const prefix = orderType;
746
+ messageHash = prefix;
747
+ if (subType === 'linear') {
748
+ // USDT Margined Contracts Example: LTC/USDT:USDT
749
+ const marginMode = this.safeString(params, 'margin', 'cross');
750
+ const marginPrefix = (marginMode === 'cross') ? prefix + '_cross' : prefix;
751
+ messageHash = marginPrefix;
752
+ if (marketCode !== undefined) {
753
+ messageHash += '.' + marketCode;
754
+ channel = messageHash;
755
+ }
756
+ else {
757
+ channel = marginPrefix + '.' + '*';
758
+ }
759
+ }
760
+ else if (type === 'future') {
761
+ // inverse futures Example: BCH/USD:BCH-220408
762
+ if (baseId !== undefined) {
763
+ channel = prefix + '.' + baseId.toLowerCase();
764
+ messageHash = channel;
765
+ }
766
+ else {
767
+ channel = prefix + '.' + '*';
768
+ }
769
+ }
770
+ else {
771
+ // inverse swaps: Example: BTC/USD:BTC
772
+ if (marketCode !== undefined) {
773
+ channel = prefix + '.' + marketCode;
774
+ messageHash = channel;
775
+ }
776
+ else {
777
+ channel = prefix + '.' + '*';
778
+ }
779
+ }
780
+ return [channel, messageHash];
781
+ }
782
+ /**
783
+ * @method
784
+ * @name htx#watchOrders
785
+ * @description watches information on multiple orders made by the user
786
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53c8f-7773-11ed-9966-0242ac110003
787
+ * @param {string} symbol unified market symbol of the market orders were made in
788
+ * @param {int} [since] the earliest time in ms to fetch orders for
789
+ * @param {int} [limit] the maximum number of order structures to retrieve
790
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
791
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
792
+ */
793
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
794
+ await this.loadMarkets();
795
+ let type = undefined;
796
+ let subType = undefined;
797
+ let market = undefined;
798
+ let suffix = '*'; // wildcard
799
+ if (symbol !== undefined) {
800
+ market = this.market(symbol);
801
+ symbol = market['symbol'];
802
+ type = market['type'];
803
+ suffix = market['lowercaseId'];
804
+ subType = market['linear'] ? 'linear' : 'inverse';
805
+ }
806
+ else {
807
+ type = this.safeString(this.options, 'defaultType', 'spot');
808
+ type = this.safeString(params, 'type', type);
809
+ subType = this.safeString2(this.options, 'subType', 'defaultSubType', 'linear');
810
+ subType = this.safeString(params, 'subType', subType);
811
+ params = this.omit(params, ['type', 'subType']);
812
+ }
813
+ let messageHash = undefined;
814
+ let channel = undefined;
815
+ if (type === 'spot') {
816
+ messageHash = 'orders' + '#' + suffix;
817
+ channel = messageHash;
818
+ }
819
+ else {
820
+ const channelAndMessageHash = this.getOrderChannelAndMessageHash(type, subType, market, params);
821
+ channel = this.safeString(channelAndMessageHash, 0);
822
+ messageHash = this.safeString(channelAndMessageHash, 1);
823
+ }
824
+ const orders = await this.subscribePrivate(channel, messageHash, type, subType, params);
825
+ if (this.newUpdates) {
826
+ limit = orders.getLimit(symbol, limit);
827
+ }
828
+ return this.filterBySinceLimit(orders, since, limit, 'timestamp', true);
829
+ }
830
+ handleOrder(client, message) {
831
+ //
832
+ // spot
833
+ //
834
+ // {
835
+ // "action":"push",
836
+ // "ch":"orders#btcusdt", // or "orders#*" for global subscriptions
837
+ // "data": {
838
+ // "orderSource": "spot-web",
839
+ // "orderCreateTime": 1645116048355,
840
+ // "accountId": 44234548,
841
+ // "orderPrice": "100",
842
+ // "orderSize": "0.05",
843
+ // "symbol": "ethusdt",
844
+ // "type": "buy-limit",
845
+ // "orderId": "478861479986886",
846
+ // "eventType": "creation",
847
+ // "clientOrderId": '',
848
+ // "orderStatus": "submitted"
849
+ // }
850
+ // }
851
+ //
852
+ // spot wrapped trade
853
+ //
854
+ // {
855
+ // "action": "push",
856
+ // "ch": "orders#ltcusdt",
857
+ // "data": {
858
+ // "tradePrice": "130.01",
859
+ // "tradeVolume": "0.0385",
860
+ // "tradeTime": 1648714741525,
861
+ // "aggressor": true,
862
+ // "execAmt": "0.0385",
863
+ // "orderSource": "spot-web",
864
+ // "orderSize": "0.0385",
865
+ // "remainAmt": "0",
866
+ // "tradeId": 101541578884,
867
+ // "symbol": "ltcusdt",
868
+ // "type": "sell-market",
869
+ // "eventType": "trade",
870
+ // "clientOrderId": '',
871
+ // "orderStatus": "filled",
872
+ // "orderId": 509835753860328
873
+ // }
874
+ // }
875
+ //
876
+ // non spot order
877
+ //
878
+ // {
879
+ // "contract_type": "swap",
880
+ // "pair": "LTC-USDT",
881
+ // "business_type": "swap",
882
+ // "op": "notify",
883
+ // "topic": "orders_cross.ltc-usdt",
884
+ // "ts": 1650354508696,
885
+ // "symbol": "LTC",
886
+ // "contract_code": "LTC-USDT",
887
+ // "volume": 1,
888
+ // "price": 110.34,
889
+ // "order_price_type": "lightning",
890
+ // "direction": "sell",
891
+ // "offset": "close",
892
+ // "status": 6,
893
+ // "lever_rate": 1,
894
+ // "order_id": "966002354015051776",
895
+ // "order_id_str": "966002354015051776",
896
+ // "client_order_id": null,
897
+ // "order_source": "web",
898
+ // "order_type": 1,
899
+ // "created_at": 1650354508649,
900
+ // "trade_volume": 1,
901
+ // "trade_turnover": 11.072,
902
+ // "fee": -0.005536,
903
+ // "trade_avg_price": 110.72,
904
+ // "margin_frozen": 0,
905
+ // "profit": -0.045,
906
+ // "trade": [
907
+ // {
908
+ // "trade_fee": -0.005536,
909
+ // "fee_asset": "USDT",
910
+ // "real_profit": 0.473,
911
+ // "profit": -0.045,
912
+ // "trade_id": 86678766507,
913
+ // "id": "86678766507-966002354015051776-1",
914
+ // "trade_volume": 1,
915
+ // "trade_price": 110.72,
916
+ // "trade_turnover": 11.072,
917
+ // "created_at": 1650354508656,
918
+ // "role": "taker"
919
+ // }
920
+ // ],
921
+ // "canceled_at": 0,
922
+ // "fee_asset": "USDT",
923
+ // "margin_asset": "USDT",
924
+ // "uid": "359305390",
925
+ // "liquidation_type": "0",
926
+ // "margin_mode": "cross",
927
+ // "margin_account": "USDT",
928
+ // "is_tpsl": 0,
929
+ // "real_profit": 0.473,
930
+ // "trade_partition": "USDT",
931
+ // "reduce_only": 1
932
+ // }
933
+ //
934
+ //
935
+ const messageHash = this.safeString2(message, 'ch', 'topic');
936
+ const data = this.safeValue(message, 'data');
937
+ let marketId = this.safeString(message, 'contract_code');
938
+ if (marketId === undefined) {
939
+ marketId = this.safeString(data, 'symbol');
940
+ }
941
+ const market = this.safeMarket(marketId);
942
+ let parsedOrder = undefined;
943
+ if (data !== undefined) {
944
+ // spot updates
945
+ const eventType = this.safeString(data, 'eventType');
946
+ if (eventType === 'trade') {
947
+ // when a spot order is filled we get an update message
948
+ // with the trade info
949
+ const parsedTrade = this.parseOrderTrade(data, market);
950
+ // inject trade in existing order by faking an order object
951
+ const orderId = this.safeString(parsedTrade, 'order');
952
+ const trades = [parsedTrade];
953
+ const status = this.parseOrderStatus(this.safeString2(data, 'orderStatus', 'status', 'closed'));
954
+ const filled = this.safeString(data, 'execAmt');
955
+ const remaining = this.safeString(data, 'remainAmt');
956
+ const order = {
957
+ 'id': orderId,
958
+ 'trades': trades,
959
+ 'status': status,
960
+ 'symbol': market['symbol'],
961
+ 'filled': this.parseNumber(filled),
962
+ 'remaining': this.parseNumber(remaining),
963
+ };
964
+ parsedOrder = order;
965
+ }
966
+ else {
967
+ parsedOrder = this.parseWsOrder(data, market);
968
+ }
969
+ }
970
+ else {
971
+ // contract branch
972
+ parsedOrder = this.parseWsOrder(message, market);
973
+ const rawTrades = this.safeValue(message, 'trade', []);
974
+ const tradesLength = rawTrades.length;
975
+ if (tradesLength > 0) {
976
+ const tradesObject = {
977
+ 'trades': rawTrades,
978
+ 'ch': messageHash,
979
+ 'symbol': marketId,
980
+ };
981
+ // inject order params in every trade
982
+ const extendTradeParams = {
983
+ 'order': this.safeString(parsedOrder, 'id'),
984
+ 'type': this.safeString(parsedOrder, 'type'),
985
+ 'side': this.safeString(parsedOrder, 'side'),
986
+ };
987
+ // trades arrive inside an order update
988
+ // we're forwarding them to handleMyTrade
989
+ // so they can be properly resolved
990
+ this.handleMyTrade(client, tradesObject, extendTradeParams);
991
+ }
992
+ }
993
+ if (this.orders === undefined) {
994
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
995
+ this.orders = new ArrayCacheBySymbolById(limit);
996
+ }
997
+ const cachedOrders = this.orders;
998
+ cachedOrders.append(parsedOrder);
999
+ client.resolve(this.orders, messageHash);
1000
+ // when we make a global subscription (for contracts only) our message hash can't have a symbol/currency attached
1001
+ // so we're removing it here
1002
+ let genericMessageHash = messageHash.replace('.' + market['lowercaseId'], '');
1003
+ const lowerCaseBaseId = this.safeStringLower(market, 'baseId');
1004
+ genericMessageHash = genericMessageHash.replace('.' + lowerCaseBaseId, '');
1005
+ client.resolve(this.orders, genericMessageHash);
1006
+ }
1007
+ parseWsOrder(order, market = undefined) {
1008
+ //
1009
+ // spot
1010
+ //
1011
+ // {
1012
+ // "orderSource": "spot-web",
1013
+ // "orderCreateTime": 1645116048355, // creating only
1014
+ // "accountId": 44234548,
1015
+ // "orderPrice": "100",
1016
+ // "orderSize": "0.05",
1017
+ // "orderValue": "3.71676361", // market-buy only
1018
+ // "symbol": "ethusdt",
1019
+ // "type": "buy-limit",
1020
+ // "orderId": "478861479986886",
1021
+ // "eventType": "creation",
1022
+ // "clientOrderId": '',
1023
+ // "orderStatus": "submitted"
1024
+ // "lastActTime":1645118621810 // except creating
1025
+ // "execAmt":"0"
1026
+ // }
1027
+ //
1028
+ // swap order
1029
+ //
1030
+ // {
1031
+ // "contract_type": "swap",
1032
+ // "pair": "LTC-USDT",
1033
+ // "business_type": "swap",
1034
+ // "op": "notify",
1035
+ // "topic": "orders_cross.ltc-usdt",
1036
+ // "ts": 1648717911384,
1037
+ // "symbol": "LTC",
1038
+ // "contract_code": "LTC-USDT",
1039
+ // "volume": 1,
1040
+ // "price": 129.13,
1041
+ // "order_price_type": "lightning",
1042
+ // "direction": "sell",
1043
+ // "offset": "close",
1044
+ // "status": 6,
1045
+ // "lever_rate": 5,
1046
+ // "order_id": "959137967397068800",
1047
+ // "order_id_str": "959137967397068800",
1048
+ // "client_order_id": null,
1049
+ // "order_source": "web",
1050
+ // "order_type": 1,
1051
+ // "created_at": 1648717911344,
1052
+ // "trade_volume": 1,
1053
+ // "trade_turnover": 12.952,
1054
+ // "fee": -0.006476,
1055
+ // "trade_avg_price": 129.52,
1056
+ // "margin_frozen": 0,
1057
+ // "profit": -0.005,
1058
+ // "trade": [
1059
+ // {
1060
+ // "trade_fee": -0.006476,
1061
+ // "fee_asset": "USDT",
1062
+ // "real_profit": -0.005,
1063
+ // "profit": -0.005,
1064
+ // "trade_id": 83619995370,
1065
+ // "id": "83619995370-959137967397068800-1",
1066
+ // "trade_volume": 1,
1067
+ // "trade_price": 129.52,
1068
+ // "trade_turnover": 12.952,
1069
+ // "created_at": 1648717911352,
1070
+ // "role": "taker"
1071
+ // }
1072
+ // ],
1073
+ // "canceled_at": 0,
1074
+ // "fee_asset": "USDT",
1075
+ // "margin_asset": "USDT",
1076
+ // "uid": "359305390",
1077
+ // "liquidation_type": "0",
1078
+ // "margin_mode": "cross",
1079
+ // "margin_account": "USDT",
1080
+ // "is_tpsl": 0,
1081
+ // "real_profit": -0.005,
1082
+ // "trade_partition": "USDT",
1083
+ // "reduce_only": 1
1084
+ // }
1085
+ //
1086
+ // {
1087
+ // "op":"notify",
1088
+ // "topic":"orders.ada",
1089
+ // "ts":1604388667226,
1090
+ // "symbol":"ADA",
1091
+ // "contract_type":"quarter",
1092
+ // "contract_code":"ADA201225",
1093
+ // "volume":1,
1094
+ // "price":0.0905,
1095
+ // "order_price_type":"post_only",
1096
+ // "direction":"sell",
1097
+ // "offset":"open",
1098
+ // "status":6,
1099
+ // "lever_rate":20,
1100
+ // "order_id":773207641127878656,
1101
+ // "order_id_str":"773207641127878656",
1102
+ // "client_order_id":null,
1103
+ // "order_source":"web",
1104
+ // "order_type":1,
1105
+ // "created_at":1604388667146,
1106
+ // "trade_volume":1,
1107
+ // "trade_turnover":10,
1108
+ // "fee":-0.022099447513812154,
1109
+ // "trade_avg_price":0.0905,
1110
+ // "margin_frozen":0,
1111
+ // "profit":0,
1112
+ // "trade":[],
1113
+ // "canceled_at":0,
1114
+ // "fee_asset":"ADA",
1115
+ // "uid":"123456789",
1116
+ // "liquidation_type":"0",
1117
+ // "is_tpsl": 0,
1118
+ // "real_profit": 0
1119
+ // }
1120
+ //
1121
+ const lastTradeTimestamp = this.safeInteger2(order, 'lastActTime', 'ts');
1122
+ const created = this.safeInteger(order, 'orderCreateTime');
1123
+ const marketId = this.safeString2(order, 'contract_code', 'symbol');
1124
+ market = this.safeMarket(marketId, market);
1125
+ const symbol = this.safeSymbol(marketId, market);
1126
+ const amount = this.safeString2(order, 'orderSize', 'volume');
1127
+ const status = this.parseOrderStatus(this.safeString2(order, 'orderStatus', 'status'));
1128
+ const id = this.safeString2(order, 'orderId', 'order_id');
1129
+ const clientOrderId = this.safeString2(order, 'clientOrderId', 'client_order_id');
1130
+ const price = this.safeString2(order, 'orderPrice', 'price');
1131
+ const filled = this.safeString(order, 'execAmt');
1132
+ const typeSide = this.safeString(order, 'type');
1133
+ const feeCost = this.safeString(order, 'fee');
1134
+ let fee = undefined;
1135
+ if (feeCost !== undefined) {
1136
+ const feeCurrencyId = this.safeString(order, 'fee_asset');
1137
+ fee = {
1138
+ 'cost': feeCost,
1139
+ 'currency': this.safeCurrencyCode(feeCurrencyId),
1140
+ };
1141
+ }
1142
+ const avgPrice = this.safeString(order, 'trade_avg_price');
1143
+ const rawTrades = this.safeValue(order, 'trade');
1144
+ let typeSideParts = [];
1145
+ if (typeSide !== undefined) {
1146
+ typeSideParts = typeSide.split('-');
1147
+ }
1148
+ let type = this.safeStringLower(typeSideParts, 1);
1149
+ if (type === undefined) {
1150
+ type = this.safeString(order, 'order_price_type');
1151
+ }
1152
+ let side = this.safeStringLower(typeSideParts, 0);
1153
+ if (side === undefined) {
1154
+ side = this.safeString(order, 'direction');
1155
+ }
1156
+ const cost = this.safeString(order, 'orderValue');
1157
+ return this.safeOrder({
1158
+ 'info': order,
1159
+ 'id': id,
1160
+ 'clientOrderId': clientOrderId,
1161
+ 'timestamp': created,
1162
+ 'datetime': this.iso8601(created),
1163
+ 'lastTradeTimestamp': lastTradeTimestamp,
1164
+ 'status': status,
1165
+ 'symbol': symbol,
1166
+ 'type': type,
1167
+ 'timeInForce': undefined,
1168
+ 'postOnly': undefined,
1169
+ 'side': side,
1170
+ 'price': price,
1171
+ 'amount': amount,
1172
+ 'filled': filled,
1173
+ 'remaining': undefined,
1174
+ 'cost': cost,
1175
+ 'fee': fee,
1176
+ 'average': avgPrice,
1177
+ 'trades': rawTrades,
1178
+ }, market);
1179
+ }
1180
+ parseOrderTrade(trade, market = undefined) {
1181
+ // spot private wrapped trade
1182
+ //
1183
+ // {
1184
+ // "tradePrice": "130.01",
1185
+ // "tradeVolume": "0.0385",
1186
+ // "tradeTime": 1648714741525,
1187
+ // "aggressor": true,
1188
+ // "execAmt": "0.0385",
1189
+ // "orderSource": "spot-web",
1190
+ // "orderSize": "0.0385",
1191
+ // "remainAmt": "0",
1192
+ // "tradeId": 101541578884,
1193
+ // "symbol": "ltcusdt",
1194
+ // "type": "sell-market",
1195
+ // "eventType": "trade",
1196
+ // "clientOrderId": '',
1197
+ // "orderStatus": "filled",
1198
+ // "orderId": 509835753860328
1199
+ // }
1200
+ //
1201
+ market = this.safeMarket(undefined, market);
1202
+ const symbol = market['symbol'];
1203
+ const tradeId = this.safeString(trade, 'tradeId');
1204
+ const price = this.safeString(trade, 'tradePrice');
1205
+ const amount = this.safeString(trade, 'tradeVolume');
1206
+ const order = this.safeString(trade, 'orderId');
1207
+ const timestamp = this.safeInteger(trade, 'tradeTime');
1208
+ let type = this.safeString(trade, 'type');
1209
+ let side = undefined;
1210
+ if (type !== undefined) {
1211
+ const typeParts = type.split('-');
1212
+ side = typeParts[0];
1213
+ type = typeParts[1];
1214
+ }
1215
+ const aggressor = this.safeValue(trade, 'aggressor');
1216
+ let takerOrMaker = undefined;
1217
+ if (aggressor !== undefined) {
1218
+ takerOrMaker = aggressor ? 'taker' : 'maker';
1219
+ }
1220
+ return this.safeTrade({
1221
+ 'info': trade,
1222
+ 'timestamp': timestamp,
1223
+ 'datetime': this.iso8601(timestamp),
1224
+ 'symbol': symbol,
1225
+ 'id': tradeId,
1226
+ 'order': order,
1227
+ 'type': type,
1228
+ 'takerOrMaker': takerOrMaker,
1229
+ 'side': side,
1230
+ 'price': price,
1231
+ 'amount': amount,
1232
+ 'cost': undefined,
1233
+ 'fee': undefined,
1234
+ }, market);
1235
+ }
1236
+ /**
1237
+ * @method
1238
+ * @name htx#watchPositions
1239
+ * @see https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7de1c-77b5-11ed-9966-0242ac110003
1240
+ * @see https://www.huobi.com/en-in/opend/newApiPages/?id=8cb7df0f-77b5-11ed-9966-0242ac110003
1241
+ * @see https://www.huobi.com/en-in/opend/newApiPages/?id=28c34a7d-77ae-11ed-9966-0242ac110003
1242
+ * @see https://www.huobi.com/en-in/opend/newApiPages/?id=5d5156b5-77b6-11ed-9966-0242ac110003
1243
+ * @description watch all open positions. Note: huobi has one channel for each marginMode and type
1244
+ * @param {string[]|undefined} symbols list of unified market symbols
1245
+ * @param since
1246
+ * @param limit
1247
+ * @param {object} params extra parameters specific to the exchange API endpoint
1248
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
1249
+ */
1250
+ async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
1251
+ await this.loadMarkets();
1252
+ let market = undefined;
1253
+ let messageHash = '';
1254
+ if (!this.isEmpty(symbols)) {
1255
+ market = this.getMarketFromSymbols(symbols);
1256
+ messageHash = '::' + symbols.join(',');
1257
+ }
1258
+ let type = undefined;
1259
+ let subType = undefined;
1260
+ if (market !== undefined) {
1261
+ type = market['type'];
1262
+ subType = market['linear'] ? 'linear' : 'inverse';
1263
+ }
1264
+ else {
1265
+ [type, params] = this.handleMarketTypeAndParams('watchPositions', market, params);
1266
+ if (type === 'spot') {
1267
+ type = 'future';
1268
+ }
1269
+ [subType, params] = this.handleOptionAndParams(params, 'watchPositions', 'subType', subType);
1270
+ }
1271
+ symbols = this.marketSymbols(symbols);
1272
+ let marginMode = undefined;
1273
+ [marginMode, params] = this.handleMarginModeAndParams('watchPositions', params, 'cross');
1274
+ const isLinear = (subType === 'linear');
1275
+ const url = this.getUrlByMarketType(type, isLinear, true);
1276
+ messageHash = marginMode + ':positions' + messageHash;
1277
+ const channel = (marginMode === 'cross') ? 'positions_cross.*' : 'positions.*';
1278
+ const newPositions = await this.subscribePrivate(channel, messageHash, type, subType, params);
1279
+ if (this.newUpdates) {
1280
+ return newPositions;
1281
+ }
1282
+ return this.filterBySymbolsSinceLimit(this.positions[url][marginMode], symbols, since, limit, false);
1283
+ }
1284
+ handlePositions(client, message) {
1285
+ //
1286
+ // {
1287
+ // op: 'notify',
1288
+ // topic: 'positions_cross',
1289
+ // ts: 1696767149650,
1290
+ // event: 'snapshot',
1291
+ // data: [
1292
+ // {
1293
+ // contract_type: 'swap',
1294
+ // pair: 'BTC-USDT',
1295
+ // business_type: 'swap',
1296
+ // liquidation_price: null,
1297
+ // symbol: 'BTC',
1298
+ // contract_code: 'BTC-USDT',
1299
+ // volume: 1,
1300
+ // available: 1,
1301
+ // frozen: 0,
1302
+ // cost_open: 27802.2,
1303
+ // cost_hold: 27802.2,
1304
+ // profit_unreal: 0.0175,
1305
+ // profit_rate: 0.000629446590557581,
1306
+ // profit: 0.0175,
1307
+ // margin_asset: 'USDT',
1308
+ // position_margin: 27.8197,
1309
+ // lever_rate: 1,
1310
+ // direction: 'buy',
1311
+ // last_price: 27819.7,
1312
+ // margin_mode: 'cross',
1313
+ // margin_account: 'USDT',
1314
+ // trade_partition: 'USDT',
1315
+ // position_mode: 'dual_side'
1316
+ // },
1317
+ // ]
1318
+ // }
1319
+ //
1320
+ const url = client.url;
1321
+ const topic = this.safeString(message, 'topic', '');
1322
+ const marginMode = (topic === 'positions_cross') ? 'cross' : 'isolated';
1323
+ if (this.positions === undefined) {
1324
+ this.positions = {};
1325
+ }
1326
+ const clientPositions = this.safeValue(this.positions, url);
1327
+ if (clientPositions === undefined) {
1328
+ this.positions[url] = {};
1329
+ }
1330
+ const clientMarginModePositions = this.safeValue(clientPositions, marginMode);
1331
+ if (clientMarginModePositions === undefined) {
1332
+ this.positions[url][marginMode] = new ArrayCacheBySymbolBySide();
1333
+ }
1334
+ const cache = this.positions[url][marginMode];
1335
+ const rawPositions = this.safeValue(message, 'data', []);
1336
+ const newPositions = [];
1337
+ const timestamp = this.safeInteger(message, 'ts');
1338
+ for (let i = 0; i < rawPositions.length; i++) {
1339
+ const rawPosition = rawPositions[i];
1340
+ const position = this.parsePosition(rawPosition);
1341
+ position['timestamp'] = timestamp;
1342
+ position['datetime'] = this.iso8601(timestamp);
1343
+ newPositions.push(position);
1344
+ cache.append(position);
1345
+ }
1346
+ const messageHashes = this.findMessageHashes(client, marginMode + ':positions::');
1347
+ for (let i = 0; i < messageHashes.length; i++) {
1348
+ const messageHash = messageHashes[i];
1349
+ const parts = messageHash.split('::');
1350
+ const symbolsString = parts[1];
1351
+ const symbols = symbolsString.split(',');
1352
+ const positions = this.filterByArray(newPositions, 'symbol', symbols, false);
1353
+ if (!this.isEmpty(positions)) {
1354
+ client.resolve(positions, messageHash);
1355
+ }
1356
+ }
1357
+ client.resolve(newPositions, marginMode + ':positions');
1358
+ }
1359
+ /**
1360
+ * @method
1361
+ * @name htx#watchBalance
1362
+ * @description watch balance and get the amount of funds available for trading or funds locked in orders
1363
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec52e28-7773-11ed-9966-0242ac110003
1364
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=10000084-77b7-11ed-9966-0242ac110003
1365
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=8cb7dcca-77b5-11ed-9966-0242ac110003
1366
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c34995-77ae-11ed-9966-0242ac110003
1367
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1368
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1369
+ */
1370
+ async watchBalance(params = {}) {
1371
+ let type = undefined;
1372
+ [type, params] = this.handleMarketTypeAndParams('watchBalance', undefined, params);
1373
+ let subType = undefined;
1374
+ [subType, params] = this.handleSubTypeAndParams('watchBalance', undefined, params, 'linear');
1375
+ const isUnifiedAccount = this.safeValue2(params, 'isUnifiedAccount', 'unified', false);
1376
+ params = this.omit(params, ['isUnifiedAccount', 'unified']);
1377
+ await this.loadMarkets();
1378
+ let messageHash = undefined;
1379
+ let channel = undefined;
1380
+ let marginMode = undefined;
1381
+ if (type === 'spot') {
1382
+ let mode = this.safeString2(this.options, 'watchBalance', 'mode', '2');
1383
+ mode = this.safeString(params, 'mode', mode);
1384
+ messageHash = 'accounts.update' + '#' + mode;
1385
+ channel = messageHash;
1386
+ }
1387
+ else {
1388
+ const symbol = this.safeString(params, 'symbol');
1389
+ const currency = this.safeString(params, 'currency');
1390
+ const market = (symbol !== undefined) ? this.market(symbol) : undefined;
1391
+ const currencyCode = (currency !== undefined) ? this.currency(currency) : undefined;
1392
+ marginMode = this.safeString(params, 'margin', 'cross');
1393
+ params = this.omit(params, ['currency', 'symbol', 'margin']);
1394
+ let prefix = 'accounts';
1395
+ messageHash = prefix;
1396
+ if (subType === 'linear') {
1397
+ if (isUnifiedAccount) {
1398
+ // usdt contracts account
1399
+ prefix = 'accounts_unify';
1400
+ messageHash = prefix;
1401
+ channel = prefix + '.' + 'usdt';
1402
+ }
1403
+ else {
1404
+ // usdt contracts account
1405
+ prefix = (marginMode === 'cross') ? prefix + '_cross' : prefix;
1406
+ messageHash = prefix;
1407
+ if (marginMode === 'isolated') {
1408
+ // isolated margin only allows filtering by symbol3
1409
+ if (symbol !== undefined) {
1410
+ messageHash += '.' + market['id'];
1411
+ channel = messageHash;
1412
+ }
1413
+ else {
1414
+ // subscribe to all
1415
+ channel = prefix + '.' + '*';
1416
+ }
1417
+ }
1418
+ else {
1419
+ // cross margin
1420
+ if (currencyCode !== undefined) {
1421
+ channel = prefix + '.' + currencyCode['id'];
1422
+ messageHash = channel;
1423
+ }
1424
+ else {
1425
+ // subscribe to all
1426
+ channel = prefix + '.' + '*';
1427
+ }
1428
+ }
1429
+ }
1430
+ }
1431
+ else if (type === 'future') {
1432
+ // inverse futures account
1433
+ if (currencyCode !== undefined) {
1434
+ messageHash += '.' + currencyCode['id'];
1435
+ channel = messageHash;
1436
+ }
1437
+ else {
1438
+ // subscribe to all
1439
+ channel = prefix + '.' + '*';
1440
+ }
1441
+ }
1442
+ else {
1443
+ // inverse swaps account
1444
+ if (market !== undefined) {
1445
+ messageHash += '.' + market['id'];
1446
+ channel = messageHash;
1447
+ }
1448
+ else {
1449
+ // subscribe to all
1450
+ channel = prefix + '.' + '*';
1451
+ }
1452
+ }
1453
+ }
1454
+ const subscriptionParams = {
1455
+ 'type': type,
1456
+ 'subType': subType,
1457
+ 'margin': marginMode,
1458
+ };
1459
+ // we are differentiating the channel from the messageHash for global subscriptions (*)
1460
+ // because huobi returns a different topic than the topic sent. Example: we send
1461
+ // "accounts.*" and "accounts" is returned so we're setting channel = "accounts.*" and
1462
+ // messageHash = "accounts" allowing handleBalance to freely resolve the topic in the message
1463
+ return await this.subscribePrivate(channel, messageHash, type, subType, params, subscriptionParams);
1464
+ }
1465
+ handleBalance(client, message) {
1466
+ // spot
1467
+ //
1468
+ // {
1469
+ // "action": "push",
1470
+ // "ch": "accounts.update#0",
1471
+ // "data": {
1472
+ // "currency": "btc",
1473
+ // "accountId": 123456,
1474
+ // "balance": "23.111",
1475
+ // "available": "2028.699426619837209087",
1476
+ // "changeType": "transfer",
1477
+ // "accountType":"trade",
1478
+ // "seqNum": "86872993928",
1479
+ // "changeTime": 1568601800000
1480
+ // }
1481
+ // }
1482
+ //
1483
+ // inverse future
1484
+ //
1485
+ // {
1486
+ // "op":"notify",
1487
+ // "topic":"accounts.ada",
1488
+ // "ts":1604388667226,
1489
+ // "event":"order.match",
1490
+ // "data":[
1491
+ // {
1492
+ // "symbol":"ADA",
1493
+ // "margin_balance":446.417641681222726716,
1494
+ // "margin_static":445.554085945257745136,
1495
+ // "margin_position":11.049723756906077348,
1496
+ // "margin_frozen":0,
1497
+ // "margin_available":435.367917924316649368,
1498
+ // "profit_real":21.627049781983019459,
1499
+ // "profit_unreal":0.86355573596498158,
1500
+ // "risk_rate":40.000796572150656768,
1501
+ // "liquidation_price":0.018674308027108984,
1502
+ // "withdraw_available":423.927036163274725677,
1503
+ // "lever_rate":20,
1504
+ // "adjust_factor":0.4
1505
+ // }
1506
+ // ],
1507
+ // "uid":"123456789"
1508
+ // }
1509
+ //
1510
+ // usdt / linear future, swap
1511
+ //
1512
+ // {
1513
+ // "op":"notify",
1514
+ // "topic":"accounts.btc-usdt", // or "accounts" for global subscriptions
1515
+ // "ts":1603711370689,
1516
+ // "event":"order.open",
1517
+ // "data":[
1518
+ // {
1519
+ // "margin_mode":"cross",
1520
+ // "margin_account":"USDT",
1521
+ // "margin_asset":"USDT",
1522
+ // "margin_balance":30.959342395,
1523
+ // "margin_static":30.959342395,
1524
+ // "margin_position":0,
1525
+ // "margin_frozen":10,
1526
+ // "profit_real":0,
1527
+ // "profit_unreal":0,
1528
+ // "withdraw_available":20.959342395,
1529
+ // "risk_rate":153.796711975,
1530
+ // "position_mode":"dual_side",
1531
+ // "contract_detail":[
1532
+ // {
1533
+ // "symbol":"LTC",
1534
+ // "contract_code":"LTC-USDT",
1535
+ // "margin_position":0,
1536
+ // "margin_frozen":0,
1537
+ // "margin_available":20.959342395,
1538
+ // "profit_unreal":0,
1539
+ // "liquidation_price":null,
1540
+ // "lever_rate":1,
1541
+ // "adjust_factor":0.01,
1542
+ // "contract_type":"swap",
1543
+ // "pair":"LTC-USDT",
1544
+ // "business_type":"swap",
1545
+ // "trade_partition":"USDT"
1546
+ // },
1547
+ // ],
1548
+ // "futures_contract_detail":[],
1549
+ // }
1550
+ // ]
1551
+ // }
1552
+ //
1553
+ // inverse future
1554
+ //
1555
+ // {
1556
+ // "op":"notify",
1557
+ // "topic":"accounts.ada",
1558
+ // "ts":1604388667226,
1559
+ // "event":"order.match",
1560
+ // "data":[
1561
+ // {
1562
+ // "symbol":"ADA",
1563
+ // "margin_balance":446.417641681222726716,
1564
+ // "margin_static":445.554085945257745136,
1565
+ // "margin_position":11.049723756906077348,
1566
+ // "margin_frozen":0,
1567
+ // "margin_available":435.367917924316649368,
1568
+ // "profit_real":21.627049781983019459,
1569
+ // "profit_unreal":0.86355573596498158,
1570
+ // "risk_rate":40.000796572150656768,
1571
+ // "liquidation_price":0.018674308027108984,
1572
+ // "withdraw_available":423.927036163274725677,
1573
+ // "lever_rate":20,
1574
+ // "adjust_factor":0.4
1575
+ // }
1576
+ // ],
1577
+ // "uid":"123456789"
1578
+ // }
1579
+ //
1580
+ const channel = this.safeString(message, 'ch');
1581
+ const data = this.safeValue(message, 'data', []);
1582
+ const timestamp = this.safeInteger(data, 'changeTime', this.safeInteger(message, 'ts'));
1583
+ this.balance['timestamp'] = timestamp;
1584
+ this.balance['datetime'] = this.iso8601(timestamp);
1585
+ this.balance['info'] = data;
1586
+ if (channel !== undefined) {
1587
+ // spot balance
1588
+ const currencyId = this.safeString(data, 'currency');
1589
+ const code = this.safeCurrencyCode(currencyId);
1590
+ const account = this.account();
1591
+ account['free'] = this.safeString(data, 'available');
1592
+ account['total'] = this.safeString(data, 'balance');
1593
+ this.balance[code] = account;
1594
+ this.balance = this.safeBalance(this.balance);
1595
+ client.resolve(this.balance, channel);
1596
+ }
1597
+ else {
1598
+ // contract balance
1599
+ const dataLength = data.length;
1600
+ if (dataLength === 0) {
1601
+ return;
1602
+ }
1603
+ const first = this.safeValue(data, 0, {});
1604
+ const topic = this.safeString(message, 'topic');
1605
+ const splitTopic = topic.split('.');
1606
+ let messageHash = this.safeString(splitTopic, 0);
1607
+ let subscription = this.safeValue2(client.subscriptions, messageHash, messageHash + '.*');
1608
+ if (subscription === undefined) {
1609
+ // if subscription not found means that we subscribed to a specific currency/symbol
1610
+ // and we use the first data entry to find it
1611
+ // Example: topic = 'accounts'
1612
+ // client.subscription hash = 'accounts.usdt'
1613
+ // we do 'accounts' + '.' + data[0]]['margin_asset'] to get it
1614
+ const currencyId = this.safeString2(first, 'margin_asset', 'symbol');
1615
+ messageHash += '.' + currencyId.toLowerCase();
1616
+ subscription = this.safeValue(client.subscriptions, messageHash);
1617
+ }
1618
+ const type = this.safeString(subscription, 'type');
1619
+ const subType = this.safeString(subscription, 'subType');
1620
+ if (topic === 'accounts_unify') {
1621
+ // {
1622
+ // "margin_asset": "USDT",
1623
+ // "margin_static": 10,
1624
+ // "cross_margin_static": 10,
1625
+ // "margin_balance": 10,
1626
+ // "cross_profit_unreal": 0,
1627
+ // "margin_frozen": 0,
1628
+ // "withdraw_available": 10,
1629
+ // "cross_risk_rate": null,
1630
+ // "cross_swap": [],
1631
+ // "cross_future": [],
1632
+ // "isolated_swap": []
1633
+ // }
1634
+ const marginAsset = this.safeString(first, 'margin_asset');
1635
+ const code = this.safeCurrencyCode(marginAsset);
1636
+ const marginFrozen = this.safeString(first, 'margin_frozen');
1637
+ const unifiedAccount = this.account();
1638
+ unifiedAccount['free'] = this.safeString(first, 'withdraw_available');
1639
+ unifiedAccount['used'] = marginFrozen;
1640
+ this.balance[code] = unifiedAccount;
1641
+ this.balance = this.safeBalance(this.balance);
1642
+ client.resolve(this.balance, 'accounts_unify');
1643
+ }
1644
+ else if (subType === 'linear') {
1645
+ const margin = this.safeString(subscription, 'margin');
1646
+ if (margin === 'cross') {
1647
+ const fieldName = (type === 'future') ? 'futures_contract_detail' : 'contract_detail';
1648
+ const balances = this.safeValue(first, fieldName, []);
1649
+ const balancesLength = balances.length;
1650
+ if (balancesLength > 0) {
1651
+ for (let i = 0; i < balances.length; i++) {
1652
+ const balance = balances[i];
1653
+ const marketId = this.safeString2(balance, 'contract_code', 'margin_account');
1654
+ const market = this.safeMarket(marketId);
1655
+ const currencyId = this.safeString(balance, 'margin_asset');
1656
+ const currency = this.safeCurrency(currencyId);
1657
+ const code = this.safeString(market, 'settle', currency['code']);
1658
+ // the exchange outputs positions for delisted markets
1659
+ // https://www.huobi.com/support/en-us/detail/74882968522337
1660
+ // we skip it if the market was delisted
1661
+ if (code !== undefined) {
1662
+ const account = this.account();
1663
+ account['free'] = this.safeString2(balance, 'margin_balance', 'margin_available');
1664
+ account['used'] = this.safeString(balance, 'margin_frozen');
1665
+ const accountsByCode = {};
1666
+ accountsByCode[code] = account;
1667
+ const symbol = market['symbol'];
1668
+ this.balance[symbol] = this.safeBalance(accountsByCode);
1669
+ }
1670
+ }
1671
+ }
1672
+ }
1673
+ else {
1674
+ // isolated margin
1675
+ for (let i = 0; i < data.length; i++) {
1676
+ const isolatedBalance = data[i];
1677
+ const account = this.account();
1678
+ account['free'] = this.safeString(isolatedBalance, 'margin_balance', 'margin_available');
1679
+ account['used'] = this.safeString(isolatedBalance, 'margin_frozen');
1680
+ const currencyId = this.safeString2(isolatedBalance, 'margin_asset', 'symbol');
1681
+ const code = this.safeCurrencyCode(currencyId);
1682
+ this.balance[code] = account;
1683
+ this.balance = this.safeBalance(this.balance);
1684
+ }
1685
+ }
1686
+ }
1687
+ else {
1688
+ // inverse branch
1689
+ for (let i = 0; i < data.length; i++) {
1690
+ const balance = data[i];
1691
+ const currencyId = this.safeString(balance, 'symbol');
1692
+ const code = this.safeCurrencyCode(currencyId);
1693
+ const account = this.account();
1694
+ account['free'] = this.safeString(balance, 'margin_available');
1695
+ account['used'] = this.safeString(balance, 'margin_frozen');
1696
+ this.balance[code] = account;
1697
+ this.balance = this.safeBalance(this.balance);
1698
+ }
1699
+ }
1700
+ client.resolve(this.balance, messageHash);
1701
+ }
1702
+ }
1703
+ handleSubscriptionStatus(client, message) {
1704
+ //
1705
+ // {
1706
+ // "id": 1583414227,
1707
+ // "status": "ok",
1708
+ // "subbed": "market.btcusdt.mbp.150",
1709
+ // "ts": 1583414229143
1710
+ // }
1711
+ //
1712
+ const id = this.safeString(message, 'id');
1713
+ const subscriptionsById = this.indexBy(client.subscriptions, 'id');
1714
+ const subscription = this.safeValue(subscriptionsById, id);
1715
+ if (subscription !== undefined) {
1716
+ const method = this.safeValue(subscription, 'method');
1717
+ if (method !== undefined) {
1718
+ method.call(this, client, message, subscription);
1719
+ return;
1720
+ }
1721
+ // clean up
1722
+ if (id in client.subscriptions) {
1723
+ delete client.subscriptions[id];
1724
+ }
1725
+ }
1726
+ }
1727
+ handleSystemStatus(client, message) {
1728
+ //
1729
+ // todo: answer the question whether handleSystemStatus should be renamed
1730
+ // and unified as handleStatus for any usage pattern that
1731
+ // involves system status and maintenance updates
1732
+ //
1733
+ // {
1734
+ // "id": "1578090234088", // connectId
1735
+ // "type": "welcome",
1736
+ // }
1737
+ //
1738
+ return message;
1739
+ }
1740
+ handleSubject(client, message) {
1741
+ // spot
1742
+ // {
1743
+ // "ch": "market.btcusdt.mbp.150",
1744
+ // "ts": 1583472025885,
1745
+ // "tick": {
1746
+ // "seqNum": 104998984994,
1747
+ // "prevSeqNum": 104998984977,
1748
+ // "bids": [
1749
+ // [9058.27, 0],
1750
+ // [9058.43, 0],
1751
+ // [9058.99, 0],
1752
+ // ],
1753
+ // "asks": [
1754
+ // [9084.27, 0.2],
1755
+ // [9085.69, 0],
1756
+ // [9085.81, 0],
1757
+ // ]
1758
+ // }
1759
+ // }
1760
+ // non spot
1761
+ //
1762
+ // {
1763
+ // "ch":"market.BTC220218.depth.size_150.high_freq",
1764
+ // "tick":{
1765
+ // "asks":[],
1766
+ // "bids":[
1767
+ // [43445.74,1],
1768
+ // [43444.48,0 ],
1769
+ // [40593.92,9]
1770
+ // ],
1771
+ // "ch":"market.BTC220218.depth.size_150.high_freq",
1772
+ // "event":"update",
1773
+ // "id":152727500274,
1774
+ // "mrid":152727500274,
1775
+ // "ts":1645023376098,
1776
+ // "version":37536690
1777
+ // },
1778
+ // "ts":1645023376098
1779
+ // }
1780
+ //
1781
+ // spot private trade
1782
+ //
1783
+ // {
1784
+ // "action":"push",
1785
+ // "ch":"trade.clearing#ltcusdt#1",
1786
+ // "data":{
1787
+ // "eventType":"trade",
1788
+ // "symbol":"ltcusdt",
1789
+ // // ...
1790
+ // },
1791
+ // }
1792
+ //
1793
+ // spot order
1794
+ //
1795
+ // {
1796
+ // "action":"push",
1797
+ // "ch":"orders#btcusdt",
1798
+ // "data": {
1799
+ // "orderSide":"buy",
1800
+ // "lastActTime":1583853365586,
1801
+ // "clientOrderId":"abc123",
1802
+ // "orderStatus":"rejected",
1803
+ // "symbol":"btcusdt",
1804
+ // "eventType":"trigger",
1805
+ // "errCode": 2002,
1806
+ // "errMessage":"invalid.client.order.id (NT)"
1807
+ // }
1808
+ // }
1809
+ //
1810
+ // contract order
1811
+ //
1812
+ // {
1813
+ // "op":"notify",
1814
+ // "topic":"orders.ada",
1815
+ // "ts":1604388667226,
1816
+ // // ?
1817
+ // }
1818
+ //
1819
+ const ch = this.safeValue(message, 'ch', '');
1820
+ const parts = ch.split('.');
1821
+ const type = this.safeString(parts, 0);
1822
+ if (type === 'market') {
1823
+ const methodName = this.safeString(parts, 2);
1824
+ const methods = {
1825
+ 'depth': this.handleOrderBook,
1826
+ 'mbp': this.handleOrderBook,
1827
+ 'detail': this.handleTicker,
1828
+ 'bbo': this.handleTicker,
1829
+ 'ticker': this.handleTicker,
1830
+ 'trade': this.handleTrades,
1831
+ 'kline': this.handleOHLCV,
1832
+ };
1833
+ const method = this.safeValue(methods, methodName);
1834
+ if (method !== undefined) {
1835
+ method.call(this, client, message);
1836
+ return;
1837
+ }
1838
+ }
1839
+ // private spot subjects
1840
+ const privateParts = ch.split('#');
1841
+ const privateType = this.safeString(privateParts, 0, '');
1842
+ if (privateType === 'trade.clearing') {
1843
+ this.handleMyTrade(client, message);
1844
+ return;
1845
+ }
1846
+ if (privateType.indexOf('accounts.update') >= 0) {
1847
+ this.handleBalance(client, message);
1848
+ return;
1849
+ }
1850
+ if (privateType === 'orders') {
1851
+ this.handleOrder(client, message);
1852
+ return;
1853
+ }
1854
+ // private contract subjects
1855
+ const op = this.safeString(message, 'op');
1856
+ if (op === 'notify') {
1857
+ const topic = this.safeString(message, 'topic', '');
1858
+ if (topic.indexOf('orders') >= 0) {
1859
+ this.handleOrder(client, message);
1860
+ }
1861
+ if (topic.indexOf('account') >= 0) {
1862
+ this.handleBalance(client, message);
1863
+ }
1864
+ if (topic.indexOf('positions') >= 0) {
1865
+ this.handlePositions(client, message);
1866
+ }
1867
+ }
1868
+ }
1869
+ async pong(client, message) {
1870
+ //
1871
+ // { ping: 1583491673714 }
1872
+ // { action: "ping", data: { ts: 1645108204665 } }
1873
+ // { op: "ping", ts: "1645202800015" }
1874
+ //
1875
+ try {
1876
+ const ping = this.safeInteger(message, 'ping');
1877
+ if (ping !== undefined) {
1878
+ await client.send({ 'pong': ping });
1879
+ return;
1880
+ }
1881
+ const action = this.safeString(message, 'action');
1882
+ if (action === 'ping') {
1883
+ const data = this.safeValue(message, 'data');
1884
+ const pingTs = this.safeInteger(data, 'ts');
1885
+ await client.send({ 'action': 'pong', 'data': { 'ts': pingTs } });
1886
+ return;
1887
+ }
1888
+ const op = this.safeString(message, 'op');
1889
+ if (op === 'ping') {
1890
+ const pingTs = this.safeInteger(message, 'ts');
1891
+ await client.send({ 'op': 'pong', 'ts': pingTs });
1892
+ }
1893
+ }
1894
+ catch (e) {
1895
+ const error = new NetworkError(this.id + ' pong failed ' + this.json(e));
1896
+ client.reset(error);
1897
+ }
1898
+ }
1899
+ handlePing(client, message) {
1900
+ this.spawn(this.pong, client, message);
1901
+ }
1902
+ handleAuthenticate(client, message) {
1903
+ //
1904
+ // spot
1905
+ //
1906
+ // {
1907
+ // "action": "req",
1908
+ // "code": 200,
1909
+ // "ch": "auth",
1910
+ // "data": {}
1911
+ // }
1912
+ //
1913
+ // non spot
1914
+ //
1915
+ // {
1916
+ // "op": "auth",
1917
+ // "type": "api",
1918
+ // "err-code": 0,
1919
+ // "ts": 1645200307319,
1920
+ // "data": { "user-id": "35930539" }
1921
+ // }
1922
+ //
1923
+ const promise = client.futures['auth'];
1924
+ promise.resolve(message);
1925
+ }
1926
+ handleErrorMessage(client, message) {
1927
+ //
1928
+ // {
1929
+ // "action": "sub",
1930
+ // "code": 2002,
1931
+ // "ch": "accounts.update#2",
1932
+ // "message": "invalid.auth.state"
1933
+ // }
1934
+ //
1935
+ // {
1936
+ // "ts": 1586323747018,
1937
+ // "status": "error",
1938
+ // 'err-code': "bad-request",
1939
+ // 'err-msg': "invalid mbp.150.symbol linkusdt",
1940
+ // "id": "2"
1941
+ // }
1942
+ //
1943
+ // {
1944
+ // "op": "sub",
1945
+ // "cid": "1",
1946
+ // "topic": "accounts_unify.USDT",
1947
+ // "err-code": 4007,
1948
+ // 'err-msg': "Non - single account user is not available, please check through the cross and isolated account asset interface",
1949
+ // "ts": 1698419490189
1950
+ // }
1951
+ // {
1952
+ // "action":"req",
1953
+ // "code":2002,
1954
+ // "ch":"auth",
1955
+ // "message":"auth.fail"
1956
+ // }
1957
+ //
1958
+ const status = this.safeString(message, 'status');
1959
+ if (status === 'error') {
1960
+ const id = this.safeString(message, 'id');
1961
+ const subscriptionsById = this.indexBy(client.subscriptions, 'id');
1962
+ const subscription = this.safeValue(subscriptionsById, id);
1963
+ if (subscription !== undefined) {
1964
+ const errorCode = this.safeString(message, 'err-code');
1965
+ try {
1966
+ this.throwExactlyMatchedException(this.exceptions['ws']['exact'], errorCode, this.json(message));
1967
+ throw new ExchangeError(this.json(message));
1968
+ }
1969
+ catch (e) {
1970
+ const messageHash = this.safeString(subscription, 'messageHash');
1971
+ client.reject(e, messageHash);
1972
+ client.reject(e, id);
1973
+ if (id in client.subscriptions) {
1974
+ delete client.subscriptions[id];
1975
+ }
1976
+ }
1977
+ }
1978
+ return false;
1979
+ }
1980
+ const code = this.safeString2(message, 'code', 'err-code');
1981
+ if (code !== undefined && ((code !== '200') && (code !== '0'))) {
1982
+ const feedback = this.id + ' ' + this.json(message);
1983
+ try {
1984
+ this.throwExactlyMatchedException(this.exceptions['ws']['exact'], code, feedback);
1985
+ throw new ExchangeError(feedback);
1986
+ }
1987
+ catch (e) {
1988
+ if (e instanceof AuthenticationError) {
1989
+ client.reject(e, 'auth');
1990
+ const method = 'auth';
1991
+ if (method in client.subscriptions) {
1992
+ delete client.subscriptions[method];
1993
+ }
1994
+ return false;
1995
+ }
1996
+ else {
1997
+ client.reject(e);
1998
+ }
1999
+ }
2000
+ }
2001
+ return true;
2002
+ }
2003
+ handleMessage(client, message) {
2004
+ if (this.handleErrorMessage(client, message)) {
2005
+ //
2006
+ // {"id":1583414227,"status":"ok","subbed":"market.btcusdt.mbp.150","ts":1583414229143}
2007
+ //
2008
+ // first ping format
2009
+ //
2010
+ // {"ping": 1645106821667 }
2011
+ //
2012
+ // second ping format
2013
+ //
2014
+ // {"action":"ping","data":{"ts":1645106821667}}
2015
+ //
2016
+ // third pong format
2017
+ //
2018
+ //
2019
+ // auth spot
2020
+ //
2021
+ // {
2022
+ // "action": "req",
2023
+ // "code": 200,
2024
+ // "ch": "auth",
2025
+ // "data": {}
2026
+ // }
2027
+ //
2028
+ // auth non spot
2029
+ //
2030
+ // {
2031
+ // "op": "auth",
2032
+ // "type": "api",
2033
+ // "err-code": 0,
2034
+ // "ts": 1645200307319,
2035
+ // "data": { "user-id": "35930539" }
2036
+ // }
2037
+ //
2038
+ // trade
2039
+ //
2040
+ // {
2041
+ // "action":"push",
2042
+ // "ch":"trade.clearing#ltcusdt#1",
2043
+ // "data":{
2044
+ // "eventType":"trade",
2045
+ // // ?
2046
+ // }
2047
+ // }
2048
+ //
2049
+ if ('id' in message) {
2050
+ this.handleSubscriptionStatus(client, message);
2051
+ return;
2052
+ }
2053
+ if ('action' in message) {
2054
+ const action = this.safeString(message, 'action');
2055
+ if (action === 'ping') {
2056
+ this.handlePing(client, message);
2057
+ return;
2058
+ }
2059
+ if (action === 'sub') {
2060
+ this.handleSubscriptionStatus(client, message);
2061
+ return;
2062
+ }
2063
+ }
2064
+ if ('ch' in message) {
2065
+ if (message['ch'] === 'auth') {
2066
+ this.handleAuthenticate(client, message);
2067
+ return;
2068
+ }
2069
+ else {
2070
+ // route by channel aka topic aka subject
2071
+ this.handleSubject(client, message);
2072
+ return;
2073
+ }
2074
+ }
2075
+ if ('op' in message) {
2076
+ const op = this.safeString(message, 'op');
2077
+ if (op === 'ping') {
2078
+ this.handlePing(client, message);
2079
+ return;
2080
+ }
2081
+ if (op === 'auth') {
2082
+ this.handleAuthenticate(client, message);
2083
+ return;
2084
+ }
2085
+ if (op === 'sub') {
2086
+ this.handleSubscriptionStatus(client, message);
2087
+ return;
2088
+ }
2089
+ if (op === 'notify') {
2090
+ this.handleSubject(client, message);
2091
+ return;
2092
+ }
2093
+ }
2094
+ if ('ping' in message) {
2095
+ this.handlePing(client, message);
2096
+ }
2097
+ }
2098
+ }
2099
+ handleMyTrade(client, message, extendParams = {}) {
2100
+ //
2101
+ // spot
2102
+ //
2103
+ // {
2104
+ // "action":"push",
2105
+ // "ch":"trade.clearing#ltcusdt#1",
2106
+ // "data":{
2107
+ // "eventType":"trade",
2108
+ // "symbol":"ltcusdt",
2109
+ // "orderId":"478862728954426",
2110
+ // "orderSide":"buy",
2111
+ // "orderType":"buy-market",
2112
+ // "accountId":44234548,
2113
+ // "source":"spot-web",
2114
+ // "orderValue":"5.01724137",
2115
+ // "orderCreateTime":1645124660365,
2116
+ // "orderStatus":"filled",
2117
+ // "feeCurrency":"ltc",
2118
+ // "tradePrice":"118.89",
2119
+ // "tradeVolume":"0.042200701236437042",
2120
+ // "aggressor":true,
2121
+ // "tradeId":101539740584,
2122
+ // "tradeTime":1645124660368,
2123
+ // "transactFee":"0.000041778694224073",
2124
+ // "feeDeduct":"0",
2125
+ // "feeDeductType":""
2126
+ // }
2127
+ // }
2128
+ //
2129
+ // contract
2130
+ //
2131
+ // {
2132
+ // "symbol": "ADA/USDT:USDT"
2133
+ // "ch": "orders_cross.ada-usdt"
2134
+ // "trades": [
2135
+ // {
2136
+ // "trade_fee":-0.022099447513812154,
2137
+ // "fee_asset":"ADA",
2138
+ // "trade_id":113913755890,
2139
+ // "id":"113913755890-773207641127878656-1",
2140
+ // "trade_volume":1,
2141
+ // "trade_price":0.0905,
2142
+ // "trade_turnover":10,
2143
+ // "created_at":1604388667194,
2144
+ // "profit":0,
2145
+ // "real_profit": 0,
2146
+ // "role":"maker"
2147
+ // }
2148
+ // ],
2149
+ // }
2150
+ //
2151
+ if (this.myTrades === undefined) {
2152
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
2153
+ this.myTrades = new ArrayCacheBySymbolById(limit);
2154
+ }
2155
+ const cachedTrades = this.myTrades;
2156
+ const messageHash = this.safeString(message, 'ch');
2157
+ if (messageHash !== undefined) {
2158
+ const data = this.safeValue(message, 'data');
2159
+ if (data !== undefined) {
2160
+ const parsed = this.parseWsTrade(data);
2161
+ const symbol = this.safeString(parsed, 'symbol');
2162
+ if (symbol !== undefined) {
2163
+ cachedTrades.append(parsed);
2164
+ client.resolve(this.myTrades, messageHash);
2165
+ }
2166
+ }
2167
+ else {
2168
+ // this trades object is artificially created
2169
+ // in handleOrder
2170
+ const rawTrades = this.safeValue(message, 'trades', []);
2171
+ const marketId = this.safeValue(message, 'symbol');
2172
+ const market = this.market(marketId);
2173
+ for (let i = 0; i < rawTrades.length; i++) {
2174
+ const trade = rawTrades[i];
2175
+ let parsedTrade = this.parseTrade(trade, market);
2176
+ // add extra params (side, type, ...) coming from the order
2177
+ parsedTrade = this.extend(parsedTrade, extendParams);
2178
+ cachedTrades.append(parsedTrade);
2179
+ }
2180
+ // messageHash here is the orders one, so
2181
+ // we have to recreate the trades messageHash = orderMessageHash + ':' + 'trade'
2182
+ const tradesHash = messageHash + ':' + 'trade';
2183
+ client.resolve(this.myTrades, tradesHash);
2184
+ // when we make an global order sub we have to send the channel like this
2185
+ // ch = orders_cross.* and we store messageHash = 'orders_cross'
2186
+ // however it is returned with the specific order update symbol: ch = orders_cross.btc-usd
2187
+ // since this is a global sub, our messageHash does not specify any symbol (ex: orders_cross:trade)
2188
+ // so we must remove it
2189
+ let genericOrderHash = messageHash.replace('.' + market['lowercaseId'], '');
2190
+ const lowerCaseBaseId = this.safeStringLower(market, 'baseId');
2191
+ genericOrderHash = genericOrderHash.replace('.' + lowerCaseBaseId, '');
2192
+ const genericTradesHash = genericOrderHash + ':' + 'trade';
2193
+ client.resolve(this.myTrades, genericTradesHash);
2194
+ }
2195
+ }
2196
+ }
2197
+ parseWsTrade(trade, market = undefined) {
2198
+ // spot private
2199
+ //
2200
+ // {
2201
+ // "eventType":"trade",
2202
+ // "symbol":"ltcusdt",
2203
+ // "orderId":"478862728954426",
2204
+ // "orderSide":"buy",
2205
+ // "orderType":"buy-market",
2206
+ // "accountId":44234548,
2207
+ // "source":"spot-web",
2208
+ // "orderValue":"5.01724137",
2209
+ // "orderCreateTime":1645124660365,
2210
+ // "orderStatus":"filled",
2211
+ // "feeCurrency":"ltc",
2212
+ // "tradePrice":"118.89",
2213
+ // "tradeVolume":"0.042200701236437042",
2214
+ // "aggressor":true,
2215
+ // "tradeId":101539740584,
2216
+ // "tradeTime":1645124660368,
2217
+ // "transactFee":"0.000041778694224073",
2218
+ // "feeDeduct":"0",
2219
+ // "feeDeductType":""
2220
+ // }
2221
+ //
2222
+ const symbol = this.safeSymbol(this.safeString(trade, 'symbol'));
2223
+ const side = this.safeString2(trade, 'side', 'orderSide');
2224
+ const tradeId = this.safeString(trade, 'tradeId');
2225
+ const price = this.safeString(trade, 'tradePrice');
2226
+ const amount = this.safeString(trade, 'tradeVolume');
2227
+ const order = this.safeString(trade, 'orderId');
2228
+ const timestamp = this.safeInteger(trade, 'tradeTime');
2229
+ market = this.market(symbol);
2230
+ const orderType = this.safeString(trade, 'orderType');
2231
+ const aggressor = this.safeValue(trade, 'aggressor');
2232
+ let takerOrMaker = undefined;
2233
+ if (aggressor !== undefined) {
2234
+ takerOrMaker = aggressor ? 'taker' : 'maker';
2235
+ }
2236
+ let type = undefined;
2237
+ let orderTypeParts = [];
2238
+ if (orderType !== undefined) {
2239
+ orderTypeParts = orderType.split('-');
2240
+ type = this.safeString(orderTypeParts, 1);
2241
+ }
2242
+ let fee = undefined;
2243
+ const feeCurrency = this.safeCurrencyCode(this.safeString(trade, 'feeCurrency'));
2244
+ if (feeCurrency !== undefined) {
2245
+ fee = {
2246
+ 'cost': this.safeString(trade, 'transactFee'),
2247
+ 'currency': feeCurrency,
2248
+ };
2249
+ }
2250
+ return this.safeTrade({
2251
+ 'info': trade,
2252
+ 'timestamp': timestamp,
2253
+ 'datetime': this.iso8601(timestamp),
2254
+ 'symbol': symbol,
2255
+ 'id': tradeId,
2256
+ 'order': order,
2257
+ 'type': type,
2258
+ 'takerOrMaker': takerOrMaker,
2259
+ 'side': side,
2260
+ 'price': price,
2261
+ 'amount': amount,
2262
+ 'cost': undefined,
2263
+ 'fee': fee,
2264
+ }, market);
2265
+ }
2266
+ getUrlByMarketType(type, isLinear = true, isPrivate = false, isFeed = false) {
2267
+ const api = this.safeString(this.options, 'api', 'api');
2268
+ const hostname = { 'hostname': this.hostname };
2269
+ let hostnameURL = undefined;
2270
+ let url = undefined;
2271
+ if (type === 'spot') {
2272
+ if (isPrivate) {
2273
+ hostnameURL = this.urls['api']['ws'][api]['spot']['private'];
2274
+ }
2275
+ else {
2276
+ if (isFeed) {
2277
+ hostnameURL = this.urls['api']['ws'][api]['spot']['feed'];
2278
+ }
2279
+ else {
2280
+ hostnameURL = this.urls['api']['ws'][api]['spot']['public'];
2281
+ }
2282
+ }
2283
+ url = this.implodeParams(hostnameURL, hostname);
2284
+ }
2285
+ else {
2286
+ const baseUrl = this.urls['api']['ws'][api][type];
2287
+ const subTypeUrl = isLinear ? baseUrl['linear'] : baseUrl['inverse'];
2288
+ url = isPrivate ? subTypeUrl['private'] : subTypeUrl['public'];
2289
+ }
2290
+ return url;
2291
+ }
2292
+ async subscribePublic(url, symbol, messageHash, method = undefined, params = {}) {
2293
+ const requestId = this.requestId();
2294
+ const request = {
2295
+ 'sub': messageHash,
2296
+ 'id': requestId,
2297
+ };
2298
+ const subscription = {
2299
+ 'id': requestId,
2300
+ 'messageHash': messageHash,
2301
+ 'symbol': symbol,
2302
+ 'params': params,
2303
+ };
2304
+ if (method !== undefined) {
2305
+ subscription['method'] = method;
2306
+ }
2307
+ return await this.watch(url, messageHash, this.extend(request, params), messageHash, subscription);
2308
+ }
2309
+ async subscribePrivate(channel, messageHash, type, subtype, params = {}, subscriptionParams = {}) {
2310
+ const requestId = this.requestId();
2311
+ const subscription = {
2312
+ 'id': requestId,
2313
+ 'messageHash': messageHash,
2314
+ 'params': params,
2315
+ };
2316
+ const extendedSubsription = this.extend(subscription, subscriptionParams);
2317
+ let request = undefined;
2318
+ if (type === 'spot') {
2319
+ request = {
2320
+ 'action': 'sub',
2321
+ 'ch': channel,
2322
+ };
2323
+ }
2324
+ else {
2325
+ request = {
2326
+ 'op': 'sub',
2327
+ 'topic': channel,
2328
+ 'cid': requestId,
2329
+ };
2330
+ }
2331
+ const isLinear = subtype === 'linear';
2332
+ const url = this.getUrlByMarketType(type, isLinear, true);
2333
+ const hostname = (type === 'spot') ? this.urls['hostnames']['spot'] : this.urls['hostnames']['contract'];
2334
+ const authParams = {
2335
+ 'type': type,
2336
+ 'url': url,
2337
+ 'hostname': hostname,
2338
+ };
2339
+ await this.authenticate(authParams);
2340
+ return await this.watch(url, messageHash, this.extend(request, params), channel, extendedSubsription);
2341
+ }
2342
+ async authenticate(params = {}) {
2343
+ const url = this.safeString(params, 'url');
2344
+ const hostname = this.safeString(params, 'hostname');
2345
+ const type = this.safeString(params, 'type');
2346
+ if (url === undefined || hostname === undefined || type === undefined) {
2347
+ throw new ArgumentsRequired(this.id + ' authenticate requires a url, hostname and type argument');
2348
+ }
2349
+ this.checkRequiredCredentials();
2350
+ const messageHash = 'auth';
2351
+ const relativePath = url.replace('wss://' + hostname, '');
2352
+ const client = this.client(url);
2353
+ const future = client.future(messageHash);
2354
+ const authenticated = this.safeValue(client.subscriptions, messageHash);
2355
+ if (authenticated === undefined) {
2356
+ const timestamp = this.ymdhms(this.milliseconds(), 'T');
2357
+ let signatureParams = undefined;
2358
+ if (type === 'spot') {
2359
+ signatureParams = {
2360
+ 'accessKey': this.apiKey,
2361
+ 'signatureMethod': 'HmacSHA256',
2362
+ 'signatureVersion': '2.1',
2363
+ 'timestamp': timestamp,
2364
+ };
2365
+ }
2366
+ else {
2367
+ signatureParams = {
2368
+ 'AccessKeyId': this.apiKey,
2369
+ 'SignatureMethod': 'HmacSHA256',
2370
+ 'SignatureVersion': '2',
2371
+ 'Timestamp': timestamp,
2372
+ };
2373
+ }
2374
+ signatureParams = this.keysort(signatureParams);
2375
+ const auth = this.urlencode(signatureParams);
2376
+ const payload = ['GET', hostname, relativePath, auth].join("\n"); // eslint-disable-line quotes
2377
+ const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');
2378
+ let request = undefined;
2379
+ if (type === 'spot') {
2380
+ const newParams = {
2381
+ 'authType': 'api',
2382
+ 'accessKey': this.apiKey,
2383
+ 'signatureMethod': 'HmacSHA256',
2384
+ 'signatureVersion': '2.1',
2385
+ 'timestamp': timestamp,
2386
+ 'signature': signature,
2387
+ };
2388
+ request = {
2389
+ 'params': newParams,
2390
+ 'action': 'req',
2391
+ 'ch': 'auth',
2392
+ };
2393
+ }
2394
+ else {
2395
+ request = {
2396
+ 'op': 'auth',
2397
+ 'type': 'api',
2398
+ 'AccessKeyId': this.apiKey,
2399
+ 'SignatureMethod': 'HmacSHA256',
2400
+ 'SignatureVersion': '2',
2401
+ 'Timestamp': timestamp,
2402
+ 'Signature': signature,
2403
+ };
2404
+ }
2405
+ const requestId = this.requestId();
2406
+ const subscription = {
2407
+ 'id': requestId,
2408
+ 'messageHash': messageHash,
2409
+ 'params': params,
2410
+ };
2411
+ this.watch(url, messageHash, request, messageHash, subscription);
2412
+ }
2413
+ return await future;
2414
+ }
2415
+ }