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,3382 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import Exchange from './abstract/bitrue.js';
9
+ import { ExchangeError, ArgumentsRequired, ExchangeNotAvailable, InsufficientFunds, OrderNotFound, InvalidOrder, DDoSProtection, InvalidNonce, AuthenticationError, RateLimitExceeded, PermissionDenied, BadRequest, BadSymbol, AccountSuspended, OrderImmediatelyFillable, OnMaintenance, NotSupported } from './base/errors.js';
10
+ import { Precise } from './base/Precise.js';
11
+ import { TRUNCATE, TICK_SIZE } from './base/functions/number.js';
12
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class bitrue
16
+ * @augments Exchange
17
+ */
18
+ export default class bitrue extends Exchange {
19
+ describe() {
20
+ return this.deepExtend(super.describe(), {
21
+ 'id': 'bitrue',
22
+ 'name': 'Bitrue',
23
+ 'countries': ['SG'],
24
+ 'rateLimit': 10,
25
+ 'certified': false,
26
+ 'version': 'v1',
27
+ 'pro': true,
28
+ // new metainfo interface
29
+ 'has': {
30
+ 'CORS': undefined,
31
+ 'spot': true,
32
+ 'margin': false,
33
+ 'swap': true,
34
+ 'future': false,
35
+ 'option': false,
36
+ 'addMargin': false,
37
+ 'borrowCrossMargin': false,
38
+ 'borrowIsolatedMargin': false,
39
+ 'borrowMargin': false,
40
+ 'cancelAllOrders': true,
41
+ 'cancelOrder': true,
42
+ 'closeAllPositions': false,
43
+ 'closePosition': false,
44
+ 'createMarketBuyOrderWithCost': true,
45
+ 'createMarketOrderWithCost': false,
46
+ 'createMarketSellOrderWithCost': false,
47
+ 'createOrder': true,
48
+ 'createOrderWithTakeProfitAndStopLoss': false,
49
+ 'createOrderWithTakeProfitAndStopLossWs': false,
50
+ 'createReduceOnlyOrder': true,
51
+ 'createStopLimitOrder': true,
52
+ 'createStopMarketOrder': true,
53
+ 'createStopOrder': true,
54
+ 'fetchBalance': true,
55
+ 'fetchBidsAsks': true,
56
+ 'fetchBorrowInterest': false,
57
+ 'fetchBorrowRate': false,
58
+ 'fetchBorrowRateHistories': false,
59
+ 'fetchBorrowRateHistory': false,
60
+ 'fetchBorrowRates': false,
61
+ 'fetchBorrowRatesPerSymbol': false,
62
+ 'fetchClosedOrders': true,
63
+ 'fetchCrossBorrowRate': false,
64
+ 'fetchCrossBorrowRates': false,
65
+ 'fetchCurrencies': true,
66
+ 'fetchDepositAddress': false,
67
+ 'fetchDeposits': true,
68
+ 'fetchDepositsWithdrawals': false,
69
+ 'fetchDepositWithdrawFee': 'emulated',
70
+ 'fetchDepositWithdrawFees': true,
71
+ 'fetchFundingHistory': false,
72
+ 'fetchFundingInterval': false,
73
+ 'fetchFundingIntervals': false,
74
+ 'fetchFundingRate': false,
75
+ 'fetchFundingRateHistory': false,
76
+ 'fetchFundingRates': false,
77
+ 'fetchGreeks': false,
78
+ 'fetchIndexOHLCV': false,
79
+ 'fetchIsolatedBorrowRate': false,
80
+ 'fetchIsolatedBorrowRates': false,
81
+ 'fetchIsolatedPositions': false,
82
+ 'fetchLeverage': false,
83
+ 'fetchLeverages': false,
84
+ 'fetchLeverageTiers': false,
85
+ 'fetchLiquidations': false,
86
+ 'fetchLongShortRatio': false,
87
+ 'fetchLongShortRatioHistory': false,
88
+ 'fetchMarginAdjustmentHistory': false,
89
+ 'fetchMarginMode': false,
90
+ 'fetchMarginModes': false,
91
+ 'fetchMarketLeverageTiers': false,
92
+ 'fetchMarkets': true,
93
+ 'fetchMarkOHLCV': false,
94
+ 'fetchMarkPrices': false,
95
+ 'fetchMyLiquidations': false,
96
+ 'fetchMySettlementHistory': false,
97
+ 'fetchMyTrades': true,
98
+ 'fetchOHLCV': true,
99
+ 'fetchOpenInterest': false,
100
+ 'fetchOpenInterestHistory': false,
101
+ 'fetchOpenInterests': false,
102
+ 'fetchOpenOrders': true,
103
+ 'fetchOption': false,
104
+ 'fetchOptionChain': false,
105
+ 'fetchOrder': true,
106
+ 'fetchOrderBook': true,
107
+ 'fetchOrders': false,
108
+ 'fetchPosition': false,
109
+ 'fetchPositionHistory': false,
110
+ 'fetchPositionMode': false,
111
+ 'fetchPositions': false,
112
+ 'fetchPositionsHistory': false,
113
+ 'fetchPositionsRisk': false,
114
+ 'fetchPremiumIndexOHLCV': false,
115
+ 'fetchSettlementHistory': false,
116
+ 'fetchStatus': true,
117
+ 'fetchTicker': true,
118
+ 'fetchTickers': true,
119
+ 'fetchTime': true,
120
+ 'fetchTrades': true,
121
+ 'fetchTradingFee': false,
122
+ 'fetchTradingFees': false,
123
+ 'fetchTransactionFees': false,
124
+ 'fetchTransactions': false,
125
+ 'fetchTransfers': true,
126
+ 'fetchVolatilityHistory': false,
127
+ 'fetchWithdrawals': true,
128
+ 'reduceMargin': false,
129
+ 'repayCrossMargin': false,
130
+ 'repayIsolatedMargin': false,
131
+ 'setLeverage': true,
132
+ 'setMargin': true,
133
+ 'setMarginMode': false,
134
+ 'setPositionMode': false,
135
+ 'transfer': true,
136
+ 'withdraw': true,
137
+ },
138
+ 'timeframes': {
139
+ '1m': '1m',
140
+ '5m': '5m',
141
+ '15m': '15m',
142
+ '30m': '30m',
143
+ '1h': '1H',
144
+ '2h': '2H',
145
+ '4h': '4H',
146
+ '1d': '1D',
147
+ '1w': '1W',
148
+ },
149
+ 'urls': {
150
+ 'logo': 'https://github.com/user-attachments/assets/67abe346-1273-461a-bd7c-42fa32907c8e',
151
+ 'api': {
152
+ 'spot': 'https://www.bitrue.com/api',
153
+ 'fapi': 'https://fapi.bitrue.com/fapi',
154
+ 'dapi': 'https://fapi.bitrue.com/dapi',
155
+ 'kline': 'https://www.bitrue.com/kline-api',
156
+ },
157
+ 'www': 'https://www.bitrue.com',
158
+ 'referral': 'https://www.bitrue.com/affiliate/landing?cn=600000&inviteCode=EZWETQE',
159
+ 'doc': [
160
+ 'https://github.com/Bitrue-exchange/bitrue-official-api-docs',
161
+ 'https://www.bitrue.com/api-docs',
162
+ ],
163
+ 'fees': 'https://bitrue.zendesk.com/hc/en-001/articles/4405479952537',
164
+ },
165
+ // from spotV1PublicGetExchangeInfo:
166
+ // general 25000 weight in 1 minute per IP. = 416.66 per second a weight of 0.24 for 1
167
+ // orders 750 weight in 6 seconds per IP. = 125 per second a weight of 0.8 for 1
168
+ // orders 200 weight in 10 seconds per User. = 20 per second a weight of 5 for 1
169
+ // withdraw 3000 weight in 1 hour per User. = 0.833 per second a weight of 120 for 1
170
+ // withdraw 1000 weight in 1 day per User. = 0.011574 per second a weight of 8640 for 1
171
+ 'api': {
172
+ 'spot': {
173
+ 'kline': {
174
+ 'public': {
175
+ 'get': {
176
+ 'public.json': 0.24,
177
+ 'public{currency}.json': 0.24,
178
+ },
179
+ },
180
+ },
181
+ 'v1': {
182
+ 'public': {
183
+ 'get': {
184
+ 'ping': 0.24,
185
+ 'time': 0.24,
186
+ 'exchangeInfo': 0.24,
187
+ 'depth': { 'cost': 1, 'byLimit': [[100, 0.24], [500, 1.2], [1000, 2.4]] },
188
+ 'trades': 0.24,
189
+ 'historicalTrades': 1.2,
190
+ 'aggTrades': 0.24,
191
+ 'ticker/24hr': { 'cost': 0.24, 'noSymbol': 9.6 },
192
+ 'ticker/price': 0.24,
193
+ 'ticker/bookTicker': 0.24,
194
+ 'market/kline': 0.24,
195
+ },
196
+ },
197
+ 'private': {
198
+ 'get': {
199
+ 'order': 5,
200
+ 'openOrders': 5,
201
+ 'allOrders': 25,
202
+ 'account': 25,
203
+ 'myTrades': 25,
204
+ 'etf/net-value/{symbol}': 0.24,
205
+ 'withdraw/history': 120,
206
+ 'deposit/history': 120,
207
+ },
208
+ 'post': {
209
+ 'order': 5,
210
+ 'withdraw/commit': 120,
211
+ },
212
+ 'delete': {
213
+ 'order': 5,
214
+ },
215
+ },
216
+ },
217
+ 'v2': {
218
+ 'private': {
219
+ 'get': {
220
+ 'myTrades': 1.2,
221
+ },
222
+ },
223
+ },
224
+ },
225
+ 'fapi': {
226
+ 'v1': {
227
+ 'public': {
228
+ 'get': {
229
+ 'ping': 0.24,
230
+ 'time': 0.24,
231
+ 'contracts': 0.24,
232
+ 'depth': 0.24,
233
+ 'ticker': 0.24,
234
+ 'klines': 0.24,
235
+ },
236
+ },
237
+ },
238
+ 'v2': {
239
+ 'private': {
240
+ 'get': {
241
+ 'myTrades': 5,
242
+ 'openOrders': 5,
243
+ 'order': 5,
244
+ 'account': 5,
245
+ 'leverageBracket': 5,
246
+ 'commissionRate': 5,
247
+ 'futures_transfer_history': 5,
248
+ 'forceOrdersHistory': 5,
249
+ },
250
+ 'post': {
251
+ 'positionMargin': 5,
252
+ 'level_edit': 5,
253
+ 'cancel': 5,
254
+ 'order': 25,
255
+ 'allOpenOrders': 5,
256
+ 'futures_transfer': 5,
257
+ },
258
+ },
259
+ },
260
+ },
261
+ 'dapi': {
262
+ 'v1': {
263
+ 'public': {
264
+ 'get': {
265
+ 'ping': 0.24,
266
+ 'time': 0.24,
267
+ 'contracts': 0.24,
268
+ 'depth': 0.24,
269
+ 'ticker': 0.24,
270
+ 'klines': 0.24,
271
+ },
272
+ },
273
+ },
274
+ 'v2': {
275
+ 'private': {
276
+ 'get': {
277
+ 'myTrades': 5,
278
+ 'openOrders': 5,
279
+ 'order': 5,
280
+ 'account': 5,
281
+ 'leverageBracket': 5,
282
+ 'commissionRate': 5,
283
+ 'futures_transfer_history': 5,
284
+ 'forceOrdersHistory': 5,
285
+ },
286
+ 'post': {
287
+ 'positionMargin': 5,
288
+ 'level_edit': 5,
289
+ 'cancel': 5,
290
+ 'order': 5,
291
+ 'allOpenOrders': 5,
292
+ 'futures_transfer': 5,
293
+ },
294
+ },
295
+ },
296
+ },
297
+ },
298
+ 'fees': {
299
+ 'trading': {
300
+ 'feeSide': 'get',
301
+ 'tierBased': false,
302
+ 'percentage': true,
303
+ 'taker': this.parseNumber('0.00098'),
304
+ 'maker': this.parseNumber('0.00098'),
305
+ },
306
+ 'future': {
307
+ 'trading': {
308
+ 'feeSide': 'quote',
309
+ 'tierBased': true,
310
+ 'percentage': true,
311
+ 'taker': this.parseNumber('0.000400'),
312
+ 'maker': this.parseNumber('0.000200'),
313
+ 'tiers': {
314
+ 'taker': [
315
+ [this.parseNumber('0'), this.parseNumber('0.000400')],
316
+ [this.parseNumber('250'), this.parseNumber('0.000400')],
317
+ [this.parseNumber('2500'), this.parseNumber('0.000350')],
318
+ [this.parseNumber('7500'), this.parseNumber('0.000320')],
319
+ [this.parseNumber('22500'), this.parseNumber('0.000300')],
320
+ [this.parseNumber('50000'), this.parseNumber('0.000270')],
321
+ [this.parseNumber('100000'), this.parseNumber('0.000250')],
322
+ [this.parseNumber('200000'), this.parseNumber('0.000220')],
323
+ [this.parseNumber('400000'), this.parseNumber('0.000200')],
324
+ [this.parseNumber('750000'), this.parseNumber('0.000170')],
325
+ ],
326
+ 'maker': [
327
+ [this.parseNumber('0'), this.parseNumber('0.000200')],
328
+ [this.parseNumber('250'), this.parseNumber('0.000160')],
329
+ [this.parseNumber('2500'), this.parseNumber('0.000140')],
330
+ [this.parseNumber('7500'), this.parseNumber('0.000120')],
331
+ [this.parseNumber('22500'), this.parseNumber('0.000100')],
332
+ [this.parseNumber('50000'), this.parseNumber('0.000080')],
333
+ [this.parseNumber('100000'), this.parseNumber('0.000060')],
334
+ [this.parseNumber('200000'), this.parseNumber('0.000040')],
335
+ [this.parseNumber('400000'), this.parseNumber('0.000020')],
336
+ [this.parseNumber('750000'), this.parseNumber('0')],
337
+ ],
338
+ },
339
+ },
340
+ },
341
+ 'delivery': {
342
+ 'trading': {
343
+ 'feeSide': 'base',
344
+ 'tierBased': true,
345
+ 'percentage': true,
346
+ 'taker': this.parseNumber('0.000500'),
347
+ 'maker': this.parseNumber('0.000100'),
348
+ 'tiers': {
349
+ 'taker': [
350
+ [this.parseNumber('0'), this.parseNumber('0.000500')],
351
+ [this.parseNumber('250'), this.parseNumber('0.000450')],
352
+ [this.parseNumber('2500'), this.parseNumber('0.000400')],
353
+ [this.parseNumber('7500'), this.parseNumber('0.000300')],
354
+ [this.parseNumber('22500'), this.parseNumber('0.000250')],
355
+ [this.parseNumber('50000'), this.parseNumber('0.000240')],
356
+ [this.parseNumber('100000'), this.parseNumber('0.000240')],
357
+ [this.parseNumber('200000'), this.parseNumber('0.000240')],
358
+ [this.parseNumber('400000'), this.parseNumber('0.000240')],
359
+ [this.parseNumber('750000'), this.parseNumber('0.000240')],
360
+ ],
361
+ 'maker': [
362
+ [this.parseNumber('0'), this.parseNumber('0.000100')],
363
+ [this.parseNumber('250'), this.parseNumber('0.000080')],
364
+ [this.parseNumber('2500'), this.parseNumber('0.000050')],
365
+ [this.parseNumber('7500'), this.parseNumber('0.0000030')],
366
+ [this.parseNumber('22500'), this.parseNumber('0')],
367
+ [this.parseNumber('50000'), this.parseNumber('-0.000050')],
368
+ [this.parseNumber('100000'), this.parseNumber('-0.000060')],
369
+ [this.parseNumber('200000'), this.parseNumber('-0.000070')],
370
+ [this.parseNumber('400000'), this.parseNumber('-0.000080')],
371
+ [this.parseNumber('750000'), this.parseNumber('-0.000090')],
372
+ ],
373
+ },
374
+ },
375
+ },
376
+ },
377
+ // exchange-specific options
378
+ 'options': {
379
+ 'createMarketBuyOrderRequiresPrice': true,
380
+ 'fetchMarkets': {
381
+ 'types': ['spot', 'linear', 'inverse'],
382
+ },
383
+ // 'fetchTradesMethod': 'publicGetAggTrades', // publicGetTrades, publicGetHistoricalTrades
384
+ 'fetchMyTradesMethod': 'v2PrivateGetMyTrades',
385
+ 'hasAlreadyAuthenticatedSuccessfully': false,
386
+ 'currencyToPrecisionRoundingMode': TRUNCATE,
387
+ 'recvWindow': 5 * 1000,
388
+ 'timeDifference': 0,
389
+ 'adjustForTimeDifference': false,
390
+ 'parseOrderToPrecision': false,
391
+ 'newOrderRespType': {
392
+ 'market': 'FULL',
393
+ 'limit': 'FULL', // we change it from 'ACK' by default to 'FULL' (returns immediately if limit is not hit)
394
+ },
395
+ 'networks': {
396
+ 'ERC20': 'ETH',
397
+ 'TRC20': 'TRX',
398
+ 'AETERNITY': 'Aeternity',
399
+ 'AION': 'AION',
400
+ 'ALGO': 'Algorand',
401
+ 'ASK': 'ASK',
402
+ 'ATOM': 'ATOM',
403
+ 'AVAXC': 'AVAX C-Chain',
404
+ 'BCH': 'BCH',
405
+ 'BEP2': 'BEP2',
406
+ 'BEP20': 'BEP20',
407
+ 'Bitcoin': 'Bitcoin',
408
+ 'BRP20': 'BRP20',
409
+ 'ADA': 'Cardano',
410
+ 'CASINOCOIN': 'CasinoCoin',
411
+ 'CASINOCOIN-XRPL': 'CasinoCoin XRPL',
412
+ 'CONTENTOS': 'Contentos',
413
+ 'DASH': 'Dash',
414
+ 'DECOIN': 'Decoin',
415
+ 'DFI': 'DeFiChain',
416
+ 'DGB': 'DGB',
417
+ 'DIVI': 'Divi',
418
+ 'DOGE': 'dogecoin',
419
+ 'EOS': 'EOS',
420
+ 'ETC': 'ETC',
421
+ 'FILECOIN': 'Filecoin',
422
+ 'FREETON': 'FREETON',
423
+ 'HBAR': 'HBAR',
424
+ 'HEDERA': 'Hedera Hashgraph',
425
+ 'HRC20': 'HRC20',
426
+ 'ICON': 'ICON',
427
+ 'ICP': 'ICP',
428
+ 'IGNIS': 'Ignis',
429
+ 'INTERNETCOMPUTER': 'Internet Computer',
430
+ 'IOTA': 'IOTA',
431
+ 'KAVA': 'KAVA',
432
+ 'KSM': 'KSM',
433
+ 'LTC': 'LiteCoin',
434
+ 'LUNA': 'Luna',
435
+ 'MATIC': 'MATIC',
436
+ 'MOBILECOIN': 'Mobile Coin',
437
+ 'MONACOIN': 'MonaCoin',
438
+ 'XMR': 'Monero',
439
+ 'NEM': 'NEM',
440
+ 'NEP5': 'NEP5',
441
+ 'OMNI': 'OMNI',
442
+ 'PAC': 'PAC',
443
+ 'DOT': 'Polkadot',
444
+ 'RAVEN': 'Ravencoin',
445
+ 'SAFEX': 'Safex',
446
+ 'SOL': 'SOLANA',
447
+ 'SGB': 'Songbird',
448
+ 'XML': 'Stellar Lumens',
449
+ 'XYM': 'Symbol',
450
+ 'XTZ': 'Tezos',
451
+ 'theta': 'theta',
452
+ 'THETA': 'THETA',
453
+ 'VECHAIN': 'VeChain',
454
+ 'WANCHAIN': 'Wanchain',
455
+ 'XINFIN': 'XinFin Network',
456
+ 'XRP': 'XRP',
457
+ 'XRPL': 'XRPL',
458
+ 'ZIL': 'ZIL',
459
+ },
460
+ 'defaultType': 'spot',
461
+ 'timeframes': {
462
+ 'spot': {
463
+ '1m': '1m',
464
+ '5m': '5m',
465
+ '15m': '15m',
466
+ '30m': '30m',
467
+ '1h': '1H',
468
+ '2h': '2H',
469
+ '4h': '4H',
470
+ '12h': '12H',
471
+ '1d': '1D',
472
+ '1w': '1W',
473
+ },
474
+ 'future': {
475
+ '1m': '1min',
476
+ '5m': '5min',
477
+ '15m': '15min',
478
+ '30m': '30min',
479
+ '1h': '1h',
480
+ '1d': '1day',
481
+ '1w': '1week',
482
+ '1M': '1month',
483
+ },
484
+ },
485
+ 'accountsByType': {
486
+ 'spot': 'wallet',
487
+ 'future': 'contract',
488
+ 'swap': 'contract',
489
+ 'funding': 'wallet',
490
+ 'fund': 'wallet',
491
+ 'contract': 'contract',
492
+ },
493
+ },
494
+ 'commonCurrencies': {
495
+ 'MIM': 'MIM Swarm',
496
+ },
497
+ 'precisionMode': TICK_SIZE,
498
+ 'features': {
499
+ 'default': {
500
+ 'sandbox': false,
501
+ 'createOrder': {
502
+ 'marginMode': false,
503
+ 'triggerPrice': true,
504
+ 'triggerPriceType': undefined,
505
+ 'triggerDirection': undefined,
506
+ 'stopLossPrice': false,
507
+ 'takeProfitPrice': false,
508
+ 'attachedStopLossTakeProfit': undefined,
509
+ 'timeInForce': {
510
+ 'IOC': true,
511
+ 'FOK': true,
512
+ 'PO': true,
513
+ 'GTD': false,
514
+ },
515
+ 'hedged': false,
516
+ 'trailing': false,
517
+ 'leverage': false,
518
+ 'marketBuyRequiresPrice': true,
519
+ 'marketBuyByCost': true,
520
+ 'selfTradePrevention': false,
521
+ 'iceberg': true, // todo implement
522
+ },
523
+ 'createOrders': undefined,
524
+ 'fetchMyTrades': {
525
+ 'marginMode': false,
526
+ 'limit': 1000,
527
+ 'daysBack': 100000,
528
+ 'untilDays': 100000,
529
+ 'symbolRequired': true,
530
+ },
531
+ 'fetchOrder': {
532
+ 'marginMode': false,
533
+ 'trigger': false,
534
+ 'trailing': false,
535
+ 'symbolRequired': true,
536
+ },
537
+ 'fetchOpenOrders': {
538
+ 'marginMode': false,
539
+ 'limit': undefined,
540
+ 'trigger': false,
541
+ 'trailing': false,
542
+ 'symbolRequired': true,
543
+ },
544
+ 'fetchOrders': undefined,
545
+ 'fetchClosedOrders': {
546
+ 'marginMode': false,
547
+ 'limit': 1000,
548
+ 'daysBack': 90,
549
+ 'daysBackCanceled': 1,
550
+ 'untilDays': 90,
551
+ 'trigger': false,
552
+ 'trailing': false,
553
+ 'symbolRequired': true,
554
+ },
555
+ 'fetchOHLCV': {
556
+ 'limit': 1440,
557
+ },
558
+ },
559
+ 'spot': {
560
+ 'extends': 'default',
561
+ },
562
+ 'forDerivatives': {
563
+ 'extends': 'default',
564
+ 'createOrder': {
565
+ 'marginMode': true,
566
+ 'leverage': true,
567
+ 'marketBuyRequiresPrice': false,
568
+ 'marketBuyByCost': false,
569
+ },
570
+ 'fetchOHLCV': {
571
+ 'limit': 300,
572
+ },
573
+ 'fetchClosedOrders': undefined,
574
+ },
575
+ 'swap': {
576
+ 'linear': {
577
+ 'extends': 'forDerivatives',
578
+ },
579
+ 'inverse': {
580
+ 'extends': 'forDerivatives',
581
+ },
582
+ },
583
+ 'future': {
584
+ 'linear': undefined,
585
+ 'inverse': undefined,
586
+ },
587
+ },
588
+ 'exceptions': {
589
+ 'exact': {
590
+ 'System is under maintenance.': OnMaintenance,
591
+ 'System abnormality': ExchangeError,
592
+ 'You are not authorized to execute this request.': PermissionDenied,
593
+ 'API key does not exist': AuthenticationError,
594
+ 'Order would trigger immediately.': OrderImmediatelyFillable,
595
+ 'Stop price would trigger immediately.': OrderImmediatelyFillable,
596
+ 'Order would immediately match and take.': OrderImmediatelyFillable,
597
+ 'Account has insufficient balance for requested action.': InsufficientFunds,
598
+ 'Rest API trading is not enabled.': ExchangeNotAvailable,
599
+ "You don't have permission.": PermissionDenied,
600
+ 'Market is closed.': ExchangeNotAvailable,
601
+ 'Too many requests. Please try again later.': DDoSProtection,
602
+ '-1000': ExchangeNotAvailable,
603
+ '-1001': ExchangeNotAvailable,
604
+ '-1002': AuthenticationError,
605
+ '-1003': RateLimitExceeded,
606
+ '-1013': InvalidOrder,
607
+ '-1015': RateLimitExceeded,
608
+ '-1016': ExchangeNotAvailable,
609
+ '-1020': BadRequest,
610
+ '-1021': InvalidNonce,
611
+ '-1022': AuthenticationError,
612
+ '-1100': BadRequest,
613
+ '-1101': BadRequest,
614
+ '-1102': BadRequest,
615
+ '-1103': BadRequest,
616
+ '-1104': BadRequest,
617
+ '-1105': BadRequest,
618
+ '-1106': BadRequest,
619
+ '-1111': BadRequest,
620
+ '-1112': InvalidOrder,
621
+ '-1114': BadRequest,
622
+ '-1115': BadRequest,
623
+ '-1116': BadRequest,
624
+ '-1117': BadRequest,
625
+ '-1166': InvalidOrder,
626
+ '-1118': BadRequest,
627
+ '-1119': BadRequest,
628
+ '-1120': BadRequest,
629
+ '-1121': BadSymbol,
630
+ '-1125': AuthenticationError,
631
+ '-1127': BadRequest,
632
+ '-1128': BadRequest,
633
+ '-1130': BadRequest,
634
+ '-1131': BadRequest,
635
+ '-1160': InvalidOrder,
636
+ '-1156': InvalidOrder,
637
+ '-2008': AuthenticationError,
638
+ '-2010': ExchangeError,
639
+ '-2011': OrderNotFound,
640
+ '-2013': OrderNotFound,
641
+ '-2014': AuthenticationError,
642
+ '-2015': AuthenticationError,
643
+ '-2017': InsufficientFunds,
644
+ '-2019': InsufficientFunds,
645
+ '-3005': InsufficientFunds,
646
+ '-3006': InsufficientFunds,
647
+ '-3008': InsufficientFunds,
648
+ '-3010': ExchangeError,
649
+ '-3015': ExchangeError,
650
+ '-3022': AccountSuspended,
651
+ '-4028': BadRequest,
652
+ '-3020': InsufficientFunds,
653
+ '-3041': InsufficientFunds,
654
+ '-5013': InsufficientFunds,
655
+ '-11008': InsufficientFunds,
656
+ '-4051': InsufficientFunds, // {"code":-4051,"msg":"Isolated balance insufficient."}
657
+ },
658
+ 'broad': {
659
+ 'Insufficient account balance': InsufficientFunds,
660
+ 'has no operation privilege': PermissionDenied,
661
+ 'MAX_POSITION': InvalidOrder, // {"code":-2010,"msg":"Filter failure: MAX_POSITION"}
662
+ },
663
+ },
664
+ });
665
+ }
666
+ nonce() {
667
+ return this.milliseconds() - this.options['timeDifference'];
668
+ }
669
+ /**
670
+ * @method
671
+ * @name bitrue#fetchStatus
672
+ * @description the latest known information on the availability of the exchange API
673
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#test-connectivity
674
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
675
+ * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}
676
+ */
677
+ async fetchStatus(params = {}) {
678
+ const response = await this.spotV1PublicGetPing(params);
679
+ //
680
+ // empty means working status.
681
+ //
682
+ // {}
683
+ //
684
+ const keys = Object.keys(response);
685
+ const keysLength = keys.length;
686
+ const formattedStatus = keysLength ? 'maintenance' : 'ok';
687
+ return {
688
+ 'status': formattedStatus,
689
+ 'updated': undefined,
690
+ 'eta': undefined,
691
+ 'url': undefined,
692
+ 'info': response,
693
+ };
694
+ }
695
+ /**
696
+ * @method
697
+ * @name bitrue#fetchTime
698
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
699
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#check-server-time
700
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
701
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
702
+ */
703
+ async fetchTime(params = {}) {
704
+ const response = await this.spotV1PublicGetTime(params);
705
+ //
706
+ // {
707
+ // "serverTime":1635467280514
708
+ // }
709
+ //
710
+ return this.safeInteger(response, 'serverTime');
711
+ }
712
+ /**
713
+ * @method
714
+ * @name bitrue#fetchCurrencies
715
+ * @description fetches all available currencies on an exchange
716
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
717
+ * @returns {object} an associative dictionary of currencies
718
+ */
719
+ async fetchCurrencies(params = {}) {
720
+ const response = await this.spotV1PublicGetExchangeInfo(params);
721
+ //
722
+ // {
723
+ // "timezone":"CTT",
724
+ // "serverTime":1635464889117,
725
+ // "rateLimits":[
726
+ // {"rateLimitType":"REQUESTS_WEIGHT","interval":"MINUTES","limit":6000},
727
+ // {"rateLimitType":"ORDERS","interval":"SECONDS","limit":150},
728
+ // {"rateLimitType":"ORDERS","interval":"DAYS","limit":288000},
729
+ // ],
730
+ // "exchangeFilters":[],
731
+ // "symbols":[
732
+ // {
733
+ // "symbol":"SHABTC",
734
+ // "status":"TRADING",
735
+ // "baseAsset":"sha",
736
+ // "baseAssetPrecision":0,
737
+ // "quoteAsset":"btc",
738
+ // "quotePrecision":10,
739
+ // "orderTypes":["MARKET","LIMIT"],
740
+ // "icebergAllowed":false,
741
+ // "filters":[
742
+ // {"filterType":"PRICE_FILTER","minPrice":"0.00000001349","maxPrice":"0.00000017537","priceScale":10},
743
+ // {"filterType":"LOT_SIZE","minQty":"1.0","minVal":"0.00020","maxQty":"1000000000","volumeScale":0},
744
+ // ],
745
+ // "defaultPrice":"0.0000006100",
746
+ // },
747
+ // ],
748
+ // "coins":[
749
+ // {
750
+ // "coin": "near",
751
+ // "coinFulName": "NEAR Protocol",
752
+ // "chains": [ "BEP20", ],
753
+ // "chainDetail": [
754
+ // {
755
+ // "chain": "BEP20",
756
+ // "enableWithdraw": true,
757
+ // "enableDeposit": true,
758
+ // "withdrawFee": "0.2000",
759
+ // "minWithdraw": "5.0000",
760
+ // "maxWithdraw": "1000000000000000.0000",
761
+ // },
762
+ // ],
763
+ // },
764
+ // ],
765
+ // }
766
+ //
767
+ const result = {};
768
+ const coins = this.safeList(response, 'coins', []);
769
+ for (let i = 0; i < coins.length; i++) {
770
+ const currency = coins[i];
771
+ const id = this.safeString(currency, 'coin');
772
+ const name = this.safeString(currency, 'coinFulName');
773
+ const code = this.safeCurrencyCode(id);
774
+ const networkDetails = this.safeList(currency, 'chainDetail', []);
775
+ const networks = {};
776
+ for (let j = 0; j < networkDetails.length; j++) {
777
+ const entry = networkDetails[j];
778
+ const networkId = this.safeString(entry, 'chain');
779
+ const network = this.networkIdToCode(networkId, code);
780
+ networks[network] = {
781
+ 'info': entry,
782
+ 'id': networkId,
783
+ 'network': network,
784
+ 'deposit': this.safeBool(entry, 'enableDeposit'),
785
+ 'withdraw': this.safeBool(entry, 'enableWithdraw'),
786
+ 'active': undefined,
787
+ 'fee': this.safeNumber(entry, 'withdrawFee'),
788
+ 'precision': undefined,
789
+ 'limits': {
790
+ 'withdraw': {
791
+ 'min': this.safeNumber(entry, 'minWithdraw'),
792
+ 'max': this.safeNumber(entry, 'maxWithdraw'),
793
+ },
794
+ },
795
+ };
796
+ }
797
+ result[code] = this.safeCurrencyStructure({
798
+ 'id': id,
799
+ 'name': name,
800
+ 'code': code,
801
+ 'precision': undefined,
802
+ 'info': currency,
803
+ 'active': undefined,
804
+ 'deposit': undefined,
805
+ 'withdraw': undefined,
806
+ 'networks': networks,
807
+ 'fee': undefined,
808
+ 'fees': undefined,
809
+ 'type': 'crypto',
810
+ 'limits': {
811
+ 'withdraw': {
812
+ 'min': undefined,
813
+ 'max': undefined,
814
+ },
815
+ },
816
+ });
817
+ }
818
+ return result;
819
+ }
820
+ /**
821
+ * @method
822
+ * @name bitrue#fetchMarkets
823
+ * @description retrieves data on all markets for bitrue
824
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#exchangeInfo_endpoint
825
+ * @see https://www.bitrue.com/api-docs#current-open-contract
826
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#current-open-contract
827
+ * @param {object} [params] extra parameters specific to the exchange api endpoint
828
+ * @returns {object[]} an array of objects representing market data
829
+ */
830
+ async fetchMarkets(params = {}) {
831
+ const promisesRaw = [];
832
+ let types = undefined;
833
+ const defaultTypes = ['spot', 'linear', 'inverse'];
834
+ const fetchMarketsOptions = this.safeDict(this.options, 'fetchMarkets');
835
+ if (fetchMarketsOptions !== undefined) {
836
+ types = this.safeList(fetchMarketsOptions, 'types', defaultTypes);
837
+ }
838
+ else {
839
+ // for backward-compatibility
840
+ types = this.safeList(this.options, 'fetchMarkets', defaultTypes);
841
+ }
842
+ for (let i = 0; i < types.length; i++) {
843
+ const marketType = types[i];
844
+ if (marketType === 'spot') {
845
+ promisesRaw.push(this.spotV1PublicGetExchangeInfo(params));
846
+ }
847
+ else if (marketType === 'linear') {
848
+ promisesRaw.push(this.fapiV1PublicGetContracts(params));
849
+ }
850
+ else if (marketType === 'inverse') {
851
+ promisesRaw.push(this.dapiV1PublicGetContracts(params));
852
+ }
853
+ else {
854
+ throw new ExchangeError(this.id + ' fetchMarkets() this.options fetchMarkets "' + marketType + '" is not a supported market type');
855
+ }
856
+ }
857
+ const promises = await Promise.all(promisesRaw);
858
+ const spotMarkets = this.safeValue(this.safeValue(promises, 0), 'symbols', []);
859
+ const futureMarkets = this.safeValue(promises, 1);
860
+ const deliveryMarkets = this.safeValue(promises, 2);
861
+ let markets = spotMarkets;
862
+ markets = this.arrayConcat(markets, futureMarkets);
863
+ markets = this.arrayConcat(markets, deliveryMarkets);
864
+ //
865
+ // spot
866
+ //
867
+ // {
868
+ // "timezone":"CTT",
869
+ // "serverTime":1635464889117,
870
+ // "rateLimits":[
871
+ // {"rateLimitType":"REQUESTS_WEIGHT","interval":"MINUTES","limit":6000},
872
+ // {"rateLimitType":"ORDERS","interval":"SECONDS","limit":150},
873
+ // {"rateLimitType":"ORDERS","interval":"DAYS","limit":288000},
874
+ // ],
875
+ // "exchangeFilters":[],
876
+ // "symbols":[
877
+ // {
878
+ // "symbol":"SHABTC",
879
+ // "status":"TRADING",
880
+ // "baseAsset":"sha",
881
+ // "baseAssetPrecision":0,
882
+ // "quoteAsset":"btc",
883
+ // "quotePrecision":10,
884
+ // "orderTypes":["MARKET","LIMIT"],
885
+ // "icebergAllowed":false,
886
+ // "filters":[
887
+ // {"filterType":"PRICE_FILTER","minPrice":"0.00000001349","maxPrice":"0.00000017537","priceScale":10},
888
+ // {"filterType":"LOT_SIZE","minQty":"1.0","minVal":"0.00020","maxQty":"1000000000","volumeScale":0},
889
+ // ],
890
+ // "defaultPrice":"0.0000006100",
891
+ // },
892
+ // ],
893
+ // "coins":[
894
+ // {
895
+ // "coin":"sbr",
896
+ // "coinFulName":"Saber",
897
+ // "enableWithdraw":true,
898
+ // "enableDeposit":true,
899
+ // "chains":["SOLANA"],
900
+ // "withdrawFee":"2.0",
901
+ // "minWithdraw":"5.0",
902
+ // "maxWithdraw":"1000000000000000",
903
+ // },
904
+ // ],
905
+ // }
906
+ //
907
+ // swap / delivery
908
+ //
909
+ // [
910
+ // {
911
+ // "symbol": "H-HT-USDT",
912
+ // "pricePrecision": 8,
913
+ // "side": 1,
914
+ // "maxMarketVolume": 100000,
915
+ // "multiplier": 6,
916
+ // "minOrderVolume": 1,
917
+ // "maxMarketMoney": 10000000,
918
+ // "type": "H", // E: perpetual contract, S: test contract, others are mixed contract
919
+ // "maxLimitVolume": 1000000,
920
+ // "maxValidOrder": 20,
921
+ // "multiplierCoin": "HT",
922
+ // "minOrderMoney": 0.001,
923
+ // "maxLimitMoney": 1000000,
924
+ // "status": 1
925
+ // }
926
+ // ]
927
+ //
928
+ if (this.options['adjustForTimeDifference']) {
929
+ await this.loadTimeDifference();
930
+ }
931
+ return this.parseMarkets(markets);
932
+ }
933
+ parseMarket(market) {
934
+ const id = this.safeString(market, 'symbol');
935
+ const lowercaseId = this.safeStringLower(market, 'symbol');
936
+ const side = this.safeInteger(market, 'side'); // 1 linear, 0 inverse, undefined spot
937
+ let type = undefined;
938
+ let isLinear = undefined;
939
+ let isInverse = undefined;
940
+ if (side === undefined) {
941
+ type = 'spot';
942
+ }
943
+ else {
944
+ type = 'swap';
945
+ isLinear = (side === 1);
946
+ isInverse = (side === 0);
947
+ }
948
+ const isContract = (type !== 'spot');
949
+ let baseId = this.safeString(market, 'baseAsset');
950
+ let quoteId = this.safeString(market, 'quoteAsset');
951
+ let settleId = undefined;
952
+ let settle = undefined;
953
+ if (isContract) {
954
+ const symbolSplit = id.split('-');
955
+ baseId = this.safeString(symbolSplit, 1);
956
+ quoteId = this.safeString(symbolSplit, 2);
957
+ if (isLinear) {
958
+ settleId = quoteId;
959
+ }
960
+ else {
961
+ settleId = baseId;
962
+ }
963
+ settle = this.safeCurrencyCode(settleId);
964
+ }
965
+ const base = this.safeCurrencyCode(baseId);
966
+ const quote = this.safeCurrencyCode(quoteId);
967
+ let symbol = base + '/' + quote;
968
+ if (settle !== undefined) {
969
+ symbol += ':' + settle;
970
+ }
971
+ const filters = this.safeList(market, 'filters', []);
972
+ const filtersByType = this.indexBy(filters, 'filterType');
973
+ const status = this.safeString(market, 'status');
974
+ const priceFilter = this.safeDict(filtersByType, 'PRICE_FILTER', {});
975
+ const amountFilter = this.safeDict(filtersByType, 'LOT_SIZE', {});
976
+ const defaultPricePrecision = this.safeString(market, 'pricePrecision');
977
+ const defaultAmountPrecision = this.safeString(market, 'quantityPrecision');
978
+ const pricePrecision = this.safeString(priceFilter, 'priceScale', defaultPricePrecision);
979
+ const amountPrecision = this.safeString(amountFilter, 'volumeScale', defaultAmountPrecision);
980
+ const multiplier = this.safeString(market, 'multiplier');
981
+ let maxQuantity = this.safeNumber(amountFilter, 'maxQty');
982
+ if (maxQuantity === undefined) {
983
+ maxQuantity = this.safeNumber(market, 'maxValidOrder');
984
+ }
985
+ let minCost = this.safeNumber(amountFilter, 'minVal');
986
+ if (minCost === undefined) {
987
+ minCost = this.safeNumber(market, 'minOrderMoney');
988
+ }
989
+ return {
990
+ 'id': id,
991
+ 'lowercaseId': lowercaseId,
992
+ 'symbol': symbol,
993
+ 'base': base,
994
+ 'quote': quote,
995
+ 'settle': settle,
996
+ 'baseId': baseId,
997
+ 'quoteId': quoteId,
998
+ 'settleId': settleId,
999
+ 'type': type,
1000
+ 'spot': (type === 'spot'),
1001
+ 'margin': false,
1002
+ 'swap': isContract,
1003
+ 'future': false,
1004
+ 'option': false,
1005
+ 'active': (status === 'TRADING'),
1006
+ 'contract': isContract,
1007
+ 'linear': isLinear,
1008
+ 'inverse': isInverse,
1009
+ 'contractSize': this.parseNumber(Precise.stringAbs(multiplier)),
1010
+ 'expiry': undefined,
1011
+ 'expiryDatetime': undefined,
1012
+ 'strike': undefined,
1013
+ 'optionType': undefined,
1014
+ 'precision': {
1015
+ 'amount': this.parseNumber(this.parsePrecision(amountPrecision)),
1016
+ 'price': this.parseNumber(this.parsePrecision(pricePrecision)),
1017
+ },
1018
+ 'limits': {
1019
+ 'leverage': {
1020
+ 'min': undefined,
1021
+ 'max': undefined,
1022
+ },
1023
+ 'amount': {
1024
+ 'min': this.safeNumber(amountFilter, 'minQty'),
1025
+ 'max': maxQuantity,
1026
+ },
1027
+ 'price': {
1028
+ 'min': this.safeNumber(priceFilter, 'minPrice'),
1029
+ 'max': this.safeNumber(priceFilter, 'maxPrice'),
1030
+ },
1031
+ 'cost': {
1032
+ 'min': minCost,
1033
+ 'max': undefined,
1034
+ },
1035
+ },
1036
+ 'created': undefined,
1037
+ 'info': market,
1038
+ };
1039
+ }
1040
+ parseBalance(response) {
1041
+ //
1042
+ // spot
1043
+ //
1044
+ // {
1045
+ // "makerCommission":0,
1046
+ // "takerCommission":0,
1047
+ // "buyerCommission":0,
1048
+ // "sellerCommission":0,
1049
+ // "updateTime":null,
1050
+ // "balances":[
1051
+ // {"asset":"sbr","free":"0","locked":"0"},
1052
+ // {"asset":"ksm","free":"0","locked":"0"},
1053
+ // {"asset":"neo3s","free":"0","locked":"0"},
1054
+ // ],
1055
+ // "canTrade":false,
1056
+ // "canWithdraw":false,
1057
+ // "canDeposit":false
1058
+ // }
1059
+ //
1060
+ // swap
1061
+ //
1062
+ // {
1063
+ // "account":[
1064
+ // {
1065
+ // "marginCoin":"USDT",
1066
+ // "coinPrecious":4,
1067
+ // "accountNormal":1010.4043400372839856,
1068
+ // "accountLock":2.9827889600000006,
1069
+ // "partPositionNormal":0,
1070
+ // "totalPositionNormal":0,
1071
+ // "achievedAmount":0,
1072
+ // "unrealizedAmount":0,
1073
+ // "totalMarginRate":0,
1074
+ // "totalEquity":1010.4043400372839856,
1075
+ // "partEquity":0,
1076
+ // "totalCost":0,
1077
+ // "sumMarginRate":0,
1078
+ // "sumOpenRealizedAmount":0,
1079
+ // "canUseTrialFund":0,
1080
+ // "sumMaintenanceMargin":null,
1081
+ // "futureModel":null,
1082
+ // "positionVos":[]
1083
+ // }
1084
+ // ]
1085
+ // }
1086
+ //
1087
+ const result = {
1088
+ 'info': response,
1089
+ };
1090
+ const timestamp = this.safeInteger(response, 'updateTime');
1091
+ const balances = this.safeValue2(response, 'balances', 'account', []);
1092
+ for (let i = 0; i < balances.length; i++) {
1093
+ const balance = balances[i];
1094
+ const currencyId = this.safeString2(balance, 'asset', 'marginCoin');
1095
+ const code = this.safeCurrencyCode(currencyId);
1096
+ const account = this.account();
1097
+ account['free'] = this.safeString2(balance, 'free', 'accountNormal');
1098
+ account['used'] = this.safeString2(balance, 'locked', 'accountLock');
1099
+ result[code] = account;
1100
+ }
1101
+ result['timestamp'] = timestamp;
1102
+ result['datetime'] = this.iso8601(timestamp);
1103
+ return this.safeBalance(result);
1104
+ }
1105
+ /**
1106
+ * @method
1107
+ * @name bitrue#fetchBalance
1108
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1109
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#account-information-user_data
1110
+ * @see https://www.bitrue.com/api-docs#account-information-v2-user_data-hmac-sha256
1111
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#account-information-v2-user_data-hmac-sha256
1112
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1113
+ * @param {string} [params.type] 'future', 'delivery', 'spot', 'swap'
1114
+ * @param {string} [params.subType] 'linear', 'inverse'
1115
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1116
+ */
1117
+ async fetchBalance(params = {}) {
1118
+ await this.loadMarkets();
1119
+ let type = undefined;
1120
+ [type, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
1121
+ let subType = undefined;
1122
+ [subType, params] = this.handleSubTypeAndParams('fetchBalance', undefined, params);
1123
+ let response = undefined;
1124
+ let result = undefined;
1125
+ if (type === 'swap') {
1126
+ if (subType !== undefined && subType === 'inverse') {
1127
+ response = await this.dapiV2PrivateGetAccount(params);
1128
+ result = this.safeDict(response, 'data', {});
1129
+ //
1130
+ // {
1131
+ // "code":"0",
1132
+ // "msg":"Success",
1133
+ // "data":{
1134
+ // "account":[
1135
+ // {
1136
+ // "marginCoin":"USD",
1137
+ // "coinPrecious":4,
1138
+ // "accountNormal":1010.4043400372839856,
1139
+ // "accountLock":2.9827889600000006,
1140
+ // "partPositionNormal":0,
1141
+ // "totalPositionNormal":0,
1142
+ // "achievedAmount":0,
1143
+ // "unrealizedAmount":0,
1144
+ // "totalMarginRate":0,
1145
+ // "totalEquity":1010.4043400372839856,
1146
+ // "partEquity":0,
1147
+ // "totalCost":0,
1148
+ // "sumMarginRate":0,
1149
+ // "sumOpenRealizedAmount":0,
1150
+ // "canUseTrialFund":0,
1151
+ // "sumMaintenanceMargin":null,
1152
+ // "futureModel":null,
1153
+ // "positionVos":[]
1154
+ // }
1155
+ // ]
1156
+ // }
1157
+ // }
1158
+ //
1159
+ }
1160
+ else {
1161
+ response = await this.fapiV2PrivateGetAccount(params);
1162
+ result = this.safeDict(response, 'data', {});
1163
+ //
1164
+ // {
1165
+ // "code":"0",
1166
+ // "msg":"Success",
1167
+ // "data":{
1168
+ // "account":[
1169
+ // {
1170
+ // "marginCoin":"USDT",
1171
+ // "coinPrecious":4,
1172
+ // "accountNormal":1010.4043400372839856,
1173
+ // "accountLock":2.9827889600000006,
1174
+ // "partPositionNormal":0,
1175
+ // "totalPositionNormal":0,
1176
+ // "achievedAmount":0,
1177
+ // "unrealizedAmount":0,
1178
+ // "totalMarginRate":0,
1179
+ // "totalEquity":1010.4043400372839856,
1180
+ // "partEquity":0,
1181
+ // "totalCost":0,
1182
+ // "sumMarginRate":0,
1183
+ // "sumOpenRealizedAmount":0,
1184
+ // "canUseTrialFund":0,
1185
+ // "sumMaintenanceMargin":null,
1186
+ // "futureModel":null,
1187
+ // "positionVos":[]
1188
+ // }
1189
+ // ]
1190
+ // }
1191
+ // }
1192
+ //
1193
+ }
1194
+ }
1195
+ else {
1196
+ response = await this.spotV1PrivateGetAccount(params);
1197
+ result = response;
1198
+ //
1199
+ // {
1200
+ // "makerCommission":0,
1201
+ // "takerCommission":0,
1202
+ // "buyerCommission":0,
1203
+ // "sellerCommission":0,
1204
+ // "updateTime":null,
1205
+ // "balances":[
1206
+ // {"asset":"sbr","free":"0","locked":"0"},
1207
+ // {"asset":"ksm","free":"0","locked":"0"},
1208
+ // {"asset":"neo3s","free":"0","locked":"0"},
1209
+ // ],
1210
+ // "canTrade":false,
1211
+ // "canWithdraw":false,
1212
+ // "canDeposit":false
1213
+ // }
1214
+ //
1215
+ }
1216
+ return this.parseBalance(result);
1217
+ }
1218
+ /**
1219
+ * @method
1220
+ * @name bitrue#fetchOrderBook
1221
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1222
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#order-book
1223
+ * @see https://www.bitrue.com/api-docs#order-book
1224
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#order-book
1225
+ * @param {string} symbol unified symbol of the market to fetch the order book for
1226
+ * @param {int} [limit] the maximum amount of order book entries to return
1227
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1228
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1229
+ */
1230
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
1231
+ await this.loadMarkets();
1232
+ const market = this.market(symbol);
1233
+ let response = undefined;
1234
+ if (market['swap']) {
1235
+ const request = {
1236
+ 'contractName': market['id'],
1237
+ };
1238
+ if (limit !== undefined) {
1239
+ if (limit > 100) {
1240
+ limit = 100;
1241
+ }
1242
+ request['limit'] = limit; // default 100, max 100, see https://www.bitrue.com/api-docs#order-book
1243
+ }
1244
+ if (market['linear']) {
1245
+ response = await this.fapiV1PublicGetDepth(this.extend(request, params));
1246
+ }
1247
+ else if (market['inverse']) {
1248
+ response = await this.dapiV1PublicGetDepth(this.extend(request, params));
1249
+ }
1250
+ }
1251
+ else if (market['spot']) {
1252
+ const request = {
1253
+ 'symbol': market['id'],
1254
+ };
1255
+ if (limit !== undefined) {
1256
+ if (limit > 1000) {
1257
+ limit = 1000;
1258
+ }
1259
+ request['limit'] = limit; // default 100, max 1000, see https://github.com/Bitrue-exchange/bitrue-official-api-docs#order-book
1260
+ }
1261
+ response = await this.spotV1PublicGetDepth(this.extend(request, params));
1262
+ }
1263
+ else {
1264
+ throw new NotSupported(this.id + ' fetchOrderBook only support spot & swap markets');
1265
+ }
1266
+ //
1267
+ // spot
1268
+ //
1269
+ // {
1270
+ // "lastUpdateId":1635474910177,
1271
+ // "bids":[
1272
+ // ["61436.84","0.05",[]],
1273
+ // ["61435.77","0.0124",[]],
1274
+ // ["61434.88","0.012",[]],
1275
+ // ],
1276
+ // "asks":[
1277
+ // ["61452.46","0.0001",[]],
1278
+ // ["61452.47","0.0597",[]],
1279
+ // ["61452.76","0.0713",[]],
1280
+ // ]
1281
+ // }
1282
+ //
1283
+ // swap
1284
+ //
1285
+ // {
1286
+ // "asks": [[34916.5, 2582], [34916.6, 2193], [34916.7, 2629], [34916.8, 3478], [34916.9, 2718]],
1287
+ // "bids": [[34916.4, 92065], [34916.3, 25703], [34916.2, 37259], [34916.1, 26446], [34916, 44456]],
1288
+ // "time": 1699338305000
1289
+ // }
1290
+ //
1291
+ const timestamp = this.safeInteger2(response, 'time', 'lastUpdateId');
1292
+ const orderbook = this.parseOrderBook(response, symbol, timestamp);
1293
+ orderbook['nonce'] = this.safeInteger(response, 'lastUpdateId');
1294
+ return orderbook;
1295
+ }
1296
+ parseTicker(ticker, market = undefined) {
1297
+ //
1298
+ // fetchBidsAsks
1299
+ //
1300
+ // {
1301
+ // "symbol": "LTCBTC",
1302
+ // "bidPrice": "4.00000000",
1303
+ // "bidQty": "431.00000000",
1304
+ // "askPrice": "4.00000200",
1305
+ // "askQty": "9.00000000"
1306
+ // }
1307
+ //
1308
+ // fetchTicker
1309
+ //
1310
+ // {
1311
+ // "symbol": "BNBBTC",
1312
+ // "priceChange": "0.000248",
1313
+ // "priceChangePercent": "3.5500",
1314
+ // "weightedAvgPrice": null,
1315
+ // "prevClosePrice": null,
1316
+ // "lastPrice": "0.007226",
1317
+ // "lastQty": null,
1318
+ // "bidPrice": "0.007208",
1319
+ // "askPrice": "0.007240",
1320
+ // "openPrice": "0.006978",
1321
+ // "highPrice": "0.007295",
1322
+ // "lowPrice": "0.006935",
1323
+ // "volume": "11749.86",
1324
+ // "quoteVolume": "84.1066211",
1325
+ // "openTime": 0,
1326
+ // "closeTime": 0,
1327
+ // "firstId": 0,
1328
+ // "lastId": 0,
1329
+ // "count": 0
1330
+ // }
1331
+ //
1332
+ const symbol = this.safeSymbol(undefined, market);
1333
+ const last = this.safeString2(ticker, 'lastPrice', 'last');
1334
+ const timestamp = this.safeInteger(ticker, 'time');
1335
+ let percentage = undefined;
1336
+ if (market['swap']) {
1337
+ percentage = Precise.stringMul(this.safeString(ticker, 'rose'), '100');
1338
+ }
1339
+ else {
1340
+ percentage = this.safeString(ticker, 'priceChangePercent');
1341
+ }
1342
+ return this.safeTicker({
1343
+ 'symbol': symbol,
1344
+ 'timestamp': timestamp,
1345
+ 'datetime': this.iso8601(timestamp),
1346
+ 'high': this.safeString2(ticker, 'highPrice', 'high'),
1347
+ 'low': this.safeString2(ticker, 'lowPrice', 'low'),
1348
+ 'bid': this.safeString2(ticker, 'bidPrice', 'buy'),
1349
+ 'bidVolume': this.safeString(ticker, 'bidQty'),
1350
+ 'ask': this.safeString2(ticker, 'askPrice', 'sell'),
1351
+ 'askVolume': this.safeString(ticker, 'askQty'),
1352
+ 'vwap': this.safeString(ticker, 'weightedAvgPrice'),
1353
+ 'open': this.safeString(ticker, 'openPrice'),
1354
+ 'close': last,
1355
+ 'last': last,
1356
+ 'previousClose': undefined,
1357
+ 'change': this.safeString(ticker, 'priceChange'),
1358
+ 'percentage': percentage,
1359
+ 'average': undefined,
1360
+ 'baseVolume': this.safeString2(ticker, 'volume', 'vol'),
1361
+ 'quoteVolume': this.safeString(ticker, 'quoteVolume'),
1362
+ 'info': ticker,
1363
+ }, market);
1364
+ }
1365
+ /**
1366
+ * @method
1367
+ * @name bitrue#fetchTicker
1368
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
1369
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#24hr-ticker-price-change-statistics
1370
+ * @see https://www.bitrue.com/api-docs#ticker
1371
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#ticker
1372
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
1373
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1374
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1375
+ */
1376
+ async fetchTicker(symbol, params = {}) {
1377
+ await this.loadMarkets();
1378
+ const market = this.market(symbol);
1379
+ let response = undefined;
1380
+ let data = undefined;
1381
+ if (market['swap']) {
1382
+ const request = {
1383
+ 'contractName': market['id'],
1384
+ };
1385
+ if (market['linear']) {
1386
+ response = await this.fapiV1PublicGetTicker(this.extend(request, params));
1387
+ }
1388
+ else if (market['inverse']) {
1389
+ response = await this.dapiV1PublicGetTicker(this.extend(request, params));
1390
+ }
1391
+ data = response;
1392
+ }
1393
+ else if (market['spot']) {
1394
+ const request = {
1395
+ 'symbol': market['id'],
1396
+ };
1397
+ response = await this.spotV1PublicGetTicker24hr(this.extend(request, params));
1398
+ data = this.safeDict(response, 0, {});
1399
+ }
1400
+ else {
1401
+ throw new NotSupported(this.id + ' fetchTicker only support spot & swap markets');
1402
+ }
1403
+ //
1404
+ // spot
1405
+ //
1406
+ // [{
1407
+ // symbol: 'BTCUSDT',
1408
+ // priceChange: '105.20',
1409
+ // priceChangePercent: '0.3000',
1410
+ // weightedAvgPrice: null,
1411
+ // prevClosePrice: null,
1412
+ // lastPrice: '34905.21',
1413
+ // lastQty: null,
1414
+ // bidPrice: '34905.21',
1415
+ // askPrice: '34905.22',
1416
+ // openPrice: '34800.01',
1417
+ // highPrice: '35276.33',
1418
+ // lowPrice: '34787.51',
1419
+ // volume: '12549.6481',
1420
+ // quoteVolume: '439390492.917',
1421
+ // openTime: '0',
1422
+ // closeTime: '0',
1423
+ // firstId: '0',
1424
+ // lastId: '0',
1425
+ // count: '0'
1426
+ // }]
1427
+ //
1428
+ // swap
1429
+ //
1430
+ // {
1431
+ // "high": "35296",
1432
+ // "vol": "779308354",
1433
+ // "last": "34884.1",
1434
+ // "low": "34806.7",
1435
+ // "buy": 34883.9,
1436
+ // "sell": 34884,
1437
+ // "rose": "-0.0027957315",
1438
+ // "time": 1699348013000
1439
+ // }
1440
+ //
1441
+ return this.parseTicker(data, market);
1442
+ }
1443
+ /**
1444
+ * @method
1445
+ * @name bitrue#fetchOHLCV
1446
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1447
+ * @see https://www.bitrue.com/api_docs_includes_file/spot/index.html#kline-data
1448
+ * @see https://www.bitrue.com/api_docs_includes_file/futures/index.html#kline-candlestick-data
1449
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1450
+ * @param {string} timeframe the length of time each candle represents
1451
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1452
+ * @param {int} [limit] the maximum amount of candles to fetch
1453
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1454
+ * @param {int} [params.until] the latest time in ms to fetch transfers for
1455
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1456
+ */
1457
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1458
+ await this.loadMarkets();
1459
+ const market = this.market(symbol);
1460
+ const timeframes = this.safeDict(this.options, 'timeframes', {});
1461
+ let response = undefined;
1462
+ let data = undefined;
1463
+ if (market['swap']) {
1464
+ const timeframesFuture = this.safeDict(timeframes, 'future', {});
1465
+ const request = {
1466
+ 'contractName': market['id'],
1467
+ // 1min / 5min / 15min / 30min / 1h / 1day / 1week / 1month
1468
+ 'interval': this.safeString(timeframesFuture, timeframe, '1min'),
1469
+ };
1470
+ if (limit !== undefined) {
1471
+ request['limit'] = limit;
1472
+ }
1473
+ if (market['linear']) {
1474
+ response = await this.fapiV1PublicGetKlines(this.extend(request, params));
1475
+ }
1476
+ else if (market['inverse']) {
1477
+ response = await this.dapiV1PublicGetKlines(this.extend(request, params));
1478
+ }
1479
+ data = response;
1480
+ }
1481
+ else if (market['spot']) {
1482
+ const timeframesSpot = this.safeDict(timeframes, 'spot', {});
1483
+ const request = {
1484
+ 'symbol': market['id'],
1485
+ // 1m / 5m / 15m / 30m / 1H / 2H / 4H / 12H / 1D / 1W
1486
+ 'scale': this.safeString(timeframesSpot, timeframe, '1m'),
1487
+ };
1488
+ if (limit !== undefined) {
1489
+ request['limit'] = limit;
1490
+ }
1491
+ const until = this.safeInteger(params, 'until');
1492
+ if (until !== undefined) {
1493
+ params = this.omit(params, 'until');
1494
+ request['fromIdx'] = until;
1495
+ }
1496
+ response = await this.spotV1PublicGetMarketKline(this.extend(request, params));
1497
+ data = this.safeList(response, 'data', []);
1498
+ }
1499
+ else {
1500
+ throw new NotSupported(this.id + ' fetchOHLCV only support spot & swap markets');
1501
+ }
1502
+ //
1503
+ // spot
1504
+ //
1505
+ // {
1506
+ // "symbol":"BTCUSDT",
1507
+ // "scale":"KLINE_1MIN",
1508
+ // "data":[
1509
+ // {
1510
+ // "i":"1660825020",
1511
+ // "a":"93458.778",
1512
+ // "v":"3.9774",
1513
+ // "c":"23494.99",
1514
+ // "h":"23509.63",
1515
+ // "l":"23491.93",
1516
+ // "o":"23508.34"
1517
+ // }
1518
+ // ]
1519
+ // }
1520
+ //
1521
+ // swap
1522
+ //
1523
+ // [
1524
+ // {
1525
+ // "high": "35360.7",
1526
+ // "vol": "110288",
1527
+ // "low": "35347.9",
1528
+ // "idx": 1699411680000,
1529
+ // "close": "35347.9",
1530
+ // "open": "35349.4"
1531
+ // }
1532
+ // ]
1533
+ //
1534
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
1535
+ }
1536
+ parseOHLCV(ohlcv, market = undefined) {
1537
+ //
1538
+ // spot
1539
+ //
1540
+ // {
1541
+ // "i":"1660825020",
1542
+ // "a":"93458.778",
1543
+ // "v":"3.9774",
1544
+ // "c":"23494.99",
1545
+ // "h":"23509.63",
1546
+ // "l":"23491.93",
1547
+ // "o":"23508.34"
1548
+ // }
1549
+ //
1550
+ // swap
1551
+ //
1552
+ // {
1553
+ // "high": "35360.7",
1554
+ // "vol": "110288",
1555
+ // "low": "35347.9",
1556
+ // "idx": 1699411680000,
1557
+ // "close": "35347.9",
1558
+ // "open": "35349.4"
1559
+ // }
1560
+ //
1561
+ let timestamp = this.safeTimestamp(ohlcv, 'i');
1562
+ if (timestamp === undefined) {
1563
+ timestamp = this.safeInteger(ohlcv, 'idx');
1564
+ }
1565
+ return [
1566
+ timestamp,
1567
+ this.safeNumber2(ohlcv, 'o', 'open'),
1568
+ this.safeNumber2(ohlcv, 'h', 'high'),
1569
+ this.safeNumber2(ohlcv, 'l', 'low'),
1570
+ this.safeNumber2(ohlcv, 'c', 'close'),
1571
+ this.safeNumber2(ohlcv, 'v', 'vol'),
1572
+ ];
1573
+ }
1574
+ /**
1575
+ * @method
1576
+ * @name bitrue#fetchBidsAsks
1577
+ * @description fetches the bid and ask price and volume for multiple markets
1578
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#symbol-order-book-ticker
1579
+ * @see https://www.bitrue.com/api-docs#ticker
1580
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#ticker
1581
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
1582
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1583
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1584
+ */
1585
+ async fetchBidsAsks(symbols = undefined, params = {}) {
1586
+ await this.loadMarkets();
1587
+ symbols = this.marketSymbols(symbols, undefined, false);
1588
+ const first = this.safeString(symbols, 0);
1589
+ const market = this.market(first);
1590
+ let response = undefined;
1591
+ if (market['swap']) {
1592
+ const request = {
1593
+ 'contractName': market['id'],
1594
+ };
1595
+ if (market['linear']) {
1596
+ response = await this.fapiV1PublicGetTicker(this.extend(request, params));
1597
+ }
1598
+ else if (market['inverse']) {
1599
+ response = await this.dapiV1PublicGetTicker(this.extend(request, params));
1600
+ }
1601
+ }
1602
+ else if (market['spot']) {
1603
+ const request = {
1604
+ 'symbol': market['id'],
1605
+ };
1606
+ response = await this.spotV1PublicGetTickerBookTicker(this.extend(request, params));
1607
+ }
1608
+ else {
1609
+ throw new NotSupported(this.id + ' fetchBidsAsks only support spot & swap markets');
1610
+ }
1611
+ //
1612
+ // spot
1613
+ //
1614
+ // {
1615
+ // "symbol": "LTCBTC",
1616
+ // "bidPrice": "4.00000000",
1617
+ // "bidQty": "431.00000000",
1618
+ // "askPrice": "4.00000200",
1619
+ // "askQty": "9.00000000"
1620
+ // }
1621
+ //
1622
+ // swap
1623
+ //
1624
+ // {
1625
+ // "high": "35296",
1626
+ // "vol": "779308354",
1627
+ // "last": "34884.1",
1628
+ // "low": "34806.7",
1629
+ // "buy": 34883.9,
1630
+ // "sell": 34884,
1631
+ // "rose": "-0.0027957315",
1632
+ // "time": 1699348013000
1633
+ // }
1634
+ //
1635
+ const data = {};
1636
+ data[market['id']] = response;
1637
+ return this.parseTickers(data, symbols);
1638
+ }
1639
+ /**
1640
+ * @method
1641
+ * @name bitrue#fetchTickers
1642
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1643
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#24hr-ticker-price-change-statistics
1644
+ * @see https://www.bitrue.com/api-docs#ticker
1645
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#ticker
1646
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1647
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1648
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1649
+ */
1650
+ async fetchTickers(symbols = undefined, params = {}) {
1651
+ await this.loadMarkets();
1652
+ symbols = this.marketSymbols(symbols);
1653
+ let response = undefined;
1654
+ let data = undefined;
1655
+ const request = {};
1656
+ let type = undefined;
1657
+ if (symbols !== undefined) {
1658
+ const first = this.safeString(symbols, 0);
1659
+ const market = this.market(first);
1660
+ if (market['swap']) {
1661
+ throw new NotSupported(this.id + ' fetchTickers does not support swap markets, please use fetchTicker instead');
1662
+ }
1663
+ else if (market['spot']) {
1664
+ response = await this.spotV1PublicGetTicker24hr(this.extend(request, params));
1665
+ data = response;
1666
+ }
1667
+ else {
1668
+ throw new NotSupported(this.id + ' fetchTickers only support spot & swap markets');
1669
+ }
1670
+ }
1671
+ else {
1672
+ [type, params] = this.handleMarketTypeAndParams('fetchTickers', undefined, params);
1673
+ if (type !== 'spot') {
1674
+ throw new NotSupported(this.id + ' fetchTickers only support spot when symbols are not proved');
1675
+ }
1676
+ response = await this.spotV1PublicGetTicker24hr(this.extend(request, params));
1677
+ data = response;
1678
+ }
1679
+ //
1680
+ // spot
1681
+ //
1682
+ // [{
1683
+ // symbol: 'BTCUSDT',
1684
+ // priceChange: '105.20',
1685
+ // priceChangePercent: '0.3000',
1686
+ // weightedAvgPrice: null,
1687
+ // prevClosePrice: null,
1688
+ // lastPrice: '34905.21',
1689
+ // lastQty: null,
1690
+ // bidPrice: '34905.21',
1691
+ // askPrice: '34905.22',
1692
+ // openPrice: '34800.01',
1693
+ // highPrice: '35276.33',
1694
+ // lowPrice: '34787.51',
1695
+ // volume: '12549.6481',
1696
+ // quoteVolume: '439390492.917',
1697
+ // openTime: '0',
1698
+ // closeTime: '0',
1699
+ // firstId: '0',
1700
+ // lastId: '0',
1701
+ // count: '0'
1702
+ // }]
1703
+ //
1704
+ // swap
1705
+ //
1706
+ // {
1707
+ // "high": "35296",
1708
+ // "vol": "779308354",
1709
+ // "last": "34884.1",
1710
+ // "low": "34806.7",
1711
+ // "buy": 34883.9,
1712
+ // "sell": 34884,
1713
+ // "rose": "-0.0027957315",
1714
+ // "time": 1699348013000
1715
+ // }
1716
+ //
1717
+ // the exchange returns market ids with an underscore from the tickers endpoint
1718
+ // the market ids do not have an underscore, so it has to be removed
1719
+ // https://github.com/ccxt/ccxt/issues/13856
1720
+ const tickers = {};
1721
+ for (let i = 0; i < data.length; i++) {
1722
+ const ticker = this.safeDict(data, i, {});
1723
+ const market = this.safeMarket(this.safeString(ticker, 'symbol'));
1724
+ tickers[market['id']] = ticker;
1725
+ }
1726
+ return this.parseTickers(tickers, symbols);
1727
+ }
1728
+ parseTrade(trade, market = undefined) {
1729
+ //
1730
+ // fetchTrades
1731
+ //
1732
+ // {
1733
+ // "id": 28457,
1734
+ // "price": "4.00000100",
1735
+ // "qty": "12.00000000",
1736
+ // "time": 1499865549590, // Actual timestamp of trade
1737
+ // "isBuyerMaker": true,
1738
+ // "isBestMatch": true
1739
+ // }
1740
+ //
1741
+ // fetchTrades - spot
1742
+ //
1743
+ // {
1744
+ // "symbol":"USDCUSDT",
1745
+ // "id":20725156,
1746
+ // "orderId":2880918576,
1747
+ // "origClientOrderId":null,
1748
+ // "price":"0.9996000000000000",
1749
+ // "qty":"100.0000000000000000",
1750
+ // "commission":null,
1751
+ // "commissionAssert":null,
1752
+ // "time":1635558511000,
1753
+ // "isBuyer":false,
1754
+ // "isMaker":false,
1755
+ // "isBestMatch":true
1756
+ // }
1757
+ //
1758
+ // fetchTrades - future
1759
+ //
1760
+ // {
1761
+ // "tradeId":12,
1762
+ // "price":0.9,
1763
+ // "qty":1,
1764
+ // "amount":9,
1765
+ // "contractName":"E-SAND-USDT",
1766
+ // "side":"BUY",
1767
+ // "fee":"0.0018",
1768
+ // "bidId":1558124009467904992,
1769
+ // "askId":1558124043827644908,
1770
+ // "bidUserId":10294,
1771
+ // "askUserId":10467,
1772
+ // "isBuyer":true,
1773
+ // "isMaker":true,
1774
+ // "ctime":1678426306000
1775
+ // }
1776
+ //
1777
+ const timestamp = this.safeInteger2(trade, 'ctime', 'time');
1778
+ const priceString = this.safeString(trade, 'price');
1779
+ const amountString = this.safeString(trade, 'qty');
1780
+ const marketId = this.safeString2(trade, 'symbol', 'contractName');
1781
+ const symbol = this.safeSymbol(marketId, market);
1782
+ const orderId = this.safeString(trade, 'orderId');
1783
+ const id = this.safeString2(trade, 'id', 'tradeId');
1784
+ let side = undefined;
1785
+ const buyerMaker = this.safeBool(trade, 'isBuyerMaker'); // ignore "m" until Bitrue fixes api
1786
+ const isBuyer = this.safeBool(trade, 'isBuyer');
1787
+ if (buyerMaker !== undefined) {
1788
+ side = buyerMaker ? 'sell' : 'buy';
1789
+ }
1790
+ if (isBuyer !== undefined) {
1791
+ side = isBuyer ? 'buy' : 'sell'; // this is a true side
1792
+ }
1793
+ let fee = undefined;
1794
+ if ('commission' in trade) {
1795
+ fee = {
1796
+ 'cost': this.safeString2(trade, 'commission', 'fee'),
1797
+ 'currency': this.safeCurrencyCode(this.safeString(trade, 'commissionAssert')),
1798
+ };
1799
+ }
1800
+ let takerOrMaker = undefined;
1801
+ const isMaker = this.safeBool(trade, 'isMaker');
1802
+ if (isMaker !== undefined) {
1803
+ takerOrMaker = isMaker ? 'maker' : 'taker';
1804
+ }
1805
+ return this.safeTrade({
1806
+ 'info': trade,
1807
+ 'timestamp': timestamp,
1808
+ 'datetime': this.iso8601(timestamp),
1809
+ 'symbol': symbol,
1810
+ 'id': id,
1811
+ 'order': orderId,
1812
+ 'type': undefined,
1813
+ 'side': side,
1814
+ 'takerOrMaker': takerOrMaker,
1815
+ 'price': priceString,
1816
+ 'amount': amountString,
1817
+ 'cost': undefined,
1818
+ 'fee': fee,
1819
+ }, market);
1820
+ }
1821
+ /**
1822
+ * @method
1823
+ * @name bitrue#fetchTrades
1824
+ * @description get the list of most recent trades for a particular symbol
1825
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#recent-trades-list
1826
+ * @param {string} symbol unified symbol of the market to fetch trades for
1827
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1828
+ * @param {int} [limit] the maximum amount of trades to fetch
1829
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1830
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1831
+ */
1832
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1833
+ await this.loadMarkets();
1834
+ const market = this.market(symbol);
1835
+ let response = undefined;
1836
+ if (market['spot']) {
1837
+ const request = {
1838
+ 'symbol': market['id'],
1839
+ // 'limit': 100, // default 100, max = 1000
1840
+ };
1841
+ if (limit !== undefined) {
1842
+ request['limit'] = limit; // default 100, max 1000
1843
+ }
1844
+ response = await this.spotV1PublicGetTrades(this.extend(request, params));
1845
+ }
1846
+ else {
1847
+ throw new NotSupported(this.id + ' fetchTrades only support spot markets');
1848
+ }
1849
+ //
1850
+ // spot
1851
+ //
1852
+ // [
1853
+ // {
1854
+ // "id": 28457,
1855
+ // "price": "4.00000100",
1856
+ // "qty": "12.00000000",
1857
+ // "time": 1499865549590,
1858
+ // "isBuyerMaker": true,
1859
+ // "isBestMatch": true
1860
+ // }
1861
+ // ]
1862
+ //
1863
+ return this.parseTrades(response, market, since, limit);
1864
+ }
1865
+ parseOrderStatus(status) {
1866
+ const statuses = {
1867
+ 'INIT': 'open',
1868
+ 'PENDING_CREATE': 'open',
1869
+ 'NEW': 'open',
1870
+ 'PARTIALLY_FILLED': 'open',
1871
+ 'FILLED': 'closed',
1872
+ 'CANCELED': 'canceled',
1873
+ 'PENDING_CANCEL': 'canceling',
1874
+ 'REJECTED': 'rejected',
1875
+ 'EXPIRED': 'expired',
1876
+ };
1877
+ return this.safeString(statuses, status, status);
1878
+ }
1879
+ parseOrder(order, market = undefined) {
1880
+ //
1881
+ // createOrder - spot
1882
+ //
1883
+ // {
1884
+ // "symbol":"USDCUSDT",
1885
+ // "orderId":2878854881,
1886
+ // "clientOrderId":"",
1887
+ // "transactTime":1635551031276
1888
+ // }
1889
+ //
1890
+ // createOrder - future
1891
+ //
1892
+ // {
1893
+ // "orderId":1690615676032452985,
1894
+ // }
1895
+ //
1896
+ // fetchOrders - spot
1897
+ //
1898
+ // {
1899
+ // "symbol":"USDCUSDT",
1900
+ // "orderId":"2878854881",
1901
+ // "clientOrderId":"",
1902
+ // "price":"1.1000000000000000",
1903
+ // "origQty":"100.0000000000000000",
1904
+ // "executedQty":"0.0000000000000000",
1905
+ // "cummulativeQuoteQty":"0.0000000000000000",
1906
+ // "status":"NEW",
1907
+ // "timeInForce":"",
1908
+ // "type":"LIMIT",
1909
+ // "side":"SELL",
1910
+ // "stopPrice":"",
1911
+ // "icebergQty":"",
1912
+ // "time":1635551031000,
1913
+ // "updateTime":1635551031000,
1914
+ // "isWorking":false
1915
+ // }
1916
+ //
1917
+ // fetchOrders - future
1918
+ //
1919
+ // {
1920
+ // "orderId":1917641,
1921
+ // "price":100,
1922
+ // "origQty":10,
1923
+ // "origAmount":10,
1924
+ // "executedQty":1,
1925
+ // "avgPrice":10000,
1926
+ // "status":"INIT",
1927
+ // "type":"LIMIT",
1928
+ // "side":"BUY",
1929
+ // "action":"OPEN",
1930
+ // "transactTime":1686716571425
1931
+ // "clientOrderId":4949299210
1932
+ // }
1933
+ //
1934
+ const status = this.parseOrderStatus(this.safeString2(order, 'status', 'orderStatus'));
1935
+ const marketId = this.safeString(order, 'symbol');
1936
+ const symbol = this.safeSymbol(marketId, market);
1937
+ const filled = this.safeString(order, 'executedQty');
1938
+ let timestamp = undefined;
1939
+ let lastTradeTimestamp = undefined;
1940
+ if ('time' in order) {
1941
+ timestamp = this.safeInteger(order, 'time');
1942
+ }
1943
+ else if ('transactTime' in order) {
1944
+ timestamp = this.safeInteger(order, 'transactTime');
1945
+ }
1946
+ else if ('updateTime' in order) {
1947
+ if (status === 'open') {
1948
+ if (Precise.stringGt(filled, '0')) {
1949
+ lastTradeTimestamp = this.safeInteger(order, 'updateTime');
1950
+ }
1951
+ else {
1952
+ timestamp = this.safeInteger(order, 'updateTime');
1953
+ }
1954
+ }
1955
+ }
1956
+ const average = this.safeString(order, 'avgPrice');
1957
+ const price = this.safeString(order, 'price');
1958
+ const amount = this.safeString(order, 'origQty');
1959
+ // - Spot/Margin market: cummulativeQuoteQty
1960
+ // - Futures market: cumQuote.
1961
+ // Note this is not the actual cost, since Binance futures uses leverage to calculate margins.
1962
+ const cost = this.safeString2(order, 'cummulativeQuoteQty', 'cumQuote');
1963
+ const id = this.safeString(order, 'orderId');
1964
+ let type = this.safeStringLower(order, 'type');
1965
+ const side = this.safeStringLower(order, 'side');
1966
+ const fills = this.safeList(order, 'fills', []);
1967
+ const clientOrderId = this.safeString(order, 'clientOrderId');
1968
+ const timeInForce = this.safeString(order, 'timeInForce');
1969
+ const postOnly = (type === 'limit_maker') || (timeInForce === 'GTX') || (type === 'post_only');
1970
+ if (type === 'limit_maker') {
1971
+ type = 'limit';
1972
+ }
1973
+ const triggerPrice = this.parseNumber(this.omitZero(this.safeString(order, 'stopPrice')));
1974
+ return this.safeOrder({
1975
+ 'info': order,
1976
+ 'id': id,
1977
+ 'clientOrderId': clientOrderId,
1978
+ 'timestamp': timestamp,
1979
+ 'datetime': this.iso8601(timestamp),
1980
+ 'lastTradeTimestamp': lastTradeTimestamp,
1981
+ 'symbol': symbol,
1982
+ 'type': type,
1983
+ 'timeInForce': timeInForce,
1984
+ 'postOnly': postOnly,
1985
+ 'side': side,
1986
+ 'price': price,
1987
+ 'triggerPrice': triggerPrice,
1988
+ 'amount': amount,
1989
+ 'cost': cost,
1990
+ 'average': average,
1991
+ 'filled': filled,
1992
+ 'remaining': undefined,
1993
+ 'status': status,
1994
+ 'fee': undefined,
1995
+ 'trades': fills,
1996
+ }, market);
1997
+ }
1998
+ /**
1999
+ * @method
2000
+ * @name bitrue#createMarketBuyOrderWithCost
2001
+ * @description create a market buy order by providing the symbol and cost
2002
+ * @see https://www.bitrue.com/api-docs#new-order-trade-hmac-sha256
2003
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#new-order-trade-hmac-sha256
2004
+ * @param {string} symbol unified symbol of the market to create an order in
2005
+ * @param {float} cost how much you want to trade in units of the quote currency
2006
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2007
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2008
+ */
2009
+ async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
2010
+ await this.loadMarkets();
2011
+ const market = this.market(symbol);
2012
+ if (!market['swap']) {
2013
+ throw new NotSupported(this.id + ' createMarketBuyOrderWithCost() supports swap orders only');
2014
+ }
2015
+ params['createMarketBuyOrderRequiresPrice'] = false;
2016
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
2017
+ }
2018
+ /**
2019
+ * @method
2020
+ * @name bitrue#createOrder
2021
+ * @description create a trade order
2022
+ * @see https://www.bitrue.com/api_docs_includes_file/spot/index.html#new-order-trade
2023
+ * @see https://www.bitrue.com/api_docs_includes_file/futures/index.html#new-order-trade-hmac-sha256
2024
+ * @param {string} symbol unified symbol of the market to create an order in
2025
+ * @param {string} type 'market' or 'limit'
2026
+ * @param {string} side 'buy' or 'sell'
2027
+ * @param {float} amount how much of currency you want to trade in units of base currency
2028
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
2029
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2030
+ * @param {float} [params.triggerPrice] *spot only* the price at which a trigger order is triggered at
2031
+ * @param {string} [params.clientOrderId] a unique id for the order, automatically generated if not sent
2032
+ * @param {decimal} [params.leverage] in future order, the leverage value of the order should consistent with the user contract configuration, default is 1
2033
+ * @param {string} [params.timeInForce] 'fok', 'ioc' or 'po'
2034
+ * @param {bool} [params.postOnly] default false
2035
+ * @param {bool} [params.reduceOnly] default false
2036
+ * EXCHANGE SPECIFIC PARAMETERS
2037
+ * @param {decimal} [params.icebergQty]
2038
+ * @param {long} [params.recvWindow]
2039
+ * @param {float} [params.cost] *swap market buy only* the quote quantity that can be used as an alternative for the amount
2040
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2041
+ */
2042
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
2043
+ await this.loadMarkets();
2044
+ const market = this.market(symbol);
2045
+ let response = undefined;
2046
+ let data = undefined;
2047
+ const uppercaseType = type.toUpperCase();
2048
+ const request = {
2049
+ 'side': side.toUpperCase(),
2050
+ 'type': uppercaseType,
2051
+ // 'timeInForce': '',
2052
+ // 'price': this.priceToPrecision (symbol, price),
2053
+ // 'newClientOrderId': clientOrderId, // automatically generated if not sent
2054
+ // 'stopPrice': this.priceToPrecision (symbol, 'stopPrice'),
2055
+ // 'icebergQty': this.amountToPrecision (symbol, icebergQty),
2056
+ };
2057
+ if (uppercaseType === 'LIMIT') {
2058
+ if (price === undefined) {
2059
+ throw new InvalidOrder(this.id + ' createOrder() requires a price argument');
2060
+ }
2061
+ request['price'] = this.priceToPrecision(symbol, price);
2062
+ }
2063
+ if (market['swap']) {
2064
+ const isMarket = uppercaseType === 'MARKET';
2065
+ const timeInForce = this.safeStringLower(params, 'timeInForce');
2066
+ const postOnly = this.isPostOnly(isMarket, undefined, params);
2067
+ if (postOnly) {
2068
+ request['type'] = 'POST_ONLY';
2069
+ }
2070
+ else if (timeInForce === 'fok') {
2071
+ request['type'] = 'FOK';
2072
+ }
2073
+ else if (timeInForce === 'ioc') {
2074
+ request['type'] = 'IOC';
2075
+ }
2076
+ request['contractName'] = market['id'];
2077
+ let createMarketBuyOrderRequiresPrice = true;
2078
+ [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
2079
+ if (isMarket && (side === 'buy') && createMarketBuyOrderRequiresPrice) {
2080
+ const cost = this.safeString(params, 'cost');
2081
+ params = this.omit(params, 'cost');
2082
+ if (price === undefined && cost === undefined) {
2083
+ throw new InvalidOrder(this.id + ' createOrder() requires the price argument with swap market buy orders to calculate total order cost (amount to spend), where cost = amount * price. Supply a price argument to createOrder() call if you want the cost to be calculated for you from price and amount, or, alternatively, add .options["createMarketBuyOrderRequiresPrice"] = false to supply the cost in the amount argument (the exchange-specific behaviour)');
2084
+ }
2085
+ else {
2086
+ const amountString = this.numberToString(amount);
2087
+ const priceString = this.numberToString(price);
2088
+ const quoteAmount = Precise.stringMul(amountString, priceString);
2089
+ const requestAmount = (cost !== undefined) ? cost : quoteAmount;
2090
+ request['amount'] = this.costToPrecision(symbol, requestAmount);
2091
+ request['volume'] = this.costToPrecision(symbol, requestAmount);
2092
+ }
2093
+ }
2094
+ else {
2095
+ request['amount'] = this.parseToNumeric(amount);
2096
+ request['volume'] = this.parseToNumeric(amount);
2097
+ }
2098
+ request['positionType'] = 1;
2099
+ const reduceOnly = this.safeValue2(params, 'reduceOnly', 'reduce_only');
2100
+ request['open'] = reduceOnly ? 'CLOSE' : 'OPEN';
2101
+ const leverage = this.safeString(params, 'leverage', '1');
2102
+ request['leverage'] = this.parseToNumeric(leverage);
2103
+ params = this.omit(params, ['leverage', 'reduceOnly', 'reduce_only', 'timeInForce']);
2104
+ if (market['linear']) {
2105
+ response = await this.fapiV2PrivatePostOrder(this.extend(request, params));
2106
+ }
2107
+ else if (market['inverse']) {
2108
+ response = await this.dapiV2PrivatePostOrder(this.extend(request, params));
2109
+ }
2110
+ data = this.safeDict(response, 'data', {});
2111
+ }
2112
+ else if (market['spot']) {
2113
+ request['symbol'] = market['id'];
2114
+ request['quantity'] = this.amountToPrecision(symbol, amount);
2115
+ const validOrderTypes = this.safeValue(market['info'], 'orderTypes');
2116
+ if (!this.inArray(uppercaseType, validOrderTypes)) {
2117
+ throw new InvalidOrder(this.id + ' ' + type + ' is not a valid order type in market ' + symbol);
2118
+ }
2119
+ const clientOrderId = this.safeString2(params, 'newClientOrderId', 'clientOrderId');
2120
+ if (clientOrderId !== undefined) {
2121
+ params = this.omit(params, ['newClientOrderId', 'clientOrderId']);
2122
+ request['newClientOrderId'] = clientOrderId;
2123
+ }
2124
+ const triggerPrice = this.safeValue2(params, 'triggerPrice', 'stopPrice');
2125
+ if (triggerPrice !== undefined) {
2126
+ params = this.omit(params, ['triggerPrice', 'stopPrice']);
2127
+ request['stopPrice'] = this.priceToPrecision(symbol, triggerPrice);
2128
+ }
2129
+ response = await this.spotV1PrivatePostOrder(this.extend(request, params));
2130
+ data = response;
2131
+ }
2132
+ else {
2133
+ throw new NotSupported(this.id + ' createOrder only support spot & swap markets');
2134
+ }
2135
+ //
2136
+ // spot
2137
+ //
2138
+ // {
2139
+ // "symbol": "BTCUSDT",
2140
+ // "orderId": 307650651173648896,
2141
+ // "orderIdStr": "307650651173648896",
2142
+ // "clientOrderId": "6gCrw2kRUAF9CvJDGP16IP",
2143
+ // "transactTime": 1507725176595
2144
+ // }
2145
+ //
2146
+ // swap
2147
+ //
2148
+ // {
2149
+ // "code": "0",
2150
+ // "msg": "Success",
2151
+ // "data": {
2152
+ // "orderId": 1690615676032452985
2153
+ // }
2154
+ // }
2155
+ //
2156
+ return this.parseOrder(data, market);
2157
+ }
2158
+ /**
2159
+ * @method
2160
+ * @name bitrue#fetchOrder
2161
+ * @description fetches information on an order made by the user
2162
+ * @see https://www.bitrue.com/api_docs_includes_file/spot/index.html#query-order-user_data
2163
+ * @see https://www.bitrue.com/api_docs_includes_file/futures/index.html#query-order-user_data-hmac-sha256
2164
+ * @param {string} id the order id
2165
+ * @param {string} symbol unified symbol of the market the order was made in
2166
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2167
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2168
+ */
2169
+ async fetchOrder(id, symbol = undefined, params = {}) {
2170
+ if (symbol === undefined) {
2171
+ throw new ArgumentsRequired(this.id + ' fetchOrder() requires a symbol argument');
2172
+ }
2173
+ await this.loadMarkets();
2174
+ const market = this.market(symbol);
2175
+ const origClientOrderId = this.safeValue2(params, 'origClientOrderId', 'clientOrderId');
2176
+ params = this.omit(params, ['origClientOrderId', 'clientOrderId']);
2177
+ let response = undefined;
2178
+ let data = undefined;
2179
+ const request = {};
2180
+ if (origClientOrderId === undefined) {
2181
+ request['orderId'] = id;
2182
+ }
2183
+ else {
2184
+ if (market['swap']) {
2185
+ request['clientOrderId'] = origClientOrderId;
2186
+ }
2187
+ else {
2188
+ request['origClientOrderId'] = origClientOrderId;
2189
+ }
2190
+ }
2191
+ if (market['swap']) {
2192
+ request['contractName'] = market['id'];
2193
+ if (market['linear']) {
2194
+ response = await this.fapiV2PrivateGetOrder(this.extend(request, params));
2195
+ }
2196
+ else if (market['inverse']) {
2197
+ response = await this.dapiV2PrivateGetOrder(this.extend(request, params));
2198
+ }
2199
+ data = this.safeDict(response, 'data', {});
2200
+ }
2201
+ else if (market['spot']) {
2202
+ request['orderId'] = id; // spot market id is mandatory
2203
+ request['symbol'] = market['id'];
2204
+ response = await this.spotV1PrivateGetOrder(this.extend(request, params));
2205
+ data = response;
2206
+ }
2207
+ else {
2208
+ throw new NotSupported(this.id + ' fetchOrder only support spot & swap markets');
2209
+ }
2210
+ //
2211
+ // spot
2212
+ //
2213
+ // {
2214
+ // "symbol": "LTCBTC",
2215
+ // "orderId": 1,
2216
+ // "clientOrderId": "myOrder1",
2217
+ // "price": "0.1",
2218
+ // "origQty": "1.0",
2219
+ // "executedQty": "0.0",
2220
+ // "cummulativeQuoteQty": "0.0",
2221
+ // "status": "NEW",
2222
+ // "timeInForce": "GTC",
2223
+ // "type": "LIMIT",
2224
+ // "side": "BUY",
2225
+ // "stopPrice": "0.0",
2226
+ // "icebergQty": "0.0",
2227
+ // "time": 1499827319559,
2228
+ // "updateTime": 1499827319559,
2229
+ // "isWorking": true
2230
+ // }
2231
+ //
2232
+ // swap
2233
+ //
2234
+ // {
2235
+ // "code":0,
2236
+ // "msg":"success",
2237
+ // "data":{
2238
+ // "orderId":1917641,
2239
+ // "price":100,
2240
+ // "origQty":10,
2241
+ // "origAmount":10,
2242
+ // "executedQty":1,
2243
+ // "avgPrice":10000,
2244
+ // "status":"INIT",
2245
+ // "type":"LIMIT",
2246
+ // "side":"BUY",
2247
+ // "action":"OPEN",
2248
+ // "transactTime":1686716571425
2249
+ // "clientOrderId":4949299210
2250
+ // }
2251
+ // }
2252
+ //
2253
+ return this.parseOrder(data, market);
2254
+ }
2255
+ /**
2256
+ * @method
2257
+ * @name bitrue#fetchClosedOrders
2258
+ * @description fetches information on multiple closed orders made by the user
2259
+ * @see https://www.bitrue.com/api_docs_includes_file/spot/index.html#all-orders-user_data
2260
+ * @param {string} symbol unified market symbol of the market orders were made in
2261
+ * @param {int} [since] the earliest time in ms to fetch orders for
2262
+ * @param {int} [limit] the maximum number of order structures to retrieve
2263
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2264
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2265
+ */
2266
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2267
+ if (symbol === undefined) {
2268
+ throw new ArgumentsRequired(this.id + ' fetchClosedOrders() requires a symbol argument');
2269
+ }
2270
+ await this.loadMarkets();
2271
+ const market = this.market(symbol);
2272
+ if (!market['spot']) {
2273
+ throw new NotSupported(this.id + ' fetchClosedOrders only support spot markets');
2274
+ }
2275
+ const request = {
2276
+ 'symbol': market['id'],
2277
+ // 'orderId': 123445, // long
2278
+ // 'startTime': since,
2279
+ // 'endTime': this.milliseconds (),
2280
+ // 'limit': limit, // default 100, max 1000
2281
+ };
2282
+ if (since !== undefined) {
2283
+ request['startTime'] = since;
2284
+ }
2285
+ if (limit !== undefined) {
2286
+ request['limit'] = limit; // default 100, max 1000
2287
+ }
2288
+ const response = await this.spotV1PrivateGetAllOrders(this.extend(request, params));
2289
+ //
2290
+ // [
2291
+ // {
2292
+ // "symbol": "LTCBTC",
2293
+ // "orderId": 1,
2294
+ // "clientOrderId": "myOrder1",
2295
+ // "price": "0.1",
2296
+ // "origQty": "1.0",
2297
+ // "executedQty": "0.0",
2298
+ // "cummulativeQuoteQty": "0.0",
2299
+ // "status": "NEW",
2300
+ // "timeInForce": "GTC",
2301
+ // "type": "LIMIT",
2302
+ // "side": "BUY",
2303
+ // "stopPrice": "0.0",
2304
+ // "icebergQty": "0.0",
2305
+ // "time": 1499827319559,
2306
+ // "updateTime": 1499827319559,
2307
+ // "isWorking": true
2308
+ // }
2309
+ // ]
2310
+ //
2311
+ return this.parseOrders(response, market, since, limit);
2312
+ }
2313
+ /**
2314
+ * @method
2315
+ * @name bitrue#fetchOpenOrders
2316
+ * @description fetch all unfilled currently open orders
2317
+ * @see https://www.bitrue.com/api_docs_includes_file/spot/index.html#current-open-orders-user_data
2318
+ * @see https://www.bitrue.com/api_docs_includes_file/futures/index.html#cancel-all-open-orders-trade-hmac-sha256
2319
+ * @param {string} symbol unified market symbol
2320
+ * @param {int} [since] the earliest time in ms to fetch open orders for
2321
+ * @param {int} [limit] the maximum number of open order structures to retrieve
2322
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2323
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2324
+ */
2325
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2326
+ if (symbol === undefined) {
2327
+ throw new ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument');
2328
+ }
2329
+ await this.loadMarkets();
2330
+ const market = this.market(symbol);
2331
+ let response = undefined;
2332
+ let data = undefined;
2333
+ const request = {};
2334
+ if (market['swap']) {
2335
+ request['contractName'] = market['id'];
2336
+ if (market['linear']) {
2337
+ response = await this.fapiV2PrivateGetOpenOrders(this.extend(request, params));
2338
+ }
2339
+ else if (market['inverse']) {
2340
+ response = await this.dapiV2PrivateGetOpenOrders(this.extend(request, params));
2341
+ }
2342
+ data = this.safeList(response, 'data', []);
2343
+ }
2344
+ else if (market['spot']) {
2345
+ request['symbol'] = market['id'];
2346
+ response = await this.spotV1PrivateGetOpenOrders(this.extend(request, params));
2347
+ data = response;
2348
+ }
2349
+ else {
2350
+ throw new NotSupported(this.id + ' fetchOpenOrders only support spot & swap markets');
2351
+ }
2352
+ //
2353
+ // spot
2354
+ //
2355
+ // [
2356
+ // {
2357
+ // "symbol":"USDCUSDT",
2358
+ // "orderId":"2878854881",
2359
+ // "clientOrderId":"",
2360
+ // "price":"1.1000000000000000",
2361
+ // "origQty":"100.0000000000000000",
2362
+ // "executedQty":"0.0000000000000000",
2363
+ // "cummulativeQuoteQty":"0.0000000000000000",
2364
+ // "status":"NEW",
2365
+ // "timeInForce":"",
2366
+ // "type":"LIMIT",
2367
+ // "side":"SELL",
2368
+ // "stopPrice":"",
2369
+ // "icebergQty":"",
2370
+ // "time":1635551031000,
2371
+ // "updateTime":1635551031000,
2372
+ // "isWorking":false
2373
+ // }
2374
+ // ]
2375
+ //
2376
+ // swap
2377
+ //
2378
+ // {
2379
+ // "code": "0",
2380
+ // "msg": "Success",
2381
+ // "data": [{
2382
+ // "orderId": 1917641,
2383
+ // "clientOrderId": "2488514315",
2384
+ // "price": 100,
2385
+ // "origQty": 10,
2386
+ // "origAmount": 10,
2387
+ // "executedQty": 1,
2388
+ // "avgPrice": 12451,
2389
+ // "status": "INIT",
2390
+ // "type": "LIMIT",
2391
+ // "side": "BUY",
2392
+ // "action": "OPEN",
2393
+ // "transactTime": 1686717303975
2394
+ // }
2395
+ // ]
2396
+ // }
2397
+ //
2398
+ return this.parseOrders(data, market, since, limit);
2399
+ }
2400
+ /**
2401
+ * @method
2402
+ * @name bitrue#cancelOrder
2403
+ * @description cancels an open order
2404
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#cancel-order-trade
2405
+ * @see https://www.bitrue.com/api-docs#cancel-order-trade-hmac-sha256
2406
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#cancel-order-trade-hmac-sha256
2407
+ * @param {string} id order id
2408
+ * @param {string} symbol unified symbol of the market the order was made in
2409
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2410
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2411
+ */
2412
+ async cancelOrder(id, symbol = undefined, params = {}) {
2413
+ if (symbol === undefined) {
2414
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
2415
+ }
2416
+ await this.loadMarkets();
2417
+ const market = this.market(symbol);
2418
+ const origClientOrderId = this.safeValue2(params, 'origClientOrderId', 'clientOrderId');
2419
+ params = this.omit(params, ['origClientOrderId', 'clientOrderId']);
2420
+ let response = undefined;
2421
+ let data = undefined;
2422
+ const request = {};
2423
+ if (origClientOrderId === undefined) {
2424
+ request['orderId'] = id;
2425
+ }
2426
+ else {
2427
+ if (market['swap']) {
2428
+ request['clientOrderId'] = origClientOrderId;
2429
+ }
2430
+ else {
2431
+ request['origClientOrderId'] = origClientOrderId;
2432
+ }
2433
+ }
2434
+ if (market['swap']) {
2435
+ request['contractName'] = market['id'];
2436
+ if (market['linear']) {
2437
+ response = await this.fapiV2PrivatePostCancel(this.extend(request, params));
2438
+ }
2439
+ else if (market['inverse']) {
2440
+ response = await this.dapiV2PrivatePostCancel(this.extend(request, params));
2441
+ }
2442
+ data = this.safeDict(response, 'data', {});
2443
+ }
2444
+ else if (market['spot']) {
2445
+ request['symbol'] = market['id'];
2446
+ response = await this.spotV1PrivateDeleteOrder(this.extend(request, params));
2447
+ data = response;
2448
+ }
2449
+ else {
2450
+ throw new NotSupported(this.id + ' cancelOrder only support spot & swap markets');
2451
+ }
2452
+ //
2453
+ // spot
2454
+ //
2455
+ // {
2456
+ // "symbol": "LTCBTC",
2457
+ // "origClientOrderId": "myOrder1",
2458
+ // "orderId": 1,
2459
+ // "clientOrderId": "cancelMyOrder1"
2460
+ // }
2461
+ //
2462
+ // swap
2463
+ //
2464
+ // {
2465
+ // "code": "0",
2466
+ // "msg": "Success",
2467
+ // "data": {
2468
+ // "orderId": 1690615847831143159
2469
+ // }
2470
+ // }
2471
+ //
2472
+ return this.parseOrder(data, market);
2473
+ }
2474
+ /**
2475
+ * @method
2476
+ * @name bitrue#cancelAllOrders
2477
+ * @description cancel all open orders in a market
2478
+ * @see https://www.bitrue.com/api-docs#cancel-all-open-orders-trade-hmac-sha256
2479
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#cancel-all-open-orders-trade-hmac-sha256
2480
+ * @param {string} symbol unified market symbol of the market to cancel orders in
2481
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2482
+ * @param {string} [params.marginMode] 'cross' or 'isolated', for spot margin trading
2483
+ * @returns {object[]} a list of [order structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
2484
+ */
2485
+ async cancelAllOrders(symbol = undefined, params = {}) {
2486
+ await this.loadMarkets();
2487
+ const market = this.market(symbol);
2488
+ let response = undefined;
2489
+ let data = undefined;
2490
+ if (market['swap']) {
2491
+ const request = {
2492
+ 'contractName': market['id'],
2493
+ };
2494
+ if (market['linear']) {
2495
+ response = await this.fapiV2PrivatePostAllOpenOrders(this.extend(request, params));
2496
+ }
2497
+ else if (market['inverse']) {
2498
+ response = await this.dapiV2PrivatePostAllOpenOrders(this.extend(request, params));
2499
+ }
2500
+ data = this.safeList(response, 'data', []);
2501
+ }
2502
+ else {
2503
+ throw new NotSupported(this.id + ' cancelAllOrders only support future markets');
2504
+ }
2505
+ //
2506
+ // swap
2507
+ //
2508
+ // {
2509
+ // 'code': '0',
2510
+ // 'msg': 'Success',
2511
+ // 'data': null
2512
+ // }
2513
+ //
2514
+ return this.parseOrders(data, market);
2515
+ }
2516
+ /**
2517
+ * @method
2518
+ * @name bitrue#fetchMyTrades
2519
+ * @description fetch all trades made by the user
2520
+ * @see https://www.bitrue.com/api_docs_includes_file/spot/index.html#account-trade-list-user_data
2521
+ * @see https://www.bitrue.com/api_docs_includes_file/futures/index.html#account-trade-list-user_data-hmac-sha256
2522
+ * @param {string} symbol unified market symbol
2523
+ * @param {int} [since] the earliest time in ms to fetch trades for
2524
+ * @param {int} [limit] the maximum number of trades structures to retrieve
2525
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2526
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2527
+ */
2528
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2529
+ await this.loadMarkets();
2530
+ if (symbol === undefined) {
2531
+ throw new ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
2532
+ }
2533
+ const market = this.market(symbol);
2534
+ let response = undefined;
2535
+ let data = undefined;
2536
+ const request = {};
2537
+ if (since !== undefined) {
2538
+ request['startTime'] = since;
2539
+ }
2540
+ if (limit !== undefined) {
2541
+ if (limit > 1000) {
2542
+ limit = 1000;
2543
+ }
2544
+ request['limit'] = limit;
2545
+ }
2546
+ if (market['swap']) {
2547
+ request['contractName'] = market['id'];
2548
+ if (market['linear']) {
2549
+ response = await this.fapiV2PrivateGetMyTrades(this.extend(request, params));
2550
+ }
2551
+ else if (market['inverse']) {
2552
+ response = await this.dapiV2PrivateGetMyTrades(this.extend(request, params));
2553
+ }
2554
+ data = this.safeList(response, 'data', []);
2555
+ }
2556
+ else if (market['spot']) {
2557
+ request['symbol'] = market['id'];
2558
+ response = await this.spotV2PrivateGetMyTrades(this.extend(request, params));
2559
+ data = response;
2560
+ }
2561
+ else {
2562
+ throw new NotSupported(this.id + ' fetchMyTrades only support spot & swap markets');
2563
+ }
2564
+ //
2565
+ // spot
2566
+ //
2567
+ // [
2568
+ // {
2569
+ // "symbol":"USDCUSDT",
2570
+ // "id":20725156,
2571
+ // "orderId":2880918576,
2572
+ // "origClientOrderId":null,
2573
+ // "price":"0.9996000000000000",
2574
+ // "qty":"100.0000000000000000",
2575
+ // "commission":null,
2576
+ // "commissionAssert":null,
2577
+ // "time":1635558511000,
2578
+ // "isBuyer":false,
2579
+ // "isMaker":false,
2580
+ // "isBestMatch":true
2581
+ // }
2582
+ // ]
2583
+ //
2584
+ // swap
2585
+ //
2586
+ // {
2587
+ // "code":"0",
2588
+ // "msg":"Success",
2589
+ // "data":[
2590
+ // {
2591
+ // "tradeId":12,
2592
+ // "price":0.9,
2593
+ // "qty":1,
2594
+ // "amount":9,
2595
+ // "contractName":"E-SAND-USDT",
2596
+ // "side":"BUY",
2597
+ // "fee":"0.0018",
2598
+ // "bidId":1558124009467904992,
2599
+ // "askId":1558124043827644908,
2600
+ // "bidUserId":10294,
2601
+ // "askUserId":10467,
2602
+ // "isBuyer":true,
2603
+ // "isMaker":true,
2604
+ // "ctime":1678426306000
2605
+ // }
2606
+ // ]
2607
+ // }
2608
+ //
2609
+ return this.parseTrades(data, market, since, limit);
2610
+ }
2611
+ /**
2612
+ * @method
2613
+ * @name bitrue#fetchDeposits
2614
+ * @description fetch all deposits made to an account
2615
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#deposit-history--withdraw_data
2616
+ * @param {string} code unified currency code
2617
+ * @param {int} [since] the earliest time in ms to fetch deposits for
2618
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
2619
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2620
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2621
+ */
2622
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
2623
+ if (code === undefined) {
2624
+ throw new ArgumentsRequired(this.id + ' fetchDeposits() requires a code argument');
2625
+ }
2626
+ await this.loadMarkets();
2627
+ const currency = this.currency(code);
2628
+ const request = {
2629
+ 'coin': currency['id'],
2630
+ 'status': 1, // 0 init, 1 finished, default 0
2631
+ // 'offset': 0,
2632
+ // 'limit': limit, // default 10, max 1000
2633
+ // 'startTime': since,
2634
+ // 'endTime': this.milliseconds (),
2635
+ };
2636
+ if (since !== undefined) {
2637
+ request['startTime'] = since;
2638
+ // request['endTime'] = this.sum (since, 7776000000);
2639
+ }
2640
+ if (limit !== undefined) {
2641
+ request['limit'] = limit;
2642
+ }
2643
+ const response = await this.spotV1PrivateGetDepositHistory(this.extend(request, params));
2644
+ //
2645
+ // {
2646
+ // "code":200,
2647
+ // "msg":"succ",
2648
+ // "data":[
2649
+ // {
2650
+ // "id":2659137,
2651
+ // "symbol":"USDC",
2652
+ // "amount":"200.0000000000000000",
2653
+ // "fee":"0.0E-15",
2654
+ // "createdAt":1635503169000,
2655
+ // "updatedAt":1635503202000,
2656
+ // "addressFrom":"0x2faf487a4414fe77e2327f0bf4ae2a264a776ad2",
2657
+ // "addressTo":"0x190ceccb1f8bfbec1749180f0ba8922b488d865b",
2658
+ // "txid":"0x9970aec41099ac385568859517308707bc7d716df8dabae7b52f5b17351c3ed0",
2659
+ // "confirmations":5,
2660
+ // "status":0,
2661
+ // "tagType":null,
2662
+ // },
2663
+ // {
2664
+ // "id":2659137,
2665
+ // "symbol": "XRP",
2666
+ // "amount": "20.0000000000000000",
2667
+ // "fee": "0.0E-15",
2668
+ // "createdAt": 1544669393000,
2669
+ // "updatedAt": 1544669413000,
2670
+ // "addressFrom": "",
2671
+ // "addressTo": "raLPjTYeGezfdb6crXZzcC8RkLBEwbBHJ5_18113641",
2672
+ // "txid": "515B23E1F9864D3AF7F5B4C4FCBED784BAE861854FAB95F4031922B6AAEFC7AC",
2673
+ // "confirmations": 7,
2674
+ // "status": 1,
2675
+ // "tagType": "Tag"
2676
+ // }
2677
+ // ]
2678
+ // }
2679
+ //
2680
+ const data = this.safeList(response, 'data', []);
2681
+ return this.parseTransactions(data, currency, since, limit);
2682
+ }
2683
+ /**
2684
+ * @method
2685
+ * @name bitrue#fetchWithdrawals
2686
+ * @description fetch all withdrawals made from an account
2687
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#withdraw-history--withdraw_data
2688
+ * @param {string} code unified currency code
2689
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2690
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2691
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2692
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2693
+ */
2694
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2695
+ if (code === undefined) {
2696
+ throw new ArgumentsRequired(this.id + ' fetchWithdrawals() requires a code argument');
2697
+ }
2698
+ await this.loadMarkets();
2699
+ const currency = this.currency(code);
2700
+ const request = {
2701
+ 'coin': currency['id'],
2702
+ 'status': 5, // 0 init, 5 finished, 6 canceled, default 0
2703
+ // 'offset': 0,
2704
+ // 'limit': limit, // default 10, max 1000
2705
+ // 'startTime': since,
2706
+ // 'endTime': this.milliseconds (),
2707
+ };
2708
+ if (since !== undefined) {
2709
+ request['startTime'] = since;
2710
+ // request['endTime'] = this.sum (since, 7776000000);
2711
+ }
2712
+ if (limit !== undefined) {
2713
+ request['limit'] = limit;
2714
+ }
2715
+ const response = await this.spotV1PrivateGetWithdrawHistory(this.extend(request, params));
2716
+ //
2717
+ // {
2718
+ // "code": 200,
2719
+ // "msg": "succ",
2720
+ // "data": [
2721
+ // {
2722
+ // "id": 183745,
2723
+ // "symbol": "usdt_erc20",
2724
+ // "amount": "8.4000000000000000",
2725
+ // "fee": "1.6000000000000000",
2726
+ // "payAmount": "0.0000000000000000",
2727
+ // "createdAt": 1595336441000,
2728
+ // "updatedAt": 1595336576000,
2729
+ // "addressFrom": "",
2730
+ // "addressTo": "0x2edfae3878d7b6db70ce4abed177ab2636f60c83",
2731
+ // "txid": "",
2732
+ // "confirmations": 0,
2733
+ // "status": 6,
2734
+ // "tagType": null
2735
+ // }
2736
+ // ]
2737
+ // }
2738
+ //
2739
+ const data = this.safeList(response, 'data', []);
2740
+ return this.parseTransactions(data, currency);
2741
+ }
2742
+ parseTransactionStatusByType(status, type = undefined) {
2743
+ const statusesByType = {
2744
+ 'deposit': {
2745
+ '0': 'pending',
2746
+ '1': 'ok',
2747
+ },
2748
+ 'withdrawal': {
2749
+ '0': 'pending',
2750
+ '5': 'ok',
2751
+ '6': 'canceled',
2752
+ },
2753
+ };
2754
+ const statuses = this.safeDict(statusesByType, type, {});
2755
+ return this.safeString(statuses, status, status);
2756
+ }
2757
+ parseTransaction(transaction, currency = undefined) {
2758
+ //
2759
+ // fetchDeposits
2760
+ //
2761
+ // {
2762
+ // "symbol": "XRP",
2763
+ // "amount": "261.3361000000000000",
2764
+ // "fee": "0.0E-15",
2765
+ // "createdAt": 1548816979000,
2766
+ // "updatedAt": 1548816999000,
2767
+ // "addressFrom": "",
2768
+ // "addressTo": "raLPjTYeGezfdb6crXZzcC8RkLBEwbBHJ5_18113641",
2769
+ // "txid": "86D6EB68A7A28938BCE06BD348F8C07DEF500C5F7FE92069EF8C0551CE0F2C7D",
2770
+ // "confirmations": 8,
2771
+ // "status": 1,
2772
+ // "tagType": "Tag"
2773
+ // },
2774
+ // {
2775
+ // "symbol": "XRP",
2776
+ // "amount": "20.0000000000000000",
2777
+ // "fee": "0.0E-15",
2778
+ // "createdAt": 1544669393000,
2779
+ // "updatedAt": 1544669413000,
2780
+ // "addressFrom": "",
2781
+ // "addressTo": "raLPjTYeGezfdb6crXZzcC8RkLBEwbBHJ5_18113641",
2782
+ // "txid": "515B23E1F9864D3AF7F5B4C4FCBED784BAE861854FAB95F4031922B6AAEFC7AC",
2783
+ // "confirmations": 7,
2784
+ // "status": 1,
2785
+ // "tagType": "Tag"
2786
+ // }
2787
+ //
2788
+ // fetchWithdrawals
2789
+ //
2790
+ // {
2791
+ // "id": 183745,
2792
+ // "symbol": "usdt_erc20",
2793
+ // "amount": "8.4000000000000000",
2794
+ // "fee": "1.6000000000000000",
2795
+ // "payAmount": "0.0000000000000000",
2796
+ // "createdAt": 1595336441000,
2797
+ // "updatedAt": 1595336576000,
2798
+ // "addressFrom": "",
2799
+ // "addressTo": "0x2edfae3878d7b6db70ce4abed177ab2636f60c83",
2800
+ // "txid": "",
2801
+ // "confirmations": 0,
2802
+ // "status": 6,
2803
+ // "tagType": null
2804
+ // }
2805
+ //
2806
+ // withdraw
2807
+ //
2808
+ // {
2809
+ // "msg": null,
2810
+ // "amount": 1000,
2811
+ // "fee": 1,
2812
+ // "ctime": null,
2813
+ // "coin": "usdt_erc20",
2814
+ // "withdrawId": 1156423,
2815
+ // "addressTo": "0x2edfae3878d7b6db70ce4abed177ab2636f60c83"
2816
+ // }
2817
+ //
2818
+ const id = this.safeString2(transaction, 'id', 'withdrawId');
2819
+ const tagType = this.safeString(transaction, 'tagType');
2820
+ let addressTo = this.safeString(transaction, 'addressTo');
2821
+ let addressFrom = this.safeString(transaction, 'addressFrom');
2822
+ let tagTo = undefined;
2823
+ let tagFrom = undefined;
2824
+ if (tagType !== undefined) {
2825
+ if (addressTo !== undefined) {
2826
+ const parts = addressTo.split('_');
2827
+ addressTo = this.safeString(parts, 0);
2828
+ tagTo = this.safeString(parts, 1);
2829
+ }
2830
+ if (addressFrom !== undefined) {
2831
+ const parts = addressFrom.split('_');
2832
+ addressFrom = this.safeString(parts, 0);
2833
+ tagFrom = this.safeString(parts, 1);
2834
+ }
2835
+ }
2836
+ const txid = this.safeString(transaction, 'txid');
2837
+ const timestamp = this.safeInteger(transaction, 'createdAt');
2838
+ const updated = this.safeInteger(transaction, 'updatedAt');
2839
+ const payAmount = ('payAmount' in transaction);
2840
+ const ctime = ('ctime' in transaction);
2841
+ const type = (payAmount || ctime) ? 'withdrawal' : 'deposit';
2842
+ const status = this.parseTransactionStatusByType(this.safeString(transaction, 'status'), type);
2843
+ const amount = this.safeNumber(transaction, 'amount');
2844
+ let network = undefined;
2845
+ let currencyId = this.safeString2(transaction, 'symbol', 'coin');
2846
+ if (currencyId !== undefined) {
2847
+ const parts = currencyId.split('_');
2848
+ currencyId = this.safeString(parts, 0);
2849
+ const networkId = this.safeString(parts, 1);
2850
+ if (networkId !== undefined) {
2851
+ network = networkId.toUpperCase();
2852
+ }
2853
+ }
2854
+ const code = this.safeCurrencyCode(currencyId, currency);
2855
+ const feeCost = this.safeNumber(transaction, 'fee');
2856
+ let fee = undefined;
2857
+ if (feeCost !== undefined) {
2858
+ fee = { 'currency': code, 'cost': feeCost };
2859
+ }
2860
+ return {
2861
+ 'info': transaction,
2862
+ 'id': id,
2863
+ 'txid': txid,
2864
+ 'timestamp': timestamp,
2865
+ 'datetime': this.iso8601(timestamp),
2866
+ 'network': network,
2867
+ 'address': addressTo,
2868
+ 'addressTo': addressTo,
2869
+ 'addressFrom': addressFrom,
2870
+ 'tag': tagTo,
2871
+ 'tagTo': tagTo,
2872
+ 'tagFrom': tagFrom,
2873
+ 'type': type,
2874
+ 'amount': amount,
2875
+ 'currency': code,
2876
+ 'status': status,
2877
+ 'updated': updated,
2878
+ 'internal': false,
2879
+ 'comment': undefined,
2880
+ 'fee': fee,
2881
+ };
2882
+ }
2883
+ /**
2884
+ * @method
2885
+ * @name bitrue#withdraw
2886
+ * @description make a withdrawal
2887
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#withdraw-commit--withdraw_data
2888
+ * @param {string} code unified currency code
2889
+ * @param {float} amount the amount to withdraw
2890
+ * @param {string} address the address to withdraw to
2891
+ * @param {string} tag
2892
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2893
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2894
+ */
2895
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2896
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
2897
+ this.checkAddress(address);
2898
+ await this.loadMarkets();
2899
+ const currency = this.currency(code);
2900
+ const request = {
2901
+ 'coin': currency['id'],
2902
+ 'amount': amount,
2903
+ 'addressTo': address,
2904
+ // 'chainName': chainName, // 'ERC20', 'TRC20', 'SOL'
2905
+ // 'addressMark': '', // mark of address
2906
+ // 'addrType': '', // type of address
2907
+ // 'tag': tag,
2908
+ };
2909
+ let networkCode = undefined;
2910
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
2911
+ if (networkCode !== undefined) {
2912
+ request['chainName'] = this.networkCodeToId(networkCode);
2913
+ }
2914
+ if (tag !== undefined) {
2915
+ request['tag'] = tag;
2916
+ }
2917
+ const response = await this.spotV1PrivatePostWithdrawCommit(this.extend(request, params));
2918
+ //
2919
+ // {
2920
+ // "code": 200,
2921
+ // "msg": "succ",
2922
+ // "data": {
2923
+ // "msg": null,
2924
+ // "amount": 1000,
2925
+ // "fee": 1,
2926
+ // "ctime": null,
2927
+ // "coin": "usdt_erc20",
2928
+ // "withdrawId": 1156423,
2929
+ // "addressTo": "0x2edfae3878d7b6db70ce4abed177ab2636f60c83"
2930
+ // }
2931
+ // }
2932
+ //
2933
+ const data = this.safeDict(response, 'data', {});
2934
+ return this.parseTransaction(data, currency);
2935
+ }
2936
+ parseDepositWithdrawFee(fee, currency = undefined) {
2937
+ //
2938
+ // {
2939
+ // "coin": "adx",
2940
+ // "coinFulName": "Ambire AdEx",
2941
+ // "chains": [ "BSC" ],
2942
+ // "chainDetail": [ [Object] ]
2943
+ // }
2944
+ //
2945
+ const chainDetails = this.safeList(fee, 'chainDetail', []);
2946
+ const chainDetailLength = chainDetails.length;
2947
+ const result = {
2948
+ 'info': fee,
2949
+ 'withdraw': {
2950
+ 'fee': undefined,
2951
+ 'percentage': undefined,
2952
+ },
2953
+ 'deposit': {
2954
+ 'fee': undefined,
2955
+ 'percentage': undefined,
2956
+ },
2957
+ 'networks': {},
2958
+ };
2959
+ if (chainDetailLength !== 0) {
2960
+ for (let i = 0; i < chainDetailLength; i++) {
2961
+ const chainDetail = chainDetails[i];
2962
+ const networkId = this.safeString(chainDetail, 'chain');
2963
+ const currencyCode = this.safeString(currency, 'code');
2964
+ const networkCode = this.networkIdToCode(networkId, currencyCode);
2965
+ result['networks'][networkCode] = {
2966
+ 'deposit': { 'fee': undefined, 'percentage': undefined },
2967
+ 'withdraw': { 'fee': this.safeNumber(chainDetail, 'withdrawFee'), 'percentage': false },
2968
+ };
2969
+ if (chainDetailLength === 1) {
2970
+ result['withdraw']['fee'] = this.safeNumber(chainDetail, 'withdrawFee');
2971
+ result['withdraw']['percentage'] = false;
2972
+ }
2973
+ }
2974
+ }
2975
+ return result;
2976
+ }
2977
+ /**
2978
+ * @method
2979
+ * @name bitrue#fetchDepositWithdrawFees
2980
+ * @description fetch deposit and withdraw fees
2981
+ * @see https://github.com/Bitrue-exchange/Spot-official-api-docs#exchangeInfo_endpoint
2982
+ * @param {string[]|undefined} codes list of unified currency codes
2983
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2984
+ * @returns {object} a list of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
2985
+ */
2986
+ async fetchDepositWithdrawFees(codes = undefined, params = {}) {
2987
+ await this.loadMarkets();
2988
+ const response = await this.spotV1PublicGetExchangeInfo(params);
2989
+ const coins = this.safeList(response, 'coins');
2990
+ return this.parseDepositWithdrawFees(coins, codes, 'coin');
2991
+ }
2992
+ parseTransfer(transfer, currency = undefined) {
2993
+ //
2994
+ // fetchTransfers
2995
+ //
2996
+ // {
2997
+ // 'transferType': 'wallet_to_contract',
2998
+ // 'symbol': 'USDT',
2999
+ // 'amount': 1.0,
3000
+ // 'status': 1,
3001
+ // 'ctime': 1685404575000
3002
+ // }
3003
+ //
3004
+ // transfer
3005
+ //
3006
+ // {}
3007
+ //
3008
+ const transferType = this.safeString(transfer, 'transferType');
3009
+ let fromAccount = undefined;
3010
+ let toAccount = undefined;
3011
+ if (transferType !== undefined) {
3012
+ const accountSplit = transferType.split('_to_');
3013
+ fromAccount = this.safeString(accountSplit, 0);
3014
+ toAccount = this.safeString(accountSplit, 1);
3015
+ }
3016
+ const timestamp = this.safeInteger(transfer, 'ctime');
3017
+ return {
3018
+ 'info': transfer,
3019
+ 'id': undefined,
3020
+ 'timestamp': timestamp,
3021
+ 'datetime': this.iso8601(timestamp),
3022
+ 'currency': this.safeString(currency, 'code'),
3023
+ 'amount': this.safeNumber(transfer, 'amount'),
3024
+ 'fromAccount': fromAccount,
3025
+ 'toAccount': toAccount,
3026
+ 'status': 'ok',
3027
+ };
3028
+ }
3029
+ /**
3030
+ * @method
3031
+ * @name bitrue#fetchTransfers
3032
+ * @description fetch a history of internal transfers made on an account
3033
+ * @see https://www.bitrue.com/api-docs#get-future-account-transfer-history-list-user_data-hmac-sha256
3034
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#get-future-account-transfer-history-list-user_data-hmac-sha256
3035
+ * @param {string} code unified currency code of the currency transferred
3036
+ * @param {int} [since] the earliest time in ms to fetch transfers for
3037
+ * @param {int} [limit] the maximum number of transfers structures to retrieve
3038
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3039
+ * @param {int} [params.until] the latest time in ms to fetch transfers for
3040
+ * @param {string} [params.type] transfer type wallet_to_contract or contract_to_wallet
3041
+ * @returns {object[]} a list of [transfer structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#transfer-structure}
3042
+ */
3043
+ async fetchTransfers(code = undefined, since = undefined, limit = undefined, params = {}) {
3044
+ await this.loadMarkets();
3045
+ const type = this.safeString2(params, 'type', 'transferType');
3046
+ const request = {
3047
+ 'transferType': type,
3048
+ };
3049
+ let currency = undefined;
3050
+ if (code !== undefined) {
3051
+ currency = this.currency(code);
3052
+ request['coinSymbol'] = currency['id'];
3053
+ }
3054
+ if (since !== undefined) {
3055
+ request['beginTime'] = since;
3056
+ }
3057
+ if (limit !== undefined) {
3058
+ if (limit > 200) {
3059
+ limit = 200;
3060
+ }
3061
+ request['limit'] = limit;
3062
+ }
3063
+ const until = this.safeInteger(params, 'until');
3064
+ if (until !== undefined) {
3065
+ params = this.omit(params, 'until');
3066
+ request['endTime'] = until;
3067
+ }
3068
+ const response = await this.fapiV2PrivateGetFuturesTransferHistory(this.extend(request, params));
3069
+ //
3070
+ // {
3071
+ // 'code': '0',
3072
+ // 'msg': 'Success',
3073
+ // 'data': [{
3074
+ // 'transferType': 'wallet_to_contract',
3075
+ // 'symbol': 'USDT',
3076
+ // 'amount': 1.0,
3077
+ // 'status': 1,
3078
+ // 'ctime': 1685404575000
3079
+ // }]
3080
+ // }
3081
+ //
3082
+ const data = this.safeList(response, 'data', []);
3083
+ return this.parseTransfers(data, currency, since, limit);
3084
+ }
3085
+ /**
3086
+ * @method
3087
+ * @name bitrue#transfer
3088
+ * @description transfer currency internally between wallets on the same account
3089
+ * @see https://www.bitrue.com/api-docs#new-future-account-transfer-user_data-hmac-sha256
3090
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#user-commission-rate-user_data-hmac-sha256
3091
+ * @param {string} code unified currency code
3092
+ * @param {float} amount amount to transfer
3093
+ * @param {string} fromAccount account to transfer from
3094
+ * @param {string} toAccount account to transfer to
3095
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3096
+ * @returns {object} a [transfer structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#transfer-structure}
3097
+ */
3098
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
3099
+ await this.loadMarkets();
3100
+ const currency = this.currency(code);
3101
+ const accountTypes = this.safeDict(this.options, 'accountsByType', {});
3102
+ const fromId = this.safeString(accountTypes, fromAccount, fromAccount);
3103
+ const toId = this.safeString(accountTypes, toAccount, toAccount);
3104
+ const request = {
3105
+ 'coinSymbol': currency['id'],
3106
+ 'amount': this.currencyToPrecision(code, amount),
3107
+ 'transferType': fromId + '_to_' + toId,
3108
+ };
3109
+ const response = await this.fapiV2PrivatePostFuturesTransfer(this.extend(request, params));
3110
+ //
3111
+ // {
3112
+ // 'code': '0',
3113
+ // 'msg': 'Success',
3114
+ // 'data': null
3115
+ // }
3116
+ //
3117
+ const data = this.safeDict(response, 'data', {});
3118
+ return this.parseTransfer(data, currency);
3119
+ }
3120
+ /**
3121
+ * @method
3122
+ * @name bitrue#setLeverage
3123
+ * @description set the level of leverage for a market
3124
+ * @see https://www.bitrue.com/api-docs#change-initial-leverage-trade-hmac-sha256
3125
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#change-initial-leverage-trade-hmac-sha256
3126
+ * @param {float} leverage the rate of leverage
3127
+ * @param {string} symbol unified market symbol
3128
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3129
+ * @returns {object} response from the exchange
3130
+ */
3131
+ async setLeverage(leverage, symbol = undefined, params = {}) {
3132
+ if (symbol === undefined) {
3133
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
3134
+ }
3135
+ if ((leverage < 1) || (leverage > 125)) {
3136
+ throw new BadRequest(this.id + ' leverage should be between 1 and 125');
3137
+ }
3138
+ await this.loadMarkets();
3139
+ const market = this.market(symbol);
3140
+ let response = undefined;
3141
+ const request = {
3142
+ 'contractName': market['id'],
3143
+ 'leverage': leverage,
3144
+ };
3145
+ if (!market['swap']) {
3146
+ throw new NotSupported(this.id + ' setLeverage only support swap markets');
3147
+ }
3148
+ if (market['linear']) {
3149
+ response = await this.fapiV2PrivatePostLevelEdit(this.extend(request, params));
3150
+ }
3151
+ else if (market['inverse']) {
3152
+ response = await this.dapiV2PrivatePostLevelEdit(this.extend(request, params));
3153
+ }
3154
+ return response;
3155
+ }
3156
+ parseMarginModification(data, market = undefined) {
3157
+ //
3158
+ // setMargin
3159
+ //
3160
+ // {
3161
+ // "code": 0,
3162
+ // "msg": "success"
3163
+ // "data": null
3164
+ // }
3165
+ //
3166
+ return {
3167
+ 'info': data,
3168
+ 'symbol': market['symbol'],
3169
+ 'type': undefined,
3170
+ 'marginMode': 'isolated',
3171
+ 'amount': undefined,
3172
+ 'total': undefined,
3173
+ 'code': undefined,
3174
+ 'status': undefined,
3175
+ 'timestamp': undefined,
3176
+ 'datetime': undefined,
3177
+ };
3178
+ }
3179
+ /**
3180
+ * @method
3181
+ * @name bitrue#setMargin
3182
+ * @description Either adds or reduces margin in an isolated position in order to set the margin to a specific value
3183
+ * @see https://www.bitrue.com/api-docs#modify-isolated-position-margin-trade-hmac-sha256
3184
+ * @see https://www.bitrue.com/api_docs_includes_file/delivery.html#modify-isolated-position-margin-trade-hmac-sha256
3185
+ * @param {string} symbol unified market symbol of the market to set margin in
3186
+ * @param {float} amount the amount to set the margin to
3187
+ * @param {object} [params] parameters specific to the exchange API endpoint
3188
+ * @returns {object} A [margin structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#add-margin-structure}
3189
+ */
3190
+ async setMargin(symbol, amount, params = {}) {
3191
+ await this.loadMarkets();
3192
+ const market = this.market(symbol);
3193
+ if (!market['swap']) {
3194
+ throw new NotSupported(this.id + ' setMargin only support swap markets');
3195
+ }
3196
+ let response = undefined;
3197
+ const request = {
3198
+ 'contractName': market['id'],
3199
+ 'amount': this.parseToNumeric(amount),
3200
+ };
3201
+ if (market['linear']) {
3202
+ response = await this.fapiV2PrivatePostPositionMargin(this.extend(request, params));
3203
+ }
3204
+ else if (market['inverse']) {
3205
+ response = await this.dapiV2PrivatePostPositionMargin(this.extend(request, params));
3206
+ }
3207
+ //
3208
+ // {
3209
+ // "code": 0,
3210
+ // "msg": "success"
3211
+ // "data": null
3212
+ // }
3213
+ //
3214
+ return this.parseMarginModification(response, market);
3215
+ }
3216
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
3217
+ const type = this.safeString(api, 0);
3218
+ const version = this.safeString(api, 1);
3219
+ const access = this.safeString(api, 2);
3220
+ let url = undefined;
3221
+ if ((type === 'api' && version === 'kline') || (type === 'open' && path.indexOf('listenKey') >= 0)) {
3222
+ url = this.urls['api'][type];
3223
+ }
3224
+ else {
3225
+ url = this.urls['api'][type] + '/' + version;
3226
+ }
3227
+ url = url + '/' + this.implodeParams(path, params);
3228
+ params = this.omit(params, this.extractParams(path));
3229
+ if (access === 'private') {
3230
+ this.checkRequiredCredentials();
3231
+ const recvWindow = this.safeInteger(this.options, 'recvWindow', 5000);
3232
+ if (type === 'spot' || type === 'open') {
3233
+ let query = this.urlencode(this.extend({
3234
+ 'timestamp': this.nonce(),
3235
+ 'recvWindow': recvWindow,
3236
+ }, params));
3237
+ const signature = this.hmac(this.encode(query), this.encode(this.secret), sha256);
3238
+ query += '&' + 'signature=' + signature;
3239
+ headers = {
3240
+ 'X-MBX-APIKEY': this.apiKey,
3241
+ };
3242
+ if ((method === 'GET') || (method === 'DELETE')) {
3243
+ url += '?' + query;
3244
+ }
3245
+ else {
3246
+ body = query;
3247
+ headers['Content-Type'] = 'application/x-www-form-urlencoded';
3248
+ }
3249
+ }
3250
+ else {
3251
+ const timestamp = this.nonce().toString();
3252
+ let signPath = undefined;
3253
+ if (type === 'fapi') {
3254
+ signPath = '/fapi';
3255
+ }
3256
+ else if (type === 'dapi') {
3257
+ signPath = '/dapi';
3258
+ }
3259
+ signPath = signPath + '/' + version + '/' + path;
3260
+ let signMessage = timestamp + method + signPath;
3261
+ if (method === 'GET') {
3262
+ const keys = Object.keys(params);
3263
+ const keysLength = keys.length;
3264
+ if (keysLength > 0) {
3265
+ signMessage += '?' + this.urlencode(params);
3266
+ }
3267
+ const signature = this.hmac(this.encode(signMessage), this.encode(this.secret), sha256);
3268
+ headers = {
3269
+ 'X-CH-APIKEY': this.apiKey,
3270
+ 'X-CH-SIGN': signature,
3271
+ 'X-CH-TS': timestamp,
3272
+ };
3273
+ url += '?' + this.urlencode(params);
3274
+ }
3275
+ else {
3276
+ const query = this.extend({
3277
+ 'recvWindow': recvWindow,
3278
+ }, params);
3279
+ body = this.json(query);
3280
+ signMessage += body;
3281
+ const signature = this.hmac(this.encode(signMessage), this.encode(this.secret), sha256);
3282
+ headers = {
3283
+ 'Content-Type': 'application/json',
3284
+ 'X-CH-APIKEY': this.apiKey,
3285
+ 'X-CH-SIGN': signature,
3286
+ 'X-CH-TS': timestamp,
3287
+ };
3288
+ }
3289
+ }
3290
+ }
3291
+ else {
3292
+ if (Object.keys(params).length) {
3293
+ url += '?' + this.urlencode(params);
3294
+ }
3295
+ }
3296
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
3297
+ }
3298
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
3299
+ if ((code === 418) || (code === 429)) {
3300
+ throw new DDoSProtection(this.id + ' ' + code.toString() + ' ' + reason + ' ' + body);
3301
+ }
3302
+ // error response in a form: { "code": -1013, "msg": "Invalid quantity." }
3303
+ // following block cointains legacy checks against message patterns in "msg" property
3304
+ // will switch "code" checks eventually, when we know all of them
3305
+ if (code >= 400) {
3306
+ if (body.indexOf('Price * QTY is zero or less') >= 0) {
3307
+ throw new InvalidOrder(this.id + ' order cost = amount * price is zero or less ' + body);
3308
+ }
3309
+ if (body.indexOf('LOT_SIZE') >= 0) {
3310
+ throw new InvalidOrder(this.id + ' order amount should be evenly divisible by lot size ' + body);
3311
+ }
3312
+ if (body.indexOf('PRICE_FILTER') >= 0) {
3313
+ throw new InvalidOrder(this.id + ' order price is invalid, i.e. exceeds allowed price precision, exceeds min price or max price limits or is invalid float value in general, use this.priceToPrecision (symbol, amount) ' + body);
3314
+ }
3315
+ }
3316
+ if (response === undefined) {
3317
+ return undefined; // fallback to default error handler
3318
+ }
3319
+ // check success value for wapi endpoints
3320
+ // response in format {'msg': 'The coin does not exist.', 'success': true/false}
3321
+ const success = this.safeBool(response, 'success', true);
3322
+ if (!success) {
3323
+ const messageInner = this.safeString(response, 'msg');
3324
+ let parsedMessage = undefined;
3325
+ if (messageInner !== undefined) {
3326
+ try {
3327
+ parsedMessage = JSON.parse(messageInner);
3328
+ }
3329
+ catch (e) {
3330
+ // do nothing
3331
+ parsedMessage = undefined;
3332
+ }
3333
+ if (parsedMessage !== undefined) {
3334
+ response = parsedMessage;
3335
+ }
3336
+ }
3337
+ }
3338
+ const message = this.safeString(response, 'msg');
3339
+ if (message !== undefined) {
3340
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, this.id + ' ' + message);
3341
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, this.id + ' ' + message);
3342
+ }
3343
+ // checks against error codes
3344
+ const error = this.safeString(response, 'code');
3345
+ if (error !== undefined) {
3346
+ // https://github.com/ccxt/ccxt/issues/6501
3347
+ // https://github.com/ccxt/ccxt/issues/7742
3348
+ if ((error === '200') || Precise.stringEquals(error, '0')) {
3349
+ return undefined;
3350
+ }
3351
+ // a workaround for {"code":-2015,"msg":"Invalid API-key, IP, or permissions for action."}
3352
+ // despite that their message is very confusing, it is raised by Binance
3353
+ // on a temporary ban, the API key is valid, but disabled for a while
3354
+ if ((error === '-2015') && this.options['hasAlreadyAuthenticatedSuccessfully']) {
3355
+ throw new DDoSProtection(this.id + ' temporary banned: ' + body);
3356
+ }
3357
+ const feedback = this.id + ' ' + body;
3358
+ this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
3359
+ throw new ExchangeError(feedback);
3360
+ }
3361
+ if (!success) {
3362
+ throw new ExchangeError(this.id + ' ' + body);
3363
+ }
3364
+ return undefined;
3365
+ }
3366
+ calculateRateLimiterCost(api, method, path, params, config = {}) {
3367
+ if (('noSymbol' in config) && !('symbol' in params)) {
3368
+ return config['noSymbol'];
3369
+ }
3370
+ else if (('byLimit' in config) && ('limit' in params)) {
3371
+ const limit = params['limit'];
3372
+ const byLimit = config['byLimit'];
3373
+ for (let i = 0; i < byLimit.length; i++) {
3374
+ const entry = byLimit[i];
3375
+ if (limit <= entry[0]) {
3376
+ return entry[1];
3377
+ }
3378
+ }
3379
+ }
3380
+ return this.safeValue(config, 'cost', 1);
3381
+ }
3382
+ }