ccxt-ir 4.9.32 → 4.11.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 +7 -1
  4. package/dist/cjs/package.json +1 -1
  5. package/dist/cjs/src/abstract/asretether.js +11 -0
  6. package/dist/cjs/src/abstract/bidarz.js +11 -0
  7. package/dist/cjs/src/asretether.js +325 -0
  8. package/dist/cjs/src/bidarz.js +337 -0
  9. package/dist/cjs/src/bit24.js +4 -3
  10. package/dist/cjs/src/raastin.js +144 -16
  11. package/js/ccxt.d.ts +8 -2
  12. package/js/ccxt.js +6 -2
  13. package/js/src/abstract/asretether.d.ts +8 -0
  14. package/js/src/abstract/asretether.js +11 -0
  15. package/js/src/abstract/bidarz.d.ts +9 -0
  16. package/js/src/abstract/bidarz.js +11 -0
  17. package/js/src/abstract/raastin.d.ts +1 -0
  18. package/js/src/asretether.d.ts +21 -0
  19. package/js/src/asretether.js +324 -0
  20. package/js/src/bidarz.d.ts +22 -0
  21. package/js/src/bidarz.js +336 -0
  22. package/js/src/bit24.js +4 -3
  23. package/js/src/raastin.d.ts +2 -0
  24. package/js/src/raastin.js +144 -16
  25. package/js/src/src/abantether.d.ts +21 -0
  26. package/js/src/src/abantether.js +353 -0
  27. package/js/src/src/abstract/abantether.d.ts +8 -0
  28. package/js/src/src/abstract/abantether.js +11 -0
  29. package/js/src/src/abstract/afratether.d.ts +9 -0
  30. package/js/src/src/abstract/afratether.js +11 -0
  31. package/js/src/src/abstract/alpaca.d.ts +77 -0
  32. package/js/src/src/abstract/alpaca.js +11 -0
  33. package/js/src/src/abstract/apex.d.ts +34 -0
  34. package/js/src/src/abstract/apex.js +11 -0
  35. package/js/src/src/abstract/arzinja.d.ts +8 -0
  36. package/js/src/src/abstract/arzinja.js +11 -0
  37. package/js/src/src/abstract/arzplus.d.ts +11 -0
  38. package/js/src/src/abstract/arzplus.js +11 -0
  39. package/js/src/src/abstract/ascendex.d.ts +80 -0
  40. package/js/src/src/abstract/ascendex.js +11 -0
  41. package/js/src/src/abstract/asretether.d.ts +8 -0
  42. package/js/src/src/abstract/asretether.js +11 -0
  43. package/js/src/src/abstract/bidarz.d.ts +9 -0
  44. package/js/src/src/abstract/bidarz.js +11 -0
  45. package/js/src/src/abstract/bigone.d.ts +48 -0
  46. package/js/src/src/abstract/bigone.js +11 -0
  47. package/js/src/src/abstract/binance.d.ts +773 -0
  48. package/js/src/src/abstract/binance.js +11 -0
  49. package/js/src/src/abstract/bingx.d.ts +165 -0
  50. package/js/src/src/abstract/bingx.js +11 -0
  51. package/js/src/src/abstract/bit24.d.ts +9 -0
  52. package/js/src/src/abstract/bit24.js +11 -0
  53. package/js/src/src/abstract/bit2c.d.ts +30 -0
  54. package/js/src/src/abstract/bit2c.js +11 -0
  55. package/js/src/src/abstract/bitbank.d.ts +35 -0
  56. package/js/src/src/abstract/bitbank.js +11 -0
  57. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  58. package/js/src/src/abstract/bitbarg.js +11 -0
  59. package/js/src/src/abstract/bitbns.d.ts +43 -0
  60. package/js/src/src/abstract/bitbns.js +11 -0
  61. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  62. package/js/src/src/abstract/bitfinex.js +11 -0
  63. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  64. package/js/src/src/abstract/bitflyer.js +11 -0
  65. package/js/src/src/abstract/bitget.d.ts +578 -0
  66. package/js/src/src/abstract/bitget.js +11 -0
  67. package/js/src/src/abstract/bithumb.d.ts +35 -0
  68. package/js/src/src/abstract/bithumb.js +11 -0
  69. package/js/src/src/abstract/bitimen.d.ts +10 -0
  70. package/js/src/src/abstract/bitimen.js +11 -0
  71. package/js/src/src/abstract/bitir.d.ts +10 -0
  72. package/js/src/src/abstract/bitir.js +11 -0
  73. package/js/src/src/abstract/bitmart.d.ts +120 -0
  74. package/js/src/src/abstract/bitmart.js +11 -0
  75. package/js/src/src/abstract/bitmex.d.ts +100 -0
  76. package/js/src/src/abstract/bitmex.js +11 -0
  77. package/js/src/src/abstract/bitopro.d.ts +33 -0
  78. package/js/src/src/abstract/bitopro.js +11 -0
  79. package/js/src/src/abstract/bitpin.d.ts +11 -0
  80. package/js/src/src/abstract/bitpin.js +11 -0
  81. package/js/src/src/abstract/bitrue.d.ts +75 -0
  82. package/js/src/src/abstract/bitrue.js +11 -0
  83. package/js/src/src/abstract/bitso.d.ts +46 -0
  84. package/js/src/src/abstract/bitso.js +11 -0
  85. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  86. package/js/src/src/abstract/bitstamp.js +11 -0
  87. package/js/src/src/abstract/bitteam.d.ts +32 -0
  88. package/js/src/src/abstract/bitteam.js +11 -0
  89. package/js/src/src/abstract/bittrade.d.ts +117 -0
  90. package/js/src/src/abstract/bittrade.js +11 -0
  91. package/js/src/src/abstract/bitunix.d.ts +9 -0
  92. package/js/src/src/abstract/bitunix.js +11 -0
  93. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  94. package/js/src/src/abstract/bitvavo.js +11 -0
  95. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  96. package/js/src/src/abstract/blockchaincom.js +11 -0
  97. package/js/src/src/abstract/blofin.d.ts +70 -0
  98. package/js/src/src/abstract/blofin.js +11 -0
  99. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  100. package/js/src/src/abstract/btcalpha.js +11 -0
  101. package/js/src/src/abstract/btcbox.d.ts +18 -0
  102. package/js/src/src/abstract/btcbox.js +11 -0
  103. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  104. package/js/src/src/abstract/btcmarkets.js +11 -0
  105. package/js/src/src/abstract/btcturk.d.ts +23 -0
  106. package/js/src/src/abstract/btcturk.js +11 -0
  107. package/js/src/src/abstract/bybit.d.ts +316 -0
  108. package/js/src/src/abstract/bybit.js +11 -0
  109. package/js/src/src/abstract/bydfi.d.ts +11 -0
  110. package/js/src/src/abstract/bydfi.js +11 -0
  111. package/js/src/src/abstract/cafearz.d.ts +8 -0
  112. package/js/src/src/abstract/cafearz.js +11 -0
  113. package/js/src/src/abstract/cex.d.ts +35 -0
  114. package/js/src/src/abstract/cex.js +11 -0
  115. package/js/src/src/abstract/coinbase.d.ts +97 -0
  116. package/js/src/src/abstract/coinbase.js +11 -0
  117. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  118. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  119. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  120. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  121. package/js/src/src/abstract/coincatch.d.ts +97 -0
  122. package/js/src/src/abstract/coincatch.js +11 -0
  123. package/js/src/src/abstract/coincheck.d.ts +36 -0
  124. package/js/src/src/abstract/coincheck.js +11 -0
  125. package/js/src/src/abstract/coinex.d.ts +240 -0
  126. package/js/src/src/abstract/coinex.js +11 -0
  127. package/js/src/src/abstract/coinmate.d.ts +65 -0
  128. package/js/src/src/abstract/coinmate.js +11 -0
  129. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  130. package/js/src/src/abstract/coinmetro.js +11 -0
  131. package/js/src/src/abstract/coinone.d.ts +70 -0
  132. package/js/src/src/abstract/coinone.js +11 -0
  133. package/js/src/src/abstract/coinsph.d.ts +57 -0
  134. package/js/src/src/abstract/coinsph.js +11 -0
  135. package/js/src/src/abstract/coinspot.d.ts +31 -0
  136. package/js/src/src/abstract/coinspot.js +11 -0
  137. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  138. package/js/src/src/abstract/cryptocom.js +11 -0
  139. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  140. package/js/src/src/abstract/cryptomus.js +11 -0
  141. package/js/src/src/abstract/defx.d.ts +72 -0
  142. package/js/src/src/abstract/defx.js +11 -0
  143. package/js/src/src/abstract/delta.d.ts +53 -0
  144. package/js/src/src/abstract/delta.js +11 -0
  145. package/js/src/src/abstract/deribit.d.ts +129 -0
  146. package/js/src/src/abstract/deribit.js +11 -0
  147. package/js/src/src/abstract/derive.d.ts +120 -0
  148. package/js/src/src/abstract/derive.js +11 -0
  149. package/js/src/src/abstract/digifinex.d.ts +95 -0
  150. package/js/src/src/abstract/digifinex.js +11 -0
  151. package/js/src/src/abstract/ellipx.d.ts +28 -0
  152. package/js/src/src/abstract/ellipx.js +11 -0
  153. package/js/src/src/abstract/eterex.d.ts +8 -0
  154. package/js/src/src/abstract/eterex.js +11 -0
  155. package/js/src/src/abstract/excoino.d.ts +10 -0
  156. package/js/src/src/abstract/excoino.js +11 -0
  157. package/js/src/src/abstract/exir.d.ts +11 -0
  158. package/js/src/src/abstract/exir.js +11 -0
  159. package/js/src/src/abstract/exmo.d.ts +58 -0
  160. package/js/src/src/abstract/exmo.js +11 -0
  161. package/js/src/src/abstract/exnovin.d.ts +9 -0
  162. package/js/src/src/abstract/exnovin.js +11 -0
  163. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  164. package/js/src/src/abstract/farhadexchange.js +11 -0
  165. package/js/src/src/abstract/foxbit.d.ts +29 -0
  166. package/js/src/src/abstract/foxbit.js +11 -0
  167. package/js/src/src/abstract/gate.d.ts +287 -0
  168. package/js/src/src/abstract/gate.js +11 -0
  169. package/js/src/src/abstract/gemini.d.ts +62 -0
  170. package/js/src/src/abstract/gemini.js +11 -0
  171. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  172. package/js/src/src/abstract/hamtapay.js +11 -0
  173. package/js/src/src/abstract/hashkey.d.ts +70 -0
  174. package/js/src/src/abstract/hashkey.js +11 -0
  175. package/js/src/src/abstract/hibachi.d.ts +29 -0
  176. package/js/src/src/abstract/hibachi.js +11 -0
  177. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  178. package/js/src/src/abstract/hitbtc.js +11 -0
  179. package/js/src/src/abstract/hitobit.d.ts +11 -0
  180. package/js/src/src/abstract/hitobit.js +11 -0
  181. package/js/src/src/abstract/hollaex.d.ts +36 -0
  182. package/js/src/src/abstract/hollaex.js +11 -0
  183. package/js/src/src/abstract/htx.d.ts +551 -0
  184. package/js/src/src/abstract/htx.js +11 -0
  185. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  186. package/js/src/src/abstract/hyperliquid.js +11 -0
  187. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  188. package/js/src/src/abstract/independentreserve.js +11 -0
  189. package/js/src/src/abstract/indodax.d.ts +29 -0
  190. package/js/src/src/abstract/indodax.js +11 -0
  191. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  192. package/js/src/src/abstract/iranexchange.js +11 -0
  193. package/js/src/src/abstract/jibitex.d.ts +10 -0
  194. package/js/src/src/abstract/jibitex.js +11 -0
  195. package/js/src/src/abstract/kcex.d.ts +10 -0
  196. package/js/src/src/abstract/kcex.js +11 -0
  197. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  198. package/js/src/src/abstract/kifpoolme.js +11 -0
  199. package/js/src/src/abstract/kraken.d.ts +61 -0
  200. package/js/src/src/abstract/kraken.js +11 -0
  201. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  202. package/js/src/src/abstract/krakenfutures.js +11 -0
  203. package/js/src/src/abstract/kucoin.d.ts +227 -0
  204. package/js/src/src/abstract/kucoin.js +11 -0
  205. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  206. package/js/src/src/abstract/kucoinfutures.js +11 -0
  207. package/js/src/src/abstract/latoken.d.ts +59 -0
  208. package/js/src/src/abstract/latoken.js +11 -0
  209. package/js/src/src/abstract/lbank.d.ts +65 -0
  210. package/js/src/src/abstract/lbank.js +11 -0
  211. package/js/src/src/abstract/luno.d.ts +41 -0
  212. package/js/src/src/abstract/luno.js +11 -0
  213. package/js/src/src/abstract/mazdax.d.ts +11 -0
  214. package/js/src/src/abstract/mazdax.js +11 -0
  215. package/js/src/src/abstract/mercado.d.ts +28 -0
  216. package/js/src/src/abstract/mercado.js +11 -0
  217. package/js/src/src/abstract/mexc.d.ts +183 -0
  218. package/js/src/src/abstract/mexc.js +11 -0
  219. package/js/src/src/abstract/modetrade.d.ts +122 -0
  220. package/js/src/src/abstract/modetrade.js +11 -0
  221. package/js/src/src/abstract/ndax.d.ts +100 -0
  222. package/js/src/src/abstract/ndax.js +11 -0
  223. package/js/src/src/abstract/nobitex.d.ts +10 -0
  224. package/js/src/src/abstract/nobitex.js +11 -0
  225. package/js/src/src/abstract/novadax.d.ts +32 -0
  226. package/js/src/src/abstract/novadax.js +11 -0
  227. package/js/src/src/abstract/oceanex.d.ts +30 -0
  228. package/js/src/src/abstract/oceanex.js +11 -0
  229. package/js/src/src/abstract/okcoin.d.ts +77 -0
  230. package/js/src/src/abstract/okcoin.js +11 -0
  231. package/js/src/src/abstract/okexchange.d.ts +11 -0
  232. package/js/src/src/abstract/okexchange.js +11 -0
  233. package/js/src/src/abstract/okx.d.ts +352 -0
  234. package/js/src/src/abstract/okx.js +11 -0
  235. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  236. package/js/src/src/abstract/ompfinex.js +11 -0
  237. package/js/src/src/abstract/onetrading.d.ts +26 -0
  238. package/js/src/src/abstract/onetrading.js +11 -0
  239. package/js/src/src/abstract/oxfun.d.ts +37 -0
  240. package/js/src/src/abstract/oxfun.js +11 -0
  241. package/js/src/src/abstract/p2b.d.ts +25 -0
  242. package/js/src/src/abstract/p2b.js +11 -0
  243. package/js/src/src/abstract/paradex.d.ts +66 -0
  244. package/js/src/src/abstract/paradex.js +11 -0
  245. package/js/src/src/abstract/paymium.d.ts +31 -0
  246. package/js/src/src/abstract/paymium.js +11 -0
  247. package/js/src/src/abstract/phemex.d.ts +120 -0
  248. package/js/src/src/abstract/phemex.js +11 -0
  249. package/js/src/src/abstract/pingi.d.ts +9 -0
  250. package/js/src/src/abstract/pingi.js +11 -0
  251. package/js/src/src/abstract/poloniex.d.ts +108 -0
  252. package/js/src/src/abstract/poloniex.js +11 -0
  253. package/js/src/src/abstract/pooleno.d.ts +8 -0
  254. package/js/src/src/abstract/pooleno.js +11 -0
  255. package/js/src/src/abstract/probit.d.ts +26 -0
  256. package/js/src/src/abstract/probit.js +11 -0
  257. package/js/src/src/abstract/raastin.d.ts +11 -0
  258. package/js/src/src/abstract/raastin.js +11 -0
  259. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  260. package/js/src/src/abstract/ramzinex.js +11 -0
  261. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  262. package/js/src/src/abstract/sarmayex.js +11 -0
  263. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  264. package/js/src/src/abstract/sarrafex.js +11 -0
  265. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  266. package/js/src/src/abstract/tabdeal.js +11 -0
  267. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  268. package/js/src/src/abstract/tehran_exchange.js +11 -0
  269. package/js/src/src/abstract/tetherland.d.ts +8 -0
  270. package/js/src/src/abstract/tetherland.js +11 -0
  271. package/js/src/src/abstract/timex.d.ts +65 -0
  272. package/js/src/src/abstract/timex.js +11 -0
  273. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  274. package/js/src/src/abstract/tokocrypto.js +11 -0
  275. package/js/src/src/abstract/toobit.d.ts +10 -0
  276. package/js/src/src/abstract/toobit.js +11 -0
  277. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  278. package/js/src/src/abstract/tradeogre.js +11 -0
  279. package/js/src/src/abstract/twox.d.ts +8 -0
  280. package/js/src/src/abstract/twox.js +11 -0
  281. package/js/src/src/abstract/ubitex.d.ts +10 -0
  282. package/js/src/src/abstract/ubitex.js +11 -0
  283. package/js/src/src/abstract/upbit.d.ts +58 -0
  284. package/js/src/src/abstract/upbit.js +11 -0
  285. package/js/src/src/abstract/vertex.d.ts +22 -0
  286. package/js/src/src/abstract/vertex.js +11 -0
  287. package/js/src/src/abstract/wallex.d.ts +11 -0
  288. package/js/src/src/abstract/wallex.js +11 -0
  289. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  290. package/js/src/src/abstract/wavesexchange.js +11 -0
  291. package/js/src/src/abstract/whitebit.d.ts +117 -0
  292. package/js/src/src/abstract/whitebit.js +11 -0
  293. package/js/src/src/abstract/woo.d.ts +144 -0
  294. package/js/src/src/abstract/woo.js +11 -0
  295. package/js/src/src/abstract/woofipro.d.ts +122 -0
  296. package/js/src/src/abstract/woofipro.js +11 -0
  297. package/js/src/src/abstract/xt.d.ts +160 -0
  298. package/js/src/src/abstract/xt.js +11 -0
  299. package/js/src/src/abstract/yobit.d.ts +19 -0
  300. package/js/src/src/abstract/yobit.js +11 -0
  301. package/js/src/src/abstract/zaif.d.ts +41 -0
  302. package/js/src/src/abstract/zaif.js +11 -0
  303. package/js/src/src/abstract/zonda.d.ts +56 -0
  304. package/js/src/src/abstract/zonda.js +11 -0
  305. package/js/src/src/afratether.d.ts +21 -0
  306. package/js/src/src/afratether.js +356 -0
  307. package/js/src/src/alpaca.d.ts +332 -0
  308. package/js/src/src/alpaca.js +1908 -0
  309. package/js/src/src/apex.d.ts +333 -0
  310. package/js/src/src/apex.js +1942 -0
  311. package/js/src/src/arzinja.d.ts +21 -0
  312. package/js/src/src/arzinja.js +298 -0
  313. package/js/src/src/arzplus.d.ts +26 -0
  314. package/js/src/src/arzplus.js +581 -0
  315. package/js/src/src/ascendex.d.ts +424 -0
  316. package/js/src/src/ascendex.js +3699 -0
  317. package/js/src/src/asretether.d.ts +21 -0
  318. package/js/src/src/asretether.js +324 -0
  319. package/js/src/src/base/Exchange.d.ts +926 -0
  320. package/js/src/src/base/Exchange.js +7399 -0
  321. package/js/src/src/base/Precise.d.ts +42 -0
  322. package/js/src/src/base/Precise.js +275 -0
  323. package/js/src/src/base/errors.d.ts +168 -0
  324. package/js/src/src/base/errors.js +255 -0
  325. package/js/src/src/base/functions/crypto.d.ts +16 -0
  326. package/js/src/src/base/functions/crypto.js +131 -0
  327. package/js/src/src/base/functions/encode.d.ts +4 -0
  328. package/js/src/src/base/functions/encode.js +32 -0
  329. package/js/src/src/base/functions/generic.d.ts +29 -0
  330. package/js/src/src/base/functions/generic.js +203 -0
  331. package/js/src/src/base/functions/misc.d.ts +9 -0
  332. package/js/src/src/base/functions/misc.js +101 -0
  333. package/js/src/src/base/functions/number.d.ts +27 -0
  334. package/js/src/src/base/functions/number.js +313 -0
  335. package/js/src/src/base/functions/platform.d.ts +7 -0
  336. package/js/src/src/base/functions/platform.js +27 -0
  337. package/js/src/src/base/functions/rsa.d.ts +5 -0
  338. package/js/src/src/base/functions/rsa.js +49 -0
  339. package/js/src/src/base/functions/string.d.ts +7 -0
  340. package/js/src/src/base/functions/string.js +44 -0
  341. package/js/src/src/base/functions/throttle.d.ts +6 -0
  342. package/js/src/src/base/functions/throttle.js +67 -0
  343. package/js/src/src/base/functions/time.d.ts +21 -0
  344. package/js/src/src/base/functions/time.js +171 -0
  345. package/js/src/src/base/functions/totp.d.ts +3 -0
  346. package/js/src/src/base/functions/totp.js +25 -0
  347. package/js/src/src/base/functions/type.d.ts +37 -0
  348. package/js/src/src/base/functions/type.js +179 -0
  349. package/js/src/src/base/functions.d.ts +10 -0
  350. package/js/src/src/base/functions.js +18 -0
  351. package/js/src/src/base/types.d.ts +586 -0
  352. package/js/src/src/base/types.js +7 -0
  353. package/js/src/src/base/ws/Cache.d.ts +27 -0
  354. package/js/src/src/base/ws/Cache.js +260 -0
  355. package/js/src/src/base/ws/Client.d.ts +53 -0
  356. package/js/src/src/base/ws/Client.js +307 -0
  357. package/js/src/src/base/ws/Future.d.ts +8 -0
  358. package/js/src/src/base/ws/Future.js +35 -0
  359. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  360. package/js/src/src/base/ws/OrderBook.js +130 -0
  361. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  362. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  363. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  364. package/js/src/src/base/ws/WsClient.js +69 -0
  365. package/js/src/src/bequant.d.ts +4 -0
  366. package/js/src/src/bequant.js +35 -0
  367. package/js/src/src/bidarz.d.ts +16 -0
  368. package/js/src/src/bidarz.js +327 -0
  369. package/js/src/src/bigone.d.ts +296 -0
  370. package/js/src/src/bigone.js +2340 -0
  371. package/js/src/src/binance.d.ts +1667 -0
  372. package/js/src/src/binance.js +14400 -0
  373. package/js/src/src/binancecoinm.d.ts +6 -0
  374. package/js/src/src/binancecoinm.js +51 -0
  375. package/js/src/src/binanceus.d.ts +4 -0
  376. package/js/src/src/binanceus.js +225 -0
  377. package/js/src/src/binanceusdm.d.ts +6 -0
  378. package/js/src/src/binanceusdm.js +63 -0
  379. package/js/src/src/bingx.d.ts +778 -0
  380. package/js/src/src/bingx.js +6705 -0
  381. package/js/src/src/bit24.d.ts +24 -0
  382. package/js/src/src/bit24.js +520 -0
  383. package/js/src/src/bit2c.d.ts +146 -0
  384. package/js/src/src/bit2c.js +1029 -0
  385. package/js/src/src/bitbank.d.ts +181 -0
  386. package/js/src/src/bitbank.js +1146 -0
  387. package/js/src/src/bitbarg.d.ts +21 -0
  388. package/js/src/src/bitbarg.js +312 -0
  389. package/js/src/src/bitbns.d.ts +184 -0
  390. package/js/src/src/bitbns.js +1288 -0
  391. package/js/src/src/bitfinex.d.ts +516 -0
  392. package/js/src/src/bitfinex.js +3951 -0
  393. package/js/src/src/bitflyer.d.ts +229 -0
  394. package/js/src/src/bitflyer.js +1209 -0
  395. package/js/src/src/bitget.d.ts +1109 -0
  396. package/js/src/src/bitget.js +11033 -0
  397. package/js/src/src/bithumb.d.ts +165 -0
  398. package/js/src/src/bithumb.js +1257 -0
  399. package/js/src/src/bitimen.d.ts +23 -0
  400. package/js/src/src/bitimen.js +424 -0
  401. package/js/src/src/bitir.d.ts +23 -0
  402. package/js/src/src/bitir.js +521 -0
  403. package/js/src/src/bitmart.d.ts +736 -0
  404. package/js/src/src/bitmart.js +5639 -0
  405. package/js/src/src/bitmex.d.ts +395 -0
  406. package/js/src/src/bitmex.js +3088 -0
  407. package/js/src/src/bitopro.d.ts +295 -0
  408. package/js/src/src/bitopro.js +1892 -0
  409. package/js/src/src/bitpin.d.ts +23 -0
  410. package/js/src/src/bitpin.js +487 -0
  411. package/js/src/src/bitrue.d.ts +384 -0
  412. package/js/src/src/bitrue.js +3382 -0
  413. package/js/src/src/bitso.d.ts +270 -0
  414. package/js/src/src/bitso.js +1881 -0
  415. package/js/src/src/bitstamp.d.ts +355 -0
  416. package/js/src/src/bitstamp.js +2445 -0
  417. package/js/src/src/bitteam.d.ts +229 -0
  418. package/js/src/src/bitteam.js +2420 -0
  419. package/js/src/src/bittrade.d.ts +298 -0
  420. package/js/src/src/bittrade.js +2050 -0
  421. package/js/src/src/bitunix.d.ts +21 -0
  422. package/js/src/src/bitunix.js +326 -0
  423. package/js/src/src/bitvavo.d.ts +311 -0
  424. package/js/src/src/bitvavo.js +2204 -0
  425. package/js/src/src/blockchaincom.d.ts +256 -0
  426. package/js/src/src/blockchaincom.js +1259 -0
  427. package/js/src/src/blofin.d.ts +439 -0
  428. package/js/src/src/blofin.js +2576 -0
  429. package/js/src/src/btcalpha.d.ts +209 -0
  430. package/js/src/src/btcalpha.js +1056 -0
  431. package/js/src/src/btcbox.d.ts +144 -0
  432. package/js/src/src/btcbox.js +834 -0
  433. package/js/src/src/btcmarkets.d.ts +253 -0
  434. package/js/src/src/btcmarkets.js +1418 -0
  435. package/js/src/src/btcturk.d.ts +161 -0
  436. package/js/src/src/btcturk.js +1058 -0
  437. package/js/src/src/bybit.d.ts +1097 -0
  438. package/js/src/src/bybit.js +9382 -0
  439. package/js/src/src/bydfi.d.ts +23 -0
  440. package/js/src/src/bydfi.js +434 -0
  441. package/js/src/src/cafearz.d.ts +21 -0
  442. package/js/src/src/cafearz.js +346 -0
  443. package/js/src/src/cex.d.ts +286 -0
  444. package/js/src/src/cex.js +1799 -0
  445. package/js/src/src/coinbase.d.ts +623 -0
  446. package/js/src/src/coinbase.js +5220 -0
  447. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  448. package/js/src/src/coinbaseadvanced.js +18 -0
  449. package/js/src/src/coinbaseexchange.d.ts +334 -0
  450. package/js/src/src/coinbaseexchange.js +2127 -0
  451. package/js/src/src/coinbaseinternational.d.ts +443 -0
  452. package/js/src/src/coinbaseinternational.js +2336 -0
  453. package/js/src/src/coincatch.d.ts +786 -0
  454. package/js/src/src/coincatch.js +5492 -0
  455. package/js/src/src/coincheck.d.ts +147 -0
  456. package/js/src/src/coincheck.js +962 -0
  457. package/js/src/src/coinex.d.ts +719 -0
  458. package/js/src/src/coinex.js +6166 -0
  459. package/js/src/src/coinmate.d.ts +202 -0
  460. package/js/src/src/coinmate.js +1215 -0
  461. package/js/src/src/coinmetro.d.ts +244 -0
  462. package/js/src/src/coinmetro.js +2024 -0
  463. package/js/src/src/coinone.d.ts +158 -0
  464. package/js/src/src/coinone.js +1278 -0
  465. package/js/src/src/coinsph.d.ts +310 -0
  466. package/js/src/src/coinsph.js +2203 -0
  467. package/js/src/src/coinspot.d.ts +108 -0
  468. package/js/src/src/coinspot.js +653 -0
  469. package/js/src/src/cryptocom.d.ts +463 -0
  470. package/js/src/src/cryptocom.js +3549 -0
  471. package/js/src/src/cryptomus.d.ts +158 -0
  472. package/js/src/src/cryptomus.js +1169 -0
  473. package/js/src/src/defx.d.ts +348 -0
  474. package/js/src/src/defx.js +2139 -0
  475. package/js/src/src/delta.d.ts +407 -0
  476. package/js/src/src/delta.js +3654 -0
  477. package/js/src/src/deribit.d.ts +516 -0
  478. package/js/src/src/deribit.js +3790 -0
  479. package/js/src/src/derive.d.ts +324 -0
  480. package/js/src/src/derive.js +2655 -0
  481. package/js/src/src/digifinex.d.ts +544 -0
  482. package/js/src/src/digifinex.js +4453 -0
  483. package/js/src/src/ellipx.d.ts +237 -0
  484. package/js/src/src/ellipx.js +2071 -0
  485. package/js/src/src/eterex.d.ts +21 -0
  486. package/js/src/src/eterex.js +299 -0
  487. package/js/src/src/excoino.d.ts +23 -0
  488. package/js/src/src/excoino.js +426 -0
  489. package/js/src/src/exir.d.ts +23 -0
  490. package/js/src/src/exir.js +403 -0
  491. package/js/src/src/exmo.d.ts +426 -0
  492. package/js/src/src/exmo.js +2825 -0
  493. package/js/src/src/exnovin.d.ts +22 -0
  494. package/js/src/src/exnovin.js +378 -0
  495. package/js/src/src/farhadexchange.d.ts +21 -0
  496. package/js/src/src/farhadexchange.js +280 -0
  497. package/js/src/src/fmfwio.d.ts +4 -0
  498. package/js/src/src/fmfwio.js +35 -0
  499. package/js/src/src/foxbit.d.ts +352 -0
  500. package/js/src/src/foxbit.js +2016 -0
  501. package/js/src/src/gate.d.ts +1071 -0
  502. package/js/src/src/gate.js +8282 -0
  503. package/js/src/src/gateio.d.ts +4 -0
  504. package/js/src/src/gateio.js +17 -0
  505. package/js/src/src/gemini.d.ts +257 -0
  506. package/js/src/src/gemini.js +2006 -0
  507. package/js/src/src/hamtapay.d.ts +21 -0
  508. package/js/src/src/hamtapay.js +303 -0
  509. package/js/src/src/hashkey.d.ts +628 -0
  510. package/js/src/src/hashkey.js +4363 -0
  511. package/js/src/src/hibachi.d.ts +346 -0
  512. package/js/src/src/hibachi.js +2137 -0
  513. package/js/src/src/hitbtc.d.ts +558 -0
  514. package/js/src/src/hitbtc.js +3847 -0
  515. package/js/src/src/hitobit.d.ts +23 -0
  516. package/js/src/src/hitobit.js +412 -0
  517. package/js/src/src/hollaex.d.ts +305 -0
  518. package/js/src/src/hollaex.js +2046 -0
  519. package/js/src/src/htx.d.ts +961 -0
  520. package/js/src/src/htx.js +9668 -0
  521. package/js/src/src/huobi.d.ts +4 -0
  522. package/js/src/src/huobi.js +17 -0
  523. package/js/src/src/hyperliquid.d.ts +651 -0
  524. package/js/src/src/hyperliquid.js +3937 -0
  525. package/js/src/src/independentreserve.d.ts +169 -0
  526. package/js/src/src/independentreserve.js +1115 -0
  527. package/js/src/src/indodax.d.ts +217 -0
  528. package/js/src/src/indodax.js +1454 -0
  529. package/js/src/src/iranexchange.d.ts +21 -0
  530. package/js/src/src/iranexchange.js +399 -0
  531. package/js/src/src/jibitex.d.ts +23 -0
  532. package/js/src/src/jibitex.js +416 -0
  533. package/js/src/src/kcex.d.ts +21 -0
  534. package/js/src/src/kcex.js +335 -0
  535. package/js/src/src/kifpoolme.d.ts +23 -0
  536. package/js/src/src/kifpoolme.js +410 -0
  537. package/js/src/src/kraken.d.ts +484 -0
  538. package/js/src/src/kraken.js +3518 -0
  539. package/js/src/src/krakenfutures.d.ts +362 -0
  540. package/js/src/src/krakenfutures.js +2885 -0
  541. package/js/src/src/kucoin.d.ts +759 -0
  542. package/js/src/src/kucoin.js +5153 -0
  543. package/js/src/src/kucoinfutures.d.ts +521 -0
  544. package/js/src/src/kucoinfutures.js +3381 -0
  545. package/js/src/src/latoken.d.ts +274 -0
  546. package/js/src/src/latoken.js +1824 -0
  547. package/js/src/src/lbank.d.ts +350 -0
  548. package/js/src/src/lbank.js +3146 -0
  549. package/js/src/src/luno.d.ts +252 -0
  550. package/js/src/src/luno.js +1479 -0
  551. package/js/src/src/mazdax.d.ts +23 -0
  552. package/js/src/src/mazdax.js +534 -0
  553. package/js/src/src/mercado.d.ts +160 -0
  554. package/js/src/src/mercado.js +1011 -0
  555. package/js/src/src/mexc.d.ts +768 -0
  556. package/js/src/src/mexc.js +6102 -0
  557. package/js/src/src/modetrade.d.ts +496 -0
  558. package/js/src/src/modetrade.js +2936 -0
  559. package/js/src/src/myokx.d.ts +4 -0
  560. package/js/src/src/myokx.js +54 -0
  561. package/js/src/src/ndax.d.ts +285 -0
  562. package/js/src/src/ndax.js +2598 -0
  563. package/js/src/src/nobitex.d.ts +23 -0
  564. package/js/src/src/nobitex.js +454 -0
  565. package/js/src/src/novadax.d.ts +279 -0
  566. package/js/src/src/novadax.js +1676 -0
  567. package/js/src/src/oceanex.d.ts +231 -0
  568. package/js/src/src/oceanex.js +1123 -0
  569. package/js/src/src/okcoin.d.ts +346 -0
  570. package/js/src/src/okcoin.js +3211 -0
  571. package/js/src/src/okexchange.d.ts +23 -0
  572. package/js/src/src/okexchange.js +373 -0
  573. package/js/src/src/okx.d.ts +1125 -0
  574. package/js/src/src/okx.js +9009 -0
  575. package/js/src/src/okxus.d.ts +4 -0
  576. package/js/src/src/okxus.js +54 -0
  577. package/js/src/src/ompfinex.d.ts +23 -0
  578. package/js/src/src/ompfinex.js +510 -0
  579. package/js/src/src/onetrading.d.ts +228 -0
  580. package/js/src/src/onetrading.js +1769 -0
  581. package/js/src/src/oxfun.d.ts +442 -0
  582. package/js/src/src/oxfun.js +2920 -0
  583. package/js/src/src/p2b.d.ts +189 -0
  584. package/js/src/src/p2b.js +1344 -0
  585. package/js/src/src/paradex.d.ts +389 -0
  586. package/js/src/src/paradex.js +2607 -0
  587. package/js/src/src/paymium.d.ts +133 -0
  588. package/js/src/src/paymium.js +644 -0
  589. package/js/src/src/phemex.d.ts +497 -0
  590. package/js/src/src/phemex.js +5333 -0
  591. package/js/src/src/pingi.d.ts +22 -0
  592. package/js/src/src/pingi.js +446 -0
  593. package/js/src/src/poloniex.d.ts +441 -0
  594. package/js/src/src/poloniex.js +3681 -0
  595. package/js/src/src/pooleno.d.ts +21 -0
  596. package/js/src/src/pooleno.js +347 -0
  597. package/js/src/src/pro/alpaca.d.ts +95 -0
  598. package/js/src/src/pro/alpaca.js +724 -0
  599. package/js/src/src/pro/apex.d.ts +160 -0
  600. package/js/src/src/pro/apex.js +1044 -0
  601. package/js/src/src/pro/ascendex.d.ts +99 -0
  602. package/js/src/src/pro/ascendex.js +1012 -0
  603. package/js/src/src/pro/bequant.d.ts +4 -0
  604. package/js/src/src/pro/bequant.js +42 -0
  605. package/js/src/src/pro/binance.d.ts +796 -0
  606. package/js/src/src/pro/binance.js +4373 -0
  607. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  608. package/js/src/src/pro/binancecoinm.js +32 -0
  609. package/js/src/src/pro/binanceus.d.ts +4 -0
  610. package/js/src/src/pro/binanceus.js +52 -0
  611. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  612. package/js/src/src/pro/binanceusdm.js +37 -0
  613. package/js/src/src/pro/bingx.d.ts +151 -0
  614. package/js/src/src/pro/bingx.js +1568 -0
  615. package/js/src/src/pro/bitfinex.d.ts +99 -0
  616. package/js/src/src/pro/bitfinex.js +1165 -0
  617. package/js/src/src/pro/bitget.d.ts +257 -0
  618. package/js/src/src/pro/bitget.js +2327 -0
  619. package/js/src/src/pro/bithumb.d.ts +59 -0
  620. package/js/src/src/pro/bithumb.js +395 -0
  621. package/js/src/src/pro/bitmart.d.ts +168 -0
  622. package/js/src/src/pro/bitmart.js +1686 -0
  623. package/js/src/src/pro/bitmex.d.ts +170 -0
  624. package/js/src/src/pro/bitmex.js +1760 -0
  625. package/js/src/src/pro/bitopro.d.ts +69 -0
  626. package/js/src/src/pro/bitopro.js +477 -0
  627. package/js/src/src/pro/bitrue.d.ts +40 -0
  628. package/js/src/src/pro/bitrue.js +461 -0
  629. package/js/src/src/pro/bitstamp.d.ts +53 -0
  630. package/js/src/src/pro/bitstamp.js +587 -0
  631. package/js/src/src/pro/bittrade.d.ts +66 -0
  632. package/js/src/src/pro/bittrade.js +606 -0
  633. package/js/src/src/pro/bitvavo.d.ts +321 -0
  634. package/js/src/src/pro/bitvavo.js +1451 -0
  635. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  636. package/js/src/src/pro/blockchaincom.js +777 -0
  637. package/js/src/src/pro/blofin.d.ts +174 -0
  638. package/js/src/src/pro/blofin.js +743 -0
  639. package/js/src/src/pro/bybit.d.ts +397 -0
  640. package/js/src/src/pro/bybit.js +2519 -0
  641. package/js/src/src/pro/cex.d.ts +220 -0
  642. package/js/src/src/pro/cex.js +1535 -0
  643. package/js/src/src/pro/coinbase.d.ts +119 -0
  644. package/js/src/src/pro/coinbase.js +736 -0
  645. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  646. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  647. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  648. package/js/src/src/pro/coinbaseexchange.js +969 -0
  649. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  650. package/js/src/src/pro/coinbaseinternational.js +804 -0
  651. package/js/src/src/pro/coincatch.d.ts +207 -0
  652. package/js/src/src/pro/coincatch.js +1562 -0
  653. package/js/src/src/pro/coincheck.d.ts +33 -0
  654. package/js/src/src/pro/coincheck.js +210 -0
  655. package/js/src/src/pro/coinex.d.ts +147 -0
  656. package/js/src/src/pro/coinex.js +1426 -0
  657. package/js/src/src/pro/coinone.d.ts +51 -0
  658. package/js/src/src/pro/coinone.js +413 -0
  659. package/js/src/src/pro/cryptocom.d.ts +300 -0
  660. package/js/src/src/pro/cryptocom.js +1414 -0
  661. package/js/src/src/pro/defx.d.ts +236 -0
  662. package/js/src/src/pro/defx.js +865 -0
  663. package/js/src/src/pro/deribit.d.ts +163 -0
  664. package/js/src/src/pro/deribit.js +1066 -0
  665. package/js/src/src/pro/derive.d.ts +100 -0
  666. package/js/src/src/pro/derive.js +753 -0
  667. package/js/src/src/pro/exmo.d.ts +97 -0
  668. package/js/src/src/pro/exmo.js +903 -0
  669. package/js/src/src/pro/gate.d.ts +360 -0
  670. package/js/src/src/pro/gate.js +2119 -0
  671. package/js/src/src/pro/gateio.d.ts +4 -0
  672. package/js/src/src/pro/gateio.js +17 -0
  673. package/js/src/src/pro/gemini.d.ts +106 -0
  674. package/js/src/src/pro/gemini.js +932 -0
  675. package/js/src/src/pro/hashkey.d.ts +121 -0
  676. package/js/src/src/pro/hashkey.js +843 -0
  677. package/js/src/src/pro/hitbtc.d.ts +235 -0
  678. package/js/src/src/pro/hitbtc.js +1400 -0
  679. package/js/src/src/pro/hollaex.d.ts +77 -0
  680. package/js/src/src/pro/hollaex.js +604 -0
  681. package/js/src/src/pro/htx.d.ts +141 -0
  682. package/js/src/src/pro/htx.js +2415 -0
  683. package/js/src/src/pro/huobi.d.ts +4 -0
  684. package/js/src/src/pro/huobi.js +17 -0
  685. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  686. package/js/src/src/pro/hyperliquid.js +1126 -0
  687. package/js/src/src/pro/independentreserve.d.ts +36 -0
  688. package/js/src/src/pro/independentreserve.js +287 -0
  689. package/js/src/src/pro/kraken.d.ts +233 -0
  690. package/js/src/src/pro/kraken.js +1785 -0
  691. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  692. package/js/src/src/pro/krakenfutures.js +1592 -0
  693. package/js/src/src/pro/kucoin.d.ts +221 -0
  694. package/js/src/src/pro/kucoin.js +1430 -0
  695. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  696. package/js/src/src/pro/kucoinfutures.js +1295 -0
  697. package/js/src/src/pro/lbank.d.ts +134 -0
  698. package/js/src/src/pro/lbank.js +950 -0
  699. package/js/src/src/pro/luno.d.ts +44 -0
  700. package/js/src/src/pro/luno.js +322 -0
  701. package/js/src/src/pro/mexc.d.ts +210 -0
  702. package/js/src/src/pro/mexc.js +2009 -0
  703. package/js/src/src/pro/modetrade.d.ts +155 -0
  704. package/js/src/src/pro/modetrade.js +1335 -0
  705. package/js/src/src/pro/myokx.d.ts +4 -0
  706. package/js/src/src/pro/myokx.js +39 -0
  707. package/js/src/src/pro/ndax.d.ts +60 -0
  708. package/js/src/src/pro/ndax.js +545 -0
  709. package/js/src/src/pro/okcoin.d.ts +91 -0
  710. package/js/src/src/pro/okcoin.js +763 -0
  711. package/js/src/src/pro/okx.d.ts +408 -0
  712. package/js/src/src/pro/okx.js +2479 -0
  713. package/js/src/src/pro/okxus.d.ts +4 -0
  714. package/js/src/src/pro/okxus.js +39 -0
  715. package/js/src/src/pro/onetrading.d.ts +107 -0
  716. package/js/src/src/pro/onetrading.js +1343 -0
  717. package/js/src/src/pro/oxfun.d.ts +234 -0
  718. package/js/src/src/pro/oxfun.js +1112 -0
  719. package/js/src/src/pro/p2b.d.ts +104 -0
  720. package/js/src/src/pro/p2b.js +506 -0
  721. package/js/src/src/pro/paradex.d.ts +54 -0
  722. package/js/src/src/pro/paradex.js +370 -0
  723. package/js/src/src/pro/phemex.d.ts +129 -0
  724. package/js/src/src/pro/phemex.js +1569 -0
  725. package/js/src/src/pro/poloniex.d.ts +214 -0
  726. package/js/src/src/pro/poloniex.js +1318 -0
  727. package/js/src/src/pro/probit.d.ts +91 -0
  728. package/js/src/src/pro/probit.js +593 -0
  729. package/js/src/src/pro/tradeogre.d.ts +49 -0
  730. package/js/src/src/pro/tradeogre.js +284 -0
  731. package/js/src/src/pro/upbit.d.ts +124 -0
  732. package/js/src/src/pro/upbit.js +689 -0
  733. package/js/src/src/pro/vertex.d.ts +104 -0
  734. package/js/src/src/pro/vertex.js +999 -0
  735. package/js/src/src/pro/whitebit.d.ts +123 -0
  736. package/js/src/src/pro/whitebit.js +971 -0
  737. package/js/src/src/pro/woo.d.ts +161 -0
  738. package/js/src/src/pro/woo.js +1351 -0
  739. package/js/src/src/pro/woofipro.d.ts +155 -0
  740. package/js/src/src/pro/woofipro.js +1335 -0
  741. package/js/src/src/pro/xt.d.ts +165 -0
  742. package/js/src/src/pro/xt.js +1230 -0
  743. package/js/src/src/probit.d.ts +283 -0
  744. package/js/src/src/probit.js +1935 -0
  745. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  746. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  747. package/js/src/src/raastin.d.ts +24 -0
  748. package/js/src/src/raastin.js +494 -0
  749. package/js/src/src/ramzinex.d.ts +23 -0
  750. package/js/src/src/ramzinex.js +510 -0
  751. package/js/src/src/sarmayex.d.ts +21 -0
  752. package/js/src/src/sarmayex.js +376 -0
  753. package/js/src/src/sarrafex.d.ts +23 -0
  754. package/js/src/src/sarrafex.js +501 -0
  755. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  756. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  757. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  758. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  759. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  760. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  761. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  762. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  763. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  764. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  765. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  766. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  767. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  768. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  769. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  770. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  771. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  772. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  773. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  774. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  775. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  776. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  777. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  778. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  779. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  780. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  781. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  782. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  783. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  784. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  785. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  786. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  787. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  788. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  789. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  790. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  791. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  792. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  793. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  794. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  795. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  796. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  797. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  798. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  799. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  800. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  801. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  802. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  803. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  804. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  805. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  806. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  807. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  808. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  809. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  810. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  811. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  812. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  813. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  814. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  815. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  816. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  817. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  818. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  819. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  820. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  821. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  822. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  823. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  824. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  825. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  826. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  827. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  828. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  829. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  830. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  831. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  832. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  833. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  834. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  835. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  836. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  837. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  838. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  850. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  851. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  852. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  853. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  854. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  855. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  856. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  857. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  858. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  859. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  860. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  861. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  862. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  868. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  869. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  870. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  871. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  872. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  873. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  874. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  875. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  876. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  877. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  878. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  879. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  880. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  881. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  882. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  883. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  884. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  885. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  886. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  887. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  888. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  889. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  890. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  891. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  892. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  893. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  894. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  895. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  896. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  897. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  898. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  899. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  900. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  901. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  902. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  903. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  904. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  905. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  906. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  907. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  908. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  909. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  910. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  911. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  912. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  913. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  914. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  915. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  916. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  917. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  918. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  919. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  920. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  921. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  922. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  923. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  924. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  925. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  926. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  927. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  928. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  929. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  930. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  931. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  932. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  933. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  934. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  935. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  936. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  937. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  938. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  939. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  940. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  941. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  942. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  943. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  944. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  945. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  946. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  947. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  948. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  949. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  950. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  951. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  952. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  953. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  954. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  955. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  956. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  957. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  958. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  959. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  960. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  984. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  985. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  986. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  987. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  988. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  989. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  990. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  991. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  992. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  993. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  994. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  995. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  996. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  997. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  998. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  999. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  1000. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  1001. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  1002. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  1003. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  1004. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  1005. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  1006. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  1007. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  1008. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  1009. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  1010. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1011. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1012. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1013. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1014. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1015. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1016. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1017. package/js/src/src/tabdeal.d.ts +23 -0
  1018. package/js/src/src/tabdeal.js +387 -0
  1019. package/js/src/src/tehran_exchange.d.ts +21 -0
  1020. package/js/src/src/tehran_exchange.js +333 -0
  1021. package/js/src/src/tetherland.d.ts +21 -0
  1022. package/js/src/src/tetherland.js +367 -0
  1023. package/js/src/src/timex.d.ts +247 -0
  1024. package/js/src/src/timex.js +1792 -0
  1025. package/js/src/src/tokocrypto.d.ts +261 -0
  1026. package/js/src/src/tokocrypto.js +2641 -0
  1027. package/js/src/src/toobit.d.ts +22 -0
  1028. package/js/src/src/toobit.js +445 -0
  1029. package/js/src/src/tradeogre.d.ts +149 -0
  1030. package/js/src/src/tradeogre.js +878 -0
  1031. package/js/src/src/twox.d.ts +21 -0
  1032. package/js/src/src/twox.js +371 -0
  1033. package/js/src/src/ubitex.d.ts +23 -0
  1034. package/js/src/src/ubitex.js +433 -0
  1035. package/js/src/src/upbit.d.ts +377 -0
  1036. package/js/src/src/upbit.js +2340 -0
  1037. package/js/src/src/vertex.d.ts +346 -0
  1038. package/js/src/src/vertex.js +3146 -0
  1039. package/js/src/src/wallex.d.ts +23 -0
  1040. package/js/src/src/wallex.js +467 -0
  1041. package/js/src/src/wavesexchange.d.ts +244 -0
  1042. package/js/src/src/wavesexchange.js +2747 -0
  1043. package/js/src/src/whitebit.d.ts +571 -0
  1044. package/js/src/src/whitebit.js +3437 -0
  1045. package/js/src/src/woo.d.ts +727 -0
  1046. package/js/src/src/woo.js +4183 -0
  1047. package/js/src/src/woofipro.d.ts +497 -0
  1048. package/js/src/src/woofipro.js +2941 -0
  1049. package/js/src/src/xt.d.ts +568 -0
  1050. package/js/src/src/xt.js +5184 -0
  1051. package/js/src/src/yobit.d.ts +197 -0
  1052. package/js/src/src/yobit.js +1453 -0
  1053. package/js/src/src/zaif.d.ts +136 -0
  1054. package/js/src/src/zaif.js +821 -0
  1055. package/js/src/src/zonda.d.ts +214 -0
  1056. package/js/src/src/zonda.js +1984 -0
  1057. package/js/test.d.ts +1 -1
  1058. package/js/test.js +33 -33
  1059. package/package.json +1 -1
@@ -0,0 +1,2576 @@
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/blofin.js';
9
+ import { ExchangeError, ExchangeNotAvailable, ArgumentsRequired, BadRequest, InvalidOrder, AuthenticationError, RateLimitExceeded, InsufficientFunds } from './base/errors.js';
10
+ import { Precise } from './base/Precise.js';
11
+ import { TICK_SIZE } from './base/functions/number.js';
12
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class blofin
16
+ * @augments Exchange
17
+ */
18
+ export default class blofin extends Exchange {
19
+ describe() {
20
+ return this.deepExtend(super.describe(), {
21
+ 'id': 'blofin',
22
+ 'name': 'BloFin',
23
+ 'countries': ['US'],
24
+ 'version': 'v1',
25
+ 'rateLimit': 100,
26
+ 'pro': true,
27
+ 'has': {
28
+ 'CORS': undefined,
29
+ 'spot': false,
30
+ 'margin': false,
31
+ 'swap': true,
32
+ 'future': false,
33
+ 'option': false,
34
+ 'addMargin': false,
35
+ 'borrowMargin': false,
36
+ 'cancelAllOrders': false,
37
+ 'cancelOrder': true,
38
+ 'cancelOrders': true,
39
+ 'closeAllPositions': false,
40
+ 'closePosition': true,
41
+ 'createDepositAddress': false,
42
+ 'createMarketBuyOrderWithCost': false,
43
+ 'createMarketSellOrderWithCost': false,
44
+ 'createOrder': true,
45
+ 'createOrders': true,
46
+ 'createOrderWithTakeProfitAndStopLoss': true,
47
+ 'createPostOnlyOrder': false,
48
+ 'createReduceOnlyOrder': false,
49
+ 'createStopLimitOrder': false,
50
+ 'createStopLossOrder': true,
51
+ 'createStopMarketOrder': false,
52
+ 'createStopOrder': false,
53
+ 'createTakeProfitOrder': true,
54
+ 'createTriggerOrder': true,
55
+ 'editOrder': false,
56
+ 'fetchAccounts': false,
57
+ 'fetchBalance': true,
58
+ 'fetchBidsAsks': undefined,
59
+ 'fetchBorrowInterest': false,
60
+ 'fetchBorrowRateHistories': false,
61
+ 'fetchBorrowRateHistory': false,
62
+ 'fetchCanceledOrders': false,
63
+ 'fetchClosedOrder': false,
64
+ 'fetchClosedOrders': true,
65
+ 'fetchCrossBorrowRate': false,
66
+ 'fetchCrossBorrowRates': false,
67
+ 'fetchCurrencies': false,
68
+ 'fetchDeposit': false,
69
+ 'fetchDepositAddress': false,
70
+ 'fetchDepositAddresses': false,
71
+ 'fetchDepositAddressesByNetwork': false,
72
+ 'fetchDeposits': true,
73
+ 'fetchDepositsWithdrawals': false,
74
+ 'fetchDepositWithdrawFee': 'emulated',
75
+ 'fetchDepositWithdrawFees': false,
76
+ 'fetchFundingHistory': true,
77
+ 'fetchFundingRate': true,
78
+ 'fetchFundingRateHistory': true,
79
+ 'fetchFundingRates': false,
80
+ 'fetchGreeks': false,
81
+ 'fetchIndexOHLCV': false,
82
+ 'fetchIsolatedBorrowRate': false,
83
+ 'fetchIsolatedBorrowRates': false,
84
+ 'fetchL3OrderBook': false,
85
+ 'fetchLedger': true,
86
+ 'fetchLedgerEntry': undefined,
87
+ 'fetchLeverage': true,
88
+ 'fetchLeverages': true,
89
+ 'fetchLeverageTiers': false,
90
+ 'fetchMarginMode': true,
91
+ 'fetchMarginModes': false,
92
+ 'fetchMarketLeverageTiers': false,
93
+ 'fetchMarkets': true,
94
+ 'fetchMarkOHLCV': false,
95
+ 'fetchMySettlementHistory': false,
96
+ 'fetchMyTrades': true,
97
+ 'fetchOHLCV': true,
98
+ 'fetchOpenInterest': false,
99
+ 'fetchOpenInterestHistory': false,
100
+ 'fetchOpenOrder': undefined,
101
+ 'fetchOpenOrders': true,
102
+ 'fetchOrder': undefined,
103
+ 'fetchOrderBook': true,
104
+ 'fetchOrderBooks': false,
105
+ 'fetchOrders': false,
106
+ 'fetchOrderTrades': true,
107
+ 'fetchPosition': true,
108
+ 'fetchPositionMode': true,
109
+ 'fetchPositions': true,
110
+ 'fetchPositionsForSymbol': false,
111
+ 'fetchPositionsRisk': false,
112
+ 'fetchPremiumIndexOHLCV': false,
113
+ 'fetchSettlementHistory': false,
114
+ 'fetchStatus': false,
115
+ 'fetchTicker': true,
116
+ 'fetchTickers': true,
117
+ 'fetchTime': false,
118
+ 'fetchTrades': true,
119
+ 'fetchTradingFee': false,
120
+ 'fetchTradingFees': false,
121
+ 'fetchTradingLimits': false,
122
+ 'fetchTransactionFee': false,
123
+ 'fetchTransactionFees': false,
124
+ 'fetchTransactions': false,
125
+ 'fetchTransfer': false,
126
+ 'fetchTransfers': false,
127
+ 'fetchUnderlyingAssets': false,
128
+ 'fetchVolatilityHistory': false,
129
+ 'fetchWithdrawal': false,
130
+ 'fetchWithdrawals': true,
131
+ 'fetchWithdrawalWhitelist': false,
132
+ 'reduceMargin': false,
133
+ 'repayCrossMargin': false,
134
+ 'setLeverage': true,
135
+ 'setMargin': false,
136
+ 'setMarginMode': true,
137
+ 'setPositionMode': true,
138
+ 'signIn': false,
139
+ 'transfer': true,
140
+ 'withdraw': false,
141
+ },
142
+ 'timeframes': {
143
+ '1m': '1m',
144
+ '3m': '3m',
145
+ '5m': '5m',
146
+ '15m': '15m',
147
+ '30m': '30m',
148
+ '1h': '1H',
149
+ '2h': '2H',
150
+ '4h': '4H',
151
+ '6h': '6H',
152
+ '8h': '8H',
153
+ '12h': '12H',
154
+ '1d': '1D',
155
+ '3d': '3D',
156
+ '1w': '1W',
157
+ '1M': '1M',
158
+ },
159
+ 'hostname': 'www.blofin.com',
160
+ 'urls': {
161
+ 'logo': 'https://github.com/user-attachments/assets/518cdf80-f05d-4821-a3e3-d48ceb41d73b',
162
+ 'api': {
163
+ 'rest': 'https://openapi.blofin.com',
164
+ },
165
+ 'test': {
166
+ 'rest': 'https://demo-trading-openapi.blofin.com',
167
+ },
168
+ 'referral': {
169
+ 'url': 'https://blofin.com/register?referral_code=f79EsS',
170
+ 'discount': 0.05,
171
+ },
172
+ 'www': 'https://www.blofin.com',
173
+ 'doc': 'https://blofin.com/docs',
174
+ },
175
+ 'api': {
176
+ 'public': {
177
+ 'get': {
178
+ 'market/instruments': 1,
179
+ 'market/tickers': 1,
180
+ 'market/books': 1,
181
+ 'market/trades': 1,
182
+ 'market/candles': 1,
183
+ 'market/mark-price': 1,
184
+ 'market/funding-rate': 1,
185
+ 'market/funding-rate-history': 1,
186
+ },
187
+ },
188
+ 'private': {
189
+ 'get': {
190
+ 'asset/balances': 1,
191
+ 'trade/orders-pending': 1,
192
+ 'trade/fills-history': 1,
193
+ 'asset/deposit-history': 1,
194
+ 'asset/withdrawal-history': 1,
195
+ 'asset/bills': 1,
196
+ 'account/balance': 1,
197
+ 'account/positions': 1,
198
+ 'account/leverage-info': 1,
199
+ 'account/margin-mode': 1,
200
+ 'account/position-mode': 1,
201
+ 'account/batch-leverage-info': 1,
202
+ 'trade/orders-tpsl-pending': 1,
203
+ 'trade/orders-algo-pending': 1,
204
+ 'trade/orders-history': 1,
205
+ 'trade/orders-tpsl-history': 1,
206
+ 'trade/orders-algo-history': 1,
207
+ 'trade/order/price-range': 1,
208
+ 'user/query-apikey': 1,
209
+ 'affiliate/basic': 1,
210
+ 'copytrading/instruments': 1,
211
+ 'copytrading/account/balance': 1,
212
+ 'copytrading/account/positions-by-order': 1,
213
+ 'copytrading/account/positions-details-by-order': 1,
214
+ 'copytrading/account/positions-by-contract': 1,
215
+ 'copytrading/account/position-mode': 1,
216
+ 'copytrading/account/leverage-info': 1,
217
+ 'copytrading/trade/orders-pending': 1,
218
+ 'copytrading/trade/pending-tpsl-by-contract': 1,
219
+ 'copytrading/trade/position-history-by-order': 1,
220
+ 'copytrading/trade/orders-history': 1,
221
+ 'copytrading/trade/pending-tpsl-by-order': 1,
222
+ },
223
+ 'post': {
224
+ 'account/set-margin-mode': 1,
225
+ 'account/set-position-mode': 1,
226
+ 'trade/order': 1,
227
+ 'trade/order-algo': 1,
228
+ 'trade/cancel-order': 1,
229
+ 'trade/cancel-algo': 1,
230
+ 'account/set-leverage': 1,
231
+ 'trade/batch-orders': 1,
232
+ 'trade/order-tpsl': 1,
233
+ 'trade/cancel-batch-orders': 1,
234
+ 'trade/cancel-tpsl': 1,
235
+ 'trade/close-position': 1,
236
+ 'asset/transfer': 1,
237
+ 'copytrading/account/set-position-mode': 1,
238
+ 'copytrading/account/set-leverage': 1,
239
+ 'copytrading/trade/place-order': 1,
240
+ 'copytrading/trade/cancel-order': 1,
241
+ 'copytrading/trade/place-tpsl-by-contract': 1,
242
+ 'copytrading/trade/cancel-tpsl-by-contract': 1,
243
+ 'copytrading/trade/place-tpsl-by-order': 1,
244
+ 'copytrading/trade/cancel-tpsl-by-order': 1,
245
+ 'copytrading/trade/close-position-by-order': 1,
246
+ 'copytrading/trade/close-position-by-contract': 1,
247
+ },
248
+ },
249
+ },
250
+ 'fees': {
251
+ 'swap': {
252
+ 'taker': this.parseNumber('0.00060'),
253
+ 'maker': this.parseNumber('0.00020'),
254
+ },
255
+ },
256
+ 'requiredCredentials': {
257
+ 'apiKey': true,
258
+ 'secret': true,
259
+ 'password': true,
260
+ },
261
+ 'features': {
262
+ 'default': {
263
+ 'sandbox': false,
264
+ 'createOrder': {
265
+ 'timeInForce': {
266
+ 'IOC': true,
267
+ 'FOK': true,
268
+ 'PO': true,
269
+ 'GTD': false,
270
+ },
271
+ 'leverage': false,
272
+ 'marketBuyRequiresPrice': false,
273
+ 'marketBuyByCost': false,
274
+ 'selfTradePrevention': false,
275
+ 'trailing': false,
276
+ 'iceberg': false,
277
+ },
278
+ 'createOrders': {
279
+ 'max': 10,
280
+ },
281
+ 'fetchMyTrades': {
282
+ 'marginMode': false,
283
+ 'limit': 100,
284
+ 'daysBack': 100000,
285
+ 'untilDays': 100000,
286
+ 'symbolRequired': false,
287
+ },
288
+ 'fetchOrder': undefined,
289
+ 'fetchOpenOrders': {
290
+ 'marginMode': false,
291
+ 'limit': 100,
292
+ 'trigger': true,
293
+ 'trailing': false,
294
+ 'symbolRequired': false,
295
+ },
296
+ 'fetchOrders': undefined,
297
+ 'fetchClosedOrders': {
298
+ 'marginMode': false,
299
+ 'limit': 1000,
300
+ 'daysBack': 100000,
301
+ 'daysBackCanceled': 1,
302
+ 'untilDays': 100000,
303
+ 'trigger': true,
304
+ 'trailing': false,
305
+ 'symbolRequired': false,
306
+ },
307
+ 'fetchOHLCV': {
308
+ 'limit': 1440,
309
+ },
310
+ },
311
+ 'spot': {
312
+ 'extends': 'default',
313
+ 'createOrder': {
314
+ 'marginMode': false,
315
+ 'triggerPrice': false,
316
+ 'triggerPriceType': undefined,
317
+ 'triggerDirection': false,
318
+ 'stopLossPrice': false,
319
+ 'takeProfitPrice': false,
320
+ 'attachedStopLossTakeProfit': undefined,
321
+ 'hedged': false,
322
+ },
323
+ },
324
+ 'forDerivatives': {
325
+ 'extends': 'default',
326
+ 'createOrder': {
327
+ 'marginMode': true,
328
+ 'triggerPrice': false,
329
+ 'triggerPriceType': undefined,
330
+ 'triggerDirection': false,
331
+ 'stopLossPrice': true,
332
+ 'takeProfitPrice': true,
333
+ 'attachedStopLossTakeProfit': {
334
+ 'triggerPriceType': undefined,
335
+ 'price': true,
336
+ },
337
+ 'hedged': true,
338
+ },
339
+ },
340
+ 'swap': {
341
+ 'linear': {
342
+ 'extends': 'forDerivatives',
343
+ },
344
+ 'inverse': undefined,
345
+ },
346
+ 'future': {
347
+ 'linear': undefined,
348
+ 'inverse': undefined,
349
+ },
350
+ },
351
+ 'exceptions': {
352
+ 'exact': {
353
+ '400': BadRequest,
354
+ '401': AuthenticationError,
355
+ '500': ExchangeError,
356
+ '404': BadRequest,
357
+ '405': BadRequest,
358
+ '406': BadRequest,
359
+ '429': RateLimitExceeded,
360
+ '152001': BadRequest,
361
+ '152002': BadRequest,
362
+ '152003': BadRequest,
363
+ '152004': BadRequest,
364
+ '152005': BadRequest,
365
+ '152006': InvalidOrder,
366
+ '152007': InvalidOrder,
367
+ '152008': InvalidOrder,
368
+ '152009': InvalidOrder,
369
+ '150003': InvalidOrder,
370
+ '150004': InvalidOrder,
371
+ '542': InvalidOrder,
372
+ '102002': InvalidOrder,
373
+ '102005': InvalidOrder,
374
+ '102014': InvalidOrder,
375
+ '102015': InvalidOrder,
376
+ '102022': InvalidOrder,
377
+ '102037': InvalidOrder,
378
+ '102038': InvalidOrder,
379
+ '102039': InvalidOrder,
380
+ '102040': InvalidOrder,
381
+ '102047': InvalidOrder,
382
+ '102048': InvalidOrder,
383
+ '102049': InvalidOrder,
384
+ '102050': InvalidOrder,
385
+ '102051': InvalidOrder,
386
+ '102052': InvalidOrder,
387
+ '102053': InvalidOrder,
388
+ '102054': InvalidOrder,
389
+ '102055': InvalidOrder,
390
+ '102064': BadRequest,
391
+ '102065': BadRequest,
392
+ '102068': BadRequest,
393
+ '103013': ExchangeError,
394
+ 'Order failed. Insufficient USDT margin in account': InsufficientFunds, // Insufficient USDT margin in account
395
+ },
396
+ 'broad': {
397
+ 'Internal Server Error': ExchangeNotAvailable,
398
+ 'server error': ExchangeNotAvailable, // {"code":500,"data":{},"detailMsg":"","error_code":"500","error_message":"server error 1236805249","msg":"server error 1236805249"}
399
+ },
400
+ },
401
+ 'httpExceptions': {
402
+ '429': ExchangeNotAvailable, // https://github.com/ccxt/ccxt/issues/9612
403
+ },
404
+ 'precisionMode': TICK_SIZE,
405
+ 'options': {
406
+ 'brokerId': 'ec6dd3a7dd982d0b',
407
+ 'accountsByType': {
408
+ 'swap': 'futures',
409
+ 'funding': 'funding',
410
+ 'future': 'futures',
411
+ 'copy_trading': 'copy_trading',
412
+ 'earn': 'earn',
413
+ 'spot': 'spot',
414
+ },
415
+ 'accountsById': {
416
+ 'funding': 'funding',
417
+ 'futures': 'swap',
418
+ 'copy_trading': 'copy_trading',
419
+ 'earn': 'earn',
420
+ 'spot': 'spot',
421
+ },
422
+ 'defaultNetwork': 'ERC20',
423
+ 'defaultNetworks': {
424
+ 'ETH': 'ERC20',
425
+ 'BTC': 'BTC',
426
+ 'USDT': 'TRC20',
427
+ },
428
+ 'networks': {
429
+ 'BTC': 'Bitcoin',
430
+ 'BEP20': 'BSC',
431
+ 'ERC20': 'ERC20',
432
+ 'TRC20': 'TRC20',
433
+ },
434
+ 'fetchOpenInterestHistory': {
435
+ 'timeframes': {
436
+ '5m': '5m',
437
+ '1h': '1H',
438
+ '8h': '8H',
439
+ '1d': '1D',
440
+ '5M': '5m',
441
+ '1H': '1H',
442
+ '8H': '8H',
443
+ '1D': '1D',
444
+ },
445
+ },
446
+ 'fetchOHLCV': {
447
+ // 'type': 'Candles', // Candles or HistoryCandles, IndexCandles, MarkPriceCandles
448
+ 'timezone': 'UTC', // UTC, HK
449
+ },
450
+ 'fetchPositions': {
451
+ 'method': 'privateGetAccountPositions', // privateGetAccountPositions or privateGetAccountPositionsHistory
452
+ },
453
+ 'createOrder': 'privatePostTradeOrder',
454
+ 'createMarketBuyOrderRequiresPrice': false,
455
+ 'fetchMarkets': ['swap'],
456
+ 'defaultType': 'swap',
457
+ 'fetchLedger': {
458
+ 'method': 'privateGetAssetBills',
459
+ },
460
+ 'fetchOpenOrders': {
461
+ 'method': 'privateGetTradeOrdersPending',
462
+ },
463
+ 'cancelOrders': {
464
+ 'method': 'privatePostTradeCancelBatchOrders',
465
+ },
466
+ 'fetchCanceledOrders': {
467
+ 'method': 'privateGetTradeOrdersHistory', // privateGetTradeOrdersTpslHistory
468
+ },
469
+ 'fetchClosedOrders': {
470
+ 'method': 'privateGetTradeOrdersHistory', // privateGetTradeOrdersTpslHistory
471
+ },
472
+ 'withdraw': {
473
+ // a funding password credential is required by the exchange for the
474
+ // withdraw call (not to be confused with the api password credential)
475
+ 'password': undefined,
476
+ 'pwd': undefined, // password or pwd both work
477
+ },
478
+ 'exchangeType': {
479
+ 'spot': 'SPOT',
480
+ 'swap': 'SWAP',
481
+ 'SPOT': 'SPOT',
482
+ 'SWAP': 'SWAP',
483
+ },
484
+ },
485
+ });
486
+ }
487
+ /**
488
+ * @method
489
+ * @name blofin#fetchMarkets
490
+ * @description retrieves data on all markets for blofin
491
+ * @see https://blofin.com/docs#get-instruments
492
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
493
+ * @returns {object[]} an array of objects representing market data
494
+ */
495
+ async fetchMarkets(params = {}) {
496
+ const response = await this.publicGetMarketInstruments(params);
497
+ const data = this.safeList(response, 'data', []);
498
+ return this.parseMarkets(data);
499
+ }
500
+ parseMarket(market) {
501
+ const id = this.safeString(market, 'instId');
502
+ const type = this.safeStringLower(market, 'instType');
503
+ const spot = (type === 'spot');
504
+ const future = (type === 'future');
505
+ const swap = (type === 'swap');
506
+ const option = (type === 'option');
507
+ const contract = swap || future;
508
+ const baseId = this.safeString(market, 'baseCurrency');
509
+ const quoteId = this.safeString(market, 'quoteCurrency');
510
+ const settleId = this.safeString(market, 'quoteCurrency');
511
+ const settle = this.safeCurrencyCode(settleId);
512
+ const base = this.safeCurrencyCode(baseId);
513
+ const quote = this.safeCurrencyCode(quoteId);
514
+ let symbol = base + '/' + quote;
515
+ if (swap) {
516
+ symbol = symbol + ':' + settle;
517
+ }
518
+ const expiry = undefined;
519
+ const strikePrice = undefined;
520
+ const optionType = undefined;
521
+ const tickSize = this.safeString(market, 'tickSize');
522
+ const fees = this.safeDict2(this.fees, type, 'trading', {});
523
+ const taker = this.safeNumber(fees, 'taker');
524
+ const maker = this.safeNumber(fees, 'maker');
525
+ let maxLeverage = this.safeString(market, 'maxLeverage', '100');
526
+ maxLeverage = Precise.stringMax(maxLeverage, '1');
527
+ const isActive = (this.safeString(market, 'state') === 'live');
528
+ return this.safeMarketStructure({
529
+ 'id': id,
530
+ 'symbol': symbol,
531
+ 'base': base,
532
+ 'quote': quote,
533
+ 'baseId': baseId,
534
+ 'quoteId': quoteId,
535
+ 'settle': settle,
536
+ 'settleId': settleId,
537
+ 'type': type,
538
+ 'spot': spot,
539
+ 'option': option,
540
+ 'margin': spot && (Precise.stringGt(maxLeverage, '1')),
541
+ 'swap': swap,
542
+ 'future': future,
543
+ 'active': isActive,
544
+ 'taker': taker,
545
+ 'maker': maker,
546
+ 'contract': contract,
547
+ 'linear': contract ? (quoteId === settleId) : undefined,
548
+ 'inverse': contract ? (baseId === settleId) : undefined,
549
+ 'contractSize': contract ? this.safeNumber(market, 'contractValue') : undefined,
550
+ 'expiry': expiry,
551
+ 'expiryDatetime': expiry,
552
+ 'strike': strikePrice,
553
+ 'optionType': optionType,
554
+ 'created': this.safeInteger(market, 'listTime'),
555
+ 'precision': {
556
+ 'amount': this.safeNumber(market, 'lotSize'),
557
+ 'price': this.parseNumber(tickSize),
558
+ },
559
+ 'limits': {
560
+ 'leverage': {
561
+ 'min': this.parseNumber('1'),
562
+ 'max': this.parseNumber(maxLeverage),
563
+ },
564
+ 'amount': {
565
+ 'min': this.safeNumber(market, 'minSize'),
566
+ 'max': undefined,
567
+ },
568
+ 'price': {
569
+ 'min': undefined,
570
+ 'max': undefined,
571
+ },
572
+ 'cost': {
573
+ 'min': undefined,
574
+ 'max': undefined,
575
+ },
576
+ },
577
+ 'info': market,
578
+ });
579
+ }
580
+ /**
581
+ * @method
582
+ * @name blofin#fetchOrderBook
583
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
584
+ * @see https://blofin.com/docs#get-order-book
585
+ * @param {string} symbol unified symbol of the market to fetch the order book for
586
+ * @param {int} [limit] the maximum amount of order book entries to return
587
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
588
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
589
+ */
590
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
591
+ await this.loadMarkets();
592
+ const market = this.market(symbol);
593
+ const request = {
594
+ 'instId': market['id'],
595
+ };
596
+ limit = (limit === undefined) ? 50 : limit;
597
+ if (limit !== undefined) {
598
+ request['size'] = limit; // max 100
599
+ }
600
+ const response = await this.publicGetMarketBooks(this.extend(request, params));
601
+ //
602
+ // {
603
+ // "code": "0",
604
+ // "msg": "",
605
+ // "data": [
606
+ // {
607
+ // "asks": [
608
+ // ["0.07228","4.211619","0","2"], // price, amount, liquidated orders, total open orders
609
+ // ["0.0723","299.880364","0","2"],
610
+ // ["0.07231","3.72832","0","1"],
611
+ // ],
612
+ // "bids": [
613
+ // ["0.07221","18.5","0","1"],
614
+ // ["0.0722","18.5","0","1"],
615
+ // ["0.07219","0.505407","0","1"],
616
+ // ],
617
+ // "ts": "1621438475342"
618
+ // }
619
+ // ]
620
+ // }
621
+ //
622
+ const data = this.safeList(response, 'data', []);
623
+ const first = this.safeDict(data, 0, {});
624
+ const timestamp = this.safeInteger(first, 'ts');
625
+ return this.parseOrderBook(first, symbol, timestamp);
626
+ }
627
+ parseTicker(ticker, market = undefined) {
628
+ //
629
+ // response similar for REST & WS
630
+ //
631
+ // {
632
+ // instId: "ADA-USDT",
633
+ // ts: "1707736811486",
634
+ // last: "0.5315",
635
+ // lastSize: "4",
636
+ // askPrice: "0.5318",
637
+ // askSize: "248",
638
+ // bidPrice: "0.5315",
639
+ // bidSize: "63",
640
+ // open24h: "0.5555",
641
+ // high24h: "0.5563",
642
+ // low24h: "0.5315",
643
+ // volCurrency24h: "198560100",
644
+ // vol24h: "1985601",
645
+ // }
646
+ //
647
+ const timestamp = this.safeInteger(ticker, 'ts');
648
+ const marketId = this.safeString(ticker, 'instId');
649
+ market = this.safeMarket(marketId, market, '-');
650
+ const symbol = market['symbol'];
651
+ const last = this.safeString(ticker, 'last');
652
+ const open = this.safeString(ticker, 'open24h');
653
+ const spot = this.safeBool(market, 'spot', false);
654
+ const quoteVolume = spot ? this.safeString(ticker, 'volCurrency24h') : undefined;
655
+ const baseVolume = this.safeString(ticker, 'vol24h');
656
+ const high = this.safeString(ticker, 'high24h');
657
+ const low = this.safeString(ticker, 'low24h');
658
+ return this.safeTicker({
659
+ 'symbol': symbol,
660
+ 'timestamp': timestamp,
661
+ 'datetime': this.iso8601(timestamp),
662
+ 'high': high,
663
+ 'low': low,
664
+ 'bid': this.safeString(ticker, 'bidPrice'),
665
+ 'bidVolume': this.safeString(ticker, 'bidSize'),
666
+ 'ask': this.safeString(ticker, 'askPrice'),
667
+ 'askVolume': this.safeString(ticker, 'askSize'),
668
+ 'vwap': undefined,
669
+ 'open': open,
670
+ 'close': last,
671
+ 'last': last,
672
+ 'previousClose': undefined,
673
+ 'change': undefined,
674
+ 'percentage': undefined,
675
+ 'average': undefined,
676
+ 'baseVolume': baseVolume,
677
+ 'quoteVolume': quoteVolume,
678
+ 'indexPrice': this.safeString(ticker, 'indexPrice'),
679
+ 'markPrice': this.safeString(ticker, 'markPrice'),
680
+ 'info': ticker,
681
+ }, market);
682
+ }
683
+ /**
684
+ * @method
685
+ * @name blofin#fetchTicker
686
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
687
+ * @see https://blofin.com/docs#get-tickers
688
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
689
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
690
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
691
+ */
692
+ async fetchTicker(symbol, params = {}) {
693
+ await this.loadMarkets();
694
+ const market = this.market(symbol);
695
+ const request = {
696
+ 'instId': market['id'],
697
+ };
698
+ const response = await this.publicGetMarketTickers(this.extend(request, params));
699
+ const data = this.safeList(response, 'data', []);
700
+ const first = this.safeDict(data, 0, {});
701
+ return this.parseTicker(first, market);
702
+ }
703
+ /**
704
+ * @method
705
+ * @name blofin#fetchMarkPrice
706
+ * @description fetches mark price for the market
707
+ * @see https://docs.blofin.com/index.html#get-mark-price
708
+ * @param {string} symbol unified market symbol
709
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
710
+ * @param {string} [params.subType] "linear" or "inverse"
711
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
712
+ */
713
+ async fetchMarkPrice(symbol, params = {}) {
714
+ await this.loadMarkets();
715
+ const market = this.market(symbol);
716
+ const request = {
717
+ 'symbol': market['id'],
718
+ };
719
+ const response = await this.publicGetMarketMarkPrice(this.extend(request, params));
720
+ const data = this.safeList(response, 'data', []);
721
+ const first = this.safeDict(data, 0, {});
722
+ return this.parseTicker(first, market);
723
+ }
724
+ /**
725
+ * @method
726
+ * @name blofin#fetchTickers
727
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
728
+ * @see https://blofin.com/docs#get-tickers
729
+ * @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
730
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
731
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
732
+ */
733
+ async fetchTickers(symbols = undefined, params = {}) {
734
+ await this.loadMarkets();
735
+ symbols = this.marketSymbols(symbols);
736
+ const response = await this.publicGetMarketTickers(params);
737
+ const tickers = this.safeList(response, 'data', []);
738
+ return this.parseTickers(tickers, symbols);
739
+ }
740
+ parseTrade(trade, market = undefined) {
741
+ //
742
+ // fetch trades (response similar for REST & WS)
743
+ //
744
+ // {
745
+ // "tradeId": "3263934920",
746
+ // "instId": "LTC-USDT",
747
+ // "price": "67.87",
748
+ // "size": "1",
749
+ // "side": "buy",
750
+ // "ts": "1707232020854"
751
+ // }
752
+ //
753
+ // my trades
754
+ // {
755
+ // "instId": "LTC-USDT",
756
+ // "tradeId": "1440847",
757
+ // "orderId": "2075705202",
758
+ // "fillPrice": "67.850000000000000000",
759
+ // "fillSize": "1.000000000000000000",
760
+ // "fillPnl": "0.000000000000000000",
761
+ // "side": "buy",
762
+ // "positionSide": "net",
763
+ // "fee": "0.040710000000000000",
764
+ // "ts": "1707224678878",
765
+ // "brokerId": ""
766
+ // }
767
+ //
768
+ const id = this.safeString(trade, 'tradeId');
769
+ const marketId = this.safeString(trade, 'instId');
770
+ market = this.safeMarket(marketId, market, '-');
771
+ const symbol = market['symbol'];
772
+ const timestamp = this.safeInteger(trade, 'ts');
773
+ const price = this.safeString2(trade, 'price', 'fillPrice');
774
+ const amount = this.safeString2(trade, 'size', 'fillSize');
775
+ const side = this.safeString(trade, 'side');
776
+ const orderId = this.safeString(trade, 'orderId');
777
+ const feeCost = this.safeString(trade, 'fee');
778
+ let fee = undefined;
779
+ if (feeCost !== undefined) {
780
+ fee = {
781
+ 'cost': feeCost,
782
+ 'currency': market['settle'],
783
+ };
784
+ }
785
+ return this.safeTrade({
786
+ 'info': trade,
787
+ 'timestamp': timestamp,
788
+ 'datetime': this.iso8601(timestamp),
789
+ 'symbol': symbol,
790
+ 'id': id,
791
+ 'order': orderId,
792
+ 'type': undefined,
793
+ 'takerOrMaker': undefined,
794
+ 'side': side,
795
+ 'price': price,
796
+ 'amount': amount,
797
+ 'cost': undefined,
798
+ 'fee': fee,
799
+ }, market);
800
+ }
801
+ /**
802
+ * @method
803
+ * @name blofin#fetchTrades
804
+ * @description get the list of most recent trades for a particular symbol
805
+ * @see https://blofin.com/docs#get-trades
806
+ * @param {string} symbol unified symbol of the market to fetch trades for
807
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
808
+ * @param {int} [limit] the maximum amount of trades to fetch
809
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
810
+ * @param {boolean} [params.paginate] *only applies to publicGetMarketHistoryTrades* default false, when true will automatically paginate by calling this endpoint multiple times
811
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
812
+ */
813
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
814
+ await this.loadMarkets();
815
+ let paginate = false;
816
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');
817
+ if (paginate) {
818
+ return await this.fetchPaginatedCallCursor('fetchTrades', symbol, since, limit, params, 'tradeId', 'after', undefined, 100);
819
+ }
820
+ const market = this.market(symbol);
821
+ const request = {
822
+ 'instId': market['id'],
823
+ };
824
+ let response = undefined;
825
+ if (limit !== undefined) {
826
+ request['limit'] = limit; // default 100
827
+ }
828
+ let method = undefined;
829
+ [method, params] = this.handleOptionAndParams(params, 'fetchTrades', 'method', 'publicGetMarketTrades');
830
+ if (method === 'publicGetMarketTrades') {
831
+ response = await this.publicGetMarketTrades(this.extend(request, params));
832
+ }
833
+ const data = this.safeList(response, 'data', []);
834
+ return this.parseTrades(data, market, since, limit);
835
+ }
836
+ parseOHLCV(ohlcv, market = undefined) {
837
+ //
838
+ // [
839
+ // "1678928760000", // timestamp
840
+ // "24341.4", // open
841
+ // "24344", // high
842
+ // "24313.2", // low
843
+ // "24323", // close
844
+ // "628", // contract volume
845
+ // "2.5819", // base volume
846
+ // "62800", // quote volume
847
+ // "0" // candlestick state
848
+ // ]
849
+ //
850
+ return [
851
+ this.safeInteger(ohlcv, 0),
852
+ this.safeNumber(ohlcv, 1),
853
+ this.safeNumber(ohlcv, 2),
854
+ this.safeNumber(ohlcv, 3),
855
+ this.safeNumber(ohlcv, 4),
856
+ this.safeNumber(ohlcv, 6),
857
+ ];
858
+ }
859
+ /**
860
+ * @method
861
+ * @name blofin#fetchOHLCV
862
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
863
+ * @see https://blofin.com/docs#get-candlesticks
864
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
865
+ * @param {string} timeframe the length of time each candle represents
866
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
867
+ * @param {int} [limit] the maximum amount of candles to fetch
868
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
869
+ * @param {int} [params.until] timestamp in ms of the latest candle to fetch
870
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
871
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
872
+ */
873
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
874
+ await this.loadMarkets();
875
+ const market = this.market(symbol);
876
+ let paginate = false;
877
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');
878
+ if (paginate) {
879
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 100);
880
+ }
881
+ if (limit === undefined) {
882
+ limit = 100; // default 100, max 100
883
+ }
884
+ const request = {
885
+ 'instId': market['id'],
886
+ 'bar': this.safeString(this.timeframes, timeframe, timeframe),
887
+ 'limit': limit,
888
+ };
889
+ const until = this.safeInteger(params, 'until');
890
+ if (until !== undefined) {
891
+ request['after'] = until;
892
+ params = this.omit(params, 'until');
893
+ }
894
+ let response = undefined;
895
+ response = await this.publicGetMarketCandles(this.extend(request, params));
896
+ const data = this.safeList(response, 'data', []);
897
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
898
+ }
899
+ /**
900
+ * @method
901
+ * @name blofin#fetchFundingRateHistory
902
+ * @description fetches historical funding rate prices
903
+ * @see https://blofin.com/docs#get-funding-rate-history
904
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
905
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
906
+ * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
907
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
908
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
909
+ * @param {int} [params.until] timestamp in ms of the latest funding rate to fetch
910
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
911
+ */
912
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
913
+ if (symbol === undefined) {
914
+ throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
915
+ }
916
+ await this.loadMarkets();
917
+ let paginate = false;
918
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
919
+ if (paginate) {
920
+ return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 100);
921
+ }
922
+ const market = this.market(symbol);
923
+ const request = {
924
+ 'instId': market['id'],
925
+ };
926
+ if (since !== undefined) {
927
+ request['before'] = Math.max(since - 1, 0);
928
+ }
929
+ if (limit !== undefined) {
930
+ request['limit'] = limit;
931
+ }
932
+ const until = this.safeInteger(params, 'until');
933
+ if (until !== undefined) {
934
+ request['after'] = until;
935
+ params = this.omit(params, 'until');
936
+ }
937
+ const response = await this.publicGetMarketFundingRateHistory(this.extend(request, params));
938
+ const rates = [];
939
+ const data = this.safeList(response, 'data', []);
940
+ for (let i = 0; i < data.length; i++) {
941
+ const rate = data[i];
942
+ const timestamp = this.safeInteger(rate, 'fundingTime');
943
+ rates.push({
944
+ 'info': rate,
945
+ 'symbol': market['symbol'],
946
+ 'fundingRate': this.safeNumber(rate, 'fundingRate'),
947
+ 'timestamp': timestamp,
948
+ 'datetime': this.iso8601(timestamp),
949
+ });
950
+ }
951
+ const sorted = this.sortBy(rates, 'timestamp');
952
+ return this.filterBySymbolSinceLimit(sorted, market['symbol'], since, limit);
953
+ }
954
+ parseFundingRate(contract, market = undefined) {
955
+ //
956
+ // {
957
+ // "fundingRate": "0.00027815",
958
+ // "fundingTime": "1634256000000",
959
+ // "instId": "BTC-USD-SWAP",
960
+ // }
961
+ //
962
+ const marketId = this.safeString(contract, 'instId');
963
+ const symbol = this.safeSymbol(marketId, market);
964
+ const fundingTime = this.safeInteger(contract, 'fundingTime');
965
+ // > The current interest is 0.
966
+ return {
967
+ 'info': contract,
968
+ 'symbol': symbol,
969
+ 'markPrice': undefined,
970
+ 'indexPrice': undefined,
971
+ 'interestRate': this.parseNumber('0'),
972
+ 'estimatedSettlePrice': undefined,
973
+ 'timestamp': undefined,
974
+ 'datetime': undefined,
975
+ 'fundingRate': this.safeNumber(contract, 'fundingRate'),
976
+ 'fundingTimestamp': fundingTime,
977
+ 'fundingDatetime': this.iso8601(fundingTime),
978
+ 'nextFundingRate': undefined,
979
+ 'nextFundingTimestamp': undefined,
980
+ 'nextFundingDatetime': undefined,
981
+ 'previousFundingRate': undefined,
982
+ 'previousFundingTimestamp': undefined,
983
+ 'previousFundingDatetime': undefined,
984
+ 'interval': undefined,
985
+ };
986
+ }
987
+ /**
988
+ * @method
989
+ * @name blofin#fetchFundingRate
990
+ * @description fetch the current funding rate
991
+ * @see https://blofin.com/docs#get-funding-rate
992
+ * @param {string} symbol unified market symbol
993
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
994
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
995
+ */
996
+ async fetchFundingRate(symbol, params = {}) {
997
+ await this.loadMarkets();
998
+ const market = this.market(symbol);
999
+ if (!market['swap']) {
1000
+ throw new ExchangeError(this.id + ' fetchFundingRate() is only valid for swap markets');
1001
+ }
1002
+ const request = {
1003
+ 'instId': market['id'],
1004
+ };
1005
+ const response = await this.publicGetMarketFundingRate(this.extend(request, params));
1006
+ //
1007
+ // {
1008
+ // "code": "0",
1009
+ // "data": [
1010
+ // {
1011
+ // "fundingRate": "0.00027815",
1012
+ // "fundingTime": "1634256000000",
1013
+ // "instId": "BTC-USD-SWAP",
1014
+ // }
1015
+ // ],
1016
+ // "msg": ""
1017
+ // }
1018
+ //
1019
+ const data = this.safeList(response, 'data', []);
1020
+ const entry = this.safeDict(data, 0, {});
1021
+ return this.parseFundingRate(entry, market);
1022
+ }
1023
+ parseBalanceByType(response) {
1024
+ const data = this.safeList(response, 'data');
1025
+ if ((data !== undefined) && Array.isArray(data)) {
1026
+ return this.parseFundingBalance(response);
1027
+ }
1028
+ else {
1029
+ return this.parseBalance(response);
1030
+ }
1031
+ }
1032
+ parseBalance(response) {
1033
+ //
1034
+ // "data" similar for REST & WS
1035
+ //
1036
+ // {
1037
+ // "code": "0",
1038
+ // "msg": "success",
1039
+ // "data": {
1040
+ // "ts": "1697021343571",
1041
+ // "totalEquity": "10011254.077985990315787910",
1042
+ // "isolatedEquity": "861.763132108800000000",
1043
+ // "details": [
1044
+ // {
1045
+ // "currency": "USDT",
1046
+ // "equity": "10014042.988958415234430699548",
1047
+ // "balance": "10013119.885958415234430699",
1048
+ // "ts": "1697021343571",
1049
+ // "isolatedEquity": "862.003200000000000000048",
1050
+ // "available": "9996399.4708691159703362725",
1051
+ // "availableEquity": "9996399.4708691159703362725",
1052
+ // "frozen": "15805.149672632597427761",
1053
+ // "orderFrozen": "14920.994472632597427761",
1054
+ // "equityUsd": "10011254.077985990315787910",
1055
+ // "isolatedUnrealizedPnl": "-22.151999999999999999952",
1056
+ // "bonus": "0" // present only in REST
1057
+ // "unrealizedPnl": "0" // present only in WS
1058
+ // }
1059
+ // ]
1060
+ // }
1061
+ // }
1062
+ //
1063
+ const result = { 'info': response };
1064
+ const data = this.safeDict(response, 'data', {});
1065
+ const timestamp = this.safeInteger(data, 'ts');
1066
+ const details = this.safeList(data, 'details', []);
1067
+ for (let i = 0; i < details.length; i++) {
1068
+ const balance = details[i];
1069
+ const currencyId = this.safeString(balance, 'currency');
1070
+ const code = this.safeCurrencyCode(currencyId);
1071
+ const account = this.account();
1072
+ // it may be incorrect to use total, free and used for swap accounts
1073
+ const eq = this.safeString(balance, 'equity');
1074
+ const availEq = this.safeString(balance, 'available');
1075
+ if ((eq === undefined) || (availEq === undefined)) {
1076
+ account['free'] = this.safeString(balance, 'availableEquity');
1077
+ account['used'] = this.safeString(balance, 'frozen');
1078
+ }
1079
+ else {
1080
+ account['total'] = eq;
1081
+ account['free'] = availEq;
1082
+ }
1083
+ result[code] = account;
1084
+ }
1085
+ result['timestamp'] = timestamp;
1086
+ result['datetime'] = this.iso8601(timestamp);
1087
+ return this.safeBalance(result);
1088
+ }
1089
+ parseFundingBalance(response) {
1090
+ //
1091
+ // {
1092
+ // "code": "0",
1093
+ // "msg": "success",
1094
+ // "data": [
1095
+ // {
1096
+ // "currency": "USDT",
1097
+ // "balance": "10012514.919418081548717298",
1098
+ // "available": "9872132.414278782284622898",
1099
+ // "frozen": "138556.471805965930761067",
1100
+ // "bonus": "0"
1101
+ // }
1102
+ // ]
1103
+ // }
1104
+ //
1105
+ const result = { 'info': response };
1106
+ const data = this.safeList(response, 'data', []);
1107
+ for (let i = 0; i < data.length; i++) {
1108
+ const balance = data[i];
1109
+ const currencyId = this.safeString(balance, 'currency');
1110
+ const code = this.safeCurrencyCode(currencyId);
1111
+ const account = this.account();
1112
+ // it may be incorrect to use total, free and used for swap accounts
1113
+ account['total'] = this.safeString(balance, 'balance');
1114
+ account['free'] = this.safeString(balance, 'available');
1115
+ account['used'] = this.safeString(balance, 'frozen');
1116
+ result[code] = account;
1117
+ }
1118
+ return this.safeBalance(result);
1119
+ }
1120
+ parseTradingFee(fee, market = undefined) {
1121
+ return {
1122
+ 'info': fee,
1123
+ 'symbol': this.safeSymbol(undefined, market),
1124
+ // blofin returns the fees as negative values opposed to other exchanges, so the sign needs to be flipped
1125
+ 'maker': this.parseNumber(Precise.stringNeg(this.safeString2(fee, 'maker', 'makerU'))),
1126
+ 'taker': this.parseNumber(Precise.stringNeg(this.safeString2(fee, 'taker', 'takerU'))),
1127
+ 'percentage': undefined,
1128
+ 'tierBased': undefined,
1129
+ };
1130
+ }
1131
+ /**
1132
+ * @method
1133
+ * @name blofin#fetchBalance
1134
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1135
+ * @see https://blofin.com/docs#get-balance
1136
+ * @see https://blofin.com/docs#get-futures-account-balance
1137
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1138
+ * @param {string} [params.accountType] the type of account to fetch the balance for, either 'funding' or 'futures' or 'copy_trading' or 'earn'
1139
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1140
+ */
1141
+ async fetchBalance(params = {}) {
1142
+ await this.loadMarkets();
1143
+ let accountType = undefined;
1144
+ [accountType, params] = this.handleOptionAndParams2(params, 'fetchBalance', 'accountType', 'type');
1145
+ const request = {};
1146
+ let response = undefined;
1147
+ if (accountType !== undefined && accountType !== 'swap') {
1148
+ const options = this.safeDict(this.options, 'accountsByType', {});
1149
+ const parsedAccountType = this.safeString(options, accountType, accountType);
1150
+ request['accountType'] = parsedAccountType;
1151
+ response = await this.privateGetAssetBalances(this.extend(request, params));
1152
+ }
1153
+ else {
1154
+ response = await this.privateGetAccountBalance(this.extend(request, params));
1155
+ }
1156
+ return this.parseBalanceByType(response);
1157
+ }
1158
+ createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1159
+ const market = this.market(symbol);
1160
+ const request = {
1161
+ 'instId': market['id'],
1162
+ 'side': side,
1163
+ 'orderType': type,
1164
+ 'size': this.amountToPrecision(symbol, amount),
1165
+ 'brokerId': this.safeString(this.options, 'brokerId', 'ec6dd3a7dd982d0b'),
1166
+ };
1167
+ let marginMode = undefined;
1168
+ [marginMode, params] = this.handleMarginModeAndParams('createOrder', params, 'cross');
1169
+ request['marginMode'] = marginMode;
1170
+ const triggerPrice = this.safeString(params, 'triggerPrice');
1171
+ const timeInForce = this.safeString(params, 'timeInForce', 'GTC');
1172
+ const isHedged = this.safeBool(params, 'hedged', false);
1173
+ if (isHedged) {
1174
+ request['positionSide'] = (side === 'buy') ? 'long' : 'short';
1175
+ }
1176
+ const isMarketOrder = type === 'market';
1177
+ params = this.omit(params, ['timeInForce']);
1178
+ const ioc = (timeInForce === 'IOC') || (type === 'ioc');
1179
+ const marketIOC = (isMarketOrder && ioc);
1180
+ if (isMarketOrder || marketIOC) {
1181
+ request['orderType'] = 'market';
1182
+ }
1183
+ else {
1184
+ const key = (triggerPrice !== undefined) ? 'orderPrice' : 'price';
1185
+ request[key] = this.priceToPrecision(symbol, price);
1186
+ }
1187
+ let postOnly = false;
1188
+ [postOnly, params] = this.handlePostOnly(isMarketOrder, type === 'post_only', params);
1189
+ if (postOnly) {
1190
+ request['type'] = 'post_only';
1191
+ }
1192
+ const stopLoss = this.safeDict(params, 'stopLoss');
1193
+ const takeProfit = this.safeDict(params, 'takeProfit');
1194
+ params = this.omit(params, ['stopLoss', 'takeProfit', 'hedged']);
1195
+ const isStopLoss = stopLoss !== undefined;
1196
+ const isTakeProfit = takeProfit !== undefined;
1197
+ if (isStopLoss || isTakeProfit) {
1198
+ if (isStopLoss) {
1199
+ const slTriggerPrice = this.safeString2(stopLoss, 'triggerPrice', 'stopPrice');
1200
+ request['slTriggerPrice'] = this.priceToPrecision(symbol, slTriggerPrice);
1201
+ const slOrderPrice = this.safeString(stopLoss, 'price', '-1');
1202
+ request['slOrderPrice'] = this.priceToPrecision(symbol, slOrderPrice);
1203
+ }
1204
+ if (isTakeProfit) {
1205
+ const tpTriggerPrice = this.safeString2(takeProfit, 'triggerPrice', 'stopPrice');
1206
+ request['tpTriggerPrice'] = this.priceToPrecision(symbol, tpTriggerPrice);
1207
+ const tpPrice = this.safeString(takeProfit, 'price', '-1');
1208
+ request['tpOrderPrice'] = this.priceToPrecision(symbol, tpPrice);
1209
+ }
1210
+ }
1211
+ else if (triggerPrice !== undefined) {
1212
+ request['orderType'] = 'trigger';
1213
+ request['triggerPrice'] = this.priceToPrecision(symbol, triggerPrice);
1214
+ if (isMarketOrder) {
1215
+ request['orderPrice'] = '-1';
1216
+ }
1217
+ }
1218
+ return this.extend(request, params);
1219
+ }
1220
+ parseOrderStatus(status) {
1221
+ const statuses = {
1222
+ 'canceled': 'canceled',
1223
+ 'order_failed': 'canceled',
1224
+ 'live': 'open',
1225
+ 'partially_filled': 'open',
1226
+ 'filled': 'closed',
1227
+ 'effective': 'closed',
1228
+ };
1229
+ return this.safeString(statuses, status, status);
1230
+ }
1231
+ parseOrder(order, market = undefined) {
1232
+ //
1233
+ // response similar for REST & WS
1234
+ //
1235
+ // {
1236
+ // "orderId": "2075628533",
1237
+ // "clientOrderId": "",
1238
+ // "instId": "LTC-USDT",
1239
+ // "marginMode": "cross",
1240
+ // "positionSide": "net",
1241
+ // "side": "buy",
1242
+ // "orderType": "market",
1243
+ // "price": "0.000000000000000000",
1244
+ // "size": "1.000000000000000000",
1245
+ // "reduceOnly": "true",
1246
+ // "leverage": "3",
1247
+ // "state": "filled",
1248
+ // "filledSize": "1.000000000000000000",
1249
+ // "pnl": "-0.050000000000000000",
1250
+ // "averagePrice": "68.110000000000000000",
1251
+ // "fee": "0.040866000000000000",
1252
+ // "createTime": "1706891359010",
1253
+ // "updateTime": "1706891359098",
1254
+ // "orderCategory": "normal",
1255
+ // "tpTriggerPrice": null,
1256
+ // "tpOrderPrice": null,
1257
+ // "slTriggerPrice": null,
1258
+ // "slOrderPrice": null,
1259
+ // "cancelSource": "not_canceled",
1260
+ // "cancelSourceReason": null,
1261
+ // "brokerId": "ec6dd3a7dd982d0b"
1262
+ // "filled_amount": "1.000000000000000000", // filledAmount in "ws" watchOrders
1263
+ // "cancelSource": "", // only in WS
1264
+ // "instType": "SWAP", // only in WS
1265
+ // }
1266
+ //
1267
+ const id = this.safeStringN(order, ['tpslId', 'orderId', 'algoId']);
1268
+ const timestamp = this.safeInteger(order, 'createTime');
1269
+ const lastUpdateTimestamp = this.safeInteger(order, 'updateTime');
1270
+ const lastTradeTimestamp = this.safeInteger(order, 'fillTime');
1271
+ const side = this.safeString(order, 'side');
1272
+ let type = this.safeString(order, 'orderType');
1273
+ let postOnly = undefined;
1274
+ let timeInForce = undefined;
1275
+ if (type === 'post_only') {
1276
+ postOnly = true;
1277
+ type = 'limit';
1278
+ }
1279
+ else if (type === 'fok') {
1280
+ timeInForce = 'FOK';
1281
+ type = 'limit';
1282
+ }
1283
+ else if (type === 'ioc') {
1284
+ timeInForce = 'IOC';
1285
+ type = 'limit';
1286
+ }
1287
+ const marketId = this.safeString(order, 'instId');
1288
+ market = this.safeMarket(marketId, market);
1289
+ const symbol = this.safeSymbol(marketId, market, '-');
1290
+ const filled = this.safeString(order, 'filledSize');
1291
+ const price = this.safeString2(order, 'px', 'price');
1292
+ const average = this.safeString(order, 'averagePrice');
1293
+ const status = this.parseOrderStatus(this.safeString(order, 'state'));
1294
+ const feeCostString = this.safeString(order, 'fee');
1295
+ const amount = this.safeString(order, 'size');
1296
+ const leverage = this.safeString(order, 'leverage', '1');
1297
+ const contractSize = this.safeString(market, 'contractSize');
1298
+ const baseAmount = Precise.stringMul(contractSize, filled);
1299
+ let cost = undefined;
1300
+ if (average !== undefined) {
1301
+ cost = Precise.stringMul(average, baseAmount);
1302
+ cost = Precise.stringDiv(cost, leverage);
1303
+ }
1304
+ // spot market buy: "sz" can refer either to base currency units or to quote currency units
1305
+ let fee = undefined;
1306
+ if (feeCostString !== undefined) {
1307
+ const feeCostSigned = Precise.stringAbs(feeCostString);
1308
+ const feeCurrencyId = this.safeString(order, 'feeCcy', 'USDT');
1309
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
1310
+ fee = {
1311
+ 'cost': this.parseNumber(feeCostSigned),
1312
+ 'currency': feeCurrencyCode,
1313
+ };
1314
+ }
1315
+ let clientOrderId = this.safeString(order, 'clientOrderId');
1316
+ if ((clientOrderId !== undefined) && (clientOrderId.length < 1)) {
1317
+ clientOrderId = undefined; // fix empty clientOrderId string
1318
+ }
1319
+ const stopLossTriggerPrice = this.safeNumber(order, 'slTriggerPrice');
1320
+ const stopLossPrice = this.safeNumber(order, 'slOrderPrice');
1321
+ const takeProfitTriggerPrice = this.safeNumber(order, 'tpTriggerPrice');
1322
+ const takeProfitPrice = this.safeNumber(order, 'tpOrderPrice');
1323
+ const reduceOnlyRaw = this.safeString(order, 'reduceOnly');
1324
+ const reduceOnly = (reduceOnlyRaw === 'true');
1325
+ return this.safeOrder({
1326
+ 'info': order,
1327
+ 'id': id,
1328
+ 'clientOrderId': clientOrderId,
1329
+ 'timestamp': timestamp,
1330
+ 'datetime': this.iso8601(timestamp),
1331
+ 'lastTradeTimestamp': lastTradeTimestamp,
1332
+ 'lastUpdateTimestamp': lastUpdateTimestamp,
1333
+ 'symbol': symbol,
1334
+ 'type': type,
1335
+ 'timeInForce': timeInForce,
1336
+ 'postOnly': postOnly,
1337
+ 'side': side,
1338
+ 'price': price,
1339
+ 'stopLossTriggerPrice': stopLossTriggerPrice,
1340
+ 'takeProfitTriggerPrice': takeProfitTriggerPrice,
1341
+ 'stopLossPrice': stopLossPrice,
1342
+ 'takeProfitPrice': takeProfitPrice,
1343
+ 'average': average,
1344
+ 'cost': cost,
1345
+ 'amount': amount,
1346
+ 'filled': filled,
1347
+ 'remaining': undefined,
1348
+ 'status': status,
1349
+ 'fee': fee,
1350
+ 'trades': undefined,
1351
+ 'reduceOnly': reduceOnly,
1352
+ }, market);
1353
+ }
1354
+ /**
1355
+ * @method
1356
+ * @name blofin#createOrder
1357
+ * @description create a trade order
1358
+ * @see https://blofin.com/docs#place-order
1359
+ * @see https://blofin.com/docs#place-tpsl-order
1360
+ * @param {string} symbol unified symbol of the market to create an order in
1361
+ * @param {string} type 'market' or 'limit' or 'post_only' or 'ioc' or 'fok'
1362
+ * @param {string} side 'buy' or 'sell'
1363
+ * @param {float} amount how much of currency you want to trade in units of base currency
1364
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1365
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1366
+ * @param {string} [params.triggerPrice] the trigger price for a trigger order
1367
+ * @param {bool} [params.reduceOnly] a mark to reduce the position size for margin, swap and future orders
1368
+ * @param {bool} [params.postOnly] true to place a post only order
1369
+ * @param {string} [params.marginMode] 'cross' or 'isolated', default is 'cross'
1370
+ * @param {float} [params.stopLossPrice] stop loss trigger price (will use privatePostTradeOrderTpsl)
1371
+ * @param {float} [params.takeProfitPrice] take profit trigger price (will use privatePostTradeOrderTpsl)
1372
+ * @param {string} [params.positionSide] *stopLossPrice/takeProfitPrice orders only* 'long' or 'short' or 'net' default is 'net'
1373
+ * @param {boolean} [params.hedged] if true, the positionSide will be set to long/short instead of net, default is false
1374
+ * @param {string} [params.clientOrderId] a unique id for the order
1375
+ * @param {object} [params.takeProfit] *takeProfit object in params* containing the triggerPrice at which the attached take profit order will be triggered
1376
+ * @param {float} [params.takeProfit.triggerPrice] take profit trigger price
1377
+ * @param {float} [params.takeProfit.price] take profit order price (if not provided the order will be a market order)
1378
+ * @param {object} [params.stopLoss] *stopLoss object in params* containing the triggerPrice at which the attached stop loss order will be triggered
1379
+ * @param {float} [params.stopLoss.triggerPrice] stop loss trigger price
1380
+ * @param {float} [params.stopLoss.price] stop loss order price (if not provided the order will be a market order)
1381
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1382
+ */
1383
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1384
+ await this.loadMarkets();
1385
+ const market = this.market(symbol);
1386
+ const tpsl = this.safeBool(params, 'tpsl', false);
1387
+ params = this.omit(params, 'tpsl');
1388
+ let method = undefined;
1389
+ [method, params] = this.handleOptionAndParams(params, 'createOrder', 'method', 'privatePostTradeOrder');
1390
+ const isStopLossPriceDefined = this.safeString(params, 'stopLossPrice') !== undefined;
1391
+ const isTakeProfitPriceDefined = this.safeString(params, 'takeProfitPrice') !== undefined;
1392
+ const isTriggerOrder = this.safeString(params, 'triggerPrice') !== undefined;
1393
+ const isType2Order = (isStopLossPriceDefined || isTakeProfitPriceDefined);
1394
+ let response = undefined;
1395
+ const reduceOnly = this.safeBool(params, 'reduceOnly');
1396
+ if (reduceOnly !== undefined) {
1397
+ params['reduceOnly'] = reduceOnly ? 'true' : 'false';
1398
+ }
1399
+ if (tpsl || (method === 'privatePostTradeOrderTpsl') || isType2Order) {
1400
+ const tpslRequest = this.createTpslOrderRequest(symbol, type, side, amount, price, params);
1401
+ response = await this.privatePostTradeOrderTpsl(tpslRequest);
1402
+ }
1403
+ else if (isTriggerOrder || (method === 'privatePostTradeOrderAlgo')) {
1404
+ const triggerRequest = this.createOrderRequest(symbol, type, side, amount, price, params);
1405
+ response = await this.privatePostTradeOrderAlgo(triggerRequest);
1406
+ }
1407
+ else {
1408
+ const request = this.createOrderRequest(symbol, type, side, amount, price, params);
1409
+ response = await this.privatePostTradeOrder(request);
1410
+ }
1411
+ if (isTriggerOrder || (method === 'privatePostTradeOrderAlgo')) {
1412
+ const dataDict = this.safeDict(response, 'data', {});
1413
+ const triggerOrder = this.parseOrder(dataDict, market);
1414
+ return triggerOrder;
1415
+ }
1416
+ const data = this.safeList(response, 'data', []);
1417
+ const first = this.safeDict(data, 0);
1418
+ const order = this.parseOrder(first, market);
1419
+ order['type'] = type;
1420
+ order['side'] = side;
1421
+ return order;
1422
+ }
1423
+ createTpslOrderRequest(symbol, type, side, amount = undefined, price = undefined, params = {}) {
1424
+ const market = this.market(symbol);
1425
+ const positionSide = this.safeString(params, 'positionSide', 'net');
1426
+ const request = {
1427
+ 'instId': market['id'],
1428
+ 'side': side,
1429
+ 'positionSide': positionSide,
1430
+ 'brokerId': this.safeString(this.options, 'brokerId', 'ec6dd3a7dd982d0b'),
1431
+ };
1432
+ if (amount !== undefined) {
1433
+ request['size'] = this.amountToPrecision(symbol, amount);
1434
+ }
1435
+ const marginMode = this.safeString(params, 'marginMode', 'cross'); // cross or isolated
1436
+ if (marginMode !== 'cross' && marginMode !== 'isolated') {
1437
+ throw new BadRequest(this.id + ' createTpslOrder() requires a marginMode parameter that must be either cross or isolated');
1438
+ }
1439
+ const stopLossPrice = this.safeString(params, 'stopLossPrice');
1440
+ const takeProfitPrice = this.safeString(params, 'takeProfitPrice');
1441
+ if (stopLossPrice !== undefined) {
1442
+ request['slTriggerPrice'] = this.priceToPrecision(symbol, stopLossPrice);
1443
+ if (type === 'market') {
1444
+ request['slOrderPrice'] = '-1';
1445
+ }
1446
+ else {
1447
+ request['slOrderPrice'] = this.priceToPrecision(symbol, price);
1448
+ }
1449
+ }
1450
+ else if (takeProfitPrice !== undefined) {
1451
+ request['tpTriggerPrice'] = this.priceToPrecision(symbol, takeProfitPrice);
1452
+ if (type === 'market') {
1453
+ request['tpOrderPrice'] = '-1';
1454
+ }
1455
+ else {
1456
+ request['tpOrderPrice'] = this.priceToPrecision(symbol, price);
1457
+ }
1458
+ }
1459
+ request['marginMode'] = marginMode;
1460
+ params = this.omit(params, ['stopLossPrice', 'takeProfitPrice']);
1461
+ return this.extend(request, params);
1462
+ }
1463
+ /**
1464
+ * @method
1465
+ * @name blofin#cancelOrder
1466
+ * @description cancels an open order
1467
+ * @see https://blofin.com/docs#cancel-order
1468
+ * @see https://blofin.com/docs#cancel-tpsl-order
1469
+ * @param {string} id order id
1470
+ * @param {string} symbol unified symbol of the market the order was made in
1471
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1472
+ * @param {boolean} [params.trigger] True if cancelling a trigger/conditional
1473
+ * @param {boolean} [params.tpsl] True if cancelling a tpsl order
1474
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1475
+ */
1476
+ async cancelOrder(id, symbol = undefined, params = {}) {
1477
+ if (symbol === undefined) {
1478
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
1479
+ }
1480
+ await this.loadMarkets();
1481
+ const market = this.market(symbol);
1482
+ const request = {
1483
+ 'instId': market['id'],
1484
+ };
1485
+ const isTrigger = this.safeBoolN(params, ['trigger'], false);
1486
+ const isTpsl = this.safeBool2(params, 'tpsl', 'TPSL', false);
1487
+ const clientOrderId = this.safeString(params, 'clientOrderId');
1488
+ if (clientOrderId !== undefined) {
1489
+ request['clientOrderId'] = clientOrderId;
1490
+ }
1491
+ else {
1492
+ if (!isTrigger && !isTpsl) {
1493
+ request['orderId'] = id.toString();
1494
+ }
1495
+ else if (isTpsl) {
1496
+ request['tpslId'] = id.toString();
1497
+ }
1498
+ else if (isTrigger) {
1499
+ request['algoId'] = id.toString();
1500
+ }
1501
+ }
1502
+ const query = this.omit(params, ['orderId', 'clientOrderId', 'stop', 'trigger', 'tpsl']);
1503
+ if (isTpsl) {
1504
+ const tpslResponse = await this.cancelOrders([id], symbol, params);
1505
+ const first = this.safeDict(tpslResponse, 0);
1506
+ return first;
1507
+ }
1508
+ else if (isTrigger) {
1509
+ const triggerResponse = await this.privatePostTradeCancelAlgo(this.extend(request, query));
1510
+ const triggerData = this.safeDict(triggerResponse, 'data');
1511
+ return this.parseOrder(triggerData, market);
1512
+ }
1513
+ const response = await this.privatePostTradeCancelOrder(this.extend(request, query));
1514
+ const data = this.safeList(response, 'data', []);
1515
+ const order = this.safeDict(data, 0);
1516
+ return this.parseOrder(order, market);
1517
+ }
1518
+ /**
1519
+ * @method
1520
+ * @name blofin#createOrders
1521
+ * @description create a list of trade orders
1522
+ * @see https://blofin.com/docs#place-multiple-orders
1523
+ * @param {Array} orders list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
1524
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1525
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1526
+ */
1527
+ async createOrders(orders, params = {}) {
1528
+ await this.loadMarkets();
1529
+ const ordersRequests = [];
1530
+ for (let i = 0; i < orders.length; i++) {
1531
+ const rawOrder = orders[i];
1532
+ const marketId = this.safeString(rawOrder, 'symbol');
1533
+ const type = this.safeString(rawOrder, 'type');
1534
+ const side = this.safeString(rawOrder, 'side');
1535
+ const amount = this.safeValue(rawOrder, 'amount');
1536
+ const price = this.safeValue(rawOrder, 'price');
1537
+ const orderParams = this.safeDict(rawOrder, 'params', {});
1538
+ const extendedParams = this.extend(orderParams, params); // the request does not accept extra params since it's a list, so we're extending each order with the common params
1539
+ const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, extendedParams);
1540
+ ordersRequests.push(orderRequest);
1541
+ }
1542
+ const response = await this.privatePostTradeBatchOrders(ordersRequests);
1543
+ const data = this.safeList(response, 'data', []);
1544
+ return this.parseOrders(data);
1545
+ }
1546
+ /**
1547
+ * @method
1548
+ * @name blofin#fetchOpenOrders
1549
+ * @description Fetch orders that are still open
1550
+ * @see https://blofin.com/docs#get-active-orders
1551
+ * @see https://blofin.com/docs#get-active-tpsl-orders
1552
+ * @see https://docs.blofin.com/index.html#get-active-algo-orders
1553
+ * @param {string} symbol unified market symbol
1554
+ * @param {int} [since] the earliest time in ms to fetch open orders for
1555
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
1556
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1557
+ * @param {bool} [params.trigger] True if fetching trigger or conditional orders
1558
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1559
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1560
+ */
1561
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1562
+ await this.loadMarkets();
1563
+ let paginate = false;
1564
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
1565
+ if (paginate) {
1566
+ return await this.fetchPaginatedCallDynamic('fetchOpenOrders', symbol, since, limit, params);
1567
+ }
1568
+ const request = {};
1569
+ let market = undefined;
1570
+ if (symbol !== undefined) {
1571
+ market = this.market(symbol);
1572
+ request['instId'] = market['id'];
1573
+ }
1574
+ if (limit !== undefined) {
1575
+ request['limit'] = limit; // default 100, max 100
1576
+ }
1577
+ const isTrigger = this.safeBoolN(params, ['stop', 'trigger'], false);
1578
+ const isTpSl = this.safeBool2(params, 'tpsl', 'TPSL', false);
1579
+ let method = undefined;
1580
+ [method, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'method', 'privateGetTradeOrdersPending');
1581
+ const query = this.omit(params, ['method', 'stop', 'trigger', 'tpsl', 'TPSL']);
1582
+ let response = undefined;
1583
+ if (isTpSl || (method === 'privateGetTradeOrdersTpslPending')) {
1584
+ response = await this.privateGetTradeOrdersTpslPending(this.extend(request, query));
1585
+ }
1586
+ else if (isTrigger || (method === 'privateGetTradeOrdersAlgoPending')) {
1587
+ request['orderType'] = 'trigger';
1588
+ response = await this.privateGetTradeOrdersAlgoPending(this.extend(request, query));
1589
+ }
1590
+ else {
1591
+ response = await this.privateGetTradeOrdersPending(this.extend(request, query));
1592
+ }
1593
+ const data = this.safeList(response, 'data', []);
1594
+ return this.parseOrders(data, market, since, limit);
1595
+ }
1596
+ /**
1597
+ * @method
1598
+ * @name blofin#fetchMyTrades
1599
+ * @description fetch all trades made by the user
1600
+ * @see https://blofin.com/docs#get-trade-history
1601
+ * @param {string} symbol unified market symbol
1602
+ * @param {int} [since] the earliest time in ms to fetch trades for
1603
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1604
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1605
+ * @param {int} [params.until] Timestamp in ms of the latest time to retrieve trades for
1606
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1607
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1608
+ */
1609
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1610
+ await this.loadMarkets();
1611
+ let paginate = false;
1612
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
1613
+ if (paginate) {
1614
+ return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);
1615
+ }
1616
+ let request = {};
1617
+ let market = undefined;
1618
+ if (symbol !== undefined) {
1619
+ market = this.market(symbol);
1620
+ request['instId'] = market['id'];
1621
+ }
1622
+ [request, params] = this.handleUntilOption('end', request, params);
1623
+ if (limit !== undefined) {
1624
+ request['limit'] = limit; // default 100, max 100
1625
+ }
1626
+ const response = await this.privateGetTradeFillsHistory(this.extend(request, params));
1627
+ const data = this.safeList(response, 'data', []);
1628
+ return this.parseTrades(data, market, since, limit);
1629
+ }
1630
+ /**
1631
+ * @method
1632
+ * @name blofin#fetchDeposits
1633
+ * @description fetch all deposits made to an account
1634
+ * @see https://blofin.com/docs#get-deposite-history
1635
+ * @param {string} code unified currency code
1636
+ * @param {int} [since] the earliest time in ms to fetch deposits for
1637
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
1638
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1639
+ * @param {int} [params.until] the latest time in ms to fetch entries for
1640
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1641
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1642
+ */
1643
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
1644
+ await this.loadMarkets();
1645
+ let paginate = false;
1646
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchDeposits', 'paginate');
1647
+ if (paginate) {
1648
+ return await this.fetchPaginatedCallDynamic('fetchDeposits', code, since, limit, params);
1649
+ }
1650
+ let request = {};
1651
+ let currency = undefined;
1652
+ if (code !== undefined) {
1653
+ currency = this.currency(code);
1654
+ request['currency'] = currency['id'];
1655
+ }
1656
+ if (since !== undefined) {
1657
+ request['before'] = Math.max(since - 1, 0);
1658
+ }
1659
+ if (limit !== undefined) {
1660
+ request['limit'] = limit; // default 100, max 100
1661
+ }
1662
+ [request, params] = this.handleUntilOption('after', request, params);
1663
+ const response = await this.privateGetAssetDepositHistory(this.extend(request, params));
1664
+ const data = this.safeList(response, 'data', []);
1665
+ return this.parseTransactions(data, currency, since, limit, params);
1666
+ }
1667
+ /**
1668
+ * @method
1669
+ * @name blofin#fetchWithdrawals
1670
+ * @description fetch all withdrawals made from an account
1671
+ * @see https://blofin.com/docs#get-withdraw-history
1672
+ * @param {string} code unified currency code
1673
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
1674
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
1675
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1676
+ * @param {int} [params.until] the latest time in ms to fetch entries for
1677
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1678
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1679
+ */
1680
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
1681
+ await this.loadMarkets();
1682
+ let paginate = false;
1683
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchWithdrawals', 'paginate');
1684
+ if (paginate) {
1685
+ return await this.fetchPaginatedCallDynamic('fetchWithdrawals', code, since, limit, params);
1686
+ }
1687
+ let request = {};
1688
+ let currency = undefined;
1689
+ if (code !== undefined) {
1690
+ currency = this.currency(code);
1691
+ request['currency'] = currency['id'];
1692
+ }
1693
+ if (since !== undefined) {
1694
+ request['before'] = Math.max(since - 1, 0);
1695
+ }
1696
+ if (limit !== undefined) {
1697
+ request['limit'] = limit; // default 100, max 100
1698
+ }
1699
+ [request, params] = this.handleUntilOption('after', request, params);
1700
+ const response = await this.privateGetAssetWithdrawalHistory(this.extend(request, params));
1701
+ const data = this.safeList(response, 'data', []);
1702
+ return this.parseTransactions(data, currency, since, limit, params);
1703
+ }
1704
+ /**
1705
+ * @method
1706
+ * @name blofin#fetchLedger
1707
+ * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
1708
+ * @see https://blofin.com/docs#get-funds-transfer-history
1709
+ * @param {string} [code] unified currency code, default is undefined
1710
+ * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
1711
+ * @param {int} [limit] max number of ledger entries to return, default is undefined
1712
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1713
+ * @param {string} [params.marginMode] 'cross' or 'isolated'
1714
+ * @param {int} [params.until] the latest time in ms to fetch entries for
1715
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [available parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
1716
+ * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
1717
+ */
1718
+ async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
1719
+ await this.loadMarkets();
1720
+ let paginate = false;
1721
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');
1722
+ if (paginate) {
1723
+ return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);
1724
+ }
1725
+ let request = {};
1726
+ if (limit !== undefined) {
1727
+ request['limit'] = limit;
1728
+ }
1729
+ let currency = undefined;
1730
+ if (code !== undefined) {
1731
+ currency = this.currency(code);
1732
+ request['currency'] = currency['id'];
1733
+ }
1734
+ [request, params] = this.handleUntilOption('end', request, params);
1735
+ let response = undefined;
1736
+ response = await this.privateGetAssetBills(this.extend(request, params));
1737
+ const data = this.safeList(response, 'data', []);
1738
+ return this.parseLedger(data, currency, since, limit);
1739
+ }
1740
+ parseTransaction(transaction, currency = undefined) {
1741
+ //
1742
+ //
1743
+ // fetchDeposits
1744
+ //
1745
+ // {
1746
+ // "currency": "USDT",
1747
+ // "chain": "TRC20",
1748
+ // "address": "TGfJLtnsh3B9EqekFEBZ1nR14QanBUf5Bi",
1749
+ // "txId": "892f4e0c32268b29b2e541ef30d32a30bbf10f902adcc4b1428319ed7c3758fd",
1750
+ // "type": "0",
1751
+ // "amount": "86.975843",
1752
+ // "state": "1",
1753
+ // "ts": "1703163304153",
1754
+ // "tag": null,
1755
+ // "confirm": "16",
1756
+ // "depositId": "36c8e2a7ea184a219de72215a696acaf"
1757
+ // }
1758
+ // fetchWithdrawals
1759
+ // {
1760
+ // "currency": "USDT",
1761
+ // "chain": "TRC20",
1762
+ // "address": "TYgB3sVXHPEDQUu288EG1uMFh9Pk2swLgW",
1763
+ // "txId": "1fd5ac52df414d7ea66194cadd9a5b4d2422c2b9720037f66d98207f9858fd96",
1764
+ // "type": "0",
1765
+ // "amount": "9",
1766
+ // "fee": "1",
1767
+ // "feeCurrency": "USDT",
1768
+ // "state": "3",
1769
+ // "clientId": null,
1770
+ // "ts": "1707217439351",
1771
+ // "tag": null,
1772
+ // "memo": null,
1773
+ // "withdrawId": "e0768698cfdf4aee8e54654c3775914b"
1774
+ // }
1775
+ //
1776
+ let type = undefined;
1777
+ let id = undefined;
1778
+ const withdrawalId = this.safeString(transaction, 'withdrawId');
1779
+ const depositId = this.safeString(transaction, 'depositId');
1780
+ const addressTo = this.safeString(transaction, 'address');
1781
+ const address = addressTo;
1782
+ const tagTo = this.safeString(transaction, 'tag');
1783
+ if (withdrawalId !== undefined) {
1784
+ type = 'withdrawal';
1785
+ id = withdrawalId;
1786
+ }
1787
+ else {
1788
+ id = depositId;
1789
+ type = 'deposit';
1790
+ }
1791
+ const currencyId = this.safeString(transaction, 'currency');
1792
+ const code = this.safeCurrencyCode(currencyId);
1793
+ const amount = this.safeNumber(transaction, 'amount');
1794
+ const status = this.parseTransactionStatus(this.safeString(transaction, 'state'));
1795
+ const txid = this.safeString(transaction, 'txId');
1796
+ const timestamp = this.safeInteger(transaction, 'ts');
1797
+ const feeCurrencyId = this.safeString(transaction, 'feeCurrency');
1798
+ const feeCode = this.safeCurrencyCode(feeCurrencyId);
1799
+ const feeCost = this.safeNumber(transaction, 'fee');
1800
+ return {
1801
+ 'info': transaction,
1802
+ 'id': id,
1803
+ 'currency': code,
1804
+ 'amount': amount,
1805
+ 'network': undefined,
1806
+ 'addressFrom': undefined,
1807
+ 'addressTo': addressTo,
1808
+ 'address': address,
1809
+ 'tagFrom': undefined,
1810
+ 'tagTo': tagTo,
1811
+ 'tag': tagTo,
1812
+ 'status': status,
1813
+ 'type': type,
1814
+ 'updated': undefined,
1815
+ 'txid': txid,
1816
+ 'timestamp': timestamp,
1817
+ 'datetime': this.iso8601(timestamp),
1818
+ 'internal': undefined,
1819
+ 'comment': undefined,
1820
+ 'fee': {
1821
+ 'currency': feeCode,
1822
+ 'cost': feeCost,
1823
+ },
1824
+ };
1825
+ }
1826
+ parseTransactionStatus(status) {
1827
+ const statuses = {
1828
+ '0': 'pending',
1829
+ '1': 'ok',
1830
+ '2': 'failed',
1831
+ '3': 'pending',
1832
+ };
1833
+ return this.safeString(statuses, status, status);
1834
+ }
1835
+ parseLedgerEntryType(type) {
1836
+ const types = {
1837
+ '1': 'transfer',
1838
+ '2': 'trade',
1839
+ '3': 'trade',
1840
+ '4': 'rebate',
1841
+ '5': 'trade',
1842
+ '6': 'transfer',
1843
+ '7': 'trade',
1844
+ '8': 'fee',
1845
+ '9': 'trade',
1846
+ '10': 'trade',
1847
+ '11': 'trade', // system token conversion
1848
+ };
1849
+ return this.safeString(types, type, type);
1850
+ }
1851
+ parseLedgerEntry(item, currency = undefined) {
1852
+ const currencyId = this.safeString(item, 'currency');
1853
+ const code = this.safeCurrencyCode(currencyId, currency);
1854
+ currency = this.safeCurrency(currencyId, currency);
1855
+ const timestamp = this.safeInteger(item, 'ts');
1856
+ return this.safeLedgerEntry({
1857
+ 'info': item,
1858
+ 'id': this.safeString(item, 'transferId'),
1859
+ 'direction': undefined,
1860
+ 'account': undefined,
1861
+ 'referenceId': this.safeString(item, 'clientId'),
1862
+ 'referenceAccount': undefined,
1863
+ 'type': this.parseLedgerEntryType(this.safeString(item, 'type')),
1864
+ 'currency': code,
1865
+ 'amount': this.safeNumber(item, 'amount'),
1866
+ 'timestamp': timestamp,
1867
+ 'datetime': this.iso8601(timestamp),
1868
+ 'before': undefined,
1869
+ 'after': undefined,
1870
+ 'status': 'ok',
1871
+ 'fee': undefined,
1872
+ }, currency);
1873
+ }
1874
+ parseIds(ids) {
1875
+ /**
1876
+ * @ignore
1877
+ * @method
1878
+ * @name blofin#parseIds
1879
+ * @param {string[]|string} ids order ids
1880
+ * @returns {string[]} list of order ids
1881
+ */
1882
+ if (typeof ids === 'string') {
1883
+ return ids.split(',');
1884
+ }
1885
+ else {
1886
+ return ids;
1887
+ }
1888
+ }
1889
+ /**
1890
+ * @method
1891
+ * @name blofin#cancelOrders
1892
+ * @description cancel multiple orders
1893
+ * @see https://blofin.com/docs#cancel-multiple-orders
1894
+ * @param {string[]} ids order ids
1895
+ * @param {string} symbol unified market symbol
1896
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1897
+ * @param {boolean} [params.trigger] whether the order is a stop/trigger order
1898
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1899
+ */
1900
+ async cancelOrders(ids, symbol = undefined, params = {}) {
1901
+ // TODO : the original endpoint signature differs, according to that you can skip individual symbol and assign ids in batch. At this moment, `params` is not being used too.
1902
+ if (symbol === undefined) {
1903
+ throw new ArgumentsRequired(this.id + ' cancelOrders() requires a symbol argument');
1904
+ }
1905
+ await this.loadMarkets();
1906
+ const market = this.market(symbol);
1907
+ const request = [];
1908
+ const options = this.safeDict(this.options, 'cancelOrders', {});
1909
+ const defaultMethod = this.safeString(options, 'method', 'privatePostTradeCancelBatchOrders');
1910
+ let method = this.safeString(params, 'method', defaultMethod);
1911
+ const clientOrderIds = this.parseIds(this.safeValue(params, 'clientOrderId'));
1912
+ const tpslIds = this.parseIds(this.safeValue(params, 'tpslId'));
1913
+ const trigger = this.safeBoolN(params, ['stop', 'trigger', 'tpsl']);
1914
+ if (trigger) {
1915
+ method = 'privatePostTradeCancelTpsl';
1916
+ }
1917
+ if (clientOrderIds === undefined) {
1918
+ ids = this.parseIds(ids);
1919
+ if (tpslIds !== undefined) {
1920
+ for (let i = 0; i < tpslIds.length; i++) {
1921
+ request.push({
1922
+ 'tpslId': tpslIds[i],
1923
+ 'instId': market['id'],
1924
+ });
1925
+ }
1926
+ }
1927
+ for (let i = 0; i < ids.length; i++) {
1928
+ if (trigger) {
1929
+ request.push({
1930
+ 'tpslId': ids[i],
1931
+ 'instId': market['id'],
1932
+ });
1933
+ }
1934
+ else {
1935
+ request.push({
1936
+ 'orderId': ids[i],
1937
+ 'instId': market['id'],
1938
+ });
1939
+ }
1940
+ }
1941
+ }
1942
+ else {
1943
+ for (let i = 0; i < clientOrderIds.length; i++) {
1944
+ request.push({
1945
+ 'instId': market['id'],
1946
+ 'clientOrderId': clientOrderIds[i],
1947
+ });
1948
+ }
1949
+ }
1950
+ let response = undefined;
1951
+ if (method === 'privatePostTradeCancelTpsl') {
1952
+ response = await this.privatePostTradeCancelTpsl(request); // * dont extend with params, otherwise ARRAY will be turned into OBJECT
1953
+ }
1954
+ else {
1955
+ response = await this.privatePostTradeCancelBatchOrders(request); // * dont extend with params, otherwise ARRAY will be turned into OBJECT
1956
+ }
1957
+ const ordersData = this.safeList(response, 'data', []);
1958
+ return this.parseOrders(ordersData, market, undefined, undefined, params);
1959
+ }
1960
+ /**
1961
+ * @method
1962
+ * @name blofin#transfer
1963
+ * @description transfer currency internally between wallets on the same account
1964
+ * @see https://blofin.com/docs#funds-transfer
1965
+ * @param {string} code unified currency code
1966
+ * @param {float} amount amount to transfer
1967
+ * @param {string} fromAccount account to transfer from (funding, swap, copy_trading, earn)
1968
+ * @param {string} toAccount account to transfer to (funding, swap, copy_trading, earn)
1969
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1970
+ * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
1971
+ */
1972
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
1973
+ await this.loadMarkets();
1974
+ const currency = this.currency(code);
1975
+ const accountsByType = this.safeDict(this.options, 'accountsByType', {});
1976
+ const fromId = this.safeString(accountsByType, fromAccount, fromAccount);
1977
+ const toId = this.safeString(accountsByType, toAccount, toAccount);
1978
+ const request = {
1979
+ 'currency': currency['id'],
1980
+ 'amount': this.currencyToPrecision(code, amount),
1981
+ 'fromAccount': fromId,
1982
+ 'toAccount': toId,
1983
+ };
1984
+ const response = await this.privatePostAssetTransfer(this.extend(request, params));
1985
+ const data = this.safeDict(response, 'data', {});
1986
+ return this.parseTransfer(data, currency);
1987
+ }
1988
+ parseTransfer(transfer, currency = undefined) {
1989
+ const id = this.safeString(transfer, 'transferId');
1990
+ return {
1991
+ 'info': transfer,
1992
+ 'id': id,
1993
+ 'timestamp': undefined,
1994
+ 'datetime': undefined,
1995
+ 'currency': undefined,
1996
+ 'amount': undefined,
1997
+ 'fromAccount': undefined,
1998
+ 'toAccount': undefined,
1999
+ 'status': undefined,
2000
+ };
2001
+ }
2002
+ /**
2003
+ * @method
2004
+ * @name blofin#fetchPosition
2005
+ * @description fetch data on a single open contract trade position
2006
+ * @see https://blofin.com/docs#get-positions
2007
+ * @param {string} symbol unified market symbol of the market the position is held in, default is undefined
2008
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2009
+ * @param {string} [params.instType] MARGIN, SWAP, FUTURES, OPTION
2010
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2011
+ */
2012
+ async fetchPosition(symbol, params = {}) {
2013
+ await this.loadMarkets();
2014
+ const market = this.market(symbol);
2015
+ const request = {
2016
+ 'instId': market['id'],
2017
+ };
2018
+ const response = await this.privateGetAccountPositions(this.extend(request, params));
2019
+ const data = this.safeList(response, 'data', []);
2020
+ const position = this.safeDict(data, 0);
2021
+ if (position === undefined) {
2022
+ return undefined;
2023
+ }
2024
+ return this.parsePosition(position, market);
2025
+ }
2026
+ /**
2027
+ * @method
2028
+ * @name blofin#fetchPositions
2029
+ * @description fetch data on a single open contract trade position
2030
+ * @see https://blofin.com/docs#get-positions
2031
+ * @param {string[]} [symbols] list of unified market symbols
2032
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2033
+ * @param {string} [params.instType] MARGIN, SWAP, FUTURES, OPTION
2034
+ * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2035
+ */
2036
+ async fetchPositions(symbols = undefined, params = {}) {
2037
+ await this.loadMarkets();
2038
+ symbols = this.marketSymbols(symbols);
2039
+ const response = await this.privateGetAccountPositions(params);
2040
+ const data = this.safeList(response, 'data', []);
2041
+ const result = this.parsePositions(data);
2042
+ return this.filterByArrayPositions(result, 'symbol', symbols, false);
2043
+ }
2044
+ parsePosition(position, market = undefined) {
2045
+ //
2046
+ // response similar for REST & WS
2047
+ //
2048
+ // {
2049
+ // instType: 'SWAP',
2050
+ // instId: 'LTC-USDT',
2051
+ // marginMode: 'cross',
2052
+ // positionId: '644159',
2053
+ // positionSide: 'net',
2054
+ // positions: '1',
2055
+ // availablePositions: '1',
2056
+ // averagePrice: '68.16',
2057
+ // unrealizedPnl: '0.80631223',
2058
+ // unrealizedPnlRatio: '0.03548909463028169',
2059
+ // leverage: '3',
2060
+ // liquidationPrice: '10.116655172370356435',
2061
+ // markPrice: '68.96',
2062
+ // initialMargin: '22.988770743333333333',
2063
+ // margin: '', // this field might not exist in rest response
2064
+ // marginRatio: '152.523509620342499273',
2065
+ // maintenanceMargin: '0.34483156115',
2066
+ // adl: '4',
2067
+ // createTime: '1707235776528',
2068
+ // updateTime: '1707235776528'
2069
+ // }
2070
+ //
2071
+ const marketId = this.safeString(position, 'instId');
2072
+ market = this.safeMarket(marketId, market);
2073
+ const symbol = market['symbol'];
2074
+ const pos = this.safeString(position, 'positions');
2075
+ const contractsAbs = Precise.stringAbs(pos);
2076
+ let side = this.safeString(position, 'positionSide');
2077
+ const hedged = side !== 'net';
2078
+ const contracts = this.parseNumber(contractsAbs);
2079
+ if (pos !== undefined) {
2080
+ if (side === 'net') {
2081
+ if (Precise.stringGt(pos, '0')) {
2082
+ side = 'long';
2083
+ }
2084
+ else if (Precise.stringLt(pos, '0')) {
2085
+ side = 'short';
2086
+ }
2087
+ else {
2088
+ side = undefined;
2089
+ }
2090
+ }
2091
+ }
2092
+ const contractSize = this.safeNumber(market, 'contractSize');
2093
+ const contractSizeString = this.numberToString(contractSize);
2094
+ const markPriceString = this.safeString(position, 'markPrice');
2095
+ let notionalString = this.safeString(position, 'notionalUsd');
2096
+ if (market['inverse']) {
2097
+ notionalString = Precise.stringDiv(Precise.stringMul(contractsAbs, contractSizeString), markPriceString);
2098
+ }
2099
+ const notional = this.parseNumber(notionalString);
2100
+ const marginMode = this.safeString(position, 'marginMode');
2101
+ let initialMarginString = undefined;
2102
+ const entryPriceString = this.safeString(position, 'averagePrice');
2103
+ const unrealizedPnlString = this.safeString(position, 'unrealizedPnl');
2104
+ const leverageString = this.safeString(position, 'leverage');
2105
+ let initialMarginPercentage = undefined;
2106
+ let collateralString = undefined;
2107
+ if (marginMode === 'cross') {
2108
+ initialMarginString = this.safeString(position, 'initialMargin');
2109
+ collateralString = Precise.stringAdd(initialMarginString, unrealizedPnlString);
2110
+ }
2111
+ else if (marginMode === 'isolated') {
2112
+ initialMarginPercentage = Precise.stringDiv('1', leverageString);
2113
+ collateralString = this.safeString(position, 'margin');
2114
+ }
2115
+ const maintenanceMarginString = this.safeString(position, 'maintenanceMargin');
2116
+ const maintenanceMargin = this.parseNumber(maintenanceMarginString);
2117
+ const maintenanceMarginPercentageString = Precise.stringDiv(maintenanceMarginString, notionalString);
2118
+ if (initialMarginPercentage === undefined) {
2119
+ initialMarginPercentage = this.parseNumber(Precise.stringDiv(initialMarginString, notionalString, 4));
2120
+ }
2121
+ else if (initialMarginString === undefined) {
2122
+ initialMarginString = Precise.stringMul(initialMarginPercentage, notionalString);
2123
+ }
2124
+ const rounder = '0.00005'; // round to closest 0.01%
2125
+ const maintenanceMarginPercentage = this.parseNumber(Precise.stringDiv(Precise.stringAdd(maintenanceMarginPercentageString, rounder), '1', 4));
2126
+ const liquidationPrice = this.safeNumber(position, 'liquidationPrice');
2127
+ const percentageString = this.safeString(position, 'unrealizedPnlRatio');
2128
+ const percentage = this.parseNumber(Precise.stringMul(percentageString, '100'));
2129
+ const timestamp = this.safeInteger(position, 'updateTime');
2130
+ const marginRatio = this.parseNumber(Precise.stringDiv(maintenanceMarginString, collateralString, 4));
2131
+ return this.safePosition({
2132
+ 'info': position,
2133
+ 'id': undefined,
2134
+ 'symbol': symbol,
2135
+ 'notional': notional,
2136
+ 'marginMode': marginMode,
2137
+ 'liquidationPrice': liquidationPrice,
2138
+ 'entryPrice': this.parseNumber(entryPriceString),
2139
+ 'unrealizedPnl': this.parseNumber(unrealizedPnlString),
2140
+ 'percentage': percentage,
2141
+ 'contracts': contracts,
2142
+ 'contractSize': contractSize,
2143
+ 'markPrice': this.parseNumber(markPriceString),
2144
+ 'lastPrice': undefined,
2145
+ 'side': side,
2146
+ 'hedged': hedged,
2147
+ 'timestamp': timestamp,
2148
+ 'datetime': this.iso8601(timestamp),
2149
+ 'lastUpdateTimestamp': undefined,
2150
+ 'maintenanceMargin': maintenanceMargin,
2151
+ 'maintenanceMarginPercentage': maintenanceMarginPercentage,
2152
+ 'collateral': this.parseNumber(collateralString),
2153
+ 'initialMargin': this.parseNumber(initialMarginString),
2154
+ 'initialMarginPercentage': this.parseNumber(initialMarginPercentage),
2155
+ 'leverage': this.parseNumber(leverageString),
2156
+ 'marginRatio': marginRatio,
2157
+ 'stopLossPrice': undefined,
2158
+ 'takeProfitPrice': undefined,
2159
+ });
2160
+ }
2161
+ /**
2162
+ * @method
2163
+ * @name blofin#fetchLeverages
2164
+ * @description fetch the set leverage for all contract markets
2165
+ * @see https://docs.blofin.com/index.html#get-multiple-leverage
2166
+ * @param {string[]} symbols a list of unified market symbols, required on blofin
2167
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2168
+ * @param {string} [params.marginMode] 'cross' or 'isolated'
2169
+ * @returns {object} a list of [leverage structures]{@link https://docs.ccxt.com/#/?id=leverage-structure}
2170
+ */
2171
+ async fetchLeverages(symbols = undefined, params = {}) {
2172
+ await this.loadMarkets();
2173
+ if (symbols === undefined) {
2174
+ throw new ArgumentsRequired(this.id + ' fetchLeverages() requires a symbols argument');
2175
+ }
2176
+ let marginMode = undefined;
2177
+ [marginMode, params] = this.handleMarginModeAndParams('fetchLeverages', params);
2178
+ if (marginMode === undefined) {
2179
+ marginMode = this.safeString(params, 'marginMode', 'cross'); // cross as default marginMode
2180
+ }
2181
+ if ((marginMode !== 'cross') && (marginMode !== 'isolated')) {
2182
+ throw new BadRequest(this.id + ' fetchLeverages() requires a marginMode parameter that must be either cross or isolated');
2183
+ }
2184
+ symbols = this.marketSymbols(symbols);
2185
+ let instIds = '';
2186
+ for (let i = 0; i < symbols.length; i++) {
2187
+ const entry = symbols[i];
2188
+ const entryMarket = this.market(entry);
2189
+ if (i > 0) {
2190
+ instIds = instIds + ',' + entryMarket['id'];
2191
+ }
2192
+ else {
2193
+ instIds = instIds + entryMarket['id'];
2194
+ }
2195
+ }
2196
+ const request = {
2197
+ 'instId': instIds,
2198
+ 'marginMode': marginMode,
2199
+ };
2200
+ const response = await this.privateGetAccountBatchLeverageInfo(this.extend(request, params));
2201
+ //
2202
+ // {
2203
+ // "code": "0",
2204
+ // "msg": "success",
2205
+ // "data": [
2206
+ // {
2207
+ // "leverage": "3",
2208
+ // "marginMode": "cross",
2209
+ // "instId": "BTC-USDT"
2210
+ // },
2211
+ // ]
2212
+ // }
2213
+ //
2214
+ const leverages = this.safeList(response, 'data', []);
2215
+ return this.parseLeverages(leverages, symbols, 'instId');
2216
+ }
2217
+ /**
2218
+ * @method
2219
+ * @name blofin#fetchLeverage
2220
+ * @description fetch the set leverage for a market
2221
+ * @see https://docs.blofin.com/index.html#get-leverage
2222
+ * @param {string} symbol unified market symbol
2223
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2224
+ * @param {string} [params.marginMode] 'cross' or 'isolated'
2225
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
2226
+ */
2227
+ async fetchLeverage(symbol, params = {}) {
2228
+ await this.loadMarkets();
2229
+ let marginMode = undefined;
2230
+ [marginMode, params] = this.handleMarginModeAndParams('fetchLeverage', params);
2231
+ if (marginMode === undefined) {
2232
+ marginMode = this.safeString(params, 'marginMode', 'cross'); // cross as default marginMode
2233
+ }
2234
+ if ((marginMode !== 'cross') && (marginMode !== 'isolated')) {
2235
+ throw new BadRequest(this.id + ' fetchLeverage() requires a marginMode parameter that must be either cross or isolated');
2236
+ }
2237
+ const market = this.market(symbol);
2238
+ const request = {
2239
+ 'instId': market['id'],
2240
+ 'marginMode': marginMode,
2241
+ };
2242
+ const response = await this.privateGetAccountLeverageInfo(this.extend(request, params));
2243
+ //
2244
+ // {
2245
+ // "code": "0",
2246
+ // "msg": "success",
2247
+ // "data": {
2248
+ // "leverage": "3",
2249
+ // "marginMode": "cross",
2250
+ // "instId": "BTC-USDT"
2251
+ // }
2252
+ // }
2253
+ //
2254
+ const data = this.safeDict(response, 'data', {});
2255
+ return this.parseLeverage(data, market);
2256
+ }
2257
+ parseLeverage(leverage, market = undefined) {
2258
+ const marketId = this.safeString(leverage, 'instId');
2259
+ const leverageValue = this.safeInteger(leverage, 'leverage');
2260
+ return {
2261
+ 'info': leverage,
2262
+ 'symbol': this.safeSymbol(marketId, market),
2263
+ 'marginMode': this.safeStringLower(leverage, 'marginMode'),
2264
+ 'longLeverage': leverageValue,
2265
+ 'shortLeverage': leverageValue,
2266
+ };
2267
+ }
2268
+ /**
2269
+ * @method
2270
+ * @name blofin#setLeverage
2271
+ * @description set the level of leverage for a market
2272
+ * @see https://blofin.com/docs#set-leverage
2273
+ * @param {int} leverage the rate of leverage
2274
+ * @param {string} symbol unified market symbol
2275
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2276
+ * @param {string} [params.marginMode] 'cross' or 'isolated'
2277
+ * @param {string} [params.positionSide] 'long' or 'short' - required for hedged mode in isolated margin
2278
+ * @returns {object} response from the exchange
2279
+ */
2280
+ async setLeverage(leverage, symbol = undefined, params = {}) {
2281
+ if (symbol === undefined) {
2282
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
2283
+ }
2284
+ // WARNING: THIS WILL INCREASE LIQUIDATION PRICE FOR OPEN ISOLATED LONG POSITIONS
2285
+ // AND DECREASE LIQUIDATION PRICE FOR OPEN ISOLATED SHORT POSITIONS
2286
+ if ((leverage < 1) || (leverage > 125)) {
2287
+ throw new BadRequest(this.id + ' setLeverage() leverage should be between 1 and 125');
2288
+ }
2289
+ await this.loadMarkets();
2290
+ const market = this.market(symbol);
2291
+ let marginMode = undefined;
2292
+ [marginMode, params] = this.handleMarginModeAndParams('setLeverage', params, 'cross');
2293
+ if ((marginMode !== 'cross') && (marginMode !== 'isolated')) {
2294
+ throw new BadRequest(this.id + ' setLeverage() requires a marginMode parameter that must be either cross or isolated');
2295
+ }
2296
+ const request = {
2297
+ 'leverage': leverage,
2298
+ 'marginMode': marginMode,
2299
+ 'instId': market['id'],
2300
+ };
2301
+ const response = await this.privatePostAccountSetLeverage(this.extend(request, params));
2302
+ return response;
2303
+ }
2304
+ /**
2305
+ * @method
2306
+ * @name blofin#closePosition
2307
+ * @description closes open positions for a market
2308
+ * @see https://blofin.com/docs#close-positions
2309
+ * @param {string} symbol Unified CCXT market symbol
2310
+ * @param {string} [side] 'buy' or 'sell', leave as undefined in net mode
2311
+ * @param {object} [params] extra parameters specific to the blofin api endpoint
2312
+ * @param {string} [params.clientOrderId] a unique identifier for the order
2313
+ * @param {string} [params.marginMode] 'cross' or 'isolated', default is 'cross;
2314
+ * @param {string} [params.code] *required in the case of closing cross MARGIN position for Single-currency margin* margin currency
2315
+ *
2316
+ * EXCHANGE SPECIFIC PARAMETERS
2317
+ * @param {boolean} [params.autoCxl] whether any pending orders for closing out needs to be automatically canceled when close position via a market order. false or true, the default is false
2318
+ * @param {string} [params.tag] order tag a combination of case-sensitive alphanumerics, all numbers, or all letters of up to 16 characters
2319
+ * @returns {object[]} [A list of position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
2320
+ */
2321
+ async closePosition(symbol, side = undefined, params = {}) {
2322
+ await this.loadMarkets();
2323
+ const market = this.market(symbol);
2324
+ const clientOrderId = this.safeString(params, 'clientOrderId');
2325
+ let marginMode = undefined;
2326
+ [marginMode, params] = this.handleMarginModeAndParams('closePosition', params, 'cross');
2327
+ const request = {
2328
+ 'instId': market['id'],
2329
+ 'marginMode': marginMode,
2330
+ };
2331
+ if (clientOrderId !== undefined) {
2332
+ request['clientOrderId'] = clientOrderId;
2333
+ }
2334
+ const response = await this.privatePostTradeClosePosition(this.extend(request, params));
2335
+ return this.safeDict(response, 'data');
2336
+ }
2337
+ /**
2338
+ * @method
2339
+ * @name blofin#fetchClosedOrders
2340
+ * @description fetches information on multiple closed orders made by the user
2341
+ * @see https://blofin.com/docs#get-order-history
2342
+ * @see https://blofin.com/docs#get-tpsl-order-history
2343
+ * @param {string} symbol unified market symbol of the market orders were made in
2344
+ * @param {int} [since] the earliest time in ms to fetch orders for
2345
+ * @param {int} [limit] the maximum number of orde structures to retrieve
2346
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2347
+ * @param {bool} [params.trigger] True if fetching trigger or conditional orders
2348
+ * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
2349
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2350
+ */
2351
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2352
+ await this.loadMarkets();
2353
+ let paginate = false;
2354
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchClosedOrders', 'paginate');
2355
+ if (paginate) {
2356
+ return await this.fetchPaginatedCallDynamic('fetchClosedOrders', symbol, since, limit, params);
2357
+ }
2358
+ const request = {};
2359
+ let market = undefined;
2360
+ if (symbol !== undefined) {
2361
+ market = this.market(symbol);
2362
+ request['instId'] = market['id'];
2363
+ }
2364
+ if (limit !== undefined) {
2365
+ request['limit'] = limit; // default 100, max 100
2366
+ }
2367
+ if (since !== undefined) {
2368
+ request['begin'] = since;
2369
+ }
2370
+ const isTrigger = this.safeBoolN(params, ['stop', 'trigger', 'tpsl', 'TPSL'], false);
2371
+ let method = undefined;
2372
+ [method, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'method', 'privateGetTradeOrdersHistory');
2373
+ const query = this.omit(params, ['method', 'stop', 'trigger', 'tpsl', 'TPSL']);
2374
+ let response = undefined;
2375
+ if ((isTrigger) || (method === 'privateGetTradeOrdersTpslHistory')) {
2376
+ response = await this.privateGetTradeOrdersTpslHistory(this.extend(request, query));
2377
+ }
2378
+ else {
2379
+ response = await this.privateGetTradeOrdersHistory(this.extend(request, query));
2380
+ }
2381
+ const data = this.safeList(response, 'data', []);
2382
+ return this.parseOrders(data, market, since, limit);
2383
+ }
2384
+ /**
2385
+ * @method
2386
+ * @name blofin#fetchMarginMode
2387
+ * @description fetches the margin mode of a trading pair
2388
+ * @see https://docs.blofin.com/index.html#get-margin-mode
2389
+ * @param {string} symbol unified symbol of the market to fetch the margin mode for
2390
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2391
+ * @returns {object} a [margin mode structure]{@link https://docs.ccxt.com/#/?id=margin-mode-structure}
2392
+ */
2393
+ async fetchMarginMode(symbol, params = {}) {
2394
+ await this.loadMarkets();
2395
+ const market = this.market(symbol);
2396
+ const response = await this.privateGetAccountMarginMode(params);
2397
+ //
2398
+ // {
2399
+ // "code": "0",
2400
+ // "msg": "success",
2401
+ // "data": {
2402
+ // "marginMode": "cross"
2403
+ // }
2404
+ // }
2405
+ //
2406
+ const data = this.safeDict(response, 'data', {});
2407
+ return this.parseMarginMode(data, market);
2408
+ }
2409
+ parseMarginMode(marginMode, market = undefined) {
2410
+ return {
2411
+ 'info': marginMode,
2412
+ 'symbol': this.safeString(market, 'symbol'),
2413
+ 'marginMode': this.safeString(marginMode, 'marginMode'),
2414
+ };
2415
+ }
2416
+ /**
2417
+ * @method
2418
+ * @name blofin#setMarginMode
2419
+ * @description set margin mode to 'cross' or 'isolated'
2420
+ * @see https://docs.blofin.com/index.html#set-margin-mode
2421
+ * @param {string} marginMode 'cross' or 'isolated'
2422
+ * @param {string} [symbol] unified market symbol (not used in blofin setMarginMode)
2423
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2424
+ * @returns {object} response from the exchange
2425
+ */
2426
+ async setMarginMode(marginMode, symbol = undefined, params = {}) {
2427
+ this.checkRequiredArgument('setMarginMode', marginMode, 'marginMode', ['cross', 'isolated']);
2428
+ await this.loadMarkets();
2429
+ let market = undefined;
2430
+ if (symbol !== undefined) {
2431
+ market = this.market(symbol);
2432
+ }
2433
+ const request = {
2434
+ 'marginMode': marginMode,
2435
+ };
2436
+ const response = await this.privatePostAccountSetMarginMode(this.extend(request, params));
2437
+ //
2438
+ // {
2439
+ // "code": "0",
2440
+ // "msg": "success",
2441
+ // "data": {
2442
+ // "marginMode": "isolated"
2443
+ // }
2444
+ // }
2445
+ //
2446
+ const data = this.safeDict(response, 'data', {});
2447
+ return this.parseMarginMode(data, market);
2448
+ }
2449
+ /**
2450
+ * @method
2451
+ * @name blofin#fetchPositionMode
2452
+ * @description fetchs the position mode, hedged or one way
2453
+ * @see https://docs.blofin.com/index.html#get-position-mode
2454
+ * @param {string} [symbol] unified symbol of the market to fetch the position mode for (not used in blofin fetchPositionMode)
2455
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2456
+ * @returns {object} an object detailing whether the market is in hedged or one-way mode
2457
+ */
2458
+ async fetchPositionMode(symbol = undefined, params = {}) {
2459
+ const response = await this.privateGetAccountPositionMode(params);
2460
+ const data = this.safeDict(response, 'data', {});
2461
+ const positionMode = this.safeString(data, 'positionMode');
2462
+ //
2463
+ // {
2464
+ // "code": "0",
2465
+ // "msg": "success",
2466
+ // "data": {
2467
+ // "positionMode": "long_short_mode"
2468
+ // }
2469
+ // }
2470
+ //
2471
+ return {
2472
+ 'info': data,
2473
+ 'hedged': positionMode === 'long_short_mode',
2474
+ };
2475
+ }
2476
+ /**
2477
+ * @method
2478
+ * @name blofin#setPositionMode
2479
+ * @description set hedged to true or false for a market
2480
+ * @see https://docs.blofin.com/index.html#set-position-mode
2481
+ * @param {bool} hedged set to true to use hedged mode, false for one-way mode
2482
+ * @param {string} [symbol] not used by blofin setPositionMode ()
2483
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2484
+ * @returns {object} response from the exchange
2485
+ */
2486
+ async setPositionMode(hedged, symbol = undefined, params = {}) {
2487
+ const request = {
2488
+ 'positionMode': hedged ? 'long_short_mode' : 'net_mode',
2489
+ };
2490
+ //
2491
+ // {
2492
+ // "code": "0",
2493
+ // "msg": "success",
2494
+ // "data": {
2495
+ // "positionMode": "net_mode"
2496
+ // }
2497
+ // }
2498
+ //
2499
+ return await this.privatePostAccountSetPositionMode(this.extend(request, params));
2500
+ }
2501
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2502
+ if (response === undefined) {
2503
+ return undefined; // fallback to default error handler
2504
+ }
2505
+ //
2506
+ // {"code":"152002","msg":"Parameter bar error."}
2507
+ //
2508
+ const code = this.safeString(response, 'code');
2509
+ const message = this.safeString(response, 'msg');
2510
+ const feedback = this.id + ' ' + body;
2511
+ if (code !== undefined && code !== '0') {
2512
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
2513
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
2514
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
2515
+ throw new ExchangeError(feedback); // unknown message
2516
+ }
2517
+ //
2518
+ // {
2519
+ // orderId: null,
2520
+ // clientOrderId: '',
2521
+ // msg: 'Order failed. Insufficient USDT margin in account',
2522
+ // code: '103003'
2523
+ // }
2524
+ //
2525
+ const data = this.safeList(response, 'data');
2526
+ const first = this.safeDict(data, 0);
2527
+ const insideMsg = this.safeString(first, 'msg');
2528
+ const insideCode = this.safeString(first, 'code');
2529
+ if (insideCode !== undefined && insideCode !== '0') {
2530
+ this.throwExactlyMatchedException(this.exceptions['exact'], insideCode, feedback);
2531
+ this.throwExactlyMatchedException(this.exceptions['exact'], insideMsg, feedback);
2532
+ this.throwBroadlyMatchedException(this.exceptions['broad'], insideMsg, feedback);
2533
+ }
2534
+ return undefined;
2535
+ }
2536
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2537
+ let request = '/api/' + this.version + '/' + this.implodeParams(path, params);
2538
+ const query = this.omit(params, this.extractParams(path));
2539
+ let url = this.implodeHostname(this.urls['api']['rest']) + request;
2540
+ // const type = this.getPathAuthenticationType (path);
2541
+ if (api === 'public') {
2542
+ if (!this.isEmpty(query)) {
2543
+ url += '?' + this.urlencode(query);
2544
+ }
2545
+ }
2546
+ else if (api === 'private') {
2547
+ this.checkRequiredCredentials();
2548
+ const timestamp = this.milliseconds().toString();
2549
+ headers = {
2550
+ 'ACCESS-KEY': this.apiKey,
2551
+ 'ACCESS-PASSPHRASE': this.password,
2552
+ 'ACCESS-TIMESTAMP': timestamp,
2553
+ 'ACCESS-NONCE': timestamp,
2554
+ };
2555
+ let sign_body = '';
2556
+ if (method === 'GET') {
2557
+ if (!this.isEmpty(query)) {
2558
+ const urlencodedQuery = '?' + this.urlencode(query);
2559
+ url += urlencodedQuery;
2560
+ request += urlencodedQuery;
2561
+ }
2562
+ }
2563
+ else {
2564
+ if (!this.isEmpty(query)) {
2565
+ body = this.json(query);
2566
+ sign_body = body;
2567
+ }
2568
+ headers['Content-Type'] = 'application/json';
2569
+ }
2570
+ const auth = request + method + timestamp + timestamp + sign_body;
2571
+ const signature = this.stringToBase64(this.hmac(this.encode(auth), this.encode(this.secret), sha256));
2572
+ headers['ACCESS-SIGN'] = signature;
2573
+ }
2574
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
2575
+ }
2576
+ }