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,3951 @@
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 { ExchangeError, ArgumentsRequired, InsufficientFunds, AuthenticationError, OrderNotFound, InvalidOrder, BadRequest, InvalidNonce, BadSymbol, OnMaintenance, NotSupported, PermissionDenied, ExchangeNotAvailable, RateLimitExceeded } from './base/errors.js';
9
+ import { Precise } from './base/Precise.js';
10
+ import Exchange from './abstract/bitfinex.js';
11
+ import { SIGNIFICANT_DIGITS, DECIMAL_PLACES, TRUNCATE, ROUND } from './base/functions/number.js';
12
+ import { sha384 } from './static_dependencies/noble-hashes/sha512.js';
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class bitfinex
16
+ * @augments Exchange
17
+ */
18
+ export default class bitfinex extends Exchange {
19
+ describe() {
20
+ return this.deepExtend(super.describe(), {
21
+ 'id': 'bitfinex',
22
+ 'name': 'Bitfinex',
23
+ 'countries': ['VG'],
24
+ 'version': 'v2',
25
+ 'certified': false,
26
+ 'pro': true,
27
+ // new metainfo interface
28
+ 'has': {
29
+ 'CORS': undefined,
30
+ 'spot': true,
31
+ 'margin': true,
32
+ 'swap': true,
33
+ 'future': false,
34
+ 'option': false,
35
+ 'addMargin': false,
36
+ 'borrowCrossMargin': false,
37
+ 'borrowIsolatedMargin': false,
38
+ 'cancelAllOrders': true,
39
+ 'cancelOrder': true,
40
+ 'cancelOrders': true,
41
+ 'createDepositAddress': true,
42
+ 'createLimitOrder': true,
43
+ 'createMarketOrder': true,
44
+ 'createOrder': true,
45
+ 'createPostOnlyOrder': true,
46
+ 'createReduceOnlyOrder': true,
47
+ 'createStopLimitOrder': true,
48
+ 'createStopMarketOrder': true,
49
+ 'createStopOrder': true,
50
+ 'createTrailingAmountOrder': true,
51
+ 'createTrailingPercentOrder': false,
52
+ 'createTriggerOrder': true,
53
+ 'editOrder': true,
54
+ 'fetchBalance': true,
55
+ 'fetchBorrowInterest': false,
56
+ 'fetchBorrowRate': false,
57
+ 'fetchBorrowRateHistories': false,
58
+ 'fetchBorrowRateHistory': false,
59
+ 'fetchBorrowRates': false,
60
+ 'fetchBorrowRatesPerSymbol': false,
61
+ 'fetchClosedOrder': true,
62
+ 'fetchClosedOrders': true,
63
+ 'fetchCrossBorrowRate': false,
64
+ 'fetchCrossBorrowRates': false,
65
+ 'fetchCurrencies': true,
66
+ 'fetchDepositAddress': true,
67
+ 'fetchDepositAddresses': false,
68
+ 'fetchDepositAddressesByNetwork': false,
69
+ 'fetchDepositsWithdrawals': true,
70
+ 'fetchFundingHistory': false,
71
+ 'fetchFundingRate': 'emulated',
72
+ 'fetchFundingRateHistory': true,
73
+ 'fetchFundingRates': true,
74
+ 'fetchIndexOHLCV': false,
75
+ 'fetchIsolatedBorrowRate': false,
76
+ 'fetchIsolatedBorrowRates': false,
77
+ 'fetchLedger': true,
78
+ 'fetchLeverage': false,
79
+ 'fetchLeverageTiers': false,
80
+ 'fetchLiquidations': true,
81
+ 'fetchMarginMode': false,
82
+ 'fetchMarketLeverageTiers': false,
83
+ 'fetchMarkOHLCV': false,
84
+ 'fetchMyTrades': true,
85
+ 'fetchOHLCV': true,
86
+ 'fetchOpenInterest': true,
87
+ 'fetchOpenInterestHistory': true,
88
+ 'fetchOpenInterests': true,
89
+ 'fetchOpenOrder': true,
90
+ 'fetchOpenOrders': true,
91
+ 'fetchOrder': true,
92
+ 'fetchOrderBook': true,
93
+ 'fetchOrderBooks': false,
94
+ 'fetchOrderTrades': true,
95
+ 'fetchPosition': false,
96
+ 'fetchPositionMode': false,
97
+ 'fetchPositions': true,
98
+ 'fetchPremiumIndexOHLCV': false,
99
+ 'fetchStatus': true,
100
+ 'fetchTickers': true,
101
+ 'fetchTime': false,
102
+ 'fetchTradingFee': false,
103
+ 'fetchTradingFees': true,
104
+ 'fetchTransactionFees': undefined,
105
+ 'fetchTransactions': 'emulated',
106
+ 'reduceMargin': false,
107
+ 'repayCrossMargin': false,
108
+ 'repayIsolatedMargin': false,
109
+ 'setLeverage': false,
110
+ 'setMargin': true,
111
+ 'setMarginMode': false,
112
+ 'setPositionMode': false,
113
+ 'signIn': false,
114
+ 'transfer': true,
115
+ 'withdraw': true,
116
+ },
117
+ 'timeframes': {
118
+ '1m': '1m',
119
+ '5m': '5m',
120
+ '15m': '15m',
121
+ '30m': '30m',
122
+ '1h': '1h',
123
+ '3h': '3h',
124
+ '4h': '4h',
125
+ '6h': '6h',
126
+ '12h': '12h',
127
+ '1d': '1D',
128
+ '1w': '7D',
129
+ '2w': '14D',
130
+ '1M': '1M',
131
+ },
132
+ // cheapest endpoint is 240 requests per minute => ~ 4 requests per second => ( 1000ms / 4 ) = 250ms between requests on average
133
+ 'rateLimit': 250,
134
+ 'urls': {
135
+ 'logo': 'https://github.com/user-attachments/assets/4a8e947f-ab46-481a-a8ae-8b20e9b03178',
136
+ 'api': {
137
+ 'v1': 'https://api.bitfinex.com',
138
+ 'public': 'https://api-pub.bitfinex.com',
139
+ 'private': 'https://api.bitfinex.com',
140
+ },
141
+ 'www': 'https://www.bitfinex.com',
142
+ 'doc': [
143
+ 'https://docs.bitfinex.com/v2/docs/',
144
+ 'https://github.com/bitfinexcom/bitfinex-api-node',
145
+ ],
146
+ 'fees': 'https://www.bitfinex.com/fees',
147
+ },
148
+ 'api': {
149
+ 'public': {
150
+ 'get': {
151
+ 'conf/{config}': 2.7,
152
+ 'conf/pub:{action}:{object}': 2.7,
153
+ 'conf/pub:{action}:{object}:{detail}': 2.7,
154
+ 'conf/pub:map:{object}': 2.7,
155
+ 'conf/pub:map:{object}:{detail}': 2.7,
156
+ 'conf/pub:map:currency:{detail}': 2.7,
157
+ 'conf/pub:map:currency:sym': 2.7,
158
+ 'conf/pub:map:currency:label': 2.7,
159
+ 'conf/pub:map:currency:unit': 2.7,
160
+ 'conf/pub:map:currency:undl': 2.7,
161
+ 'conf/pub:map:currency:pool': 2.7,
162
+ 'conf/pub:map:currency:explorer': 2.7,
163
+ 'conf/pub:map:currency:tx:fee': 2.7,
164
+ 'conf/pub:map:tx:method': 2.7,
165
+ 'conf/pub:list:{object}': 2.7,
166
+ 'conf/pub:list:{object}:{detail}': 2.7,
167
+ 'conf/pub:list:currency': 2.7,
168
+ 'conf/pub:list:pair:exchange': 2.7,
169
+ 'conf/pub:list:pair:margin': 2.7,
170
+ 'conf/pub:list:pair:futures': 2.7,
171
+ 'conf/pub:list:competitions': 2.7,
172
+ 'conf/pub:info:{object}': 2.7,
173
+ 'conf/pub:info:{object}:{detail}': 2.7,
174
+ 'conf/pub:info:pair': 2.7,
175
+ 'conf/pub:info:pair:futures': 2.7,
176
+ 'conf/pub:info:tx:status': 2.7,
177
+ 'conf/pub:fees': 2.7,
178
+ 'platform/status': 8,
179
+ 'tickers': 2.7,
180
+ 'ticker/{symbol}': 2.7,
181
+ 'tickers/hist': 2.7,
182
+ 'trades/{symbol}/hist': 2.7,
183
+ 'book/{symbol}/{precision}': 1,
184
+ 'book/{symbol}/P0': 1,
185
+ 'book/{symbol}/P1': 1,
186
+ 'book/{symbol}/P2': 1,
187
+ 'book/{symbol}/P3': 1,
188
+ 'book/{symbol}/R0': 1,
189
+ 'stats1/{key}:{size}:{symbol}:{side}/{section}': 2.7,
190
+ 'stats1/{key}:{size}:{symbol}:{side}/last': 2.7,
191
+ 'stats1/{key}:{size}:{symbol}:{side}/hist': 2.7,
192
+ 'stats1/{key}:{size}:{symbol}/{section}': 2.7,
193
+ 'stats1/{key}:{size}:{symbol}/last': 2.7,
194
+ 'stats1/{key}:{size}:{symbol}/hist': 2.7,
195
+ 'stats1/{key}:{size}:{symbol}:long/last': 2.7,
196
+ 'stats1/{key}:{size}:{symbol}:long/hist': 2.7,
197
+ 'stats1/{key}:{size}:{symbol}:short/last': 2.7,
198
+ 'stats1/{key}:{size}:{symbol}:short/hist': 2.7,
199
+ 'candles/trade:{timeframe}:{symbol}:{period}/{section}': 2.7,
200
+ 'candles/trade:{timeframe}:{symbol}/{section}': 2.7,
201
+ 'candles/trade:{timeframe}:{symbol}/last': 2.7,
202
+ 'candles/trade:{timeframe}:{symbol}/hist': 2.7,
203
+ 'status/{type}': 2.7,
204
+ 'status/deriv': 2.7,
205
+ 'status/deriv/{symbol}/hist': 2.7,
206
+ 'liquidations/hist': 80,
207
+ 'rankings/{key}:{timeframe}:{symbol}/{section}': 2.7,
208
+ 'rankings/{key}:{timeframe}:{symbol}/hist': 2.7,
209
+ 'pulse/hist': 2.7,
210
+ 'pulse/profile/{nickname}': 2.7,
211
+ 'funding/stats/{symbol}/hist': 10,
212
+ 'ext/vasps': 1,
213
+ },
214
+ 'post': {
215
+ 'calc/trade/avg': 2.7,
216
+ 'calc/fx': 2.7,
217
+ },
218
+ },
219
+ 'private': {
220
+ 'post': {
221
+ // 'auth/r/orders/{symbol}/new', // outdated
222
+ // 'auth/r/stats/perf:{timeframe}/hist', // outdated
223
+ 'auth/r/wallets': 2.7,
224
+ 'auth/r/wallets/hist': 2.7,
225
+ 'auth/r/orders': 2.7,
226
+ 'auth/r/orders/{symbol}': 2.7,
227
+ 'auth/w/order/submit': 2.7,
228
+ 'auth/w/order/update': 2.7,
229
+ 'auth/w/order/cancel': 2.7,
230
+ 'auth/w/order/multi': 2.7,
231
+ 'auth/w/order/cancel/multi': 2.7,
232
+ 'auth/r/orders/{symbol}/hist': 2.7,
233
+ 'auth/r/orders/hist': 2.7,
234
+ 'auth/r/order/{symbol}:{id}/trades': 2.7,
235
+ 'auth/r/trades/{symbol}/hist': 2.7,
236
+ 'auth/r/trades/hist': 2.7,
237
+ 'auth/r/ledgers/{currency}/hist': 2.7,
238
+ 'auth/r/ledgers/hist': 2.7,
239
+ 'auth/r/info/margin/{key}': 2.7,
240
+ 'auth/r/info/margin/base': 2.7,
241
+ 'auth/r/info/margin/sym_all': 2.7,
242
+ 'auth/r/positions': 2.7,
243
+ 'auth/w/position/claim': 2.7,
244
+ 'auth/w/position/increase:': 2.7,
245
+ 'auth/r/position/increase/info': 2.7,
246
+ 'auth/r/positions/hist': 2.7,
247
+ 'auth/r/positions/audit': 2.7,
248
+ 'auth/r/positions/snap': 2.7,
249
+ 'auth/w/deriv/collateral/set': 2.7,
250
+ 'auth/w/deriv/collateral/limits': 2.7,
251
+ 'auth/r/funding/offers': 2.7,
252
+ 'auth/r/funding/offers/{symbol}': 2.7,
253
+ 'auth/w/funding/offer/submit': 2.7,
254
+ 'auth/w/funding/offer/cancel': 2.7,
255
+ 'auth/w/funding/offer/cancel/all': 2.7,
256
+ 'auth/w/funding/close': 2.7,
257
+ 'auth/w/funding/auto': 2.7,
258
+ 'auth/w/funding/keep': 2.7,
259
+ 'auth/r/funding/offers/{symbol}/hist': 2.7,
260
+ 'auth/r/funding/offers/hist': 2.7,
261
+ 'auth/r/funding/loans': 2.7,
262
+ 'auth/r/funding/loans/hist': 2.7,
263
+ 'auth/r/funding/loans/{symbol}': 2.7,
264
+ 'auth/r/funding/loans/{symbol}/hist': 2.7,
265
+ 'auth/r/funding/credits': 2.7,
266
+ 'auth/r/funding/credits/hist': 2.7,
267
+ 'auth/r/funding/credits/{symbol}': 2.7,
268
+ 'auth/r/funding/credits/{symbol}/hist': 2.7,
269
+ 'auth/r/funding/trades/{symbol}/hist': 2.7,
270
+ 'auth/r/funding/trades/hist': 2.7,
271
+ 'auth/r/info/funding/{key}': 2.7,
272
+ 'auth/r/info/user': 2.7,
273
+ 'auth/r/summary': 2.7,
274
+ 'auth/r/logins/hist': 2.7,
275
+ 'auth/r/permissions': 2.7,
276
+ 'auth/w/token': 2.7,
277
+ 'auth/r/audit/hist': 2.7,
278
+ 'auth/w/transfer': 2.7,
279
+ 'auth/w/deposit/address': 24,
280
+ 'auth/w/deposit/invoice': 24,
281
+ 'auth/w/withdraw': 24,
282
+ 'auth/r/movements/{currency}/hist': 2.7,
283
+ 'auth/r/movements/hist': 2.7,
284
+ 'auth/r/alerts': 5.34,
285
+ 'auth/w/alert/set': 2.7,
286
+ 'auth/w/alert/price:{symbol}:{price}/del': 2.7,
287
+ 'auth/w/alert/{type}:{symbol}:{price}/del': 2.7,
288
+ 'auth/calc/order/avail': 2.7,
289
+ 'auth/w/settings/set': 2.7,
290
+ 'auth/r/settings': 2.7,
291
+ 'auth/w/settings/del': 2.7,
292
+ 'auth/r/pulse/hist': 2.7,
293
+ 'auth/w/pulse/add': 16,
294
+ 'auth/w/pulse/del': 2.7,
295
+ },
296
+ },
297
+ },
298
+ 'fees': {
299
+ 'trading': {
300
+ 'feeSide': 'get',
301
+ 'percentage': true,
302
+ 'tierBased': true,
303
+ 'maker': this.parseNumber('0.001'),
304
+ 'taker': this.parseNumber('0.002'),
305
+ 'tiers': {
306
+ 'taker': [
307
+ [this.parseNumber('0'), this.parseNumber('0.002')],
308
+ [this.parseNumber('500000'), this.parseNumber('0.002')],
309
+ [this.parseNumber('1000000'), this.parseNumber('0.002')],
310
+ [this.parseNumber('2500000'), this.parseNumber('0.002')],
311
+ [this.parseNumber('5000000'), this.parseNumber('0.002')],
312
+ [this.parseNumber('7500000'), this.parseNumber('0.002')],
313
+ [this.parseNumber('10000000'), this.parseNumber('0.0018')],
314
+ [this.parseNumber('15000000'), this.parseNumber('0.0016')],
315
+ [this.parseNumber('20000000'), this.parseNumber('0.0014')],
316
+ [this.parseNumber('25000000'), this.parseNumber('0.0012')],
317
+ [this.parseNumber('30000000'), this.parseNumber('0.001')],
318
+ ],
319
+ 'maker': [
320
+ [this.parseNumber('0'), this.parseNumber('0.001')],
321
+ [this.parseNumber('500000'), this.parseNumber('0.0008')],
322
+ [this.parseNumber('1000000'), this.parseNumber('0.0006')],
323
+ [this.parseNumber('2500000'), this.parseNumber('0.0004')],
324
+ [this.parseNumber('5000000'), this.parseNumber('0.0002')],
325
+ [this.parseNumber('7500000'), this.parseNumber('0')],
326
+ [this.parseNumber('10000000'), this.parseNumber('0')],
327
+ [this.parseNumber('15000000'), this.parseNumber('0')],
328
+ [this.parseNumber('20000000'), this.parseNumber('0')],
329
+ [this.parseNumber('25000000'), this.parseNumber('0')],
330
+ [this.parseNumber('30000000'), this.parseNumber('0')],
331
+ ],
332
+ },
333
+ },
334
+ 'funding': {
335
+ 'withdraw': {},
336
+ },
337
+ },
338
+ 'precisionMode': SIGNIFICANT_DIGITS,
339
+ 'options': {
340
+ 'precision': 'R0',
341
+ // convert 'EXCHANGE MARKET' to lowercase 'market'
342
+ // convert 'EXCHANGE LIMIT' to lowercase 'limit'
343
+ // everything else remains uppercase
344
+ 'exchangeTypes': {
345
+ 'MARKET': 'market',
346
+ 'EXCHANGE MARKET': 'market',
347
+ 'LIMIT': 'limit',
348
+ 'EXCHANGE LIMIT': 'limit',
349
+ // 'STOP': undefined,
350
+ 'EXCHANGE STOP': 'market',
351
+ // 'TRAILING STOP': undefined,
352
+ // 'EXCHANGE TRAILING STOP': undefined,
353
+ // 'FOK': undefined,
354
+ 'EXCHANGE FOK': 'limit',
355
+ // 'STOP LIMIT': undefined,
356
+ 'EXCHANGE STOP LIMIT': 'limit',
357
+ // 'IOC': undefined,
358
+ 'EXCHANGE IOC': 'limit',
359
+ },
360
+ // convert 'market' to 'EXCHANGE MARKET'
361
+ // convert 'limit' 'EXCHANGE LIMIT'
362
+ // everything else remains as is
363
+ 'orderTypes': {
364
+ 'market': 'EXCHANGE MARKET',
365
+ 'limit': 'EXCHANGE LIMIT',
366
+ },
367
+ 'fiat': {
368
+ 'USD': 'USD',
369
+ 'EUR': 'EUR',
370
+ 'JPY': 'JPY',
371
+ 'GBP': 'GBP',
372
+ 'CHN': 'CHN',
373
+ },
374
+ // actually the correct names unlike the v1
375
+ // we don't want to extend this with accountsByType in v1
376
+ 'v2AccountsByType': {
377
+ 'spot': 'exchange',
378
+ 'exchange': 'exchange',
379
+ 'funding': 'funding',
380
+ 'margin': 'margin',
381
+ 'derivatives': 'margin',
382
+ 'future': 'margin',
383
+ 'swap': 'margin',
384
+ },
385
+ 'withdraw': {
386
+ 'includeFee': false,
387
+ },
388
+ 'networks': {
389
+ 'BTC': 'BITCOIN',
390
+ 'LTC': 'LITECOIN',
391
+ 'ERC20': 'ETHEREUM',
392
+ 'OMNI': 'TETHERUSO',
393
+ 'LIQUID': 'TETHERUSL',
394
+ 'TRC20': 'TETHERUSX',
395
+ 'EOS': 'TETHERUSS',
396
+ 'AVAX': 'TETHERUSDTAVAX',
397
+ 'SOL': 'TETHERUSDTSOL',
398
+ 'ALGO': 'TETHERUSDTALG',
399
+ 'BCH': 'TETHERUSDTBCH',
400
+ 'KSM': 'TETHERUSDTKSM',
401
+ 'DVF': 'TETHERUSDTDVF',
402
+ 'OMG': 'TETHERUSDTOMG',
403
+ },
404
+ 'networksById': {
405
+ 'TETHERUSE': 'ERC20',
406
+ },
407
+ },
408
+ 'features': {
409
+ 'default': {
410
+ 'sandbox': false,
411
+ 'createOrder': {
412
+ 'marginMode': true,
413
+ 'triggerPrice': true,
414
+ 'triggerPriceType': undefined,
415
+ 'triggerDirection': false,
416
+ 'stopLossPrice': true,
417
+ 'takeProfitPrice': true,
418
+ 'attachedStopLossTakeProfit': undefined,
419
+ 'timeInForce': {
420
+ 'IOC': true,
421
+ 'FOK': true,
422
+ 'PO': true,
423
+ 'GTD': false,
424
+ },
425
+ 'hedged': false,
426
+ 'trailing': true,
427
+ 'leverage': true,
428
+ 'marketBuyRequiresPrice': false,
429
+ 'marketBuyByCost': true,
430
+ 'selfTradePrevention': false,
431
+ 'iceberg': false,
432
+ },
433
+ 'createOrders': {
434
+ 'max': 75,
435
+ },
436
+ 'fetchMyTrades': {
437
+ 'marginMode': false,
438
+ 'limit': 2500,
439
+ 'daysBack': undefined,
440
+ 'untilDays': 100000,
441
+ 'symbolRequired': false,
442
+ },
443
+ 'fetchOrder': {
444
+ 'marginMode': false,
445
+ 'trigger': false,
446
+ 'trailing': false,
447
+ 'symbolRequired': false,
448
+ },
449
+ 'fetchOpenOrders': {
450
+ 'marginMode': false,
451
+ 'limit': undefined,
452
+ 'trigger': false,
453
+ 'trailing': false,
454
+ 'symbolRequired': false,
455
+ },
456
+ 'fetchOrders': undefined,
457
+ 'fetchClosedOrders': {
458
+ 'marginMode': false,
459
+ 'limit': undefined,
460
+ 'daysBack': undefined,
461
+ 'daysBackCanceled': undefined,
462
+ 'untilDays': 100000,
463
+ 'trigger': false,
464
+ 'trailing': false,
465
+ 'symbolRequired': false,
466
+ },
467
+ 'fetchOHLCV': {
468
+ 'limit': 10000,
469
+ },
470
+ },
471
+ 'spot': {
472
+ 'extends': 'default',
473
+ },
474
+ 'swap': {
475
+ 'linear': {
476
+ 'extends': 'default',
477
+ },
478
+ 'inverse': undefined,
479
+ },
480
+ 'future': {
481
+ 'linear': undefined,
482
+ 'inverse': undefined,
483
+ },
484
+ },
485
+ 'exceptions': {
486
+ 'exact': {
487
+ '11010': RateLimitExceeded,
488
+ '10001': PermissionDenied,
489
+ '10020': BadRequest,
490
+ '10100': AuthenticationError,
491
+ '10114': InvalidNonce,
492
+ '20060': OnMaintenance,
493
+ // {"code":503,"error":"temporarily_unavailable","error_description":"Sorry, the service is temporarily unavailable. See https://www.bitfinex.com/ for more info."}
494
+ 'temporarily_unavailable': ExchangeNotAvailable,
495
+ },
496
+ 'broad': {
497
+ 'available balance is only': InsufficientFunds,
498
+ 'not enough exchange balance': InsufficientFunds,
499
+ 'Order not found': OrderNotFound,
500
+ 'symbol: invalid': BadSymbol,
501
+ },
502
+ },
503
+ 'commonCurrencies': {
504
+ 'UST': 'USDT',
505
+ 'EUTF0': 'EURT',
506
+ 'USTF0': 'USDT',
507
+ 'ALG': 'ALGO',
508
+ 'AMP': 'AMPL',
509
+ 'ATO': 'ATOM',
510
+ 'BCHABC': 'XEC',
511
+ 'BCHN': 'BCH',
512
+ 'DAT': 'DATA',
513
+ 'DOG': 'MDOGE',
514
+ 'DSH': 'DASH',
515
+ 'EDO': 'PNT',
516
+ 'EUS': 'EURS',
517
+ 'EUT': 'EURT',
518
+ 'HTX': 'HT',
519
+ 'IDX': 'ID',
520
+ 'IOT': 'IOTA',
521
+ 'IQX': 'IQ',
522
+ 'LUNA': 'LUNC',
523
+ 'LUNA2': 'LUNA',
524
+ 'MNA': 'MANA',
525
+ 'ORS': 'ORS Group',
526
+ 'PAS': 'PASS',
527
+ 'QSH': 'QASH',
528
+ 'QTM': 'QTUM',
529
+ 'RBT': 'RBTC',
530
+ 'SNG': 'SNGLS',
531
+ 'STJ': 'STORJ',
532
+ 'TERRAUST': 'USTC',
533
+ 'TSD': 'TUSD',
534
+ 'YGG': 'YEED',
535
+ 'YYW': 'YOYOW',
536
+ 'UDC': 'USDC',
537
+ 'VSY': 'VSYS',
538
+ 'WAX': 'WAXP',
539
+ 'XCH': 'XCHF',
540
+ 'ZBT': 'ZB',
541
+ },
542
+ });
543
+ }
544
+ isFiat(code) {
545
+ return (code in this.options['fiat']);
546
+ }
547
+ getCurrencyId(code) {
548
+ return 'f' + code;
549
+ }
550
+ getCurrencyName(code) {
551
+ // temporary fix for transpiler recognition, even though this is in parent class
552
+ if (code in this.options['currencyNames']) {
553
+ return this.options['currencyNames'][code];
554
+ }
555
+ throw new NotSupported(this.id + ' ' + code + ' not supported for withdrawal');
556
+ }
557
+ amountToPrecision(symbol, amount) {
558
+ // https://docs.bitfinex.com/docs/introduction#amount-precision
559
+ // The amount field allows up to 8 decimals.
560
+ // Anything exceeding this will be rounded to the 8th decimal.
561
+ symbol = this.safeSymbol(symbol);
562
+ return this.decimalToPrecision(amount, TRUNCATE, this.markets[symbol]['precision']['amount'], DECIMAL_PLACES);
563
+ }
564
+ priceToPrecision(symbol, price) {
565
+ symbol = this.safeSymbol(symbol);
566
+ price = this.decimalToPrecision(price, ROUND, this.markets[symbol]['precision']['price'], this.precisionMode);
567
+ // https://docs.bitfinex.com/docs/introduction#price-precision
568
+ // The precision level of all trading prices is based on significant figures.
569
+ // All pairs on Bitfinex use up to 5 significant digits and up to 8 decimals (e.g. 1.2345, 123.45, 1234.5, 0.00012345).
570
+ // Prices submit with a precision larger than 5 will be cut by the API.
571
+ return this.decimalToPrecision(price, TRUNCATE, 8, DECIMAL_PLACES);
572
+ }
573
+ /**
574
+ * @method
575
+ * @name bitfinex#fetchStatus
576
+ * @description the latest known information on the availability of the exchange API
577
+ * @see https://docs.bitfinex.com/reference/rest-public-platform-status
578
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
579
+ * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}
580
+ */
581
+ async fetchStatus(params = {}) {
582
+ //
583
+ // [1] // operative
584
+ // [0] // maintenance
585
+ //
586
+ const response = await this.publicGetPlatformStatus(params);
587
+ const statusRaw = this.safeString(response, 0);
588
+ return {
589
+ 'status': this.safeString({ '0': 'maintenance', '1': 'ok' }, statusRaw, statusRaw),
590
+ 'updated': undefined,
591
+ 'eta': undefined,
592
+ 'url': undefined,
593
+ 'info': response,
594
+ };
595
+ }
596
+ /**
597
+ * @method
598
+ * @name bitfinex#fetchMarkets
599
+ * @description retrieves data on all markets for bitfinex
600
+ * @see https://docs.bitfinex.com/reference/rest-public-conf
601
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
602
+ * @returns {object[]} an array of objects representing market data
603
+ */
604
+ async fetchMarkets(params = {}) {
605
+ const spotMarketsInfoPromise = this.publicGetConfPubInfoPair(params);
606
+ const futuresMarketsInfoPromise = this.publicGetConfPubInfoPairFutures(params);
607
+ const marginIdsPromise = this.publicGetConfPubListPairMargin(params);
608
+ let [spotMarketsInfo, futuresMarketsInfo, marginIds] = await Promise.all([spotMarketsInfoPromise, futuresMarketsInfoPromise, marginIdsPromise]);
609
+ spotMarketsInfo = this.safeList(spotMarketsInfo, 0, []);
610
+ futuresMarketsInfo = this.safeList(futuresMarketsInfo, 0, []);
611
+ const markets = this.arrayConcat(spotMarketsInfo, futuresMarketsInfo);
612
+ marginIds = this.safeValue(marginIds, 0, []);
613
+ //
614
+ // [
615
+ // "1INCH:USD",
616
+ // [
617
+ // null,
618
+ // null,
619
+ // null,
620
+ // "2.0",
621
+ // "100000.0",
622
+ // null,
623
+ // null,
624
+ // null,
625
+ // null,
626
+ // null,
627
+ // null,
628
+ // null
629
+ // ]
630
+ // ]
631
+ //
632
+ const result = [];
633
+ for (let i = 0; i < markets.length; i++) {
634
+ const pair = markets[i];
635
+ const id = this.safeStringUpper(pair, 0);
636
+ const market = this.safeValue(pair, 1, {});
637
+ let spot = true;
638
+ if (id.indexOf('F0') >= 0) {
639
+ spot = false;
640
+ }
641
+ const swap = !spot;
642
+ let baseId = undefined;
643
+ let quoteId = undefined;
644
+ if (id.indexOf(':') >= 0) {
645
+ const parts = id.split(':');
646
+ baseId = parts[0];
647
+ quoteId = parts[1];
648
+ }
649
+ else {
650
+ baseId = id.slice(0, 3);
651
+ quoteId = id.slice(3, 6);
652
+ }
653
+ let base = this.safeCurrencyCode(baseId);
654
+ let quote = this.safeCurrencyCode(quoteId);
655
+ const splitBase = base.split('F0');
656
+ const splitQuote = quote.split('F0');
657
+ base = this.safeString(splitBase, 0);
658
+ quote = this.safeString(splitQuote, 0);
659
+ let symbol = base + '/' + quote;
660
+ baseId = this.getCurrencyId(baseId);
661
+ quoteId = this.getCurrencyId(quoteId);
662
+ let settle = undefined;
663
+ let settleId = undefined;
664
+ if (swap) {
665
+ settle = quote;
666
+ settleId = quote;
667
+ symbol = symbol + ':' + settle;
668
+ }
669
+ const minOrderSizeString = this.safeString(market, 3);
670
+ const maxOrderSizeString = this.safeString(market, 4);
671
+ let margin = false;
672
+ if (spot && this.inArray(id, marginIds)) {
673
+ margin = true;
674
+ }
675
+ result.push({
676
+ 'id': 't' + id,
677
+ 'symbol': symbol,
678
+ 'base': base,
679
+ 'quote': quote,
680
+ 'settle': settle,
681
+ 'baseId': baseId,
682
+ 'quoteId': quoteId,
683
+ 'settleId': settleId,
684
+ 'type': spot ? 'spot' : 'swap',
685
+ 'spot': spot,
686
+ 'margin': margin,
687
+ 'swap': swap,
688
+ 'future': false,
689
+ 'option': false,
690
+ 'active': true,
691
+ 'contract': swap,
692
+ 'linear': swap ? true : undefined,
693
+ 'inverse': swap ? false : undefined,
694
+ 'contractSize': swap ? this.parseNumber('1') : undefined,
695
+ 'expiry': undefined,
696
+ 'expiryDatetime': undefined,
697
+ 'strike': undefined,
698
+ 'optionType': undefined,
699
+ 'precision': {
700
+ 'amount': parseInt('8'),
701
+ 'price': parseInt('5'),
702
+ },
703
+ 'limits': {
704
+ 'leverage': {
705
+ 'min': undefined,
706
+ 'max': undefined,
707
+ },
708
+ 'amount': {
709
+ 'min': this.parseNumber(minOrderSizeString),
710
+ 'max': this.parseNumber(maxOrderSizeString),
711
+ },
712
+ 'price': {
713
+ 'min': this.parseNumber('1e-8'),
714
+ 'max': undefined,
715
+ },
716
+ 'cost': {
717
+ 'min': undefined,
718
+ 'max': undefined,
719
+ },
720
+ },
721
+ 'created': undefined,
722
+ 'info': market,
723
+ });
724
+ }
725
+ return result;
726
+ }
727
+ /**
728
+ * @method
729
+ * @name bitfinex#fetchCurrencies
730
+ * @description fetches all available currencies on an exchange
731
+ * @see https://docs.bitfinex.com/reference/rest-public-conf
732
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
733
+ * @returns {object} an associative dictionary of currencies
734
+ */
735
+ async fetchCurrencies(params = {}) {
736
+ const labels = [
737
+ 'pub:list:currency',
738
+ 'pub:map:currency:sym',
739
+ 'pub:map:currency:label',
740
+ 'pub:map:currency:unit',
741
+ 'pub:map:currency:undl',
742
+ 'pub:map:currency:pool',
743
+ 'pub:map:currency:explorer',
744
+ 'pub:map:currency:tx:fee',
745
+ 'pub:map:tx:method',
746
+ 'pub:info:tx:status', // maps withdrawal/deposit statuses, coins: 1 = enabled, 0 = maintenance
747
+ ];
748
+ const config = labels.join(',');
749
+ const request = {
750
+ 'config': config,
751
+ };
752
+ const response = await this.publicGetConfConfig(this.extend(request, params));
753
+ //
754
+ // [
755
+ //
756
+ // a list of symbols
757
+ // ["AAA","ABS","ADA"],
758
+ //
759
+ // // sym
760
+ // // maps symbols to their API symbols, BAB > BCH
761
+ // [
762
+ // [ "BAB", "BCH" ],
763
+ // [ "CNHT", "CNHt" ],
764
+ // [ "DSH", "DASH" ],
765
+ // [ "IOT", "IOTA" ],
766
+ // [ "LES", "LEO-EOS" ],
767
+ // [ "LET", "LEO-ERC20" ],
768
+ // [ "STJ", "STORJ" ],
769
+ // [ "TSD", "TUSD" ],
770
+ // [ "UDC", "USDC" ],
771
+ // [ "USK", "USDK" ],
772
+ // [ "UST", "USDt" ],
773
+ // [ "USTF0", "USDt0" ],
774
+ // [ "XCH", "XCHF" ],
775
+ // [ "YYW", "YOYOW" ],
776
+ // // ...
777
+ // ],
778
+ // // label
779
+ // // verbose friendly names, BNT > Bancor
780
+ // [
781
+ // [ "BAB", "Bitcoin Cash" ],
782
+ // [ "BCH", "Bitcoin Cash" ],
783
+ // [ "LEO", "Unus Sed LEO" ],
784
+ // [ "LES", "Unus Sed LEO (EOS)" ],
785
+ // [ "LET", "Unus Sed LEO (ERC20)" ],
786
+ // // ...
787
+ // ],
788
+ // // unit
789
+ // // maps symbols to unit of measure where applicable
790
+ // [
791
+ // [ "IOT", "Mi|MegaIOTA" ],
792
+ // ],
793
+ // // undl
794
+ // // maps derivatives symbols to their underlying currency
795
+ // [
796
+ // [ "USTF0", "UST" ],
797
+ // [ "BTCF0", "BTC" ],
798
+ // [ "ETHF0", "ETH" ],
799
+ // ],
800
+ // // pool
801
+ // // maps symbols to underlying network/protocol they operate on
802
+ // [
803
+ // [ 'SAN', 'ETH' ], [ 'OMG', 'ETH' ], [ 'AVT', 'ETH' ], [ "EDO", "ETH" ],
804
+ // [ 'ESS', 'ETH' ], [ 'ATD', 'EOS' ], [ 'ADD', 'EOS' ], [ "MTO", "EOS" ],
805
+ // [ 'PNK', 'ETH' ], [ 'BAB', 'BCH' ], [ 'WLO', 'XLM' ], [ "VLD", "ETH" ],
806
+ // [ 'BTT', 'TRX' ], [ 'IMP', 'ETH' ], [ 'SCR', 'ETH' ], [ "GNO", "ETH" ],
807
+ // // ...
808
+ // ],
809
+ // // explorer
810
+ // // maps symbols to their recognised block explorer URLs
811
+ // [
812
+ // [
813
+ // "AIO",
814
+ // [
815
+ // "https://mainnet.aion.network",
816
+ // "https://mainnet.aion.network/#/account/VAL",
817
+ // "https://mainnet.aion.network/#/transaction/VAL"
818
+ // ]
819
+ // ],
820
+ // // ...
821
+ // ],
822
+ // // fee
823
+ // // maps currencies to their withdrawal fees
824
+ // [
825
+ // ["AAA",[0,0]],
826
+ // ["ABS",[0,131.3]],
827
+ // ["ADA",[0,0.3]],
828
+ // ],
829
+ // // deposit/withdrawal data
830
+ // [
831
+ // ["BITCOIN", 1, 1, null, null, null, null, 0, 0, null, null, 3],
832
+ // ...
833
+ // ]
834
+ // ]
835
+ //
836
+ const indexed = {
837
+ 'sym': this.indexBy(this.safeList(response, 1, []), 0),
838
+ 'label': this.indexBy(this.safeList(response, 2, []), 0),
839
+ 'unit': this.indexBy(this.safeList(response, 3, []), 0),
840
+ 'undl': this.indexBy(this.safeList(response, 4, []), 0),
841
+ 'pool': this.indexBy(this.safeList(response, 5, []), 0),
842
+ 'explorer': this.indexBy(this.safeList(response, 6, []), 0),
843
+ 'fees': this.indexBy(this.safeList(response, 7, []), 0),
844
+ 'networks': this.safeList(response, 8, []),
845
+ 'statuses': this.indexBy(this.safeList(response, 9, []), 0),
846
+ };
847
+ const indexedNetworks = {};
848
+ for (let i = 0; i < indexed['networks'].length; i++) {
849
+ const networkObj = indexed['networks'][i];
850
+ const networkId = this.safeString(networkObj, 0);
851
+ const valuesList = this.safeList(networkObj, 1);
852
+ const networkName = this.safeString(valuesList, 0);
853
+ // for GOlang transpiler, do with "safe" method
854
+ const networksList = this.safeList(indexedNetworks, networkName, []);
855
+ networksList.push(networkId);
856
+ indexedNetworks[networkName] = networksList;
857
+ }
858
+ const ids = this.safeList(response, 0, []);
859
+ const result = {};
860
+ for (let i = 0; i < ids.length; i++) {
861
+ const id = ids[i];
862
+ if (id.endsWith('F0')) {
863
+ // we get a lot of F0 currencies, skip those
864
+ continue;
865
+ }
866
+ const code = this.safeCurrencyCode(id);
867
+ const label = this.safeList(indexed['label'], id, []);
868
+ const name = this.safeString(label, 1);
869
+ const pool = this.safeList(indexed['pool'], id, []);
870
+ const rawType = this.safeString(pool, 1);
871
+ const isCryptoCoin = (rawType !== undefined) || (id in indexed['explorer']); // "hacky" solution
872
+ let type = undefined;
873
+ if (isCryptoCoin) {
874
+ type = 'crypto';
875
+ }
876
+ const feeValues = this.safeList(indexed['fees'], id, []);
877
+ const fees = this.safeList(feeValues, 1, []);
878
+ const fee = this.safeNumber(fees, 1);
879
+ const undl = this.safeList(indexed['undl'], id, []);
880
+ const precision = '8'; // default precision, todo: fix "magic constants"
881
+ const fid = 'f' + id;
882
+ const dwStatuses = this.safeList(indexed['statuses'], id, []);
883
+ const depositEnabled = this.safeInteger(dwStatuses, 1) === 1;
884
+ const withdrawEnabled = this.safeInteger(dwStatuses, 2) === 1;
885
+ const networks = {};
886
+ const netwokIds = this.safeList(indexedNetworks, id, []);
887
+ for (let j = 0; j < netwokIds.length; j++) {
888
+ const networkId = netwokIds[j];
889
+ const network = this.networkIdToCode(networkId);
890
+ networks[network] = {
891
+ 'info': networkId,
892
+ 'id': networkId.toLowerCase(),
893
+ 'network': networkId,
894
+ 'active': undefined,
895
+ 'deposit': undefined,
896
+ 'withdraw': undefined,
897
+ 'fee': undefined,
898
+ 'precision': undefined,
899
+ 'limits': {
900
+ 'withdraw': {
901
+ 'min': undefined,
902
+ 'max': undefined,
903
+ },
904
+ },
905
+ };
906
+ }
907
+ result[code] = this.safeCurrencyStructure({
908
+ 'id': fid,
909
+ 'uppercaseId': id,
910
+ 'code': code,
911
+ 'info': [id, label, pool, feeValues, undl],
912
+ 'type': type,
913
+ 'name': name,
914
+ 'active': true,
915
+ 'deposit': depositEnabled,
916
+ 'withdraw': withdrawEnabled,
917
+ 'fee': fee,
918
+ 'precision': parseInt(precision),
919
+ 'limits': {
920
+ 'amount': {
921
+ 'min': this.parseNumber(this.parsePrecision(precision)),
922
+ 'max': undefined,
923
+ },
924
+ 'withdraw': {
925
+ 'min': fee,
926
+ 'max': undefined,
927
+ },
928
+ },
929
+ 'networks': networks,
930
+ });
931
+ }
932
+ return result;
933
+ }
934
+ /**
935
+ * @method
936
+ * @name bitfinex#fetchBalance
937
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
938
+ * @see https://docs.bitfinex.com/reference/rest-auth-wallets
939
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
940
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
941
+ */
942
+ async fetchBalance(params = {}) {
943
+ // this api call does not return the 'used' amount - use the v1 version instead (which also returns zero balances)
944
+ // there is a difference between this and the v1 api, namely trading wallet is called margin in v2
945
+ await this.loadMarkets();
946
+ const accountsByType = this.safeValue(this.options, 'v2AccountsByType', {});
947
+ const requestedType = this.safeString(params, 'type', 'exchange');
948
+ const accountType = this.safeString(accountsByType, requestedType, requestedType);
949
+ if (accountType === undefined) {
950
+ const keys = Object.keys(accountsByType);
951
+ throw new ExchangeError(this.id + ' fetchBalance() type parameter must be one of ' + keys.join(', '));
952
+ }
953
+ const isDerivative = requestedType === 'derivatives';
954
+ const query = this.omit(params, 'type');
955
+ const response = await this.privatePostAuthRWallets(query);
956
+ const result = { 'info': response };
957
+ for (let i = 0; i < response.length; i++) {
958
+ const balance = response[i];
959
+ const account = this.account();
960
+ const interest = this.safeString(balance, 3);
961
+ if (interest !== '0') {
962
+ account['debt'] = interest;
963
+ }
964
+ const type = this.safeString(balance, 0);
965
+ const currencyId = this.safeStringLower(balance, 1, '');
966
+ const start = currencyId.length - 2;
967
+ const isDerivativeCode = currencyId.slice(start) === 'f0';
968
+ // this will only filter the derivative codes if the requestedType is 'derivatives'
969
+ const derivativeCondition = (!isDerivative || isDerivativeCode);
970
+ if ((accountType === type) && derivativeCondition) {
971
+ const code = this.safeCurrencyCode(currencyId);
972
+ account['total'] = this.safeString(balance, 2);
973
+ account['free'] = this.safeString(balance, 4);
974
+ result[code] = account;
975
+ }
976
+ }
977
+ return this.safeBalance(result);
978
+ }
979
+ /**
980
+ * @method
981
+ * @name bitfinex#transfer
982
+ * @description transfer currency internally between wallets on the same account
983
+ * @see https://docs.bitfinex.com/reference/rest-auth-transfer
984
+ * @param {string} code unified currency code
985
+ * @param {float} amount amount to transfer
986
+ * @param {string} fromAccount account to transfer from
987
+ * @param {string} toAccount account to transfer to
988
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
989
+ * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
990
+ */
991
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
992
+ // transferring between derivatives wallet and regular wallet is not documented in their API
993
+ // however we support it in CCXT (from just looking at web inspector)
994
+ await this.loadMarkets();
995
+ const accountsByType = this.safeValue(this.options, 'v2AccountsByType', {});
996
+ const fromId = this.safeString(accountsByType, fromAccount);
997
+ if (fromId === undefined) {
998
+ const keys = Object.keys(accountsByType);
999
+ throw new ArgumentsRequired(this.id + ' transfer() fromAccount must be one of ' + keys.join(', '));
1000
+ }
1001
+ const toId = this.safeString(accountsByType, toAccount);
1002
+ if (toId === undefined) {
1003
+ const keys = Object.keys(accountsByType);
1004
+ throw new ArgumentsRequired(this.id + ' transfer() toAccount must be one of ' + keys.join(', '));
1005
+ }
1006
+ const currency = this.currency(code);
1007
+ const fromCurrencyId = this.convertDerivativesId(currency, fromAccount);
1008
+ const toCurrencyId = this.convertDerivativesId(currency, toAccount);
1009
+ const requestedAmount = this.currencyToPrecision(code, amount);
1010
+ // this request is slightly different from v1 fromAccount -> from
1011
+ const request = {
1012
+ 'amount': requestedAmount,
1013
+ 'currency': fromCurrencyId,
1014
+ 'currency_to': toCurrencyId,
1015
+ 'from': fromId,
1016
+ 'to': toId,
1017
+ };
1018
+ const response = await this.privatePostAuthWTransfer(this.extend(request, params));
1019
+ //
1020
+ // [
1021
+ // 1616451183763,
1022
+ // "acc_tf",
1023
+ // null,
1024
+ // null,
1025
+ // [
1026
+ // 1616451183763,
1027
+ // "exchange",
1028
+ // "margin",
1029
+ // null,
1030
+ // "UST",
1031
+ // "UST",
1032
+ // null,
1033
+ // 1
1034
+ // ],
1035
+ // null,
1036
+ // "SUCCESS",
1037
+ // "1.0 Tether USDt transfered from Exchange to Margin"
1038
+ // ]
1039
+ //
1040
+ const error = this.safeString(response, 0);
1041
+ if (error === 'error') {
1042
+ const message = this.safeString(response, 2, '');
1043
+ // same message as in v1
1044
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, this.id + ' ' + message);
1045
+ throw new ExchangeError(this.id + ' ' + message);
1046
+ }
1047
+ return this.parseTransfer({ 'result': response }, currency);
1048
+ }
1049
+ parseTransfer(transfer, currency = undefined) {
1050
+ //
1051
+ // transfer
1052
+ //
1053
+ // [
1054
+ // 1616451183763,
1055
+ // "acc_tf",
1056
+ // null,
1057
+ // null,
1058
+ // [
1059
+ // 1616451183763,
1060
+ // "exchange",
1061
+ // "margin",
1062
+ // null,
1063
+ // "UST",
1064
+ // "UST",
1065
+ // null,
1066
+ // 1
1067
+ // ],
1068
+ // null,
1069
+ // "SUCCESS",
1070
+ // "1.0 Tether USDt transfered from Exchange to Margin"
1071
+ // ]
1072
+ //
1073
+ const result = this.safeList(transfer, 'result');
1074
+ const timestamp = this.safeInteger(result, 0);
1075
+ const info = this.safeValue(result, 4);
1076
+ const fromAccount = this.safeString(info, 1);
1077
+ const toAccount = this.safeString(info, 2);
1078
+ const currencyId = this.safeString(info, 5);
1079
+ const status = this.safeString(result, 6);
1080
+ return {
1081
+ 'id': undefined,
1082
+ 'timestamp': timestamp,
1083
+ 'datetime': this.iso8601(timestamp),
1084
+ 'status': this.parseTransferStatus(status),
1085
+ 'amount': this.safeNumber(info, 7),
1086
+ 'currency': this.safeCurrencyCode(currencyId, currency),
1087
+ 'fromAccount': fromAccount,
1088
+ 'toAccount': toAccount,
1089
+ 'info': result,
1090
+ };
1091
+ }
1092
+ parseTransferStatus(status) {
1093
+ const statuses = {
1094
+ 'SUCCESS': 'ok',
1095
+ 'ERROR': 'failed',
1096
+ 'FAILURE': 'failed',
1097
+ };
1098
+ return this.safeString(statuses, status, status);
1099
+ }
1100
+ convertDerivativesId(currency, type) {
1101
+ // there is a difference between this and the v1 api, namely trading wallet is called margin in v2
1102
+ // {
1103
+ // "id": "fUSTF0",
1104
+ // "code": "USTF0",
1105
+ // "info": [ 'USTF0', [], [], [], [ "USTF0", "UST" ] ],
1106
+ const info = this.safeValue(currency, 'info');
1107
+ const transferId = this.safeString(info, 0);
1108
+ const underlying = this.safeValue(info, 4, []);
1109
+ let currencyId = undefined;
1110
+ if (type === 'derivatives') {
1111
+ currencyId = this.safeString(underlying, 0, transferId);
1112
+ const start = currencyId.length - 2;
1113
+ const isDerivativeCode = currencyId.slice(start) === 'F0';
1114
+ if (!isDerivativeCode) {
1115
+ currencyId = currencyId + 'F0';
1116
+ }
1117
+ }
1118
+ else if (type !== 'margin') {
1119
+ currencyId = this.safeString(underlying, 1, transferId);
1120
+ }
1121
+ else {
1122
+ currencyId = transferId;
1123
+ }
1124
+ return currencyId;
1125
+ }
1126
+ /**
1127
+ * @method
1128
+ * @name bitfinex#fetchOrderBook
1129
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1130
+ * @see https://docs.bitfinex.com/reference/rest-public-book
1131
+ * @param {string} symbol unified symbol of the market to fetch the order book for
1132
+ * @param {int} [limit] the maximum amount of order book entries to return, bitfinex only allows 1, 25, or 100
1133
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1134
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
1135
+ */
1136
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
1137
+ await this.loadMarkets();
1138
+ const precision = this.safeValue(this.options, 'precision', 'R0');
1139
+ const market = this.market(symbol);
1140
+ const request = {
1141
+ 'symbol': market['id'],
1142
+ 'precision': precision,
1143
+ };
1144
+ if (limit !== undefined) {
1145
+ request['len'] = limit;
1146
+ }
1147
+ const fullRequest = this.extend(request, params);
1148
+ const orderbook = await this.publicGetBookSymbolPrecision(fullRequest);
1149
+ const timestamp = this.milliseconds();
1150
+ const result = {
1151
+ 'symbol': market['symbol'],
1152
+ 'bids': [],
1153
+ 'asks': [],
1154
+ 'timestamp': timestamp,
1155
+ 'datetime': this.iso8601(timestamp),
1156
+ 'nonce': undefined,
1157
+ };
1158
+ const priceIndex = (fullRequest['precision'] === 'R0') ? 1 : 0;
1159
+ for (let i = 0; i < orderbook.length; i++) {
1160
+ const order = orderbook[i];
1161
+ const price = this.safeNumber(order, priceIndex);
1162
+ const signedAmount = this.safeString(order, 2);
1163
+ const amount = Precise.stringAbs(signedAmount);
1164
+ const side = Precise.stringGt(signedAmount, '0') ? 'bids' : 'asks';
1165
+ const resultSide = result[side];
1166
+ resultSide.push([price, this.parseNumber(amount)]);
1167
+ }
1168
+ result['bids'] = this.sortBy(result['bids'], 0, true);
1169
+ result['asks'] = this.sortBy(result['asks'], 0);
1170
+ return result;
1171
+ }
1172
+ parseTicker(ticker, market = undefined) {
1173
+ //
1174
+ // on trading pairs (ex. tBTCUSD)
1175
+ //
1176
+ // [
1177
+ // SYMBOL, // this index is not present in singular-ticker
1178
+ // BID,
1179
+ // BID_SIZE,
1180
+ // ASK,
1181
+ // ASK_SIZE,
1182
+ // DAILY_CHANGE,
1183
+ // DAILY_CHANGE_RELATIVE,
1184
+ // LAST_PRICE,
1185
+ // VOLUME,
1186
+ // HIGH,
1187
+ // LOW
1188
+ // ]
1189
+ //
1190
+ //
1191
+ // on funding currencies (ex. fUSD)
1192
+ //
1193
+ // [
1194
+ // SYMBOL, // this index is not present in singular-ticker
1195
+ // FRR,
1196
+ // BID,
1197
+ // BID_PERIOD,
1198
+ // BID_SIZE,
1199
+ // ASK,
1200
+ // ASK_PERIOD,
1201
+ // ASK_SIZE,
1202
+ // DAILY_CHANGE,
1203
+ // DAILY_CHANGE_RELATIVE,
1204
+ // LAST_PRICE,
1205
+ // VOLUME,
1206
+ // HIGH,
1207
+ // LOW,
1208
+ // _PLACEHOLDER,
1209
+ // _PLACEHOLDER,
1210
+ // FRR_AMOUNT_AVAILABLE
1211
+ // ]
1212
+ //
1213
+ const length = ticker.length;
1214
+ const isFetchTicker = (length === 10) || (length === 16);
1215
+ let symbol = undefined;
1216
+ let minusIndex = 0;
1217
+ let isFundingCurrency = false;
1218
+ if (isFetchTicker) {
1219
+ minusIndex = 1;
1220
+ isFundingCurrency = (length === 16);
1221
+ }
1222
+ else {
1223
+ const marketId = this.safeString(ticker, 0);
1224
+ market = this.safeMarket(marketId, market);
1225
+ isFundingCurrency = (length === 17);
1226
+ }
1227
+ symbol = this.safeSymbol(undefined, market);
1228
+ let last = undefined;
1229
+ let bid = undefined;
1230
+ let ask = undefined;
1231
+ let change = undefined;
1232
+ let percentage = undefined;
1233
+ let volume = undefined;
1234
+ let high = undefined;
1235
+ let low = undefined;
1236
+ if (isFundingCurrency) {
1237
+ // per api docs, they are different array type
1238
+ last = this.safeString(ticker, 10 - minusIndex);
1239
+ bid = this.safeString(ticker, 2 - minusIndex);
1240
+ ask = this.safeString(ticker, 5 - minusIndex);
1241
+ change = this.safeString(ticker, 8 - minusIndex);
1242
+ percentage = this.safeString(ticker, 9 - minusIndex);
1243
+ volume = this.safeString(ticker, 11 - minusIndex);
1244
+ high = this.safeString(ticker, 12 - minusIndex);
1245
+ low = this.safeString(ticker, 13 - minusIndex);
1246
+ }
1247
+ else {
1248
+ // on trading pairs (ex. tBTCUSD or tHMSTR:USD)
1249
+ last = this.safeString(ticker, 7 - minusIndex);
1250
+ bid = this.safeString(ticker, 1 - minusIndex);
1251
+ ask = this.safeString(ticker, 3 - minusIndex);
1252
+ change = this.safeString(ticker, 5 - minusIndex);
1253
+ percentage = this.safeString(ticker, 6 - minusIndex);
1254
+ percentage = Precise.stringMul(percentage, '100');
1255
+ volume = this.safeString(ticker, 8 - minusIndex);
1256
+ high = this.safeString(ticker, 9 - minusIndex);
1257
+ low = this.safeString(ticker, 10 - minusIndex);
1258
+ }
1259
+ return this.safeTicker({
1260
+ 'symbol': symbol,
1261
+ 'timestamp': undefined,
1262
+ 'datetime': undefined,
1263
+ 'high': high,
1264
+ 'low': low,
1265
+ 'bid': bid,
1266
+ 'bidVolume': undefined,
1267
+ 'ask': ask,
1268
+ 'askVolume': undefined,
1269
+ 'vwap': undefined,
1270
+ 'open': undefined,
1271
+ 'close': last,
1272
+ 'last': last,
1273
+ 'previousClose': undefined,
1274
+ 'change': change,
1275
+ 'percentage': percentage,
1276
+ 'average': undefined,
1277
+ 'baseVolume': volume,
1278
+ 'quoteVolume': undefined,
1279
+ 'info': ticker,
1280
+ }, market);
1281
+ }
1282
+ /**
1283
+ * @method
1284
+ * @name bitfinex#fetchTickers
1285
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1286
+ * @see https://docs.bitfinex.com/reference/rest-public-tickers
1287
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1288
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1289
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1290
+ */
1291
+ async fetchTickers(symbols = undefined, params = {}) {
1292
+ await this.loadMarkets();
1293
+ symbols = this.marketSymbols(symbols);
1294
+ const request = {};
1295
+ if (symbols !== undefined) {
1296
+ const ids = this.marketIds(symbols);
1297
+ request['symbols'] = ids.join(',');
1298
+ }
1299
+ else {
1300
+ request['symbols'] = 'ALL';
1301
+ }
1302
+ const tickers = await this.publicGetTickers(this.extend(request, params));
1303
+ //
1304
+ // [
1305
+ // // on trading pairs (ex. tBTCUSD)
1306
+ // [
1307
+ // SYMBOL,
1308
+ // BID,
1309
+ // BID_SIZE,
1310
+ // ASK,
1311
+ // ASK_SIZE,
1312
+ // DAILY_CHANGE,
1313
+ // DAILY_CHANGE_RELATIVE,
1314
+ // LAST_PRICE,
1315
+ // VOLUME,
1316
+ // HIGH,
1317
+ // LOW
1318
+ // ],
1319
+ // // on funding currencies (ex. fUSD)
1320
+ // [
1321
+ // SYMBOL,
1322
+ // FRR,
1323
+ // BID,
1324
+ // BID_PERIOD,
1325
+ // BID_SIZE,
1326
+ // ASK,
1327
+ // ASK_PERIOD,
1328
+ // ASK_SIZE,
1329
+ // DAILY_CHANGE,
1330
+ // DAILY_CHANGE_RELATIVE,
1331
+ // LAST_PRICE,
1332
+ // VOLUME,
1333
+ // HIGH,
1334
+ // LOW,
1335
+ // _PLACEHOLDER,
1336
+ // _PLACEHOLDER,
1337
+ // FRR_AMOUNT_AVAILABLE
1338
+ // ],
1339
+ // ...
1340
+ // ]
1341
+ //
1342
+ return this.parseTickers(tickers, symbols);
1343
+ }
1344
+ /**
1345
+ * @method
1346
+ * @name bitfinex#fetchTicker
1347
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
1348
+ * @see https://docs.bitfinex.com/reference/rest-public-ticker
1349
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
1350
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1351
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1352
+ */
1353
+ async fetchTicker(symbol, params = {}) {
1354
+ await this.loadMarkets();
1355
+ const market = this.market(symbol);
1356
+ const request = {
1357
+ 'symbol': market['id'],
1358
+ };
1359
+ const ticker = await this.publicGetTickerSymbol(this.extend(request, params));
1360
+ return this.parseTicker(ticker, market);
1361
+ }
1362
+ parseTrade(trade, market = undefined) {
1363
+ //
1364
+ // fetchTrades (public)
1365
+ //
1366
+ // [
1367
+ // ID,
1368
+ // MTS, // timestamp
1369
+ // AMOUNT,
1370
+ // PRICE
1371
+ // ]
1372
+ //
1373
+ // fetchMyTrades (private)
1374
+ //
1375
+ // [
1376
+ // ID,
1377
+ // PAIR,
1378
+ // MTS_CREATE,
1379
+ // ORDER_ID,
1380
+ // EXEC_AMOUNT,
1381
+ // EXEC_PRICE,
1382
+ // ORDER_TYPE,
1383
+ // ORDER_PRICE,
1384
+ // MAKER,
1385
+ // FEE,
1386
+ // FEE_CURRENCY,
1387
+ // ...
1388
+ // ]
1389
+ //
1390
+ const tradeList = this.safeList(trade, 'result', []);
1391
+ const tradeLength = tradeList.length;
1392
+ const isPrivate = (tradeLength > 5);
1393
+ const id = this.safeString(tradeList, 0);
1394
+ const amountIndex = isPrivate ? 4 : 2;
1395
+ let side = undefined;
1396
+ let amountString = this.safeString(tradeList, amountIndex);
1397
+ const priceIndex = isPrivate ? 5 : 3;
1398
+ const priceString = this.safeString(tradeList, priceIndex);
1399
+ if (amountString[0] === '-') {
1400
+ side = 'sell';
1401
+ amountString = Precise.stringAbs(amountString);
1402
+ }
1403
+ else {
1404
+ side = 'buy';
1405
+ }
1406
+ let orderId = undefined;
1407
+ let takerOrMaker = undefined;
1408
+ let type = undefined;
1409
+ let fee = undefined;
1410
+ let symbol = this.safeSymbol(undefined, market);
1411
+ const timestampIndex = isPrivate ? 2 : 1;
1412
+ const timestamp = this.safeInteger(tradeList, timestampIndex);
1413
+ if (isPrivate) {
1414
+ const marketId = tradeList[1];
1415
+ symbol = this.safeSymbol(marketId);
1416
+ orderId = this.safeString(tradeList, 3);
1417
+ const maker = this.safeInteger(tradeList, 8);
1418
+ takerOrMaker = (maker === 1) ? 'maker' : 'taker';
1419
+ let feeCostString = this.safeString(tradeList, 9);
1420
+ feeCostString = Precise.stringNeg(feeCostString);
1421
+ const feeCurrencyId = this.safeString(tradeList, 10);
1422
+ const feeCurrency = this.safeCurrencyCode(feeCurrencyId);
1423
+ fee = {
1424
+ 'cost': feeCostString,
1425
+ 'currency': feeCurrency,
1426
+ };
1427
+ const orderType = tradeList[6];
1428
+ type = this.safeString(this.options['exchangeTypes'], orderType);
1429
+ }
1430
+ return this.safeTrade({
1431
+ 'id': id,
1432
+ 'timestamp': timestamp,
1433
+ 'datetime': this.iso8601(timestamp),
1434
+ 'symbol': symbol,
1435
+ 'order': orderId,
1436
+ 'side': side,
1437
+ 'type': type,
1438
+ 'takerOrMaker': takerOrMaker,
1439
+ 'price': priceString,
1440
+ 'amount': amountString,
1441
+ 'cost': undefined,
1442
+ 'fee': fee,
1443
+ 'info': tradeList,
1444
+ }, market);
1445
+ }
1446
+ /**
1447
+ * @method
1448
+ * @name bitfinex#fetchTrades
1449
+ * @description get the list of most recent trades for a particular symbol
1450
+ * @see https://docs.bitfinex.com/reference/rest-public-trades
1451
+ * @param {string} symbol unified symbol of the market to fetch trades for
1452
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1453
+ * @param {int} [limit] the maximum amount of trades to fetch, default 120, max 10000
1454
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1455
+ * @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)
1456
+ * @param {int} [params.until] the latest time in ms to fetch entries for
1457
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1458
+ */
1459
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1460
+ await this.loadMarkets();
1461
+ let paginate = false;
1462
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');
1463
+ if (paginate) {
1464
+ return await this.fetchPaginatedCallDynamic('fetchTrades', symbol, since, limit, params, 10000);
1465
+ }
1466
+ const market = this.market(symbol);
1467
+ let sort = '-1';
1468
+ let request = {
1469
+ 'symbol': market['id'],
1470
+ };
1471
+ if (since !== undefined) {
1472
+ request['start'] = since;
1473
+ sort = '1';
1474
+ }
1475
+ if (limit !== undefined) {
1476
+ request['limit'] = Math.min(limit, 10000); // default 120, max 10000
1477
+ }
1478
+ request['sort'] = sort;
1479
+ [request, params] = this.handleUntilOption('end', request, params);
1480
+ const response = await this.publicGetTradesSymbolHist(this.extend(request, params));
1481
+ //
1482
+ // [
1483
+ // [
1484
+ // ID,
1485
+ // MTS, // timestamp
1486
+ // AMOUNT,
1487
+ // PRICE
1488
+ // ]
1489
+ // ]
1490
+ //
1491
+ const trades = this.sortBy(response, 1);
1492
+ const tradesList = [];
1493
+ for (let i = 0; i < trades.length; i++) {
1494
+ tradesList.push({ 'result': trades[i] }); // convert to array of dicts to match parseOrder signature
1495
+ }
1496
+ return this.parseTrades(tradesList, market, undefined, limit);
1497
+ }
1498
+ /**
1499
+ * @method
1500
+ * @name bitfinex#fetchOHLCV
1501
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1502
+ * @see https://docs.bitfinex.com/reference/rest-public-candles
1503
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1504
+ * @param {string} timeframe the length of time each candle represents
1505
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1506
+ * @param {int} [limit] the maximum amount of candles to fetch, default 100 max 10000
1507
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1508
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1509
+ * @param {int} [params.until] timestamp in ms of the latest candle to fetch
1510
+ * @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)
1511
+ */
1512
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = 100, params = {}) {
1513
+ await this.loadMarkets();
1514
+ let paginate = false;
1515
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');
1516
+ if (paginate) {
1517
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 10000);
1518
+ }
1519
+ const market = this.market(symbol);
1520
+ if (limit === undefined) {
1521
+ limit = 10000;
1522
+ }
1523
+ else {
1524
+ limit = Math.min(limit, 10000);
1525
+ }
1526
+ let request = {
1527
+ 'symbol': market['id'],
1528
+ 'timeframe': this.safeString(this.timeframes, timeframe, timeframe),
1529
+ 'sort': 1,
1530
+ 'limit': limit,
1531
+ };
1532
+ if (since !== undefined) {
1533
+ request['start'] = since;
1534
+ }
1535
+ [request, params] = this.handleUntilOption('end', request, params);
1536
+ const response = await this.publicGetCandlesTradeTimeframeSymbolHist(this.extend(request, params));
1537
+ //
1538
+ // [
1539
+ // [1591503840000,0.025069,0.025068,0.025069,0.025068,1.97828998],
1540
+ // [1591504500000,0.025065,0.025065,0.025065,0.025065,1.0164],
1541
+ // [1591504620000,0.025062,0.025062,0.025062,0.025062,0.5],
1542
+ // ]
1543
+ //
1544
+ return this.parseOHLCVs(response, market, timeframe, since, limit);
1545
+ }
1546
+ parseOHLCV(ohlcv, market = undefined) {
1547
+ //
1548
+ // [
1549
+ // 1457539800000,
1550
+ // 0.02594,
1551
+ // 0.02594,
1552
+ // 0.02594,
1553
+ // 0.02594,
1554
+ // 0.1
1555
+ // ]
1556
+ //
1557
+ return [
1558
+ this.safeInteger(ohlcv, 0),
1559
+ this.safeNumber(ohlcv, 1),
1560
+ this.safeNumber(ohlcv, 3),
1561
+ this.safeNumber(ohlcv, 4),
1562
+ this.safeNumber(ohlcv, 2),
1563
+ this.safeNumber(ohlcv, 5),
1564
+ ];
1565
+ }
1566
+ parseOrderStatus(status) {
1567
+ if (status === undefined) {
1568
+ return status;
1569
+ }
1570
+ const parts = status.split(' ');
1571
+ const state = this.safeString(parts, 0);
1572
+ const statuses = {
1573
+ 'ACTIVE': 'open',
1574
+ 'PARTIALLY': 'open',
1575
+ 'EXECUTED': 'closed',
1576
+ 'CANCELED': 'canceled',
1577
+ 'INSUFFICIENT': 'canceled',
1578
+ 'POSTONLY CANCELED': 'canceled',
1579
+ 'RSN_DUST': 'rejected',
1580
+ 'RSN_PAUSE': 'rejected',
1581
+ 'IOC CANCELED': 'canceled',
1582
+ 'FILLORKILL CANCELED': 'canceled',
1583
+ };
1584
+ return this.safeString(statuses, state, status);
1585
+ }
1586
+ parseOrderFlags(flags) {
1587
+ // flags can be added to each other...
1588
+ const flagValues = {
1589
+ '1024': ['reduceOnly'],
1590
+ '4096': ['postOnly'],
1591
+ '5120': ['reduceOnly', 'postOnly'],
1592
+ // '64': 'hidden', // The hidden order option ensures an order does not appear in the order book
1593
+ // '512': 'close', // Close position if position present.
1594
+ // '16384': 'OCO', // The one cancels other order option allows you to place a pair of orders stipulating that if one order is executed fully or partially, then the other is automatically canceled.
1595
+ // '524288': 'No Var Rates' // Excludes variable rate funding offers from matching against this order, if on margin
1596
+ };
1597
+ return this.safeValue(flagValues, flags, undefined);
1598
+ }
1599
+ parseTimeInForce(orderType) {
1600
+ const orderTypes = {
1601
+ 'EXCHANGE IOC': 'IOC',
1602
+ 'EXCHANGE FOK': 'FOK',
1603
+ 'IOC': 'IOC',
1604
+ 'FOK': 'FOK', // Margin
1605
+ };
1606
+ return this.safeString(orderTypes, orderType, 'GTC');
1607
+ }
1608
+ parseOrder(order, market = undefined) {
1609
+ const orderList = this.safeList(order, 'result');
1610
+ const id = this.safeString(orderList, 0);
1611
+ const marketId = this.safeString(orderList, 3);
1612
+ const symbol = this.safeSymbol(marketId);
1613
+ // https://github.com/ccxt/ccxt/issues/6686
1614
+ // const timestamp = this.safeTimestamp (orderObject, 5);
1615
+ const timestamp = this.safeInteger(orderList, 5);
1616
+ const remaining = Precise.stringAbs(this.safeString(orderList, 6));
1617
+ const signedAmount = this.safeString(orderList, 7);
1618
+ const amount = Precise.stringAbs(signedAmount);
1619
+ const side = Precise.stringLt(signedAmount, '0') ? 'sell' : 'buy';
1620
+ const orderType = this.safeString(orderList, 8);
1621
+ const type = this.safeString(this.safeValue(this.options, 'exchangeTypes'), orderType);
1622
+ const timeInForce = this.parseTimeInForce(orderType);
1623
+ const rawFlags = this.safeString(orderList, 12);
1624
+ const flags = this.parseOrderFlags(rawFlags);
1625
+ let postOnly = false;
1626
+ if (flags !== undefined) {
1627
+ for (let i = 0; i < flags.length; i++) {
1628
+ if (flags[i] === 'postOnly') {
1629
+ postOnly = true;
1630
+ }
1631
+ }
1632
+ }
1633
+ let price = this.safeString(orderList, 16);
1634
+ let triggerPrice = undefined;
1635
+ if ((orderType === 'EXCHANGE STOP') || (orderType === 'EXCHANGE STOP LIMIT')) {
1636
+ price = undefined;
1637
+ triggerPrice = this.safeString(orderList, 16);
1638
+ if (orderType === 'EXCHANGE STOP LIMIT') {
1639
+ price = this.safeString(orderList, 19);
1640
+ }
1641
+ }
1642
+ let status = undefined;
1643
+ const statusString = this.safeString(orderList, 13);
1644
+ if (statusString !== undefined) {
1645
+ const parts = statusString.split(' @ ');
1646
+ status = this.parseOrderStatus(this.safeString(parts, 0));
1647
+ }
1648
+ const average = this.safeString(orderList, 17);
1649
+ const clientOrderId = this.safeString(orderList, 2);
1650
+ return this.safeOrder({
1651
+ 'info': orderList,
1652
+ 'id': id,
1653
+ 'clientOrderId': clientOrderId,
1654
+ 'timestamp': timestamp,
1655
+ 'datetime': this.iso8601(timestamp),
1656
+ 'lastTradeTimestamp': undefined,
1657
+ 'symbol': symbol,
1658
+ 'type': type,
1659
+ 'timeInForce': timeInForce,
1660
+ 'postOnly': postOnly,
1661
+ 'side': side,
1662
+ 'price': price,
1663
+ 'triggerPrice': triggerPrice,
1664
+ 'amount': amount,
1665
+ 'cost': undefined,
1666
+ 'average': average,
1667
+ 'filled': undefined,
1668
+ 'remaining': remaining,
1669
+ 'status': status,
1670
+ 'fee': undefined,
1671
+ 'trades': undefined,
1672
+ }, market);
1673
+ }
1674
+ createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1675
+ /**
1676
+ * @method
1677
+ * @ignore
1678
+ * @name bitfinex#createOrderRequest
1679
+ * @description helper function to build an order request
1680
+ * @param {string} symbol unified symbol of the market to create an order in
1681
+ * @param {string} type 'market' or 'limit'
1682
+ * @param {string} side 'buy' or 'sell'
1683
+ * @param {float} amount how much you want to trade in units of the base currency
1684
+ * @param {float} [price] the price of the order, in units of the quote currency, ignored in market orders
1685
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1686
+ * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at
1687
+ * @param {string} [params.timeInForce] "GTC", "IOC", "FOK", or "PO"
1688
+ * @param {bool} [params.postOnly]
1689
+ * @param {bool} [params.reduceOnly] Ensures that the executed order does not flip the opened position.
1690
+ * @param {int} [params.flags] additional order parameters: 4096 (Post Only), 1024 (Reduce Only), 16384 (OCO), 64 (Hidden), 512 (Close), 524288 (No Var Rates)
1691
+ * @param {int} [params.lev] leverage for a derivative order, supported by derivative symbol orders only. The value should be between 1 and 100 inclusive.
1692
+ * @param {string} [params.price_traling] The trailing price for a trailing stop order
1693
+ * @param {string} [params.price_aux_limit] Order price for stop limit orders
1694
+ * @param {string} [params.price_oco_stop] OCO stop price
1695
+ * @returns {object} an [order structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#order-structure}
1696
+ */
1697
+ const market = this.market(symbol);
1698
+ let amountString = this.amountToPrecision(symbol, amount);
1699
+ amountString = (side === 'buy') ? amountString : Precise.stringNeg(amountString);
1700
+ const request = {
1701
+ 'symbol': market['id'],
1702
+ 'amount': amountString,
1703
+ };
1704
+ const triggerPrice = this.safeString2(params, 'stopPrice', 'triggerPrice');
1705
+ const trailingAmount = this.safeString(params, 'trailingAmount');
1706
+ const timeInForce = this.safeString(params, 'timeInForce');
1707
+ const postOnlyParam = this.safeBool(params, 'postOnly', false);
1708
+ const reduceOnly = this.safeBool(params, 'reduceOnly', false);
1709
+ const clientOrderId = this.safeValue2(params, 'cid', 'clientOrderId');
1710
+ let orderType = type.toUpperCase();
1711
+ if (trailingAmount !== undefined) {
1712
+ orderType = 'TRAILING STOP';
1713
+ request['price_trailing'] = trailingAmount;
1714
+ }
1715
+ else if (triggerPrice !== undefined) {
1716
+ // request['price'] is taken as triggerPrice for stop orders
1717
+ request['price'] = this.priceToPrecision(symbol, triggerPrice);
1718
+ if (type === 'limit') {
1719
+ orderType = 'STOP LIMIT';
1720
+ request['price_aux_limit'] = this.priceToPrecision(symbol, price);
1721
+ }
1722
+ else {
1723
+ orderType = 'STOP';
1724
+ }
1725
+ }
1726
+ const ioc = (timeInForce === 'IOC');
1727
+ const fok = (timeInForce === 'FOK');
1728
+ const postOnly = (postOnlyParam || (timeInForce === 'PO'));
1729
+ if ((ioc || fok) && (price === undefined)) {
1730
+ throw new InvalidOrder(this.id + ' createOrder() requires a price argument with IOC and FOK orders');
1731
+ }
1732
+ if ((ioc || fok) && (type === 'market')) {
1733
+ throw new InvalidOrder(this.id + ' createOrder() does not allow market IOC and FOK orders');
1734
+ }
1735
+ if ((type !== 'market') && (triggerPrice === undefined)) {
1736
+ request['price'] = this.priceToPrecision(symbol, price);
1737
+ }
1738
+ if (ioc) {
1739
+ orderType = 'IOC';
1740
+ }
1741
+ else if (fok) {
1742
+ orderType = 'FOK';
1743
+ }
1744
+ let marginMode = undefined;
1745
+ [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
1746
+ if (market['spot'] && (marginMode === undefined)) {
1747
+ // The EXCHANGE prefix is only required for non margin spot markets
1748
+ orderType = 'EXCHANGE ' + orderType;
1749
+ }
1750
+ request['type'] = orderType;
1751
+ // flag values may be summed to combine flags
1752
+ let flags = 0;
1753
+ if (postOnly) {
1754
+ flags = this.sum(flags, 4096);
1755
+ }
1756
+ if (reduceOnly) {
1757
+ flags = this.sum(flags, 1024);
1758
+ }
1759
+ if (flags !== 0) {
1760
+ request['flags'] = flags;
1761
+ }
1762
+ if (clientOrderId !== undefined) {
1763
+ request['cid'] = clientOrderId;
1764
+ }
1765
+ params = this.omit(params, ['triggerPrice', 'stopPrice', 'timeInForce', 'postOnly', 'reduceOnly', 'trailingAmount', 'clientOrderId']);
1766
+ return this.extend(request, params);
1767
+ }
1768
+ /**
1769
+ * @method
1770
+ * @name bitfinex#createOrder
1771
+ * @description create an order on the exchange
1772
+ * @see https://docs.bitfinex.com/reference/rest-auth-submit-order
1773
+ * @param {string} symbol unified CCXT market symbol
1774
+ * @param {string} type 'limit' or 'market'
1775
+ * @param {string} side 'buy' or 'sell'
1776
+ * @param {float} amount the amount of currency to trade
1777
+ * @param {float} [price] price of the order
1778
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1779
+ * @param {float} [params.triggerPrice] the price that triggers a trigger order
1780
+ * @param {string} [params.timeInForce] "GTC", "IOC", "FOK", or "PO"
1781
+ * @param {boolean} [params.postOnly] set to true if you want to make a post only order
1782
+ * @param {boolean} [params.reduceOnly] indicates that the order is to reduce the size of a position
1783
+ * @param {int} [params.flags] additional order parameters: 4096 (Post Only), 1024 (Reduce Only), 16384 (OCO), 64 (Hidden), 512 (Close), 524288 (No Var Rates)
1784
+ * @param {int} [params.lev] leverage for a derivative order, supported by derivative symbol orders only. The value should be between 1 and 100 inclusive.
1785
+ * @param {string} [params.price_aux_limit] order price for stop limit orders
1786
+ * @param {string} [params.price_oco_stop] OCO stop price
1787
+ * @param {string} [params.trailingAmount] *swap only* the quote amount to trail away from the current market price
1788
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1789
+ */
1790
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1791
+ await this.loadMarkets();
1792
+ const market = this.market(symbol);
1793
+ const request = this.createOrderRequest(symbol, type, side, amount, price, params);
1794
+ const response = await this.privatePostAuthWOrderSubmit(request);
1795
+ //
1796
+ // [
1797
+ // 1653325121, // Timestamp in milliseconds
1798
+ // "on-req", // Purpose of notification ('on-req', 'oc-req', "uca", 'fon-req', "foc-req")
1799
+ // null, // unique ID of the message
1800
+ // null,
1801
+ // [
1802
+ // [
1803
+ // 95412102131, // Order ID
1804
+ // null, // Group ID
1805
+ // 1653325121798, // Client Order ID
1806
+ // "tDOGE:UST", // Market ID
1807
+ // 1653325121798, // Millisecond timestamp of creation
1808
+ // 1653325121798, // Millisecond timestamp of update
1809
+ // -10, // Amount (Positive means buy, negative means sell)
1810
+ // -10, // Original amount
1811
+ // "EXCHANGE LIMIT", // Type of the order: LIMIT, EXCHANGE LIMIT, MARKET, EXCHANGE MARKET, STOP, EXCHANGE STOP, STOP LIMIT, EXCHANGE STOP LIMIT, TRAILING STOP, EXCHANGE TRAILING STOP, FOK, EXCHANGE FOK, IOC, EXCHANGE IOC.
1812
+ // null, // Previous order type (stop-limit orders are converted to limit orders so for them previous type is always STOP)
1813
+ // null, // Millisecond timestamp of Time-In-Force: automatic order cancellation
1814
+ // null, // _PLACEHOLDER
1815
+ // 4096, // Flags, see parseOrderFlags()
1816
+ // "ACTIVE", // Order Status, see parseOrderStatus()
1817
+ // null, // _PLACEHOLDER
1818
+ // null, // _PLACEHOLDER
1819
+ // 0.071, // Price (Stop Price for stop-limit orders, Limit Price for limit orders)
1820
+ // 0, // Average Price
1821
+ // 0, // Trailing Price
1822
+ // 0, // Auxiliary Limit price (for STOP LIMIT)
1823
+ // null, // _PLACEHOLDER
1824
+ // null, // _PLACEHOLDER
1825
+ // null, // _PLACEHOLDER
1826
+ // 0, // Hidden (0 if false, 1 if true)
1827
+ // 0, // Placed ID (If another order caused this order to be placed (OCO) this will be that other order's ID)
1828
+ // null, // _PLACEHOLDER
1829
+ // null, // _PLACEHOLDER
1830
+ // null, // _PLACEHOLDER
1831
+ // "API>BFX", // Routing, indicates origin of action: BFX, ETHFX, API>BFX, API>ETHFX
1832
+ // null, // _PLACEHOLDER
1833
+ // null, // _PLACEHOLDER
1834
+ // {"$F7":1} // additional meta information about the order ( $F7 = IS_POST_ONLY (0 if false, 1 if true), $F33 = Leverage (int))
1835
+ // ]
1836
+ // ],
1837
+ // null, // CODE (work in progress)
1838
+ // "SUCCESS", // Status of the request
1839
+ // "Submitting 1 orders." // Message
1840
+ // ]
1841
+ //
1842
+ const status = this.safeString(response, 6);
1843
+ if (status !== 'SUCCESS') {
1844
+ const errorCode = response[5];
1845
+ const errorText = response[7];
1846
+ throw new ExchangeError(this.id + ' ' + response[6] + ': ' + errorText + ' (#' + errorCode + ')');
1847
+ }
1848
+ const orders = this.safeList(response, 4, []);
1849
+ const order = this.safeList(orders, 0);
1850
+ const newOrder = { 'result': order };
1851
+ return this.parseOrder(newOrder, market);
1852
+ }
1853
+ /**
1854
+ * @method
1855
+ * @name bitfinex#createOrders
1856
+ * @description create a list of trade orders
1857
+ * @see https://docs.bitfinex.com/reference/rest-auth-order-multi
1858
+ * @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
1859
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1860
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1861
+ */
1862
+ async createOrders(orders, params = {}) {
1863
+ await this.loadMarkets();
1864
+ const ordersRequests = [];
1865
+ for (let i = 0; i < orders.length; i++) {
1866
+ const rawOrder = orders[i];
1867
+ const symbol = this.safeString(rawOrder, 'symbol');
1868
+ const type = this.safeString(rawOrder, 'type');
1869
+ const side = this.safeString(rawOrder, 'side');
1870
+ const amount = this.safeNumber(rawOrder, 'amount');
1871
+ const price = this.safeNumber(rawOrder, 'price');
1872
+ const orderParams = this.safeDict(rawOrder, 'params', {});
1873
+ const orderRequest = this.createOrderRequest(symbol, type, side, amount, price, orderParams);
1874
+ ordersRequests.push(['on', orderRequest]);
1875
+ }
1876
+ const request = {
1877
+ 'ops': ordersRequests,
1878
+ };
1879
+ const response = await this.privatePostAuthWOrderMulti(request);
1880
+ //
1881
+ // [
1882
+ // 1706762515553,
1883
+ // "ox_multi-req",
1884
+ // null,
1885
+ // null,
1886
+ // [
1887
+ // [
1888
+ // 1706762515,
1889
+ // "on-req",
1890
+ // null,
1891
+ // null,
1892
+ // [
1893
+ // [139567428547,null,1706762515551,"tBTCUST",1706762515551,1706762515551,0.0001,0.0001,"EXCHANGE LIMIT",null,null,null,0,"ACTIVE",null,null,35000,0,0,0,null,null,null,0,0,null,null,null,"API>BFX",null,null,{}]
1894
+ // ],
1895
+ // null,
1896
+ // "SUCCESS",
1897
+ // "Submitting 1 orders."
1898
+ // ],
1899
+ // ],
1900
+ // null,
1901
+ // "SUCCESS",
1902
+ // "Submitting 2 order operations."
1903
+ // ]
1904
+ //
1905
+ const results = [];
1906
+ const data = this.safeList(response, 4, []);
1907
+ for (let i = 0; i < data.length; i++) {
1908
+ const entry = data[i];
1909
+ const individualOrder = entry[4];
1910
+ results.push({ 'result': individualOrder[0] });
1911
+ }
1912
+ return this.parseOrders(results);
1913
+ }
1914
+ /**
1915
+ * @method
1916
+ * @name bitfinex#cancelAllOrders
1917
+ * @description cancel all open orders
1918
+ * @see https://docs.bitfinex.com/reference/rest-auth-cancel-orders-multiple
1919
+ * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
1920
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1921
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1922
+ */
1923
+ async cancelAllOrders(symbol = undefined, params = {}) {
1924
+ await this.loadMarkets();
1925
+ const request = {
1926
+ 'all': 1,
1927
+ };
1928
+ const response = await this.privatePostAuthWOrderCancelMulti(this.extend(request, params));
1929
+ const orders = this.safeList(response, 4, []);
1930
+ const ordersList = [];
1931
+ for (let i = 0; i < orders.length; i++) {
1932
+ ordersList.push({ 'result': orders[i] });
1933
+ }
1934
+ return this.parseOrders(ordersList);
1935
+ }
1936
+ /**
1937
+ * @method
1938
+ * @name bitfinex#cancelOrder
1939
+ * @description cancels an open order
1940
+ * @see https://docs.bitfinex.com/reference/rest-auth-cancel-order
1941
+ * @param {string} id order id
1942
+ * @param {string} symbol Not used by bitfinex cancelOrder ()
1943
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1944
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1945
+ */
1946
+ async cancelOrder(id, symbol = undefined, params = {}) {
1947
+ await this.loadMarkets();
1948
+ const cid = this.safeValue2(params, 'cid', 'clientOrderId'); // client order id
1949
+ let request = undefined;
1950
+ let market = undefined;
1951
+ if (symbol !== undefined) {
1952
+ market = this.market(symbol);
1953
+ }
1954
+ if (cid !== undefined) {
1955
+ const cidDate = this.safeValue(params, 'cidDate'); // client order id date
1956
+ if (cidDate === undefined) {
1957
+ throw new InvalidOrder(this.id + " canceling an order by clientOrderId ('cid') requires both 'cid' and 'cid_date' ('YYYY-MM-DD')");
1958
+ }
1959
+ request = {
1960
+ 'cid': cid,
1961
+ 'cid_date': cidDate,
1962
+ };
1963
+ params = this.omit(params, ['cid', 'clientOrderId']);
1964
+ }
1965
+ else {
1966
+ request = {
1967
+ 'id': parseInt(id),
1968
+ };
1969
+ }
1970
+ const response = await this.privatePostAuthWOrderCancel(this.extend(request, params));
1971
+ const order = this.safeValue(response, 4);
1972
+ const newOrder = { 'result': order };
1973
+ return this.parseOrder(newOrder, market);
1974
+ }
1975
+ /**
1976
+ * @method
1977
+ * @name bitfinex#cancelOrders
1978
+ * @description cancel multiple orders at the same time
1979
+ * @see https://docs.bitfinex.com/reference/rest-auth-cancel-orders-multiple
1980
+ * @param {string[]} ids order ids
1981
+ * @param {string} symbol unified market symbol, default is undefined
1982
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1983
+ * @returns {object} an array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1984
+ */
1985
+ async cancelOrders(ids, symbol = undefined, params = {}) {
1986
+ await this.loadMarkets();
1987
+ for (let i = 0; i < ids.length; i++) {
1988
+ ids[i] = this.parseToNumeric(ids[i]);
1989
+ }
1990
+ const request = {
1991
+ 'id': ids,
1992
+ };
1993
+ let market = undefined;
1994
+ if (symbol !== undefined) {
1995
+ market = this.market(symbol);
1996
+ }
1997
+ const response = await this.privatePostAuthWOrderCancelMulti(this.extend(request, params));
1998
+ //
1999
+ // [
2000
+ // 1706740198811,
2001
+ // "oc_multi-req",
2002
+ // null,
2003
+ // null,
2004
+ // [
2005
+ // [
2006
+ // 139530205057,
2007
+ // null,
2008
+ // 1706740132275,
2009
+ // "tBTCF0:USTF0",
2010
+ // 1706740132276,
2011
+ // 1706740132276,
2012
+ // 0.0001,
2013
+ // 0.0001,
2014
+ // "LIMIT",
2015
+ // null,
2016
+ // null,
2017
+ // null,
2018
+ // 0,
2019
+ // "ACTIVE",
2020
+ // null,
2021
+ // null,
2022
+ // 39000,
2023
+ // 0,
2024
+ // 0,
2025
+ // 0,
2026
+ // null,
2027
+ // null,
2028
+ // null,
2029
+ // 0,
2030
+ // 0,
2031
+ // null,
2032
+ // null,
2033
+ // null,
2034
+ // "API>BFX",
2035
+ // null,
2036
+ // null,
2037
+ // {
2038
+ // "lev": 10,
2039
+ // "$F33": 10
2040
+ // }
2041
+ // ],
2042
+ // ],
2043
+ // null,
2044
+ // "SUCCESS",
2045
+ // "Submitting 2 order cancellations."
2046
+ // ]
2047
+ //
2048
+ const orders = this.safeList(response, 4, []);
2049
+ const ordersList = [];
2050
+ for (let i = 0; i < orders.length; i++) {
2051
+ ordersList.push({ 'result': orders[i] });
2052
+ }
2053
+ return this.parseOrders(ordersList, market);
2054
+ }
2055
+ /**
2056
+ * @method
2057
+ * @name bitfinex#fetchOpenOrder
2058
+ * @description fetch an open order by it's id
2059
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders
2060
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol
2061
+ * @param {string} id order id
2062
+ * @param {string} symbol unified market symbol, default is undefined
2063
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2064
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2065
+ */
2066
+ async fetchOpenOrder(id, symbol = undefined, params = {}) {
2067
+ const request = {
2068
+ 'id': [parseInt(id)],
2069
+ };
2070
+ const orders = await this.fetchOpenOrders(symbol, undefined, undefined, this.extend(request, params));
2071
+ const order = this.safeValue(orders, 0);
2072
+ if (order === undefined) {
2073
+ throw new OrderNotFound(this.id + ' order ' + id + ' not found');
2074
+ }
2075
+ return order;
2076
+ }
2077
+ /**
2078
+ * @method
2079
+ * @name bitfinex#fetchClosedOrder
2080
+ * @description fetch an open order by it's id
2081
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders
2082
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol
2083
+ * @param {string} id order id
2084
+ * @param {string} symbol unified market symbol, default is undefined
2085
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2086
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2087
+ */
2088
+ async fetchClosedOrder(id, symbol = undefined, params = {}) {
2089
+ const request = {
2090
+ 'id': [parseInt(id)],
2091
+ };
2092
+ const orders = await this.fetchClosedOrders(symbol, undefined, undefined, this.extend(request, params));
2093
+ const order = this.safeValue(orders, 0);
2094
+ if (order === undefined) {
2095
+ throw new OrderNotFound(this.id + ' order ' + id + ' not found');
2096
+ }
2097
+ return order;
2098
+ }
2099
+ /**
2100
+ * @method
2101
+ * @name bitfinex#fetchOpenOrders
2102
+ * @description fetch all unfilled currently open orders
2103
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders
2104
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol
2105
+ * @param {string} symbol unified market symbol
2106
+ * @param {int} [since] the earliest time in ms to fetch open orders for
2107
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
2108
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2109
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2110
+ */
2111
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2112
+ await this.loadMarkets();
2113
+ const request = {};
2114
+ let market = undefined;
2115
+ let response = undefined;
2116
+ if (symbol === undefined) {
2117
+ response = await this.privatePostAuthROrders(this.extend(request, params));
2118
+ }
2119
+ else {
2120
+ market = this.market(symbol);
2121
+ request['symbol'] = market['id'];
2122
+ response = await this.privatePostAuthROrdersSymbol(this.extend(request, params));
2123
+ }
2124
+ //
2125
+ // [
2126
+ // [
2127
+ // 95408916206, // Order ID
2128
+ // null, // Group Order ID
2129
+ // 1653322349926, // Client Order ID
2130
+ // "tDOGE:UST", // Market ID
2131
+ // 1653322349926, // Created Timestamp in milliseconds
2132
+ // 1653322349927, // Updated Timestamp in milliseconds
2133
+ // -10, // Amount remaining (Positive means buy, negative means sell)
2134
+ // -10, // Original amount
2135
+ // "EXCHANGE LIMIT", // Order type
2136
+ // null, // Previous Order Type
2137
+ // null, // _PLACEHOLDER
2138
+ // null, // _PLACEHOLDER
2139
+ // 0, // Flags, see parseOrderFlags()
2140
+ // "ACTIVE", // Order Status, see parseOrderStatus()
2141
+ // null, // _PLACEHOLDER
2142
+ // null, // _PLACEHOLDER
2143
+ // 0.11, // Price
2144
+ // 0, // Average Price
2145
+ // 0, // Trailing Price
2146
+ // 0, // Auxiliary Limit price (for STOP LIMIT)
2147
+ // null, // _PLACEHOLDER
2148
+ // null, // _PLACEHOLDER
2149
+ // null, // _PLACEHOLDER
2150
+ // 0, // Hidden (0 if false, 1 if true)
2151
+ // 0, // Placed ID (If another order caused this order to be placed (OCO) this will be that other order's ID)
2152
+ // null, // _PLACEHOLDER
2153
+ // null, // _PLACEHOLDER
2154
+ // null, // _PLACEHOLDER
2155
+ // "API>BFX", // Routing, indicates origin of action: BFX, ETHFX, API>BFX, API>ETHFX
2156
+ // null, // _PLACEHOLDER
2157
+ // null, // _PLACEHOLDER
2158
+ // {"$F7":1} // additional meta information about the order ( $F7 = IS_POST_ONLY (0 if false, 1 if true), $F33 = Leverage (int))
2159
+ // ],
2160
+ // ]
2161
+ //
2162
+ const ordersList = [];
2163
+ for (let i = 0; i < response.length; i++) {
2164
+ ordersList.push({ 'result': response[i] });
2165
+ }
2166
+ return this.parseOrders(ordersList, market, since, limit);
2167
+ }
2168
+ /**
2169
+ * @method
2170
+ * @name bitfinex#fetchClosedOrders
2171
+ * @description fetches information on multiple closed orders made by the user
2172
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders
2173
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol
2174
+ * @param {string} symbol unified market symbol of the market orders were made in
2175
+ * @param {int} [since] the earliest time in ms to fetch orders for
2176
+ * @param {int} [limit] the maximum number of order structures to retrieve
2177
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2178
+ * @param {int} [params.until] the latest time in ms to fetch entries for
2179
+ * @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)
2180
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2181
+ */
2182
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2183
+ // returns the most recent closed or canceled orders up to circa two weeks ago
2184
+ await this.loadMarkets();
2185
+ let paginate = false;
2186
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchClosedOrders', 'paginate');
2187
+ if (paginate) {
2188
+ return await this.fetchPaginatedCallDynamic('fetchClosedOrders', symbol, since, limit, params);
2189
+ }
2190
+ let request = {};
2191
+ if (since !== undefined) {
2192
+ request['start'] = since;
2193
+ }
2194
+ if (limit !== undefined) {
2195
+ request['limit'] = limit; // default 25, max 2500
2196
+ }
2197
+ [request, params] = this.handleUntilOption('end', request, params);
2198
+ let market = undefined;
2199
+ let response = undefined;
2200
+ if (symbol === undefined) {
2201
+ response = await this.privatePostAuthROrdersHist(this.extend(request, params));
2202
+ }
2203
+ else {
2204
+ market = this.market(symbol);
2205
+ request['symbol'] = market['id'];
2206
+ response = await this.privatePostAuthROrdersSymbolHist(this.extend(request, params));
2207
+ }
2208
+ //
2209
+ // [
2210
+ // [
2211
+ // 95412102131, // Order ID
2212
+ // null, // Group Order ID
2213
+ // 1653325121798, // Client Order ID
2214
+ // "tDOGE:UST", // Market ID
2215
+ // 1653325122000, // Created Timestamp in milliseconds
2216
+ // 1653325122000, // Updated Timestamp in milliseconds
2217
+ // -10, // Amount remaining (Positive means buy, negative means sell)
2218
+ // -10, // Original amount
2219
+ // "EXCHANGE LIMIT", // Order type
2220
+ // null, // Previous Order Type
2221
+ // null, // Millisecond timestamp of Time-In-Force: automatic order cancellation
2222
+ // null, // _PLACEHOLDER
2223
+ // "4096", // Flags, see parseOrderFlags()
2224
+ // "POSTONLY CANCELED", // Order Status, see parseOrderStatus()
2225
+ // null, // _PLACEHOLDER
2226
+ // null, // _PLACEHOLDER
2227
+ // 0.071, // Price
2228
+ // 0, // Average Price
2229
+ // 0, // Trailing Price
2230
+ // 0, // Auxiliary Limit price (for STOP LIMIT)
2231
+ // null, // _PLACEHOLDER
2232
+ // null, // _PLACEHOLDER
2233
+ // null, // _PLACEHOLDER
2234
+ // 0, // Notify (0 if false, 1 if true)
2235
+ // 0, // Hidden (0 if false, 1 if true)
2236
+ // null, // Placed ID (If another order caused this order to be placed (OCO) this will be that other order's ID)
2237
+ // null, // _PLACEHOLDER
2238
+ // null, // _PLACEHOLDER
2239
+ // "API>BFX", // Routing, indicates origin of action: BFX, ETHFX, API>BFX, API>ETHFX
2240
+ // null, // _PLACEHOLDER
2241
+ // null, // _PLACEHOLDER
2242
+ // {"_$F7":1} // additional meta information about the order ( _$F7 = IS_POST_ONLY (0 if false, 1 if true), _$F33 = Leverage (int))
2243
+ // ]
2244
+ // ]
2245
+ //
2246
+ const ordersList = [];
2247
+ for (let i = 0; i < response.length; i++) {
2248
+ ordersList.push({ 'result': response[i] });
2249
+ }
2250
+ return this.parseOrders(ordersList, market, since, limit);
2251
+ }
2252
+ /**
2253
+ * @method
2254
+ * @name bitfinex#fetchOrderTrades
2255
+ * @description fetch all the trades made from a single order
2256
+ * @see https://docs.bitfinex.com/reference/rest-auth-order-trades
2257
+ * @param {string} id order id
2258
+ * @param {string} symbol unified market symbol
2259
+ * @param {int} [since] the earliest time in ms to fetch trades for
2260
+ * @param {int} [limit] the maximum number of trades to retrieve
2261
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2262
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2263
+ */
2264
+ async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
2265
+ if (symbol === undefined) {
2266
+ throw new ArgumentsRequired(this.id + ' fetchOrderTrades() requires a symbol argument');
2267
+ }
2268
+ await this.loadMarkets();
2269
+ const market = this.market(symbol);
2270
+ const orderId = parseInt(id);
2271
+ const request = {
2272
+ 'id': orderId,
2273
+ 'symbol': market['id'],
2274
+ };
2275
+ // valid for trades upto 10 days old
2276
+ const response = await this.privatePostAuthROrderSymbolIdTrades(this.extend(request, params));
2277
+ const tradesList = [];
2278
+ for (let i = 0; i < response.length; i++) {
2279
+ tradesList.push({ 'result': response[i] }); // convert to array of dicts to match parseOrder signature
2280
+ }
2281
+ return this.parseTrades(tradesList, market, since, limit);
2282
+ }
2283
+ /**
2284
+ * @method
2285
+ * @name bitfinex#fetchMyTrades
2286
+ * @description fetch all trades made by the user
2287
+ * @see https://docs.bitfinex.com/reference/rest-auth-trades
2288
+ * @see https://docs.bitfinex.com/reference/rest-auth-trades-by-symbol
2289
+ * @param {string} symbol unified market symbol
2290
+ * @param {int} [since] the earliest time in ms to fetch trades for
2291
+ * @param {int} [limit] the maximum number of trades structures to retrieve
2292
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2293
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2294
+ */
2295
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2296
+ await this.loadMarkets();
2297
+ let market = undefined;
2298
+ const request = {
2299
+ 'end': this.milliseconds(),
2300
+ };
2301
+ if (since !== undefined) {
2302
+ request['start'] = since;
2303
+ }
2304
+ if (limit !== undefined) {
2305
+ request['limit'] = limit; // default 25, max 1000
2306
+ }
2307
+ let response = undefined;
2308
+ if (symbol !== undefined) {
2309
+ market = this.market(symbol);
2310
+ request['symbol'] = market['id'];
2311
+ response = await this.privatePostAuthRTradesSymbolHist(this.extend(request, params));
2312
+ }
2313
+ else {
2314
+ response = await this.privatePostAuthRTradesHist(this.extend(request, params));
2315
+ }
2316
+ const tradesList = [];
2317
+ for (let i = 0; i < response.length; i++) {
2318
+ tradesList.push({ 'result': response[i] }); // convert to array of dicts to match parseOrder signature
2319
+ }
2320
+ return this.parseTrades(tradesList, market, since, limit);
2321
+ }
2322
+ /**
2323
+ * @method
2324
+ * @name bitfinex#createDepositAddress
2325
+ * @description create a currency deposit address
2326
+ * @see https://docs.bitfinex.com/reference/rest-auth-deposit-address
2327
+ * @param {string} code unified currency code of the currency for the deposit address
2328
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2329
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
2330
+ */
2331
+ async createDepositAddress(code, params = {}) {
2332
+ await this.loadMarkets();
2333
+ const request = {
2334
+ 'op_renew': 1,
2335
+ };
2336
+ return await this.fetchDepositAddress(code, this.extend(request, params));
2337
+ }
2338
+ /**
2339
+ * @method
2340
+ * @name bitfinex#fetchDepositAddress
2341
+ * @description fetch the deposit address for a currency associated with this account
2342
+ * @see https://docs.bitfinex.com/reference/rest-auth-deposit-address
2343
+ * @param {string} code unified currency code
2344
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2345
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
2346
+ */
2347
+ async fetchDepositAddress(code, params = {}) {
2348
+ await this.loadMarkets();
2349
+ const currency = this.currency(code);
2350
+ // if not provided explicitly we will try to match using the currency name
2351
+ const network = this.safeString(params, 'network', code);
2352
+ const currencyNetworks = this.safeValue(currency, 'networks', {});
2353
+ const currencyNetwork = this.safeValue(currencyNetworks, network);
2354
+ const networkId = this.safeString(currencyNetwork, 'id');
2355
+ if (networkId === undefined) {
2356
+ throw new ArgumentsRequired(this.id + " fetchDepositAddress() could not find a network for '" + code + "'. You can specify it by providing the 'network' value inside params");
2357
+ }
2358
+ const wallet = this.safeString(params, 'wallet', 'exchange'); // 'exchange', 'margin', 'funding' and also old labels 'exchange', 'trading', 'deposit', respectively
2359
+ params = this.omit(params, 'network', 'wallet');
2360
+ const request = {
2361
+ 'method': networkId,
2362
+ 'wallet': wallet,
2363
+ 'op_renew': 0, // a value of 1 will generate a new address
2364
+ };
2365
+ const response = await this.privatePostAuthWDepositAddress(this.extend(request, params));
2366
+ //
2367
+ // [
2368
+ // 1582269616687, // MTS Millisecond Time Stamp of the update
2369
+ // "acc_dep", // TYPE Purpose of notification "acc_dep" for account deposit
2370
+ // null, // MESSAGE_ID unique ID of the message
2371
+ // null, // not documented
2372
+ // [
2373
+ // null, // PLACEHOLDER
2374
+ // "BITCOIN", // METHOD Method of deposit
2375
+ // "BTC", // CURRENCY_CODE Currency code of new address
2376
+ // null, // PLACEHOLDER
2377
+ // "1BC9PZqpUmjyEB54uggn8TFKj49zSDYzqG", // ADDRESS
2378
+ // null, // POOL_ADDRESS
2379
+ // ],
2380
+ // null, // CODE null or integer work in progress
2381
+ // "SUCCESS", // STATUS Status of the notification, SUCCESS, ERROR, FAILURE
2382
+ // "success", // TEXT Text of the notification
2383
+ // ]
2384
+ //
2385
+ const result = this.safeValue(response, 4, []);
2386
+ const poolAddress = this.safeString(result, 5);
2387
+ const address = (poolAddress === undefined) ? this.safeString(result, 4) : poolAddress;
2388
+ const tag = (poolAddress === undefined) ? undefined : this.safeString(result, 4);
2389
+ this.checkAddress(address);
2390
+ return {
2391
+ 'currency': code,
2392
+ 'address': address,
2393
+ 'tag': tag,
2394
+ 'network': undefined,
2395
+ 'info': response,
2396
+ };
2397
+ }
2398
+ parseTransactionStatus(status) {
2399
+ const statuses = {
2400
+ 'SUCCESS': 'ok',
2401
+ 'COMPLETED': 'ok',
2402
+ 'ERROR': 'failed',
2403
+ 'FAILURE': 'failed',
2404
+ 'CANCELED': 'canceled',
2405
+ 'PENDING APPROVAL': 'pending',
2406
+ 'PENDING': 'pending',
2407
+ 'PENDING REVIEW': 'pending',
2408
+ 'PENDING CANCELLATION': 'pending',
2409
+ 'SENDING': 'pending',
2410
+ 'USER APPROVED': 'pending',
2411
+ };
2412
+ return this.safeString(statuses, status, status);
2413
+ }
2414
+ parseTransaction(transaction, currency = undefined) {
2415
+ //
2416
+ // withdraw
2417
+ //
2418
+ // [
2419
+ // 1582271520931, // MTS Millisecond Time Stamp of the update
2420
+ // "acc_wd-req", // TYPE Purpose of notification "acc_wd-req" account withdrawal request
2421
+ // null, // MESSAGE_ID unique ID of the message
2422
+ // null, // not documented
2423
+ // [
2424
+ // 0, // WITHDRAWAL_ID Unique Withdrawal ID
2425
+ // null, // PLACEHOLDER
2426
+ // "bitcoin", // METHOD Method of withdrawal
2427
+ // null, // PAYMENT_ID Payment ID if relevant
2428
+ // "exchange", // WALLET Sending wallet
2429
+ // 1, // AMOUNT Amount of Withdrawal less fee
2430
+ // null, // PLACEHOLDER
2431
+ // null, // PLACEHOLDER
2432
+ // 0.0004, // WITHDRAWAL_FEE Fee on withdrawal
2433
+ // ],
2434
+ // null, // CODE null or integer Work in progress
2435
+ // "SUCCESS", // STATUS Status of the notification, it may vary over time SUCCESS, ERROR, FAILURE
2436
+ // "Invalid bitcoin address (abcdef)", // TEXT Text of the notification
2437
+ // ]
2438
+ //
2439
+ // fetchDepositsWithdrawals
2440
+ //
2441
+ // [
2442
+ // 13293039, // ID
2443
+ // "ETH", // CURRENCY
2444
+ // "ETHEREUM", // CURRENCY_NAME
2445
+ // null,
2446
+ // null,
2447
+ // 1574175052000, // MTS_STARTED
2448
+ // 1574181326000, // MTS_UPDATED
2449
+ // null,
2450
+ // null,
2451
+ // "CANCELED", // STATUS
2452
+ // null,
2453
+ // null,
2454
+ // -0.24, // AMOUNT, negative for withdrawals
2455
+ // -0.00135, // FEES
2456
+ // null,
2457
+ // null,
2458
+ // "0x38110e0Fc932CB2BE...........", // DESTINATION_ADDRESS
2459
+ // null,
2460
+ // null,
2461
+ // null,
2462
+ // "0x523ec8945500.....................................", // TRANSACTION_ID
2463
+ // "Purchase of 100 pizzas", // WITHDRAW_TRANSACTION_NOTE, might also be: null
2464
+ // ]
2465
+ //
2466
+ const transactionLength = transaction.length;
2467
+ let timestamp = undefined;
2468
+ let updated = undefined;
2469
+ let code = undefined;
2470
+ let amount = undefined;
2471
+ let id = undefined;
2472
+ let status = undefined;
2473
+ let tag = undefined;
2474
+ let type = undefined;
2475
+ let feeCost = undefined;
2476
+ let txid = undefined;
2477
+ let addressTo = undefined;
2478
+ let network = undefined;
2479
+ let comment = undefined;
2480
+ if (transactionLength === 8) {
2481
+ const data = this.safeValue(transaction, 4, []);
2482
+ timestamp = this.safeInteger(transaction, 0);
2483
+ if (currency !== undefined) {
2484
+ code = currency['code'];
2485
+ }
2486
+ feeCost = this.safeString(data, 8);
2487
+ if (feeCost !== undefined) {
2488
+ feeCost = Precise.stringAbs(feeCost);
2489
+ }
2490
+ amount = this.safeNumber(data, 5);
2491
+ id = this.safeInteger(data, 0);
2492
+ status = 'ok';
2493
+ if (id === 0) {
2494
+ id = undefined;
2495
+ status = 'failed';
2496
+ }
2497
+ tag = this.safeString(data, 3);
2498
+ type = 'withdrawal';
2499
+ const networkId = this.safeString(data, 2);
2500
+ network = this.networkIdToCode(networkId.toUpperCase()); // withdraw returns in lowercase
2501
+ }
2502
+ else if (transactionLength === 22) {
2503
+ id = this.safeString(transaction, 0);
2504
+ const currencyId = this.safeString(transaction, 1);
2505
+ code = this.safeCurrencyCode(currencyId, currency);
2506
+ const networkId = this.safeString(transaction, 2);
2507
+ network = this.networkIdToCode(networkId);
2508
+ timestamp = this.safeInteger(transaction, 5);
2509
+ updated = this.safeInteger(transaction, 6);
2510
+ status = this.parseTransactionStatus(this.safeString(transaction, 9));
2511
+ const signedAmount = this.safeString(transaction, 12);
2512
+ amount = Precise.stringAbs(signedAmount);
2513
+ if (signedAmount !== undefined) {
2514
+ if (Precise.stringLt(signedAmount, '0')) {
2515
+ type = 'withdrawal';
2516
+ }
2517
+ else {
2518
+ type = 'deposit';
2519
+ }
2520
+ }
2521
+ feeCost = this.safeString(transaction, 13);
2522
+ if (feeCost !== undefined) {
2523
+ feeCost = Precise.stringAbs(feeCost);
2524
+ }
2525
+ addressTo = this.safeString(transaction, 16);
2526
+ txid = this.safeString(transaction, 20);
2527
+ comment = this.safeString(transaction, 21);
2528
+ }
2529
+ return {
2530
+ 'info': transaction,
2531
+ 'id': id,
2532
+ 'txid': txid,
2533
+ 'type': type,
2534
+ 'currency': code,
2535
+ 'network': network,
2536
+ 'amount': this.parseNumber(amount),
2537
+ 'status': status,
2538
+ 'timestamp': timestamp,
2539
+ 'datetime': this.iso8601(timestamp),
2540
+ 'address': addressTo,
2541
+ 'addressFrom': undefined,
2542
+ 'addressTo': addressTo,
2543
+ 'tag': tag,
2544
+ 'tagFrom': undefined,
2545
+ 'tagTo': tag,
2546
+ 'updated': updated,
2547
+ 'comment': comment,
2548
+ 'internal': undefined,
2549
+ 'fee': {
2550
+ 'currency': code,
2551
+ 'cost': this.parseNumber(feeCost),
2552
+ 'rate': undefined,
2553
+ },
2554
+ };
2555
+ }
2556
+ /**
2557
+ * @method
2558
+ * @name bitfinex#fetchTradingFees
2559
+ * @description fetch the trading fees for multiple markets
2560
+ * @see https://docs.bitfinex.com/reference/rest-auth-summary
2561
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2562
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
2563
+ */
2564
+ async fetchTradingFees(params = {}) {
2565
+ await this.loadMarkets();
2566
+ const response = await this.privatePostAuthRSummary(params);
2567
+ //
2568
+ // Response Spec:
2569
+ // [
2570
+ // PLACEHOLDER,
2571
+ // PLACEHOLDER,
2572
+ // PLACEHOLDER,
2573
+ // PLACEHOLDER,
2574
+ // [
2575
+ // [
2576
+ // MAKER_FEE,
2577
+ // MAKER_FEE,
2578
+ // MAKER_FEE,
2579
+ // PLACEHOLDER,
2580
+ // PLACEHOLDER,
2581
+ // DERIV_REBATE
2582
+ // ],
2583
+ // [
2584
+ // TAKER_FEE_TO_CRYPTO,
2585
+ // TAKER_FEE_TO_STABLE,
2586
+ // TAKER_FEE_TO_FIAT,
2587
+ // PLACEHOLDER,
2588
+ // PLACEHOLDER,
2589
+ // DERIV_TAKER_FEE
2590
+ // ]
2591
+ // ],
2592
+ // PLACEHOLDER,
2593
+ // PLACEHOLDER,
2594
+ // PLACEHOLDER,
2595
+ // PLACEHOLDER,
2596
+ // {
2597
+ // LEO_LEV,
2598
+ // LEO_AMOUNT_AVG
2599
+ // }
2600
+ // ]
2601
+ //
2602
+ // Example response:
2603
+ //
2604
+ // [
2605
+ // null,
2606
+ // null,
2607
+ // null,
2608
+ // null,
2609
+ // [
2610
+ // [ 0.001, 0.001, 0.001, null, null, 0.0002 ],
2611
+ // [ 0.002, 0.002, 0.002, null, null, 0.00065 ]
2612
+ // ],
2613
+ // [
2614
+ // [
2615
+ // {
2616
+ // "curr": "Total (USD)",
2617
+ // "vol": "0",
2618
+ // "vol_safe": "0",
2619
+ // "vol_maker": "0",
2620
+ // "vol_BFX": "0",
2621
+ // "vol_BFX_safe": "0",
2622
+ // "vol_BFX_maker": "0"
2623
+ // }
2624
+ // ],
2625
+ // {},
2626
+ // 0
2627
+ // ],
2628
+ // [ null, {}, 0 ],
2629
+ // null,
2630
+ // null,
2631
+ // { leo_lev: "0", leo_amount_avg: "0" }
2632
+ // ]
2633
+ //
2634
+ const result = {};
2635
+ const fiat = this.safeValue(this.options, 'fiat', {});
2636
+ const feeData = this.safeValue(response, 4, []);
2637
+ const makerData = this.safeValue(feeData, 0, []);
2638
+ const takerData = this.safeValue(feeData, 1, []);
2639
+ const makerFee = this.safeNumber(makerData, 0);
2640
+ const makerFeeFiat = this.safeNumber(makerData, 2);
2641
+ const makerFeeDeriv = this.safeNumber(makerData, 5);
2642
+ const takerFee = this.safeNumber(takerData, 0);
2643
+ const takerFeeFiat = this.safeNumber(takerData, 2);
2644
+ const takerFeeDeriv = this.safeNumber(takerData, 5);
2645
+ for (let i = 0; i < this.symbols.length; i++) {
2646
+ const symbol = this.symbols[i];
2647
+ const market = this.market(symbol);
2648
+ const fee = {
2649
+ 'info': response,
2650
+ 'symbol': symbol,
2651
+ 'percentage': true,
2652
+ 'tierBased': true,
2653
+ };
2654
+ if (market['quote'] in fiat) {
2655
+ fee['maker'] = makerFeeFiat;
2656
+ fee['taker'] = takerFeeFiat;
2657
+ }
2658
+ else if (market['contract']) {
2659
+ fee['maker'] = makerFeeDeriv;
2660
+ fee['taker'] = takerFeeDeriv;
2661
+ }
2662
+ else { // TODO check if stable coin
2663
+ fee['maker'] = makerFee;
2664
+ fee['taker'] = takerFee;
2665
+ }
2666
+ result[symbol] = fee;
2667
+ }
2668
+ return result;
2669
+ }
2670
+ /**
2671
+ * @method
2672
+ * @name bitfinex#fetchDepositsWithdrawals
2673
+ * @description fetch history of deposits and withdrawals
2674
+ * @see https://docs.bitfinex.com/reference/movement-info
2675
+ * @see https://docs.bitfinex.com/reference/rest-auth-movements
2676
+ * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
2677
+ * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
2678
+ * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
2679
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2680
+ * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2681
+ */
2682
+ async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2683
+ await this.loadMarkets();
2684
+ let currency = undefined;
2685
+ const request = {};
2686
+ if (since !== undefined) {
2687
+ request['start'] = since;
2688
+ }
2689
+ if (limit !== undefined) {
2690
+ request['limit'] = limit; // max 1000
2691
+ }
2692
+ let response = undefined;
2693
+ if (code !== undefined) {
2694
+ currency = this.currency(code);
2695
+ request['currency'] = currency['uppercaseId'];
2696
+ response = await this.privatePostAuthRMovementsCurrencyHist(this.extend(request, params));
2697
+ }
2698
+ else {
2699
+ response = await this.privatePostAuthRMovementsHist(this.extend(request, params));
2700
+ }
2701
+ //
2702
+ // [
2703
+ // [
2704
+ // 13293039, // ID
2705
+ // "ETH", // CURRENCY
2706
+ // "ETHEREUM", // CURRENCY_NAME
2707
+ // null,
2708
+ // null,
2709
+ // 1574175052000, // MTS_STARTED
2710
+ // 1574181326000, // MTS_UPDATED
2711
+ // null,
2712
+ // null,
2713
+ // "CANCELED", // STATUS
2714
+ // null,
2715
+ // null,
2716
+ // -0.24, // AMOUNT, negative for withdrawals
2717
+ // -0.00135, // FEES
2718
+ // null,
2719
+ // null,
2720
+ // "0x38110e0Fc932CB2BE...........", // DESTINATION_ADDRESS
2721
+ // null,
2722
+ // null,
2723
+ // null,
2724
+ // "0x523ec8945500.....................................", // TRANSACTION_ID
2725
+ // "Purchase of 100 pizzas", // WITHDRAW_TRANSACTION_NOTE, might also be: null
2726
+ // ]
2727
+ // ]
2728
+ //
2729
+ return this.parseTransactions(response, currency, since, limit);
2730
+ }
2731
+ /**
2732
+ * @method
2733
+ * @name bitfinex#withdraw
2734
+ * @description make a withdrawal
2735
+ * @see https://docs.bitfinex.com/reference/rest-auth-withdraw
2736
+ * @param {string} code unified currency code
2737
+ * @param {float} amount the amount to withdraw
2738
+ * @param {string} address the address to withdraw to
2739
+ * @param {string} tag
2740
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2741
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2742
+ */
2743
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2744
+ this.checkAddress(address);
2745
+ await this.loadMarkets();
2746
+ const currency = this.currency(code);
2747
+ // if not provided explicitly we will try to match using the currency name
2748
+ const network = this.safeString(params, 'network', code);
2749
+ params = this.omit(params, 'network');
2750
+ const currencyNetworks = this.safeValue(currency, 'networks', {});
2751
+ const currencyNetwork = this.safeValue(currencyNetworks, network);
2752
+ const networkId = this.safeString(currencyNetwork, 'id');
2753
+ if (networkId === undefined) {
2754
+ throw new ArgumentsRequired(this.id + " withdraw() could not find a network for '" + code + "'. You can specify it by providing the 'network' value inside params");
2755
+ }
2756
+ const wallet = this.safeString(params, 'wallet', 'exchange'); // 'exchange', 'margin', 'funding' and also old labels 'exchange', 'trading', 'deposit', respectively
2757
+ params = this.omit(params, 'network', 'wallet');
2758
+ const request = {
2759
+ 'method': networkId,
2760
+ 'wallet': wallet,
2761
+ 'amount': this.numberToString(amount),
2762
+ 'address': address,
2763
+ };
2764
+ if (tag !== undefined) {
2765
+ request['payment_id'] = tag;
2766
+ }
2767
+ const withdrawOptions = this.safeValue(this.options, 'withdraw', {});
2768
+ const includeFee = this.safeBool(withdrawOptions, 'includeFee', false);
2769
+ if (includeFee) {
2770
+ request['fee_deduct'] = 1;
2771
+ }
2772
+ const response = await this.privatePostAuthWWithdraw(this.extend(request, params));
2773
+ //
2774
+ // [
2775
+ // 1582271520931, // MTS Millisecond Time Stamp of the update
2776
+ // "acc_wd-req", // TYPE Purpose of notification "acc_wd-req" account withdrawal request
2777
+ // null, // MESSAGE_ID unique ID of the message
2778
+ // null, // not documented
2779
+ // [
2780
+ // 0, // WITHDRAWAL_ID Unique Withdrawal ID
2781
+ // null, // PLACEHOLDER
2782
+ // "bitcoin", // METHOD Method of withdrawal
2783
+ // null, // PAYMENT_ID Payment ID if relevant
2784
+ // "exchange", // WALLET Sending wallet
2785
+ // 1, // AMOUNT Amount of Withdrawal less fee
2786
+ // null, // PLACEHOLDER
2787
+ // null, // PLACEHOLDER
2788
+ // 0.0004, // WITHDRAWAL_FEE Fee on withdrawal
2789
+ // ],
2790
+ // null, // CODE null or integer Work in progress
2791
+ // "SUCCESS", // STATUS Status of the notification, it may vary over time SUCCESS, ERROR, FAILURE
2792
+ // "Invalid bitcoin address (abcdef)", // TEXT Text of the notification
2793
+ // ]
2794
+ //
2795
+ // in case of failure:
2796
+ //
2797
+ // [
2798
+ // "error",
2799
+ // 10001,
2800
+ // "Momentary balance check. Please wait few seconds and try the transfer again."
2801
+ // ]
2802
+ //
2803
+ const statusMessage = this.safeString(response, 0);
2804
+ if (statusMessage === 'error') {
2805
+ const feedback = this.id + ' ' + response;
2806
+ const message = this.safeString(response, 2, '');
2807
+ // same message as in v1
2808
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
2809
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
2810
+ throw new ExchangeError(feedback); // unknown message
2811
+ }
2812
+ const text = this.safeString(response, 7);
2813
+ if (text !== 'success') {
2814
+ this.throwBroadlyMatchedException(this.exceptions['broad'], text, text);
2815
+ }
2816
+ return this.parseTransaction(response, currency);
2817
+ }
2818
+ /**
2819
+ * @method
2820
+ * @name bitfinex#fetchPositions
2821
+ * @description fetch all open positions
2822
+ * @see https://docs.bitfinex.com/reference/rest-auth-positions
2823
+ * @param {string[]|undefined} symbols list of unified market symbols
2824
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2825
+ * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
2826
+ */
2827
+ async fetchPositions(symbols = undefined, params = {}) {
2828
+ await this.loadMarkets();
2829
+ symbols = this.marketSymbols(symbols);
2830
+ const response = await this.privatePostAuthRPositions(params);
2831
+ //
2832
+ // [
2833
+ // [
2834
+ // "tBTCUSD", // SYMBOL
2835
+ // "ACTIVE", // STATUS
2836
+ // 0.0195, // AMOUNT
2837
+ // 8565.0267019, // BASE_PRICE
2838
+ // 0, // MARGIN_FUNDING
2839
+ // 0, // MARGIN_FUNDING_TYPE
2840
+ // -0.33455568705000516, // PL
2841
+ // -0.0003117550117425625, // PL_PERC
2842
+ // 7045.876419249083, // PRICE_LIQ
2843
+ // 3.0673001895895604, // LEVERAGE
2844
+ // null, // _PLACEHOLDER
2845
+ // 142355652, // POSITION_ID
2846
+ // 1574002216000, // MTS_CREATE
2847
+ // 1574002216000, // MTS_UPDATE
2848
+ // null, // _PLACEHOLDER
2849
+ // 0, // TYPE
2850
+ // null, // _PLACEHOLDER
2851
+ // 0, // COLLATERAL
2852
+ // 0, // COLLATERAL_MIN
2853
+ // // META
2854
+ // {
2855
+ // "reason":"TRADE",
2856
+ // "order_id":34271018124,
2857
+ // "liq_stage":null,
2858
+ // "trade_price":"8565.0267019",
2859
+ // "trade_amount":"0.0195",
2860
+ // "order_id_oppo":34277498022
2861
+ // }
2862
+ // ]
2863
+ // ]
2864
+ //
2865
+ const positionsList = [];
2866
+ for (let i = 0; i < response.length; i++) {
2867
+ positionsList.push({ 'result': response[i] });
2868
+ }
2869
+ return this.parsePositions(positionsList, symbols);
2870
+ }
2871
+ parsePosition(position, market = undefined) {
2872
+ //
2873
+ // [
2874
+ // "tBTCUSD", // SYMBOL
2875
+ // "ACTIVE", // STATUS
2876
+ // 0.0195, // AMOUNT
2877
+ // 8565.0267019, // BASE_PRICE
2878
+ // 0, // MARGIN_FUNDING
2879
+ // 0, // MARGIN_FUNDING_TYPE
2880
+ // -0.33455568705000516, // PL
2881
+ // -0.0003117550117425625, // PL_PERC
2882
+ // 7045.876419249083, // PRICE_LIQ
2883
+ // 3.0673001895895604, // LEVERAGE
2884
+ // null, // _PLACEHOLDER
2885
+ // 142355652, // POSITION_ID
2886
+ // 1574002216000, // MTS_CREATE
2887
+ // 1574002216000, // MTS_UPDATE
2888
+ // null, // _PLACEHOLDER
2889
+ // 0, // TYPE
2890
+ // null, // _PLACEHOLDER
2891
+ // 0, // COLLATERAL
2892
+ // 0, // COLLATERAL_MIN
2893
+ // // META
2894
+ // {
2895
+ // "reason": "TRADE",
2896
+ // "order_id": 34271018124,
2897
+ // "liq_stage": null,
2898
+ // "trade_price": "8565.0267019",
2899
+ // "trade_amount": "0.0195",
2900
+ // "order_id_oppo": 34277498022
2901
+ // }
2902
+ // ]
2903
+ //
2904
+ const positionList = this.safeList(position, 'result');
2905
+ const marketId = this.safeString(positionList, 0);
2906
+ const amount = this.safeString(positionList, 2);
2907
+ const timestamp = this.safeInteger(positionList, 12);
2908
+ const meta = this.safeString(positionList, 19);
2909
+ const tradePrice = this.safeString(meta, 'trade_price');
2910
+ const tradeAmount = this.safeString(meta, 'trade_amount');
2911
+ return this.safePosition({
2912
+ 'info': positionList,
2913
+ 'id': this.safeString(positionList, 11),
2914
+ 'symbol': this.safeSymbol(marketId, market),
2915
+ 'notional': this.parseNumber(amount),
2916
+ 'marginMode': 'isolated',
2917
+ 'liquidationPrice': this.safeNumber(positionList, 8),
2918
+ 'entryPrice': this.safeNumber(positionList, 3),
2919
+ 'unrealizedPnl': this.safeNumber(positionList, 6),
2920
+ 'percentage': this.safeNumber(positionList, 7),
2921
+ 'contracts': undefined,
2922
+ 'contractSize': undefined,
2923
+ 'markPrice': undefined,
2924
+ 'lastPrice': undefined,
2925
+ 'side': Precise.stringGt(amount, '0') ? 'long' : 'short',
2926
+ 'hedged': undefined,
2927
+ 'timestamp': timestamp,
2928
+ 'datetime': this.iso8601(timestamp),
2929
+ 'lastUpdateTimestamp': this.safeInteger(positionList, 13),
2930
+ 'maintenanceMargin': this.safeNumber(positionList, 18),
2931
+ 'maintenanceMarginPercentage': undefined,
2932
+ 'collateral': this.safeNumber(positionList, 17),
2933
+ 'initialMargin': this.parseNumber(Precise.stringMul(tradeAmount, tradePrice)),
2934
+ 'initialMarginPercentage': undefined,
2935
+ 'leverage': this.safeNumber(positionList, 9),
2936
+ 'marginRatio': undefined,
2937
+ 'stopLossPrice': undefined,
2938
+ 'takeProfitPrice': undefined,
2939
+ });
2940
+ }
2941
+ nonce() {
2942
+ return this.milliseconds();
2943
+ }
2944
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2945
+ let request = '/' + this.implodeParams(path, params);
2946
+ const query = this.omit(params, this.extractParams(path));
2947
+ if (api === 'v1') {
2948
+ request = api + request;
2949
+ }
2950
+ else {
2951
+ request = this.version + request;
2952
+ }
2953
+ let url = this.urls['api'][api] + '/' + request;
2954
+ if (api === 'public') {
2955
+ if (Object.keys(query).length) {
2956
+ url += '?' + this.urlencode(query);
2957
+ }
2958
+ }
2959
+ if (api === 'private') {
2960
+ this.checkRequiredCredentials();
2961
+ const nonce = this.nonce().toString();
2962
+ body = this.json(query);
2963
+ const auth = '/api/' + request + nonce + body;
2964
+ const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha384);
2965
+ headers = {
2966
+ 'bfx-nonce': nonce,
2967
+ 'bfx-apikey': this.apiKey,
2968
+ 'bfx-signature': signature,
2969
+ 'Content-Type': 'application/json',
2970
+ };
2971
+ }
2972
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
2973
+ }
2974
+ handleErrors(statusCode, statusText, url, method, headers, body, response, requestHeaders, requestBody) {
2975
+ // ["error", 11010, "ratelimit: error"]
2976
+ if (response !== undefined) {
2977
+ if (!Array.isArray(response)) {
2978
+ const message = this.safeString2(response, 'message', 'error');
2979
+ const feedback = this.id + ' ' + body;
2980
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
2981
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
2982
+ throw new ExchangeError(this.id + ' ' + body);
2983
+ }
2984
+ }
2985
+ else if (response === '') {
2986
+ throw new ExchangeError(this.id + ' returned empty response');
2987
+ }
2988
+ if (statusCode === 429) {
2989
+ throw new RateLimitExceeded(this.id + ' ' + body);
2990
+ }
2991
+ if (statusCode === 500) {
2992
+ // See https://docs.bitfinex.com/docs/abbreviations-glossary#section-errorinfo-codes
2993
+ const errorCode = this.safeString(response, 1, '');
2994
+ const errorText = this.safeString(response, 2, '');
2995
+ const feedback = this.id + ' ' + errorText;
2996
+ this.throwBroadlyMatchedException(this.exceptions['broad'], errorText, feedback);
2997
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
2998
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorText, feedback);
2999
+ throw new ExchangeError(this.id + ' ' + errorText + ' (#' + errorCode + ')');
3000
+ }
3001
+ return response;
3002
+ }
3003
+ parseLedgerEntryType(type) {
3004
+ if (type === undefined) {
3005
+ return undefined;
3006
+ }
3007
+ else if (type.indexOf('fee') >= 0 || type.indexOf('charged') >= 0) {
3008
+ return 'fee';
3009
+ }
3010
+ else if (type.indexOf('rebate') >= 0) {
3011
+ return 'rebate';
3012
+ }
3013
+ else if (type.indexOf('deposit') >= 0 || type.indexOf('withdrawal') >= 0) {
3014
+ return 'transaction';
3015
+ }
3016
+ else if (type.indexOf('transfer') >= 0) {
3017
+ return 'transfer';
3018
+ }
3019
+ else if (type.indexOf('payment') >= 0) {
3020
+ return 'payout';
3021
+ }
3022
+ else if (type.indexOf('exchange') >= 0 || type.indexOf('position') >= 0) {
3023
+ return 'trade';
3024
+ }
3025
+ else {
3026
+ return type;
3027
+ }
3028
+ }
3029
+ parseLedgerEntry(item, currency = undefined) {
3030
+ //
3031
+ // [
3032
+ // [
3033
+ // 2531822314, // ID: Ledger identifier
3034
+ // "USD", // CURRENCY: The symbol of the currency (ex. "BTC")
3035
+ // null, // PLACEHOLDER
3036
+ // 1573521810000, // MTS: Timestamp in milliseconds
3037
+ // null, // PLACEHOLDER
3038
+ // 0.01644445, // AMOUNT: Amount of funds moved
3039
+ // 0, // BALANCE: New balance
3040
+ // null, // PLACEHOLDER
3041
+ // "Settlement @ 185.79 on wallet margin" // DESCRIPTION: Description of ledger transaction
3042
+ // ]
3043
+ // ]
3044
+ //
3045
+ const itemList = this.safeList(item, 'result', []);
3046
+ let type = undefined;
3047
+ const id = this.safeString(itemList, 0);
3048
+ const currencyId = this.safeString(itemList, 1);
3049
+ const code = this.safeCurrencyCode(currencyId, currency);
3050
+ currency = this.safeCurrency(currencyId, currency);
3051
+ const timestamp = this.safeInteger(itemList, 3);
3052
+ const amount = this.safeNumber(itemList, 5);
3053
+ const after = this.safeNumber(itemList, 6);
3054
+ const description = this.safeString(itemList, 8);
3055
+ if (description !== undefined) {
3056
+ const parts = description.split(' @ ');
3057
+ const first = this.safeStringLower(parts, 0);
3058
+ type = this.parseLedgerEntryType(first);
3059
+ }
3060
+ return this.safeLedgerEntry({
3061
+ 'info': item,
3062
+ 'id': id,
3063
+ 'direction': undefined,
3064
+ 'account': undefined,
3065
+ 'referenceId': id,
3066
+ 'referenceAccount': undefined,
3067
+ 'type': type,
3068
+ 'currency': code,
3069
+ 'amount': amount,
3070
+ 'timestamp': timestamp,
3071
+ 'datetime': this.iso8601(timestamp),
3072
+ 'before': undefined,
3073
+ 'after': after,
3074
+ 'status': undefined,
3075
+ 'fee': undefined,
3076
+ }, currency);
3077
+ }
3078
+ /**
3079
+ * @method
3080
+ * @name bitfinex#fetchLedger
3081
+ * @description fetch the history of changes, actions done by the user or operations that altered the balance of the user
3082
+ * @see https://docs.bitfinex.com/reference/rest-auth-ledgers
3083
+ * @param {string} [code] unified currency code, default is undefined
3084
+ * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
3085
+ * @param {int} [limit] max number of ledger entries to return, default is undefined, max is 2500
3086
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3087
+ * @param {int} [params.until] timestamp in ms of the latest ledger entry
3088
+ * @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)
3089
+ * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger}
3090
+ */
3091
+ async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
3092
+ await this.loadMarkets();
3093
+ let paginate = false;
3094
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');
3095
+ if (paginate) {
3096
+ return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params, 2500);
3097
+ }
3098
+ let currency = undefined;
3099
+ let request = {};
3100
+ if (since !== undefined) {
3101
+ request['start'] = since;
3102
+ }
3103
+ if (limit !== undefined) {
3104
+ request['limit'] = limit;
3105
+ }
3106
+ [request, params] = this.handleUntilOption('end', request, params);
3107
+ let response = undefined;
3108
+ if (code !== undefined) {
3109
+ currency = this.currency(code);
3110
+ request['currency'] = currency['uppercaseId'];
3111
+ response = await this.privatePostAuthRLedgersCurrencyHist(this.extend(request, params));
3112
+ }
3113
+ else {
3114
+ response = await this.privatePostAuthRLedgersHist(this.extend(request, params));
3115
+ }
3116
+ //
3117
+ // [
3118
+ // [
3119
+ // 2531822314, // ID: Ledger identifier
3120
+ // "USD", // CURRENCY: The symbol of the currency (ex. "BTC")
3121
+ // null, // PLACEHOLDER
3122
+ // 1573521810000, // MTS: Timestamp in milliseconds
3123
+ // null, // PLACEHOLDER
3124
+ // 0.01644445, // AMOUNT: Amount of funds moved
3125
+ // 0, // BALANCE: New balance
3126
+ // null, // PLACEHOLDER
3127
+ // "Settlement @ 185.79 on wallet margin" // DESCRIPTION: Description of ledger transaction
3128
+ // ]
3129
+ // ]
3130
+ //
3131
+ const ledgerObjects = [];
3132
+ for (let i = 0; i < response.length; i++) {
3133
+ const item = response[i];
3134
+ ledgerObjects.push({ 'result': item });
3135
+ }
3136
+ return this.parseLedger(ledgerObjects, currency, since, limit);
3137
+ }
3138
+ /**
3139
+ * @method
3140
+ * @name bitfinex#fetchFundingRates
3141
+ * @description fetch the current funding rate for multiple symbols
3142
+ * @see https://docs.bitfinex.com/reference/rest-public-derivatives-status
3143
+ * @param {string[]} symbols list of unified market symbols
3144
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3145
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
3146
+ */
3147
+ async fetchFundingRates(symbols = undefined, params = {}) {
3148
+ if (symbols === undefined) {
3149
+ throw new ArgumentsRequired(this.id + ' fetchFundingRates() requires a symbols argument');
3150
+ }
3151
+ await this.loadMarkets();
3152
+ const marketIds = this.marketIds(symbols);
3153
+ const request = {
3154
+ 'keys': marketIds.join(','),
3155
+ };
3156
+ const response = await this.publicGetStatusDeriv(this.extend(request, params));
3157
+ //
3158
+ // [
3159
+ // [
3160
+ // "tBTCF0:USTF0",
3161
+ // 1691165059000,
3162
+ // null,
3163
+ // 29297.851276225,
3164
+ // 29277.5,
3165
+ // null,
3166
+ // 36950860.76010306,
3167
+ // null,
3168
+ // 1691193600000,
3169
+ // 0.00000527,
3170
+ // 82,
3171
+ // null,
3172
+ // 0.00014548,
3173
+ // null,
3174
+ // null,
3175
+ // 29278.8925,
3176
+ // null,
3177
+ // null,
3178
+ // 9636.07644994,
3179
+ // null,
3180
+ // null,
3181
+ // null,
3182
+ // 0.0005,
3183
+ // 0.0025
3184
+ // ]
3185
+ // ]
3186
+ //
3187
+ return this.parseFundingRates(response, symbols);
3188
+ }
3189
+ /**
3190
+ * @method
3191
+ * @name bitfinex#fetchFundingRateHistory
3192
+ * @description fetches historical funding rate prices
3193
+ * @see https://docs.bitfinex.com/reference/rest-public-derivatives-status-history
3194
+ * @param {string} symbol unified market symbol
3195
+ * @param {int} [since] timestamp in ms of the earliest funding rate entry
3196
+ * @param {int} [limit] max number of funding rate entrys to return
3197
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3198
+ * @param {int} [params.until] timestamp in ms of the latest funding rate
3199
+ * @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)
3200
+ * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
3201
+ */
3202
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
3203
+ if (symbol === undefined) {
3204
+ throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
3205
+ }
3206
+ await this.loadMarkets();
3207
+ let paginate = false;
3208
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
3209
+ if (paginate) {
3210
+ return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 5000);
3211
+ }
3212
+ const market = this.market(symbol);
3213
+ let request = {
3214
+ 'symbol': market['id'],
3215
+ };
3216
+ if (since !== undefined) {
3217
+ request['start'] = since;
3218
+ }
3219
+ [request, params] = this.handleUntilOption('end', request, params);
3220
+ const response = await this.publicGetStatusDerivSymbolHist(this.extend(request, params));
3221
+ //
3222
+ // [
3223
+ // [
3224
+ // "tBTCF0:USTF0",
3225
+ // 1691165059000,
3226
+ // null,
3227
+ // 29297.851276225,
3228
+ // 29277.5,
3229
+ // null,
3230
+ // 36950860.76010306,
3231
+ // null,
3232
+ // 1691193600000,
3233
+ // 0.00000527,
3234
+ // 82,
3235
+ // null,
3236
+ // 0.00014548,
3237
+ // null,
3238
+ // null,
3239
+ // 29278.8925,
3240
+ // null,
3241
+ // null,
3242
+ // 9636.07644994,
3243
+ // null,
3244
+ // null,
3245
+ // null,
3246
+ // 0.0005,
3247
+ // 0.0025
3248
+ // ]
3249
+ // ]
3250
+ //
3251
+ const rates = [];
3252
+ for (let i = 0; i < response.length; i++) {
3253
+ const fr = response[i];
3254
+ const rate = this.parseFundingRateHistory(fr, market);
3255
+ rates.push(rate);
3256
+ }
3257
+ const reversedArray = [];
3258
+ const rawRates = this.filterBySymbolSinceLimit(rates, symbol, since, limit);
3259
+ const ratesLength = rawRates.length;
3260
+ for (let i = 0; i < ratesLength; i++) {
3261
+ const index = ratesLength - i - 1;
3262
+ const valueAtIndex = rawRates[index];
3263
+ reversedArray.push(valueAtIndex);
3264
+ }
3265
+ return reversedArray;
3266
+ }
3267
+ parseFundingRate(contract, market = undefined) {
3268
+ //
3269
+ // [
3270
+ // "tBTCF0:USTF0",
3271
+ // 1691165059000,
3272
+ // null,
3273
+ // 29297.851276225,
3274
+ // 29277.5,
3275
+ // null,
3276
+ // 36950860.76010306,
3277
+ // null,
3278
+ // 1691193600000,
3279
+ // 0.00000527,
3280
+ // 82,
3281
+ // null,
3282
+ // 0.00014548,
3283
+ // null,
3284
+ // null,
3285
+ // 29278.8925,
3286
+ // null,
3287
+ // null,
3288
+ // 9636.07644994,
3289
+ // null,
3290
+ // null,
3291
+ // null,
3292
+ // 0.0005,
3293
+ // 0.0025
3294
+ // ]
3295
+ //
3296
+ const marketId = this.safeString(contract, 0);
3297
+ const timestamp = this.safeInteger(contract, 1);
3298
+ const nextFundingTimestamp = this.safeInteger(contract, 8);
3299
+ return {
3300
+ 'info': contract,
3301
+ 'symbol': this.safeSymbol(marketId, market),
3302
+ 'markPrice': this.safeNumber(contract, 15),
3303
+ 'indexPrice': this.safeNumber(contract, 3),
3304
+ 'interestRate': undefined,
3305
+ 'estimatedSettlePrice': undefined,
3306
+ 'timestamp': timestamp,
3307
+ 'datetime': this.iso8601(timestamp),
3308
+ 'fundingRate': this.safeNumber(contract, 12),
3309
+ 'fundingTimestamp': undefined,
3310
+ 'fundingDatetime': undefined,
3311
+ 'nextFundingRate': this.safeNumber(contract, 9),
3312
+ 'nextFundingTimestamp': nextFundingTimestamp,
3313
+ 'nextFundingDatetime': this.iso8601(nextFundingTimestamp),
3314
+ 'previousFundingRate': undefined,
3315
+ 'previousFundingTimestamp': undefined,
3316
+ 'previousFundingDatetime': undefined,
3317
+ 'interval': undefined,
3318
+ };
3319
+ }
3320
+ parseFundingRateHistory(contract, market = undefined) {
3321
+ //
3322
+ // [
3323
+ // 1691165494000,
3324
+ // null,
3325
+ // 29278.95838065,
3326
+ // 29260.5,
3327
+ // null,
3328
+ // 36950860.76010305,
3329
+ // null,
3330
+ // 1691193600000,
3331
+ // 0.00001449,
3332
+ // 222,
3333
+ // null,
3334
+ // 0.00014548,
3335
+ // null,
3336
+ // null,
3337
+ // 29260.005,
3338
+ // null,
3339
+ // null,
3340
+ // 9635.86484562,
3341
+ // null,
3342
+ // null,
3343
+ // null,
3344
+ // 0.0005,
3345
+ // 0.0025
3346
+ // ]
3347
+ //
3348
+ const timestamp = this.safeInteger(contract, 0);
3349
+ const nextFundingTimestamp = this.safeInteger(contract, 7);
3350
+ return {
3351
+ 'info': contract,
3352
+ 'symbol': this.safeSymbol(undefined, market),
3353
+ 'markPrice': this.safeNumber(contract, 14),
3354
+ 'indexPrice': this.safeNumber(contract, 2),
3355
+ 'interestRate': undefined,
3356
+ 'estimatedSettlePrice': undefined,
3357
+ 'timestamp': timestamp,
3358
+ 'datetime': this.iso8601(timestamp),
3359
+ 'fundingRate': this.safeNumber(contract, 11),
3360
+ 'fundingTimestamp': undefined,
3361
+ 'fundingDatetime': undefined,
3362
+ 'nextFundingRate': this.safeNumber(contract, 8),
3363
+ 'nextFundingTimestamp': nextFundingTimestamp,
3364
+ 'nextFundingDatetime': this.iso8601(nextFundingTimestamp),
3365
+ 'previousFundingRate': undefined,
3366
+ 'previousFundingTimestamp': undefined,
3367
+ 'previousFundingDatetime': undefined,
3368
+ };
3369
+ }
3370
+ /**
3371
+ * @method
3372
+ * @name bitfinex#fetchOpenInterests
3373
+ * @description Retrieves the open interest for a list of symbols
3374
+ * @see https://docs.bitfinex.com/reference/rest-public-derivatives-status
3375
+ * @param {string[]} [symbols] a list of unified CCXT market symbols
3376
+ * @param {object} [params] exchange specific parameters
3377
+ * @returns {object[]} a list of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
3378
+ */
3379
+ async fetchOpenInterests(symbols = undefined, params = {}) {
3380
+ await this.loadMarkets();
3381
+ symbols = this.marketSymbols(symbols);
3382
+ let marketIds = ['ALL'];
3383
+ if (symbols !== undefined) {
3384
+ marketIds = this.marketIds(symbols);
3385
+ }
3386
+ const request = {
3387
+ 'keys': marketIds.join(','),
3388
+ };
3389
+ const response = await this.publicGetStatusDeriv(this.extend(request, params));
3390
+ //
3391
+ // [
3392
+ // [
3393
+ // "tXRPF0:USTF0", // market id
3394
+ // 1706256986000, // millisecond timestamp
3395
+ // null,
3396
+ // 0.512705, // derivative mid price
3397
+ // 0.512395, // underlying spot mid price
3398
+ // null,
3399
+ // 37671483.04, // insurance fund balance
3400
+ // null,
3401
+ // 1706284800000, // timestamp of next funding
3402
+ // 0.00002353, // accrued funding for next period
3403
+ // 317, // next funding step
3404
+ // null,
3405
+ // 0, // current funding
3406
+ // null,
3407
+ // null,
3408
+ // 0.5123016, // mark price
3409
+ // null,
3410
+ // null,
3411
+ // 2233562.03115, // open interest in contracts
3412
+ // null,
3413
+ // null,
3414
+ // null,
3415
+ // 0.0005, // average spread without funding payment
3416
+ // 0.0025 // funding payment cap
3417
+ // ]
3418
+ // ]
3419
+ //
3420
+ return this.parseOpenInterests(response, symbols);
3421
+ }
3422
+ /**
3423
+ * @method
3424
+ * @name bitfinex#fetchOpenInterest
3425
+ * @description retrieves the open interest of a contract trading pair
3426
+ * @see https://docs.bitfinex.com/reference/rest-public-derivatives-status
3427
+ * @param {string} symbol unified CCXT market symbol
3428
+ * @param {object} [params] exchange specific parameters
3429
+ * @returns {object} an [open interest structure]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
3430
+ */
3431
+ async fetchOpenInterest(symbol, params = {}) {
3432
+ await this.loadMarkets();
3433
+ const market = this.market(symbol);
3434
+ const request = {
3435
+ 'keys': market['id'],
3436
+ };
3437
+ const response = await this.publicGetStatusDeriv(this.extend(request, params));
3438
+ //
3439
+ // [
3440
+ // [
3441
+ // "tXRPF0:USTF0", // market id
3442
+ // 1706256986000, // millisecond timestamp
3443
+ // null,
3444
+ // 0.512705, // derivative mid price
3445
+ // 0.512395, // underlying spot mid price
3446
+ // null,
3447
+ // 37671483.04, // insurance fund balance
3448
+ // null,
3449
+ // 1706284800000, // timestamp of next funding
3450
+ // 0.00002353, // accrued funding for next period
3451
+ // 317, // next funding step
3452
+ // null,
3453
+ // 0, // current funding
3454
+ // null,
3455
+ // null,
3456
+ // 0.5123016, // mark price
3457
+ // null,
3458
+ // null,
3459
+ // 2233562.03115, // open interest in contracts
3460
+ // null,
3461
+ // null,
3462
+ // null,
3463
+ // 0.0005, // average spread without funding payment
3464
+ // 0.0025 // funding payment cap
3465
+ // ]
3466
+ // ]
3467
+ //
3468
+ const oi = this.safeList(response, 0);
3469
+ return this.parseOpenInterest(oi, market);
3470
+ }
3471
+ /**
3472
+ * @method
3473
+ * @name bitfinex#fetchOpenInterestHistory
3474
+ * @description retrieves the open interest history of a currency
3475
+ * @see https://docs.bitfinex.com/reference/rest-public-derivatives-status-history
3476
+ * @param {string} symbol unified CCXT market symbol
3477
+ * @param {string} timeframe the time period of each row of data, not used by bitfinex
3478
+ * @param {int} [since] the time in ms of the earliest record to retrieve as a unix timestamp
3479
+ * @param {int} [limit] the number of records in the response
3480
+ * @param {object} [params] exchange specific parameters
3481
+ * @param {int} [params.until] the time in ms of the latest record to retrieve as a unix timestamp
3482
+ * @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)
3483
+ * @returns An array of [open interest structures]{@link https://docs.ccxt.com/#/?id=open-interest-structure}
3484
+ */
3485
+ async fetchOpenInterestHistory(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
3486
+ await this.loadMarkets();
3487
+ let paginate = false;
3488
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOpenInterestHistory', 'paginate');
3489
+ if (paginate) {
3490
+ return await this.fetchPaginatedCallDeterministic('fetchOpenInterestHistory', symbol, since, limit, '8h', params, 5000);
3491
+ }
3492
+ const market = this.market(symbol);
3493
+ let request = {
3494
+ 'symbol': market['id'],
3495
+ };
3496
+ if (since !== undefined) {
3497
+ request['start'] = since;
3498
+ }
3499
+ if (limit !== undefined) {
3500
+ request['limit'] = limit;
3501
+ }
3502
+ [request, params] = this.handleUntilOption('end', request, params);
3503
+ const response = await this.publicGetStatusDerivSymbolHist(this.extend(request, params));
3504
+ //
3505
+ // [
3506
+ // [
3507
+ // 1706295191000, // timestamp
3508
+ // null,
3509
+ // 42152.425382, // derivative mid price
3510
+ // 42133, // spot mid price
3511
+ // null,
3512
+ // 37671589.7853521, // insurance fund balance
3513
+ // null,
3514
+ // 1706313600000, // timestamp of next funding
3515
+ // 0.00018734, // accrued funding for next period
3516
+ // 3343, // next funding step
3517
+ // null,
3518
+ // 0.00007587, // current funding
3519
+ // null,
3520
+ // null,
3521
+ // 42134.1, // mark price
3522
+ // null,
3523
+ // null,
3524
+ // 5775.20348804, // open interest number of contracts
3525
+ // null,
3526
+ // null,
3527
+ // null,
3528
+ // 0.0005, // average spread without funding payment
3529
+ // 0.0025 // funding payment cap
3530
+ // ],
3531
+ // ]
3532
+ //
3533
+ return this.parseOpenInterestsHistory(response, market, since, limit);
3534
+ }
3535
+ parseOpenInterest(interest, market = undefined) {
3536
+ //
3537
+ // fetchOpenInterest:
3538
+ //
3539
+ // [
3540
+ // "tXRPF0:USTF0", // market id
3541
+ // 1706256986000, // millisecond timestamp
3542
+ // null,
3543
+ // 0.512705, // derivative mid price
3544
+ // 0.512395, // underlying spot mid price
3545
+ // null,
3546
+ // 37671483.04, // insurance fund balance
3547
+ // null,
3548
+ // 1706284800000, // timestamp of next funding
3549
+ // 0.00002353, // accrued funding for next period
3550
+ // 317, // next funding step
3551
+ // null,
3552
+ // 0, // current funding
3553
+ // null,
3554
+ // null,
3555
+ // 0.5123016, // mark price
3556
+ // null,
3557
+ // null,
3558
+ // 2233562.03115, // open interest in contracts
3559
+ // null,
3560
+ // null,
3561
+ // null,
3562
+ // 0.0005, // average spread without funding payment
3563
+ // 0.0025 // funding payment cap
3564
+ // ]
3565
+ //
3566
+ // fetchOpenInterestHistory:
3567
+ //
3568
+ // [
3569
+ // 1706295191000, // timestamp
3570
+ // null,
3571
+ // 42152.425382, // derivative mid price
3572
+ // 42133, // spot mid price
3573
+ // null,
3574
+ // 37671589.7853521, // insurance fund balance
3575
+ // null,
3576
+ // 1706313600000, // timestamp of next funding
3577
+ // 0.00018734, // accrued funding for next period
3578
+ // 3343, // next funding step
3579
+ // null,
3580
+ // 0.00007587, // current funding
3581
+ // null,
3582
+ // null,
3583
+ // 42134.1, // mark price
3584
+ // null,
3585
+ // null,
3586
+ // 5775.20348804, // open interest number of contracts
3587
+ // null,
3588
+ // null,
3589
+ // null,
3590
+ // 0.0005, // average spread without funding payment
3591
+ // 0.0025 // funding payment cap
3592
+ // ]
3593
+ //
3594
+ const interestLength = interest.length;
3595
+ const openInterestIndex = (interestLength === 23) ? 17 : 18;
3596
+ const timestamp = this.safeInteger(interest, 1);
3597
+ const marketId = this.safeString(interest, 0);
3598
+ return this.safeOpenInterest({
3599
+ 'symbol': this.safeSymbol(marketId, market, undefined, 'swap'),
3600
+ 'openInterestAmount': this.safeNumber(interest, openInterestIndex),
3601
+ 'openInterestValue': undefined,
3602
+ 'timestamp': timestamp,
3603
+ 'datetime': this.iso8601(timestamp),
3604
+ 'info': interest,
3605
+ }, market);
3606
+ }
3607
+ /**
3608
+ * @method
3609
+ * @name bitfinex#fetchLiquidations
3610
+ * @description retrieves the public liquidations of a trading pair
3611
+ * @see https://docs.bitfinex.com/reference/rest-public-liquidations
3612
+ * @param {string} symbol unified CCXT market symbol
3613
+ * @param {int} [since] the earliest time in ms to fetch liquidations for
3614
+ * @param {int} [limit] the maximum number of liquidation structures to retrieve
3615
+ * @param {object} [params] exchange specific parameters
3616
+ * @param {int} [params.until] timestamp in ms of the latest liquidation
3617
+ * @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)
3618
+ * @returns {object} an array of [liquidation structures]{@link https://docs.ccxt.com/#/?id=liquidation-structure}
3619
+ */
3620
+ async fetchLiquidations(symbol, since = undefined, limit = undefined, params = {}) {
3621
+ await this.loadMarkets();
3622
+ let paginate = false;
3623
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchLiquidations', 'paginate');
3624
+ if (paginate) {
3625
+ return await this.fetchPaginatedCallDeterministic('fetchLiquidations', symbol, since, limit, '8h', params, 500);
3626
+ }
3627
+ const market = this.market(symbol);
3628
+ let request = {};
3629
+ if (since !== undefined) {
3630
+ request['start'] = since;
3631
+ }
3632
+ if (limit !== undefined) {
3633
+ request['limit'] = limit;
3634
+ }
3635
+ [request, params] = this.handleUntilOption('end', request, params);
3636
+ const response = await this.publicGetLiquidationsHist(this.extend(request, params));
3637
+ //
3638
+ // [
3639
+ // [
3640
+ // [
3641
+ // "pos",
3642
+ // 171085137,
3643
+ // 1706395919788,
3644
+ // null,
3645
+ // "tAVAXF0:USTF0",
3646
+ // -8,
3647
+ // 32.868,
3648
+ // null,
3649
+ // 1,
3650
+ // 1,
3651
+ // null,
3652
+ // 33.255
3653
+ // ]
3654
+ // ],
3655
+ // ]
3656
+ //
3657
+ return this.parseLiquidations(response, market, since, limit);
3658
+ }
3659
+ parseLiquidation(liquidation, market = undefined) {
3660
+ //
3661
+ // [
3662
+ // [
3663
+ // "pos",
3664
+ // 171085137, // position id
3665
+ // 1706395919788, // timestamp
3666
+ // null,
3667
+ // "tAVAXF0:USTF0", // market id
3668
+ // -8, // amount in contracts
3669
+ // 32.868, // base price
3670
+ // null,
3671
+ // 1,
3672
+ // 1,
3673
+ // null,
3674
+ // 33.255 // acquired price
3675
+ // ]
3676
+ // ]
3677
+ //
3678
+ const entry = liquidation[0];
3679
+ const timestamp = this.safeInteger(entry, 2);
3680
+ const marketId = this.safeString(entry, 4);
3681
+ const contracts = Precise.stringAbs(this.safeString(entry, 5));
3682
+ const contractSize = this.safeString(market, 'contractSize');
3683
+ const baseValue = Precise.stringMul(contracts, contractSize);
3684
+ const price = this.safeString(entry, 11);
3685
+ const sideFlag = this.safeInteger(entry, 8);
3686
+ const side = (sideFlag === 1) ? 'buy' : 'sell';
3687
+ return this.safeLiquidation({
3688
+ 'info': entry,
3689
+ 'symbol': this.safeSymbol(marketId, market, undefined, 'contract'),
3690
+ 'contracts': this.parseNumber(contracts),
3691
+ 'contractSize': this.parseNumber(contractSize),
3692
+ 'price': this.parseNumber(price),
3693
+ 'side': side,
3694
+ 'baseValue': this.parseNumber(baseValue),
3695
+ 'quoteValue': this.parseNumber(Precise.stringMul(baseValue, price)),
3696
+ 'timestamp': timestamp,
3697
+ 'datetime': this.iso8601(timestamp),
3698
+ });
3699
+ }
3700
+ /**
3701
+ * @method
3702
+ * @name bitfinex#setMargin
3703
+ * @description either adds or reduces margin in a swap position in order to set the margin to a specific value
3704
+ * @see https://docs.bitfinex.com/reference/rest-auth-deriv-pos-collateral-set
3705
+ * @param {string} symbol unified market symbol of the market to set margin in
3706
+ * @param {float} amount the amount to set the margin to
3707
+ * @param {object} [params] parameters specific to the exchange API endpoint
3708
+ * @returns {object} A [margin structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#add-margin-structure}
3709
+ */
3710
+ async setMargin(symbol, amount, params = {}) {
3711
+ await this.loadMarkets();
3712
+ const market = this.market(symbol);
3713
+ if (!market['swap']) {
3714
+ throw new NotSupported(this.id + ' setMargin() only support swap markets');
3715
+ }
3716
+ const request = {
3717
+ 'symbol': market['id'],
3718
+ 'collateral': this.parseToNumeric(amount),
3719
+ };
3720
+ const response = await this.privatePostAuthWDerivCollateralSet(this.extend(request, params));
3721
+ //
3722
+ // [
3723
+ // [
3724
+ // 1
3725
+ // ]
3726
+ // ]
3727
+ //
3728
+ const data = this.safeValue(response, 0);
3729
+ return this.parseMarginModification(data, market);
3730
+ }
3731
+ parseMarginModification(data, market = undefined) {
3732
+ //
3733
+ // setMargin
3734
+ //
3735
+ // [
3736
+ // [
3737
+ // 1
3738
+ // ]
3739
+ // ]
3740
+ //
3741
+ const marginStatusRaw = data[0];
3742
+ const marginStatus = (marginStatusRaw === 1) ? 'ok' : 'failed';
3743
+ return {
3744
+ 'info': data,
3745
+ 'symbol': market['symbol'],
3746
+ 'type': undefined,
3747
+ 'marginMode': 'isolated',
3748
+ 'amount': undefined,
3749
+ 'total': undefined,
3750
+ 'code': undefined,
3751
+ 'status': marginStatus,
3752
+ 'timestamp': undefined,
3753
+ 'datetime': undefined,
3754
+ };
3755
+ }
3756
+ /**
3757
+ * @method
3758
+ * @name bitfinex#fetchOrder
3759
+ * @description fetches information on an order made by the user
3760
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders
3761
+ * @see https://docs.bitfinex.com/reference/rest-auth-retrieve-orders-by-symbol
3762
+ * @param {string} id the order id
3763
+ * @param {string} [symbol] unified symbol of the market the order was made in
3764
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3765
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3766
+ */
3767
+ async fetchOrder(id, symbol = undefined, params = {}) {
3768
+ await this.loadMarkets();
3769
+ const request = {
3770
+ 'id': [this.parseToNumeric(id)],
3771
+ };
3772
+ let market = undefined;
3773
+ let response = undefined;
3774
+ if (symbol === undefined) {
3775
+ response = await this.privatePostAuthROrders(this.extend(request, params));
3776
+ }
3777
+ else {
3778
+ market = this.market(symbol);
3779
+ request['symbol'] = market['id'];
3780
+ response = await this.privatePostAuthROrdersSymbol(this.extend(request, params));
3781
+ }
3782
+ //
3783
+ // [
3784
+ // [
3785
+ // 139658969116,
3786
+ // null,
3787
+ // 1706843908637,
3788
+ // "tBTCUST",
3789
+ // 1706843908637,
3790
+ // 1706843908638,
3791
+ // 0.0001,
3792
+ // 0.0001,
3793
+ // "EXCHANGE LIMIT",
3794
+ // null,
3795
+ // null,
3796
+ // null,
3797
+ // 0,
3798
+ // "ACTIVE",
3799
+ // null,
3800
+ // null,
3801
+ // 35000,
3802
+ // 0,
3803
+ // 0,
3804
+ // 0,
3805
+ // null,
3806
+ // null,
3807
+ // null,
3808
+ // 0,
3809
+ // 0,
3810
+ // null,
3811
+ // null,
3812
+ // null,
3813
+ // "API>BFX",
3814
+ // null,
3815
+ // null,
3816
+ // {}
3817
+ // ]
3818
+ // ]
3819
+ //
3820
+ const order = this.safeList(response, 0);
3821
+ const newOrder = { 'result': order };
3822
+ return this.parseOrder(newOrder, market);
3823
+ }
3824
+ /**
3825
+ * @method
3826
+ * @name bitfinex#editOrder
3827
+ * @description edit a trade order
3828
+ * @see https://docs.bitfinex.com/reference/rest-auth-update-order
3829
+ * @param {string} id edit order id
3830
+ * @param {string} symbol unified symbol of the market to edit an order in
3831
+ * @param {string} type 'market' or 'limit'
3832
+ * @param {string} side 'buy' or 'sell'
3833
+ * @param {float} amount how much you want to trade in units of the base currency
3834
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
3835
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3836
+ * @param {float} [params.triggerPrice] the price that triggers a trigger order
3837
+ * @param {boolean} [params.postOnly] set to true if you want to make a post only order
3838
+ * @param {boolean} [params.reduceOnly] indicates that the order is to reduce the size of a position
3839
+ * @param {int} [params.flags] additional order parameters: 4096 (Post Only), 1024 (Reduce Only), 16384 (OCO), 64 (Hidden), 512 (Close), 524288 (No Var Rates)
3840
+ * @param {int} [params.leverage] leverage for a derivative order, supported by derivative symbol orders only, the value should be between 1 and 100 inclusive
3841
+ * @param {int} [params.clientOrderId] a unique client order id for the order
3842
+ * @param {float} [params.trailingAmount] *swap only* the quote amount to trail away from the current market price
3843
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3844
+ */
3845
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
3846
+ await this.loadMarkets();
3847
+ const market = this.market(symbol);
3848
+ const request = {
3849
+ 'id': this.parseToNumeric(id),
3850
+ };
3851
+ if (amount !== undefined) {
3852
+ let amountString = this.amountToPrecision(symbol, amount);
3853
+ amountString = (side === 'buy') ? amountString : Precise.stringNeg(amountString);
3854
+ request['amount'] = amountString;
3855
+ }
3856
+ const triggerPrice = this.safeString2(params, 'stopPrice', 'triggerPrice');
3857
+ const trailingAmount = this.safeString(params, 'trailingAmount');
3858
+ const timeInForce = this.safeString(params, 'timeInForce');
3859
+ const postOnlyParam = this.safeBool(params, 'postOnly', false);
3860
+ const reduceOnly = this.safeBool(params, 'reduceOnly', false);
3861
+ const clientOrderId = this.safeInteger2(params, 'cid', 'clientOrderId');
3862
+ if (trailingAmount !== undefined) {
3863
+ request['price_trailing'] = trailingAmount;
3864
+ }
3865
+ else if (triggerPrice !== undefined) {
3866
+ // request['price'] is taken as triggerPrice for stop orders
3867
+ request['price'] = this.priceToPrecision(symbol, triggerPrice);
3868
+ if (type === 'limit') {
3869
+ request['price_aux_limit'] = this.priceToPrecision(symbol, price);
3870
+ }
3871
+ }
3872
+ const postOnly = (postOnlyParam || (timeInForce === 'PO'));
3873
+ if ((type !== 'market') && (triggerPrice === undefined)) {
3874
+ request['price'] = this.priceToPrecision(symbol, price);
3875
+ }
3876
+ // flag values may be summed to combine flags
3877
+ let flags = 0;
3878
+ if (postOnly) {
3879
+ flags = this.sum(flags, 4096);
3880
+ }
3881
+ if (reduceOnly) {
3882
+ flags = this.sum(flags, 1024);
3883
+ }
3884
+ if (flags !== 0) {
3885
+ request['flags'] = flags;
3886
+ }
3887
+ if (clientOrderId !== undefined) {
3888
+ request['cid'] = clientOrderId;
3889
+ }
3890
+ const leverage = this.safeInteger2(params, 'leverage', 'lev');
3891
+ if (leverage !== undefined) {
3892
+ request['lev'] = leverage;
3893
+ }
3894
+ params = this.omit(params, ['triggerPrice', 'stopPrice', 'timeInForce', 'postOnly', 'reduceOnly', 'trailingAmount', 'clientOrderId', 'leverage']);
3895
+ const response = await this.privatePostAuthWOrderUpdate(this.extend(request, params));
3896
+ //
3897
+ // [
3898
+ // 1706845376402,
3899
+ // "ou-req",
3900
+ // null,
3901
+ // null,
3902
+ // [
3903
+ // 139658969116,
3904
+ // null,
3905
+ // 1706843908637,
3906
+ // "tBTCUST",
3907
+ // 1706843908637,
3908
+ // 1706843908638,
3909
+ // 0.0002,
3910
+ // 0.0002,
3911
+ // "EXCHANGE LIMIT",
3912
+ // null,
3913
+ // null,
3914
+ // null,
3915
+ // 0,
3916
+ // "ACTIVE",
3917
+ // null,
3918
+ // null,
3919
+ // 35000,
3920
+ // 0,
3921
+ // 0,
3922
+ // 0,
3923
+ // null,
3924
+ // null,
3925
+ // null,
3926
+ // 0,
3927
+ // 0,
3928
+ // null,
3929
+ // null,
3930
+ // null,
3931
+ // "API>BFX",
3932
+ // null,
3933
+ // null,
3934
+ // {}
3935
+ // ],
3936
+ // null,
3937
+ // "SUCCESS",
3938
+ // "Submitting update to exchange limit buy order for 0.0002 BTC."
3939
+ // ]
3940
+ //
3941
+ const status = this.safeString(response, 6);
3942
+ if (status !== 'SUCCESS') {
3943
+ const errorCode = response[5];
3944
+ const errorText = response[7];
3945
+ throw new ExchangeError(this.id + ' ' + response[6] + ': ' + errorText + ' (#' + errorCode + ')');
3946
+ }
3947
+ const order = this.safeList(response, 4, []);
3948
+ const newOrder = { 'result': order };
3949
+ return this.parseOrder(newOrder, market);
3950
+ }
3951
+ }