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,3847 @@
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
+ import Exchange from './abstract/hitbtc.js';
8
+ import { TICK_SIZE } from './base/functions/number.js';
9
+ import { Precise } from './base/Precise.js';
10
+ import { BadSymbol, BadRequest, OnMaintenance, AccountSuspended, PermissionDenied, ExchangeError, RateLimitExceeded, ExchangeNotAvailable, OrderNotFound, InsufficientFunds, InvalidOrder, AuthenticationError, ArgumentsRequired, NotSupported } from './base/errors.js';
11
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
12
+ /**
13
+ * @class hitbtc
14
+ * @augments Exchange
15
+ */
16
+ export default class hitbtc extends Exchange {
17
+ describe() {
18
+ return this.deepExtend(super.describe(), {
19
+ 'id': 'hitbtc',
20
+ 'name': 'HitBTC',
21
+ 'countries': ['HK'],
22
+ // 300 requests per second => 1000ms / 300 = 3.333 (Trading: placing, replacing, deleting)
23
+ // 30 requests per second => ( 1000ms / rateLimit ) / 30 = cost = 10 (Market Data and other Public Requests)
24
+ // 20 requests per second => ( 1000ms / rateLimit ) / 20 = cost = 15 (All Other)
25
+ 'rateLimit': 3.333,
26
+ 'version': '3',
27
+ 'has': {
28
+ 'CORS': false,
29
+ 'spot': true,
30
+ 'margin': true,
31
+ 'swap': true,
32
+ 'future': false,
33
+ 'option': false,
34
+ 'addMargin': true,
35
+ 'cancelAllOrders': true,
36
+ 'cancelOrder': true,
37
+ 'closePosition': false,
38
+ 'createDepositAddress': true,
39
+ 'createOrder': true,
40
+ 'createPostOnlyOrder': true,
41
+ 'createReduceOnlyOrder': true,
42
+ 'createStopLimitOrder': true,
43
+ 'createStopMarketOrder': true,
44
+ 'createStopOrder': true,
45
+ 'editOrder': true,
46
+ 'fetchAccounts': false,
47
+ 'fetchBalance': true,
48
+ 'fetchBorrowRateHistories': undefined,
49
+ 'fetchBorrowRateHistory': undefined,
50
+ 'fetchClosedOrders': true,
51
+ 'fetchCrossBorrowRate': false,
52
+ 'fetchCrossBorrowRates': false,
53
+ 'fetchCurrencies': true,
54
+ 'fetchDepositAddress': true,
55
+ 'fetchDepositAddresses': false,
56
+ 'fetchDepositAddressesByNetwork': false,
57
+ 'fetchDeposits': true,
58
+ 'fetchDepositsWithdrawals': true,
59
+ 'fetchDepositWithdrawFee': 'emulated',
60
+ 'fetchDepositWithdrawFees': true,
61
+ 'fetchFundingHistory': undefined,
62
+ 'fetchFundingRate': true,
63
+ 'fetchFundingRateHistory': true,
64
+ 'fetchFundingRates': true,
65
+ 'fetchGreeks': false,
66
+ 'fetchIndexOHLCV': true,
67
+ 'fetchIsolatedBorrowRate': false,
68
+ 'fetchIsolatedBorrowRates': false,
69
+ 'fetchLeverage': true,
70
+ 'fetchLeverageTiers': undefined,
71
+ 'fetchLiquidations': false,
72
+ 'fetchMarginMode': 'emulated',
73
+ 'fetchMarginModes': true,
74
+ 'fetchMarketLeverageTiers': false,
75
+ 'fetchMarkets': true,
76
+ 'fetchMarkOHLCV': true,
77
+ 'fetchMyLiquidations': false,
78
+ 'fetchMySettlementHistory': false,
79
+ 'fetchMyTrades': true,
80
+ 'fetchOHLCV': true,
81
+ 'fetchOpenInterest': true,
82
+ 'fetchOpenInterestHistory': false,
83
+ 'fetchOpenInterests': true,
84
+ 'fetchOpenOrder': true,
85
+ 'fetchOpenOrders': true,
86
+ 'fetchOption': false,
87
+ 'fetchOptionChain': false,
88
+ 'fetchOrder': true,
89
+ 'fetchOrderBook': true,
90
+ 'fetchOrderBooks': true,
91
+ 'fetchOrders': false,
92
+ 'fetchOrderTrades': true,
93
+ 'fetchPosition': true,
94
+ 'fetchPositions': true,
95
+ 'fetchPremiumIndexOHLCV': true,
96
+ 'fetchSettlementHistory': false,
97
+ 'fetchTicker': true,
98
+ 'fetchTickers': true,
99
+ 'fetchTrades': true,
100
+ 'fetchTradingFee': true,
101
+ 'fetchTradingFees': true,
102
+ 'fetchTransactions': 'emulated',
103
+ 'fetchVolatilityHistory': false,
104
+ 'fetchWithdrawals': true,
105
+ 'reduceMargin': true,
106
+ 'sandbox': true,
107
+ 'setLeverage': true,
108
+ 'setMargin': false,
109
+ 'setMarginMode': false,
110
+ 'setPositionMode': false,
111
+ 'transfer': true,
112
+ 'withdraw': true,
113
+ },
114
+ 'precisionMode': TICK_SIZE,
115
+ 'urls': {
116
+ 'logo': 'https://user-images.githubusercontent.com/1294454/27766555-8eaec20e-5edc-11e7-9c5b-6dc69fc42f5e.jpg',
117
+ 'test': {
118
+ 'public': 'https://api.demo.hitbtc.com/api/3',
119
+ 'private': 'https://api.demo.hitbtc.com/api/3',
120
+ },
121
+ 'api': {
122
+ 'public': 'https://api.hitbtc.com/api/3',
123
+ 'private': 'https://api.hitbtc.com/api/3',
124
+ },
125
+ 'www': 'https://hitbtc.com',
126
+ 'referral': 'https://hitbtc.com/?ref_id=5a5d39a65d466',
127
+ 'doc': [
128
+ 'https://api.hitbtc.com',
129
+ 'https://github.com/hitbtc-com/hitbtc-api/blob/master/APIv2.md',
130
+ ],
131
+ 'fees': [
132
+ 'https://hitbtc.com/fees-and-limits',
133
+ 'https://support.hitbtc.com/hc/en-us/articles/115005148605-Fees-and-limits',
134
+ ],
135
+ },
136
+ 'api': {
137
+ 'public': {
138
+ 'get': {
139
+ 'public/currency': 10,
140
+ 'public/currency/{currency}': 10,
141
+ 'public/symbol': 10,
142
+ 'public/symbol/{symbol}': 10,
143
+ 'public/ticker': 10,
144
+ 'public/ticker/{symbol}': 10,
145
+ 'public/price/rate': 10,
146
+ 'public/price/history': 10,
147
+ 'public/price/ticker': 10,
148
+ 'public/price/ticker/{symbol}': 10,
149
+ 'public/trades': 10,
150
+ 'public/trades/{symbol}': 10,
151
+ 'public/orderbook': 10,
152
+ 'public/orderbook/{symbol}': 10,
153
+ 'public/candles': 10,
154
+ 'public/candles/{symbol}': 10,
155
+ 'public/converted/candles': 10,
156
+ 'public/converted/candles/{symbol}': 10,
157
+ 'public/futures/info': 10,
158
+ 'public/futures/info/{symbol}': 10,
159
+ 'public/futures/history/funding': 10,
160
+ 'public/futures/history/funding/{symbol}': 10,
161
+ 'public/futures/candles/index_price': 10,
162
+ 'public/futures/candles/index_price/{symbol}': 10,
163
+ 'public/futures/candles/mark_price': 10,
164
+ 'public/futures/candles/mark_price/{symbol}': 10,
165
+ 'public/futures/candles/premium_index': 10,
166
+ 'public/futures/candles/premium_index/{symbol}': 10,
167
+ 'public/futures/candles/open_interest': 10,
168
+ 'public/futures/candles/open_interest/{symbol}': 10,
169
+ },
170
+ },
171
+ 'private': {
172
+ 'get': {
173
+ 'spot/balance': 15,
174
+ 'spot/balance/{currency}': 15,
175
+ 'spot/order': 1,
176
+ 'spot/order/{client_order_id}': 1,
177
+ 'spot/fee': 15,
178
+ 'spot/fee/{symbol}': 15,
179
+ 'spot/history/order': 15,
180
+ 'spot/history/trade': 15,
181
+ 'margin/account': 1,
182
+ 'margin/account/isolated/{symbol}': 1,
183
+ 'margin/account/cross/{currency}': 1,
184
+ 'margin/order': 1,
185
+ 'margin/order/{client_order_id}': 1,
186
+ 'margin/config': 15,
187
+ 'margin/history/order': 15,
188
+ 'margin/history/trade': 15,
189
+ 'margin/history/positions': 15,
190
+ 'margin/history/clearing': 15,
191
+ 'futures/balance': 15,
192
+ 'futures/balance/{currency}': 15,
193
+ 'futures/account': 1,
194
+ 'futures/account/isolated/{symbol}': 1,
195
+ 'futures/order': 1,
196
+ 'futures/order/{client_order_id}': 1,
197
+ 'futures/config': 15,
198
+ 'futures/fee': 15,
199
+ 'futures/fee/{symbol}': 15,
200
+ 'futures/history/order': 15,
201
+ 'futures/history/trade': 15,
202
+ 'futures/history/positions': 15,
203
+ 'futures/history/clearing': 15,
204
+ 'wallet/balance': 30,
205
+ 'wallet/balance/{currency}': 30,
206
+ 'wallet/crypto/address': 30,
207
+ 'wallet/crypto/address/recent-deposit': 30,
208
+ 'wallet/crypto/address/recent-withdraw': 30,
209
+ 'wallet/crypto/address/check-mine': 30,
210
+ 'wallet/transactions': 30,
211
+ 'wallet/transactions/{tx_id}': 30,
212
+ 'wallet/crypto/fee/estimate': 30,
213
+ 'wallet/airdrops': 30,
214
+ 'wallet/amount-locks': 30,
215
+ 'sub-account': 15,
216
+ 'sub-account/acl': 15,
217
+ 'sub-account/balance/{subAccID}': 15,
218
+ 'sub-account/crypto/address/{subAccID}/{currency}': 15,
219
+ },
220
+ 'post': {
221
+ 'spot/order': 1,
222
+ 'spot/order/list': 1,
223
+ 'margin/order': 1,
224
+ 'margin/order/list': 1,
225
+ 'futures/order': 1,
226
+ 'futures/order/list': 1,
227
+ 'wallet/crypto/address': 30,
228
+ 'wallet/crypto/withdraw': 30,
229
+ 'wallet/convert': 30,
230
+ 'wallet/transfer': 30,
231
+ 'wallet/internal/withdraw': 30,
232
+ 'wallet/crypto/check-offchain-available': 30,
233
+ 'wallet/crypto/fees/estimate': 30,
234
+ 'wallet/airdrops/{id}/claim': 30,
235
+ 'sub-account/freeze': 15,
236
+ 'sub-account/activate': 15,
237
+ 'sub-account/transfer': 15,
238
+ 'sub-account/acl': 15,
239
+ },
240
+ 'patch': {
241
+ 'spot/order/{client_order_id}': 1,
242
+ 'margin/order/{client_order_id}': 1,
243
+ 'futures/order/{client_order_id}': 1,
244
+ },
245
+ 'delete': {
246
+ 'spot/order': 1,
247
+ 'spot/order/{client_order_id}': 1,
248
+ 'margin/position': 1,
249
+ 'margin/position/isolated/{symbol}': 1,
250
+ 'margin/order': 1,
251
+ 'margin/order/{client_order_id}': 1,
252
+ 'futures/position': 1,
253
+ 'futures/position/{margin_mode}/{symbol}': 1,
254
+ 'futures/order': 1,
255
+ 'futures/order/{client_order_id}': 1,
256
+ 'wallet/crypto/withdraw/{id}': 30,
257
+ },
258
+ 'put': {
259
+ 'margin/account/isolated/{symbol}': 1,
260
+ 'futures/account/isolated/{symbol}': 1,
261
+ 'wallet/crypto/withdraw/{id}': 30,
262
+ },
263
+ },
264
+ },
265
+ 'fees': {
266
+ 'trading': {
267
+ 'tierBased': true,
268
+ 'percentage': true,
269
+ 'taker': this.parseNumber('0.0009'),
270
+ 'maker': this.parseNumber('0.0009'),
271
+ 'tiers': {
272
+ 'maker': [
273
+ [this.parseNumber('0'), this.parseNumber('0.0009')],
274
+ [this.parseNumber('10'), this.parseNumber('0.0007')],
275
+ [this.parseNumber('100'), this.parseNumber('0.0006')],
276
+ [this.parseNumber('500'), this.parseNumber('0.0005')],
277
+ [this.parseNumber('1000'), this.parseNumber('0.0003')],
278
+ [this.parseNumber('5000'), this.parseNumber('0.0002')],
279
+ [this.parseNumber('10000'), this.parseNumber('0.0001')],
280
+ [this.parseNumber('20000'), this.parseNumber('0')],
281
+ [this.parseNumber('50000'), this.parseNumber('-0.0001')],
282
+ [this.parseNumber('100000'), this.parseNumber('-0.0001')],
283
+ ],
284
+ 'taker': [
285
+ [this.parseNumber('0'), this.parseNumber('0.0009')],
286
+ [this.parseNumber('10'), this.parseNumber('0.0008')],
287
+ [this.parseNumber('100'), this.parseNumber('0.0007')],
288
+ [this.parseNumber('500'), this.parseNumber('0.0007')],
289
+ [this.parseNumber('1000'), this.parseNumber('0.0006')],
290
+ [this.parseNumber('5000'), this.parseNumber('0.0006')],
291
+ [this.parseNumber('10000'), this.parseNumber('0.0005')],
292
+ [this.parseNumber('20000'), this.parseNumber('0.0004')],
293
+ [this.parseNumber('50000'), this.parseNumber('0.0003')],
294
+ [this.parseNumber('100000'), this.parseNumber('0.0002')],
295
+ ],
296
+ },
297
+ },
298
+ },
299
+ 'features': {
300
+ 'default': {
301
+ 'sandbox': true,
302
+ 'createOrder': {
303
+ 'marginMode': false,
304
+ 'triggerPrice': true,
305
+ 'triggerPriceType': undefined,
306
+ 'triggerDirection': false,
307
+ 'stopLossPrice': false,
308
+ 'takeProfitPrice': false,
309
+ 'attachedStopLossTakeProfit': undefined,
310
+ 'timeInForce': {
311
+ 'IOC': true,
312
+ 'FOK': true,
313
+ 'PO': true,
314
+ 'GTD': true,
315
+ },
316
+ 'hedged': false,
317
+ 'selfTradePrevention': false,
318
+ 'trailing': false,
319
+ 'leverage': false,
320
+ 'marketBuyByCost': false,
321
+ 'marketBuyRequiresPrice': false,
322
+ 'iceberg': true,
323
+ },
324
+ 'createOrders': undefined,
325
+ 'fetchMyTrades': {
326
+ 'marginMode': true,
327
+ 'limit': 1000,
328
+ 'daysBack': 100000,
329
+ 'untilDays': 100000,
330
+ 'symbolRequired': false,
331
+ 'marketType': true,
332
+ },
333
+ 'fetchOrder': {
334
+ 'marginMode': true,
335
+ 'trigger': false,
336
+ 'trailing': false,
337
+ 'symbolRequired': false,
338
+ 'marketType': true,
339
+ },
340
+ 'fetchOpenOrders': {
341
+ 'marginMode': true,
342
+ 'limit': 1000,
343
+ 'trigger': false,
344
+ 'trailing': false,
345
+ 'symbolRequired': false,
346
+ 'marketType': true,
347
+ },
348
+ 'fetchOrders': undefined,
349
+ 'fetchClosedOrders': {
350
+ 'marginMode': true,
351
+ 'limit': 1000,
352
+ 'daysBack': 100000,
353
+ 'daysBackCanceled': 1,
354
+ 'untilDays': 100000,
355
+ 'trigger': false,
356
+ 'trailing': false,
357
+ 'symbolRequired': false,
358
+ 'marketType': true,
359
+ },
360
+ 'fetchOHLCV': {
361
+ 'limit': 1000,
362
+ },
363
+ },
364
+ 'spot': {
365
+ 'extends': 'default',
366
+ },
367
+ 'forDerivatives': {
368
+ 'extends': 'default',
369
+ 'createOrder': {
370
+ 'marginMode': true,
371
+ },
372
+ 'fetchOrder': {
373
+ 'marginMode': false,
374
+ },
375
+ 'fetchMyTrades': {
376
+ 'marginMode': false,
377
+ },
378
+ 'fetchOpenOrders': {
379
+ 'marginMode': false,
380
+ },
381
+ 'fetchClosedOrders': {
382
+ 'marginMode': false,
383
+ },
384
+ },
385
+ 'swap': {
386
+ 'linear': {
387
+ 'extends': 'forDerivatives',
388
+ },
389
+ 'inverse': {
390
+ 'extends': 'forDerivatives',
391
+ },
392
+ },
393
+ 'future': {
394
+ 'linear': {
395
+ 'extends': 'forDerivatives',
396
+ },
397
+ 'inverse': {
398
+ 'extends': 'forDerivatives',
399
+ },
400
+ },
401
+ },
402
+ 'timeframes': {
403
+ '1m': 'M1',
404
+ '3m': 'M3',
405
+ '5m': 'M5',
406
+ '15m': 'M15',
407
+ '30m': 'M30',
408
+ '1h': 'H1',
409
+ '4h': 'H4',
410
+ '1d': 'D1',
411
+ '1w': 'D7',
412
+ '1M': '1M',
413
+ },
414
+ 'exceptions': {
415
+ 'exact': {
416
+ '429': RateLimitExceeded,
417
+ '500': ExchangeError,
418
+ '503': ExchangeNotAvailable,
419
+ '504': ExchangeNotAvailable,
420
+ '600': PermissionDenied,
421
+ '800': ExchangeError,
422
+ '1002': AuthenticationError,
423
+ '1003': PermissionDenied,
424
+ '1004': AuthenticationError,
425
+ '1005': AuthenticationError,
426
+ '2001': BadSymbol,
427
+ '2002': BadRequest,
428
+ '2003': BadRequest,
429
+ '2010': BadRequest,
430
+ '2011': BadRequest,
431
+ '2012': BadRequest,
432
+ '2020': BadRequest,
433
+ '2022': BadRequest,
434
+ '2024': InvalidOrder,
435
+ '10001': BadRequest,
436
+ '10021': AccountSuspended,
437
+ '10022': BadRequest,
438
+ '20001': InsufficientFunds,
439
+ '20002': OrderNotFound,
440
+ '20003': ExchangeError,
441
+ '20004': ExchangeError,
442
+ '20005': ExchangeError,
443
+ '20006': ExchangeError,
444
+ '20007': ExchangeError,
445
+ '20008': InvalidOrder,
446
+ '20009': InvalidOrder,
447
+ '20010': OnMaintenance,
448
+ '20011': ExchangeError,
449
+ '20012': ExchangeError,
450
+ '20014': ExchangeError,
451
+ '20016': ExchangeError,
452
+ '20018': ExchangeError,
453
+ '20031': ExchangeError,
454
+ '20032': ExchangeError,
455
+ '20033': ExchangeError,
456
+ '20034': ExchangeError,
457
+ '20040': ExchangeError,
458
+ '20041': ExchangeError,
459
+ '20042': ExchangeError,
460
+ '20043': ExchangeError,
461
+ '20044': PermissionDenied,
462
+ '20045': InvalidOrder,
463
+ '20047': InvalidOrder,
464
+ '20048': InvalidOrder,
465
+ '20049': InvalidOrder,
466
+ '20080': ExchangeError,
467
+ '21001': ExchangeError,
468
+ '21003': AccountSuspended,
469
+ '21004': AccountSuspended,
470
+ '22004': ExchangeError,
471
+ '22008': ExchangeError, // Gateway timeout exceeded.
472
+ },
473
+ 'broad': {},
474
+ },
475
+ 'options': {
476
+ 'defaultNetwork': 'ERC20',
477
+ 'defaultNetworks': {
478
+ 'ETH': 'ETH',
479
+ 'USDT': 'TRC20',
480
+ },
481
+ 'networks': {
482
+ // mainnet network ids are in lowercase for BTC & ETH
483
+ 'BTC': 'btc',
484
+ 'OMNI': 'BTC',
485
+ 'ETH': 'eth',
486
+ 'ERC20': 'ETH',
487
+ 'ETC': 'ETC',
488
+ 'BEP20': 'BSC',
489
+ 'TRC20': 'TRX',
490
+ // '': 'UGT',
491
+ 'NEAR': 'NEAR',
492
+ // '': 'LWF',
493
+ 'DGB': 'DGB',
494
+ // '': 'YOYOW',
495
+ 'AE': 'AE',
496
+ // 'BCHABC': 'BCHABC',
497
+ // '': 'BCI',
498
+ // 'BYTECOIN': 'bcn',
499
+ 'AR': 'AR',
500
+ // '': 'HPC',
501
+ 'ADA': 'ADA',
502
+ // 'BELDEX': 'BDX',
503
+ // 'ARDOR': 'ARDR',
504
+ // 'NEBLIO': 'NEBL',
505
+ // '': 'DIM',
506
+ 'CHZ': 'CHZ',
507
+ // '': 'BET',
508
+ // '': '8BT',
509
+ 'ABBC': 'ABBC',
510
+ // '': 'ABTC',
511
+ // 'ACHAIN': 'ACT',
512
+ // '': 'ADK',
513
+ // '': 'AEON',
514
+ 'ALGO': 'ALGO',
515
+ // 'AMBROSUS': 'AMB',
516
+ // '': 'APL',
517
+ 'APT': 'APT',
518
+ // '': 'ARK',
519
+ // 'PIRATECHAIN': 'ARRR',
520
+ // '': 'ASP',
521
+ // '': 'ATB',
522
+ 'ATOM': 'ATOM',
523
+ 'AVAXC': 'AVAC',
524
+ 'AVAXX': 'AVAX',
525
+ // '': 'AYA',
526
+ // '': 'B2G',
527
+ // '': 'B2X',
528
+ // '': 'BANANO',
529
+ // '': 'BCCF',
530
+ 'BSV': 'BCHSV',
531
+ 'BEP2': 'BNB',
532
+ // 'BOSON': 'BOS',
533
+ // '': 'BRL', // brazilian real
534
+ // '': 'BST',
535
+ // 'BITCOINADDITION': 'BTCADD',
536
+ // '': 'BTCP',
537
+ // 'SUPERBTC': 'SBTC',
538
+ // 'BITCOINVAULT': 'BTCV',
539
+ // 'BITCOINGOLD': 'BTG',
540
+ // 'BITCOINDIAMOND': 'BCD',
541
+ // 'BITCONNECT': 'BCC',
542
+ // '': 'BTM',
543
+ // 'BITSHARES_OLD': 'BTS',
544
+ // '': 'BTX',
545
+ // '': 'BWI',
546
+ 'CELO': 'CELO',
547
+ // '': 'CENNZ',
548
+ // '': 'CHX',
549
+ 'CKB': 'CKB',
550
+ // 'CALLISTO': 'CLO',
551
+ // '': 'CLR',
552
+ // '': 'CNX',
553
+ // '': 'CRS',
554
+ // '': 'CSOV',
555
+ 'CTXC': 'CTXC',
556
+ // '': 'CURE',
557
+ // 'CONSTELLATION': 'DAG',
558
+ // '': 'DAPS',
559
+ 'DASH': 'DASH',
560
+ // '': 'DBIX',
561
+ 'DCR': 'DCR',
562
+ // '': 'DCT',
563
+ // '': 'DDR',
564
+ // '': 'DNA',
565
+ 'DOGE': 'doge',
566
+ // 'POLKADOT': 'DOT',
567
+ // '': 'NEWDOT', POLKADOT NEW
568
+ // '': 'dsh',
569
+ // '': 'ECA',
570
+ // '': 'ECOIN',
571
+ // '': 'EEX',
572
+ 'EGLD': 'EGLD',
573
+ // '': 'ELE',
574
+ // 'ELECTRONEUM': 'Electroneum',
575
+ // '': 'ELM',
576
+ // '': 'EMC',
577
+ 'EOS': 'EOS',
578
+ // 'AERGO': 'ERG',
579
+ 'ETHW': 'ETHW',
580
+ // 'ETHERLITE': 'ETL',
581
+ // '': 'ETP', // metaverse etp
582
+ // '': 'EUNO',
583
+ 'EVER': 'EVER',
584
+ // '': 'EXP',
585
+ // '': 'fcn',
586
+ 'FET': 'FET',
587
+ 'FIL': 'FIL',
588
+ // '': 'FIRO',
589
+ 'FLOW': 'FLOW',
590
+ // '': 'G999',
591
+ // '': 'GAME',
592
+ // '': 'GASP',
593
+ // '': 'GBX',
594
+ // '': 'GHOST',
595
+ // '': 'GLEEC',
596
+ 'GLMR': 'GLMR',
597
+ // '': 'GMD',
598
+ // '': 'GRAPH',
599
+ 'GRIN': 'GRIN',
600
+ 'HBAR': 'HBAR',
601
+ // '': 'HDG',
602
+ 'HIVE': 'HIVE',
603
+ // 'HARBOR': 'HRB',
604
+ // '': 'HSR',
605
+ // '': 'HTML',
606
+ 'HYDRA': 'HYDRA',
607
+ 'ICP': 'ICP',
608
+ 'ICX': 'ICX',
609
+ // '': 'IML',
610
+ 'IOST': 'IOST',
611
+ 'IOTA': 'IOTA',
612
+ 'IOTX': 'IOTX',
613
+ // '': 'IQ',
614
+ 'KAVA': 'KAVA',
615
+ 'KLAY': 'KIM',
616
+ 'KOMODO': 'KMD',
617
+ // '': 'KRM',
618
+ 'KSM': 'KSM',
619
+ // '': 'LAVA',
620
+ // 'LITECOINCASH': 'LCC',
621
+ 'LSK': 'LSK',
622
+ // '': 'LOC',
623
+ 'LTC': 'ltc',
624
+ // '': 'LTNM',
625
+ // 'TERRACLASSIC': 'LUNA',
626
+ // 'TERRA': 'LUNANEW',
627
+ // '': 'MAN',
628
+ // '': 'MESH',
629
+ 'MINA': 'MINA',
630
+ // '': 'MNX',
631
+ // 'MOBILECOIN': 'MOB',
632
+ 'MOVR': 'MOVR',
633
+ // '': 'MPK',
634
+ // '': 'MRV',
635
+ 'NANO': 'NANO',
636
+ // '': 'NAV',
637
+ 'NEO': 'NEO',
638
+ // 'NIMIQ': 'NIM',
639
+ // '': 'NJBC',
640
+ // '': 'NKN',
641
+ // '': 'NLC2',
642
+ // '': 'NOF',
643
+ // 'ENERGI': 'NRG',
644
+ // '': 'nxt',
645
+ // '': 'ODN',
646
+ 'ONE': 'ONE',
647
+ // 'ONTOLOGYGAS': 'ONG',
648
+ 'ONT': 'ONT',
649
+ 'OPTIMISM': 'OP',
650
+ // '': 'PAD',
651
+ // '': 'PART',
652
+ // '': 'PBKX',
653
+ // '': 'PLC',
654
+ 'PLCU': 'PLCU',
655
+ // '': 'PLI',
656
+ // '': 'POA',
657
+ 'MATIC': 'POLYGON',
658
+ // '': 'PPC',
659
+ // '': 'PQT',
660
+ // '': 'PROC',
661
+ // 'PASTEL': 'PSL',
662
+ // '': 'qcn',
663
+ 'QTUM': 'QTUM',
664
+ // '': 'RCOIN',
665
+ 'REI': 'REI',
666
+ // '': 'RIF',
667
+ // '': 'ROOTS',
668
+ 'OASIS': 'ROSE',
669
+ // '': 'RPX',
670
+ // '': 'RUB',
671
+ 'RVN': 'RVN',
672
+ // '': 'SBD',
673
+ 'SC': 'SC',
674
+ 'SCRT': 'SCRT',
675
+ // '': 'SLX',
676
+ // 'SMARTMESH': 'SMART',
677
+ // '': 'SMT',
678
+ // '': 'SNM',
679
+ 'SOL': 'SOL',
680
+ // '': 'SRX',
681
+ // '': 'STAK',
682
+ 'STEEM': 'STEEM',
683
+ // 'STRATIS': 'STRAT',
684
+ // '': 'TCN',
685
+ // '': 'TENT',
686
+ 'THETA': 'Theta',
687
+ // '': 'TIV',
688
+ // '': 'TNC',
689
+ // 'TON': 'TONCOIN',
690
+ 'TRUE': 'TRUE',
691
+ // '': 'TRY', // turkish lira
692
+ // '': 'UNO',
693
+ // '': 'USNOTA',
694
+ // '': 'VEO',
695
+ 'VET': 'VET',
696
+ // '': 'VITAE',
697
+ // 'VELAS': 'VLX',
698
+ 'VSYS': 'VSYS',
699
+ // '': 'VTC',
700
+ 'WAVES': 'WAVES',
701
+ 'WAX': 'WAX',
702
+ // '': 'WEALTH',
703
+ // 'WALTONCHAIN': 'WTC',
704
+ // '': 'WTT',
705
+ 'XCH': 'XCH',
706
+ // '': 'XDC', // xinfin?
707
+ // '': 'xdn',
708
+ // '': 'XDNCO',
709
+ // '': 'XDNICCO',
710
+ 'XEC': 'XEC',
711
+ 'NEM': 'XEM',
712
+ // 'HAVEN': 'XHV',
713
+ // '': 'XLC',
714
+ 'XLM': 'XLM',
715
+ // '': 'XMO',
716
+ 'XMR': 'xmr',
717
+ // 'MONEROCLASSIC': 'XMC',
718
+ // '': 'XNS',
719
+ // '': 'XPRM',
720
+ // '': 'XRC',
721
+ 'XRD': 'XRD',
722
+ 'XRP': 'XRP',
723
+ 'XTZ': 'XTZ',
724
+ 'XVG': 'XVG',
725
+ 'XYM': 'XYM',
726
+ 'ZEC': 'ZEC',
727
+ 'ZEN': 'ZEN',
728
+ 'ZIL': 'ZIL',
729
+ // '': 'ZYN',
730
+ },
731
+ 'accountsByType': {
732
+ 'spot': 'spot',
733
+ 'funding': 'wallet',
734
+ 'swap': 'derivatives',
735
+ 'future': 'derivatives',
736
+ },
737
+ 'withdraw': {
738
+ 'includeFee': false,
739
+ },
740
+ },
741
+ 'commonCurrencies': {
742
+ 'AUTO': 'Cube',
743
+ 'BCC': 'BCC',
744
+ 'BDP': 'BidiPass',
745
+ 'BET': 'DAO.Casino',
746
+ 'BIT': 'BitRewards',
747
+ 'BOX': 'BOX Token',
748
+ 'CPT': 'Cryptaur',
749
+ 'GET': 'Themis',
750
+ 'GMT': 'GMT Token',
751
+ 'HSR': 'HC',
752
+ 'IQ': 'IQ.Cash',
753
+ 'LNC': 'LinkerCoin',
754
+ 'PLA': 'PlayChip',
755
+ 'PNT': 'Penta',
756
+ 'SBTC': 'Super Bitcoin',
757
+ 'STEPN': 'GMT',
758
+ 'STX': 'STOX',
759
+ 'TV': 'Tokenville',
760
+ 'XMT': 'MTL',
761
+ 'XPNT': 'PNT',
762
+ },
763
+ });
764
+ }
765
+ nonce() {
766
+ return this.milliseconds();
767
+ }
768
+ /**
769
+ * @method
770
+ * @name hitbtc#fetchMarkets
771
+ * @description retrieves data on all markets for hitbtc
772
+ * @see https://api.hitbtc.com/#symbols
773
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
774
+ * @returns {object[]} an array of objects representing market data
775
+ */
776
+ async fetchMarkets(params = {}) {
777
+ const response = await this.publicGetPublicSymbol(params);
778
+ //
779
+ // {
780
+ // "AAVEUSDT_PERP":{
781
+ // "type":"futures",
782
+ // "expiry":null,
783
+ // "underlying":"AAVE",
784
+ // "base_currency":null,
785
+ // "quote_currency":"USDT",
786
+ // "quantity_increment":"0.01",
787
+ // "tick_size":"0.001",
788
+ // "take_rate":"0.0005",
789
+ // "make_rate":"0.0002",
790
+ // "fee_currency":"USDT",
791
+ // "margin_trading":true,
792
+ // "max_initial_leverage":"50.00"
793
+ // },
794
+ // "MANAUSDT":{
795
+ // "type":"spot",
796
+ // "base_currency":"MANA",
797
+ // "quote_currency":"USDT",
798
+ // "quantity_increment":"1",
799
+ // "tick_size":"0.0000001",
800
+ // "take_rate":"0.0025",
801
+ // "make_rate":"0.001",
802
+ // "fee_currency":"USDT",
803
+ // "margin_trading":true,
804
+ // "max_initial_leverage":"5.00"
805
+ // },
806
+ // }
807
+ //
808
+ const result = [];
809
+ const ids = Object.keys(response);
810
+ for (let i = 0; i < ids.length; i++) {
811
+ const id = ids[i];
812
+ if (id.endsWith('_BQX')) {
813
+ continue; // seems like an invalid symbol and if we try to access it individually we get: {"timestamp":"2023-09-02T14:38:20.351Z","error":{"description":"Try get /public/symbol, to get list of all available symbols.","code":2001,"message":"No such symbol: EOSUSD_BQX"},"path":"/api/3/public/symbol/EOSUSD_BQX","requestId":"e1e9fce6-16374591"}
814
+ }
815
+ const market = this.safeValue(response, id);
816
+ const marketType = this.safeString(market, 'type');
817
+ const expiry = this.safeInteger(market, 'expiry');
818
+ const contract = (marketType === 'futures');
819
+ const spot = (marketType === 'spot');
820
+ const marginTrading = this.safeBool(market, 'margin_trading', false);
821
+ const margin = spot && marginTrading;
822
+ const future = (expiry !== undefined);
823
+ const swap = (contract && !future);
824
+ const option = false;
825
+ const baseId = this.safeString2(market, 'base_currency', 'underlying');
826
+ const quoteId = this.safeString(market, 'quote_currency');
827
+ const feeCurrencyId = this.safeString(market, 'fee_currency');
828
+ const base = this.safeCurrencyCode(baseId);
829
+ const quote = this.safeCurrencyCode(quoteId);
830
+ const feeCurrency = this.safeCurrencyCode(feeCurrencyId);
831
+ let settleId = undefined;
832
+ let settle = undefined;
833
+ let symbol = base + '/' + quote;
834
+ let type = 'spot';
835
+ let contractSize = undefined;
836
+ let linear = undefined;
837
+ let inverse = undefined;
838
+ if (contract) {
839
+ contractSize = this.parseNumber('1');
840
+ settleId = feeCurrencyId;
841
+ settle = this.safeCurrencyCode(settleId);
842
+ linear = ((quote !== undefined) && (quote === settle));
843
+ inverse = !linear;
844
+ symbol = symbol + ':' + settle;
845
+ if (future) {
846
+ symbol = symbol + '-' + expiry;
847
+ type = 'future';
848
+ }
849
+ else {
850
+ type = 'swap';
851
+ }
852
+ }
853
+ const lotString = this.safeString(market, 'quantity_increment');
854
+ const stepString = this.safeString(market, 'tick_size');
855
+ const lot = this.parseNumber(lotString);
856
+ const step = this.parseNumber(stepString);
857
+ result.push({
858
+ 'id': id,
859
+ 'symbol': symbol,
860
+ 'base': base,
861
+ 'quote': quote,
862
+ 'settle': settle,
863
+ 'baseId': baseId,
864
+ 'quoteId': quoteId,
865
+ 'settleId': settleId,
866
+ 'type': type,
867
+ 'spot': spot,
868
+ 'margin': margin,
869
+ 'swap': swap,
870
+ 'future': future,
871
+ 'option': option,
872
+ 'active': true,
873
+ 'contract': contract,
874
+ 'linear': linear,
875
+ 'inverse': inverse,
876
+ 'taker': this.safeNumber(market, 'take_rate'),
877
+ 'maker': this.safeNumber(market, 'make_rate'),
878
+ 'contractSize': contractSize,
879
+ 'expiry': expiry,
880
+ 'expiryDatetime': undefined,
881
+ 'strike': undefined,
882
+ 'optionType': undefined,
883
+ 'feeCurrency': feeCurrency,
884
+ 'precision': {
885
+ 'amount': lot,
886
+ 'price': step,
887
+ },
888
+ 'limits': {
889
+ 'leverage': {
890
+ 'min': this.parseNumber('1'),
891
+ 'max': this.safeNumber(market, 'max_initial_leverage', 1),
892
+ },
893
+ 'amount': {
894
+ 'min': lot,
895
+ 'max': undefined,
896
+ },
897
+ 'price': {
898
+ 'min': step,
899
+ 'max': undefined,
900
+ },
901
+ 'cost': {
902
+ 'min': this.parseNumber(Precise.stringMul(lotString, stepString)),
903
+ 'max': undefined,
904
+ },
905
+ },
906
+ 'created': undefined,
907
+ 'info': market,
908
+ });
909
+ }
910
+ return result;
911
+ }
912
+ /**
913
+ * @method
914
+ * @name hitbtc#fetchCurrencies
915
+ * @description fetches all available currencies on an exchange
916
+ * @see https://api.hitbtc.com/#currencies
917
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
918
+ * @returns {object} an associative dictionary of currencies
919
+ */
920
+ async fetchCurrencies(params = {}) {
921
+ const response = await this.publicGetPublicCurrency(params);
922
+ //
923
+ // {
924
+ // "DFC": {
925
+ // "full_name": "DeFiScale",
926
+ // "crypto": true,
927
+ // "payin_enabled": false,
928
+ // "payout_enabled": true,
929
+ // "transfer_enabled": false,
930
+ // "transfer_to_wallet_enabled": true,
931
+ // "transfer_to_exchange_enabled": false,
932
+ // "sign": "D",
933
+ // "crypto_payment_id_name": "",
934
+ // "crypto_explorer": "https://etherscan.io/tx/{tx}",
935
+ // "precision_transfer": "0.00000001",
936
+ // "delisted": false,
937
+ // "networks": [
938
+ // {
939
+ // "code": "ETH",
940
+ // "network_name": "Ethereum",
941
+ // "network": "ETH",
942
+ // "protocol": "ERC-20",
943
+ // "default": true,
944
+ // "is_ens_available": true,
945
+ // "payin_enabled": true,
946
+ // "payout_enabled": true,
947
+ // "precision_payout": "0.000000000000000001",
948
+ // "payout_fee": "277000.0000000000",
949
+ // "payout_is_payment_id": false,
950
+ // "payin_payment_id": false,
951
+ // "payin_confirmations": "2",
952
+ // "contract_address": "0x1b2a76da77d03b7fc21189d9838f55bd849014af",
953
+ // "crypto_payment_id_name": "",
954
+ // "crypto_explorer": "https://etherscan.io/tx/{tx}",
955
+ // "is_multichain": true,
956
+ // "asset_id": {
957
+ // "contract_address": "0x1b2a76da77d03b7fc21189d9838f55bd849014af"
958
+ // }
959
+ // }
960
+ // ]
961
+ // },
962
+ // }
963
+ //
964
+ const result = {};
965
+ const currencies = Object.keys(response);
966
+ for (let i = 0; i < currencies.length; i++) {
967
+ const currencyId = currencies[i];
968
+ const code = this.safeCurrencyCode(currencyId);
969
+ const entry = response[currencyId];
970
+ const rawNetworks = this.safeList(entry, 'networks', []);
971
+ const networks = {};
972
+ for (let j = 0; j < rawNetworks.length; j++) {
973
+ const rawNetwork = rawNetworks[j];
974
+ const networkId = this.safeString2(rawNetwork, 'protocol', 'network');
975
+ let networkCode = this.networkIdToCode(networkId);
976
+ networkCode = (networkCode !== undefined) ? networkCode.toUpperCase() : code; // as hitbtc is white label, ensure we safeguard from possible bugs
977
+ networks[networkCode] = {
978
+ 'info': rawNetwork,
979
+ 'id': networkId,
980
+ 'network': networkCode,
981
+ 'active': undefined,
982
+ 'fee': this.safeNumber(rawNetwork, 'payout_fee'),
983
+ 'deposit': this.safeBool(rawNetwork, 'payin_enabled'),
984
+ 'withdraw': this.safeBool(rawNetwork, 'payout_enabled'),
985
+ 'precision': this.safeNumber(rawNetwork, 'precision_payout'),
986
+ 'limits': {
987
+ 'withdraw': {
988
+ 'min': undefined,
989
+ 'max': undefined,
990
+ },
991
+ },
992
+ };
993
+ }
994
+ result[code] = this.safeCurrencyStructure({
995
+ 'info': entry,
996
+ 'code': code,
997
+ 'id': currencyId,
998
+ 'precision': this.safeNumber(entry, 'precision_transfer'),
999
+ 'name': this.safeString(entry, 'full_name'),
1000
+ 'active': !this.safeBool(entry, 'delisted'),
1001
+ 'deposit': this.safeBool(entry, 'payin_enabled'),
1002
+ 'withdraw': this.safeBool(entry, 'payout_enabled'),
1003
+ 'networks': networks,
1004
+ 'fee': undefined,
1005
+ 'limits': {
1006
+ 'amount': {
1007
+ 'min': undefined,
1008
+ 'max': undefined,
1009
+ },
1010
+ },
1011
+ 'type': undefined, // 'crypto' field emits incorrect values
1012
+ });
1013
+ }
1014
+ return result;
1015
+ }
1016
+ /**
1017
+ * @method
1018
+ * @name hitbtc#createDepositAddress
1019
+ * @description create a currency deposit address
1020
+ * @see https://api.hitbtc.com/#generate-deposit-crypto-address
1021
+ * @param {string} code unified currency code of the currency for the deposit address
1022
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1023
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1024
+ */
1025
+ async createDepositAddress(code, params = {}) {
1026
+ await this.loadMarkets();
1027
+ const currency = this.currency(code);
1028
+ const request = {
1029
+ 'currency': currency['id'],
1030
+ };
1031
+ const network = this.safeStringUpper(params, 'network');
1032
+ if ((network !== undefined) && (code === 'USDT')) {
1033
+ const networks = this.safeValue(this.options, 'networks');
1034
+ const parsedNetwork = this.safeString(networks, network);
1035
+ if (parsedNetwork !== undefined) {
1036
+ request['currency'] = parsedNetwork;
1037
+ }
1038
+ params = this.omit(params, 'network');
1039
+ }
1040
+ const response = await this.privatePostWalletCryptoAddress(this.extend(request, params));
1041
+ //
1042
+ // {"currency":"ETH","address":"0xd0d9aea60c41988c3e68417e2616065617b7afd3"}
1043
+ //
1044
+ const currencyId = this.safeString(response, 'currency');
1045
+ return {
1046
+ 'currency': this.safeCurrencyCode(currencyId),
1047
+ 'address': this.safeString(response, 'address'),
1048
+ 'tag': this.safeString(response, 'payment_id'),
1049
+ 'network': undefined,
1050
+ 'info': response,
1051
+ };
1052
+ }
1053
+ /**
1054
+ * @method
1055
+ * @name hitbtc#fetchDepositAddress
1056
+ * @description fetch the deposit address for a currency associated with this account
1057
+ * @see https://api.hitbtc.com/#get-deposit-crypto-address
1058
+ * @param {string} code unified currency code
1059
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1060
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1061
+ */
1062
+ async fetchDepositAddress(code, params = {}) {
1063
+ await this.loadMarkets();
1064
+ const currency = this.currency(code);
1065
+ const request = {
1066
+ 'currency': currency['id'],
1067
+ };
1068
+ const network = this.safeStringUpper(params, 'network');
1069
+ if ((network !== undefined) && (code === 'USDT')) {
1070
+ const networks = this.safeValue(this.options, 'networks');
1071
+ const parsedNetwork = this.safeString(networks, network);
1072
+ if (parsedNetwork !== undefined) {
1073
+ request['currency'] = parsedNetwork;
1074
+ }
1075
+ params = this.omit(params, 'network');
1076
+ }
1077
+ const response = await this.privateGetWalletCryptoAddress(this.extend(request, params));
1078
+ //
1079
+ // [{"currency":"ETH","address":"0xd0d9aea60c41988c3e68417e2616065617b7afd3"}]
1080
+ //
1081
+ const firstAddress = this.safeValue(response, 0);
1082
+ const address = this.safeString(firstAddress, 'address');
1083
+ const currencyId = this.safeString(firstAddress, 'currency');
1084
+ const tag = this.safeString(firstAddress, 'payment_id');
1085
+ const parsedCode = this.safeCurrencyCode(currencyId);
1086
+ return {
1087
+ 'info': response,
1088
+ 'currency': parsedCode,
1089
+ 'network': undefined,
1090
+ 'address': address,
1091
+ 'tag': tag,
1092
+ };
1093
+ }
1094
+ parseBalance(response) {
1095
+ const result = { 'info': response };
1096
+ for (let i = 0; i < response.length; i++) {
1097
+ const entry = response[i];
1098
+ const currencyId = this.safeString(entry, 'currency');
1099
+ const code = this.safeCurrencyCode(currencyId);
1100
+ const account = this.account();
1101
+ account['free'] = this.safeString(entry, 'available');
1102
+ account['used'] = this.safeString(entry, 'reserved');
1103
+ result[code] = account;
1104
+ }
1105
+ return this.safeBalance(result);
1106
+ }
1107
+ /**
1108
+ * @method
1109
+ * @name hitbtc#fetchBalance
1110
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1111
+ * @see https://api.hitbtc.com/#wallet-balance
1112
+ * @see https://api.hitbtc.com/#get-spot-trading-balance
1113
+ * @see https://api.hitbtc.com/#get-trading-balance
1114
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1115
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1116
+ */
1117
+ async fetchBalance(params = {}) {
1118
+ const type = this.safeStringLower(params, 'type', 'spot');
1119
+ params = this.omit(params, ['type']);
1120
+ const accountsByType = this.safeValue(this.options, 'accountsByType', {});
1121
+ const account = this.safeString(accountsByType, type, type);
1122
+ let response = undefined;
1123
+ if (account === 'wallet') {
1124
+ response = await this.privateGetWalletBalance(params);
1125
+ }
1126
+ else if (account === 'spot') {
1127
+ response = await this.privateGetSpotBalance(params);
1128
+ }
1129
+ else if (account === 'derivatives') {
1130
+ response = await this.privateGetFuturesBalance(params);
1131
+ }
1132
+ else {
1133
+ const keys = Object.keys(accountsByType);
1134
+ throw new BadRequest(this.id + ' fetchBalance() type parameter must be one of ' + keys.join(', '));
1135
+ }
1136
+ //
1137
+ // [
1138
+ // {
1139
+ // "currency": "PAXG",
1140
+ // "available": "0",
1141
+ // "reserved": "0",
1142
+ // "reserved_margin": "0",
1143
+ // },
1144
+ // ...
1145
+ // ]
1146
+ //
1147
+ return this.parseBalance(response);
1148
+ }
1149
+ /**
1150
+ * @method
1151
+ * @name hitbtc#fetchTicker
1152
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
1153
+ * @see https://api.hitbtc.com/#tickers
1154
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
1155
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1156
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1157
+ */
1158
+ async fetchTicker(symbol, params = {}) {
1159
+ await this.loadMarkets();
1160
+ const market = this.market(symbol);
1161
+ const request = {
1162
+ 'symbol': market['id'],
1163
+ };
1164
+ const response = await this.publicGetPublicTickerSymbol(this.extend(request, params));
1165
+ //
1166
+ // {
1167
+ // "ask": "0.020572",
1168
+ // "bid": "0.020566",
1169
+ // "last": "0.020574",
1170
+ // "low": "0.020388",
1171
+ // "high": "0.021084",
1172
+ // "open": "0.020913",
1173
+ // "volume": "138444.3666",
1174
+ // "volume_quote": "2853.6874972480",
1175
+ // "timestamp": "2021-06-02T17:52:36.731Z"
1176
+ // }
1177
+ //
1178
+ return this.parseTicker(response, market);
1179
+ }
1180
+ /**
1181
+ * @method
1182
+ * @name hitbtc#fetchTickers
1183
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1184
+ * @see https://api.hitbtc.com/#tickers
1185
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1186
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1187
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1188
+ */
1189
+ async fetchTickers(symbols = undefined, params = {}) {
1190
+ await this.loadMarkets();
1191
+ symbols = this.marketSymbols(symbols);
1192
+ const request = {};
1193
+ if (symbols !== undefined) {
1194
+ const marketIds = this.marketIds(symbols);
1195
+ const delimited = marketIds.join(',');
1196
+ request['symbols'] = delimited;
1197
+ }
1198
+ const response = await this.publicGetPublicTicker(this.extend(request, params));
1199
+ //
1200
+ // {
1201
+ // "BTCUSDT": {
1202
+ // "ask": "63049.06",
1203
+ // "bid": "63046.41",
1204
+ // "last": "63048.36",
1205
+ // "low": "62010.00",
1206
+ // "high": "66657.99",
1207
+ // "open": "64839.75",
1208
+ // "volume": "15272.13278",
1209
+ // "volume_quote": "976312127.6277998",
1210
+ // "timestamp": "2021-10-22T04:25:47.573Z"
1211
+ // }
1212
+ // }
1213
+ //
1214
+ const result = {};
1215
+ const keys = Object.keys(response);
1216
+ for (let i = 0; i < keys.length; i++) {
1217
+ const marketId = keys[i];
1218
+ const market = this.safeMarket(marketId);
1219
+ const symbol = market['symbol'];
1220
+ const entry = response[marketId];
1221
+ result[symbol] = this.parseTicker(entry, market);
1222
+ }
1223
+ return this.filterByArrayTickers(result, 'symbol', symbols);
1224
+ }
1225
+ parseTicker(ticker, market = undefined) {
1226
+ //
1227
+ // {
1228
+ // "ask": "62756.01",
1229
+ // "bid": "62754.09",
1230
+ // "last": "62755.87",
1231
+ // "low": "62010.00",
1232
+ // "high": "66657.99",
1233
+ // "open": "65089.27",
1234
+ // "volume": "16719.50366",
1235
+ // "volume_quote": "1063422878.8156828",
1236
+ // "timestamp": "2021-10-22T07:29:14.585Z"
1237
+ // }
1238
+ //
1239
+ const timestamp = this.parse8601(ticker['timestamp']);
1240
+ const symbol = this.safeSymbol(undefined, market);
1241
+ const baseVolume = this.safeString(ticker, 'volume');
1242
+ const quoteVolume = this.safeString(ticker, 'volume_quote');
1243
+ const open = this.safeString(ticker, 'open');
1244
+ const last = this.safeString(ticker, 'last');
1245
+ return this.safeTicker({
1246
+ 'symbol': symbol,
1247
+ 'timestamp': timestamp,
1248
+ 'datetime': this.iso8601(timestamp),
1249
+ 'high': this.safeString(ticker, 'high'),
1250
+ 'low': this.safeString(ticker, 'low'),
1251
+ 'bid': this.safeString(ticker, 'bid'),
1252
+ 'bidVolume': undefined,
1253
+ 'ask': this.safeString(ticker, 'ask'),
1254
+ 'askVolume': undefined,
1255
+ 'vwap': undefined,
1256
+ 'open': open,
1257
+ 'close': last,
1258
+ 'last': last,
1259
+ 'previousClose': undefined,
1260
+ 'change': undefined,
1261
+ 'percentage': undefined,
1262
+ 'average': undefined,
1263
+ 'baseVolume': baseVolume,
1264
+ 'quoteVolume': quoteVolume,
1265
+ 'info': ticker,
1266
+ }, market);
1267
+ }
1268
+ /**
1269
+ * @method
1270
+ * @name hitbtc#fetchTrades
1271
+ * @description get the list of most recent trades for a particular symbol
1272
+ * @see https://api.hitbtc.com/#trades
1273
+ * @param {string} symbol unified symbol of the market to fetch trades for
1274
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1275
+ * @param {int} [limit] the maximum amount of trades to fetch
1276
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1277
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1278
+ */
1279
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1280
+ await this.loadMarkets();
1281
+ let market = undefined;
1282
+ const request = {};
1283
+ if (limit !== undefined) {
1284
+ request['limit'] = Math.min(limit, 1000);
1285
+ }
1286
+ if (since !== undefined) {
1287
+ request['from'] = since;
1288
+ }
1289
+ let response = undefined;
1290
+ if (symbol !== undefined) {
1291
+ market = this.market(symbol);
1292
+ request['symbol'] = market['id'];
1293
+ response = await this.publicGetPublicTradesSymbol(this.extend(request, params));
1294
+ }
1295
+ else {
1296
+ response = await this.publicGetPublicTrades(this.extend(request, params));
1297
+ }
1298
+ if (symbol !== undefined) {
1299
+ return this.parseTrades(response, market);
1300
+ }
1301
+ let trades = [];
1302
+ const marketIds = Object.keys(response);
1303
+ for (let i = 0; i < marketIds.length; i++) {
1304
+ const marketId = marketIds[i];
1305
+ const marketInner = this.market(marketId);
1306
+ const rawTrades = response[marketId];
1307
+ const parsed = this.parseTrades(rawTrades, marketInner);
1308
+ trades = this.arrayConcat(trades, parsed);
1309
+ }
1310
+ return trades;
1311
+ }
1312
+ /**
1313
+ * @method
1314
+ * @name hitbtc#fetchMyTrades
1315
+ * @description fetch all trades made by the user
1316
+ * @see https://api.hitbtc.com/#spot-trades-history
1317
+ * @see https://api.hitbtc.com/#futures-trades-history
1318
+ * @see https://api.hitbtc.com/#margin-trades-history
1319
+ * @param {string} symbol unified market symbol
1320
+ * @param {int} [since] the earliest time in ms to fetch trades for
1321
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1322
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1323
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
1324
+ * @param {bool} [params.margin] true for fetching margin trades
1325
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1326
+ */
1327
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1328
+ await this.loadMarkets();
1329
+ let market = undefined;
1330
+ const request = {};
1331
+ if (symbol !== undefined) {
1332
+ market = this.market(symbol);
1333
+ request['symbol'] = market['id'];
1334
+ }
1335
+ if (limit !== undefined) {
1336
+ request['limit'] = limit;
1337
+ }
1338
+ if (since !== undefined) {
1339
+ request['from'] = since;
1340
+ }
1341
+ let marketType = undefined;
1342
+ let marginMode = undefined;
1343
+ let response = undefined;
1344
+ [marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
1345
+ [marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
1346
+ params = this.omit(params, ['marginMode', 'margin']);
1347
+ if (marginMode !== undefined) {
1348
+ response = await this.privateGetMarginHistoryTrade(this.extend(request, params));
1349
+ }
1350
+ else {
1351
+ if (marketType === 'spot') {
1352
+ response = await this.privateGetSpotHistoryTrade(this.extend(request, params));
1353
+ }
1354
+ else if (marketType === 'swap') {
1355
+ response = await this.privateGetFuturesHistoryTrade(this.extend(request, params));
1356
+ }
1357
+ else if (marketType === 'margin') {
1358
+ response = await this.privateGetMarginHistoryTrade(this.extend(request, params));
1359
+ }
1360
+ else {
1361
+ throw new NotSupported(this.id + ' fetchMyTrades() not support this market type');
1362
+ }
1363
+ }
1364
+ return this.parseTrades(response, market, since, limit);
1365
+ }
1366
+ parseTrade(trade, market = undefined) {
1367
+ //
1368
+ // createOrder (market)
1369
+ //
1370
+ // {
1371
+ // "id": "1569252895",
1372
+ // "position_id": "0",
1373
+ // "quantity": "10",
1374
+ // "price": "0.03919424",
1375
+ // "fee": "0.000979856000",
1376
+ // "timestamp": "2022-01-25T19:38:36.153Z",
1377
+ // "taker": true
1378
+ // }
1379
+ //
1380
+ // fetchTrades
1381
+ //
1382
+ // {
1383
+ // "id": 974786185,
1384
+ // "price": "0.032462",
1385
+ // "qty": "0.3673",
1386
+ // "side": "buy",
1387
+ // "timestamp": "2020-10-16T12:57:39.846Z"
1388
+ // }
1389
+ //
1390
+ // fetchMyTrades spot
1391
+ //
1392
+ // {
1393
+ // "id": 277210397,
1394
+ // "clientOrderId": "6e102f3e7f3f4e04aeeb1cdc95592f1a",
1395
+ // "orderId": 28102855393,
1396
+ // "symbol": "ETHBTC",
1397
+ // "side": "sell",
1398
+ // "quantity": "0.002",
1399
+ // "price": "0.073365",
1400
+ // "fee": "0.000000147",
1401
+ // "timestamp": "2018-04-28T18:39:55.345Z",
1402
+ // "taker": true
1403
+ // }
1404
+ //
1405
+ // fetchMyTrades swap and margin
1406
+ //
1407
+ // {
1408
+ // "id": 4718564,
1409
+ // "order_id": 58730811958,
1410
+ // "client_order_id": "475c47d97f867f09726186eb22b4c3d4",
1411
+ // "symbol": "BTCUSDT_PERP",
1412
+ // "side": "sell",
1413
+ // "quantity": "0.0001",
1414
+ // "price": "41118.51",
1415
+ // "fee": "0.002055925500",
1416
+ // "timestamp": "2022-03-17T05:23:17.795Z",
1417
+ // "taker": true,
1418
+ // "position_id": 2350122,
1419
+ // "pnl": "0.002255000000",
1420
+ // "liquidation": false
1421
+ // }
1422
+ //
1423
+ const timestamp = this.parse8601(trade['timestamp']);
1424
+ const marketId = this.safeString(trade, 'symbol');
1425
+ market = this.safeMarket(marketId, market);
1426
+ const symbol = market['symbol'];
1427
+ let fee = undefined;
1428
+ const feeCostString = this.safeString(trade, 'fee');
1429
+ const taker = this.safeValue(trade, 'taker');
1430
+ let takerOrMaker;
1431
+ if (taker !== undefined) {
1432
+ takerOrMaker = taker ? 'taker' : 'maker';
1433
+ }
1434
+ else {
1435
+ takerOrMaker = 'taker'; // the only case when `taker` field is missing, is public fetchTrades and it must be taker
1436
+ }
1437
+ if (feeCostString !== undefined) {
1438
+ const info = this.safeValue(market, 'info', {});
1439
+ const feeCurrency = this.safeString(info, 'fee_currency');
1440
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrency);
1441
+ fee = {
1442
+ 'cost': feeCostString,
1443
+ 'currency': feeCurrencyCode,
1444
+ };
1445
+ }
1446
+ // we use clientOrderId as the order id with this exchange intentionally
1447
+ // because most of their endpoints will require clientOrderId
1448
+ // explained here: https://github.com/ccxt/ccxt/issues/5674
1449
+ const orderId = this.safeString2(trade, 'clientOrderId', 'client_order_id');
1450
+ const priceString = this.safeString(trade, 'price');
1451
+ const amountString = this.safeString2(trade, 'quantity', 'qty');
1452
+ const side = this.safeString(trade, 'side');
1453
+ const id = this.safeString(trade, 'id');
1454
+ return this.safeTrade({
1455
+ 'info': trade,
1456
+ 'id': id,
1457
+ 'order': orderId,
1458
+ 'timestamp': timestamp,
1459
+ 'datetime': this.iso8601(timestamp),
1460
+ 'symbol': symbol,
1461
+ 'type': undefined,
1462
+ 'side': side,
1463
+ 'takerOrMaker': takerOrMaker,
1464
+ 'price': priceString,
1465
+ 'amount': amountString,
1466
+ 'cost': undefined,
1467
+ 'fee': fee,
1468
+ }, market);
1469
+ }
1470
+ async fetchTransactionsHelper(types, code, since, limit, params) {
1471
+ await this.loadMarkets();
1472
+ const request = {
1473
+ 'types': types,
1474
+ };
1475
+ let currency = undefined;
1476
+ if (code !== undefined) {
1477
+ currency = this.currency(code);
1478
+ request['currencies'] = currency['id'];
1479
+ }
1480
+ if (since !== undefined) {
1481
+ request['from'] = this.iso8601(since);
1482
+ }
1483
+ if (limit !== undefined) {
1484
+ request['limit'] = limit;
1485
+ }
1486
+ const response = await this.privateGetWalletTransactions(this.extend(request, params));
1487
+ //
1488
+ // [
1489
+ // {
1490
+ // "id": "101609495",
1491
+ // "created_at": "2018-03-06T22:05:06.507Z",
1492
+ // "updated_at": "2018-03-06T22:11:45.03Z",
1493
+ // "status": "SUCCESS",
1494
+ // "type": "DEPOSIT",
1495
+ // "subtype": "BLOCKCHAIN",
1496
+ // "native": {
1497
+ // "tx_id": "e20b0965-4024-44d0-b63f-7fb8996a6706",
1498
+ // "index": "881652766",
1499
+ // "currency": "ETH",
1500
+ // "amount": "0.01418088",
1501
+ // "hash": "d95dbbff3f9234114f1211ab0ba2a94f03f394866fd5749d74a1edab80e6c5d3",
1502
+ // "address": "0xd9259302c32c0a0295d86a39185c9e14f6ba0a0d",
1503
+ // "confirmations": "20",
1504
+ // "senders": [
1505
+ // "0x243bec9256c9a3469da22103891465b47583d9f1"
1506
+ // ]
1507
+ // }
1508
+ // }
1509
+ // ]
1510
+ //
1511
+ return this.parseTransactions(response, currency, since, limit, params);
1512
+ }
1513
+ parseTransactionStatus(status) {
1514
+ const statuses = {
1515
+ 'CREATED': 'pending',
1516
+ 'PENDING': 'pending',
1517
+ 'FAILED': 'failed',
1518
+ 'ROLLED_BACK': 'failed',
1519
+ 'SUCCESS': 'ok',
1520
+ };
1521
+ return this.safeString(statuses, status, status);
1522
+ }
1523
+ parseTransactionType(type) {
1524
+ const types = {
1525
+ 'DEPOSIT': 'deposit',
1526
+ 'WITHDRAW': 'withdrawal',
1527
+ };
1528
+ return this.safeString(types, type, type);
1529
+ }
1530
+ parseTransaction(transaction, currency = undefined) {
1531
+ //
1532
+ // transaction
1533
+ //
1534
+ // {
1535
+ // "id": "101609495",
1536
+ // "created_at": "2018-03-06T22:05:06.507Z",
1537
+ // "updated_at": "2018-03-06T22:11:45.03Z",
1538
+ // "status": "SUCCESS",
1539
+ // "type": "DEPOSIT", // DEPOSIT, WITHDRAW, ..
1540
+ // "subtype": "BLOCKCHAIN",
1541
+ // "native": {
1542
+ // "tx_id": "e20b0965-4024-44d0-b63f-7fb8996a6706",
1543
+ // "index": "881652766",
1544
+ // "currency": "ETH",
1545
+ // "amount": "0.01418088",
1546
+ // "hash": "d95dbbff3f9234114f1211ab0ba2a94f03f394866fd5749d74a1edab80e6c5d3",
1547
+ // "address": "0xd9259302c32c0a0295d86a39185c9e14f6ba0a0d",
1548
+ // "confirmations": "20",
1549
+ // "senders": [
1550
+ // "0x243bec9256c9a3469da22103891465b47583d9f1"
1551
+ // ],
1552
+ // "fee": "1.22" // only for WITHDRAW
1553
+ // }
1554
+ // },
1555
+ // "operation_id": "084cfcd5-06b9-4826-882e-fdb75ec3625d", // only for WITHDRAW
1556
+ // "commit_risk": {}
1557
+ // withdraw
1558
+ //
1559
+ // {
1560
+ // "id":"084cfcd5-06b9-4826-882e-fdb75ec3625d"
1561
+ // }
1562
+ //
1563
+ const id = this.safeString2(transaction, 'operation_id', 'id');
1564
+ const timestamp = this.parse8601(this.safeString(transaction, 'created_at'));
1565
+ const updated = this.parse8601(this.safeString(transaction, 'updated_at'));
1566
+ const type = this.parseTransactionType(this.safeString(transaction, 'type'));
1567
+ const status = this.parseTransactionStatus(this.safeString(transaction, 'status'));
1568
+ const native = this.safeValue(transaction, 'native', {});
1569
+ const currencyId = this.safeString(native, 'currency');
1570
+ const code = this.safeCurrencyCode(currencyId);
1571
+ const txhash = this.safeString(native, 'hash');
1572
+ const address = this.safeString(native, 'address');
1573
+ const addressTo = address;
1574
+ const tag = this.safeString(native, 'payment_id');
1575
+ const tagTo = tag;
1576
+ const sender = this.safeValue(native, 'senders');
1577
+ const addressFrom = this.safeString(sender, 0);
1578
+ const amount = this.safeNumber(native, 'amount');
1579
+ const subType = this.safeString(transaction, 'subtype');
1580
+ const internal = subType === 'OFFCHAIN';
1581
+ // https://api.hitbtc.com/#check-if-offchain-is-available
1582
+ const fee = {
1583
+ 'currency': undefined,
1584
+ 'cost': undefined,
1585
+ 'rate': undefined,
1586
+ };
1587
+ const feeCost = this.safeNumber(native, 'fee');
1588
+ if (feeCost !== undefined) {
1589
+ fee['currency'] = code;
1590
+ fee['cost'] = feeCost;
1591
+ }
1592
+ return {
1593
+ 'info': transaction,
1594
+ 'id': id,
1595
+ 'txid': txhash,
1596
+ 'type': type,
1597
+ 'currency': code,
1598
+ 'network': undefined,
1599
+ 'amount': amount,
1600
+ 'status': status,
1601
+ 'timestamp': timestamp,
1602
+ 'datetime': this.iso8601(timestamp),
1603
+ 'address': address,
1604
+ 'addressFrom': addressFrom,
1605
+ 'addressTo': addressTo,
1606
+ 'tag': tag,
1607
+ 'tagFrom': undefined,
1608
+ 'tagTo': tagTo,
1609
+ 'updated': updated,
1610
+ 'comment': undefined,
1611
+ 'internal': internal,
1612
+ 'fee': fee,
1613
+ };
1614
+ }
1615
+ /**
1616
+ * @method
1617
+ * @name hitbtc#fetchDepositsWithdrawals
1618
+ * @description fetch history of deposits and withdrawals
1619
+ * @see https://api.hitbtc.com/#get-transactions-history
1620
+ * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
1621
+ * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
1622
+ * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
1623
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1624
+ * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1625
+ */
1626
+ async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
1627
+ return await this.fetchTransactionsHelper('DEPOSIT,WITHDRAW', code, since, limit, params);
1628
+ }
1629
+ /**
1630
+ * @method
1631
+ * @name hitbtc#fetchDeposits
1632
+ * @description fetch all deposits made to an account
1633
+ * @see https://api.hitbtc.com/#get-transactions-history
1634
+ * @param {string} code unified currency code
1635
+ * @param {int} [since] the earliest time in ms to fetch deposits for
1636
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
1637
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1638
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1639
+ */
1640
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
1641
+ return await this.fetchTransactionsHelper('DEPOSIT', code, since, limit, params);
1642
+ }
1643
+ /**
1644
+ * @method
1645
+ * @name hitbtc#fetchWithdrawals
1646
+ * @description fetch all withdrawals made from an account
1647
+ * @see https://api.hitbtc.com/#get-transactions-history
1648
+ * @param {string} code unified currency code
1649
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
1650
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
1651
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1652
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1653
+ */
1654
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
1655
+ return await this.fetchTransactionsHelper('WITHDRAW', code, since, limit, params);
1656
+ }
1657
+ /**
1658
+ * @method
1659
+ * @name hitbtc#fetchOrderBooks
1660
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data for multiple markets
1661
+ * @see https://api.hitbtc.com/#order-books
1662
+ * @param {string[]} [symbols] list of unified market symbols, all symbols fetched if undefined, default is undefined
1663
+ * @param {int} [limit] max number of entries per orderbook to return, default is undefined
1664
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1665
+ * @returns {object} a dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbol
1666
+ */
1667
+ async fetchOrderBooks(symbols = undefined, limit = undefined, params = {}) {
1668
+ await this.loadMarkets();
1669
+ const request = {};
1670
+ if (symbols !== undefined) {
1671
+ const marketIdsInner = this.marketIds(symbols);
1672
+ request['symbols'] = marketIdsInner.join(',');
1673
+ }
1674
+ if (limit !== undefined) {
1675
+ request['depth'] = limit;
1676
+ }
1677
+ const response = await this.publicGetPublicOrderbook(this.extend(request, params));
1678
+ const result = {};
1679
+ const marketIds = Object.keys(response);
1680
+ for (let i = 0; i < marketIds.length; i++) {
1681
+ const marketId = marketIds[i];
1682
+ const orderbook = response[marketId];
1683
+ const symbol = this.safeSymbol(marketId);
1684
+ const timestamp = this.parse8601(this.safeString(orderbook, 'timestamp'));
1685
+ result[symbol] = this.parseOrderBook(response[marketId], symbol, timestamp, 'bid', 'ask');
1686
+ }
1687
+ return result;
1688
+ }
1689
+ /**
1690
+ * @method
1691
+ * @name hitbtc#fetchOrderBook
1692
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1693
+ * @see https://api.hitbtc.com/#order-books
1694
+ * @param {string} symbol unified symbol of the market to fetch the order book for
1695
+ * @param {int} [limit] the maximum amount of order book entries to return
1696
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1697
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1698
+ */
1699
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
1700
+ await this.loadMarkets();
1701
+ const market = this.market(symbol);
1702
+ const request = {
1703
+ 'symbol': market['id'],
1704
+ };
1705
+ if (limit !== undefined) {
1706
+ request['depth'] = limit;
1707
+ }
1708
+ const response = await this.publicGetPublicOrderbookSymbol(this.extend(request, params));
1709
+ const timestamp = this.parse8601(this.safeString(response, 'timestamp'));
1710
+ return this.parseOrderBook(response, symbol, timestamp, 'bid', 'ask');
1711
+ }
1712
+ parseTradingFee(fee, market = undefined) {
1713
+ //
1714
+ // {
1715
+ // "symbol":"ARVUSDT", // returned from fetchTradingFees only
1716
+ // "take_rate":"0.0009",
1717
+ // "make_rate":"0.0009"
1718
+ // }
1719
+ //
1720
+ const taker = this.safeNumber(fee, 'take_rate');
1721
+ const maker = this.safeNumber(fee, 'make_rate');
1722
+ const marketId = this.safeString(fee, 'symbol');
1723
+ const symbol = this.safeSymbol(marketId, market);
1724
+ return {
1725
+ 'info': fee,
1726
+ 'symbol': symbol,
1727
+ 'taker': taker,
1728
+ 'maker': maker,
1729
+ 'percentage': undefined,
1730
+ 'tierBased': undefined,
1731
+ };
1732
+ }
1733
+ /**
1734
+ * @method
1735
+ * @name hitbtc#fetchTradingFee
1736
+ * @description fetch the trading fees for a market
1737
+ * @see https://api.hitbtc.com/#get-trading-commission
1738
+ * @see https://api.hitbtc.com/#get-trading-commission-2
1739
+ * @param {string} symbol unified market symbol
1740
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1741
+ * @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
1742
+ */
1743
+ async fetchTradingFee(symbol, params = {}) {
1744
+ await this.loadMarkets();
1745
+ const market = this.market(symbol);
1746
+ const request = {
1747
+ 'symbol': market['id'],
1748
+ };
1749
+ let response = undefined;
1750
+ if (market['type'] === 'spot') {
1751
+ response = await this.privateGetSpotFeeSymbol(this.extend(request, params));
1752
+ }
1753
+ else if (market['type'] === 'swap') {
1754
+ response = await this.privateGetFuturesFeeSymbol(this.extend(request, params));
1755
+ }
1756
+ else {
1757
+ throw new NotSupported(this.id + ' fetchTradingFee() not support this market type');
1758
+ }
1759
+ //
1760
+ // {
1761
+ // "take_rate":"0.0009",
1762
+ // "make_rate":"0.0009"
1763
+ // }
1764
+ //
1765
+ return this.parseTradingFee(response, market);
1766
+ }
1767
+ /**
1768
+ * @method
1769
+ * @name hitbtc#fetchTradingFees
1770
+ * @description fetch the trading fees for multiple markets
1771
+ * @see https://api.hitbtc.com/#get-all-trading-commissions
1772
+ * @see https://api.hitbtc.com/#get-all-trading-commissions-2
1773
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1774
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
1775
+ */
1776
+ async fetchTradingFees(params = {}) {
1777
+ await this.loadMarkets();
1778
+ const [marketType, query] = this.handleMarketTypeAndParams('fetchTradingFees', undefined, params);
1779
+ let response = undefined;
1780
+ if (marketType === 'spot') {
1781
+ response = await this.privateGetSpotFee(query);
1782
+ }
1783
+ else if (marketType === 'swap') {
1784
+ response = await this.privateGetFuturesFee(query);
1785
+ }
1786
+ else {
1787
+ throw new NotSupported(this.id + ' fetchTradingFees() not support this market type');
1788
+ }
1789
+ //
1790
+ // [
1791
+ // {
1792
+ // "symbol":"ARVUSDT",
1793
+ // "take_rate":"0.0009",
1794
+ // "make_rate":"0.0009"
1795
+ // }
1796
+ // ]
1797
+ //
1798
+ const result = {};
1799
+ for (let i = 0; i < response.length; i++) {
1800
+ const fee = this.parseTradingFee(response[i]);
1801
+ const symbol = fee['symbol'];
1802
+ result[symbol] = fee;
1803
+ }
1804
+ return result;
1805
+ }
1806
+ /**
1807
+ * @method
1808
+ * @name hitbtc#fetchOHLCV
1809
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1810
+ * @see https://api.hitbtc.com/#candles
1811
+ * @see https://api.hitbtc.com/#futures-index-price-candles
1812
+ * @see https://api.hitbtc.com/#futures-mark-price-candles
1813
+ * @see https://api.hitbtc.com/#futures-premium-index-candles
1814
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1815
+ * @param {string} timeframe the length of time each candle represents
1816
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1817
+ * @param {int} [limit] the maximum amount of candles to fetch
1818
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1819
+ * @param {int} [params.until] timestamp in ms of the latest funding rate
1820
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1821
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1822
+ */
1823
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1824
+ await this.loadMarkets();
1825
+ let paginate = false;
1826
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');
1827
+ if (paginate) {
1828
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 1000);
1829
+ }
1830
+ const market = this.market(symbol);
1831
+ let request = {
1832
+ 'symbol': market['id'],
1833
+ 'period': this.safeString(this.timeframes, timeframe, timeframe),
1834
+ };
1835
+ if (since !== undefined) {
1836
+ request['from'] = this.iso8601(since);
1837
+ }
1838
+ [request, params] = this.handleUntilOption('until', request, params);
1839
+ if (limit !== undefined) {
1840
+ request['limit'] = Math.min(limit, 1000);
1841
+ }
1842
+ const price = this.safeString(params, 'price');
1843
+ params = this.omit(params, 'price');
1844
+ let response = undefined;
1845
+ if (price === 'mark') {
1846
+ response = await this.publicGetPublicFuturesCandlesMarkPriceSymbol(this.extend(request, params));
1847
+ }
1848
+ else if (price === 'index') {
1849
+ response = await this.publicGetPublicFuturesCandlesIndexPriceSymbol(this.extend(request, params));
1850
+ }
1851
+ else if (price === 'premiumIndex') {
1852
+ response = await this.publicGetPublicFuturesCandlesPremiumIndexSymbol(this.extend(request, params));
1853
+ }
1854
+ else {
1855
+ response = await this.publicGetPublicCandlesSymbol(this.extend(request, params));
1856
+ }
1857
+ //
1858
+ // Spot and Swap
1859
+ //
1860
+ // [
1861
+ // {
1862
+ // "timestamp": "2021-10-25T07:38:00.000Z",
1863
+ // "open": "4173.391",
1864
+ // "close": "4170.923",
1865
+ // "min": "4170.923",
1866
+ // "max": "4173.986",
1867
+ // "volume": "0.1879",
1868
+ // "volume_quote": "784.2517846"
1869
+ // }
1870
+ // ]
1871
+ //
1872
+ // Mark, Index and Premium Index
1873
+ //
1874
+ // [
1875
+ // {
1876
+ // "timestamp": "2022-04-01T01:28:00.000Z",
1877
+ // "open": "45146.39",
1878
+ // "close": "45219.43",
1879
+ // "min": "45146.39",
1880
+ // "max": "45219.43"
1881
+ // },
1882
+ // ]
1883
+ //
1884
+ return this.parseOHLCVs(response, market, timeframe, since, limit);
1885
+ }
1886
+ parseOHLCV(ohlcv, market = undefined) {
1887
+ //
1888
+ // Spot and Swap
1889
+ //
1890
+ // {
1891
+ // "timestamp":"2015-08-20T19:01:00.000Z",
1892
+ // "open":"0.006",
1893
+ // "close":"0.006",
1894
+ // "min":"0.006",
1895
+ // "max":"0.006",
1896
+ // "volume":"0.003",
1897
+ // "volume_quote":"0.000018"
1898
+ // }
1899
+ //
1900
+ // Mark, Index and Premium Index
1901
+ //
1902
+ // {
1903
+ // "timestamp": "2022-04-01T01:28:00.000Z",
1904
+ // "open": "45146.39",
1905
+ // "close": "45219.43",
1906
+ // "min": "45146.39",
1907
+ // "max": "45219.43"
1908
+ // },
1909
+ //
1910
+ return [
1911
+ this.parse8601(this.safeString(ohlcv, 'timestamp')),
1912
+ this.safeNumber(ohlcv, 'open'),
1913
+ this.safeNumber(ohlcv, 'max'),
1914
+ this.safeNumber(ohlcv, 'min'),
1915
+ this.safeNumber(ohlcv, 'close'),
1916
+ this.safeNumber(ohlcv, 'volume'),
1917
+ ];
1918
+ }
1919
+ /**
1920
+ * @method
1921
+ * @name hitbtc#fetchClosedOrders
1922
+ * @description fetches information on multiple closed orders made by the user
1923
+ * @see https://api.hitbtc.com/#spot-orders-history
1924
+ * @see https://api.hitbtc.com/#futures-orders-history
1925
+ * @see https://api.hitbtc.com/#margin-orders-history
1926
+ * @param {string} symbol unified market symbol of the market orders were made in
1927
+ * @param {int} [since] the earliest time in ms to fetch orders for
1928
+ * @param {int} [limit] the maximum number of order structures to retrieve
1929
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1930
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
1931
+ * @param {bool} [params.margin] true for fetching margin orders
1932
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1933
+ */
1934
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1935
+ await this.loadMarkets();
1936
+ let market = undefined;
1937
+ const request = {};
1938
+ if (symbol !== undefined) {
1939
+ market = this.market(symbol);
1940
+ request['symbol'] = market['id'];
1941
+ }
1942
+ if (since !== undefined) {
1943
+ request['from'] = this.iso8601(since);
1944
+ }
1945
+ if (limit !== undefined) {
1946
+ request['limit'] = limit;
1947
+ }
1948
+ let marketType = undefined;
1949
+ let marginMode = undefined;
1950
+ [marketType, params] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params);
1951
+ [marginMode, params] = this.handleMarginModeAndParams('fetchClosedOrders', params);
1952
+ params = this.omit(params, ['marginMode', 'margin']);
1953
+ let response = undefined;
1954
+ if (marginMode !== undefined) {
1955
+ response = await this.privateGetMarginHistoryOrder(this.extend(request, params));
1956
+ }
1957
+ else {
1958
+ if (marketType === 'spot') {
1959
+ response = await this.privateGetSpotHistoryOrder(this.extend(request, params));
1960
+ }
1961
+ else if (marketType === 'swap') {
1962
+ response = await this.privateGetFuturesHistoryOrder(this.extend(request, params));
1963
+ }
1964
+ else if (marketType === 'margin') {
1965
+ response = await this.privateGetMarginHistoryOrder(this.extend(request, params));
1966
+ }
1967
+ else {
1968
+ throw new NotSupported(this.id + ' fetchClosedOrders() not support this market type');
1969
+ }
1970
+ }
1971
+ const parsed = this.parseOrders(response, market, since, limit);
1972
+ return this.filterByArray(parsed, 'status', ['closed', 'canceled'], false);
1973
+ }
1974
+ /**
1975
+ * @method
1976
+ * @name hitbtc#fetchOrder
1977
+ * @description fetches information on an order made by the user
1978
+ * @see https://api.hitbtc.com/#spot-orders-history
1979
+ * @see https://api.hitbtc.com/#futures-orders-history
1980
+ * @see https://api.hitbtc.com/#margin-orders-history
1981
+ * @param {string} id order id
1982
+ * @param {string} symbol unified symbol of the market the order was made in
1983
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1984
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
1985
+ * @param {bool} [params.margin] true for fetching a margin order
1986
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1987
+ */
1988
+ async fetchOrder(id, symbol = undefined, params = {}) {
1989
+ await this.loadMarkets();
1990
+ let market = undefined;
1991
+ if (symbol !== undefined) {
1992
+ market = this.market(symbol);
1993
+ }
1994
+ const request = {
1995
+ 'client_order_id': id,
1996
+ };
1997
+ let marketType = undefined;
1998
+ let marginMode = undefined;
1999
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOrder', market, params);
2000
+ [marginMode, params] = this.handleMarginModeAndParams('fetchOrder', params);
2001
+ params = this.omit(params, ['marginMode', 'margin']);
2002
+ let response = undefined;
2003
+ if (marginMode !== undefined) {
2004
+ response = await this.privateGetMarginHistoryOrder(this.extend(request, params));
2005
+ }
2006
+ else {
2007
+ if (marketType === 'spot') {
2008
+ response = await this.privateGetSpotHistoryOrder(this.extend(request, params));
2009
+ }
2010
+ else if (marketType === 'swap') {
2011
+ response = await this.privateGetFuturesHistoryOrder(this.extend(request, params));
2012
+ }
2013
+ else if (marketType === 'margin') {
2014
+ response = await this.privateGetMarginHistoryOrder(this.extend(request, params));
2015
+ }
2016
+ else {
2017
+ throw new NotSupported(this.id + ' fetchOrder() not support this market type');
2018
+ }
2019
+ }
2020
+ //
2021
+ // [
2022
+ // {
2023
+ // "id": "685965182082",
2024
+ // "client_order_id": "B3CBm9uGg9oYQlw96bBSEt38-6gbgBO0",
2025
+ // "symbol": "BTCUSDT",
2026
+ // "side": "buy",
2027
+ // "status": "new",
2028
+ // "type": "limit",
2029
+ // "time_in_force": "GTC",
2030
+ // "quantity": "0.00010",
2031
+ // "quantity_cumulative": "0",
2032
+ // "price": "50000.00",
2033
+ // "price_average": "0",
2034
+ // "created_at": "2021-10-26T11:40:09.287Z",
2035
+ // "updated_at": "2021-10-26T11:40:09.287Z"
2036
+ // }
2037
+ // ]
2038
+ //
2039
+ const order = this.safeDict(response, 0);
2040
+ return this.parseOrder(order, market);
2041
+ }
2042
+ /**
2043
+ * @method
2044
+ * @name hitbtc#fetchOrderTrades
2045
+ * @description fetch all the trades made from a single order
2046
+ * @see https://api.hitbtc.com/#spot-trades-history
2047
+ * @see https://api.hitbtc.com/#futures-trades-history
2048
+ * @see https://api.hitbtc.com/#margin-trades-history
2049
+ * @param {string} id order id
2050
+ * @param {string} symbol unified market symbol
2051
+ * @param {int} [since] the earliest time in ms to fetch trades for
2052
+ * @param {int} [limit] the maximum number of trades to retrieve
2053
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2054
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
2055
+ * @param {bool} [params.margin] true for fetching margin trades
2056
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2057
+ */
2058
+ async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
2059
+ await this.loadMarkets();
2060
+ let market = undefined;
2061
+ if (symbol !== undefined) {
2062
+ market = this.market(symbol);
2063
+ }
2064
+ const request = {
2065
+ 'order_id': id, // exchange assigned order id as oppose to the client order id
2066
+ };
2067
+ let marketType = undefined;
2068
+ let marginMode = undefined;
2069
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOrderTrades', market, params);
2070
+ [marginMode, params] = this.handleMarginModeAndParams('fetchOrderTrades', params);
2071
+ params = this.omit(params, ['marginMode', 'margin']);
2072
+ let response = undefined;
2073
+ if (marginMode !== undefined) {
2074
+ response = await this.privateGetMarginHistoryTrade(this.extend(request, params));
2075
+ }
2076
+ else {
2077
+ if (marketType === 'spot') {
2078
+ response = await this.privateGetSpotHistoryTrade(this.extend(request, params));
2079
+ }
2080
+ else if (marketType === 'swap') {
2081
+ response = await this.privateGetFuturesHistoryTrade(this.extend(request, params));
2082
+ }
2083
+ else if (marketType === 'margin') {
2084
+ response = await this.privateGetMarginHistoryTrade(this.extend(request, params));
2085
+ }
2086
+ else {
2087
+ throw new NotSupported(this.id + ' fetchOrderTrades() not support this market type');
2088
+ }
2089
+ }
2090
+ //
2091
+ // Spot
2092
+ //
2093
+ // [
2094
+ // {
2095
+ // "id": 1393448977,
2096
+ // "order_id": 653496804534,
2097
+ // "client_order_id": "065f6f0ff9d54547848454182263d7b4",
2098
+ // "symbol": "DICEETH",
2099
+ // "side": "buy",
2100
+ // "quantity": "1.4",
2101
+ // "price": "0.00261455",
2102
+ // "fee": "0.000003294333",
2103
+ // "timestamp": "2021-09-19T05:35:56.601Z",
2104
+ // "taker": true
2105
+ // }
2106
+ // ]
2107
+ //
2108
+ // Swap and Margin
2109
+ //
2110
+ // [
2111
+ // {
2112
+ // "id": 4718551,
2113
+ // "order_id": 58730748700,
2114
+ // "client_order_id": "dcbcd8549e3445ee922665946002ef67",
2115
+ // "symbol": "BTCUSDT_PERP",
2116
+ // "side": "buy",
2117
+ // "quantity": "0.0001",
2118
+ // "price": "41095.96",
2119
+ // "fee": "0.002054798000",
2120
+ // "timestamp": "2022-03-17T05:23:02.217Z",
2121
+ // "taker": true,
2122
+ // "position_id": 2350122,
2123
+ // "pnl": "0",
2124
+ // "liquidation": false
2125
+ // }
2126
+ // ]
2127
+ //
2128
+ return this.parseTrades(response, market, since, limit);
2129
+ }
2130
+ /**
2131
+ * @method
2132
+ * @name hitbtc#fetchOpenOrders
2133
+ * @description fetch all unfilled currently open orders
2134
+ * @see https://api.hitbtc.com/#get-all-active-spot-orders
2135
+ * @see https://api.hitbtc.com/#get-active-futures-orders
2136
+ * @see https://api.hitbtc.com/#get-active-margin-orders
2137
+ * @param {string} symbol unified market symbol
2138
+ * @param {int} [since] the earliest time in ms to fetch open orders for
2139
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
2140
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2141
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
2142
+ * @param {bool} [params.margin] true for fetching open margin orders
2143
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2144
+ */
2145
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2146
+ await this.loadMarkets();
2147
+ let market = undefined;
2148
+ const request = {};
2149
+ if (symbol !== undefined) {
2150
+ market = this.market(symbol);
2151
+ request['symbol'] = market['id'];
2152
+ }
2153
+ let marketType = undefined;
2154
+ let marginMode = undefined;
2155
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);
2156
+ [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrders', params);
2157
+ params = this.omit(params, ['marginMode', 'margin']);
2158
+ let response = undefined;
2159
+ if (marginMode !== undefined) {
2160
+ response = await this.privateGetMarginOrder(this.extend(request, params));
2161
+ }
2162
+ else {
2163
+ if (marketType === 'spot') {
2164
+ response = await this.privateGetSpotOrder(this.extend(request, params));
2165
+ }
2166
+ else if (marketType === 'swap') {
2167
+ response = await this.privateGetFuturesOrder(this.extend(request, params));
2168
+ }
2169
+ else if (marketType === 'margin') {
2170
+ response = await this.privateGetMarginOrder(this.extend(request, params));
2171
+ }
2172
+ else {
2173
+ throw new NotSupported(this.id + ' fetchOpenOrders() not support this market type');
2174
+ }
2175
+ }
2176
+ //
2177
+ // [
2178
+ // {
2179
+ // "id": "488953123149",
2180
+ // "client_order_id": "103ad305301e4c3590045b13de15b36e",
2181
+ // "symbol": "BTCUSDT",
2182
+ // "side": "buy",
2183
+ // "status": "new",
2184
+ // "type": "limit",
2185
+ // "time_in_force": "GTC",
2186
+ // "quantity": "0.00001",
2187
+ // "quantity_cumulative": "0",
2188
+ // "price": "0.01",
2189
+ // "post_only": false,
2190
+ // "created_at": "2021-04-13T13:06:16.567Z",
2191
+ // "updated_at": "2021-04-13T13:06:16.567Z"
2192
+ // }
2193
+ // ]
2194
+ //
2195
+ return this.parseOrders(response, market, since, limit);
2196
+ }
2197
+ /**
2198
+ * @method
2199
+ * @name hitbtc#fetchOpenOrder
2200
+ * @description fetch an open order by it's id
2201
+ * @see https://api.hitbtc.com/#get-active-spot-order
2202
+ * @see https://api.hitbtc.com/#get-active-futures-order
2203
+ * @see https://api.hitbtc.com/#get-active-margin-order
2204
+ * @param {string} id order id
2205
+ * @param {string} symbol unified market symbol, default is undefined
2206
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2207
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
2208
+ * @param {bool} [params.margin] true for fetching an open margin order
2209
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2210
+ */
2211
+ async fetchOpenOrder(id, symbol = undefined, params = {}) {
2212
+ await this.loadMarkets();
2213
+ let market = undefined;
2214
+ if (symbol !== undefined) {
2215
+ market = this.market(symbol);
2216
+ }
2217
+ const request = {
2218
+ 'client_order_id': id,
2219
+ };
2220
+ let marketType = undefined;
2221
+ let marginMode = undefined;
2222
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrder', market, params);
2223
+ [marginMode, params] = this.handleMarginModeAndParams('fetchOpenOrder', params);
2224
+ params = this.omit(params, ['marginMode', 'margin']);
2225
+ let response = undefined;
2226
+ if (marginMode !== undefined) {
2227
+ response = await this.privateGetMarginOrderClientOrderId(this.extend(request, params));
2228
+ }
2229
+ else {
2230
+ if (marketType === 'spot') {
2231
+ response = await this.privateGetSpotOrderClientOrderId(this.extend(request, params));
2232
+ }
2233
+ else if (marketType === 'swap') {
2234
+ response = await this.privateGetFuturesOrderClientOrderId(this.extend(request, params));
2235
+ }
2236
+ else if (marketType === 'margin') {
2237
+ response = await this.privateGetMarginOrderClientOrderId(this.extend(request, params));
2238
+ }
2239
+ else {
2240
+ throw new NotSupported(this.id + ' fetchOpenOrder() not support this market type');
2241
+ }
2242
+ }
2243
+ return this.parseOrder(response, market);
2244
+ }
2245
+ /**
2246
+ * @method
2247
+ * @name hitbtc#cancelAllOrders
2248
+ * @description cancel all open orders
2249
+ * @see https://api.hitbtc.com/#cancel-all-spot-orders
2250
+ * @see https://api.hitbtc.com/#cancel-futures-orders
2251
+ * @see https://api.hitbtc.com/#cancel-all-margin-orders
2252
+ * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
2253
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2254
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
2255
+ * @param {bool} [params.margin] true for canceling margin orders
2256
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2257
+ */
2258
+ async cancelAllOrders(symbol = undefined, params = {}) {
2259
+ await this.loadMarkets();
2260
+ let market = undefined;
2261
+ const request = {};
2262
+ if (symbol !== undefined) {
2263
+ market = this.market(symbol);
2264
+ request['symbol'] = market['id'];
2265
+ }
2266
+ let marketType = undefined;
2267
+ let marginMode = undefined;
2268
+ [marketType, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);
2269
+ [marginMode, params] = this.handleMarginModeAndParams('cancelAllOrders', params);
2270
+ params = this.omit(params, ['marginMode', 'margin']);
2271
+ let response = undefined;
2272
+ if (marginMode !== undefined) {
2273
+ response = await this.privateDeleteMarginOrder(this.extend(request, params));
2274
+ }
2275
+ else {
2276
+ if (marketType === 'spot') {
2277
+ response = await this.privateDeleteSpotOrder(this.extend(request, params));
2278
+ }
2279
+ else if (marketType === 'swap') {
2280
+ response = await this.privateDeleteFuturesOrder(this.extend(request, params));
2281
+ }
2282
+ else if (marketType === 'margin') {
2283
+ response = await this.privateDeleteMarginOrder(this.extend(request, params));
2284
+ }
2285
+ else {
2286
+ throw new NotSupported(this.id + ' cancelAllOrders() not support this market type');
2287
+ }
2288
+ }
2289
+ return this.parseOrders(response, market);
2290
+ }
2291
+ /**
2292
+ * @method
2293
+ * @name hitbtc#cancelOrder
2294
+ * @description cancels an open order
2295
+ * @see https://api.hitbtc.com/#cancel-spot-order
2296
+ * @see https://api.hitbtc.com/#cancel-futures-order
2297
+ * @see https://api.hitbtc.com/#cancel-margin-order
2298
+ * @param {string} id order id
2299
+ * @param {string} symbol unified symbol of the market the order was made in
2300
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2301
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported
2302
+ * @param {bool} [params.margin] true for canceling a margin order
2303
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2304
+ */
2305
+ async cancelOrder(id, symbol = undefined, params = {}) {
2306
+ await this.loadMarkets();
2307
+ let market = undefined;
2308
+ const request = {
2309
+ 'client_order_id': id,
2310
+ };
2311
+ if (symbol !== undefined) {
2312
+ market = this.market(symbol);
2313
+ }
2314
+ let marketType = undefined;
2315
+ let marginMode = undefined;
2316
+ [marketType, params] = this.handleMarketTypeAndParams('cancelOrder', market, params);
2317
+ [marginMode, params] = this.handleMarginModeAndParams('cancelOrder', params);
2318
+ params = this.omit(params, ['marginMode', 'margin']);
2319
+ let response = undefined;
2320
+ if (marginMode !== undefined) {
2321
+ response = await this.privateDeleteMarginOrderClientOrderId(this.extend(request, params));
2322
+ }
2323
+ else {
2324
+ if (marketType === 'spot') {
2325
+ response = await this.privateDeleteSpotOrderClientOrderId(this.extend(request, params));
2326
+ }
2327
+ else if (marketType === 'swap') {
2328
+ response = await this.privateDeleteFuturesOrderClientOrderId(this.extend(request, params));
2329
+ }
2330
+ else if (marketType === 'margin') {
2331
+ response = await this.privateDeleteMarginOrderClientOrderId(this.extend(request, params));
2332
+ }
2333
+ else {
2334
+ throw new NotSupported(this.id + ' cancelOrder() not support this market type');
2335
+ }
2336
+ }
2337
+ return this.parseOrder(response, market);
2338
+ }
2339
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
2340
+ await this.loadMarkets();
2341
+ let market = undefined;
2342
+ const request = {
2343
+ 'client_order_id': id,
2344
+ 'quantity': this.amountToPrecision(symbol, amount),
2345
+ };
2346
+ if ((type === 'limit') || (type === 'stopLimit')) {
2347
+ if (price === undefined) {
2348
+ throw new ExchangeError(this.id + ' editOrder() limit order requires price');
2349
+ }
2350
+ request['price'] = this.priceToPrecision(symbol, price);
2351
+ }
2352
+ if (symbol !== undefined) {
2353
+ market = this.market(symbol);
2354
+ }
2355
+ let marketType = undefined;
2356
+ let marginMode = undefined;
2357
+ [marketType, params] = this.handleMarketTypeAndParams('editOrder', market, params);
2358
+ [marginMode, params] = this.handleMarginModeAndParams('editOrder', params);
2359
+ params = this.omit(params, ['marginMode', 'margin']);
2360
+ let response = undefined;
2361
+ if (marginMode !== undefined) {
2362
+ response = await this.privatePatchMarginOrderClientOrderId(this.extend(request, params));
2363
+ }
2364
+ else {
2365
+ if (marketType === 'spot') {
2366
+ response = await this.privatePatchSpotOrderClientOrderId(this.extend(request, params));
2367
+ }
2368
+ else if (marketType === 'swap') {
2369
+ response = await this.privatePatchFuturesOrderClientOrderId(this.extend(request, params));
2370
+ }
2371
+ else if (marketType === 'margin') {
2372
+ response = await this.privatePatchMarginOrderClientOrderId(this.extend(request, params));
2373
+ }
2374
+ else {
2375
+ throw new NotSupported(this.id + ' editOrder() not support this market type');
2376
+ }
2377
+ }
2378
+ return this.parseOrder(response, market);
2379
+ }
2380
+ /**
2381
+ * @method
2382
+ * @name hitbtc#createOrder
2383
+ * @description create a trade order
2384
+ * @see https://api.hitbtc.com/#create-new-spot-order
2385
+ * @see https://api.hitbtc.com/#create-margin-order
2386
+ * @see https://api.hitbtc.com/#create-futures-order
2387
+ * @param {string} symbol unified symbol of the market to create an order in
2388
+ * @param {string} type 'market' or 'limit'
2389
+ * @param {string} side 'buy' or 'sell'
2390
+ * @param {float} amount how much of currency you want to trade in units of base currency
2391
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
2392
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2393
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported for spot-margin, swap supports both, default is 'cross'
2394
+ * @param {bool} [params.margin] true for creating a margin order
2395
+ * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at
2396
+ * @param {bool} [params.postOnly] if true, the order will only be posted to the order book and not executed immediately
2397
+ * @param {string} [params.timeInForce] "GTC", "IOC", "FOK", "Day", "GTD"
2398
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2399
+ */
2400
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
2401
+ await this.loadMarkets();
2402
+ const market = this.market(symbol);
2403
+ let request = undefined;
2404
+ let marketType = undefined;
2405
+ [marketType, params] = this.handleMarketTypeAndParams('createOrder', market, params);
2406
+ let marginMode = undefined;
2407
+ [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
2408
+ [request, params] = this.createOrderRequest(market, marketType, type, side, amount, price, marginMode, params);
2409
+ let response = undefined;
2410
+ if (marketType === 'swap') {
2411
+ response = await this.privatePostFuturesOrder(this.extend(request, params));
2412
+ }
2413
+ else if ((marketType === 'margin') || (marginMode !== undefined)) {
2414
+ response = await this.privatePostMarginOrder(this.extend(request, params));
2415
+ }
2416
+ else {
2417
+ response = await this.privatePostSpotOrder(this.extend(request, params));
2418
+ }
2419
+ return this.parseOrder(response, market);
2420
+ }
2421
+ createOrderRequest(market, marketType, type, side, amount, price = undefined, marginMode = undefined, params = {}) {
2422
+ const isLimit = (type === 'limit');
2423
+ const reduceOnly = this.safeValue(params, 'reduceOnly');
2424
+ const timeInForce = this.safeString(params, 'timeInForce');
2425
+ const triggerPrice = this.safeNumberN(params, ['triggerPrice', 'stopPrice', 'stop_price']);
2426
+ const isPostOnly = this.isPostOnly(type === 'market', undefined, params);
2427
+ const request = {
2428
+ 'type': type,
2429
+ 'side': side,
2430
+ 'quantity': this.amountToPrecision(market['symbol'], amount),
2431
+ 'symbol': market['id'],
2432
+ // 'client_order_id': 'r42gdPjNMZN-H_xs8RKl2wljg_dfgdg4', // Optional
2433
+ // 'time_in_force': 'GTC', // Optional GTC, IOC, FOK, Day, GTD
2434
+ // 'price': this.priceToPrecision (symbol, price), // Required if type is limit, stopLimit, or takeProfitLimit
2435
+ // 'stop_price': this.safeNumber (params, 'stop_price'), // Required if type is stopLimit, stopMarket, takeProfitLimit, takeProfitMarket
2436
+ // 'expire_time': '2021-06-15T17:01:05.092Z', // Required if timeInForce is GTD
2437
+ // 'strict_validate': false,
2438
+ // 'post_only': false, // Optional
2439
+ // 'reduce_only': false, // Optional
2440
+ // 'display_quantity': '0', // Optional
2441
+ // 'take_rate': 0.001, // Optional
2442
+ // 'make_rate': 0.001, // Optional
2443
+ };
2444
+ if (reduceOnly !== undefined) {
2445
+ if ((market['type'] !== 'swap') && (market['type'] !== 'margin')) {
2446
+ throw new InvalidOrder(this.id + ' createOrder() does not support reduce_only for ' + market['type'] + ' orders, reduce_only orders are supported for swap and margin markets only');
2447
+ }
2448
+ }
2449
+ if (reduceOnly === true) {
2450
+ request['reduce_only'] = reduceOnly;
2451
+ }
2452
+ if (isPostOnly) {
2453
+ request['post_only'] = true;
2454
+ }
2455
+ if (timeInForce !== undefined) {
2456
+ request['time_in_force'] = timeInForce;
2457
+ }
2458
+ if (isLimit || (type === 'stopLimit') || (type === 'takeProfitLimit')) {
2459
+ if (price === undefined) {
2460
+ throw new ExchangeError(this.id + ' createOrder() requires a price argument for limit orders');
2461
+ }
2462
+ request['price'] = this.priceToPrecision(market['symbol'], price);
2463
+ }
2464
+ if ((timeInForce === 'GTD')) {
2465
+ const expireTime = this.safeString(params, 'expire_time');
2466
+ if (expireTime === undefined) {
2467
+ throw new ExchangeError(this.id + ' createOrder() requires an expire_time parameter for a GTD order');
2468
+ }
2469
+ }
2470
+ if (triggerPrice !== undefined) {
2471
+ request['stop_price'] = this.priceToPrecision(market['symbol'], triggerPrice);
2472
+ if (isLimit) {
2473
+ request['type'] = 'stopLimit';
2474
+ }
2475
+ else if (type === 'market') {
2476
+ request['type'] = 'stopMarket';
2477
+ }
2478
+ }
2479
+ else if ((type === 'stopLimit') || (type === 'stopMarket') || (type === 'takeProfitLimit') || (type === 'takeProfitMarket')) {
2480
+ throw new ExchangeError(this.id + ' createOrder() requires a triggerPrice parameter for stop-loss and take-profit orders');
2481
+ }
2482
+ params = this.omit(params, ['triggerPrice', 'timeInForce', 'stopPrice', 'stop_price', 'reduceOnly', 'postOnly']);
2483
+ if (marketType === 'swap') {
2484
+ // set default margin mode to cross
2485
+ if (marginMode === undefined) {
2486
+ marginMode = 'cross';
2487
+ }
2488
+ request['margin_mode'] = marginMode;
2489
+ }
2490
+ return [request, params];
2491
+ }
2492
+ parseOrderStatus(status) {
2493
+ const statuses = {
2494
+ 'new': 'open',
2495
+ 'suspended': 'open',
2496
+ 'partiallyFilled': 'open',
2497
+ 'filled': 'closed',
2498
+ 'canceled': 'canceled',
2499
+ 'expired': 'failed',
2500
+ };
2501
+ return this.safeString(statuses, status, status);
2502
+ }
2503
+ parseOrder(order, market = undefined) {
2504
+ //
2505
+ // limit
2506
+ // {
2507
+ // "id": 488953123149,
2508
+ // "client_order_id": "103ad305301e4c3590045b13de15b36e",
2509
+ // "symbol": "BTCUSDT",
2510
+ // "side": "buy",
2511
+ // "status": "new",
2512
+ // "type": "limit",
2513
+ // "time_in_force": "GTC",
2514
+ // "quantity": "0.00001",
2515
+ // "quantity_cumulative": "0",
2516
+ // "price": "0.01",
2517
+ // "price_average": "0.01",
2518
+ // "post_only": false,
2519
+ // "created_at": "2021-04-13T13:06:16.567Z",
2520
+ // "updated_at": "2021-04-13T13:06:16.567Z"
2521
+ // }
2522
+ //
2523
+ // market
2524
+ // {
2525
+ // "id": "685877626834",
2526
+ // "client_order_id": "Yshl7G-EjaREyXQYaGbsmdtVbW-nzQwu",
2527
+ // "symbol": "BTCUSDT",
2528
+ // "side": "buy",
2529
+ // "status": "filled",
2530
+ // "type": "market",
2531
+ // "time_in_force": "GTC",
2532
+ // "quantity": "0.00010",
2533
+ // "quantity_cumulative": "0.00010",
2534
+ // "post_only": false,
2535
+ // "created_at": "2021-10-26T08:55:55.1Z",
2536
+ // "updated_at": "2021-10-26T08:55:55.1Z",
2537
+ // "trades": [
2538
+ // {
2539
+ // "id": "1437229630",
2540
+ // "position_id": "0",
2541
+ // "quantity": "0.00010",
2542
+ // "price": "62884.78",
2543
+ // "fee": "0.005659630200",
2544
+ // "timestamp": "2021-10-26T08:55:55.1Z",
2545
+ // "taker": true
2546
+ // }
2547
+ // ]
2548
+ // }
2549
+ //
2550
+ // swap and margin
2551
+ //
2552
+ // {
2553
+ // "id": 58418961892,
2554
+ // "client_order_id": "r42gdPjNMZN-H_xs8RKl2wljg_dfgdg4",
2555
+ // "symbol": "BTCUSDT_PERP",
2556
+ // "side": "buy",
2557
+ // "status": "new",
2558
+ // "type": "limit",
2559
+ // "time_in_force": "GTC",
2560
+ // "quantity": "0.0005",
2561
+ // "quantity_cumulative": "0",
2562
+ // "price": "30000.00",
2563
+ // "post_only": false,
2564
+ // "reduce_only": false,
2565
+ // "created_at": "2022-03-16T08:16:53.039Z",
2566
+ // "updated_at": "2022-03-16T08:16:53.039Z"
2567
+ // }
2568
+ //
2569
+ const id = this.safeString(order, 'client_order_id');
2570
+ // we use clientOrderId as the order id with this exchange intentionally
2571
+ // because most of their endpoints will require clientOrderId
2572
+ // explained here: https://github.com/ccxt/ccxt/issues/5674
2573
+ const side = this.safeString(order, 'side');
2574
+ const type = this.safeString(order, 'type');
2575
+ const amount = this.safeString(order, 'quantity');
2576
+ const price = this.safeString(order, 'price');
2577
+ const average = this.safeString(order, 'price_average');
2578
+ const created = this.safeString(order, 'created_at');
2579
+ const timestamp = this.parse8601(created);
2580
+ const updated = this.safeString(order, 'updated_at');
2581
+ let lastTradeTimestamp = undefined;
2582
+ if (updated !== created) {
2583
+ lastTradeTimestamp = this.parse8601(updated);
2584
+ }
2585
+ const filled = this.safeString(order, 'quantity_cumulative');
2586
+ const status = this.parseOrderStatus(this.safeString(order, 'status'));
2587
+ const marketId = this.safeString(order, 'symbol');
2588
+ market = this.safeMarket(marketId, market);
2589
+ const symbol = market['symbol'];
2590
+ const postOnly = this.safeValue(order, 'post_only');
2591
+ const timeInForce = this.safeString(order, 'time_in_force');
2592
+ const rawTrades = this.safeValue(order, 'trades');
2593
+ return this.safeOrder({
2594
+ 'info': order,
2595
+ 'id': id,
2596
+ 'clientOrderId': id,
2597
+ 'timestamp': timestamp,
2598
+ 'datetime': this.iso8601(timestamp),
2599
+ 'lastTradeTimestamp': lastTradeTimestamp,
2600
+ 'lastUpdateTimestamp': lastTradeTimestamp,
2601
+ 'symbol': symbol,
2602
+ 'price': price,
2603
+ 'amount': amount,
2604
+ 'type': type,
2605
+ 'side': side,
2606
+ 'timeInForce': timeInForce,
2607
+ 'postOnly': postOnly,
2608
+ 'reduceOnly': this.safeValue(order, 'reduce_only'),
2609
+ 'filled': filled,
2610
+ 'remaining': undefined,
2611
+ 'cost': undefined,
2612
+ 'status': status,
2613
+ 'average': average,
2614
+ 'trades': rawTrades,
2615
+ 'fee': undefined,
2616
+ 'triggerPrice': this.safeString(order, 'stop_price'),
2617
+ 'takeProfitPrice': undefined,
2618
+ 'stopLossPrice': undefined,
2619
+ }, market);
2620
+ }
2621
+ /**
2622
+ * @method
2623
+ * @name hitbtc#fetchMarginModes
2624
+ * @description fetches margin mode of the user
2625
+ * @see https://api.hitbtc.com/#get-margin-position-parameters
2626
+ * @see https://api.hitbtc.com/#get-futures-position-parameters
2627
+ * @param {string[]} symbols unified market symbols
2628
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2629
+ * @returns {object} a list of [margin mode structures]{@link https://docs.ccxt.com/#/?id=margin-mode-structure}
2630
+ */
2631
+ async fetchMarginModes(symbols = undefined, params = {}) {
2632
+ await this.loadMarkets();
2633
+ let market = undefined;
2634
+ if (symbols !== undefined) {
2635
+ symbols = this.marketSymbols(symbols);
2636
+ market = this.market(symbols[0]);
2637
+ }
2638
+ let marketType = undefined;
2639
+ [marketType, params] = this.handleMarketTypeAndParams('fetchMarginMode', market, params);
2640
+ let response = undefined;
2641
+ if (marketType === 'margin') {
2642
+ response = await this.privateGetMarginConfig(params);
2643
+ //
2644
+ // {
2645
+ // "config": [{
2646
+ // "symbol": "BTCUSD",
2647
+ // "margin_call_leverage_mul": "1.50",
2648
+ // "liquidation_leverage_mul": "2.00",
2649
+ // "max_initial_leverage": "10.00",
2650
+ // "margin_mode": "Isolated",
2651
+ // "force_close_fee": "0.05",
2652
+ // "enabled": true,
2653
+ // "active": true,
2654
+ // "limit_base": "50000.00",
2655
+ // "limit_power": "2.2",
2656
+ // "unlimited_threshold": "10.0"
2657
+ // }]
2658
+ // }
2659
+ //
2660
+ }
2661
+ else if (marketType === 'swap') {
2662
+ response = await this.privateGetFuturesConfig(params);
2663
+ //
2664
+ // {
2665
+ // "config": [{
2666
+ // "symbol": "BTCUSD_PERP",
2667
+ // "margin_call_leverage_mul": "1.20",
2668
+ // "liquidation_leverage_mul": "2.00",
2669
+ // "max_initial_leverage": "100.00",
2670
+ // "margin_mode": "Isolated",
2671
+ // "force_close_fee": "0.001",
2672
+ // "enabled": true,
2673
+ // "active": false,
2674
+ // "limit_base": "5000000.000000000000",
2675
+ // "limit_power": "1.25",
2676
+ // "unlimited_threshold": "2.00"
2677
+ // }]
2678
+ // }
2679
+ //
2680
+ }
2681
+ else {
2682
+ throw new BadSymbol(this.id + ' fetchMarginModes () supports swap contracts and margin only');
2683
+ }
2684
+ const config = this.safeList(response, 'config', []);
2685
+ return this.parseMarginModes(config, symbols, 'symbol');
2686
+ }
2687
+ parseMarginMode(marginMode, market = undefined) {
2688
+ const marketId = this.safeString(marginMode, 'symbol');
2689
+ return {
2690
+ 'info': marginMode,
2691
+ 'symbol': this.safeSymbol(marketId, market),
2692
+ 'marginMode': this.safeStringLower(marginMode, 'margin_mode'),
2693
+ };
2694
+ }
2695
+ /**
2696
+ * @method
2697
+ * @name hitbtc#transfer
2698
+ * @description transfer currency internally between wallets on the same account
2699
+ * @see https://api.hitbtc.com/#transfer-between-wallet-and-exchange
2700
+ * @param {string} code unified currency code
2701
+ * @param {float} amount amount to transfer
2702
+ * @param {string} fromAccount account to transfer from
2703
+ * @param {string} toAccount account to transfer to
2704
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2705
+ * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
2706
+ */
2707
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
2708
+ // account can be "spot", "wallet", or "derivatives"
2709
+ await this.loadMarkets();
2710
+ const currency = this.currency(code);
2711
+ const requestAmount = this.currencyToPrecision(code, amount);
2712
+ const accountsByType = this.safeValue(this.options, 'accountsByType', {});
2713
+ fromAccount = fromAccount.toLowerCase();
2714
+ toAccount = toAccount.toLowerCase();
2715
+ const fromId = this.safeString(accountsByType, fromAccount, fromAccount);
2716
+ const toId = this.safeString(accountsByType, toAccount, toAccount);
2717
+ if (fromId === toId) {
2718
+ throw new BadRequest(this.id + ' transfer() fromAccount and toAccount arguments cannot be the same account');
2719
+ }
2720
+ const request = {
2721
+ 'currency': currency['id'],
2722
+ 'amount': requestAmount,
2723
+ 'source': fromId,
2724
+ 'destination': toId,
2725
+ };
2726
+ const response = await this.privatePostWalletTransfer(this.extend(request, params));
2727
+ //
2728
+ // [
2729
+ // "2db6ebab-fb26-4537-9ef8-1a689472d236"
2730
+ // ]
2731
+ //
2732
+ return this.parseTransfer(response, currency);
2733
+ }
2734
+ parseTransfer(transfer, currency = undefined) {
2735
+ //
2736
+ // transfer
2737
+ //
2738
+ // [
2739
+ // "2db6ebab-fb26-4537-9ef8-1a689472d236"
2740
+ // ]
2741
+ //
2742
+ return {
2743
+ 'id': this.safeString(transfer, 0),
2744
+ 'timestamp': undefined,
2745
+ 'datetime': undefined,
2746
+ 'currency': this.safeCurrencyCode(undefined, currency),
2747
+ 'amount': undefined,
2748
+ 'fromAccount': undefined,
2749
+ 'toAccount': undefined,
2750
+ 'status': undefined,
2751
+ 'info': transfer,
2752
+ };
2753
+ }
2754
+ async convertCurrencyNetwork(code, amount, fromNetwork, toNetwork, params) {
2755
+ await this.loadMarkets();
2756
+ if (code !== 'USDT') {
2757
+ throw new ExchangeError(this.id + ' convertCurrencyNetwork() only supports USDT currently');
2758
+ }
2759
+ const networks = this.safeValue(this.options, 'networks', {});
2760
+ fromNetwork = fromNetwork.toUpperCase();
2761
+ toNetwork = toNetwork.toUpperCase();
2762
+ fromNetwork = this.safeString(networks, fromNetwork); // handle ETH>ERC20 alias
2763
+ toNetwork = this.safeString(networks, toNetwork); // handle ETH>ERC20 alias
2764
+ if (fromNetwork === toNetwork) {
2765
+ throw new BadRequest(this.id + ' convertCurrencyNetwork() fromNetwork cannot be the same as toNetwork');
2766
+ }
2767
+ if ((fromNetwork === undefined) || (toNetwork === undefined)) {
2768
+ const keys = Object.keys(networks);
2769
+ throw new ArgumentsRequired(this.id + ' convertCurrencyNetwork() requires a fromNetwork parameter and a toNetwork parameter, supported networks are ' + keys.join(', '));
2770
+ }
2771
+ const request = {
2772
+ 'from_currency': fromNetwork,
2773
+ 'to_currency': toNetwork,
2774
+ 'amount': this.currencyToPrecision(code, amount),
2775
+ };
2776
+ const response = await this.privatePostWalletConvert(this.extend(request, params));
2777
+ // {"result":["587a1868-e62d-4d8e-b27c-dbdb2ee96149","e168df74-c041-41f2-b76c-e43e4fed5bc7"]}
2778
+ return {
2779
+ 'info': response,
2780
+ };
2781
+ }
2782
+ /**
2783
+ * @method
2784
+ * @name hitbtc#withdraw
2785
+ * @description make a withdrawal
2786
+ * @see https://api.hitbtc.com/#withdraw-crypto
2787
+ * @param {string} code unified currency code
2788
+ * @param {float} amount the amount to withdraw
2789
+ * @param {string} address the address to withdraw to
2790
+ * @param {string} tag
2791
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2792
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2793
+ */
2794
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2795
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
2796
+ await this.loadMarkets();
2797
+ this.checkAddress(address);
2798
+ const currency = this.currency(code);
2799
+ const request = {
2800
+ 'currency': currency['id'],
2801
+ 'amount': amount,
2802
+ 'address': address,
2803
+ };
2804
+ if (tag !== undefined) {
2805
+ request['payment_id'] = tag;
2806
+ }
2807
+ const networks = this.safeValue(this.options, 'networks', {});
2808
+ const network = this.safeStringUpper(params, 'network');
2809
+ if ((network !== undefined) && (code === 'USDT')) {
2810
+ const parsedNetwork = this.safeString(networks, network);
2811
+ if (parsedNetwork !== undefined) {
2812
+ request['network_code'] = parsedNetwork;
2813
+ }
2814
+ params = this.omit(params, 'network');
2815
+ }
2816
+ const withdrawOptions = this.safeValue(this.options, 'withdraw', {});
2817
+ const includeFee = this.safeBool(withdrawOptions, 'includeFee', false);
2818
+ if (includeFee) {
2819
+ request['include_fee'] = true;
2820
+ }
2821
+ const response = await this.privatePostWalletCryptoWithdraw(this.extend(request, params));
2822
+ //
2823
+ // {
2824
+ // "id":"084cfcd5-06b9-4826-882e-fdb75ec3625d"
2825
+ // }
2826
+ //
2827
+ return this.parseTransaction(response, currency);
2828
+ }
2829
+ /**
2830
+ * @method
2831
+ * @name hitbtc#fetchFundingRates
2832
+ * @description fetches funding rates for multiple markets
2833
+ * @see https://api.hitbtc.com/#futures-info
2834
+ * @param {string[]} symbols unified symbols of the markets to fetch the funding rates for, all market funding rates are returned if not assigned
2835
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2836
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
2837
+ */
2838
+ async fetchFundingRates(symbols = undefined, params = {}) {
2839
+ await this.loadMarkets();
2840
+ let market = undefined;
2841
+ const request = {};
2842
+ if (symbols !== undefined) {
2843
+ symbols = this.marketSymbols(symbols);
2844
+ market = this.market(symbols[0]);
2845
+ const queryMarketIds = this.marketIds(symbols);
2846
+ request['symbols'] = queryMarketIds.join(',');
2847
+ }
2848
+ let type = undefined;
2849
+ [type, params] = this.handleMarketTypeAndParams('fetchFundingRates', market, params);
2850
+ if (type !== 'swap') {
2851
+ throw new NotSupported(this.id + ' fetchFundingRates() does not support ' + type + ' markets');
2852
+ }
2853
+ const response = await this.publicGetPublicFuturesInfo(this.extend(request, params));
2854
+ //
2855
+ // {
2856
+ // "BTCUSDT_PERP": {
2857
+ // "contract_type": "perpetual",
2858
+ // "mark_price": "30897.68",
2859
+ // "index_price": "30895.29",
2860
+ // "funding_rate": "0.0001",
2861
+ // "open_interest": "93.7128",
2862
+ // "next_funding_time": "2021-07-21T16:00:00.000Z",
2863
+ // "indicative_funding_rate": "0.0001",
2864
+ // "premium_index": "0.000047541807127312",
2865
+ // "avg_premium_index": "0.000087063368020112",
2866
+ // "interest_rate": "0.0001",
2867
+ // "timestamp": "2021-07-21T09:48:37.235Z"
2868
+ // }
2869
+ // }
2870
+ //
2871
+ const marketIds = Object.keys(response);
2872
+ const fundingRates = {};
2873
+ for (let i = 0; i < marketIds.length; i++) {
2874
+ const marketId = this.safeString(marketIds, i);
2875
+ const rawFundingRate = this.safeValue(response, marketId);
2876
+ const marketInner = this.market(marketId);
2877
+ const symbol = marketInner['symbol'];
2878
+ const fundingRate = this.parseFundingRate(rawFundingRate, marketInner);
2879
+ fundingRates[symbol] = fundingRate;
2880
+ }
2881
+ return this.filterByArray(fundingRates, 'symbol', symbols);
2882
+ }
2883
+ /**
2884
+ * @method
2885
+ * @name hitbtc#fetchFundingRateHistory
2886
+ * @see https://api.hitbtc.com/#funding-history
2887
+ * @description fetches historical funding rate prices
2888
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
2889
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
2890
+ * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
2891
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2892
+ * @param {int} [params.until] timestamp in ms of the latest funding rate
2893
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
2894
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
2895
+ */
2896
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2897
+ await this.loadMarkets();
2898
+ let paginate = false;
2899
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
2900
+ if (paginate) {
2901
+ return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 1000);
2902
+ }
2903
+ let market = undefined;
2904
+ let request = {
2905
+ // all arguments are optional
2906
+ // 'symbols': Comma separated list of symbol codes,
2907
+ // 'sort': 'DESC' or 'ASC'
2908
+ // 'from': 'Datetime or Number',
2909
+ // 'until': 'Datetime or Number',
2910
+ // 'limit': 100,
2911
+ // 'offset': 0,
2912
+ };
2913
+ [request, params] = this.handleUntilOption('until', request, params);
2914
+ if (symbol !== undefined) {
2915
+ market = this.market(symbol);
2916
+ symbol = market['symbol'];
2917
+ request['symbols'] = market['id'];
2918
+ }
2919
+ if (since !== undefined) {
2920
+ request['from'] = since;
2921
+ }
2922
+ if (limit !== undefined) {
2923
+ request['limit'] = limit;
2924
+ }
2925
+ const response = await this.publicGetPublicFuturesHistoryFunding(this.extend(request, params));
2926
+ //
2927
+ // {
2928
+ // "BTCUSDT_PERP": [
2929
+ // {
2930
+ // "timestamp": "2021-07-29T16:00:00.271Z",
2931
+ // "funding_rate": "0.0001",
2932
+ // "avg_premium_index": "0.000061858585213222",
2933
+ // "next_funding_time": "2021-07-30T00:00:00.000Z",
2934
+ // "interest_rate": "0.0001"
2935
+ // },
2936
+ // ...
2937
+ // ],
2938
+ // ...
2939
+ // }
2940
+ //
2941
+ const contracts = Object.keys(response);
2942
+ const rates = [];
2943
+ for (let i = 0; i < contracts.length; i++) {
2944
+ const marketId = contracts[i];
2945
+ const marketInner = this.safeMarket(marketId);
2946
+ const fundingRateData = response[marketId];
2947
+ for (let j = 0; j < fundingRateData.length; j++) {
2948
+ const entry = fundingRateData[j];
2949
+ const symbolInner = this.safeSymbol(marketInner['symbol']);
2950
+ const fundingRate = this.safeNumber(entry, 'funding_rate');
2951
+ const datetime = this.safeString(entry, 'timestamp');
2952
+ rates.push({
2953
+ 'info': entry,
2954
+ 'symbol': symbolInner,
2955
+ 'fundingRate': fundingRate,
2956
+ 'timestamp': this.parse8601(datetime),
2957
+ 'datetime': datetime,
2958
+ });
2959
+ }
2960
+ }
2961
+ const sorted = this.sortBy(rates, 'timestamp');
2962
+ return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
2963
+ }
2964
+ /**
2965
+ * @method
2966
+ * @name hitbtc#fetchPositions
2967
+ * @description fetch all open positions
2968
+ * @see https://api.hitbtc.com/#get-futures-margin-accounts
2969
+ * @see https://api.hitbtc.com/#get-all-margin-accounts
2970
+ * @param {string[]|undefined} symbols not used by hitbtc fetchPositions ()
2971
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2972
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported, defaults to spot-margin endpoint if this is set
2973
+ * @param {bool} [params.margin] true for fetching spot-margin positions
2974
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2975
+ */
2976
+ async fetchPositions(symbols = undefined, params = {}) {
2977
+ await this.loadMarkets();
2978
+ const request = {};
2979
+ let marketType = undefined;
2980
+ let marginMode = undefined;
2981
+ [marketType, params] = this.handleMarketTypeAndParams('fetchPositions', undefined, params);
2982
+ if (marketType === 'spot') {
2983
+ marketType = 'swap';
2984
+ }
2985
+ [marginMode, params] = this.handleMarginModeAndParams('fetchPositions', params);
2986
+ params = this.omit(params, ['marginMode', 'margin']);
2987
+ let response = undefined;
2988
+ if (marginMode !== undefined) {
2989
+ response = await this.privateGetMarginAccount(this.extend(request, params));
2990
+ }
2991
+ else {
2992
+ if (marketType === 'swap') {
2993
+ response = await this.privateGetFuturesAccount(this.extend(request, params));
2994
+ }
2995
+ else if (marketType === 'margin') {
2996
+ response = await this.privateGetMarginAccount(this.extend(request, params));
2997
+ }
2998
+ else {
2999
+ throw new NotSupported(this.id + ' fetchPositions() not support this market type');
3000
+ }
3001
+ }
3002
+ //
3003
+ // [
3004
+ // {
3005
+ // "symbol": "ETHUSDT_PERP",
3006
+ // "type": "isolated",
3007
+ // "leverage": "10.00",
3008
+ // "created_at": "2022-03-19T07:54:35.24Z",
3009
+ // "updated_at": "2022-03-19T07:54:58.922Z",
3010
+ // currencies": [
3011
+ // {
3012
+ // "code": "USDT",
3013
+ // "margin_balance": "7.478100643043",
3014
+ // "reserved_orders": "0",
3015
+ // "reserved_positions": "0.303530761300"
3016
+ // }
3017
+ // ],
3018
+ // "positions": [
3019
+ // {
3020
+ // "id": 2470568,
3021
+ // "symbol": "ETHUSDT_PERP",
3022
+ // "quantity": "0.001",
3023
+ // "price_entry": "2927.509",
3024
+ // "price_margin_call": "0",
3025
+ // "price_liquidation": "0",
3026
+ // "pnl": "0",
3027
+ // "created_at": "2022-03-19T07:54:35.24Z",
3028
+ // "updated_at": "2022-03-19T07:54:58.922Z"
3029
+ // }
3030
+ // ]
3031
+ // },
3032
+ // ]
3033
+ //
3034
+ const result = [];
3035
+ for (let i = 0; i < response.length; i++) {
3036
+ result.push(this.parsePosition(response[i]));
3037
+ }
3038
+ return result;
3039
+ }
3040
+ /**
3041
+ * @method
3042
+ * @name hitbtc#fetchPosition
3043
+ * @description fetch data on a single open contract trade position
3044
+ * @see https://api.hitbtc.com/#get-futures-margin-account
3045
+ * @see https://api.hitbtc.com/#get-isolated-margin-account
3046
+ * @param {string} symbol unified market symbol of the market the position is held in, default is undefined
3047
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3048
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported, defaults to spot-margin endpoint if this is set
3049
+ * @param {bool} [params.margin] true for fetching a spot-margin position
3050
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
3051
+ */
3052
+ async fetchPosition(symbol, params = {}) {
3053
+ await this.loadMarkets();
3054
+ const market = this.market(symbol);
3055
+ const request = {
3056
+ 'symbol': market['id'],
3057
+ };
3058
+ let marketType = undefined;
3059
+ let marginMode = undefined;
3060
+ [marketType, params] = this.handleMarketTypeAndParams('fetchPosition', undefined, params);
3061
+ [marginMode, params] = this.handleMarginModeAndParams('fetchPosition', params);
3062
+ params = this.omit(params, ['marginMode', 'margin']);
3063
+ let response = undefined;
3064
+ if (marginMode !== undefined) {
3065
+ response = await this.privateGetMarginAccountIsolatedSymbol(this.extend(request, params));
3066
+ }
3067
+ else {
3068
+ if (marketType === 'swap') {
3069
+ response = await this.privateGetFuturesAccountIsolatedSymbol(this.extend(request, params));
3070
+ }
3071
+ else if (marketType === 'margin') {
3072
+ response = await this.privateGetMarginAccountIsolatedSymbol(this.extend(request, params));
3073
+ }
3074
+ else {
3075
+ throw new NotSupported(this.id + ' fetchPosition() not support this market type');
3076
+ }
3077
+ }
3078
+ //
3079
+ // [
3080
+ // {
3081
+ // "symbol": "ETHUSDT_PERP",
3082
+ // "type": "isolated",
3083
+ // "leverage": "10.00",
3084
+ // "created_at": "2022-03-19T07:54:35.24Z",
3085
+ // "updated_at": "2022-03-19T07:54:58.922Z",
3086
+ // currencies": [
3087
+ // {
3088
+ // "code": "USDT",
3089
+ // "margin_balance": "7.478100643043",
3090
+ // "reserved_orders": "0",
3091
+ // "reserved_positions": "0.303530761300"
3092
+ // }
3093
+ // ],
3094
+ // "positions": [
3095
+ // {
3096
+ // "id": 2470568,
3097
+ // "symbol": "ETHUSDT_PERP",
3098
+ // "quantity": "0.001",
3099
+ // "price_entry": "2927.509",
3100
+ // "price_margin_call": "0",
3101
+ // "price_liquidation": "0",
3102
+ // "pnl": "0",
3103
+ // "created_at": "2022-03-19T07:54:35.24Z",
3104
+ // "updated_at": "2022-03-19T07:54:58.922Z"
3105
+ // }
3106
+ // ]
3107
+ // },
3108
+ // ]
3109
+ //
3110
+ return this.parsePosition(response, market);
3111
+ }
3112
+ parsePosition(position, market = undefined) {
3113
+ //
3114
+ // [
3115
+ // {
3116
+ // "symbol": "ETHUSDT_PERP",
3117
+ // "type": "isolated",
3118
+ // "leverage": "10.00",
3119
+ // "created_at": "2022-03-19T07:54:35.24Z",
3120
+ // "updated_at": "2022-03-19T07:54:58.922Z",
3121
+ // currencies": [
3122
+ // {
3123
+ // "code": "USDT",
3124
+ // "margin_balance": "7.478100643043",
3125
+ // "reserved_orders": "0",
3126
+ // "reserved_positions": "0.303530761300"
3127
+ // }
3128
+ // ],
3129
+ // "positions": [
3130
+ // {
3131
+ // "id": 2470568,
3132
+ // "symbol": "ETHUSDT_PERP",
3133
+ // "quantity": "0.001",
3134
+ // "price_entry": "2927.509",
3135
+ // "price_margin_call": "0",
3136
+ // "price_liquidation": "0",
3137
+ // "pnl": "0",
3138
+ // "created_at": "2022-03-19T07:54:35.24Z",
3139
+ // "updated_at": "2022-03-19T07:54:58.922Z"
3140
+ // }
3141
+ // ]
3142
+ // },
3143
+ // ]
3144
+ //
3145
+ const marginMode = this.safeString(position, 'type');
3146
+ const leverage = this.safeNumber(position, 'leverage');
3147
+ const datetime = this.safeString(position, 'updated_at');
3148
+ const positions = this.safeValue(position, 'positions', []);
3149
+ let liquidationPrice = undefined;
3150
+ let entryPrice = undefined;
3151
+ let contracts = undefined;
3152
+ for (let i = 0; i < positions.length; i++) {
3153
+ const entry = positions[i];
3154
+ liquidationPrice = this.safeNumber(entry, 'price_liquidation');
3155
+ entryPrice = this.safeNumber(entry, 'price_entry');
3156
+ contracts = this.safeNumber(entry, 'quantity');
3157
+ }
3158
+ const currencies = this.safeValue(position, 'currencies', []);
3159
+ let collateral = undefined;
3160
+ for (let i = 0; i < currencies.length; i++) {
3161
+ const entry = currencies[i];
3162
+ collateral = this.safeNumber(entry, 'margin_balance');
3163
+ }
3164
+ const marketId = this.safeString(position, 'symbol');
3165
+ market = this.safeMarket(marketId, market);
3166
+ const symbol = market['symbol'];
3167
+ return this.safePosition({
3168
+ 'info': position,
3169
+ 'id': undefined,
3170
+ 'symbol': symbol,
3171
+ 'notional': undefined,
3172
+ 'marginMode': marginMode,
3173
+ 'marginType': marginMode,
3174
+ 'liquidationPrice': liquidationPrice,
3175
+ 'entryPrice': entryPrice,
3176
+ 'unrealizedPnl': undefined,
3177
+ 'percentage': undefined,
3178
+ 'contracts': contracts,
3179
+ 'contractSize': undefined,
3180
+ 'markPrice': undefined,
3181
+ 'lastPrice': undefined,
3182
+ 'side': undefined,
3183
+ 'hedged': undefined,
3184
+ 'timestamp': this.parse8601(datetime),
3185
+ 'datetime': datetime,
3186
+ 'lastUpdateTimestamp': undefined,
3187
+ 'maintenanceMargin': undefined,
3188
+ 'maintenanceMarginPercentage': undefined,
3189
+ 'collateral': collateral,
3190
+ 'initialMargin': undefined,
3191
+ 'initialMarginPercentage': undefined,
3192
+ 'leverage': leverage,
3193
+ 'marginRatio': undefined,
3194
+ 'stopLossPrice': undefined,
3195
+ 'takeProfitPrice': undefined,
3196
+ });
3197
+ }
3198
+ parseOpenInterest(interest, market = undefined) {
3199
+ //
3200
+ // {
3201
+ // "contract_type": "perpetual",
3202
+ // "mark_price": "42307.43",
3203
+ // "index_price": "42303.27",
3204
+ // "funding_rate": "0.0001",
3205
+ // "open_interest": "30.9826",
3206
+ // "next_funding_time": "2022-03-22T16:00:00.000Z",
3207
+ // "indicative_funding_rate": "0.0001",
3208
+ // "premium_index": "0",
3209
+ // "avg_premium_index": "0.000029587712038098",
3210
+ // "interest_rate": "0.0001",
3211
+ // "timestamp": "2022-03-22T08:08:26.687Z"
3212
+ // }
3213
+ //
3214
+ const datetime = this.safeString(interest, 'timestamp');
3215
+ const value = this.safeNumber(interest, 'open_interest');
3216
+ return this.safeOpenInterest({
3217
+ 'symbol': this.safeSymbol(undefined, market),
3218
+ 'openInterestAmount': undefined,
3219
+ 'openInterestValue': value,
3220
+ 'timestamp': this.parse8601(datetime),
3221
+ 'datetime': datetime,
3222
+ 'info': interest,
3223
+ }, market);
3224
+ }
3225
+ /**
3226
+ * @method
3227
+ * @name hitbtc#fetchOpenInterests
3228
+ * @description Retrieves the open interest for a list of symbols
3229
+ * @see https://api.hitbtc.com/#futures-info
3230
+ * @param {string[]} [symbols] a list of unified CCXT market symbols
3231
+ * @param {object} [params] exchange specific parameters
3232
+ * @returns {object[]} a list of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
3233
+ */
3234
+ async fetchOpenInterests(symbols = undefined, params = {}) {
3235
+ await this.loadMarkets();
3236
+ const request = {};
3237
+ symbols = this.marketSymbols(symbols);
3238
+ let marketIds = undefined;
3239
+ if (symbols !== undefined) {
3240
+ marketIds = this.marketIds(symbols);
3241
+ request['symbols'] = marketIds.join(',');
3242
+ }
3243
+ const response = await this.publicGetPublicFuturesInfo(this.extend(request, params));
3244
+ //
3245
+ // {
3246
+ // "BTCUSDT_PERP": {
3247
+ // "contract_type": "perpetual",
3248
+ // "mark_price": "97291.83",
3249
+ // "index_price": "97298.61",
3250
+ // "funding_rate": "-0.000183473092423284",
3251
+ // "open_interest": "94.1503",
3252
+ // "next_funding_time": "2024-12-20T08:00:00.000Z",
3253
+ // "indicative_funding_rate": "-0.00027495203277752",
3254
+ // "premium_index": "-0.000789474900583786",
3255
+ // "avg_premium_index": "-0.000683473092423284",
3256
+ // "interest_rate": "0.0001",
3257
+ // "timestamp": "2024-12-20T04:57:33.693Z"
3258
+ // }
3259
+ // }
3260
+ //
3261
+ const results = [];
3262
+ const markets = Object.keys(response);
3263
+ for (let i = 0; i < markets.length; i++) {
3264
+ const marketId = markets[i];
3265
+ const marketInner = this.safeMarket(marketId);
3266
+ results.push(this.parseOpenInterest(response[marketId], marketInner));
3267
+ }
3268
+ return this.filterByArray(results, 'symbol', symbols);
3269
+ }
3270
+ /**
3271
+ * @method
3272
+ * @name hitbtc#fetchOpenInterest
3273
+ * @description Retrieves the open interest of a derivative trading pair
3274
+ * @see https://api.hitbtc.com/#futures-info
3275
+ * @param {string} symbol Unified CCXT market symbol
3276
+ * @param {object} [params] exchange specific parameters
3277
+ * @returns {object} an open interest structure{@link https://docs.ccxt.com/#/?id=interest-history-structure}
3278
+ */
3279
+ async fetchOpenInterest(symbol, params = {}) {
3280
+ await this.loadMarkets();
3281
+ const market = this.market(symbol);
3282
+ if (!market['swap']) {
3283
+ throw new BadSymbol(this.id + ' fetchOpenInterest() supports swap contracts only');
3284
+ }
3285
+ const request = {
3286
+ 'symbol': market['id'],
3287
+ };
3288
+ const response = await this.publicGetPublicFuturesInfoSymbol(this.extend(request, params));
3289
+ //
3290
+ // {
3291
+ // "contract_type": "perpetual",
3292
+ // "mark_price": "42307.43",
3293
+ // "index_price": "42303.27",
3294
+ // "funding_rate": "0.0001",
3295
+ // "open_interest": "30.9826",
3296
+ // "next_funding_time": "2022-03-22T16:00:00.000Z",
3297
+ // "indicative_funding_rate": "0.0001",
3298
+ // "premium_index": "0",
3299
+ // "avg_premium_index": "0.000029587712038098",
3300
+ // "interest_rate": "0.0001",
3301
+ // "timestamp": "2022-03-22T08:08:26.687Z"
3302
+ // }
3303
+ //
3304
+ return this.parseOpenInterest(response, market);
3305
+ }
3306
+ /**
3307
+ * @method
3308
+ * @name hitbtc#fetchFundingRate
3309
+ * @description fetch the current funding rate
3310
+ * @see https://api.hitbtc.com/#futures-info
3311
+ * @param {string} symbol unified market symbol
3312
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3313
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
3314
+ */
3315
+ async fetchFundingRate(symbol, params = {}) {
3316
+ await this.loadMarkets();
3317
+ const market = this.market(symbol);
3318
+ if (!market['swap']) {
3319
+ throw new BadSymbol(this.id + ' fetchFundingRate() supports swap contracts only');
3320
+ }
3321
+ const request = {
3322
+ 'symbol': market['id'],
3323
+ };
3324
+ const response = await this.publicGetPublicFuturesInfoSymbol(this.extend(request, params));
3325
+ //
3326
+ // {
3327
+ // "contract_type": "perpetual",
3328
+ // "mark_price": "42307.43",
3329
+ // "index_price": "42303.27",
3330
+ // "funding_rate": "0.0001",
3331
+ // "open_interest": "30.9826",
3332
+ // "next_funding_time": "2022-03-22T16:00:00.000Z",
3333
+ // "indicative_funding_rate": "0.0001",
3334
+ // "premium_index": "0",
3335
+ // "avg_premium_index": "0.000029587712038098",
3336
+ // "interest_rate": "0.0001",
3337
+ // "timestamp": "2022-03-22T08:08:26.687Z"
3338
+ // }
3339
+ //
3340
+ return this.parseFundingRate(response, market);
3341
+ }
3342
+ parseFundingRate(contract, market = undefined) {
3343
+ //
3344
+ // {
3345
+ // "contract_type": "perpetual",
3346
+ // "mark_price": "42307.43",
3347
+ // "index_price": "42303.27",
3348
+ // "funding_rate": "0.0001",
3349
+ // "open_interest": "30.9826",
3350
+ // "next_funding_time": "2022-03-22T16:00:00.000Z",
3351
+ // "indicative_funding_rate": "0.0001",
3352
+ // "premium_index": "0",
3353
+ // "avg_premium_index": "0.000029587712038098",
3354
+ // "interest_rate": "0.0001",
3355
+ // "timestamp": "2022-03-22T08:08:26.687Z"
3356
+ // }
3357
+ //
3358
+ const fundingDateTime = this.safeString(contract, 'next_funding_time');
3359
+ const datetime = this.safeString(contract, 'timestamp');
3360
+ return {
3361
+ 'info': contract,
3362
+ 'symbol': this.safeSymbol(undefined, market),
3363
+ 'markPrice': this.safeNumber(contract, 'mark_price'),
3364
+ 'indexPrice': this.safeNumber(contract, 'index_price'),
3365
+ 'interestRate': this.safeNumber(contract, 'interest_rate'),
3366
+ 'estimatedSettlePrice': undefined,
3367
+ 'timestamp': this.parse8601(datetime),
3368
+ 'datetime': datetime,
3369
+ 'fundingRate': this.safeNumber(contract, 'funding_rate'),
3370
+ 'fundingTimestamp': this.parse8601(fundingDateTime),
3371
+ 'fundingDatetime': fundingDateTime,
3372
+ 'nextFundingRate': this.safeNumber(contract, 'indicative_funding_rate'),
3373
+ 'nextFundingTimestamp': undefined,
3374
+ 'nextFundingDatetime': undefined,
3375
+ 'previousFundingRate': undefined,
3376
+ 'previousFundingTimestamp': undefined,
3377
+ 'previousFundingDatetime': undefined,
3378
+ 'interval': undefined,
3379
+ };
3380
+ }
3381
+ async modifyMarginHelper(symbol, amount, type, params = {}) {
3382
+ await this.loadMarkets();
3383
+ const market = this.market(symbol);
3384
+ const leverage = this.safeString(params, 'leverage');
3385
+ if (market['swap']) {
3386
+ if (leverage === undefined) {
3387
+ throw new ArgumentsRequired(this.id + ' modifyMarginHelper() requires a leverage parameter for swap markets');
3388
+ }
3389
+ }
3390
+ const stringAmount = this.numberToString(amount);
3391
+ if (stringAmount !== '0') {
3392
+ amount = this.amountToPrecision(symbol, stringAmount);
3393
+ }
3394
+ else {
3395
+ amount = '0';
3396
+ }
3397
+ const request = {
3398
+ 'symbol': market['id'],
3399
+ 'margin_balance': amount, // swap and margin
3400
+ // "leverage": "10", // swap only required
3401
+ // "strict_validate": false, // swap and margin
3402
+ };
3403
+ if (leverage !== undefined) {
3404
+ request['leverage'] = leverage;
3405
+ }
3406
+ let marketType = undefined;
3407
+ let marginMode = undefined;
3408
+ [marketType, params] = this.handleMarketTypeAndParams('modifyMarginHelper', market, params);
3409
+ [marginMode, params] = this.handleMarginModeAndParams('modifyMarginHelper', params);
3410
+ let response = undefined;
3411
+ if (marketType === 'swap') {
3412
+ response = await this.privatePutFuturesAccountIsolatedSymbol(this.extend(request, params));
3413
+ }
3414
+ else if ((marketType === 'margin') || (marketType === 'spot') || (marginMode === 'isolated')) {
3415
+ response = await this.privatePutMarginAccountIsolatedSymbol(this.extend(request, params));
3416
+ }
3417
+ else {
3418
+ throw new NotSupported(this.id + ' modifyMarginHelper() not support this market type');
3419
+ }
3420
+ //
3421
+ // {
3422
+ // "symbol": "BTCUSDT_PERP",
3423
+ // "type": "isolated",
3424
+ // "leverage": "8.00",
3425
+ // "created_at": "2022-03-30T23:34:27.161Z",
3426
+ // "updated_at": "2022-03-30T23:34:27.161Z",
3427
+ // "currencies": [
3428
+ // {
3429
+ // "code": "USDT",
3430
+ // "margin_balance": "7.000000000000",
3431
+ // "reserved_orders": "0",
3432
+ // "reserved_positions": "0"
3433
+ // }
3434
+ // ],
3435
+ // "positions": null
3436
+ // }
3437
+ //
3438
+ return this.extend(this.parseMarginModification(response, market), {
3439
+ 'amount': this.parseNumber(amount),
3440
+ 'type': type,
3441
+ });
3442
+ }
3443
+ parseMarginModification(data, market = undefined) {
3444
+ //
3445
+ // addMargin/reduceMargin
3446
+ //
3447
+ // {
3448
+ // "symbol": "BTCUSDT_PERP",
3449
+ // "type": "isolated",
3450
+ // "leverage": "8.00",
3451
+ // "created_at": "2022-03-30T23:34:27.161Z",
3452
+ // "updated_at": "2022-03-30T23:34:27.161Z",
3453
+ // "currencies": [
3454
+ // {
3455
+ // "code": "USDT",
3456
+ // "margin_balance": "7.000000000000",
3457
+ // "reserved_orders": "0",
3458
+ // "reserved_positions": "0"
3459
+ // }
3460
+ // ],
3461
+ // "positions": null
3462
+ // }
3463
+ //
3464
+ const currencies = this.safeValue(data, 'currencies', []);
3465
+ const currencyInfo = this.safeValue(currencies, 0);
3466
+ const datetime = this.safeString(data, 'updated_at');
3467
+ return {
3468
+ 'info': data,
3469
+ 'symbol': market['symbol'],
3470
+ 'type': undefined,
3471
+ 'marginMode': 'isolated',
3472
+ 'amount': undefined,
3473
+ 'total': undefined,
3474
+ 'code': this.safeString(currencyInfo, 'code'),
3475
+ 'status': undefined,
3476
+ 'timestamp': this.parse8601(datetime),
3477
+ 'datetime': datetime,
3478
+ };
3479
+ }
3480
+ /**
3481
+ * @method
3482
+ * @name hitbtc#reduceMargin
3483
+ * @description remove margin from a position
3484
+ * @see https://api.hitbtc.com/#create-update-margin-account-2
3485
+ * @see https://api.hitbtc.com/#create-update-margin-account
3486
+ * @param {string} symbol unified market symbol
3487
+ * @param {float} amount the amount of margin to remove
3488
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3489
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported, defaults to the spot-margin endpoint if this is set
3490
+ * @param {bool} [params.margin] true for reducing spot-margin
3491
+ * @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=reduce-margin-structure}
3492
+ */
3493
+ async reduceMargin(symbol, amount, params = {}) {
3494
+ if (this.numberToString(amount) !== '0') {
3495
+ throw new BadRequest(this.id + ' reduceMargin() on hitbtc requires the amount to be 0 and that will remove the entire margin amount');
3496
+ }
3497
+ return await this.modifyMarginHelper(symbol, amount, 'reduce', params);
3498
+ }
3499
+ /**
3500
+ * @method
3501
+ * @name hitbtc#addMargin
3502
+ * @description add margin
3503
+ * @see https://api.hitbtc.com/#create-update-margin-account-2
3504
+ * @see https://api.hitbtc.com/#create-update-margin-account
3505
+ * @param {string} symbol unified market symbol
3506
+ * @param {float} amount amount of margin to add
3507
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3508
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported, defaults to the spot-margin endpoint if this is set
3509
+ * @param {bool} [params.margin] true for adding spot-margin
3510
+ * @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=add-margin-structure}
3511
+ */
3512
+ async addMargin(symbol, amount, params = {}) {
3513
+ return await this.modifyMarginHelper(symbol, amount, 'add', params);
3514
+ }
3515
+ /**
3516
+ * @method
3517
+ * @name hitbtc#fetchLeverage
3518
+ * @description fetch the set leverage for a market
3519
+ * @see https://api.hitbtc.com/#get-futures-margin-account
3520
+ * @see https://api.hitbtc.com/#get-isolated-margin-account
3521
+ * @param {string} symbol unified market symbol
3522
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3523
+ * @param {string} [params.marginMode] 'cross' or 'isolated' only 'isolated' is supported, defaults to the spot-margin endpoint if this is set
3524
+ * @param {bool} [params.margin] true for fetching spot-margin leverage
3525
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
3526
+ */
3527
+ async fetchLeverage(symbol, params = {}) {
3528
+ await this.loadMarkets();
3529
+ const market = this.market(symbol);
3530
+ const request = {
3531
+ 'symbol': market['id'],
3532
+ };
3533
+ let marginMode = undefined;
3534
+ [marginMode, params] = this.handleMarginModeAndParams('fetchLeverage', params);
3535
+ params = this.omit(params, ['marginMode', 'margin']);
3536
+ let response = undefined;
3537
+ if (marginMode !== undefined) {
3538
+ response = await this.privateGetMarginAccountIsolatedSymbol(this.extend(request, params));
3539
+ }
3540
+ else {
3541
+ if (market['type'] === 'spot') {
3542
+ response = await this.privateGetMarginAccountIsolatedSymbol(this.extend(request, params));
3543
+ }
3544
+ else if (market['type'] === 'swap') {
3545
+ response = await this.privateGetFuturesAccountIsolatedSymbol(this.extend(request, params));
3546
+ }
3547
+ else if (market['type'] === 'margin') {
3548
+ response = await this.privateGetMarginAccountIsolatedSymbol(this.extend(request, params));
3549
+ }
3550
+ else {
3551
+ throw new NotSupported(this.id + ' fetchLeverage() not support this market type');
3552
+ }
3553
+ }
3554
+ //
3555
+ // {
3556
+ // "symbol": "BTCUSDT",
3557
+ // "type": "isolated",
3558
+ // "leverage": "12.00",
3559
+ // "created_at": "2022-03-29T22:31:29.067Z",
3560
+ // "updated_at": "2022-03-30T00:00:00.125Z",
3561
+ // "currencies": [
3562
+ // {
3563
+ // "code": "USDT",
3564
+ // "margin_balance": "20.824360374174",
3565
+ // "reserved_orders": "0",
3566
+ // "reserved_positions": "0.973330435000"
3567
+ // }
3568
+ // ],
3569
+ // "positions": [
3570
+ // {
3571
+ // "id": 631301,
3572
+ // "symbol": "BTCUSDT",
3573
+ // "quantity": "0.00022",
3574
+ // "price_entry": "47425.57",
3575
+ // "price_margin_call": "",
3576
+ // "price_liquidation": "0",
3577
+ // "pnl": "0",
3578
+ // "created_at": "2022-03-29T22:31:29.067Z",
3579
+ // "updated_at": "2022-03-30T00:00:00.125Z"
3580
+ // }
3581
+ // ]
3582
+ // }
3583
+ //
3584
+ return this.parseLeverage(response, market);
3585
+ }
3586
+ parseLeverage(leverage, market = undefined) {
3587
+ const marketId = this.safeString(leverage, 'symbol');
3588
+ const leverageValue = this.safeInteger(leverage, 'leverage');
3589
+ return {
3590
+ 'info': leverage,
3591
+ 'symbol': this.safeSymbol(marketId, market),
3592
+ 'marginMode': this.safeStringLower(leverage, 'type'),
3593
+ 'longLeverage': leverageValue,
3594
+ 'shortLeverage': leverageValue,
3595
+ };
3596
+ }
3597
+ /**
3598
+ * @method
3599
+ * @name hitbtc#setLeverage
3600
+ * @description set the level of leverage for a market
3601
+ * @see https://api.hitbtc.com/#create-update-margin-account-2
3602
+ * @param {float} leverage the rate of leverage
3603
+ * @param {string} symbol unified market symbol
3604
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3605
+ * @returns {object} response from the exchange
3606
+ */
3607
+ async setLeverage(leverage, symbol = undefined, params = {}) {
3608
+ if (symbol === undefined) {
3609
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
3610
+ }
3611
+ await this.loadMarkets();
3612
+ if (params['margin_balance'] === undefined) {
3613
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a margin_balance parameter that will transfer margin to the specified trading pair');
3614
+ }
3615
+ const market = this.market(symbol);
3616
+ const amount = this.safeNumber(params, 'margin_balance');
3617
+ const maxLeverage = this.safeInteger(market['limits']['leverage'], 'max', 50);
3618
+ if (market['type'] !== 'swap') {
3619
+ throw new BadSymbol(this.id + ' setLeverage() supports swap contracts only');
3620
+ }
3621
+ if ((leverage < 1) || (leverage > maxLeverage)) {
3622
+ throw new BadRequest(this.id + ' setLeverage() leverage should be between 1 and ' + maxLeverage.toString() + ' for ' + symbol);
3623
+ }
3624
+ const request = {
3625
+ 'symbol': market['id'],
3626
+ 'leverage': leverage.toString(),
3627
+ 'margin_balance': this.amountToPrecision(symbol, amount),
3628
+ // 'strict_validate': false,
3629
+ };
3630
+ return await this.privatePutFuturesAccountIsolatedSymbol(this.extend(request, params));
3631
+ }
3632
+ /**
3633
+ * @method
3634
+ * @name hitbtc#fetchDepositWithdrawFees
3635
+ * @description fetch deposit and withdraw fees
3636
+ * @see https://api.hitbtc.com/#currencies
3637
+ * @param {string[]|undefined} codes list of unified currency codes
3638
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3639
+ * @returns {object[]} a list of [fees structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
3640
+ */
3641
+ async fetchDepositWithdrawFees(codes = undefined, params = {}) {
3642
+ await this.loadMarkets();
3643
+ const response = await this.publicGetPublicCurrency(params);
3644
+ //
3645
+ // {
3646
+ // "WEALTH": {
3647
+ // "full_name": "ConnectWealth",
3648
+ // "payin_enabled": false,
3649
+ // "payout_enabled": false,
3650
+ // "transfer_enabled": true,
3651
+ // "precision_transfer": "0.001",
3652
+ // "networks": [
3653
+ // {
3654
+ // "network": "ETH",
3655
+ // "protocol": "ERC20",
3656
+ // "default": true,
3657
+ // "payin_enabled": false,
3658
+ // "payout_enabled": false,
3659
+ // "precision_payout": "0.001",
3660
+ // "payout_fee": "0.016800000000",
3661
+ // "payout_is_payment_id": false,
3662
+ // "payin_payment_id": false,
3663
+ // "payin_confirmations": "2"
3664
+ // }
3665
+ // ]
3666
+ // }
3667
+ // }
3668
+ //
3669
+ return this.parseDepositWithdrawFees(response, codes);
3670
+ }
3671
+ parseDepositWithdrawFee(fee, currency = undefined) {
3672
+ //
3673
+ // {
3674
+ // "full_name": "ConnectWealth",
3675
+ // "payin_enabled": false,
3676
+ // "payout_enabled": false,
3677
+ // "transfer_enabled": true,
3678
+ // "precision_transfer": "0.001",
3679
+ // "networks": [
3680
+ // {
3681
+ // "network": "ETH",
3682
+ // "protocol": "ERC20",
3683
+ // "default": true,
3684
+ // "payin_enabled": false,
3685
+ // "payout_enabled": false,
3686
+ // "precision_payout": "0.001",
3687
+ // "payout_fee": "0.016800000000",
3688
+ // "payout_is_payment_id": false,
3689
+ // "payin_payment_id": false,
3690
+ // "payin_confirmations": "2"
3691
+ // }
3692
+ // ]
3693
+ // }
3694
+ //
3695
+ const networks = this.safeValue(fee, 'networks', []);
3696
+ const result = this.depositWithdrawFee(fee);
3697
+ for (let j = 0; j < networks.length; j++) {
3698
+ const networkEntry = networks[j];
3699
+ const networkId = this.safeString(networkEntry, 'network');
3700
+ let networkCode = this.networkIdToCode(networkId);
3701
+ networkCode = (networkCode !== undefined) ? networkCode.toUpperCase() : undefined;
3702
+ const withdrawFee = this.safeNumber(networkEntry, 'payout_fee');
3703
+ const isDefault = this.safeValue(networkEntry, 'default');
3704
+ const withdrawResult = {
3705
+ 'fee': withdrawFee,
3706
+ 'percentage': (withdrawFee !== undefined) ? false : undefined,
3707
+ };
3708
+ if (isDefault === true) {
3709
+ result['withdraw'] = withdrawResult;
3710
+ }
3711
+ result['networks'][networkCode] = {
3712
+ 'withdraw': withdrawResult,
3713
+ 'deposit': {
3714
+ 'fee': undefined,
3715
+ 'percentage': undefined,
3716
+ },
3717
+ };
3718
+ }
3719
+ return result;
3720
+ }
3721
+ /**
3722
+ * @method
3723
+ * @name hitbtc#closePosition
3724
+ * @description closes open positions for a market
3725
+ * @see https://api.hitbtc.com/#close-all-futures-margin-positions
3726
+ * @param {string} symbol unified ccxt market symbol
3727
+ * @param {string} side 'buy' or 'sell'
3728
+ * @param {object} [params] extra parameters specific to the okx api endpoint
3729
+ * @param {string} [params.symbol] *required* unified market symbol
3730
+ * @param {string} [params.marginMode] 'cross' or 'isolated', default is 'cross'
3731
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3732
+ */
3733
+ async closePosition(symbol, side = undefined, params = {}) {
3734
+ await this.loadMarkets();
3735
+ let marginMode = undefined;
3736
+ [marginMode, params] = this.handleMarginModeAndParams('closePosition', params, 'cross');
3737
+ const market = this.market(symbol);
3738
+ const request = {
3739
+ 'symbol': market['id'],
3740
+ 'margin_mode': marginMode,
3741
+ };
3742
+ const response = await this.privateDeleteFuturesPositionMarginModeSymbol(this.extend(request, params));
3743
+ //
3744
+ // {
3745
+ // "id":"202471640",
3746
+ // "symbol":"TRXUSDT_PERP",
3747
+ // "margin_mode":"Cross",
3748
+ // "leverage":"1.00",
3749
+ // "quantity":"0",
3750
+ // "price_entry":"0",
3751
+ // "price_margin_call":"0",
3752
+ // "price_liquidation":"0",
3753
+ // "pnl":"0.001234100000",
3754
+ // "created_at":"2023-10-29T14:46:13.235Z",
3755
+ // "updated_at":"2023-12-19T09:34:40.014Z"
3756
+ // }
3757
+ //
3758
+ return this.parseOrder(response, market);
3759
+ }
3760
+ handleMarginModeAndParams(methodName, params = {}, defaultValue = undefined) {
3761
+ /**
3762
+ * @ignore
3763
+ * @method
3764
+ * @description marginMode specified by params["marginMode"], this.options["marginMode"], this.options["defaultMarginMode"], params["margin"] = true or this.options["defaultType"] = 'margin'
3765
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3766
+ * @returns {Array} the marginMode in lowercase
3767
+ */
3768
+ const defaultType = this.safeString(this.options, 'defaultType');
3769
+ const isMargin = this.safeBool(params, 'margin', false);
3770
+ let marginMode = undefined;
3771
+ [marginMode, params] = super.handleMarginModeAndParams(methodName, params, defaultValue);
3772
+ if (marginMode === undefined) {
3773
+ if ((defaultType === 'margin') || (isMargin === true)) {
3774
+ marginMode = 'isolated';
3775
+ }
3776
+ }
3777
+ return [marginMode, params];
3778
+ }
3779
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
3780
+ //
3781
+ // {
3782
+ // "error": {
3783
+ // "code": 20001,
3784
+ // "message": "Insufficient funds",
3785
+ // "description": "Check that the funds are sufficient, given commissions"
3786
+ // }
3787
+ // }
3788
+ //
3789
+ // {
3790
+ // "error": {
3791
+ // "code": "600",
3792
+ // "message": "Action not allowed"
3793
+ // }
3794
+ // }
3795
+ //
3796
+ const error = this.safeValue(response, 'error');
3797
+ const errorCode = this.safeString(error, 'code');
3798
+ if (errorCode !== undefined) {
3799
+ const feedback = this.id + ' ' + body;
3800
+ const message = this.safeString2(error, 'message', 'description');
3801
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
3802
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
3803
+ throw new ExchangeError(feedback);
3804
+ }
3805
+ return undefined;
3806
+ }
3807
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
3808
+ const query = this.omit(params, this.extractParams(path));
3809
+ const implodedPath = this.implodeParams(path, params);
3810
+ let url = this.urls['api'][api] + '/' + implodedPath;
3811
+ let getRequest = undefined;
3812
+ const keys = Object.keys(query);
3813
+ const queryLength = keys.length;
3814
+ headers = {
3815
+ 'Content-Type': 'application/json',
3816
+ };
3817
+ if (method === 'GET') {
3818
+ if (queryLength) {
3819
+ getRequest = '?' + this.urlencode(query);
3820
+ url = url + getRequest;
3821
+ }
3822
+ }
3823
+ else {
3824
+ body = this.json(params);
3825
+ }
3826
+ if (api === 'private') {
3827
+ this.checkRequiredCredentials();
3828
+ const timestamp = this.nonce().toString();
3829
+ const payload = [method, '/api/3/' + implodedPath];
3830
+ if (method === 'GET') {
3831
+ if (getRequest !== undefined) {
3832
+ payload.push(getRequest);
3833
+ }
3834
+ }
3835
+ else {
3836
+ payload.push(body);
3837
+ }
3838
+ payload.push(timestamp);
3839
+ const payloadString = payload.join('');
3840
+ const signature = this.hmac(this.encode(payloadString), this.encode(this.secret), sha256, 'hex');
3841
+ const secondPayload = this.apiKey + ':' + signature + ':' + timestamp;
3842
+ const encoded = this.stringToBase64(secondPayload);
3843
+ headers['Authorization'] = 'HS256 ' + encoded;
3844
+ }
3845
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
3846
+ }
3847
+ }