ccxt-ir 4.10.0 → 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 (1047) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +4 -1
  4. package/dist/cjs/src/abstract/bidarz.js +11 -0
  5. package/dist/cjs/src/bidarz.js +337 -0
  6. package/dist/cjs/src/bit24.js +4 -3
  7. package/js/ccxt.d.ts +5 -2
  8. package/js/ccxt.js +4 -2
  9. package/js/src/abstract/bidarz.d.ts +9 -0
  10. package/js/src/abstract/bidarz.js +11 -0
  11. package/js/src/bidarz.d.ts +22 -0
  12. package/js/src/bidarz.js +336 -0
  13. package/js/src/bit24.js +4 -3
  14. package/js/src/src/abantether.d.ts +21 -0
  15. package/js/src/src/abantether.js +353 -0
  16. package/js/src/src/abstract/abantether.d.ts +8 -0
  17. package/js/src/src/abstract/abantether.js +11 -0
  18. package/js/src/src/abstract/afratether.d.ts +9 -0
  19. package/js/src/src/abstract/afratether.js +11 -0
  20. package/js/src/src/abstract/alpaca.d.ts +77 -0
  21. package/js/src/src/abstract/alpaca.js +11 -0
  22. package/js/src/src/abstract/apex.d.ts +34 -0
  23. package/js/src/src/abstract/apex.js +11 -0
  24. package/js/src/src/abstract/arzinja.d.ts +8 -0
  25. package/js/src/src/abstract/arzinja.js +11 -0
  26. package/js/src/src/abstract/arzplus.d.ts +11 -0
  27. package/js/src/src/abstract/arzplus.js +11 -0
  28. package/js/src/src/abstract/ascendex.d.ts +80 -0
  29. package/js/src/src/abstract/ascendex.js +11 -0
  30. package/js/src/src/abstract/asretether.d.ts +8 -0
  31. package/js/src/src/abstract/asretether.js +11 -0
  32. package/js/src/src/abstract/bidarz.d.ts +9 -0
  33. package/js/src/src/abstract/bidarz.js +11 -0
  34. package/js/src/src/abstract/bigone.d.ts +48 -0
  35. package/js/src/src/abstract/bigone.js +11 -0
  36. package/js/src/src/abstract/binance.d.ts +773 -0
  37. package/js/src/src/abstract/binance.js +11 -0
  38. package/js/src/src/abstract/bingx.d.ts +165 -0
  39. package/js/src/src/abstract/bingx.js +11 -0
  40. package/js/src/src/abstract/bit24.d.ts +9 -0
  41. package/js/src/src/abstract/bit24.js +11 -0
  42. package/js/src/src/abstract/bit2c.d.ts +30 -0
  43. package/js/src/src/abstract/bit2c.js +11 -0
  44. package/js/src/src/abstract/bitbank.d.ts +35 -0
  45. package/js/src/src/abstract/bitbank.js +11 -0
  46. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  47. package/js/src/src/abstract/bitbarg.js +11 -0
  48. package/js/src/src/abstract/bitbns.d.ts +43 -0
  49. package/js/src/src/abstract/bitbns.js +11 -0
  50. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  51. package/js/src/src/abstract/bitfinex.js +11 -0
  52. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  53. package/js/src/src/abstract/bitflyer.js +11 -0
  54. package/js/src/src/abstract/bitget.d.ts +578 -0
  55. package/js/src/src/abstract/bitget.js +11 -0
  56. package/js/src/src/abstract/bithumb.d.ts +35 -0
  57. package/js/src/src/abstract/bithumb.js +11 -0
  58. package/js/src/src/abstract/bitimen.d.ts +10 -0
  59. package/js/src/src/abstract/bitimen.js +11 -0
  60. package/js/src/src/abstract/bitir.d.ts +10 -0
  61. package/js/src/src/abstract/bitir.js +11 -0
  62. package/js/src/src/abstract/bitmart.d.ts +120 -0
  63. package/js/src/src/abstract/bitmart.js +11 -0
  64. package/js/src/src/abstract/bitmex.d.ts +100 -0
  65. package/js/src/src/abstract/bitmex.js +11 -0
  66. package/js/src/src/abstract/bitopro.d.ts +33 -0
  67. package/js/src/src/abstract/bitopro.js +11 -0
  68. package/js/src/src/abstract/bitpin.d.ts +11 -0
  69. package/js/src/src/abstract/bitpin.js +11 -0
  70. package/js/src/src/abstract/bitrue.d.ts +75 -0
  71. package/js/src/src/abstract/bitrue.js +11 -0
  72. package/js/src/src/abstract/bitso.d.ts +46 -0
  73. package/js/src/src/abstract/bitso.js +11 -0
  74. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  75. package/js/src/src/abstract/bitstamp.js +11 -0
  76. package/js/src/src/abstract/bitteam.d.ts +32 -0
  77. package/js/src/src/abstract/bitteam.js +11 -0
  78. package/js/src/src/abstract/bittrade.d.ts +117 -0
  79. package/js/src/src/abstract/bittrade.js +11 -0
  80. package/js/src/src/abstract/bitunix.d.ts +9 -0
  81. package/js/src/src/abstract/bitunix.js +11 -0
  82. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  83. package/js/src/src/abstract/bitvavo.js +11 -0
  84. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  85. package/js/src/src/abstract/blockchaincom.js +11 -0
  86. package/js/src/src/abstract/blofin.d.ts +70 -0
  87. package/js/src/src/abstract/blofin.js +11 -0
  88. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  89. package/js/src/src/abstract/btcalpha.js +11 -0
  90. package/js/src/src/abstract/btcbox.d.ts +18 -0
  91. package/js/src/src/abstract/btcbox.js +11 -0
  92. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  93. package/js/src/src/abstract/btcmarkets.js +11 -0
  94. package/js/src/src/abstract/btcturk.d.ts +23 -0
  95. package/js/src/src/abstract/btcturk.js +11 -0
  96. package/js/src/src/abstract/bybit.d.ts +316 -0
  97. package/js/src/src/abstract/bybit.js +11 -0
  98. package/js/src/src/abstract/bydfi.d.ts +11 -0
  99. package/js/src/src/abstract/bydfi.js +11 -0
  100. package/js/src/src/abstract/cafearz.d.ts +8 -0
  101. package/js/src/src/abstract/cafearz.js +11 -0
  102. package/js/src/src/abstract/cex.d.ts +35 -0
  103. package/js/src/src/abstract/cex.js +11 -0
  104. package/js/src/src/abstract/coinbase.d.ts +97 -0
  105. package/js/src/src/abstract/coinbase.js +11 -0
  106. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  107. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  108. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  109. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  110. package/js/src/src/abstract/coincatch.d.ts +97 -0
  111. package/js/src/src/abstract/coincatch.js +11 -0
  112. package/js/src/src/abstract/coincheck.d.ts +36 -0
  113. package/js/src/src/abstract/coincheck.js +11 -0
  114. package/js/src/src/abstract/coinex.d.ts +240 -0
  115. package/js/src/src/abstract/coinex.js +11 -0
  116. package/js/src/src/abstract/coinmate.d.ts +65 -0
  117. package/js/src/src/abstract/coinmate.js +11 -0
  118. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  119. package/js/src/src/abstract/coinmetro.js +11 -0
  120. package/js/src/src/abstract/coinone.d.ts +70 -0
  121. package/js/src/src/abstract/coinone.js +11 -0
  122. package/js/src/src/abstract/coinsph.d.ts +57 -0
  123. package/js/src/src/abstract/coinsph.js +11 -0
  124. package/js/src/src/abstract/coinspot.d.ts +31 -0
  125. package/js/src/src/abstract/coinspot.js +11 -0
  126. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  127. package/js/src/src/abstract/cryptocom.js +11 -0
  128. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  129. package/js/src/src/abstract/cryptomus.js +11 -0
  130. package/js/src/src/abstract/defx.d.ts +72 -0
  131. package/js/src/src/abstract/defx.js +11 -0
  132. package/js/src/src/abstract/delta.d.ts +53 -0
  133. package/js/src/src/abstract/delta.js +11 -0
  134. package/js/src/src/abstract/deribit.d.ts +129 -0
  135. package/js/src/src/abstract/deribit.js +11 -0
  136. package/js/src/src/abstract/derive.d.ts +120 -0
  137. package/js/src/src/abstract/derive.js +11 -0
  138. package/js/src/src/abstract/digifinex.d.ts +95 -0
  139. package/js/src/src/abstract/digifinex.js +11 -0
  140. package/js/src/src/abstract/ellipx.d.ts +28 -0
  141. package/js/src/src/abstract/ellipx.js +11 -0
  142. package/js/src/src/abstract/eterex.d.ts +8 -0
  143. package/js/src/src/abstract/eterex.js +11 -0
  144. package/js/src/src/abstract/excoino.d.ts +10 -0
  145. package/js/src/src/abstract/excoino.js +11 -0
  146. package/js/src/src/abstract/exir.d.ts +11 -0
  147. package/js/src/src/abstract/exir.js +11 -0
  148. package/js/src/src/abstract/exmo.d.ts +58 -0
  149. package/js/src/src/abstract/exmo.js +11 -0
  150. package/js/src/src/abstract/exnovin.d.ts +9 -0
  151. package/js/src/src/abstract/exnovin.js +11 -0
  152. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  153. package/js/src/src/abstract/farhadexchange.js +11 -0
  154. package/js/src/src/abstract/foxbit.d.ts +29 -0
  155. package/js/src/src/abstract/foxbit.js +11 -0
  156. package/js/src/src/abstract/gate.d.ts +287 -0
  157. package/js/src/src/abstract/gate.js +11 -0
  158. package/js/src/src/abstract/gemini.d.ts +62 -0
  159. package/js/src/src/abstract/gemini.js +11 -0
  160. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  161. package/js/src/src/abstract/hamtapay.js +11 -0
  162. package/js/src/src/abstract/hashkey.d.ts +70 -0
  163. package/js/src/src/abstract/hashkey.js +11 -0
  164. package/js/src/src/abstract/hibachi.d.ts +29 -0
  165. package/js/src/src/abstract/hibachi.js +11 -0
  166. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  167. package/js/src/src/abstract/hitbtc.js +11 -0
  168. package/js/src/src/abstract/hitobit.d.ts +11 -0
  169. package/js/src/src/abstract/hitobit.js +11 -0
  170. package/js/src/src/abstract/hollaex.d.ts +36 -0
  171. package/js/src/src/abstract/hollaex.js +11 -0
  172. package/js/src/src/abstract/htx.d.ts +551 -0
  173. package/js/src/src/abstract/htx.js +11 -0
  174. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  175. package/js/src/src/abstract/hyperliquid.js +11 -0
  176. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  177. package/js/src/src/abstract/independentreserve.js +11 -0
  178. package/js/src/src/abstract/indodax.d.ts +29 -0
  179. package/js/src/src/abstract/indodax.js +11 -0
  180. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  181. package/js/src/src/abstract/iranexchange.js +11 -0
  182. package/js/src/src/abstract/jibitex.d.ts +10 -0
  183. package/js/src/src/abstract/jibitex.js +11 -0
  184. package/js/src/src/abstract/kcex.d.ts +10 -0
  185. package/js/src/src/abstract/kcex.js +11 -0
  186. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  187. package/js/src/src/abstract/kifpoolme.js +11 -0
  188. package/js/src/src/abstract/kraken.d.ts +61 -0
  189. package/js/src/src/abstract/kraken.js +11 -0
  190. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  191. package/js/src/src/abstract/krakenfutures.js +11 -0
  192. package/js/src/src/abstract/kucoin.d.ts +227 -0
  193. package/js/src/src/abstract/kucoin.js +11 -0
  194. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  195. package/js/src/src/abstract/kucoinfutures.js +11 -0
  196. package/js/src/src/abstract/latoken.d.ts +59 -0
  197. package/js/src/src/abstract/latoken.js +11 -0
  198. package/js/src/src/abstract/lbank.d.ts +65 -0
  199. package/js/src/src/abstract/lbank.js +11 -0
  200. package/js/src/src/abstract/luno.d.ts +41 -0
  201. package/js/src/src/abstract/luno.js +11 -0
  202. package/js/src/src/abstract/mazdax.d.ts +11 -0
  203. package/js/src/src/abstract/mazdax.js +11 -0
  204. package/js/src/src/abstract/mercado.d.ts +28 -0
  205. package/js/src/src/abstract/mercado.js +11 -0
  206. package/js/src/src/abstract/mexc.d.ts +183 -0
  207. package/js/src/src/abstract/mexc.js +11 -0
  208. package/js/src/src/abstract/modetrade.d.ts +122 -0
  209. package/js/src/src/abstract/modetrade.js +11 -0
  210. package/js/src/src/abstract/ndax.d.ts +100 -0
  211. package/js/src/src/abstract/ndax.js +11 -0
  212. package/js/src/src/abstract/nobitex.d.ts +10 -0
  213. package/js/src/src/abstract/nobitex.js +11 -0
  214. package/js/src/src/abstract/novadax.d.ts +32 -0
  215. package/js/src/src/abstract/novadax.js +11 -0
  216. package/js/src/src/abstract/oceanex.d.ts +30 -0
  217. package/js/src/src/abstract/oceanex.js +11 -0
  218. package/js/src/src/abstract/okcoin.d.ts +77 -0
  219. package/js/src/src/abstract/okcoin.js +11 -0
  220. package/js/src/src/abstract/okexchange.d.ts +11 -0
  221. package/js/src/src/abstract/okexchange.js +11 -0
  222. package/js/src/src/abstract/okx.d.ts +352 -0
  223. package/js/src/src/abstract/okx.js +11 -0
  224. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  225. package/js/src/src/abstract/ompfinex.js +11 -0
  226. package/js/src/src/abstract/onetrading.d.ts +26 -0
  227. package/js/src/src/abstract/onetrading.js +11 -0
  228. package/js/src/src/abstract/oxfun.d.ts +37 -0
  229. package/js/src/src/abstract/oxfun.js +11 -0
  230. package/js/src/src/abstract/p2b.d.ts +25 -0
  231. package/js/src/src/abstract/p2b.js +11 -0
  232. package/js/src/src/abstract/paradex.d.ts +66 -0
  233. package/js/src/src/abstract/paradex.js +11 -0
  234. package/js/src/src/abstract/paymium.d.ts +31 -0
  235. package/js/src/src/abstract/paymium.js +11 -0
  236. package/js/src/src/abstract/phemex.d.ts +120 -0
  237. package/js/src/src/abstract/phemex.js +11 -0
  238. package/js/src/src/abstract/pingi.d.ts +9 -0
  239. package/js/src/src/abstract/pingi.js +11 -0
  240. package/js/src/src/abstract/poloniex.d.ts +108 -0
  241. package/js/src/src/abstract/poloniex.js +11 -0
  242. package/js/src/src/abstract/pooleno.d.ts +8 -0
  243. package/js/src/src/abstract/pooleno.js +11 -0
  244. package/js/src/src/abstract/probit.d.ts +26 -0
  245. package/js/src/src/abstract/probit.js +11 -0
  246. package/js/src/src/abstract/raastin.d.ts +11 -0
  247. package/js/src/src/abstract/raastin.js +11 -0
  248. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  249. package/js/src/src/abstract/ramzinex.js +11 -0
  250. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  251. package/js/src/src/abstract/sarmayex.js +11 -0
  252. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  253. package/js/src/src/abstract/sarrafex.js +11 -0
  254. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  255. package/js/src/src/abstract/tabdeal.js +11 -0
  256. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  257. package/js/src/src/abstract/tehran_exchange.js +11 -0
  258. package/js/src/src/abstract/tetherland.d.ts +8 -0
  259. package/js/src/src/abstract/tetherland.js +11 -0
  260. package/js/src/src/abstract/timex.d.ts +65 -0
  261. package/js/src/src/abstract/timex.js +11 -0
  262. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  263. package/js/src/src/abstract/tokocrypto.js +11 -0
  264. package/js/src/src/abstract/toobit.d.ts +10 -0
  265. package/js/src/src/abstract/toobit.js +11 -0
  266. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  267. package/js/src/src/abstract/tradeogre.js +11 -0
  268. package/js/src/src/abstract/twox.d.ts +8 -0
  269. package/js/src/src/abstract/twox.js +11 -0
  270. package/js/src/src/abstract/ubitex.d.ts +10 -0
  271. package/js/src/src/abstract/ubitex.js +11 -0
  272. package/js/src/src/abstract/upbit.d.ts +58 -0
  273. package/js/src/src/abstract/upbit.js +11 -0
  274. package/js/src/src/abstract/vertex.d.ts +22 -0
  275. package/js/src/src/abstract/vertex.js +11 -0
  276. package/js/src/src/abstract/wallex.d.ts +11 -0
  277. package/js/src/src/abstract/wallex.js +11 -0
  278. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  279. package/js/src/src/abstract/wavesexchange.js +11 -0
  280. package/js/src/src/abstract/whitebit.d.ts +117 -0
  281. package/js/src/src/abstract/whitebit.js +11 -0
  282. package/js/src/src/abstract/woo.d.ts +144 -0
  283. package/js/src/src/abstract/woo.js +11 -0
  284. package/js/src/src/abstract/woofipro.d.ts +122 -0
  285. package/js/src/src/abstract/woofipro.js +11 -0
  286. package/js/src/src/abstract/xt.d.ts +160 -0
  287. package/js/src/src/abstract/xt.js +11 -0
  288. package/js/src/src/abstract/yobit.d.ts +19 -0
  289. package/js/src/src/abstract/yobit.js +11 -0
  290. package/js/src/src/abstract/zaif.d.ts +41 -0
  291. package/js/src/src/abstract/zaif.js +11 -0
  292. package/js/src/src/abstract/zonda.d.ts +56 -0
  293. package/js/src/src/abstract/zonda.js +11 -0
  294. package/js/src/src/afratether.d.ts +21 -0
  295. package/js/src/src/afratether.js +356 -0
  296. package/js/src/src/alpaca.d.ts +332 -0
  297. package/js/src/src/alpaca.js +1908 -0
  298. package/js/src/src/apex.d.ts +333 -0
  299. package/js/src/src/apex.js +1942 -0
  300. package/js/src/src/arzinja.d.ts +21 -0
  301. package/js/src/src/arzinja.js +298 -0
  302. package/js/src/src/arzplus.d.ts +26 -0
  303. package/js/src/src/arzplus.js +581 -0
  304. package/js/src/src/ascendex.d.ts +424 -0
  305. package/js/src/src/ascendex.js +3699 -0
  306. package/js/src/src/asretether.d.ts +21 -0
  307. package/js/src/src/asretether.js +324 -0
  308. package/js/src/src/base/Exchange.d.ts +926 -0
  309. package/js/src/src/base/Exchange.js +7399 -0
  310. package/js/src/src/base/Precise.d.ts +42 -0
  311. package/js/src/src/base/Precise.js +275 -0
  312. package/js/src/src/base/errors.d.ts +168 -0
  313. package/js/src/src/base/errors.js +255 -0
  314. package/js/src/src/base/functions/crypto.d.ts +16 -0
  315. package/js/src/src/base/functions/crypto.js +131 -0
  316. package/js/src/src/base/functions/encode.d.ts +4 -0
  317. package/js/src/src/base/functions/encode.js +32 -0
  318. package/js/src/src/base/functions/generic.d.ts +29 -0
  319. package/js/src/src/base/functions/generic.js +203 -0
  320. package/js/src/src/base/functions/misc.d.ts +9 -0
  321. package/js/src/src/base/functions/misc.js +101 -0
  322. package/js/src/src/base/functions/number.d.ts +27 -0
  323. package/js/src/src/base/functions/number.js +313 -0
  324. package/js/src/src/base/functions/platform.d.ts +7 -0
  325. package/js/src/src/base/functions/platform.js +27 -0
  326. package/js/src/src/base/functions/rsa.d.ts +5 -0
  327. package/js/src/src/base/functions/rsa.js +49 -0
  328. package/js/src/src/base/functions/string.d.ts +7 -0
  329. package/js/src/src/base/functions/string.js +44 -0
  330. package/js/src/src/base/functions/throttle.d.ts +6 -0
  331. package/js/src/src/base/functions/throttle.js +67 -0
  332. package/js/src/src/base/functions/time.d.ts +21 -0
  333. package/js/src/src/base/functions/time.js +171 -0
  334. package/js/src/src/base/functions/totp.d.ts +3 -0
  335. package/js/src/src/base/functions/totp.js +25 -0
  336. package/js/src/src/base/functions/type.d.ts +37 -0
  337. package/js/src/src/base/functions/type.js +179 -0
  338. package/js/src/src/base/functions.d.ts +10 -0
  339. package/js/src/src/base/functions.js +18 -0
  340. package/js/src/src/base/types.d.ts +586 -0
  341. package/js/src/src/base/types.js +7 -0
  342. package/js/src/src/base/ws/Cache.d.ts +27 -0
  343. package/js/src/src/base/ws/Cache.js +260 -0
  344. package/js/src/src/base/ws/Client.d.ts +53 -0
  345. package/js/src/src/base/ws/Client.js +307 -0
  346. package/js/src/src/base/ws/Future.d.ts +8 -0
  347. package/js/src/src/base/ws/Future.js +35 -0
  348. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  349. package/js/src/src/base/ws/OrderBook.js +130 -0
  350. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  351. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  352. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  353. package/js/src/src/base/ws/WsClient.js +69 -0
  354. package/js/src/src/bequant.d.ts +4 -0
  355. package/js/src/src/bequant.js +35 -0
  356. package/js/src/src/bidarz.d.ts +16 -0
  357. package/js/src/src/bidarz.js +327 -0
  358. package/js/src/src/bigone.d.ts +296 -0
  359. package/js/src/src/bigone.js +2340 -0
  360. package/js/src/src/binance.d.ts +1667 -0
  361. package/js/src/src/binance.js +14400 -0
  362. package/js/src/src/binancecoinm.d.ts +6 -0
  363. package/js/src/src/binancecoinm.js +51 -0
  364. package/js/src/src/binanceus.d.ts +4 -0
  365. package/js/src/src/binanceus.js +225 -0
  366. package/js/src/src/binanceusdm.d.ts +6 -0
  367. package/js/src/src/binanceusdm.js +63 -0
  368. package/js/src/src/bingx.d.ts +778 -0
  369. package/js/src/src/bingx.js +6705 -0
  370. package/js/src/src/bit24.d.ts +24 -0
  371. package/js/src/src/bit24.js +520 -0
  372. package/js/src/src/bit2c.d.ts +146 -0
  373. package/js/src/src/bit2c.js +1029 -0
  374. package/js/src/src/bitbank.d.ts +181 -0
  375. package/js/src/src/bitbank.js +1146 -0
  376. package/js/src/src/bitbarg.d.ts +21 -0
  377. package/js/src/src/bitbarg.js +312 -0
  378. package/js/src/src/bitbns.d.ts +184 -0
  379. package/js/src/src/bitbns.js +1288 -0
  380. package/js/src/src/bitfinex.d.ts +516 -0
  381. package/js/src/src/bitfinex.js +3951 -0
  382. package/js/src/src/bitflyer.d.ts +229 -0
  383. package/js/src/src/bitflyer.js +1209 -0
  384. package/js/src/src/bitget.d.ts +1109 -0
  385. package/js/src/src/bitget.js +11033 -0
  386. package/js/src/src/bithumb.d.ts +165 -0
  387. package/js/src/src/bithumb.js +1257 -0
  388. package/js/src/src/bitimen.d.ts +23 -0
  389. package/js/src/src/bitimen.js +424 -0
  390. package/js/src/src/bitir.d.ts +23 -0
  391. package/js/src/src/bitir.js +521 -0
  392. package/js/src/src/bitmart.d.ts +736 -0
  393. package/js/src/src/bitmart.js +5639 -0
  394. package/js/src/src/bitmex.d.ts +395 -0
  395. package/js/src/src/bitmex.js +3088 -0
  396. package/js/src/src/bitopro.d.ts +295 -0
  397. package/js/src/src/bitopro.js +1892 -0
  398. package/js/src/src/bitpin.d.ts +23 -0
  399. package/js/src/src/bitpin.js +487 -0
  400. package/js/src/src/bitrue.d.ts +384 -0
  401. package/js/src/src/bitrue.js +3382 -0
  402. package/js/src/src/bitso.d.ts +270 -0
  403. package/js/src/src/bitso.js +1881 -0
  404. package/js/src/src/bitstamp.d.ts +355 -0
  405. package/js/src/src/bitstamp.js +2445 -0
  406. package/js/src/src/bitteam.d.ts +229 -0
  407. package/js/src/src/bitteam.js +2420 -0
  408. package/js/src/src/bittrade.d.ts +298 -0
  409. package/js/src/src/bittrade.js +2050 -0
  410. package/js/src/src/bitunix.d.ts +21 -0
  411. package/js/src/src/bitunix.js +326 -0
  412. package/js/src/src/bitvavo.d.ts +311 -0
  413. package/js/src/src/bitvavo.js +2204 -0
  414. package/js/src/src/blockchaincom.d.ts +256 -0
  415. package/js/src/src/blockchaincom.js +1259 -0
  416. package/js/src/src/blofin.d.ts +439 -0
  417. package/js/src/src/blofin.js +2576 -0
  418. package/js/src/src/btcalpha.d.ts +209 -0
  419. package/js/src/src/btcalpha.js +1056 -0
  420. package/js/src/src/btcbox.d.ts +144 -0
  421. package/js/src/src/btcbox.js +834 -0
  422. package/js/src/src/btcmarkets.d.ts +253 -0
  423. package/js/src/src/btcmarkets.js +1418 -0
  424. package/js/src/src/btcturk.d.ts +161 -0
  425. package/js/src/src/btcturk.js +1058 -0
  426. package/js/src/src/bybit.d.ts +1097 -0
  427. package/js/src/src/bybit.js +9382 -0
  428. package/js/src/src/bydfi.d.ts +23 -0
  429. package/js/src/src/bydfi.js +434 -0
  430. package/js/src/src/cafearz.d.ts +21 -0
  431. package/js/src/src/cafearz.js +346 -0
  432. package/js/src/src/cex.d.ts +286 -0
  433. package/js/src/src/cex.js +1799 -0
  434. package/js/src/src/coinbase.d.ts +623 -0
  435. package/js/src/src/coinbase.js +5220 -0
  436. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  437. package/js/src/src/coinbaseadvanced.js +18 -0
  438. package/js/src/src/coinbaseexchange.d.ts +334 -0
  439. package/js/src/src/coinbaseexchange.js +2127 -0
  440. package/js/src/src/coinbaseinternational.d.ts +443 -0
  441. package/js/src/src/coinbaseinternational.js +2336 -0
  442. package/js/src/src/coincatch.d.ts +786 -0
  443. package/js/src/src/coincatch.js +5492 -0
  444. package/js/src/src/coincheck.d.ts +147 -0
  445. package/js/src/src/coincheck.js +962 -0
  446. package/js/src/src/coinex.d.ts +719 -0
  447. package/js/src/src/coinex.js +6166 -0
  448. package/js/src/src/coinmate.d.ts +202 -0
  449. package/js/src/src/coinmate.js +1215 -0
  450. package/js/src/src/coinmetro.d.ts +244 -0
  451. package/js/src/src/coinmetro.js +2024 -0
  452. package/js/src/src/coinone.d.ts +158 -0
  453. package/js/src/src/coinone.js +1278 -0
  454. package/js/src/src/coinsph.d.ts +310 -0
  455. package/js/src/src/coinsph.js +2203 -0
  456. package/js/src/src/coinspot.d.ts +108 -0
  457. package/js/src/src/coinspot.js +653 -0
  458. package/js/src/src/cryptocom.d.ts +463 -0
  459. package/js/src/src/cryptocom.js +3549 -0
  460. package/js/src/src/cryptomus.d.ts +158 -0
  461. package/js/src/src/cryptomus.js +1169 -0
  462. package/js/src/src/defx.d.ts +348 -0
  463. package/js/src/src/defx.js +2139 -0
  464. package/js/src/src/delta.d.ts +407 -0
  465. package/js/src/src/delta.js +3654 -0
  466. package/js/src/src/deribit.d.ts +516 -0
  467. package/js/src/src/deribit.js +3790 -0
  468. package/js/src/src/derive.d.ts +324 -0
  469. package/js/src/src/derive.js +2655 -0
  470. package/js/src/src/digifinex.d.ts +544 -0
  471. package/js/src/src/digifinex.js +4453 -0
  472. package/js/src/src/ellipx.d.ts +237 -0
  473. package/js/src/src/ellipx.js +2071 -0
  474. package/js/src/src/eterex.d.ts +21 -0
  475. package/js/src/src/eterex.js +299 -0
  476. package/js/src/src/excoino.d.ts +23 -0
  477. package/js/src/src/excoino.js +426 -0
  478. package/js/src/src/exir.d.ts +23 -0
  479. package/js/src/src/exir.js +403 -0
  480. package/js/src/src/exmo.d.ts +426 -0
  481. package/js/src/src/exmo.js +2825 -0
  482. package/js/src/src/exnovin.d.ts +22 -0
  483. package/js/src/src/exnovin.js +378 -0
  484. package/js/src/src/farhadexchange.d.ts +21 -0
  485. package/js/src/src/farhadexchange.js +280 -0
  486. package/js/src/src/fmfwio.d.ts +4 -0
  487. package/js/src/src/fmfwio.js +35 -0
  488. package/js/src/src/foxbit.d.ts +352 -0
  489. package/js/src/src/foxbit.js +2016 -0
  490. package/js/src/src/gate.d.ts +1071 -0
  491. package/js/src/src/gate.js +8282 -0
  492. package/js/src/src/gateio.d.ts +4 -0
  493. package/js/src/src/gateio.js +17 -0
  494. package/js/src/src/gemini.d.ts +257 -0
  495. package/js/src/src/gemini.js +2006 -0
  496. package/js/src/src/hamtapay.d.ts +21 -0
  497. package/js/src/src/hamtapay.js +303 -0
  498. package/js/src/src/hashkey.d.ts +628 -0
  499. package/js/src/src/hashkey.js +4363 -0
  500. package/js/src/src/hibachi.d.ts +346 -0
  501. package/js/src/src/hibachi.js +2137 -0
  502. package/js/src/src/hitbtc.d.ts +558 -0
  503. package/js/src/src/hitbtc.js +3847 -0
  504. package/js/src/src/hitobit.d.ts +23 -0
  505. package/js/src/src/hitobit.js +412 -0
  506. package/js/src/src/hollaex.d.ts +305 -0
  507. package/js/src/src/hollaex.js +2046 -0
  508. package/js/src/src/htx.d.ts +961 -0
  509. package/js/src/src/htx.js +9668 -0
  510. package/js/src/src/huobi.d.ts +4 -0
  511. package/js/src/src/huobi.js +17 -0
  512. package/js/src/src/hyperliquid.d.ts +651 -0
  513. package/js/src/src/hyperliquid.js +3937 -0
  514. package/js/src/src/independentreserve.d.ts +169 -0
  515. package/js/src/src/independentreserve.js +1115 -0
  516. package/js/src/src/indodax.d.ts +217 -0
  517. package/js/src/src/indodax.js +1454 -0
  518. package/js/src/src/iranexchange.d.ts +21 -0
  519. package/js/src/src/iranexchange.js +399 -0
  520. package/js/src/src/jibitex.d.ts +23 -0
  521. package/js/src/src/jibitex.js +416 -0
  522. package/js/src/src/kcex.d.ts +21 -0
  523. package/js/src/src/kcex.js +335 -0
  524. package/js/src/src/kifpoolme.d.ts +23 -0
  525. package/js/src/src/kifpoolme.js +410 -0
  526. package/js/src/src/kraken.d.ts +484 -0
  527. package/js/src/src/kraken.js +3518 -0
  528. package/js/src/src/krakenfutures.d.ts +362 -0
  529. package/js/src/src/krakenfutures.js +2885 -0
  530. package/js/src/src/kucoin.d.ts +759 -0
  531. package/js/src/src/kucoin.js +5153 -0
  532. package/js/src/src/kucoinfutures.d.ts +521 -0
  533. package/js/src/src/kucoinfutures.js +3381 -0
  534. package/js/src/src/latoken.d.ts +274 -0
  535. package/js/src/src/latoken.js +1824 -0
  536. package/js/src/src/lbank.d.ts +350 -0
  537. package/js/src/src/lbank.js +3146 -0
  538. package/js/src/src/luno.d.ts +252 -0
  539. package/js/src/src/luno.js +1479 -0
  540. package/js/src/src/mazdax.d.ts +23 -0
  541. package/js/src/src/mazdax.js +534 -0
  542. package/js/src/src/mercado.d.ts +160 -0
  543. package/js/src/src/mercado.js +1011 -0
  544. package/js/src/src/mexc.d.ts +768 -0
  545. package/js/src/src/mexc.js +6102 -0
  546. package/js/src/src/modetrade.d.ts +496 -0
  547. package/js/src/src/modetrade.js +2936 -0
  548. package/js/src/src/myokx.d.ts +4 -0
  549. package/js/src/src/myokx.js +54 -0
  550. package/js/src/src/ndax.d.ts +285 -0
  551. package/js/src/src/ndax.js +2598 -0
  552. package/js/src/src/nobitex.d.ts +23 -0
  553. package/js/src/src/nobitex.js +454 -0
  554. package/js/src/src/novadax.d.ts +279 -0
  555. package/js/src/src/novadax.js +1676 -0
  556. package/js/src/src/oceanex.d.ts +231 -0
  557. package/js/src/src/oceanex.js +1123 -0
  558. package/js/src/src/okcoin.d.ts +346 -0
  559. package/js/src/src/okcoin.js +3211 -0
  560. package/js/src/src/okexchange.d.ts +23 -0
  561. package/js/src/src/okexchange.js +373 -0
  562. package/js/src/src/okx.d.ts +1125 -0
  563. package/js/src/src/okx.js +9009 -0
  564. package/js/src/src/okxus.d.ts +4 -0
  565. package/js/src/src/okxus.js +54 -0
  566. package/js/src/src/ompfinex.d.ts +23 -0
  567. package/js/src/src/ompfinex.js +510 -0
  568. package/js/src/src/onetrading.d.ts +228 -0
  569. package/js/src/src/onetrading.js +1769 -0
  570. package/js/src/src/oxfun.d.ts +442 -0
  571. package/js/src/src/oxfun.js +2920 -0
  572. package/js/src/src/p2b.d.ts +189 -0
  573. package/js/src/src/p2b.js +1344 -0
  574. package/js/src/src/paradex.d.ts +389 -0
  575. package/js/src/src/paradex.js +2607 -0
  576. package/js/src/src/paymium.d.ts +133 -0
  577. package/js/src/src/paymium.js +644 -0
  578. package/js/src/src/phemex.d.ts +497 -0
  579. package/js/src/src/phemex.js +5333 -0
  580. package/js/src/src/pingi.d.ts +22 -0
  581. package/js/src/src/pingi.js +446 -0
  582. package/js/src/src/poloniex.d.ts +441 -0
  583. package/js/src/src/poloniex.js +3681 -0
  584. package/js/src/src/pooleno.d.ts +21 -0
  585. package/js/src/src/pooleno.js +347 -0
  586. package/js/src/src/pro/alpaca.d.ts +95 -0
  587. package/js/src/src/pro/alpaca.js +724 -0
  588. package/js/src/src/pro/apex.d.ts +160 -0
  589. package/js/src/src/pro/apex.js +1044 -0
  590. package/js/src/src/pro/ascendex.d.ts +99 -0
  591. package/js/src/src/pro/ascendex.js +1012 -0
  592. package/js/src/src/pro/bequant.d.ts +4 -0
  593. package/js/src/src/pro/bequant.js +42 -0
  594. package/js/src/src/pro/binance.d.ts +796 -0
  595. package/js/src/src/pro/binance.js +4373 -0
  596. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  597. package/js/src/src/pro/binancecoinm.js +32 -0
  598. package/js/src/src/pro/binanceus.d.ts +4 -0
  599. package/js/src/src/pro/binanceus.js +52 -0
  600. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  601. package/js/src/src/pro/binanceusdm.js +37 -0
  602. package/js/src/src/pro/bingx.d.ts +151 -0
  603. package/js/src/src/pro/bingx.js +1568 -0
  604. package/js/src/src/pro/bitfinex.d.ts +99 -0
  605. package/js/src/src/pro/bitfinex.js +1165 -0
  606. package/js/src/src/pro/bitget.d.ts +257 -0
  607. package/js/src/src/pro/bitget.js +2327 -0
  608. package/js/src/src/pro/bithumb.d.ts +59 -0
  609. package/js/src/src/pro/bithumb.js +395 -0
  610. package/js/src/src/pro/bitmart.d.ts +168 -0
  611. package/js/src/src/pro/bitmart.js +1686 -0
  612. package/js/src/src/pro/bitmex.d.ts +170 -0
  613. package/js/src/src/pro/bitmex.js +1760 -0
  614. package/js/src/src/pro/bitopro.d.ts +69 -0
  615. package/js/src/src/pro/bitopro.js +477 -0
  616. package/js/src/src/pro/bitrue.d.ts +40 -0
  617. package/js/src/src/pro/bitrue.js +461 -0
  618. package/js/src/src/pro/bitstamp.d.ts +53 -0
  619. package/js/src/src/pro/bitstamp.js +587 -0
  620. package/js/src/src/pro/bittrade.d.ts +66 -0
  621. package/js/src/src/pro/bittrade.js +606 -0
  622. package/js/src/src/pro/bitvavo.d.ts +321 -0
  623. package/js/src/src/pro/bitvavo.js +1451 -0
  624. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  625. package/js/src/src/pro/blockchaincom.js +777 -0
  626. package/js/src/src/pro/blofin.d.ts +174 -0
  627. package/js/src/src/pro/blofin.js +743 -0
  628. package/js/src/src/pro/bybit.d.ts +397 -0
  629. package/js/src/src/pro/bybit.js +2519 -0
  630. package/js/src/src/pro/cex.d.ts +220 -0
  631. package/js/src/src/pro/cex.js +1535 -0
  632. package/js/src/src/pro/coinbase.d.ts +119 -0
  633. package/js/src/src/pro/coinbase.js +736 -0
  634. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  635. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  636. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  637. package/js/src/src/pro/coinbaseexchange.js +969 -0
  638. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  639. package/js/src/src/pro/coinbaseinternational.js +804 -0
  640. package/js/src/src/pro/coincatch.d.ts +207 -0
  641. package/js/src/src/pro/coincatch.js +1562 -0
  642. package/js/src/src/pro/coincheck.d.ts +33 -0
  643. package/js/src/src/pro/coincheck.js +210 -0
  644. package/js/src/src/pro/coinex.d.ts +147 -0
  645. package/js/src/src/pro/coinex.js +1426 -0
  646. package/js/src/src/pro/coinone.d.ts +51 -0
  647. package/js/src/src/pro/coinone.js +413 -0
  648. package/js/src/src/pro/cryptocom.d.ts +300 -0
  649. package/js/src/src/pro/cryptocom.js +1414 -0
  650. package/js/src/src/pro/defx.d.ts +236 -0
  651. package/js/src/src/pro/defx.js +865 -0
  652. package/js/src/src/pro/deribit.d.ts +163 -0
  653. package/js/src/src/pro/deribit.js +1066 -0
  654. package/js/src/src/pro/derive.d.ts +100 -0
  655. package/js/src/src/pro/derive.js +753 -0
  656. package/js/src/src/pro/exmo.d.ts +97 -0
  657. package/js/src/src/pro/exmo.js +903 -0
  658. package/js/src/src/pro/gate.d.ts +360 -0
  659. package/js/src/src/pro/gate.js +2119 -0
  660. package/js/src/src/pro/gateio.d.ts +4 -0
  661. package/js/src/src/pro/gateio.js +17 -0
  662. package/js/src/src/pro/gemini.d.ts +106 -0
  663. package/js/src/src/pro/gemini.js +932 -0
  664. package/js/src/src/pro/hashkey.d.ts +121 -0
  665. package/js/src/src/pro/hashkey.js +843 -0
  666. package/js/src/src/pro/hitbtc.d.ts +235 -0
  667. package/js/src/src/pro/hitbtc.js +1400 -0
  668. package/js/src/src/pro/hollaex.d.ts +77 -0
  669. package/js/src/src/pro/hollaex.js +604 -0
  670. package/js/src/src/pro/htx.d.ts +141 -0
  671. package/js/src/src/pro/htx.js +2415 -0
  672. package/js/src/src/pro/huobi.d.ts +4 -0
  673. package/js/src/src/pro/huobi.js +17 -0
  674. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  675. package/js/src/src/pro/hyperliquid.js +1126 -0
  676. package/js/src/src/pro/independentreserve.d.ts +36 -0
  677. package/js/src/src/pro/independentreserve.js +287 -0
  678. package/js/src/src/pro/kraken.d.ts +233 -0
  679. package/js/src/src/pro/kraken.js +1785 -0
  680. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  681. package/js/src/src/pro/krakenfutures.js +1592 -0
  682. package/js/src/src/pro/kucoin.d.ts +221 -0
  683. package/js/src/src/pro/kucoin.js +1430 -0
  684. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  685. package/js/src/src/pro/kucoinfutures.js +1295 -0
  686. package/js/src/src/pro/lbank.d.ts +134 -0
  687. package/js/src/src/pro/lbank.js +950 -0
  688. package/js/src/src/pro/luno.d.ts +44 -0
  689. package/js/src/src/pro/luno.js +322 -0
  690. package/js/src/src/pro/mexc.d.ts +210 -0
  691. package/js/src/src/pro/mexc.js +2009 -0
  692. package/js/src/src/pro/modetrade.d.ts +155 -0
  693. package/js/src/src/pro/modetrade.js +1335 -0
  694. package/js/src/src/pro/myokx.d.ts +4 -0
  695. package/js/src/src/pro/myokx.js +39 -0
  696. package/js/src/src/pro/ndax.d.ts +60 -0
  697. package/js/src/src/pro/ndax.js +545 -0
  698. package/js/src/src/pro/okcoin.d.ts +91 -0
  699. package/js/src/src/pro/okcoin.js +763 -0
  700. package/js/src/src/pro/okx.d.ts +408 -0
  701. package/js/src/src/pro/okx.js +2479 -0
  702. package/js/src/src/pro/okxus.d.ts +4 -0
  703. package/js/src/src/pro/okxus.js +39 -0
  704. package/js/src/src/pro/onetrading.d.ts +107 -0
  705. package/js/src/src/pro/onetrading.js +1343 -0
  706. package/js/src/src/pro/oxfun.d.ts +234 -0
  707. package/js/src/src/pro/oxfun.js +1112 -0
  708. package/js/src/src/pro/p2b.d.ts +104 -0
  709. package/js/src/src/pro/p2b.js +506 -0
  710. package/js/src/src/pro/paradex.d.ts +54 -0
  711. package/js/src/src/pro/paradex.js +370 -0
  712. package/js/src/src/pro/phemex.d.ts +129 -0
  713. package/js/src/src/pro/phemex.js +1569 -0
  714. package/js/src/src/pro/poloniex.d.ts +214 -0
  715. package/js/src/src/pro/poloniex.js +1318 -0
  716. package/js/src/src/pro/probit.d.ts +91 -0
  717. package/js/src/src/pro/probit.js +593 -0
  718. package/js/src/src/pro/tradeogre.d.ts +49 -0
  719. package/js/src/src/pro/tradeogre.js +284 -0
  720. package/js/src/src/pro/upbit.d.ts +124 -0
  721. package/js/src/src/pro/upbit.js +689 -0
  722. package/js/src/src/pro/vertex.d.ts +104 -0
  723. package/js/src/src/pro/vertex.js +999 -0
  724. package/js/src/src/pro/whitebit.d.ts +123 -0
  725. package/js/src/src/pro/whitebit.js +971 -0
  726. package/js/src/src/pro/woo.d.ts +161 -0
  727. package/js/src/src/pro/woo.js +1351 -0
  728. package/js/src/src/pro/woofipro.d.ts +155 -0
  729. package/js/src/src/pro/woofipro.js +1335 -0
  730. package/js/src/src/pro/xt.d.ts +165 -0
  731. package/js/src/src/pro/xt.js +1230 -0
  732. package/js/src/src/probit.d.ts +283 -0
  733. package/js/src/src/probit.js +1935 -0
  734. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  735. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  736. package/js/src/src/raastin.d.ts +24 -0
  737. package/js/src/src/raastin.js +494 -0
  738. package/js/src/src/ramzinex.d.ts +23 -0
  739. package/js/src/src/ramzinex.js +510 -0
  740. package/js/src/src/sarmayex.d.ts +21 -0
  741. package/js/src/src/sarmayex.js +376 -0
  742. package/js/src/src/sarrafex.d.ts +23 -0
  743. package/js/src/src/sarrafex.js +501 -0
  744. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  745. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  746. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  747. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  748. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  749. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  750. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  751. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  752. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  753. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  754. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  755. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  756. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  757. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  758. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  759. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  760. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  761. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  762. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  763. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  764. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  765. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  766. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  767. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  768. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  769. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  770. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  771. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  772. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  773. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  774. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  775. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  776. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  777. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  778. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  779. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  780. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  781. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  782. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  783. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  784. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  785. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  786. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  787. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  788. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  789. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  790. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  791. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  792. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  793. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  794. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  795. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  796. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  797. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  798. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  799. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  800. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  801. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  802. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  803. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  804. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  805. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  806. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  807. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  808. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  809. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  810. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  811. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  812. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  813. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  814. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  815. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  816. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  817. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  818. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  819. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  820. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  821. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  822. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  823. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  824. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  825. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  826. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  827. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  828. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  829. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  830. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  831. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  832. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  833. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  834. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  835. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  836. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  837. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  838. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  850. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  851. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  852. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  853. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  854. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  855. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  856. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  857. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  858. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  859. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  860. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  861. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  862. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  868. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  869. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  870. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  871. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  872. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  873. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  874. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  875. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  876. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  877. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  878. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  879. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  880. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  881. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  882. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  883. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  884. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  885. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  886. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  887. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  888. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  889. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  890. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  891. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  892. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  893. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  894. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  895. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  896. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  897. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  898. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  899. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  900. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  901. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  902. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  903. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  904. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  905. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  906. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  907. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  908. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  909. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  910. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  911. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  912. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  913. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  914. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  915. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  916. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  917. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  918. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  919. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  920. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  921. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  922. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  923. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  924. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  925. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  926. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  927. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  928. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  929. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  930. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  931. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  932. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  933. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  934. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  935. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  936. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  937. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  938. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  939. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  940. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  941. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  942. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  943. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  944. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  945. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  946. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  947. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  948. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  949. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  950. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  951. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  952. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  953. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  954. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  955. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  956. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  957. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  958. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  959. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  960. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  984. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  985. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  986. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  987. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  988. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  989. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  990. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  991. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  992. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  993. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  994. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  995. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  996. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  997. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  998. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  999. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1000. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1001. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1002. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1003. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1004. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1005. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1006. package/js/src/src/tabdeal.d.ts +23 -0
  1007. package/js/src/src/tabdeal.js +387 -0
  1008. package/js/src/src/tehran_exchange.d.ts +21 -0
  1009. package/js/src/src/tehran_exchange.js +333 -0
  1010. package/js/src/src/tetherland.d.ts +21 -0
  1011. package/js/src/src/tetherland.js +367 -0
  1012. package/js/src/src/timex.d.ts +247 -0
  1013. package/js/src/src/timex.js +1792 -0
  1014. package/js/src/src/tokocrypto.d.ts +261 -0
  1015. package/js/src/src/tokocrypto.js +2641 -0
  1016. package/js/src/src/toobit.d.ts +22 -0
  1017. package/js/src/src/toobit.js +445 -0
  1018. package/js/src/src/tradeogre.d.ts +149 -0
  1019. package/js/src/src/tradeogre.js +878 -0
  1020. package/js/src/src/twox.d.ts +21 -0
  1021. package/js/src/src/twox.js +371 -0
  1022. package/js/src/src/ubitex.d.ts +23 -0
  1023. package/js/src/src/ubitex.js +433 -0
  1024. package/js/src/src/upbit.d.ts +377 -0
  1025. package/js/src/src/upbit.js +2340 -0
  1026. package/js/src/src/vertex.d.ts +346 -0
  1027. package/js/src/src/vertex.js +3146 -0
  1028. package/js/src/src/wallex.d.ts +23 -0
  1029. package/js/src/src/wallex.js +467 -0
  1030. package/js/src/src/wavesexchange.d.ts +244 -0
  1031. package/js/src/src/wavesexchange.js +2747 -0
  1032. package/js/src/src/whitebit.d.ts +571 -0
  1033. package/js/src/src/whitebit.js +3437 -0
  1034. package/js/src/src/woo.d.ts +727 -0
  1035. package/js/src/src/woo.js +4183 -0
  1036. package/js/src/src/woofipro.d.ts +497 -0
  1037. package/js/src/src/woofipro.js +2941 -0
  1038. package/js/src/src/xt.d.ts +568 -0
  1039. package/js/src/src/xt.js +5184 -0
  1040. package/js/src/src/yobit.d.ts +197 -0
  1041. package/js/src/src/yobit.js +1453 -0
  1042. package/js/src/src/zaif.d.ts +136 -0
  1043. package/js/src/src/zaif.js +821 -0
  1044. package/js/src/src/zonda.d.ts +214 -0
  1045. package/js/src/src/zonda.js +1984 -0
  1046. package/js/test.js +3 -3
  1047. package/package.json +1 -1
@@ -0,0 +1,2885 @@
1
+ // ----------------------------------------------------------------------------
2
+
3
+ // PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ // https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+ // EDIT THE CORRESPONDENT .ts FILE INSTEAD
6
+
7
+ // ---------------------------------------------------------------------------
8
+ import Exchange from './abstract/krakenfutures.js';
9
+ import { TICK_SIZE } from './base/functions/number.js';
10
+ import { ArgumentsRequired, AuthenticationError, BadRequest, ContractUnavailable, DDoSProtection, DuplicateOrderId, ExchangeError, ExchangeNotAvailable, InsufficientFunds, InvalidNonce, InvalidOrder, OrderImmediatelyFillable, OrderNotFillable, OrderNotFound, RateLimitExceeded } from './base/errors.js';
11
+ import { Precise } from './base/Precise.js';
12
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
13
+ import { sha512 } from './static_dependencies/noble-hashes/sha512.js';
14
+ // ---------------------------------------------------------------------------
15
+ /**
16
+ * @class krakenfutures
17
+ * @augments Exchange
18
+ */
19
+ export default class krakenfutures extends Exchange {
20
+ describe() {
21
+ return this.deepExtend(super.describe(), {
22
+ 'id': 'krakenfutures',
23
+ 'name': 'Kraken Futures',
24
+ 'countries': ['US'],
25
+ 'version': 'v3',
26
+ 'userAgent': undefined,
27
+ 'rateLimit': 600,
28
+ 'pro': true,
29
+ 'has': {
30
+ 'CORS': undefined,
31
+ 'spot': false,
32
+ 'margin': false,
33
+ 'swap': true,
34
+ 'future': true,
35
+ 'option': false,
36
+ 'cancelAllOrders': true,
37
+ 'cancelAllOrdersAfter': true,
38
+ 'cancelOrder': true,
39
+ 'cancelOrders': true,
40
+ 'createMarketOrder': false,
41
+ 'createOrder': true,
42
+ 'createPostOnlyOrder': true,
43
+ 'createReduceOnlyOrder': true,
44
+ 'createStopLimitOrder': true,
45
+ 'createStopMarketOrder': true,
46
+ 'createStopOrder': true,
47
+ 'createTriggerOrder': true,
48
+ 'editOrder': true,
49
+ 'fetchBalance': true,
50
+ 'fetchBorrowRateHistories': false,
51
+ 'fetchBorrowRateHistory': false,
52
+ 'fetchCanceledOrders': true,
53
+ 'fetchClosedOrders': true,
54
+ 'fetchCrossBorrowRate': false,
55
+ 'fetchCrossBorrowRates': false,
56
+ 'fetchDepositAddress': false,
57
+ 'fetchDepositAddresses': false,
58
+ 'fetchDepositAddressesByNetwork': false,
59
+ 'fetchFundingHistory': undefined,
60
+ 'fetchFundingRate': 'emulated',
61
+ 'fetchFundingRateHistory': true,
62
+ 'fetchFundingRates': true,
63
+ 'fetchIndexOHLCV': false,
64
+ 'fetchIsolatedBorrowRate': false,
65
+ 'fetchIsolatedBorrowRates': false,
66
+ 'fetchIsolatedPositions': false,
67
+ 'fetchLeverage': true,
68
+ 'fetchLeverages': true,
69
+ 'fetchLeverageTiers': true,
70
+ 'fetchMarketLeverageTiers': 'emulated',
71
+ 'fetchMarkets': true,
72
+ 'fetchMarkOHLCV': true,
73
+ 'fetchMyTrades': true,
74
+ 'fetchOHLCV': true,
75
+ 'fetchOpenOrders': true,
76
+ 'fetchOrder': false,
77
+ 'fetchOrderBook': true,
78
+ 'fetchOrders': false,
79
+ 'fetchPositions': true,
80
+ 'fetchPremiumIndexOHLCV': false,
81
+ 'fetchTickers': true,
82
+ 'fetchTrades': true,
83
+ 'sandbox': true,
84
+ 'setLeverage': true,
85
+ 'setMarginMode': false,
86
+ 'transfer': true,
87
+ },
88
+ 'urls': {
89
+ 'test': {
90
+ 'public': 'https://demo-futures.kraken.com/derivatives/api/',
91
+ 'private': 'https://demo-futures.kraken.com/derivatives/api/',
92
+ 'charts': 'https://demo-futures.kraken.com/api/charts/',
93
+ 'history': 'https://demo-futures.kraken.com/api/history/',
94
+ 'www': 'https://demo-futures.kraken.com',
95
+ },
96
+ 'logo': 'https://user-images.githubusercontent.com/24300605/81436764-b22fd580-9172-11ea-9703-742783e6376d.jpg',
97
+ 'api': {
98
+ 'charts': 'https://futures.kraken.com/api/charts/',
99
+ 'history': 'https://futures.kraken.com/api/history/',
100
+ 'feeschedules': 'https://futures.kraken.com/api/feeschedules/',
101
+ 'public': 'https://futures.kraken.com/derivatives/api/',
102
+ 'private': 'https://futures.kraken.com/derivatives/api/',
103
+ },
104
+ 'www': 'https://futures.kraken.com/',
105
+ 'doc': [
106
+ 'https://docs.kraken.com/api/docs/futures-api/trading/market-data/',
107
+ ],
108
+ 'fees': 'https://support.kraken.com/hc/en-us/articles/360022835771-Transaction-fees-and-rebates-for-Kraken-Futures',
109
+ 'referral': undefined,
110
+ },
111
+ 'api': {
112
+ 'public': {
113
+ 'get': [
114
+ 'feeschedules',
115
+ 'instruments',
116
+ 'orderbook',
117
+ 'tickers',
118
+ 'history',
119
+ 'historicalfundingrates',
120
+ ],
121
+ },
122
+ 'private': {
123
+ 'get': [
124
+ 'feeschedules/volumes',
125
+ 'openpositions',
126
+ 'notifications',
127
+ 'accounts',
128
+ 'openorders',
129
+ 'recentorders',
130
+ 'fills',
131
+ 'transfers',
132
+ 'leveragepreferences',
133
+ 'pnlpreferences',
134
+ 'assignmentprogram/current',
135
+ 'assignmentprogram/history',
136
+ ],
137
+ 'post': [
138
+ 'sendorder',
139
+ 'editorder',
140
+ 'cancelorder',
141
+ 'transfer',
142
+ 'batchorder',
143
+ 'cancelallorders',
144
+ 'cancelallordersafter',
145
+ 'withdrawal',
146
+ 'assignmentprogram/add',
147
+ 'assignmentprogram/delete',
148
+ ],
149
+ 'put': [
150
+ 'leveragepreferences',
151
+ 'pnlpreferences',
152
+ ],
153
+ },
154
+ 'charts': {
155
+ 'get': [
156
+ '{price_type}/{symbol}/{interval}',
157
+ ],
158
+ },
159
+ 'history': {
160
+ 'get': [
161
+ 'orders',
162
+ 'executions',
163
+ 'triggers',
164
+ 'accountlogcsv',
165
+ 'account-log',
166
+ 'market/{symbol}/orders',
167
+ 'market/{symbol}/executions',
168
+ ],
169
+ },
170
+ },
171
+ 'fees': {
172
+ 'trading': {
173
+ 'tierBased': true,
174
+ 'percentage': true,
175
+ 'taker': this.parseNumber('0.0005'),
176
+ 'maker': this.parseNumber('0.0002'),
177
+ 'tiers': {
178
+ 'taker': [
179
+ [this.parseNumber('0'), this.parseNumber('0.0005')],
180
+ [this.parseNumber('100000'), this.parseNumber('0.0004')],
181
+ [this.parseNumber('1000000'), this.parseNumber('0.0003')],
182
+ [this.parseNumber('5000000'), this.parseNumber('0.00025')],
183
+ [this.parseNumber('10000000'), this.parseNumber('0.0002')],
184
+ [this.parseNumber('20000000'), this.parseNumber('0.00015')],
185
+ [this.parseNumber('50000000'), this.parseNumber('0.000125')],
186
+ [this.parseNumber('100000000'), this.parseNumber('0.0001')],
187
+ ],
188
+ 'maker': [
189
+ [this.parseNumber('0'), this.parseNumber('0.0002')],
190
+ [this.parseNumber('100000'), this.parseNumber('0.0015')],
191
+ [this.parseNumber('1000000'), this.parseNumber('0.000125')],
192
+ [this.parseNumber('5000000'), this.parseNumber('0.0001')],
193
+ [this.parseNumber('10000000'), this.parseNumber('0.000075')],
194
+ [this.parseNumber('20000000'), this.parseNumber('0.00005')],
195
+ [this.parseNumber('50000000'), this.parseNumber('0.000025')],
196
+ [this.parseNumber('100000000'), this.parseNumber('0')],
197
+ ],
198
+ },
199
+ },
200
+ },
201
+ 'exceptions': {
202
+ 'exact': {
203
+ 'apiLimitExceeded': RateLimitExceeded,
204
+ 'marketUnavailable': ContractUnavailable,
205
+ 'requiredArgumentMissing': BadRequest,
206
+ 'unavailable': ExchangeNotAvailable,
207
+ 'authenticationError': AuthenticationError,
208
+ 'accountInactive': ExchangeError,
209
+ 'invalidAccount': BadRequest,
210
+ 'invalidAmount': BadRequest,
211
+ 'insufficientFunds': InsufficientFunds,
212
+ 'Bad Request': BadRequest,
213
+ 'Unavailable': ExchangeNotAvailable,
214
+ 'invalidUnit': BadRequest,
215
+ 'Json Parse Error': ExchangeError,
216
+ 'nonceBelowThreshold': InvalidNonce,
217
+ 'nonceDuplicate': InvalidNonce,
218
+ 'notFound': BadRequest,
219
+ 'Server Error': ExchangeError,
220
+ 'unknownError': ExchangeError,
221
+ },
222
+ 'broad': {
223
+ 'invalidArgument': BadRequest,
224
+ 'nonceBelowThreshold': InvalidNonce,
225
+ 'nonceDuplicate': InvalidNonce,
226
+ },
227
+ },
228
+ 'precisionMode': TICK_SIZE,
229
+ 'options': {
230
+ 'access': {
231
+ 'history': {
232
+ 'GET': {
233
+ 'orders': 'private',
234
+ 'executions': 'private',
235
+ 'triggers': 'private',
236
+ 'accountlogcsv': 'private',
237
+ 'account-log': 'private',
238
+ },
239
+ },
240
+ },
241
+ 'settlementCurrencies': {
242
+ 'flex': ['USDT', 'BTC', 'USD', 'GBP', 'EUR', 'USDC'],
243
+ },
244
+ 'symbol': {
245
+ 'quoteIds': ['USD', 'XBT'],
246
+ 'reversed': false,
247
+ },
248
+ 'versions': {
249
+ 'public': {
250
+ 'GET': {
251
+ 'historicalfundingrates': 'v4',
252
+ },
253
+ },
254
+ 'charts': {
255
+ 'GET': {
256
+ '{price_type}/{symbol}/{interval}': 'v1',
257
+ },
258
+ },
259
+ 'history': {
260
+ 'GET': {
261
+ 'orders': 'v2',
262
+ 'executions': 'v2',
263
+ 'triggers': 'v2',
264
+ 'accountlogcsv': 'v2',
265
+ },
266
+ },
267
+ },
268
+ 'fetchTrades': {
269
+ 'method': 'historyGetMarketSymbolExecutions', // historyGetMarketSymbolExecutions, publicGetHistory
270
+ },
271
+ },
272
+ 'features': {
273
+ 'default': {
274
+ 'sandbox': true,
275
+ 'createOrder': {
276
+ 'marginMode': false,
277
+ 'triggerPrice': true,
278
+ 'triggerPriceType': {
279
+ 'last': true,
280
+ 'mark': true,
281
+ 'index': true,
282
+ },
283
+ 'triggerDirection': false,
284
+ 'stopLossPrice': true,
285
+ 'takeProfitPrice': true,
286
+ 'attachedStopLossTakeProfit': undefined,
287
+ 'timeInForce': {
288
+ 'IOC': true,
289
+ 'FOK': true,
290
+ 'PO': true,
291
+ 'GTD': false,
292
+ },
293
+ 'hedged': false,
294
+ 'trailing': false,
295
+ 'leverage': false,
296
+ 'marketBuyByCost': false,
297
+ 'marketBuyRequiresPrice': false,
298
+ 'selfTradePrevention': false,
299
+ 'iceberg': false,
300
+ },
301
+ 'createOrders': {
302
+ 'max': 100,
303
+ },
304
+ 'fetchMyTrades': {
305
+ 'marginMode': false,
306
+ 'limit': undefined,
307
+ 'daysBack': undefined,
308
+ 'untilDays': 100000,
309
+ 'symbolRequired': false,
310
+ },
311
+ 'fetchOrder': undefined,
312
+ 'fetchOpenOrders': {
313
+ 'marginMode': false,
314
+ 'limit': undefined,
315
+ 'trigger': false,
316
+ 'trailing': false,
317
+ 'symbolRequired': false,
318
+ },
319
+ 'fetchOrders': undefined,
320
+ 'fetchClosedOrders': {
321
+ 'marginMode': false,
322
+ 'limit': undefined,
323
+ 'daysBack': undefined,
324
+ 'daysBackCanceled': undefined,
325
+ 'untilDays': undefined,
326
+ 'trigger': false,
327
+ 'trailing': false,
328
+ 'symbolRequired': false,
329
+ },
330
+ 'fetchOHLCV': {
331
+ 'limit': 5000,
332
+ },
333
+ },
334
+ 'spot': undefined,
335
+ 'swap': {
336
+ 'linear': {
337
+ 'extends': 'default',
338
+ },
339
+ 'inverse': {
340
+ 'extends': 'default',
341
+ },
342
+ },
343
+ 'future': {
344
+ 'linear': {
345
+ 'extends': 'default',
346
+ },
347
+ 'inverse': {
348
+ 'extends': 'default',
349
+ },
350
+ },
351
+ },
352
+ 'timeframes': {
353
+ '1m': '1m',
354
+ '5m': '5m',
355
+ '15m': '15m',
356
+ '30m': '30m',
357
+ '1h': '1h',
358
+ '4h': '4h',
359
+ '12h': '12h',
360
+ '1d': '1d',
361
+ '1w': '1w',
362
+ },
363
+ });
364
+ }
365
+ /**
366
+ * @method
367
+ * @name krakenfutures#fetchMarkets
368
+ * @description Fetches the available trading markets from the exchange, Multi-collateral markets are returned as linear markets, but can be settled in multiple currencies
369
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-instruments
370
+ * @param {object} [params] exchange specific params
371
+ * @returns An array of market structures
372
+ */
373
+ async fetchMarkets(params = {}) {
374
+ const response = await this.publicGetInstruments(params);
375
+ //
376
+ // {
377
+ // "result": "success",
378
+ // "instruments": [
379
+ // {
380
+ // "symbol": "fi_ethusd_180928",
381
+ // "type": "futures_inverse", // futures_vanilla // spot index
382
+ // "underlying": "rr_ethusd",
383
+ // "lastTradingTime": "2018-09-28T15:00:00.000Z",
384
+ // "tickSize": 0.1,
385
+ // "contractSize": 1,
386
+ // "tradeable": true,
387
+ // "marginLevels": [
388
+ // {
389
+ // "contracts":0,
390
+ // "initialMargin":0.02,
391
+ // "maintenanceMargin":0.01
392
+ // },
393
+ // {
394
+ // "contracts":250000,
395
+ // "initialMargin":0.04,
396
+ // "maintenanceMargin":0.02
397
+ // },
398
+ // ...
399
+ // ],
400
+ // "isin": "GB00JVMLMP88",
401
+ // "retailMarginLevels": [
402
+ // {
403
+ // "contracts": 0,
404
+ // "initialMargin": 0.5,
405
+ // "maintenanceMargin": 0.25
406
+ // }
407
+ // ],
408
+ // "tags": [],
409
+ // },
410
+ // {
411
+ // "symbol": "in_xbtusd",
412
+ // "type": "spot index",
413
+ // "tradeable":false
414
+ // }
415
+ // ]
416
+ // "serverTime": "2018-07-19T11:32:39.433Z"
417
+ // }
418
+ //
419
+ const instruments = this.safeValue(response, 'instruments', []);
420
+ const result = [];
421
+ for (let i = 0; i < instruments.length; i++) {
422
+ const market = instruments[i];
423
+ const id = this.safeString(market, 'symbol');
424
+ const marketType = this.safeString(market, 'type');
425
+ let type = undefined;
426
+ const index = (marketType.indexOf(' index') >= 0);
427
+ let linear = undefined;
428
+ let inverse = undefined;
429
+ let expiry = undefined;
430
+ if (!index) {
431
+ linear = (marketType.indexOf('_vanilla') >= 0);
432
+ inverse = !linear;
433
+ const settleTime = this.safeString(market, 'lastTradingTime');
434
+ type = (settleTime === undefined) ? 'swap' : 'future';
435
+ expiry = this.parse8601(settleTime);
436
+ }
437
+ else {
438
+ type = 'index';
439
+ }
440
+ const swap = (type === 'swap');
441
+ const future = (type === 'future');
442
+ let symbol = id;
443
+ const split = id.split('_');
444
+ const splitMarket = this.safeString(split, 1);
445
+ const baseId = splitMarket.slice(0, splitMarket.length - 3);
446
+ const quoteId = 'usd'; // always USD
447
+ const base = this.safeCurrencyCode(baseId);
448
+ const quote = this.safeCurrencyCode(quoteId);
449
+ // swap == perpetual
450
+ let settle = undefined;
451
+ let settleId = undefined;
452
+ const cvtp = this.safeString(market, 'contractValueTradePrecision');
453
+ const amountPrecision = this.parseNumber(this.integerPrecisionToAmount(cvtp));
454
+ const pricePrecision = this.safeNumber(market, 'tickSize');
455
+ const contract = (swap || future || index);
456
+ const swapOrFutures = (swap || future);
457
+ if (swapOrFutures) {
458
+ const exchangeType = this.safeString(market, 'type');
459
+ if (exchangeType === 'futures_inverse') {
460
+ settle = base;
461
+ settleId = baseId;
462
+ inverse = true;
463
+ }
464
+ else {
465
+ settle = quote;
466
+ settleId = quoteId;
467
+ inverse = false;
468
+ }
469
+ linear = !inverse;
470
+ symbol = base + '/' + quote + ':' + settle;
471
+ if (future) {
472
+ symbol = symbol + '-' + this.yymmdd(expiry);
473
+ }
474
+ }
475
+ result.push({
476
+ 'id': id,
477
+ 'symbol': symbol,
478
+ 'base': base,
479
+ 'quote': quote,
480
+ 'settle': settle,
481
+ 'baseId': baseId,
482
+ 'quoteId': quoteId,
483
+ 'settleId': settleId,
484
+ 'type': type,
485
+ 'spot': false,
486
+ 'margin': false,
487
+ 'swap': swap,
488
+ 'future': future,
489
+ 'option': false,
490
+ 'index': index,
491
+ 'active': undefined,
492
+ 'contract': contract,
493
+ 'linear': linear,
494
+ 'inverse': inverse,
495
+ 'contractSize': this.safeNumber(market, 'contractSize'),
496
+ 'maintenanceMarginRate': undefined,
497
+ 'expiry': expiry,
498
+ 'expiryDatetime': this.iso8601(expiry),
499
+ 'strike': undefined,
500
+ 'optionType': undefined,
501
+ 'precision': {
502
+ 'amount': amountPrecision,
503
+ 'price': pricePrecision,
504
+ },
505
+ 'limits': {
506
+ 'leverage': {
507
+ 'min': undefined,
508
+ 'max': undefined,
509
+ },
510
+ 'amount': {
511
+ 'min': undefined,
512
+ 'max': undefined,
513
+ },
514
+ 'price': {
515
+ 'min': undefined,
516
+ 'max': undefined,
517
+ },
518
+ 'cost': {
519
+ 'min': undefined,
520
+ 'max': undefined,
521
+ },
522
+ },
523
+ 'created': this.parse8601(this.safeString(market, 'openingDate')),
524
+ 'info': market,
525
+ });
526
+ }
527
+ const settlementCurrencies = this.options['settlementCurrencies']['flex'];
528
+ const currencies = [];
529
+ for (let i = 0; i < settlementCurrencies.length; i++) {
530
+ const code = settlementCurrencies[i];
531
+ currencies.push({
532
+ 'id': code.toLowerCase(),
533
+ 'numericId': undefined,
534
+ 'code': code,
535
+ 'precision': undefined,
536
+ });
537
+ }
538
+ this.currencies = this.mapToSafeMap(this.deepExtend(currencies, this.currencies));
539
+ return result;
540
+ }
541
+ /**
542
+ * @method
543
+ * @name krakenfutures#fetchOrderBook
544
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-orderbook
545
+ * @description Fetches a list of open orders in a market
546
+ * @param {string} symbol Unified market symbol
547
+ * @param {int} [limit] Not used by krakenfutures
548
+ * @param {object} [params] exchange specific params
549
+ * @returns An [order book structure]{@link https://docs.ccxt.com/#/?id=order-book-structure}
550
+ */
551
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
552
+ await this.loadMarkets();
553
+ const market = this.market(symbol);
554
+ const request = {
555
+ 'symbol': market['id'],
556
+ };
557
+ const response = await this.publicGetOrderbook(this.extend(request, params));
558
+ //
559
+ // {
560
+ // "result": "success",
561
+ // "serverTime": "2016-02-25T09:45:53.818Z",
562
+ // "orderBook": {
563
+ // "bids": [
564
+ // [
565
+ // 4213,
566
+ // 2000,
567
+ // ],
568
+ // [
569
+ // 4210,
570
+ // 4000,
571
+ // ],
572
+ // ...
573
+ // ],
574
+ // "asks": [
575
+ // [
576
+ // 4218,
577
+ // 4000,
578
+ // ],
579
+ // [
580
+ // 4220,
581
+ // 5000,
582
+ // ],
583
+ // ...
584
+ // ],
585
+ // },
586
+ // }
587
+ //
588
+ const timestamp = this.parse8601(response['serverTime']);
589
+ return this.parseOrderBook(response['orderBook'], symbol, timestamp);
590
+ }
591
+ /**
592
+ * @method
593
+ * @name krakenfutures#fetchTickers
594
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
595
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-tickers
596
+ * @param {string[]} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
597
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
598
+ * @returns {object} an array of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
599
+ */
600
+ async fetchTickers(symbols = undefined, params = {}) {
601
+ await this.loadMarkets();
602
+ const response = await this.publicGetTickers(params);
603
+ //
604
+ // {
605
+ // "result": "success",
606
+ // "tickers": [
607
+ // {
608
+ // "tag": 'semiannual', // 'month', 'quarter', "perpetual", "semiannual",
609
+ // "pair": "ETH:USD",
610
+ // "symbol": "fi_ethusd_220624",
611
+ // "markPrice": "2925.72",
612
+ // "bid": "2923.8",
613
+ // "bidSize": "16804",
614
+ // "ask": "2928.65",
615
+ // "askSize": "1339",
616
+ // "vol24h": "860493",
617
+ // "openInterest": "3023363.00000000",
618
+ // "open24h": "3021.25",
619
+ // "indexPrice": "2893.71",
620
+ // "last": "2942.25",
621
+ // "lastTime": "2022-02-18T14:08:15.578Z",
622
+ // "lastSize": "151",
623
+ // "suspended": false
624
+ // },
625
+ // {
626
+ // "symbol": "in_xbtusd", // "rr_xbtusd",
627
+ // "last": "40411",
628
+ // "lastTime": "2022-02-18T14:16:28.000Z"
629
+ // },
630
+ // ...
631
+ // ],
632
+ // "serverTime": "2022-02-18T14:16:29.440Z"
633
+ // }
634
+ //
635
+ const tickers = this.safeList(response, 'tickers');
636
+ return this.parseTickers(tickers, symbols);
637
+ }
638
+ parseTicker(ticker, market = undefined) {
639
+ //
640
+ // {
641
+ // "tag": 'semiannual', // 'month', 'quarter', "perpetual", "semiannual",
642
+ // "pair": "ETH:USD",
643
+ // "symbol": "fi_ethusd_220624",
644
+ // "markPrice": "2925.72",
645
+ // "bid": "2923.8",
646
+ // "bidSize": "16804",
647
+ // "ask": "2928.65",
648
+ // "askSize": "1339",
649
+ // "vol24h": "860493",
650
+ // "openInterest": "3023363.00000000",
651
+ // "open24h": "3021.25",
652
+ // "indexPrice": "2893.71",
653
+ // "last": "2942.25",
654
+ // "lastTime": "2022-02-18T14:08:15.578Z",
655
+ // "lastSize": "151",
656
+ // "suspended": false
657
+ // }
658
+ //
659
+ // {
660
+ // "symbol": "in_xbtusd", // "rr_xbtusd",
661
+ // "last": "40411",
662
+ // "lastTime": "2022-02-18T14:16:28.000Z"
663
+ // }
664
+ //
665
+ const marketId = this.safeString(ticker, 'symbol');
666
+ market = this.safeMarket(marketId, market);
667
+ const symbol = market['symbol'];
668
+ const timestamp = this.parse8601(this.safeString(ticker, 'lastTime'));
669
+ const open = this.safeString(ticker, 'open24h');
670
+ const last = this.safeString(ticker, 'last');
671
+ const change = Precise.stringSub(last, open);
672
+ const percentage = Precise.stringMul(Precise.stringDiv(change, open), '100');
673
+ const average = Precise.stringDiv(Precise.stringAdd(open, last), '2');
674
+ const volume = this.safeString(ticker, 'vol24h');
675
+ let baseVolume = undefined;
676
+ let quoteVolume = undefined;
677
+ const isIndex = this.safeBool(market, 'index', false);
678
+ if (!isIndex) {
679
+ if (market['linear']) {
680
+ baseVolume = volume;
681
+ }
682
+ else if (market['inverse']) {
683
+ quoteVolume = volume;
684
+ }
685
+ }
686
+ return this.safeTicker({
687
+ 'symbol': symbol,
688
+ 'timestamp': timestamp,
689
+ 'datetime': this.iso8601(timestamp),
690
+ 'high': undefined,
691
+ 'low': undefined,
692
+ 'bid': this.safeString(ticker, 'bid'),
693
+ 'bidVolume': this.safeString(ticker, 'bidSize'),
694
+ 'ask': this.safeString(ticker, 'ask'),
695
+ 'askVolume': this.safeString(ticker, 'askSize'),
696
+ 'vwap': undefined,
697
+ 'open': open,
698
+ 'close': last,
699
+ 'last': last,
700
+ 'previousClose': undefined,
701
+ 'change': change,
702
+ 'percentage': percentage,
703
+ 'average': average,
704
+ 'baseVolume': baseVolume,
705
+ 'quoteVolume': quoteVolume,
706
+ 'markPrice': this.safeString(ticker, 'markPrice'),
707
+ 'indexPrice': this.safeString(ticker, 'indexPrice'),
708
+ 'info': ticker,
709
+ });
710
+ }
711
+ /**
712
+ * @method
713
+ * @name krakenfutures#fetchOHLCV
714
+ * @see https://docs.kraken.com/api/docs/futures-api/charts/candles
715
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
716
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
717
+ * @param {string} timeframe the length of time each candle represents
718
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
719
+ * @param {int} [limit] the maximum amount of candles to fetch
720
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
721
+ * @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)
722
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
723
+ */
724
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
725
+ await this.loadMarkets();
726
+ const market = this.market(symbol);
727
+ let paginate = false;
728
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate');
729
+ if (paginate) {
730
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 5000);
731
+ }
732
+ const request = {
733
+ 'symbol': market['id'],
734
+ 'price_type': this.safeString(params, 'price', 'trade'),
735
+ 'interval': this.timeframes[timeframe],
736
+ };
737
+ params = this.omit(params, 'price');
738
+ if (since !== undefined) {
739
+ const duration = this.parseTimeframe(timeframe);
740
+ request['from'] = this.parseToInt(since / 1000);
741
+ if (limit === undefined) {
742
+ limit = 5000;
743
+ }
744
+ limit = Math.min(limit, 5000);
745
+ const toTimestamp = this.sum(request['from'], limit * duration - 1);
746
+ const currentTimestamp = this.seconds();
747
+ request['to'] = Math.min(toTimestamp, currentTimestamp);
748
+ }
749
+ else if (limit !== undefined) {
750
+ limit = Math.min(limit, 5000);
751
+ const duration = this.parseTimeframe(timeframe);
752
+ request['to'] = this.seconds();
753
+ request['from'] = this.parseToInt(request['to'] - (duration * limit));
754
+ }
755
+ const response = await this.chartsGetPriceTypeSymbolInterval(this.extend(request, params));
756
+ //
757
+ // {
758
+ // "candles": [
759
+ // {
760
+ // "time": 1645198500000,
761
+ // "open": "309.15000000000",
762
+ // "high": "309.15000000000",
763
+ // "low": "308.70000000000",
764
+ // "close": "308.85000000000",
765
+ // "volume": 0
766
+ // }
767
+ // ],
768
+ // "more_candles": true
769
+ // }
770
+ //
771
+ const candles = this.safeList(response, 'candles');
772
+ return this.parseOHLCVs(candles, market, timeframe, since, limit);
773
+ }
774
+ parseOHLCV(ohlcv, market = undefined) {
775
+ //
776
+ // {
777
+ // "time": 1645198500000,
778
+ // "open": "309.15000000000",
779
+ // "high": "309.15000000000",
780
+ // "low": "308.70000000000",
781
+ // "close": "308.85000000000",
782
+ // "volume": 0
783
+ // }
784
+ //
785
+ return [
786
+ this.safeInteger(ohlcv, 'time'),
787
+ this.safeNumber(ohlcv, 'open'),
788
+ this.safeNumber(ohlcv, 'high'),
789
+ this.safeNumber(ohlcv, 'low'),
790
+ this.safeNumber(ohlcv, 'close'),
791
+ this.safeNumber(ohlcv, 'volume'), // trading volume, undefined for mark or index price
792
+ ];
793
+ }
794
+ /**
795
+ * @method
796
+ * @name krakenfutures#fetchTrades
797
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-history
798
+ * @see https://docs.kraken.com/api/docs/futures-api/history/get-public-execution-events
799
+ * @description Fetch a history of filled trades that this account has made
800
+ * @param {string} symbol Unified CCXT market symbol
801
+ * @param {int} [since] Timestamp in ms of earliest trade. Not used by krakenfutures except in combination with params.until
802
+ * @param {int} [limit] Total number of trades, cannot exceed 100
803
+ * @param {object} [params] Exchange specific params
804
+ * @param {int} [params.until] Timestamp in ms of latest trade
805
+ * @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)
806
+ * @param {string} [params.method] The method to use to fetch trades. Can be 'historyGetMarketSymbolExecutions' or 'publicGetHistory' default is 'historyGetMarketSymbolExecutions'
807
+ * @returns An array of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
808
+ */
809
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
810
+ await this.loadMarkets();
811
+ let paginate = false;
812
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchTrades', 'paginate');
813
+ if (paginate) {
814
+ return await this.fetchPaginatedCallDynamic('fetchTrades', symbol, since, limit, params);
815
+ }
816
+ const market = this.market(symbol);
817
+ let request = {
818
+ 'symbol': market['id'],
819
+ };
820
+ let method = undefined;
821
+ [method, params] = this.handleOptionAndParams(params, 'fetchTrades', 'method', 'historyGetMarketSymbolExecutions');
822
+ let rawTrades = undefined;
823
+ const isFullHistoryEndpoint = (method === 'historyGetMarketSymbolExecutions');
824
+ if (isFullHistoryEndpoint) {
825
+ [request, params] = this.handleUntilOption('before', request, params);
826
+ if (since !== undefined) {
827
+ request['since'] = since;
828
+ request['sort'] = 'asc';
829
+ }
830
+ if (limit !== undefined) {
831
+ request['count'] = limit;
832
+ }
833
+ const response = await this.historyGetMarketSymbolExecutions(this.extend(request, params));
834
+ //
835
+ // {
836
+ // "elements": [
837
+ // {
838
+ // "uid": "a5105030-f054-44cc-98ab-30d5cae96bef",
839
+ // "timestamp": "1710150778607",
840
+ // "event": {
841
+ // "Execution": {
842
+ // "execution": {
843
+ // "uid": "2d485b71-cd28-4a1e-9364-371a127550d2",
844
+ // "makerOrder": {
845
+ // "uid": "0a25f66b-1109-49ec-93a3-d17bf9e9137e",
846
+ // "tradeable": "PF_XBTUSD",
847
+ // "direction": "Buy",
848
+ // "quantity": "0.26500",
849
+ // "timestamp": "1710150778570",
850
+ // "limitPrice": "71907",
851
+ // "orderType": "Post",
852
+ // "reduceOnly": false,
853
+ // "lastUpdateTimestamp": "1710150778570"
854
+ // },
855
+ // "takerOrder": {
856
+ // "uid": "04de3ee0-9125-4960-bf8f-f63b577b6790",
857
+ // "tradeable": "PF_XBTUSD",
858
+ // "direction": "Sell",
859
+ // "quantity": "0.0002",
860
+ // "timestamp": "1710150778607",
861
+ // "limitPrice": "71187.00",
862
+ // "orderType": "Market",
863
+ // "reduceOnly": false,
864
+ // "lastUpdateTimestamp": "1710150778607"
865
+ // },
866
+ // "timestamp": "1710150778607",
867
+ // "quantity": "0.0002",
868
+ // "price": "71907",
869
+ // "markPrice": "71903.32715463147",
870
+ // "limitFilled": false,
871
+ // "usdValue": "14.38"
872
+ // },
873
+ // "takerReducedQuantity": ""
874
+ // }
875
+ // }
876
+ // },
877
+ // ... followed by older items
878
+ // ],
879
+ // "len": "1000",
880
+ // "continuationToken": "QTexMDE0OTe33NTcyXy8xNDIzAjc1NjY5MwI="
881
+ // }
882
+ //
883
+ const elements = this.safeList(response, 'elements', []);
884
+ // we need to reverse the list to fix chronology
885
+ rawTrades = [];
886
+ const length = elements.length;
887
+ for (let i = 0; i < length; i++) {
888
+ const index = length - 1 - i;
889
+ const element = elements[index];
890
+ const event = this.safeDict(element, 'event', {});
891
+ const executionContainer = this.safeDict(event, 'Execution', {});
892
+ const rawTrade = this.safeDict(executionContainer, 'execution', {});
893
+ rawTrades.push(rawTrade);
894
+ }
895
+ }
896
+ else {
897
+ [request, params] = this.handleUntilOption('lastTime', request, params);
898
+ const response = await this.publicGetHistory(this.extend(request, params));
899
+ //
900
+ // {
901
+ // "result": "success",
902
+ // "history": [
903
+ // {
904
+ // "time": "2022-03-18T04:55:37.692Z",
905
+ // "trade_id": 100,
906
+ // "price": 0.7921,
907
+ // "size": 1068,
908
+ // "side": "sell",
909
+ // "type": "fill",
910
+ // "uid": "6c5da0b0-f1a8-483f-921f-466eb0388265"
911
+ // },
912
+ // ...
913
+ // ],
914
+ // "serverTime": "2022-03-18T06:39:18.056Z"
915
+ // }
916
+ //
917
+ rawTrades = this.safeList(response, 'history', []);
918
+ }
919
+ return this.parseTrades(rawTrades, market, since, limit);
920
+ }
921
+ parseTrade(trade, market = undefined) {
922
+ //
923
+ // fetchTrades (recent trades)
924
+ //
925
+ // {
926
+ // "time": "2019-02-14T09:25:33.920Z",
927
+ // "trade_id": 100,
928
+ // "price": 3574,
929
+ // "size": 100,
930
+ // "side": "buy",
931
+ // "type": "fill" // fill, liquidation, assignment, termination
932
+ // "uid": "11c3d82c-9e70-4fe9-8115-f643f1b162d4"
933
+ // }
934
+ //
935
+ // fetchTrades (executions history)
936
+ //
937
+ // {
938
+ // "timestamp": "1710152516830",
939
+ // "price": "71927.0",
940
+ // "quantity": "0.0695",
941
+ // "markPrice": "71936.38701675525",
942
+ // "limitFilled": true,
943
+ // "usdValue": "4998.93",
944
+ // "uid": "116ae634-253f-470b-bd20-fa9d429fb8b1",
945
+ // "makerOrder": { "uid": "17bfe4de-c01e-4938-926c-617d2a2d0597", "tradeable": "PF_XBTUSD", "direction": "Buy", "quantity": "0.0695", "timestamp": "1710152515836", "limitPrice": "71927.0", "orderType": "Post", "reduceOnly": false, "lastUpdateTimestamp": "1710152515836" },
946
+ // "takerOrder": { "uid": "d3e437b4-aa70-4108-b5cf-b1eecb9845b5", "tradeable": "PF_XBTUSD", "direction": "Sell", "quantity": "0.940100", "timestamp": "1710152516830", "limitPrice": "71915", "orderType": "IoC", "reduceOnly": false, "lastUpdateTimestamp": "1710152516830" }
947
+ // }
948
+ //
949
+ // fetchMyTrades (private)
950
+ //
951
+ // {
952
+ // "fillTime": "2016-02-25T09:47:01.000Z",
953
+ // "order_id": "c18f0c17-9971-40e6-8e5b-10df05d422f0",
954
+ // "fill_id": "522d4e08-96e7-4b44-9694-bfaea8fe215e",
955
+ // "cliOrdId": "d427f920-ec55-4c18-ba95-5fe241513b30", // OPTIONAL
956
+ // "symbol": "fi_xbtusd_180615",
957
+ // "side": "buy",
958
+ // "size": 2000,
959
+ // "price": 4255,
960
+ // "fillType": "maker" // taker, takerAfterEdit, maker, liquidation, assignee
961
+ // }
962
+ //
963
+ // execution report (createOrder, editOrder)
964
+ //
965
+ // {
966
+ // "executionId": "e1ec9f63-2338-4c44-b40a-43486c6732d7",
967
+ // "price": 7244.5,
968
+ // "amount": 10,
969
+ // "orderPriorEdit": null,
970
+ // "orderPriorExecution": {
971
+ // "orderId": "61ca5732-3478-42fe-8362-abbfd9465294",
972
+ // "cliOrdId": null,
973
+ // "type": "lmt",
974
+ // "symbol": "pi_xbtusd",
975
+ // "side": "buy",
976
+ // "quantity": 10,
977
+ // "filled": 0,
978
+ // "limitPrice": 7500,
979
+ // "reduceOnly": false,
980
+ // "timestamp": "2019-12-11T17:17:33.888Z",
981
+ // "lastUpdateTimestamp": "2019-12-11T17:17:33.888Z"
982
+ // },
983
+ // "takerReducedQuantity": null,
984
+ // "type": "EXECUTION"
985
+ // }
986
+ //
987
+ let timestamp = this.parse8601(this.safeString2(trade, 'time', 'fillTime'));
988
+ const price = this.safeString(trade, 'price');
989
+ const amount = this.safeStringN(trade, ['size', 'amount', 'quantity'], '0.0');
990
+ let id = this.safeString2(trade, 'uid', 'fill_id');
991
+ if (id === undefined) {
992
+ id = this.safeString(trade, 'executionId');
993
+ }
994
+ let order = this.safeString(trade, 'order_id');
995
+ let marketId = this.safeString(trade, 'symbol');
996
+ let side = this.safeString(trade, 'side');
997
+ let type = undefined;
998
+ const priorEdit = this.safeValue(trade, 'orderPriorEdit');
999
+ const priorExecution = this.safeValue(trade, 'orderPriorExecution');
1000
+ if (priorExecution !== undefined) {
1001
+ order = this.safeString(priorExecution, 'orderId');
1002
+ marketId = this.safeString(priorExecution, 'symbol');
1003
+ side = this.safeString(priorExecution, 'side');
1004
+ type = this.safeString(priorExecution, 'type');
1005
+ }
1006
+ else if (priorEdit !== undefined) {
1007
+ order = this.safeString(priorEdit, 'orderId');
1008
+ marketId = this.safeString(priorEdit, 'symbol');
1009
+ side = this.safeString(priorEdit, 'type');
1010
+ type = this.safeString(priorEdit, 'type');
1011
+ }
1012
+ if (type !== undefined) {
1013
+ type = this.parseOrderType(type);
1014
+ }
1015
+ market = this.safeMarket(marketId, market);
1016
+ let cost = undefined;
1017
+ const linear = this.safeBool(market, 'linear');
1018
+ if ((amount !== undefined) && (price !== undefined) && (market !== undefined)) {
1019
+ if (linear) {
1020
+ cost = Precise.stringMul(amount, price); // in quote
1021
+ }
1022
+ else {
1023
+ cost = Precise.stringDiv(amount, price); // in base
1024
+ }
1025
+ const contractSize = this.safeString(market, 'contractSize');
1026
+ cost = Precise.stringMul(cost, contractSize);
1027
+ }
1028
+ let takerOrMaker = undefined;
1029
+ const fillType = this.safeString(trade, 'fillType');
1030
+ if (fillType !== undefined) {
1031
+ if (fillType.indexOf('taker') >= 0) {
1032
+ takerOrMaker = 'taker';
1033
+ }
1034
+ else if (fillType.indexOf('maker') >= 0) {
1035
+ takerOrMaker = 'maker';
1036
+ }
1037
+ }
1038
+ const isHistoricalExecution = ('takerOrder' in trade);
1039
+ if (isHistoricalExecution) {
1040
+ timestamp = this.safeInteger(trade, 'timestamp');
1041
+ const taker = this.safeDict(trade, 'takerOrder', {});
1042
+ if (taker !== undefined) {
1043
+ side = this.safeStringLower(taker, 'direction');
1044
+ takerOrMaker = 'taker';
1045
+ }
1046
+ }
1047
+ return this.safeTrade({
1048
+ 'info': trade,
1049
+ 'id': id,
1050
+ 'symbol': this.safeString(market, 'symbol'),
1051
+ 'timestamp': timestamp,
1052
+ 'datetime': this.iso8601(timestamp),
1053
+ 'order': order,
1054
+ 'type': type,
1055
+ 'side': side,
1056
+ 'takerOrMaker': takerOrMaker,
1057
+ 'price': price,
1058
+ 'amount': linear ? amount : undefined,
1059
+ 'cost': cost,
1060
+ 'fee': undefined,
1061
+ });
1062
+ }
1063
+ createOrderRequest(symbol, type, side, amount, price = undefined, params = {}) {
1064
+ const market = this.market(symbol);
1065
+ symbol = market['symbol'];
1066
+ type = this.safeString(params, 'orderType', type);
1067
+ const timeInForce = this.safeString(params, 'timeInForce');
1068
+ let postOnly = false;
1069
+ [postOnly, params] = this.handlePostOnly(type === 'market', type === 'post', params);
1070
+ if (postOnly) {
1071
+ type = 'post';
1072
+ }
1073
+ else if (timeInForce === 'ioc') {
1074
+ type = 'ioc';
1075
+ }
1076
+ else if (type === 'limit') {
1077
+ type = 'lmt';
1078
+ }
1079
+ else if (type === 'market') {
1080
+ type = 'mkt';
1081
+ }
1082
+ const request = {
1083
+ 'symbol': market['id'],
1084
+ 'side': side,
1085
+ 'size': this.amountToPrecision(symbol, amount),
1086
+ };
1087
+ const clientOrderId = this.safeString2(params, 'clientOrderId', 'cliOrdId');
1088
+ if (clientOrderId !== undefined) {
1089
+ request['cliOrdId'] = clientOrderId;
1090
+ }
1091
+ const triggerPrice = this.safeString2(params, 'triggerPrice', 'stopPrice');
1092
+ const isTriggerOrder = triggerPrice !== undefined;
1093
+ const stopLossTriggerPrice = this.safeString(params, 'stopLossPrice');
1094
+ const takeProfitTriggerPrice = this.safeString(params, 'takeProfitPrice');
1095
+ const isStopLossTriggerOrder = stopLossTriggerPrice !== undefined;
1096
+ const isTakeProfitTriggerOrder = takeProfitTriggerPrice !== undefined;
1097
+ const isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder || isTakeProfitTriggerOrder;
1098
+ const triggerSignal = this.safeString(params, 'triggerSignal', 'last');
1099
+ let reduceOnly = this.safeValue(params, 'reduceOnly');
1100
+ if (isStopLossOrTakeProfitTrigger || isTriggerOrder) {
1101
+ request['triggerSignal'] = triggerSignal;
1102
+ }
1103
+ if (isTriggerOrder) {
1104
+ type = 'stp';
1105
+ request['stopPrice'] = this.priceToPrecision(symbol, triggerPrice);
1106
+ }
1107
+ else if (isStopLossOrTakeProfitTrigger) {
1108
+ reduceOnly = true;
1109
+ if (isStopLossTriggerOrder) {
1110
+ type = 'stp';
1111
+ request['stopPrice'] = this.priceToPrecision(symbol, stopLossTriggerPrice);
1112
+ }
1113
+ else if (isTakeProfitTriggerOrder) {
1114
+ type = 'take_profit';
1115
+ request['stopPrice'] = this.priceToPrecision(symbol, takeProfitTriggerPrice);
1116
+ }
1117
+ }
1118
+ if (reduceOnly) {
1119
+ request['reduceOnly'] = true;
1120
+ }
1121
+ request['orderType'] = type;
1122
+ if (price !== undefined) {
1123
+ request['limitPrice'] = this.priceToPrecision(symbol, price);
1124
+ }
1125
+ params = this.omit(params, ['clientOrderId', 'timeInForce', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice']);
1126
+ return this.extend(request, params);
1127
+ }
1128
+ /**
1129
+ * @method
1130
+ * @name krakenfutures#createOrder
1131
+ * @description Create an order on the exchange
1132
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/send-order
1133
+ * @param {string} symbol unified market symbol
1134
+ * @param {string} type 'limit' or 'market'
1135
+ * @param {string} side 'buy' or 'sell'
1136
+ * @param {float} amount number of contracts
1137
+ * @param {float} [price] limit order price
1138
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1139
+ * @param {bool} [params.reduceOnly] set as true if you wish the order to only reduce an existing position, any order which increases an existing position will be rejected, default is false
1140
+ * @param {bool} [params.postOnly] set as true if you wish to make a postOnly order, default is false
1141
+ * @param {string} [params.clientOrderId] UUID The order identity that is specified from the user, It must be globally unique
1142
+ * @param {float} [params.triggerPrice] the price that a stop order is triggered at
1143
+ * @param {float} [params.stopLossPrice] the price that a stop loss order is triggered at
1144
+ * @param {float} [params.takeProfitPrice] the price that a take profit order is triggered at
1145
+ * @param {string} [params.triggerSignal] for triggerPrice, stopLossPrice and takeProfitPrice orders, the trigger price type, 'last', 'mark' or 'index', default is 'last'
1146
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1147
+ */
1148
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1149
+ await this.loadMarkets();
1150
+ const market = this.market(symbol);
1151
+ const orderRequest = this.createOrderRequest(symbol, type, side, amount, price, params);
1152
+ const response = await this.privatePostSendorder(orderRequest);
1153
+ //
1154
+ // {
1155
+ // "result": "success",
1156
+ // "sendStatus": {
1157
+ // "order_id": "salf320-e337-47ac-b345-30sdfsalj",
1158
+ // "status": "placed",
1159
+ // "receivedTime": "2022-02-28T19:32:17.122Z",
1160
+ // "orderEvents": [
1161
+ // {
1162
+ // "order": {
1163
+ // "orderId": "salf320-e337-47ac-b345-30sdfsalj",
1164
+ // "cliOrdId": null,
1165
+ // "type": "lmt",
1166
+ // "symbol": "pi_xrpusd",
1167
+ // "side": "buy",
1168
+ // "quantity": 1,
1169
+ // "filled": 0,
1170
+ // "limitPrice": 0.7,
1171
+ // "reduceOnly": false,
1172
+ // "timestamp": "2022-02-28T19:32:17.122Z",
1173
+ // "lastUpdateTimestamp": "2022-02-28T19:32:17.122Z"
1174
+ // },
1175
+ // "reducedQuantity": null,
1176
+ // "type": "PLACE"
1177
+ // }
1178
+ // ]
1179
+ // },
1180
+ // "serverTime": "2022-02-28T19:32:17.122Z"
1181
+ // }
1182
+ //
1183
+ const sendStatus = this.safeValue(response, 'sendStatus');
1184
+ const status = this.safeString(sendStatus, 'status');
1185
+ this.verifyOrderActionSuccess(status, 'createOrder', ['filled']);
1186
+ return this.parseOrder(sendStatus, market);
1187
+ }
1188
+ /**
1189
+ * @method
1190
+ * @name krakenfutures#createOrders
1191
+ * @description create a list of trade orders
1192
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/send-batch-order
1193
+ * @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
1194
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1195
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1196
+ */
1197
+ async createOrders(orders, params = {}) {
1198
+ await this.loadMarkets();
1199
+ const ordersRequests = [];
1200
+ for (let i = 0; i < orders.length; i++) {
1201
+ const rawOrder = orders[i];
1202
+ const marketId = this.safeString(rawOrder, 'symbol');
1203
+ const type = this.safeString(rawOrder, 'type');
1204
+ const side = this.safeString(rawOrder, 'side');
1205
+ const amount = this.safeValue(rawOrder, 'amount');
1206
+ const price = this.safeValue(rawOrder, 'price');
1207
+ const orderParams = this.safeValue(rawOrder, 'params', {});
1208
+ const extendedParams = this.extend(orderParams, params); // the request does not accept extra params since it's a list, so we're extending each order with the common params
1209
+ if (!('order_tag' in extendedParams)) {
1210
+ // order tag is mandatory so we will generate one if not provided
1211
+ extendedParams['order_tag'] = this.sum(i, 1).toString(); // sequential counter
1212
+ }
1213
+ extendedParams['order'] = 'send';
1214
+ const orderRequest = this.createOrderRequest(marketId, type, side, amount, price, extendedParams);
1215
+ ordersRequests.push(orderRequest);
1216
+ }
1217
+ const request = {
1218
+ 'batchOrder': ordersRequests,
1219
+ };
1220
+ const response = await this.privatePostBatchorder(this.extend(request, params));
1221
+ //
1222
+ // {
1223
+ // "result": "success",
1224
+ // "serverTime": "2023-10-24T08:40:57.339Z",
1225
+ // "batchStatus": [
1226
+ // {
1227
+ // "status": "requiredArgumentMissing",
1228
+ // "orderEvents": []
1229
+ // },
1230
+ // {
1231
+ // "status": "requiredArgumentMissing",
1232
+ // "orderEvents": []
1233
+ // }
1234
+ // ]
1235
+ // }
1236
+ //
1237
+ const data = this.safeList(response, 'batchStatus', []);
1238
+ return this.parseOrders(data);
1239
+ }
1240
+ /**
1241
+ * @method
1242
+ * @name krakenfutures#editOrder
1243
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/edit-order-spring
1244
+ * @description Edit an open order on the exchange
1245
+ * @param {string} id order id
1246
+ * @param {string} symbol Not used by Krakenfutures
1247
+ * @param {string} type Not used by Krakenfutures
1248
+ * @param {string} side Not used by Krakenfutures
1249
+ * @param {float} amount Order size
1250
+ * @param {float} [price] Price to fill order at
1251
+ * @param {object} [params] Exchange specific params
1252
+ * @returns An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1253
+ */
1254
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
1255
+ await this.loadMarkets();
1256
+ const request = {
1257
+ 'orderId': id,
1258
+ };
1259
+ if (amount !== undefined) {
1260
+ request['size'] = amount;
1261
+ }
1262
+ if (price !== undefined) {
1263
+ request['limitPrice'] = price;
1264
+ }
1265
+ const response = await this.privatePostEditorder(this.extend(request, params));
1266
+ const status = this.safeString(response['editStatus'], 'status');
1267
+ this.verifyOrderActionSuccess(status, 'editOrder', ['filled']);
1268
+ const order = this.parseOrder(response['editStatus']);
1269
+ order['info'] = response;
1270
+ return order;
1271
+ }
1272
+ /**
1273
+ * @method
1274
+ * @name krakenfutures#cancelOrder
1275
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/cancel-order
1276
+ * @description Cancel an open order on the exchange
1277
+ * @param {string} id Order id
1278
+ * @param {string} symbol Not used by Krakenfutures
1279
+ * @param {object} [params] Exchange specific params
1280
+ * @returns An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1281
+ */
1282
+ async cancelOrder(id, symbol = undefined, params = {}) {
1283
+ await this.loadMarkets();
1284
+ const response = await this.privatePostCancelorder(this.extend({ 'order_id': id }, params));
1285
+ const status = this.safeString(this.safeValue(response, 'cancelStatus', {}), 'status');
1286
+ this.verifyOrderActionSuccess(status, 'cancelOrder');
1287
+ let order = {};
1288
+ if ('cancelStatus' in response) {
1289
+ order = this.parseOrder(response['cancelStatus']);
1290
+ }
1291
+ return this.extend({ 'info': response }, order);
1292
+ }
1293
+ /**
1294
+ * @method
1295
+ * @name krakenfutures#cancelOrders
1296
+ * @description cancel multiple orders
1297
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/send-batch-order
1298
+ * @param {string[]} ids order ids
1299
+ * @param {string} [symbol] unified market symbol
1300
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1301
+ *
1302
+ * EXCHANGE SPECIFIC PARAMETERS
1303
+ * @param {string[]} [params.clientOrderIds] max length 10 e.g. ["my_id_1","my_id_2"]
1304
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1305
+ */
1306
+ async cancelOrders(ids, symbol = undefined, params = {}) {
1307
+ await this.loadMarkets();
1308
+ const orders = [];
1309
+ const clientOrderIds = this.safeValue(params, 'clientOrderIds', []);
1310
+ const clientOrderIdsLength = clientOrderIds.length;
1311
+ if (clientOrderIdsLength > 0) {
1312
+ for (let i = 0; i < clientOrderIds.length; i++) {
1313
+ orders.push({ 'order': 'cancel', 'cliOrdId': clientOrderIds[i] });
1314
+ }
1315
+ }
1316
+ else {
1317
+ for (let i = 0; i < ids.length; i++) {
1318
+ orders.push({ 'order': 'cancel', 'order_id': ids[i] });
1319
+ }
1320
+ }
1321
+ const request = {
1322
+ 'batchOrder': orders,
1323
+ };
1324
+ const response = await this.privatePostBatchorder(this.extend(request, params));
1325
+ // {
1326
+ // "result": "success",
1327
+ // "serverTime": "2023-10-23T16:36:51.327Z",
1328
+ // "batchStatus": [
1329
+ // {
1330
+ // "status": "cancelled",
1331
+ // "order_id": "101c2327-f12e-45f2-8445-7502b87afc0b",
1332
+ // "orderEvents": [
1333
+ // {
1334
+ // "uid": "101c2327-f12e-45f2-8445-7502b87afc0b",
1335
+ // "order": {
1336
+ // "orderId": "101c2327-f12e-45f2-8445-7502b87afc0b",
1337
+ // "cliOrdId": null,
1338
+ // "type": "lmt",
1339
+ // "symbol": "PF_LTCUSD",
1340
+ // "side": "buy",
1341
+ // "quantity": "0.10000000000",
1342
+ // "filled": "0E-11",
1343
+ // "limitPrice": "50.00000000000",
1344
+ // "reduceOnly": false,
1345
+ // "timestamp": "2023-10-20T10:29:13.005Z",
1346
+ // "lastUpdateTimestamp": "2023-10-20T10:29:13.005Z"
1347
+ // },
1348
+ // "type": "CANCEL"
1349
+ // }
1350
+ // ]
1351
+ // }
1352
+ // ]
1353
+ // }
1354
+ const batchStatus = this.safeList(response, 'batchStatus', []);
1355
+ return this.parseOrders(batchStatus);
1356
+ }
1357
+ /**
1358
+ * @method
1359
+ * @name krakenfutures#cancelAllOrders
1360
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/cancel-all-orders
1361
+ * @description Cancels all orders on the exchange, including trigger orders
1362
+ * @param {str} symbol Unified market symbol
1363
+ * @param {dict} [params] Exchange specific params
1364
+ * @returns Response from exchange api
1365
+ */
1366
+ async cancelAllOrders(symbol = undefined, params = {}) {
1367
+ const request = {};
1368
+ if (symbol !== undefined) {
1369
+ request['symbol'] = this.marketId(symbol);
1370
+ }
1371
+ const response = await this.privatePostCancelallorders(this.extend(request, params));
1372
+ //
1373
+ // {
1374
+ // result: 'success',
1375
+ // cancelStatus: {
1376
+ // receivedTime: '2024-06-06T01:12:44.814Z',
1377
+ // cancelOnly: 'PF_XRPUSD',
1378
+ // status: 'cancelled',
1379
+ // cancelledOrders: [ { order_id: '272fd0ac-45c0-4003-b84d-d39b9e86bd36' } ],
1380
+ // orderEvents: [
1381
+ // {
1382
+ // uid: '272fd0ac-45c0-4003-b84d-d39b9e86bd36',
1383
+ // order: {
1384
+ // orderId: '272fd0ac-45c0-4003-b84d-d39b9e86bd36',
1385
+ // cliOrdId: null,
1386
+ // type: 'lmt',
1387
+ // symbol: 'PF_XRPUSD',
1388
+ // side: 'buy',
1389
+ // quantity: '10',
1390
+ // filled: '0',
1391
+ // limitPrice: '0.4',
1392
+ // reduceOnly: false,
1393
+ // timestamp: '2024-06-06T01:11:16.045Z',
1394
+ // lastUpdateTimestamp: '2024-06-06T01:11:16.045Z'
1395
+ // },
1396
+ // type: 'CANCEL'
1397
+ // }
1398
+ // ]
1399
+ // },
1400
+ // serverTime: '2024-06-06T01:12:44.814Z'
1401
+ // }
1402
+ //
1403
+ const cancelStatus = this.safeDict(response, 'cancelStatus');
1404
+ const orderEvents = this.safeList(cancelStatus, 'orderEvents', []);
1405
+ const orders = [];
1406
+ for (let i = 0; i < orderEvents.length; i++) {
1407
+ const orderEvent = this.safeDict(orderEvents, 0);
1408
+ const order = this.safeDict(orderEvent, 'order', {});
1409
+ orders.push(order);
1410
+ }
1411
+ return this.parseOrders(orders);
1412
+ }
1413
+ /**
1414
+ * @method
1415
+ * @name krakenfutures#cancelAllOrdersAfter
1416
+ * @description dead man's switch, cancel all orders after the given timeout
1417
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/cancel-all-orders-after
1418
+ * @param {number} timeout time in milliseconds, 0 represents cancel the timer
1419
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1420
+ * @returns {object} the api result
1421
+ */
1422
+ async cancelAllOrdersAfter(timeout, params = {}) {
1423
+ await this.loadMarkets();
1424
+ const request = {
1425
+ 'timeout': (timeout > 0) ? (this.parseToInt(timeout / 1000)) : 0,
1426
+ };
1427
+ const response = await this.privatePostCancelallordersafter(this.extend(request, params));
1428
+ //
1429
+ // {
1430
+ // "result": "success",
1431
+ // "serverTime": "2018-06-19T16:51:23.839Z",
1432
+ // "status": {
1433
+ // "currentTime": "2018-06-19T16:51:23.839Z",
1434
+ // "triggerTime": "0"
1435
+ // }
1436
+ // }
1437
+ //
1438
+ return response;
1439
+ }
1440
+ /**
1441
+ * @method
1442
+ * @name krakenfutures#fetchOpenOrders
1443
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-open-orders
1444
+ * @description Gets all open orders, including trigger orders, for an account from the exchange api
1445
+ * @param {string} symbol Unified market symbol
1446
+ * @param {int} [since] Timestamp (ms) of earliest order. (Not used by kraken api but filtered internally by CCXT)
1447
+ * @param {int} [limit] How many orders to return. (Not used by kraken api but filtered internally by CCXT)
1448
+ * @param {object} [params] Exchange specific parameters
1449
+ * @returns An array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1450
+ */
1451
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1452
+ await this.loadMarkets();
1453
+ let market = undefined;
1454
+ if (symbol !== undefined) {
1455
+ market = this.market(symbol);
1456
+ }
1457
+ const response = await this.privateGetOpenorders(params);
1458
+ const orders = this.safeList(response, 'openOrders', []);
1459
+ return this.parseOrders(orders, market, since, limit);
1460
+ }
1461
+ /**
1462
+ * @method
1463
+ * @name krakenfutures#fetchClosedOrders
1464
+ * @see https://docs.futures.kraken.com/#http-api-history-account-history-get-order-events
1465
+ * @description Gets all closed orders, including trigger orders, for an account from the exchange api
1466
+ * @param {string} symbol Unified market symbol
1467
+ * @param {int} [since] Timestamp (ms) of earliest order.
1468
+ * @param {int} [limit] How many orders to return.
1469
+ * @param {object} [params] Exchange specific parameters
1470
+ * @returns An array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1471
+ */
1472
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1473
+ await this.loadMarkets();
1474
+ let market = undefined;
1475
+ if (symbol !== undefined) {
1476
+ market = this.market(symbol);
1477
+ }
1478
+ const request = {};
1479
+ if (limit !== undefined) {
1480
+ request['count'] = limit;
1481
+ }
1482
+ if (since !== undefined) {
1483
+ request['from'] = since;
1484
+ }
1485
+ const response = await this.historyGetOrders(this.extend(request, params));
1486
+ const allOrders = this.safeList(response, 'elements', []);
1487
+ const closedOrders = [];
1488
+ for (let i = 0; i < allOrders.length; i++) {
1489
+ const order = allOrders[i];
1490
+ const event = this.safeDict(order, 'event', {});
1491
+ const orderPlaced = this.safeDict(event, 'OrderPlaced');
1492
+ if (orderPlaced !== undefined) {
1493
+ const innerOrder = this.safeDict(orderPlaced, 'order', {});
1494
+ const filled = this.safeString(innerOrder, 'filled');
1495
+ if (filled !== '0') {
1496
+ innerOrder['status'] = 'closed'; // status not available in the response
1497
+ closedOrders.push(innerOrder);
1498
+ }
1499
+ }
1500
+ }
1501
+ return this.parseOrders(closedOrders, market, since, limit);
1502
+ }
1503
+ /**
1504
+ * @method
1505
+ * @name krakenfutures#fetchCanceledOrders
1506
+ * @see https://docs.kraken.com/api/docs/futures-api/history/get-order-events
1507
+ * @description Gets all canceled orders, including trigger orders, for an account from the exchange api
1508
+ * @param {string} symbol Unified market symbol
1509
+ * @param {int} [since] Timestamp (ms) of earliest order.
1510
+ * @param {int} [limit] How many orders to return.
1511
+ * @param {object} [params] Exchange specific parameters
1512
+ * @returns An array of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1513
+ */
1514
+ async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1515
+ await this.loadMarkets();
1516
+ let market = undefined;
1517
+ if (symbol !== undefined) {
1518
+ market = this.market(symbol);
1519
+ }
1520
+ const request = {};
1521
+ if (limit !== undefined) {
1522
+ request['count'] = limit;
1523
+ }
1524
+ if (since !== undefined) {
1525
+ request['from'] = since;
1526
+ }
1527
+ const response = await this.historyGetOrders(this.extend(request, params));
1528
+ const allOrders = this.safeList(response, 'elements', []);
1529
+ const canceledAndRejected = [];
1530
+ for (let i = 0; i < allOrders.length; i++) {
1531
+ const order = allOrders[i];
1532
+ const event = this.safeDict(order, 'event', {});
1533
+ const orderPlaced = this.safeDict(event, 'OrderPlaced');
1534
+ if (orderPlaced !== undefined) {
1535
+ const innerOrder = this.safeDict(orderPlaced, 'order', {});
1536
+ const filled = this.safeString(innerOrder, 'filled');
1537
+ if (filled === '0') {
1538
+ innerOrder['status'] = 'canceled'; // status not available in the response
1539
+ canceledAndRejected.push(innerOrder);
1540
+ }
1541
+ }
1542
+ const orderCanceled = this.safeDict(event, 'OrderCancelled');
1543
+ if (orderCanceled !== undefined) {
1544
+ const innerOrder = this.safeDict(orderCanceled, 'order', {});
1545
+ innerOrder['status'] = 'canceled'; // status not available in the response
1546
+ canceledAndRejected.push(innerOrder);
1547
+ }
1548
+ const orderRejected = this.safeDict(event, 'OrderRejected');
1549
+ if (orderRejected !== undefined) {
1550
+ const innerOrder = this.safeDict(orderRejected, 'order', {});
1551
+ innerOrder['status'] = 'rejected'; // status not available in the response
1552
+ canceledAndRejected.push(innerOrder);
1553
+ }
1554
+ }
1555
+ return this.parseOrders(canceledAndRejected, market, since, limit);
1556
+ }
1557
+ parseOrderType(orderType) {
1558
+ const typesMap = {
1559
+ 'lmt': 'limit',
1560
+ 'mkt': 'market',
1561
+ 'post': 'limit',
1562
+ 'ioc': 'market',
1563
+ };
1564
+ return this.safeString(typesMap, orderType, orderType);
1565
+ }
1566
+ verifyOrderActionSuccess(status, method, omit = []) {
1567
+ const errors = {
1568
+ 'invalidOrderType': InvalidOrder,
1569
+ 'invalidSide': InvalidOrder,
1570
+ 'invalidSize': InvalidOrder,
1571
+ 'invalidPrice': InvalidOrder,
1572
+ 'insufficientAvailableFunds': InsufficientFunds,
1573
+ 'selfFill': ExchangeError,
1574
+ 'tooManySmallOrders': ExchangeError,
1575
+ 'maxPositionViolation': BadRequest,
1576
+ 'marketSuspended': ExchangeNotAvailable,
1577
+ 'marketInactive': ExchangeNotAvailable,
1578
+ 'clientOrderIdAlreadyExist': DuplicateOrderId,
1579
+ 'clientOrderIdTooLong': BadRequest,
1580
+ 'outsidePriceCollar': InvalidOrder,
1581
+ 'postWouldExecute': OrderImmediatelyFillable,
1582
+ 'iocWouldNotExecute': OrderNotFillable,
1583
+ 'wouldNotReducePosition': ExchangeError,
1584
+ 'orderForEditNotFound': OrderNotFound,
1585
+ 'orderForEditNotAStop': InvalidOrder,
1586
+ 'filled': OrderNotFound,
1587
+ 'notFound': OrderNotFound,
1588
+ };
1589
+ if ((status in errors) && !this.inArray(status, omit)) {
1590
+ throw new errors[status](this.id + ': ' + method + ' failed due to ' + status);
1591
+ }
1592
+ }
1593
+ parseOrderStatus(status) {
1594
+ const statuses = {
1595
+ 'placed': 'open',
1596
+ 'cancelled': 'canceled',
1597
+ 'invalidOrderType': 'rejected',
1598
+ 'invalidSide': 'rejected',
1599
+ 'invalidSize': 'rejected',
1600
+ 'invalidPrice': 'rejected',
1601
+ 'insufficientAvailableFunds': 'rejected',
1602
+ 'selfFill': 'rejected',
1603
+ 'tooManySmallOrders': 'rejected',
1604
+ 'maxPositionViolation': 'rejected',
1605
+ 'marketSuspended': 'rejected',
1606
+ 'marketInactive': 'rejected',
1607
+ 'clientOrderIdAlreadyExist': 'rejected',
1608
+ 'clientOrderIdTooLong': 'rejected',
1609
+ 'outsidePriceCollar': 'rejected',
1610
+ // Should the next two be 'expired' ?
1611
+ 'postWouldExecute': 'rejected',
1612
+ 'iocWouldNotExecute': 'rejected',
1613
+ 'wouldNotReducePosition': 'rejected',
1614
+ 'edited': 'open',
1615
+ 'orderForEditNotFound': 'rejected',
1616
+ 'orderForEditNotAStop': 'rejected',
1617
+ 'filled': 'closed',
1618
+ 'notFound': 'rejected',
1619
+ 'untouched': 'open',
1620
+ 'partiallyFilled': 'open', // the size of the order is partially but not entirely filled
1621
+ };
1622
+ return this.safeString(statuses, status, status);
1623
+ }
1624
+ parseOrder(order, market = undefined) {
1625
+ //
1626
+ // LIMIT
1627
+ //
1628
+ // {
1629
+ // "order_id": "179f9af8-e45e-469d-b3e9-2fd4675cb7d0",
1630
+ // "status": "placed",
1631
+ // "receivedTime": "2019-09-05T16:33:50.734Z",
1632
+ // "orderEvents": [
1633
+ // {
1634
+ // "uid": "614a5298-0071-450f-83c6-0617ce8c6bc4",
1635
+ // "order": {
1636
+ // "orderId": "179f9af8-e45e-469d-b3e9-2fd4675cb7d0",
1637
+ // "cliOrdId": null,
1638
+ // "type": "lmt",
1639
+ // "symbol": "pi_xbtusd",
1640
+ // "side": "buy",
1641
+ // "quantity": 10000,
1642
+ // "filled": 0,
1643
+ // "limitPrice": 9400,
1644
+ // "reduceOnly": false,
1645
+ // "timestamp": "2019-09-05T16:33:50.734Z",
1646
+ // "lastUpdateTimestamp": "2019-09-05T16:33:50.734Z"
1647
+ // },
1648
+ // "reducedQuantity": null,
1649
+ // "reason": "WOULD_NOT_REDUCE_POSITION", // REJECTED
1650
+ // "type": "PLACE"
1651
+ // }
1652
+ // ]
1653
+ // }
1654
+ //
1655
+ // CONDITIONAL
1656
+ //
1657
+ // {
1658
+ // "order_id": "1abfd3c6-af93-4b30-91cc-e4a93797f3f5",
1659
+ // "status": "placed",
1660
+ // "receivedTime": "2019-12-05T10:20:50.701Z",
1661
+ // "orderEvents": [
1662
+ // {
1663
+ // "orderTrigger": {
1664
+ // "uid": "1abfd3c6-af93-4b30-91cc-e4a93797f3f5",
1665
+ // "clientId":null,
1666
+ // "type": "lmt", // "ioc" if stop market
1667
+ // "symbol": "pi_xbtusd",
1668
+ // "side": "buy",
1669
+ // "quantity":10,
1670
+ // "limitPrice":15000,
1671
+ // "triggerPrice":9500,
1672
+ // "triggerSide": "trigger_below",
1673
+ // "triggerSignal": "mark_price",
1674
+ // "reduceOnly":false,
1675
+ // "timestamp": "2019-12-05T10:20:50.701Z",
1676
+ // "lastUpdateTimestamp": "2019-12-05T10:20:50.701Z"
1677
+ // },
1678
+ // "type": "PLACE"
1679
+ // }
1680
+ // ]
1681
+ // }
1682
+ //
1683
+ // EXECUTION
1684
+ //
1685
+ // {
1686
+ // "order_id": "61ca5732-3478-42fe-8362-abbfd9465294",
1687
+ // "status": "placed",
1688
+ // "receivedTime": "2019-12-11T17:17:33.888Z",
1689
+ // "orderEvents": [
1690
+ // {
1691
+ // "executionId": "e1ec9f63-2338-4c44-b40a-43486c6732d7",
1692
+ // "price": 7244.5,
1693
+ // "amount": 10,
1694
+ // "orderPriorEdit": null,
1695
+ // "orderPriorExecution": {
1696
+ // "orderId": "61ca5732-3478-42fe-8362-abbfd9465294",
1697
+ // "cliOrdId": null,
1698
+ // "type": "lmt",
1699
+ // "symbol": "pi_xbtusd",
1700
+ // "side": "buy",
1701
+ // "quantity": 10,
1702
+ // "filled": 0,
1703
+ // "limitPrice": 7500,
1704
+ // "reduceOnly": false,
1705
+ // "timestamp": "2019-12-11T17:17:33.888Z",
1706
+ // "lastUpdateTimestamp": "2019-12-11T17:17:33.888Z"
1707
+ // },
1708
+ // "takerReducedQuantity": null,
1709
+ // "type": "EXECUTION"
1710
+ // }
1711
+ // ]
1712
+ // }
1713
+ //
1714
+ // EDIT ORDER
1715
+ //
1716
+ // {
1717
+ // "status": "edited",
1718
+ // "orderId": "022774bc-2c4a-4f26-9317-436c8d85746d",
1719
+ // "receivedTime": "2019-09-05T16:47:47.521Z",
1720
+ // "orderEvents": [
1721
+ // {
1722
+ // "old": {
1723
+ // "orderId": "022774bc-2c4a-4f26-9317-436c8d85746d",
1724
+ // "cliOrdId":null,
1725
+ // "type": "lmt",
1726
+ // "symbol": "pi_xbtusd",
1727
+ // "side": "buy",
1728
+ // "quantity":1000,
1729
+ // "filled":0,
1730
+ // "limitPrice":9400.0,
1731
+ // "reduceOnly":false,
1732
+ // "timestamp": "2019-09-05T16:41:35.173Z",
1733
+ // "lastUpdateTimestamp": "2019-09-05T16:41:35.173Z"
1734
+ // },
1735
+ // "new": {
1736
+ // "orderId": "022774bc-2c4a-4f26-9317-436c8d85746d",
1737
+ // "cliOrdId": null,
1738
+ // "type": "lmt",
1739
+ // "symbol": "pi_xbtusd",
1740
+ // "side": "buy",
1741
+ // "quantity": 1501,
1742
+ // "filled": 0,
1743
+ // "limitPrice": 7200,
1744
+ // "reduceOnly": false,
1745
+ // "timestamp": "2019-09-05T16:41:35.173Z",
1746
+ // "lastUpdateTimestamp": "2019-09-05T16:47:47.519Z"
1747
+ // },
1748
+ // "reducedQuantity": null,
1749
+ // "type": "EDIT"
1750
+ // }
1751
+ // ]
1752
+ // }
1753
+ //
1754
+ // CANCEL ORDER
1755
+ //
1756
+ // {
1757
+ // "status": "cancelled",
1758
+ // "orderEvents": [
1759
+ // {
1760
+ // "uid": "85c40002-3f20-4e87-9302-262626c3531b",
1761
+ // "order": {
1762
+ // "orderId": "85c40002-3f20-4e87-9302-262626c3531b",
1763
+ // "cliOrdId": null,
1764
+ // "type": "lmt",
1765
+ // "symbol": "pi_xbtusd",
1766
+ // "side": "buy",
1767
+ // "quantity": 1000,
1768
+ // "filled": 0,
1769
+ // "limitPrice": 10144,
1770
+ // "stopPrice": null,
1771
+ // "reduceOnly": false,
1772
+ // "timestamp": "2019-08-01T15:26:27.790Z"
1773
+ // },
1774
+ // "type": "CANCEL"
1775
+ // }
1776
+ // ]
1777
+ // }
1778
+ //
1779
+ // cancelAllOrders
1780
+ //
1781
+ // {
1782
+ // "orderId": "85c40002-3f20-4e87-9302-262626c3531b",
1783
+ // "cliOrdId": null,
1784
+ // "type": "lmt",
1785
+ // "symbol": "pi_xbtusd",
1786
+ // "side": "buy",
1787
+ // "quantity": 1000,
1788
+ // "filled": 0,
1789
+ // "limitPrice": 10144,
1790
+ // "stopPrice": null,
1791
+ // "reduceOnly": false,
1792
+ // "timestamp": "2019-08-01T15:26:27.790Z"
1793
+ // }
1794
+ //
1795
+ // FETCH OPEN ORDERS
1796
+ //
1797
+ // {
1798
+ // "order_id": "59302619-41d2-4f0b-941f-7e7914760ad3",
1799
+ // "symbol": "pi_xbtusd",
1800
+ // "side": "sell",
1801
+ // "orderType": "lmt",
1802
+ // "limitPrice": 10640,
1803
+ // "unfilledSize": 304,
1804
+ // "receivedTime": "2019-09-05T17:01:17.410Z",
1805
+ // "status": "untouched",
1806
+ // "filledSize": 0,
1807
+ // "reduceOnly": true,
1808
+ // "lastUpdateTime": "2019-09-05T17:01:17.410Z"
1809
+ // }
1810
+ //
1811
+ // createOrders error
1812
+ // {
1813
+ // "status": "requiredArgumentMissing",
1814
+ // "orderEvents": []
1815
+ // }
1816
+ // closed orders
1817
+ // {
1818
+ // uid: '2f00cd63-e61d-44f8-8569-adabde885941',
1819
+ // timestamp: '1707258274849',
1820
+ // event: {
1821
+ // OrderPlaced: {
1822
+ // order: {
1823
+ // uid: '85805e01-9eed-4395-8360-ed1a228237c9',
1824
+ // accountUid: '406142dd-7c5c-4a8b-acbc-5f16eca30009',
1825
+ // tradeable: 'PF_LTCUSD',
1826
+ // direction: 'Buy',
1827
+ // quantity: '0',
1828
+ // filled: '0.1',
1829
+ // timestamp: '1707258274849',
1830
+ // limitPrice: '69.2200000000',
1831
+ // orderType: 'IoC',
1832
+ // clientId: '',
1833
+ // reduceOnly: false,
1834
+ // lastUpdateTimestamp: '1707258274849'
1835
+ // },
1836
+ // reason: 'new_user_order',
1837
+ // reducedQuantity: '',
1838
+ // algoId: ''
1839
+ // }
1840
+ // }
1841
+ // }
1842
+ //
1843
+ const orderEvents = this.safeValue(order, 'orderEvents', []);
1844
+ const errorStatus = this.safeString(order, 'status');
1845
+ const orderEventsLength = orderEvents.length;
1846
+ if (('orderEvents' in order) && (errorStatus !== undefined) && (orderEventsLength === 0)) {
1847
+ // creteOrders error response
1848
+ return this.safeOrder({ 'info': order, 'status': 'rejected' });
1849
+ }
1850
+ let details = undefined;
1851
+ let isPrior = false;
1852
+ let fixed = false;
1853
+ let statusId = undefined;
1854
+ let price = undefined;
1855
+ let trades = [];
1856
+ if (orderEventsLength) {
1857
+ const executions = [];
1858
+ for (let i = 0; i < orderEvents.length; i++) {
1859
+ const item = orderEvents[i];
1860
+ if (this.safeString(item, 'type') === 'EXECUTION') {
1861
+ executions.push(item);
1862
+ }
1863
+ // Final order (after placement / editing / execution / canceling)
1864
+ const orderTrigger = this.safeValue(item, 'orderTrigger');
1865
+ if (details === undefined) {
1866
+ details = this.safeValue2(item, 'new', 'order', orderTrigger);
1867
+ if (details !== undefined) {
1868
+ isPrior = false;
1869
+ fixed = true;
1870
+ }
1871
+ else if (!fixed) {
1872
+ const orderPriorExecution = this.safeValue(item, 'orderPriorExecution');
1873
+ details = this.safeValue2(item, 'orderPriorExecution', 'orderPriorEdit');
1874
+ price = this.safeString(orderPriorExecution, 'limitPrice');
1875
+ if (details !== undefined) {
1876
+ isPrior = true;
1877
+ }
1878
+ }
1879
+ }
1880
+ }
1881
+ trades = this.parseTrades(executions);
1882
+ statusId = this.safeString(order, 'status');
1883
+ }
1884
+ if (details === undefined) {
1885
+ details = order;
1886
+ }
1887
+ if (statusId === undefined) {
1888
+ statusId = this.safeString(details, 'status');
1889
+ }
1890
+ // This may be incorrectly marked as "open" if only execution report is given,
1891
+ // but will be fixed below
1892
+ let status = this.parseOrderStatus(statusId);
1893
+ let isClosed = this.inArray(status, ['canceled', 'rejected', 'closed']);
1894
+ const marketId = this.safeString(details, 'symbol');
1895
+ market = this.safeMarket(marketId, market);
1896
+ const timestamp = this.parse8601(this.safeString2(details, 'timestamp', 'receivedTime'));
1897
+ const lastUpdateTimestamp = this.parse8601(this.safeString(details, 'lastUpdateTime'));
1898
+ if (price === undefined) {
1899
+ price = this.safeString(details, 'limitPrice');
1900
+ }
1901
+ let amount = this.safeString(details, 'quantity');
1902
+ let filled = this.safeString2(details, 'filledSize', 'filled', '0.0');
1903
+ let remaining = this.safeString(details, 'unfilledSize');
1904
+ let average = undefined;
1905
+ let filled2 = '0.0';
1906
+ const tradesLength = trades.length;
1907
+ if (tradesLength > 0) {
1908
+ let vwapSum = '0.0';
1909
+ for (let i = 0; i < trades.length; i++) {
1910
+ const trade = trades[i];
1911
+ const tradeAmount = this.safeString(trade, 'amount');
1912
+ const tradePrice = this.safeString(trade, 'price');
1913
+ filled2 = Precise.stringAdd(filled2, tradeAmount);
1914
+ vwapSum = Precise.stringAdd(vwapSum, Precise.stringMul(tradeAmount, tradePrice));
1915
+ }
1916
+ average = Precise.stringDiv(vwapSum, filled2);
1917
+ if ((amount !== undefined) && (!isClosed) && isPrior && Precise.stringGe(filled2, amount)) {
1918
+ status = 'closed';
1919
+ isClosed = true;
1920
+ }
1921
+ if (isPrior) {
1922
+ filled = Precise.stringAdd(filled, filled2);
1923
+ }
1924
+ else {
1925
+ filled = Precise.stringMax(filled, filled2);
1926
+ }
1927
+ }
1928
+ if (remaining === undefined) {
1929
+ if (isPrior) {
1930
+ if (amount !== undefined) {
1931
+ // remaining amount before execution minus executed amount
1932
+ remaining = Precise.stringSub(amount, filled2);
1933
+ }
1934
+ }
1935
+ else {
1936
+ remaining = amount;
1937
+ }
1938
+ }
1939
+ // if fetchOpenOrders are parsed
1940
+ if ((amount === undefined) && (!isPrior) && (remaining !== undefined)) {
1941
+ amount = Precise.stringAdd(filled, remaining);
1942
+ }
1943
+ let cost = undefined;
1944
+ if ((filled !== undefined) && (market !== undefined)) {
1945
+ const whichPrice = (average !== undefined) ? average : price;
1946
+ if (whichPrice !== undefined) {
1947
+ if (market['linear']) {
1948
+ cost = Precise.stringMul(filled, whichPrice); // in quote
1949
+ }
1950
+ else {
1951
+ cost = Precise.stringDiv(filled, whichPrice); // in base
1952
+ }
1953
+ }
1954
+ }
1955
+ let id = this.safeString2(order, 'order_id', 'orderId');
1956
+ if (id === undefined) {
1957
+ id = this.safeString2(details, 'orderId', 'uid');
1958
+ }
1959
+ const type = this.safeStringLower2(details, 'type', 'orderType');
1960
+ let timeInForce = 'gtc';
1961
+ if (type === 'ioc' || this.parseOrderType(type) === 'market') {
1962
+ timeInForce = 'ioc';
1963
+ }
1964
+ return this.safeOrder({
1965
+ 'info': order,
1966
+ 'id': id,
1967
+ 'clientOrderId': this.safeStringN(details, ['clientOrderId', 'clientId', 'cliOrdId']),
1968
+ 'timestamp': timestamp,
1969
+ 'datetime': this.iso8601(timestamp),
1970
+ 'lastTradeTimestamp': undefined,
1971
+ 'lastUpdateTimestamp': lastUpdateTimestamp,
1972
+ 'symbol': this.safeString(market, 'symbol'),
1973
+ 'type': this.parseOrderType(type),
1974
+ 'timeInForce': timeInForce,
1975
+ 'postOnly': type === 'post',
1976
+ 'reduceOnly': this.safeBool2(details, 'reduceOnly', 'reduce_only'),
1977
+ 'side': this.safeString(details, 'side'),
1978
+ 'price': price,
1979
+ 'triggerPrice': this.safeString(details, 'triggerPrice'),
1980
+ 'amount': amount,
1981
+ 'cost': cost,
1982
+ 'average': average,
1983
+ 'filled': filled,
1984
+ 'remaining': remaining,
1985
+ 'status': status,
1986
+ 'fee': undefined,
1987
+ 'fees': undefined,
1988
+ 'trades': trades,
1989
+ });
1990
+ }
1991
+ /**
1992
+ * @method
1993
+ * @name krakenfutures#fetchMyTrades
1994
+ * @description fetch all trades made by the user
1995
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-fills
1996
+ * @param {string} symbol unified market symbol
1997
+ * @param {int} [since] *not used by the api* the earliest time in ms to fetch trades for
1998
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1999
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2000
+ * @param {int} [params.until] the latest time in ms to fetch entries for
2001
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2002
+ */
2003
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2004
+ await this.loadMarkets();
2005
+ let market = undefined;
2006
+ if (symbol !== undefined) {
2007
+ market = this.market(symbol);
2008
+ }
2009
+ // todo: lastFillTime: this.iso8601(end)
2010
+ const response = await this.privateGetFills(params);
2011
+ //
2012
+ // {
2013
+ // "result": "success",
2014
+ // "serverTime": "2016-02-25T09:45:53.818Z",
2015
+ // "fills": [
2016
+ // {
2017
+ // "fillTime": "2016-02-25T09:47:01.000Z",
2018
+ // "order_id": "c18f0c17-9971-40e6-8e5b-10df05d422f0",
2019
+ // "fill_id": "522d4e08-96e7-4b44-9694-bfaea8fe215e",
2020
+ // "cliOrdId": "d427f920-ec55-4c18-ba95-5fe241513b30", // EXTRA
2021
+ // "symbol": "fi_xbtusd_180615",
2022
+ // "side": "buy",
2023
+ // "size": 2000,
2024
+ // "price": 4255,
2025
+ // "fillType": "maker"
2026
+ // },
2027
+ // ...
2028
+ // ]
2029
+ // }
2030
+ //
2031
+ return this.parseTrades(response['fills'], market, since, limit);
2032
+ }
2033
+ /**
2034
+ * @method
2035
+ * @name krakenfutures#fetchBalance
2036
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-accounts
2037
+ * @description Fetch the balance for a sub-account, all sub-account balances are inside 'info' in the response
2038
+ * @param {object} [params] Exchange specific parameters
2039
+ * @param {string} [params.type] The sub-account type to query the balance of, possible values include 'flex', 'cash'/'main'/'funding', or a market symbol * defaults to 'flex' *
2040
+ * @param {string} [params.symbol] A unified market symbol, when assigned the balance for a trading market that matches the symbol is returned
2041
+ * @returns A [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
2042
+ */
2043
+ async fetchBalance(params = {}) {
2044
+ await this.loadMarkets();
2045
+ let type = this.safeString2(params, 'type', 'account');
2046
+ let symbol = this.safeString(params, 'symbol');
2047
+ params = this.omit(params, ['type', 'account', 'symbol']);
2048
+ const response = await this.privateGetAccounts(params);
2049
+ //
2050
+ // {
2051
+ // "result": "success",
2052
+ // "accounts": {
2053
+ // "fi_xbtusd": {
2054
+ // "auxiliary": { usd: "0", pv: '0.0', pnl: '0.0', af: '0.0', funding: "0.0" },
2055
+ // "marginRequirements": { im: '0.0', mm: '0.0', lt: '0.0', tt: "0.0" },
2056
+ // "triggerEstimates": { im: '0', mm: '0', lt: "0", tt: "0" },
2057
+ // "balances": { xbt: "0.0" },
2058
+ // "currency": "xbt",
2059
+ // "type": "marginAccount"
2060
+ // },
2061
+ // "cash": {
2062
+ // "balances": {
2063
+ // "eur": "0.0",
2064
+ // "gbp": "0.0",
2065
+ // "bch": "0.0",
2066
+ // "xrp": "2.20188538338",
2067
+ // "usd": "0.0",
2068
+ // "eth": "0.0",
2069
+ // "usdt": "0.0",
2070
+ // "ltc": "0.0",
2071
+ // "usdc": "0.0",
2072
+ // "xbt": "0.0"
2073
+ // },
2074
+ // "type": "cashAccount"
2075
+ // },
2076
+ // "fv_xrpxbt": {
2077
+ // "auxiliary": { usd: "0", pv: '0.0', pnl: '0.0', af: '0.0', funding: "0.0" },
2078
+ // "marginRequirements": { im: '0.0', mm: '0.0', lt: '0.0', tt: "0.0" },
2079
+ // "triggerEstimates": { im: '0', mm: '0', lt: "0", tt: "0" },
2080
+ // "balances": { xbt: "0.0" },
2081
+ // "currency": "xbt",
2082
+ // "type": "marginAccount"
2083
+ // },
2084
+ // "fi_xrpusd": {
2085
+ // "auxiliary": { usd: "0", pv: '11.0', pnl: '0.0', af: '11.0', funding: "0.0" },
2086
+ // "marginRequirements": { im: '0.0', mm: '0.0', lt: '0.0', tt: "0.0" },
2087
+ // "triggerEstimates": { im: '0', mm: '0', lt: "0", tt: "0" },
2088
+ // "balances": { xrp: "11.0" },
2089
+ // "currency": "xrp",
2090
+ // "type": "marginAccount"
2091
+ // },
2092
+ // "fi_ethusd": {
2093
+ // "auxiliary": { usd: "0", pv: '0.0', pnl: '0.0', af: '0.0', funding: "0.0" },
2094
+ // "marginRequirements": { im: '0.0', mm: '0.0', lt: '0.0', tt: "0.0" },
2095
+ // "triggerEstimates": { im: '0', mm: '0', lt: "0", tt: "0" },
2096
+ // "balances": { eth: "0.0" },
2097
+ // "currency": "eth",
2098
+ // "type": "marginAccount"
2099
+ // },
2100
+ // "fi_ltcusd": {
2101
+ // "auxiliary": { usd: "0", pv: '0.0', pnl: '0.0', af: '0.0', funding: "0.0" },
2102
+ // "marginRequirements": { im: '0.0', mm: '0.0', lt: '0.0', tt: "0.0" },
2103
+ // "triggerEstimates": { im: '0', mm: '0', lt: "0", tt: "0" },
2104
+ // "balances": { ltc: "0.0" },
2105
+ // "currency": "ltc",
2106
+ // "type": "marginAccount"
2107
+ // },
2108
+ // "fi_bchusd": {
2109
+ // "auxiliary": { usd: "0", pv: '0.0', pnl: '0.0', af: '0.0', funding: "0.0" },
2110
+ // "marginRequirements": { im: '0.0', mm: '0.0', lt: '0.0', tt: "0.0" },
2111
+ // "triggerEstimates": { im: '0', mm: '0', lt: "0", tt: "0" },
2112
+ // "balances": { bch: "0.0" },
2113
+ // "currency": "bch",
2114
+ // "type": "marginAccount"
2115
+ // },
2116
+ // "flex": {
2117
+ // "currencies": {},
2118
+ // "initialMargin": "0.0",
2119
+ // "initialMarginWithOrders": "0.0",
2120
+ // "maintenanceMargin": "0.0",
2121
+ // "balanceValue": "0.0",
2122
+ // "portfolioValue": "0.0",
2123
+ // "collateralValue": "0.0",
2124
+ // "pnl": "0.0",
2125
+ // "unrealizedFunding": "0.0",
2126
+ // "totalUnrealized": "0.0",
2127
+ // "totalUnrealizedAsMargin": "0.0",
2128
+ // "availableMargin": "0.0",
2129
+ // "marginEquity": "0.0",
2130
+ // "type": "multiCollateralMarginAccount"
2131
+ // }
2132
+ // },
2133
+ // "serverTime": "2022-04-12T07:48:07.475Z"
2134
+ // }
2135
+ //
2136
+ const datetime = this.safeString(response, 'serverTime');
2137
+ if (type === 'marginAccount' || type === 'margin') {
2138
+ if (symbol === undefined) {
2139
+ throw new ArgumentsRequired(this.id + ' fetchBalance requires symbol argument for margin accounts');
2140
+ }
2141
+ type = symbol;
2142
+ }
2143
+ if (type === undefined) {
2144
+ type = (symbol === undefined) ? 'flex' : symbol;
2145
+ }
2146
+ const accountName = this.parseAccount(type);
2147
+ const accounts = this.safeValue(response, 'accounts');
2148
+ const account = this.safeValue(accounts, accountName);
2149
+ if (account === undefined) {
2150
+ type = (type === undefined) ? '' : type;
2151
+ symbol = (symbol === undefined) ? '' : symbol;
2152
+ throw new BadRequest(this.id + ' fetchBalance has no account for ' + type);
2153
+ }
2154
+ const balance = this.parseBalance(account);
2155
+ balance['info'] = response;
2156
+ balance['timestamp'] = this.parse8601(datetime);
2157
+ balance['datetime'] = datetime;
2158
+ return balance;
2159
+ }
2160
+ parseBalance(response) {
2161
+ //
2162
+ // cashAccount
2163
+ //
2164
+ // {
2165
+ // "balances": {
2166
+ // "eur": "0.0",
2167
+ // "gbp": "0.0",
2168
+ // "bch": "0.0",
2169
+ // "xrp": "2.20188538338",
2170
+ // "usd": "0.0",
2171
+ // "eth": "0.0",
2172
+ // "usdt": "0.0",
2173
+ // "ltc": "0.0",
2174
+ // "usdc": "0.0",
2175
+ // "xbt": "0.0"
2176
+ // },
2177
+ // "type": "cashAccount"
2178
+ // }
2179
+ //
2180
+ // marginAccount e,g, fi_xrpusd
2181
+ //
2182
+ // {
2183
+ // "auxiliary": {
2184
+ // "usd": "0",
2185
+ // "pv": "11.0",
2186
+ // "pnl": "0.0",
2187
+ // "af": "11.0",
2188
+ // "funding": "0.0"
2189
+ // },
2190
+ // "marginRequirements": { im: '0.0', mm: '0.0', lt: '0.0', tt: "0.0" },
2191
+ // "triggerEstimates": { im: '0', mm: '0', lt: "0", tt: "0" },
2192
+ // "balances": { xrp: "11.0" },
2193
+ // "currency": "xrp",
2194
+ // "type": "marginAccount"
2195
+ // }
2196
+ //
2197
+ // flex/multiCollateralMarginAccount
2198
+ //
2199
+ // {
2200
+ // "currencies": {
2201
+ // "USDT": {
2202
+ // "quantity": "1",
2203
+ // "value": "1.0001",
2204
+ // "collateral": "0.9477197625",
2205
+ // "available": "1.0"
2206
+ // }
2207
+ // },
2208
+ // "initialMargin": "0.0",
2209
+ // "initialMarginWithOrders": "0.0",
2210
+ // "maintenanceMargin": "0.0",
2211
+ // "balanceValue": "1.0",
2212
+ // "portfolioValue": "1.0",
2213
+ // "collateralValue": "0.95",
2214
+ // "pnl": "0.0",
2215
+ // "unrealizedFunding": "0.0",
2216
+ // "totalUnrealized": "0.0",
2217
+ // "totalUnrealizedAsMargin": "0.0",
2218
+ // "availableMargin": "0.95",
2219
+ // "marginEquity": "0.95",
2220
+ // "type": "multiCollateralMarginAccount"
2221
+ // }
2222
+ //
2223
+ const accountType = this.safeString2(response, 'accountType', 'type');
2224
+ const isFlex = (accountType === 'multiCollateralMarginAccount');
2225
+ const isCash = (accountType === 'cashAccount');
2226
+ const balances = this.safeValue2(response, 'balances', 'currencies', {});
2227
+ const result = {};
2228
+ const currencyIds = Object.keys(balances);
2229
+ for (let i = 0; i < currencyIds.length; i++) {
2230
+ const currencyId = currencyIds[i];
2231
+ const balance = balances[currencyId];
2232
+ const code = this.safeCurrencyCode(currencyId);
2233
+ const splitCode = code.split('_');
2234
+ const codeLength = splitCode.length;
2235
+ if (codeLength > 1) {
2236
+ continue; // Removes contract codes like PI_XRPUSD
2237
+ }
2238
+ const account = this.account();
2239
+ if (isFlex) {
2240
+ account['total'] = this.safeString(balance, 'quantity');
2241
+ account['free'] = this.safeString(balance, 'available');
2242
+ }
2243
+ else if (isCash) {
2244
+ account['used'] = '0.0';
2245
+ account['total'] = balance;
2246
+ }
2247
+ else {
2248
+ const auxiliary = this.safeValue(response, 'auxiliary');
2249
+ account['free'] = this.safeString(auxiliary, 'af');
2250
+ account['total'] = this.safeString(auxiliary, 'pv');
2251
+ }
2252
+ result[code] = account;
2253
+ }
2254
+ return this.safeBalance(result);
2255
+ }
2256
+ /**
2257
+ * @method
2258
+ * @name krakenfutures#fetchFundingRates
2259
+ * @description fetch the current funding rates for multiple markets
2260
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-tickers
2261
+ * @param {string[]} symbols unified market symbols
2262
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2263
+ * @returns {Order[]} an array of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
2264
+ */
2265
+ async fetchFundingRates(symbols = undefined, params = {}) {
2266
+ await this.loadMarkets();
2267
+ const marketIds = this.marketIds(symbols);
2268
+ const response = await this.publicGetTickers(params);
2269
+ const tickers = this.safeList(response, 'tickers', []);
2270
+ const fundingRates = [];
2271
+ for (let i = 0; i < tickers.length; i++) {
2272
+ const entry = tickers[i];
2273
+ const entry_symbol = this.safeValue(entry, 'symbol');
2274
+ if (marketIds !== undefined) {
2275
+ if (!this.inArray(entry_symbol, marketIds)) {
2276
+ continue;
2277
+ }
2278
+ }
2279
+ const market = this.safeMarket(entry_symbol);
2280
+ const parsed = this.parseFundingRate(entry, market);
2281
+ fundingRates.push(parsed);
2282
+ }
2283
+ return this.indexBy(fundingRates, 'symbol');
2284
+ }
2285
+ parseFundingRate(ticker, market = undefined) {
2286
+ //
2287
+ // {"ask": 26.283,
2288
+ // "askSize": 4.6,
2289
+ // "bid": 26.201,
2290
+ // "bidSize": 190,
2291
+ // "fundingRate": -0.000944642727438883,
2292
+ // "fundingRatePrediction": -0.000872671532340275,
2293
+ // "indexPrice": 26.253,
2294
+ // "last": 26.3,
2295
+ // "lastSize": 0.1,
2296
+ // "lastTime": "2023-06-11T18:55:28.958Z",
2297
+ // "markPrice": 26.239,
2298
+ // "open24h": 26.3,
2299
+ // "openInterest": 641.1,
2300
+ // "pair": "COMP:USD",
2301
+ // "postOnly": False,
2302
+ // "suspended": False,
2303
+ // "symbol": "pf_compusd",
2304
+ // "tag": "perpetual",
2305
+ // "vol24h": 0.1,
2306
+ // "volumeQuote": 2.63}
2307
+ //
2308
+ const fundingRateMultiplier = '8'; // https://support.kraken.com/hc/en-us/articles/9618146737172-Perpetual-Contracts-Funding-Rate-Method-Prior-to-September-29-2022
2309
+ const marketId = this.safeString(ticker, 'symbol');
2310
+ const symbol = this.symbol(marketId);
2311
+ const timestamp = this.parse8601(this.safeString(ticker, 'lastTime'));
2312
+ const indexPrice = this.safeNumber(ticker, 'indexPrice');
2313
+ const markPriceString = this.safeString(ticker, 'markPrice');
2314
+ const markPrice = this.parseNumber(markPriceString);
2315
+ const fundingRateString = this.safeString(ticker, 'fundingRate');
2316
+ const fundingRateResult = Precise.stringDiv(Precise.stringMul(fundingRateString, fundingRateMultiplier), markPriceString);
2317
+ const fundingRate = this.parseNumber(fundingRateResult);
2318
+ const nextFundingRateString = this.safeString(ticker, 'fundingRatePrediction');
2319
+ const nextFundingRateResult = Precise.stringDiv(Precise.stringMul(nextFundingRateString, fundingRateMultiplier), markPriceString);
2320
+ const nextFundingRate = this.parseNumber(nextFundingRateResult);
2321
+ return {
2322
+ 'info': ticker,
2323
+ 'symbol': symbol,
2324
+ 'markPrice': markPrice,
2325
+ 'indexPrice': indexPrice,
2326
+ 'interestRate': undefined,
2327
+ 'estimatedSettlePrice': undefined,
2328
+ 'timestamp': timestamp,
2329
+ 'datetime': this.iso8601(timestamp),
2330
+ 'fundingRate': fundingRate,
2331
+ 'fundingTimestamp': undefined,
2332
+ 'fundingDatetime': undefined,
2333
+ 'nextFundingRate': nextFundingRate,
2334
+ 'nextFundingTimestamp': undefined,
2335
+ 'nextFundingDatetime': undefined,
2336
+ 'previousFundingRate': undefined,
2337
+ 'previousFundingTimestamp': undefined,
2338
+ 'previousFundingDatetime': undefined,
2339
+ 'interval': undefined,
2340
+ };
2341
+ }
2342
+ /**
2343
+ * @method
2344
+ * @name krakenfutures#fetchFundingRateHistory
2345
+ * @description fetches historical funding rate prices
2346
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/historical-funding-rates
2347
+ * @param {string} symbol unified symbol of the market to fetch the funding rate history for
2348
+ * @param {int} [since] timestamp in ms of the earliest funding rate to fetch
2349
+ * @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
2350
+ * @param {object} [params] extra parameters specific to the api endpoint
2351
+ * @returns {object[]} a list of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure}
2352
+ */
2353
+ async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
2354
+ if (symbol === undefined) {
2355
+ throw new ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
2356
+ }
2357
+ await this.loadMarkets();
2358
+ const market = this.market(symbol);
2359
+ if (!market['swap']) {
2360
+ throw new BadRequest(this.id + ' fetchFundingRateHistory() supports swap contracts only');
2361
+ }
2362
+ const request = {
2363
+ 'symbol': market['id'].toUpperCase(),
2364
+ };
2365
+ const response = await this.publicGetHistoricalfundingrates(this.extend(request, params));
2366
+ //
2367
+ // {
2368
+ // "rates": [
2369
+ // {
2370
+ // "timestamp": '2018-08-31T16:00:00.000Z',
2371
+ // "fundingRate": '2.18900669884E-7',
2372
+ // "relativeFundingRate": '0.000060779960000000'
2373
+ // },
2374
+ // ...
2375
+ // ]
2376
+ // }
2377
+ //
2378
+ const rates = this.safeValue(response, 'rates');
2379
+ const result = [];
2380
+ for (let i = 0; i < rates.length; i++) {
2381
+ const item = rates[i];
2382
+ const datetime = this.safeString(item, 'timestamp');
2383
+ result.push({
2384
+ 'info': item,
2385
+ 'symbol': symbol,
2386
+ 'fundingRate': this.safeNumber(item, 'relativeFundingRate'),
2387
+ 'timestamp': this.parse8601(datetime),
2388
+ 'datetime': datetime,
2389
+ });
2390
+ }
2391
+ const sorted = this.sortBy(result, 'timestamp');
2392
+ return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
2393
+ }
2394
+ /**
2395
+ * @method
2396
+ * @name krakenfutures#fetchPositions
2397
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-open-positions
2398
+ * @description Fetches current contract trading positions
2399
+ * @param {string[]} symbols List of unified symbols
2400
+ * @param {object} [params] Not used by krakenfutures
2401
+ * @returns Parsed exchange response for positions
2402
+ */
2403
+ async fetchPositions(symbols = undefined, params = {}) {
2404
+ await this.loadMarkets();
2405
+ const request = {};
2406
+ const response = await this.privateGetOpenpositions(request);
2407
+ //
2408
+ // {
2409
+ // "result": "success",
2410
+ // "openPositions": [
2411
+ // {
2412
+ // "side": "long",
2413
+ // "symbol": "pi_xrpusd",
2414
+ // "price": "0.7533",
2415
+ // "fillTime": "2022-03-03T22:51:16.566Z",
2416
+ // "size": "230",
2417
+ // "unrealizedFunding": "-0.001878596918214635"
2418
+ // }
2419
+ // ],
2420
+ // "serverTime": "2022-03-03T22:51:16.566Z"
2421
+ // }
2422
+ //
2423
+ const result = this.parsePositions(response);
2424
+ return this.filterByArrayPositions(result, 'symbol', symbols, false);
2425
+ }
2426
+ parsePositions(response, symbols = undefined, params = {}) {
2427
+ const result = [];
2428
+ const positions = this.safeValue(response, 'openPositions');
2429
+ for (let i = 0; i < positions.length; i++) {
2430
+ const position = this.parsePosition(positions[i]);
2431
+ result.push(position);
2432
+ }
2433
+ return result;
2434
+ }
2435
+ parsePosition(position, market = undefined) {
2436
+ // cross
2437
+ // {
2438
+ // "side": "long",
2439
+ // "symbol": "pi_xrpusd",
2440
+ // "price": "0.7533",
2441
+ // "fillTime": "2022-03-03T22:51:16.566Z",
2442
+ // "size": "230",
2443
+ // "unrealizedFunding": "-0.001878596918214635"
2444
+ // }
2445
+ //
2446
+ // isolated
2447
+ // {
2448
+ // "side":"long",
2449
+ // "symbol":"pf_ftmusd",
2450
+ // "price":"0.4921",
2451
+ // "fillTime":"2023-02-22T11:37:16.685Z",
2452
+ // "size":"1",
2453
+ // "unrealizedFunding":"-8.155240068885155E-8",
2454
+ // "pnlCurrency":"USD",
2455
+ // "maxFixedLeverage":"1.0"
2456
+ // }
2457
+ //
2458
+ const leverage = this.safeNumber(position, 'maxFixedLeverage');
2459
+ let marginType = 'cross';
2460
+ if (leverage !== undefined) {
2461
+ marginType = 'isolated';
2462
+ }
2463
+ const datetime = this.safeString(position, 'fillTime');
2464
+ const marketId = this.safeString(position, 'symbol');
2465
+ market = this.safeMarket(marketId, market);
2466
+ return {
2467
+ 'info': position,
2468
+ 'symbol': market['symbol'],
2469
+ 'timestamp': this.parse8601(datetime),
2470
+ 'datetime': datetime,
2471
+ 'initialMargin': undefined,
2472
+ 'initialMarginPercentage': undefined,
2473
+ 'maintenanceMargin': undefined,
2474
+ 'maintenanceMarginPercentage': undefined,
2475
+ 'entryPrice': this.safeNumber(position, 'price'),
2476
+ 'notional': undefined,
2477
+ 'leverage': leverage,
2478
+ 'unrealizedPnl': undefined,
2479
+ 'contracts': this.safeNumber(position, 'size'),
2480
+ 'contractSize': this.safeNumber(market, 'contractSize'),
2481
+ 'marginRatio': undefined,
2482
+ 'liquidationPrice': undefined,
2483
+ 'markPrice': undefined,
2484
+ 'collateral': undefined,
2485
+ 'marginType': marginType,
2486
+ 'side': this.safeString(position, 'side'),
2487
+ 'percentage': undefined,
2488
+ };
2489
+ }
2490
+ /**
2491
+ * @method
2492
+ * @name krakenfutures#fetchLeverageTiers
2493
+ * @description retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes
2494
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-instruments
2495
+ * @param {string[]|undefined} symbols list of unified market symbols
2496
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2497
+ * @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
2498
+ */
2499
+ async fetchLeverageTiers(symbols = undefined, params = {}) {
2500
+ await this.loadMarkets();
2501
+ const response = await this.publicGetInstruments(params);
2502
+ //
2503
+ // {
2504
+ // "result": "success",
2505
+ // "instruments": [
2506
+ // {
2507
+ // "symbol": "fi_ethusd_180928",
2508
+ // "type": "futures_inverse", // futures_vanilla // spot index
2509
+ // "underlying": "rr_ethusd",
2510
+ // "lastTradingTime": "2018-09-28T15:00:00.000Z",
2511
+ // "tickSize": 0.1,
2512
+ // "contractSize": 1,
2513
+ // "tradeable": true,
2514
+ // "marginLevels": [
2515
+ // {
2516
+ // "contracts":0,
2517
+ // "initialMargin":0.02,
2518
+ // "maintenanceMargin":0.01
2519
+ // },
2520
+ // {
2521
+ // "contracts":250000,
2522
+ // "initialMargin":0.04,
2523
+ // "maintenanceMargin":0.02
2524
+ // },
2525
+ // ...
2526
+ // ],
2527
+ // "isin": "GB00JVMLMP88",
2528
+ // "retailMarginLevels": [
2529
+ // {
2530
+ // "contracts": 0,
2531
+ // "initialMargin": 0.5,
2532
+ // "maintenanceMargin": 0.25
2533
+ // }
2534
+ // ],
2535
+ // "tags": [],
2536
+ // },
2537
+ // {
2538
+ // "symbol": "in_xbtusd",
2539
+ // "type": "spot index",
2540
+ // "tradeable":false
2541
+ // }
2542
+ // ]
2543
+ // "serverTime": "2018-07-19T11:32:39.433Z"
2544
+ // }
2545
+ //
2546
+ const data = this.safeList(response, 'instruments');
2547
+ return this.parseLeverageTiers(data, symbols, 'symbol');
2548
+ }
2549
+ parseMarketLeverageTiers(info, market = undefined) {
2550
+ /**
2551
+ * @method
2552
+ * @ignore
2553
+ * @param info Exchange market response for 1 market
2554
+ * @param market CCXT market
2555
+ */
2556
+ //
2557
+ // {
2558
+ // "symbol": "fi_ethusd_180928",
2559
+ // "type": "futures_inverse", // futures_vanilla // spot index
2560
+ // "underlying": "rr_ethusd",
2561
+ // "lastTradingTime": "2018-09-28T15:00:00.000Z",
2562
+ // "tickSize": 0.1,
2563
+ // "contractSize": 1,
2564
+ // "tradeable": true,
2565
+ // "marginLevels": [
2566
+ // {
2567
+ // "contracts":0,
2568
+ // "initialMargin":0.02,
2569
+ // "maintenanceMargin":0.01
2570
+ // },
2571
+ // {
2572
+ // "contracts":250000,
2573
+ // "initialMargin":0.04,
2574
+ // "maintenanceMargin":0.02
2575
+ // },
2576
+ // ...
2577
+ // ],
2578
+ // "isin": "GB00JVMLMP88",
2579
+ // "retailMarginLevels": [
2580
+ // {
2581
+ // "contracts": 0,
2582
+ // "initialMargin": 0.5,
2583
+ // "maintenanceMargin": 0.25
2584
+ // }
2585
+ // ],
2586
+ // "tags": [],
2587
+ // }
2588
+ //
2589
+ const marginLevels = this.safeValue(info, 'marginLevels');
2590
+ const marketId = this.safeString(info, 'symbol');
2591
+ market = this.safeMarket(marketId, market);
2592
+ const tiers = [];
2593
+ if (marginLevels === undefined) {
2594
+ return tiers;
2595
+ }
2596
+ for (let i = 0; i < marginLevels.length; i++) {
2597
+ const tier = marginLevels[i];
2598
+ const initialMargin = this.safeString(tier, 'initialMargin');
2599
+ const minNotional = this.safeNumber(tier, 'numNonContractUnits');
2600
+ if (i !== 0) {
2601
+ const tiersLength = tiers.length;
2602
+ const previousTier = tiers[tiersLength - 1];
2603
+ previousTier['maxNotional'] = minNotional;
2604
+ }
2605
+ tiers.push({
2606
+ 'tier': this.sum(i, 1),
2607
+ 'symbol': this.safeSymbol(marketId, market),
2608
+ 'currency': market['quote'],
2609
+ 'minNotional': minNotional,
2610
+ 'maxNotional': undefined,
2611
+ 'maintenanceMarginRate': this.safeNumber(tier, 'maintenanceMargin'),
2612
+ 'maxLeverage': this.parseNumber(Precise.stringDiv('1', initialMargin)),
2613
+ 'info': tier,
2614
+ });
2615
+ }
2616
+ return tiers;
2617
+ }
2618
+ parseTransfer(transfer, currency = undefined) {
2619
+ //
2620
+ // transfer
2621
+ //
2622
+ // {
2623
+ // "result": "success",
2624
+ // "serverTime": "2022-04-12T01:22:53.420Z"
2625
+ // }
2626
+ //
2627
+ const datetime = this.safeString(transfer, 'serverTime');
2628
+ return {
2629
+ 'info': transfer,
2630
+ 'id': undefined,
2631
+ 'timestamp': this.parse8601(datetime),
2632
+ 'datetime': datetime,
2633
+ 'currency': this.safeString(currency, 'code'),
2634
+ 'amount': undefined,
2635
+ 'fromAccount': undefined,
2636
+ 'toAccount': undefined,
2637
+ 'status': this.safeString(transfer, 'result'),
2638
+ };
2639
+ }
2640
+ parseAccount(account) {
2641
+ const accountByType = {
2642
+ 'main': 'cash',
2643
+ 'funding': 'cash',
2644
+ 'future': 'cash',
2645
+ 'futures': 'cash',
2646
+ 'cashAccount': 'cash',
2647
+ 'multiCollateralMarginAccount': 'flex',
2648
+ 'multiCollateral': 'flex',
2649
+ 'multiCollateralMargin': 'flex',
2650
+ };
2651
+ if (account in accountByType) {
2652
+ return accountByType[account];
2653
+ }
2654
+ else if (account in this.markets) {
2655
+ const market = this.market(account);
2656
+ const marketId = market['id'];
2657
+ const splitId = marketId.split('_');
2658
+ if (market['inverse']) {
2659
+ return 'fi_' + this.safeString(splitId, 1);
2660
+ }
2661
+ else {
2662
+ return 'fv_' + this.safeString(splitId, 1);
2663
+ }
2664
+ }
2665
+ else {
2666
+ return account;
2667
+ }
2668
+ }
2669
+ /**
2670
+ * @method
2671
+ * @name krakenfutures#transferOut
2672
+ * @description transfer from futures wallet to spot wallet
2673
+ * @param {str} code Unified currency code
2674
+ * @param {float} amount Size of the transfer
2675
+ * @param {dict} [params] Exchange specific parameters
2676
+ * @returns a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
2677
+ */
2678
+ async transferOut(code, amount, params = {}) {
2679
+ return await this.transfer(code, amount, 'future', 'spot', params);
2680
+ }
2681
+ /**
2682
+ * @method
2683
+ * @name krakenfutures#transfer
2684
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/transfer
2685
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/sub-account-transfer
2686
+ * @description transfers currencies between sub-accounts
2687
+ * @param {string} code Unified currency code
2688
+ * @param {float} amount Size of the transfer
2689
+ * @param {string} fromAccount 'main'/'funding'/'future', 'flex', or a unified market symbol
2690
+ * @param {string} toAccount 'main'/'funding', 'flex', 'spot' or a unified market symbol
2691
+ * @param {object} [params] Exchange specific parameters
2692
+ * @returns a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
2693
+ */
2694
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
2695
+ await this.loadMarkets();
2696
+ const currency = this.currency(code);
2697
+ if (fromAccount === 'spot') {
2698
+ throw new BadRequest(this.id + ' transfer does not yet support transfers from spot');
2699
+ }
2700
+ const request = {
2701
+ 'amount': amount,
2702
+ };
2703
+ let response = undefined;
2704
+ if (toAccount === 'spot') {
2705
+ if (this.parseAccount(fromAccount) !== 'cash') {
2706
+ throw new BadRequest(this.id + ' transfer cannot transfer from ' + fromAccount + ' to ' + toAccount);
2707
+ }
2708
+ request['currency'] = currency['id'];
2709
+ response = await this.privatePostWithdrawal(this.extend(request, params));
2710
+ }
2711
+ else {
2712
+ request['fromAccount'] = this.parseAccount(fromAccount);
2713
+ request['toAccount'] = this.parseAccount(toAccount);
2714
+ request['unit'] = currency['id'];
2715
+ response = await this.privatePostTransfer(this.extend(request, params));
2716
+ }
2717
+ //
2718
+ // {
2719
+ // "result": "success",
2720
+ // "serverTime": "2022-04-12T01:22:53.420Z"
2721
+ // }
2722
+ //
2723
+ const transfer = this.parseTransfer(response, currency);
2724
+ return this.extend(transfer, {
2725
+ 'amount': amount,
2726
+ 'fromAccount': fromAccount,
2727
+ 'toAccount': toAccount,
2728
+ });
2729
+ }
2730
+ /**
2731
+ * @method
2732
+ * @name krakenfutures#setLeverage
2733
+ * @description set the level of leverage for a market
2734
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/set-leverage-setting
2735
+ * @param {float} leverage the rate of leverage
2736
+ * @param {string} symbol unified market symbol
2737
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2738
+ * @returns {object} response from the exchange
2739
+ */
2740
+ async setLeverage(leverage, symbol = undefined, params = {}) {
2741
+ if (symbol === undefined) {
2742
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
2743
+ }
2744
+ await this.loadMarkets();
2745
+ const request = {
2746
+ 'maxLeverage': leverage,
2747
+ 'symbol': this.marketId(symbol).toUpperCase(),
2748
+ };
2749
+ //
2750
+ // { result: "success", serverTime: "2023-08-01T09:40:32.345Z" }
2751
+ //
2752
+ return await this.privatePutLeveragepreferences(this.extend(request, params));
2753
+ }
2754
+ /**
2755
+ * @method
2756
+ * @name krakenfutures#fetchLeverages
2757
+ * @description fetch the set leverage for all contract and margin markets
2758
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-leverage-setting
2759
+ * @param {string[]} [symbols] a list of unified market symbols
2760
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2761
+ * @returns {object} a list of [leverage structures]{@link https://docs.ccxt.com/#/?id=leverage-structure}
2762
+ */
2763
+ async fetchLeverages(symbols = undefined, params = {}) {
2764
+ await this.loadMarkets();
2765
+ const response = await this.privateGetLeveragepreferences(params);
2766
+ //
2767
+ // {
2768
+ // "result": "success",
2769
+ // "serverTime": "2024-03-06T02:35:46.336Z",
2770
+ // "leveragePreferences": [
2771
+ // {
2772
+ // "symbol": "PF_ETHUSD",
2773
+ // "maxLeverage": 30.00
2774
+ // },
2775
+ // ]
2776
+ // }
2777
+ //
2778
+ const leveragePreferences = this.safeList(response, 'leveragePreferences', []);
2779
+ return this.parseLeverages(leveragePreferences, symbols, 'symbol');
2780
+ }
2781
+ /**
2782
+ * @method
2783
+ * @name krakenfutures#fetchLeverage
2784
+ * @description fetch the set leverage for a market
2785
+ * @see https://docs.kraken.com/api/docs/futures-api/trading/get-leverage-setting
2786
+ * @param {string} symbol unified market symbol
2787
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2788
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
2789
+ */
2790
+ async fetchLeverage(symbol, params = {}) {
2791
+ if (symbol === undefined) {
2792
+ throw new ArgumentsRequired(this.id + ' fetchLeverage() requires a symbol argument');
2793
+ }
2794
+ await this.loadMarkets();
2795
+ const market = this.market(symbol);
2796
+ const request = {
2797
+ 'symbol': this.marketId(symbol).toUpperCase(),
2798
+ };
2799
+ const response = await this.privateGetLeveragepreferences(this.extend(request, params));
2800
+ //
2801
+ // {
2802
+ // "result": "success",
2803
+ // "serverTime": "2023-08-01T09:54:08.900Z",
2804
+ // "leveragePreferences": [ { symbol: "PF_LTCUSD", maxLeverage: "5.00" } ]
2805
+ // }
2806
+ //
2807
+ const leveragePreferences = this.safeList(response, 'leveragePreferences', []);
2808
+ const data = this.safeDict(leveragePreferences, 0, {});
2809
+ return this.parseLeverage(data, market);
2810
+ }
2811
+ parseLeverage(leverage, market = undefined) {
2812
+ const marketId = this.safeString(leverage, 'symbol');
2813
+ const leverageValue = this.safeInteger(leverage, 'maxLeverage');
2814
+ return {
2815
+ 'info': leverage,
2816
+ 'symbol': this.safeSymbol(marketId, market),
2817
+ 'marginMode': undefined,
2818
+ 'longLeverage': leverageValue,
2819
+ 'shortLeverage': leverageValue,
2820
+ };
2821
+ }
2822
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2823
+ if (response === undefined) {
2824
+ return undefined;
2825
+ }
2826
+ if (code === 429) {
2827
+ throw new DDoSProtection(this.id + ' ' + body);
2828
+ }
2829
+ const errors = this.safeValue(response, 'errors');
2830
+ const firstError = this.safeValue(errors, 0);
2831
+ const firtErrorMessage = this.safeString(firstError, 'message');
2832
+ const message = this.safeString(response, 'error', firtErrorMessage);
2833
+ if (message === undefined) {
2834
+ return undefined;
2835
+ }
2836
+ const feedback = this.id + ' ' + body;
2837
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
2838
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
2839
+ if (code === 400) {
2840
+ throw new BadRequest(feedback);
2841
+ }
2842
+ throw new ExchangeError(feedback); // unknown message
2843
+ }
2844
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2845
+ const apiVersions = this.safeValue(this.options['versions'], api, {});
2846
+ const methodVersions = this.safeValue(apiVersions, method, {});
2847
+ const defaultVersion = this.safeString(methodVersions, path, this.version);
2848
+ const version = this.safeString(params, 'version', defaultVersion);
2849
+ params = this.omit(params, 'version');
2850
+ const apiAccess = this.safeValue(this.options['access'], api, {});
2851
+ const methodAccess = this.safeValue(apiAccess, method, {});
2852
+ const access = this.safeString(methodAccess, path, 'public');
2853
+ const endpoint = version + '/' + this.implodeParams(path, params);
2854
+ params = this.omit(params, this.extractParams(path));
2855
+ let query = endpoint;
2856
+ let postData = '';
2857
+ if (path === 'batchorder') {
2858
+ postData = 'json=' + this.json(params);
2859
+ body = postData;
2860
+ }
2861
+ else if (Object.keys(params).length) {
2862
+ postData = this.urlencode(params);
2863
+ query += '?' + postData;
2864
+ }
2865
+ const url = this.urls['api'][api] + query;
2866
+ if (api === 'private' || access === 'private') {
2867
+ this.checkRequiredCredentials();
2868
+ let auth = postData + '/api/';
2869
+ if (api !== 'private') {
2870
+ auth += api + '/';
2871
+ }
2872
+ auth += endpoint; // 1
2873
+ const hash = this.hash(this.encode(auth), sha256, 'binary'); // 2
2874
+ const secret = this.base64ToBinary(this.secret); // 3
2875
+ const signature = this.hmac(hash, secret, sha512, 'base64'); // 4-5
2876
+ headers = {
2877
+ 'Content-Type': 'application/x-www-form-urlencoded',
2878
+ 'Accept': 'application/json',
2879
+ 'APIKey': this.apiKey,
2880
+ 'Authent': signature,
2881
+ };
2882
+ }
2883
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
2884
+ }
2885
+ }