ccxt-ir 4.10.0 → 4.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1059) hide show
  1. package/README.md +4 -4
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +10 -1
  4. package/dist/cjs/src/abstract/bidarz.js +11 -0
  5. package/dist/cjs/src/bidarz.js +337 -0
  6. package/dist/cjs/src/bit24.js +4 -3
  7. package/dist/cjs/src/changefa.js +342 -0
  8. package/dist/cjs/src/ourbit.js +445 -0
  9. package/js/ccxt.d.ts +11 -2
  10. package/js/ccxt.js +8 -2
  11. package/js/src/abstract/bidarz.d.ts +9 -0
  12. package/js/src/abstract/bidarz.js +11 -0
  13. package/js/src/abstract/changefa.d.ts +8 -0
  14. package/js/src/abstract/changefa.js +11 -0
  15. package/js/src/abstract/ourbit.d.ts +10 -0
  16. package/js/src/abstract/ourbit.js +11 -0
  17. package/js/src/bidarz.d.ts +22 -0
  18. package/js/src/bidarz.js +336 -0
  19. package/js/src/bit24.js +4 -3
  20. package/js/src/changefa.d.ts +20 -0
  21. package/js/src/changefa.js +341 -0
  22. package/js/src/ourbit.d.ts +21 -0
  23. package/js/src/ourbit.js +444 -0
  24. package/js/src/src/abantether.d.ts +21 -0
  25. package/js/src/src/abantether.js +353 -0
  26. package/js/src/src/abstract/abantether.d.ts +8 -0
  27. package/js/src/src/abstract/abantether.js +11 -0
  28. package/js/src/src/abstract/afratether.d.ts +9 -0
  29. package/js/src/src/abstract/afratether.js +11 -0
  30. package/js/src/src/abstract/alpaca.d.ts +77 -0
  31. package/js/src/src/abstract/alpaca.js +11 -0
  32. package/js/src/src/abstract/apex.d.ts +34 -0
  33. package/js/src/src/abstract/apex.js +11 -0
  34. package/js/src/src/abstract/arzinja.d.ts +8 -0
  35. package/js/src/src/abstract/arzinja.js +11 -0
  36. package/js/src/src/abstract/arzplus.d.ts +11 -0
  37. package/js/src/src/abstract/arzplus.js +11 -0
  38. package/js/src/src/abstract/ascendex.d.ts +80 -0
  39. package/js/src/src/abstract/ascendex.js +11 -0
  40. package/js/src/src/abstract/asretether.d.ts +8 -0
  41. package/js/src/src/abstract/asretether.js +11 -0
  42. package/js/src/src/abstract/bidarz.d.ts +9 -0
  43. package/js/src/src/abstract/bidarz.js +11 -0
  44. package/js/src/src/abstract/bigone.d.ts +48 -0
  45. package/js/src/src/abstract/bigone.js +11 -0
  46. package/js/src/src/abstract/binance.d.ts +773 -0
  47. package/js/src/src/abstract/binance.js +11 -0
  48. package/js/src/src/abstract/bingx.d.ts +165 -0
  49. package/js/src/src/abstract/bingx.js +11 -0
  50. package/js/src/src/abstract/bit24.d.ts +9 -0
  51. package/js/src/src/abstract/bit24.js +11 -0
  52. package/js/src/src/abstract/bit2c.d.ts +30 -0
  53. package/js/src/src/abstract/bit2c.js +11 -0
  54. package/js/src/src/abstract/bitbank.d.ts +35 -0
  55. package/js/src/src/abstract/bitbank.js +11 -0
  56. package/js/src/src/abstract/bitbarg.d.ts +8 -0
  57. package/js/src/src/abstract/bitbarg.js +11 -0
  58. package/js/src/src/abstract/bitbns.d.ts +43 -0
  59. package/js/src/src/abstract/bitbns.js +11 -0
  60. package/js/src/src/abstract/bitfinex.d.ts +143 -0
  61. package/js/src/src/abstract/bitfinex.js +11 -0
  62. package/js/src/src/abstract/bitflyer.d.ts +42 -0
  63. package/js/src/src/abstract/bitflyer.js +11 -0
  64. package/js/src/src/abstract/bitget.d.ts +578 -0
  65. package/js/src/src/abstract/bitget.js +11 -0
  66. package/js/src/src/abstract/bithumb.d.ts +35 -0
  67. package/js/src/src/abstract/bithumb.js +11 -0
  68. package/js/src/src/abstract/bitimen.d.ts +10 -0
  69. package/js/src/src/abstract/bitimen.js +11 -0
  70. package/js/src/src/abstract/bitir.d.ts +10 -0
  71. package/js/src/src/abstract/bitir.js +11 -0
  72. package/js/src/src/abstract/bitmart.d.ts +120 -0
  73. package/js/src/src/abstract/bitmart.js +11 -0
  74. package/js/src/src/abstract/bitmex.d.ts +100 -0
  75. package/js/src/src/abstract/bitmex.js +11 -0
  76. package/js/src/src/abstract/bitopro.d.ts +33 -0
  77. package/js/src/src/abstract/bitopro.js +11 -0
  78. package/js/src/src/abstract/bitpin.d.ts +11 -0
  79. package/js/src/src/abstract/bitpin.js +11 -0
  80. package/js/src/src/abstract/bitrue.d.ts +75 -0
  81. package/js/src/src/abstract/bitrue.js +11 -0
  82. package/js/src/src/abstract/bitso.d.ts +46 -0
  83. package/js/src/src/abstract/bitso.js +11 -0
  84. package/js/src/src/abstract/bitstamp.d.ts +262 -0
  85. package/js/src/src/abstract/bitstamp.js +11 -0
  86. package/js/src/src/abstract/bitteam.d.ts +32 -0
  87. package/js/src/src/abstract/bitteam.js +11 -0
  88. package/js/src/src/abstract/bittrade.d.ts +117 -0
  89. package/js/src/src/abstract/bittrade.js +11 -0
  90. package/js/src/src/abstract/bitunix.d.ts +9 -0
  91. package/js/src/src/abstract/bitunix.js +11 -0
  92. package/js/src/src/abstract/bitvavo.d.ts +30 -0
  93. package/js/src/src/abstract/bitvavo.js +11 -0
  94. package/js/src/src/abstract/blockchaincom.d.ts +31 -0
  95. package/js/src/src/abstract/blockchaincom.js +11 -0
  96. package/js/src/src/abstract/blofin.d.ts +70 -0
  97. package/js/src/src/abstract/blofin.js +11 -0
  98. package/js/src/src/abstract/btcalpha.d.ts +21 -0
  99. package/js/src/src/abstract/btcalpha.js +11 -0
  100. package/js/src/src/abstract/btcbox.d.ts +18 -0
  101. package/js/src/src/abstract/btcbox.js +11 -0
  102. package/js/src/src/abstract/btcmarkets.d.ts +42 -0
  103. package/js/src/src/abstract/btcmarkets.js +11 -0
  104. package/js/src/src/abstract/btcturk.d.ts +23 -0
  105. package/js/src/src/abstract/btcturk.js +11 -0
  106. package/js/src/src/abstract/bybit.d.ts +316 -0
  107. package/js/src/src/abstract/bybit.js +11 -0
  108. package/js/src/src/abstract/bydfi.d.ts +11 -0
  109. package/js/src/src/abstract/bydfi.js +11 -0
  110. package/js/src/src/abstract/cafearz.d.ts +8 -0
  111. package/js/src/src/abstract/cafearz.js +11 -0
  112. package/js/src/src/abstract/cex.d.ts +35 -0
  113. package/js/src/src/abstract/cex.js +11 -0
  114. package/js/src/src/abstract/coinbase.d.ts +97 -0
  115. package/js/src/src/abstract/coinbase.js +11 -0
  116. package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
  117. package/js/src/src/abstract/coinbaseexchange.js +11 -0
  118. package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
  119. package/js/src/src/abstract/coinbaseinternational.js +11 -0
  120. package/js/src/src/abstract/coincatch.d.ts +97 -0
  121. package/js/src/src/abstract/coincatch.js +11 -0
  122. package/js/src/src/abstract/coincheck.d.ts +36 -0
  123. package/js/src/src/abstract/coincheck.js +11 -0
  124. package/js/src/src/abstract/coinex.d.ts +240 -0
  125. package/js/src/src/abstract/coinex.js +11 -0
  126. package/js/src/src/abstract/coinmate.d.ts +65 -0
  127. package/js/src/src/abstract/coinmate.js +11 -0
  128. package/js/src/src/abstract/coinmetro.d.ts +37 -0
  129. package/js/src/src/abstract/coinmetro.js +11 -0
  130. package/js/src/src/abstract/coinone.d.ts +70 -0
  131. package/js/src/src/abstract/coinone.js +11 -0
  132. package/js/src/src/abstract/coinsph.d.ts +57 -0
  133. package/js/src/src/abstract/coinsph.js +11 -0
  134. package/js/src/src/abstract/coinspot.d.ts +31 -0
  135. package/js/src/src/abstract/coinspot.js +11 -0
  136. package/js/src/src/abstract/cryptocom.d.ts +126 -0
  137. package/js/src/src/abstract/cryptocom.js +11 -0
  138. package/js/src/src/abstract/cryptomus.d.ts +23 -0
  139. package/js/src/src/abstract/cryptomus.js +11 -0
  140. package/js/src/src/abstract/defx.d.ts +72 -0
  141. package/js/src/src/abstract/defx.js +11 -0
  142. package/js/src/src/abstract/delta.d.ts +53 -0
  143. package/js/src/src/abstract/delta.js +11 -0
  144. package/js/src/src/abstract/deribit.d.ts +129 -0
  145. package/js/src/src/abstract/deribit.js +11 -0
  146. package/js/src/src/abstract/derive.d.ts +120 -0
  147. package/js/src/src/abstract/derive.js +11 -0
  148. package/js/src/src/abstract/digifinex.d.ts +95 -0
  149. package/js/src/src/abstract/digifinex.js +11 -0
  150. package/js/src/src/abstract/ellipx.d.ts +28 -0
  151. package/js/src/src/abstract/ellipx.js +11 -0
  152. package/js/src/src/abstract/eterex.d.ts +8 -0
  153. package/js/src/src/abstract/eterex.js +11 -0
  154. package/js/src/src/abstract/excoino.d.ts +10 -0
  155. package/js/src/src/abstract/excoino.js +11 -0
  156. package/js/src/src/abstract/exir.d.ts +11 -0
  157. package/js/src/src/abstract/exir.js +11 -0
  158. package/js/src/src/abstract/exmo.d.ts +58 -0
  159. package/js/src/src/abstract/exmo.js +11 -0
  160. package/js/src/src/abstract/exnovin.d.ts +9 -0
  161. package/js/src/src/abstract/exnovin.js +11 -0
  162. package/js/src/src/abstract/farhadexchange.d.ts +8 -0
  163. package/js/src/src/abstract/farhadexchange.js +11 -0
  164. package/js/src/src/abstract/foxbit.d.ts +29 -0
  165. package/js/src/src/abstract/foxbit.js +11 -0
  166. package/js/src/src/abstract/gate.d.ts +287 -0
  167. package/js/src/src/abstract/gate.js +11 -0
  168. package/js/src/src/abstract/gemini.d.ts +62 -0
  169. package/js/src/src/abstract/gemini.js +11 -0
  170. package/js/src/src/abstract/hamtapay.d.ts +9 -0
  171. package/js/src/src/abstract/hamtapay.js +11 -0
  172. package/js/src/src/abstract/hashkey.d.ts +70 -0
  173. package/js/src/src/abstract/hashkey.js +11 -0
  174. package/js/src/src/abstract/hibachi.d.ts +29 -0
  175. package/js/src/src/abstract/hibachi.js +11 -0
  176. package/js/src/src/abstract/hitbtc.d.ts +118 -0
  177. package/js/src/src/abstract/hitbtc.js +11 -0
  178. package/js/src/src/abstract/hitobit.d.ts +11 -0
  179. package/js/src/src/abstract/hitobit.js +11 -0
  180. package/js/src/src/abstract/hollaex.d.ts +36 -0
  181. package/js/src/src/abstract/hollaex.js +11 -0
  182. package/js/src/src/abstract/htx.d.ts +551 -0
  183. package/js/src/src/abstract/htx.js +11 -0
  184. package/js/src/src/abstract/hyperliquid.d.ts +9 -0
  185. package/js/src/src/abstract/hyperliquid.js +11 -0
  186. package/js/src/src/abstract/independentreserve.d.ts +46 -0
  187. package/js/src/src/abstract/independentreserve.js +11 -0
  188. package/js/src/src/abstract/indodax.d.ts +29 -0
  189. package/js/src/src/abstract/indodax.js +11 -0
  190. package/js/src/src/abstract/iranexchange.d.ts +9 -0
  191. package/js/src/src/abstract/iranexchange.js +11 -0
  192. package/js/src/src/abstract/jibitex.d.ts +10 -0
  193. package/js/src/src/abstract/jibitex.js +11 -0
  194. package/js/src/src/abstract/kcex.d.ts +10 -0
  195. package/js/src/src/abstract/kcex.js +11 -0
  196. package/js/src/src/abstract/kifpoolme.d.ts +9 -0
  197. package/js/src/src/abstract/kifpoolme.js +11 -0
  198. package/js/src/src/abstract/kraken.d.ts +61 -0
  199. package/js/src/src/abstract/kraken.js +11 -0
  200. package/js/src/src/abstract/krakenfutures.d.ts +45 -0
  201. package/js/src/src/abstract/krakenfutures.js +11 -0
  202. package/js/src/src/abstract/kucoin.d.ts +227 -0
  203. package/js/src/src/abstract/kucoin.js +11 -0
  204. package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
  205. package/js/src/src/abstract/kucoinfutures.js +11 -0
  206. package/js/src/src/abstract/latoken.d.ts +59 -0
  207. package/js/src/src/abstract/latoken.js +11 -0
  208. package/js/src/src/abstract/lbank.d.ts +65 -0
  209. package/js/src/src/abstract/lbank.js +11 -0
  210. package/js/src/src/abstract/luno.d.ts +41 -0
  211. package/js/src/src/abstract/luno.js +11 -0
  212. package/js/src/src/abstract/mazdax.d.ts +11 -0
  213. package/js/src/src/abstract/mazdax.js +11 -0
  214. package/js/src/src/abstract/mercado.d.ts +28 -0
  215. package/js/src/src/abstract/mercado.js +11 -0
  216. package/js/src/src/abstract/mexc.d.ts +183 -0
  217. package/js/src/src/abstract/mexc.js +11 -0
  218. package/js/src/src/abstract/modetrade.d.ts +122 -0
  219. package/js/src/src/abstract/modetrade.js +11 -0
  220. package/js/src/src/abstract/ndax.d.ts +100 -0
  221. package/js/src/src/abstract/ndax.js +11 -0
  222. package/js/src/src/abstract/nobitex.d.ts +10 -0
  223. package/js/src/src/abstract/nobitex.js +11 -0
  224. package/js/src/src/abstract/novadax.d.ts +32 -0
  225. package/js/src/src/abstract/novadax.js +11 -0
  226. package/js/src/src/abstract/oceanex.d.ts +30 -0
  227. package/js/src/src/abstract/oceanex.js +11 -0
  228. package/js/src/src/abstract/okcoin.d.ts +77 -0
  229. package/js/src/src/abstract/okcoin.js +11 -0
  230. package/js/src/src/abstract/okexchange.d.ts +11 -0
  231. package/js/src/src/abstract/okexchange.js +11 -0
  232. package/js/src/src/abstract/okx.d.ts +352 -0
  233. package/js/src/src/abstract/okx.js +11 -0
  234. package/js/src/src/abstract/ompfinex.d.ts +10 -0
  235. package/js/src/src/abstract/ompfinex.js +11 -0
  236. package/js/src/src/abstract/onetrading.d.ts +26 -0
  237. package/js/src/src/abstract/onetrading.js +11 -0
  238. package/js/src/src/abstract/oxfun.d.ts +37 -0
  239. package/js/src/src/abstract/oxfun.js +11 -0
  240. package/js/src/src/abstract/p2b.d.ts +25 -0
  241. package/js/src/src/abstract/p2b.js +11 -0
  242. package/js/src/src/abstract/paradex.d.ts +66 -0
  243. package/js/src/src/abstract/paradex.js +11 -0
  244. package/js/src/src/abstract/paymium.d.ts +31 -0
  245. package/js/src/src/abstract/paymium.js +11 -0
  246. package/js/src/src/abstract/phemex.d.ts +120 -0
  247. package/js/src/src/abstract/phemex.js +11 -0
  248. package/js/src/src/abstract/pingi.d.ts +9 -0
  249. package/js/src/src/abstract/pingi.js +11 -0
  250. package/js/src/src/abstract/poloniex.d.ts +108 -0
  251. package/js/src/src/abstract/poloniex.js +11 -0
  252. package/js/src/src/abstract/pooleno.d.ts +8 -0
  253. package/js/src/src/abstract/pooleno.js +11 -0
  254. package/js/src/src/abstract/probit.d.ts +26 -0
  255. package/js/src/src/abstract/probit.js +11 -0
  256. package/js/src/src/abstract/raastin.d.ts +11 -0
  257. package/js/src/src/abstract/raastin.js +11 -0
  258. package/js/src/src/abstract/ramzinex.d.ts +10 -0
  259. package/js/src/src/abstract/ramzinex.js +11 -0
  260. package/js/src/src/abstract/sarmayex.d.ts +8 -0
  261. package/js/src/src/abstract/sarmayex.js +11 -0
  262. package/js/src/src/abstract/sarrafex.d.ts +10 -0
  263. package/js/src/src/abstract/sarrafex.js +11 -0
  264. package/js/src/src/abstract/tabdeal.d.ts +10 -0
  265. package/js/src/src/abstract/tabdeal.js +11 -0
  266. package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
  267. package/js/src/src/abstract/tehran_exchange.js +11 -0
  268. package/js/src/src/abstract/tetherland.d.ts +8 -0
  269. package/js/src/src/abstract/tetherland.js +11 -0
  270. package/js/src/src/abstract/timex.d.ts +65 -0
  271. package/js/src/src/abstract/timex.js +11 -0
  272. package/js/src/src/abstract/tokocrypto.d.ts +40 -0
  273. package/js/src/src/abstract/tokocrypto.js +11 -0
  274. package/js/src/src/abstract/toobit.d.ts +10 -0
  275. package/js/src/src/abstract/toobit.js +11 -0
  276. package/js/src/src/abstract/tradeogre.d.ts +21 -0
  277. package/js/src/src/abstract/tradeogre.js +11 -0
  278. package/js/src/src/abstract/twox.d.ts +8 -0
  279. package/js/src/src/abstract/twox.js +11 -0
  280. package/js/src/src/abstract/ubitex.d.ts +10 -0
  281. package/js/src/src/abstract/ubitex.js +11 -0
  282. package/js/src/src/abstract/upbit.d.ts +58 -0
  283. package/js/src/src/abstract/upbit.js +11 -0
  284. package/js/src/src/abstract/vertex.d.ts +22 -0
  285. package/js/src/src/abstract/vertex.js +11 -0
  286. package/js/src/src/abstract/wallex.d.ts +11 -0
  287. package/js/src/src/abstract/wallex.js +11 -0
  288. package/js/src/src/abstract/wavesexchange.d.ts +157 -0
  289. package/js/src/src/abstract/wavesexchange.js +11 -0
  290. package/js/src/src/abstract/whitebit.d.ts +117 -0
  291. package/js/src/src/abstract/whitebit.js +11 -0
  292. package/js/src/src/abstract/woo.d.ts +144 -0
  293. package/js/src/src/abstract/woo.js +11 -0
  294. package/js/src/src/abstract/woofipro.d.ts +122 -0
  295. package/js/src/src/abstract/woofipro.js +11 -0
  296. package/js/src/src/abstract/xt.d.ts +160 -0
  297. package/js/src/src/abstract/xt.js +11 -0
  298. package/js/src/src/abstract/yobit.d.ts +19 -0
  299. package/js/src/src/abstract/yobit.js +11 -0
  300. package/js/src/src/abstract/zaif.d.ts +41 -0
  301. package/js/src/src/abstract/zaif.js +11 -0
  302. package/js/src/src/abstract/zonda.d.ts +56 -0
  303. package/js/src/src/abstract/zonda.js +11 -0
  304. package/js/src/src/afratether.d.ts +21 -0
  305. package/js/src/src/afratether.js +356 -0
  306. package/js/src/src/alpaca.d.ts +332 -0
  307. package/js/src/src/alpaca.js +1908 -0
  308. package/js/src/src/apex.d.ts +333 -0
  309. package/js/src/src/apex.js +1942 -0
  310. package/js/src/src/arzinja.d.ts +21 -0
  311. package/js/src/src/arzinja.js +298 -0
  312. package/js/src/src/arzplus.d.ts +26 -0
  313. package/js/src/src/arzplus.js +581 -0
  314. package/js/src/src/ascendex.d.ts +424 -0
  315. package/js/src/src/ascendex.js +3699 -0
  316. package/js/src/src/asretether.d.ts +21 -0
  317. package/js/src/src/asretether.js +324 -0
  318. package/js/src/src/base/Exchange.d.ts +926 -0
  319. package/js/src/src/base/Exchange.js +7399 -0
  320. package/js/src/src/base/Precise.d.ts +42 -0
  321. package/js/src/src/base/Precise.js +275 -0
  322. package/js/src/src/base/errors.d.ts +168 -0
  323. package/js/src/src/base/errors.js +255 -0
  324. package/js/src/src/base/functions/crypto.d.ts +16 -0
  325. package/js/src/src/base/functions/crypto.js +131 -0
  326. package/js/src/src/base/functions/encode.d.ts +4 -0
  327. package/js/src/src/base/functions/encode.js +32 -0
  328. package/js/src/src/base/functions/generic.d.ts +29 -0
  329. package/js/src/src/base/functions/generic.js +203 -0
  330. package/js/src/src/base/functions/misc.d.ts +9 -0
  331. package/js/src/src/base/functions/misc.js +101 -0
  332. package/js/src/src/base/functions/number.d.ts +27 -0
  333. package/js/src/src/base/functions/number.js +313 -0
  334. package/js/src/src/base/functions/platform.d.ts +7 -0
  335. package/js/src/src/base/functions/platform.js +27 -0
  336. package/js/src/src/base/functions/rsa.d.ts +5 -0
  337. package/js/src/src/base/functions/rsa.js +49 -0
  338. package/js/src/src/base/functions/string.d.ts +7 -0
  339. package/js/src/src/base/functions/string.js +44 -0
  340. package/js/src/src/base/functions/throttle.d.ts +6 -0
  341. package/js/src/src/base/functions/throttle.js +67 -0
  342. package/js/src/src/base/functions/time.d.ts +21 -0
  343. package/js/src/src/base/functions/time.js +171 -0
  344. package/js/src/src/base/functions/totp.d.ts +3 -0
  345. package/js/src/src/base/functions/totp.js +25 -0
  346. package/js/src/src/base/functions/type.d.ts +37 -0
  347. package/js/src/src/base/functions/type.js +179 -0
  348. package/js/src/src/base/functions.d.ts +10 -0
  349. package/js/src/src/base/functions.js +18 -0
  350. package/js/src/src/base/types.d.ts +586 -0
  351. package/js/src/src/base/types.js +7 -0
  352. package/js/src/src/base/ws/Cache.d.ts +27 -0
  353. package/js/src/src/base/ws/Cache.js +260 -0
  354. package/js/src/src/base/ws/Client.d.ts +53 -0
  355. package/js/src/src/base/ws/Client.js +307 -0
  356. package/js/src/src/base/ws/Future.d.ts +8 -0
  357. package/js/src/src/base/ws/Future.js +35 -0
  358. package/js/src/src/base/ws/OrderBook.d.ts +25 -0
  359. package/js/src/src/base/ws/OrderBook.js +130 -0
  360. package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
  361. package/js/src/src/base/ws/OrderBookSide.js +286 -0
  362. package/js/src/src/base/ws/WsClient.d.ts +11 -0
  363. package/js/src/src/base/ws/WsClient.js +69 -0
  364. package/js/src/src/bequant.d.ts +4 -0
  365. package/js/src/src/bequant.js +35 -0
  366. package/js/src/src/bidarz.d.ts +16 -0
  367. package/js/src/src/bidarz.js +327 -0
  368. package/js/src/src/bigone.d.ts +296 -0
  369. package/js/src/src/bigone.js +2340 -0
  370. package/js/src/src/binance.d.ts +1667 -0
  371. package/js/src/src/binance.js +14400 -0
  372. package/js/src/src/binancecoinm.d.ts +6 -0
  373. package/js/src/src/binancecoinm.js +51 -0
  374. package/js/src/src/binanceus.d.ts +4 -0
  375. package/js/src/src/binanceus.js +225 -0
  376. package/js/src/src/binanceusdm.d.ts +6 -0
  377. package/js/src/src/binanceusdm.js +63 -0
  378. package/js/src/src/bingx.d.ts +778 -0
  379. package/js/src/src/bingx.js +6705 -0
  380. package/js/src/src/bit24.d.ts +24 -0
  381. package/js/src/src/bit24.js +520 -0
  382. package/js/src/src/bit2c.d.ts +146 -0
  383. package/js/src/src/bit2c.js +1029 -0
  384. package/js/src/src/bitbank.d.ts +181 -0
  385. package/js/src/src/bitbank.js +1146 -0
  386. package/js/src/src/bitbarg.d.ts +21 -0
  387. package/js/src/src/bitbarg.js +312 -0
  388. package/js/src/src/bitbns.d.ts +184 -0
  389. package/js/src/src/bitbns.js +1288 -0
  390. package/js/src/src/bitfinex.d.ts +516 -0
  391. package/js/src/src/bitfinex.js +3951 -0
  392. package/js/src/src/bitflyer.d.ts +229 -0
  393. package/js/src/src/bitflyer.js +1209 -0
  394. package/js/src/src/bitget.d.ts +1109 -0
  395. package/js/src/src/bitget.js +11033 -0
  396. package/js/src/src/bithumb.d.ts +165 -0
  397. package/js/src/src/bithumb.js +1257 -0
  398. package/js/src/src/bitimen.d.ts +23 -0
  399. package/js/src/src/bitimen.js +424 -0
  400. package/js/src/src/bitir.d.ts +23 -0
  401. package/js/src/src/bitir.js +521 -0
  402. package/js/src/src/bitmart.d.ts +736 -0
  403. package/js/src/src/bitmart.js +5639 -0
  404. package/js/src/src/bitmex.d.ts +395 -0
  405. package/js/src/src/bitmex.js +3088 -0
  406. package/js/src/src/bitopro.d.ts +295 -0
  407. package/js/src/src/bitopro.js +1892 -0
  408. package/js/src/src/bitpin.d.ts +23 -0
  409. package/js/src/src/bitpin.js +487 -0
  410. package/js/src/src/bitrue.d.ts +384 -0
  411. package/js/src/src/bitrue.js +3382 -0
  412. package/js/src/src/bitso.d.ts +270 -0
  413. package/js/src/src/bitso.js +1881 -0
  414. package/js/src/src/bitstamp.d.ts +355 -0
  415. package/js/src/src/bitstamp.js +2445 -0
  416. package/js/src/src/bitteam.d.ts +229 -0
  417. package/js/src/src/bitteam.js +2420 -0
  418. package/js/src/src/bittrade.d.ts +298 -0
  419. package/js/src/src/bittrade.js +2050 -0
  420. package/js/src/src/bitunix.d.ts +21 -0
  421. package/js/src/src/bitunix.js +326 -0
  422. package/js/src/src/bitvavo.d.ts +311 -0
  423. package/js/src/src/bitvavo.js +2204 -0
  424. package/js/src/src/blockchaincom.d.ts +256 -0
  425. package/js/src/src/blockchaincom.js +1259 -0
  426. package/js/src/src/blofin.d.ts +439 -0
  427. package/js/src/src/blofin.js +2576 -0
  428. package/js/src/src/btcalpha.d.ts +209 -0
  429. package/js/src/src/btcalpha.js +1056 -0
  430. package/js/src/src/btcbox.d.ts +144 -0
  431. package/js/src/src/btcbox.js +834 -0
  432. package/js/src/src/btcmarkets.d.ts +253 -0
  433. package/js/src/src/btcmarkets.js +1418 -0
  434. package/js/src/src/btcturk.d.ts +161 -0
  435. package/js/src/src/btcturk.js +1058 -0
  436. package/js/src/src/bybit.d.ts +1097 -0
  437. package/js/src/src/bybit.js +9382 -0
  438. package/js/src/src/bydfi.d.ts +23 -0
  439. package/js/src/src/bydfi.js +434 -0
  440. package/js/src/src/cafearz.d.ts +21 -0
  441. package/js/src/src/cafearz.js +346 -0
  442. package/js/src/src/cex.d.ts +286 -0
  443. package/js/src/src/cex.js +1799 -0
  444. package/js/src/src/coinbase.d.ts +623 -0
  445. package/js/src/src/coinbase.js +5220 -0
  446. package/js/src/src/coinbaseadvanced.d.ts +4 -0
  447. package/js/src/src/coinbaseadvanced.js +18 -0
  448. package/js/src/src/coinbaseexchange.d.ts +334 -0
  449. package/js/src/src/coinbaseexchange.js +2127 -0
  450. package/js/src/src/coinbaseinternational.d.ts +443 -0
  451. package/js/src/src/coinbaseinternational.js +2336 -0
  452. package/js/src/src/coincatch.d.ts +786 -0
  453. package/js/src/src/coincatch.js +5492 -0
  454. package/js/src/src/coincheck.d.ts +147 -0
  455. package/js/src/src/coincheck.js +962 -0
  456. package/js/src/src/coinex.d.ts +719 -0
  457. package/js/src/src/coinex.js +6166 -0
  458. package/js/src/src/coinmate.d.ts +202 -0
  459. package/js/src/src/coinmate.js +1215 -0
  460. package/js/src/src/coinmetro.d.ts +244 -0
  461. package/js/src/src/coinmetro.js +2024 -0
  462. package/js/src/src/coinone.d.ts +158 -0
  463. package/js/src/src/coinone.js +1278 -0
  464. package/js/src/src/coinsph.d.ts +310 -0
  465. package/js/src/src/coinsph.js +2203 -0
  466. package/js/src/src/coinspot.d.ts +108 -0
  467. package/js/src/src/coinspot.js +653 -0
  468. package/js/src/src/cryptocom.d.ts +463 -0
  469. package/js/src/src/cryptocom.js +3549 -0
  470. package/js/src/src/cryptomus.d.ts +158 -0
  471. package/js/src/src/cryptomus.js +1169 -0
  472. package/js/src/src/defx.d.ts +348 -0
  473. package/js/src/src/defx.js +2139 -0
  474. package/js/src/src/delta.d.ts +407 -0
  475. package/js/src/src/delta.js +3654 -0
  476. package/js/src/src/deribit.d.ts +516 -0
  477. package/js/src/src/deribit.js +3790 -0
  478. package/js/src/src/derive.d.ts +324 -0
  479. package/js/src/src/derive.js +2655 -0
  480. package/js/src/src/digifinex.d.ts +544 -0
  481. package/js/src/src/digifinex.js +4453 -0
  482. package/js/src/src/ellipx.d.ts +237 -0
  483. package/js/src/src/ellipx.js +2071 -0
  484. package/js/src/src/eterex.d.ts +21 -0
  485. package/js/src/src/eterex.js +299 -0
  486. package/js/src/src/excoino.d.ts +23 -0
  487. package/js/src/src/excoino.js +426 -0
  488. package/js/src/src/exir.d.ts +23 -0
  489. package/js/src/src/exir.js +403 -0
  490. package/js/src/src/exmo.d.ts +426 -0
  491. package/js/src/src/exmo.js +2825 -0
  492. package/js/src/src/exnovin.d.ts +22 -0
  493. package/js/src/src/exnovin.js +378 -0
  494. package/js/src/src/farhadexchange.d.ts +21 -0
  495. package/js/src/src/farhadexchange.js +280 -0
  496. package/js/src/src/fmfwio.d.ts +4 -0
  497. package/js/src/src/fmfwio.js +35 -0
  498. package/js/src/src/foxbit.d.ts +352 -0
  499. package/js/src/src/foxbit.js +2016 -0
  500. package/js/src/src/gate.d.ts +1071 -0
  501. package/js/src/src/gate.js +8282 -0
  502. package/js/src/src/gateio.d.ts +4 -0
  503. package/js/src/src/gateio.js +17 -0
  504. package/js/src/src/gemini.d.ts +257 -0
  505. package/js/src/src/gemini.js +2006 -0
  506. package/js/src/src/hamtapay.d.ts +21 -0
  507. package/js/src/src/hamtapay.js +303 -0
  508. package/js/src/src/hashkey.d.ts +628 -0
  509. package/js/src/src/hashkey.js +4363 -0
  510. package/js/src/src/hibachi.d.ts +346 -0
  511. package/js/src/src/hibachi.js +2137 -0
  512. package/js/src/src/hitbtc.d.ts +558 -0
  513. package/js/src/src/hitbtc.js +3847 -0
  514. package/js/src/src/hitobit.d.ts +23 -0
  515. package/js/src/src/hitobit.js +412 -0
  516. package/js/src/src/hollaex.d.ts +305 -0
  517. package/js/src/src/hollaex.js +2046 -0
  518. package/js/src/src/htx.d.ts +961 -0
  519. package/js/src/src/htx.js +9668 -0
  520. package/js/src/src/huobi.d.ts +4 -0
  521. package/js/src/src/huobi.js +17 -0
  522. package/js/src/src/hyperliquid.d.ts +651 -0
  523. package/js/src/src/hyperliquid.js +3937 -0
  524. package/js/src/src/independentreserve.d.ts +169 -0
  525. package/js/src/src/independentreserve.js +1115 -0
  526. package/js/src/src/indodax.d.ts +217 -0
  527. package/js/src/src/indodax.js +1454 -0
  528. package/js/src/src/iranexchange.d.ts +21 -0
  529. package/js/src/src/iranexchange.js +399 -0
  530. package/js/src/src/jibitex.d.ts +23 -0
  531. package/js/src/src/jibitex.js +416 -0
  532. package/js/src/src/kcex.d.ts +21 -0
  533. package/js/src/src/kcex.js +335 -0
  534. package/js/src/src/kifpoolme.d.ts +23 -0
  535. package/js/src/src/kifpoolme.js +410 -0
  536. package/js/src/src/kraken.d.ts +484 -0
  537. package/js/src/src/kraken.js +3518 -0
  538. package/js/src/src/krakenfutures.d.ts +362 -0
  539. package/js/src/src/krakenfutures.js +2885 -0
  540. package/js/src/src/kucoin.d.ts +759 -0
  541. package/js/src/src/kucoin.js +5153 -0
  542. package/js/src/src/kucoinfutures.d.ts +521 -0
  543. package/js/src/src/kucoinfutures.js +3381 -0
  544. package/js/src/src/latoken.d.ts +274 -0
  545. package/js/src/src/latoken.js +1824 -0
  546. package/js/src/src/lbank.d.ts +350 -0
  547. package/js/src/src/lbank.js +3146 -0
  548. package/js/src/src/luno.d.ts +252 -0
  549. package/js/src/src/luno.js +1479 -0
  550. package/js/src/src/mazdax.d.ts +23 -0
  551. package/js/src/src/mazdax.js +534 -0
  552. package/js/src/src/mercado.d.ts +160 -0
  553. package/js/src/src/mercado.js +1011 -0
  554. package/js/src/src/mexc.d.ts +768 -0
  555. package/js/src/src/mexc.js +6102 -0
  556. package/js/src/src/modetrade.d.ts +496 -0
  557. package/js/src/src/modetrade.js +2936 -0
  558. package/js/src/src/myokx.d.ts +4 -0
  559. package/js/src/src/myokx.js +54 -0
  560. package/js/src/src/ndax.d.ts +285 -0
  561. package/js/src/src/ndax.js +2598 -0
  562. package/js/src/src/nobitex.d.ts +23 -0
  563. package/js/src/src/nobitex.js +454 -0
  564. package/js/src/src/novadax.d.ts +279 -0
  565. package/js/src/src/novadax.js +1676 -0
  566. package/js/src/src/oceanex.d.ts +231 -0
  567. package/js/src/src/oceanex.js +1123 -0
  568. package/js/src/src/okcoin.d.ts +346 -0
  569. package/js/src/src/okcoin.js +3211 -0
  570. package/js/src/src/okexchange.d.ts +23 -0
  571. package/js/src/src/okexchange.js +373 -0
  572. package/js/src/src/okx.d.ts +1125 -0
  573. package/js/src/src/okx.js +9009 -0
  574. package/js/src/src/okxus.d.ts +4 -0
  575. package/js/src/src/okxus.js +54 -0
  576. package/js/src/src/ompfinex.d.ts +23 -0
  577. package/js/src/src/ompfinex.js +510 -0
  578. package/js/src/src/onetrading.d.ts +228 -0
  579. package/js/src/src/onetrading.js +1769 -0
  580. package/js/src/src/oxfun.d.ts +442 -0
  581. package/js/src/src/oxfun.js +2920 -0
  582. package/js/src/src/p2b.d.ts +189 -0
  583. package/js/src/src/p2b.js +1344 -0
  584. package/js/src/src/paradex.d.ts +389 -0
  585. package/js/src/src/paradex.js +2607 -0
  586. package/js/src/src/paymium.d.ts +133 -0
  587. package/js/src/src/paymium.js +644 -0
  588. package/js/src/src/phemex.d.ts +497 -0
  589. package/js/src/src/phemex.js +5333 -0
  590. package/js/src/src/pingi.d.ts +22 -0
  591. package/js/src/src/pingi.js +446 -0
  592. package/js/src/src/poloniex.d.ts +441 -0
  593. package/js/src/src/poloniex.js +3681 -0
  594. package/js/src/src/pooleno.d.ts +21 -0
  595. package/js/src/src/pooleno.js +347 -0
  596. package/js/src/src/pro/alpaca.d.ts +95 -0
  597. package/js/src/src/pro/alpaca.js +724 -0
  598. package/js/src/src/pro/apex.d.ts +160 -0
  599. package/js/src/src/pro/apex.js +1044 -0
  600. package/js/src/src/pro/ascendex.d.ts +99 -0
  601. package/js/src/src/pro/ascendex.js +1012 -0
  602. package/js/src/src/pro/bequant.d.ts +4 -0
  603. package/js/src/src/pro/bequant.js +42 -0
  604. package/js/src/src/pro/binance.d.ts +796 -0
  605. package/js/src/src/pro/binance.js +4373 -0
  606. package/js/src/src/pro/binancecoinm.d.ts +4 -0
  607. package/js/src/src/pro/binancecoinm.js +32 -0
  608. package/js/src/src/pro/binanceus.d.ts +4 -0
  609. package/js/src/src/pro/binanceus.js +52 -0
  610. package/js/src/src/pro/binanceusdm.d.ts +4 -0
  611. package/js/src/src/pro/binanceusdm.js +37 -0
  612. package/js/src/src/pro/bingx.d.ts +151 -0
  613. package/js/src/src/pro/bingx.js +1568 -0
  614. package/js/src/src/pro/bitfinex.d.ts +99 -0
  615. package/js/src/src/pro/bitfinex.js +1165 -0
  616. package/js/src/src/pro/bitget.d.ts +257 -0
  617. package/js/src/src/pro/bitget.js +2327 -0
  618. package/js/src/src/pro/bithumb.d.ts +59 -0
  619. package/js/src/src/pro/bithumb.js +395 -0
  620. package/js/src/src/pro/bitmart.d.ts +168 -0
  621. package/js/src/src/pro/bitmart.js +1686 -0
  622. package/js/src/src/pro/bitmex.d.ts +170 -0
  623. package/js/src/src/pro/bitmex.js +1760 -0
  624. package/js/src/src/pro/bitopro.d.ts +69 -0
  625. package/js/src/src/pro/bitopro.js +477 -0
  626. package/js/src/src/pro/bitrue.d.ts +40 -0
  627. package/js/src/src/pro/bitrue.js +461 -0
  628. package/js/src/src/pro/bitstamp.d.ts +53 -0
  629. package/js/src/src/pro/bitstamp.js +587 -0
  630. package/js/src/src/pro/bittrade.d.ts +66 -0
  631. package/js/src/src/pro/bittrade.js +606 -0
  632. package/js/src/src/pro/bitvavo.d.ts +321 -0
  633. package/js/src/src/pro/bitvavo.js +1451 -0
  634. package/js/src/src/pro/blockchaincom.d.ts +89 -0
  635. package/js/src/src/pro/blockchaincom.js +777 -0
  636. package/js/src/src/pro/blofin.d.ts +174 -0
  637. package/js/src/src/pro/blofin.js +743 -0
  638. package/js/src/src/pro/bybit.d.ts +397 -0
  639. package/js/src/src/pro/bybit.js +2519 -0
  640. package/js/src/src/pro/cex.d.ts +220 -0
  641. package/js/src/src/pro/cex.js +1535 -0
  642. package/js/src/src/pro/coinbase.d.ts +119 -0
  643. package/js/src/src/pro/coinbase.js +736 -0
  644. package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
  645. package/js/src/src/pro/coinbaseadvanced.js +18 -0
  646. package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
  647. package/js/src/src/pro/coinbaseexchange.js +969 -0
  648. package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
  649. package/js/src/src/pro/coinbaseinternational.js +804 -0
  650. package/js/src/src/pro/coincatch.d.ts +207 -0
  651. package/js/src/src/pro/coincatch.js +1562 -0
  652. package/js/src/src/pro/coincheck.d.ts +33 -0
  653. package/js/src/src/pro/coincheck.js +210 -0
  654. package/js/src/src/pro/coinex.d.ts +147 -0
  655. package/js/src/src/pro/coinex.js +1426 -0
  656. package/js/src/src/pro/coinone.d.ts +51 -0
  657. package/js/src/src/pro/coinone.js +413 -0
  658. package/js/src/src/pro/cryptocom.d.ts +300 -0
  659. package/js/src/src/pro/cryptocom.js +1414 -0
  660. package/js/src/src/pro/defx.d.ts +236 -0
  661. package/js/src/src/pro/defx.js +865 -0
  662. package/js/src/src/pro/deribit.d.ts +163 -0
  663. package/js/src/src/pro/deribit.js +1066 -0
  664. package/js/src/src/pro/derive.d.ts +100 -0
  665. package/js/src/src/pro/derive.js +753 -0
  666. package/js/src/src/pro/exmo.d.ts +97 -0
  667. package/js/src/src/pro/exmo.js +903 -0
  668. package/js/src/src/pro/gate.d.ts +360 -0
  669. package/js/src/src/pro/gate.js +2119 -0
  670. package/js/src/src/pro/gateio.d.ts +4 -0
  671. package/js/src/src/pro/gateio.js +17 -0
  672. package/js/src/src/pro/gemini.d.ts +106 -0
  673. package/js/src/src/pro/gemini.js +932 -0
  674. package/js/src/src/pro/hashkey.d.ts +121 -0
  675. package/js/src/src/pro/hashkey.js +843 -0
  676. package/js/src/src/pro/hitbtc.d.ts +235 -0
  677. package/js/src/src/pro/hitbtc.js +1400 -0
  678. package/js/src/src/pro/hollaex.d.ts +77 -0
  679. package/js/src/src/pro/hollaex.js +604 -0
  680. package/js/src/src/pro/htx.d.ts +141 -0
  681. package/js/src/src/pro/htx.js +2415 -0
  682. package/js/src/src/pro/huobi.d.ts +4 -0
  683. package/js/src/src/pro/huobi.js +17 -0
  684. package/js/src/src/pro/hyperliquid.d.ts +218 -0
  685. package/js/src/src/pro/hyperliquid.js +1126 -0
  686. package/js/src/src/pro/independentreserve.d.ts +36 -0
  687. package/js/src/src/pro/independentreserve.js +287 -0
  688. package/js/src/src/pro/kraken.d.ts +233 -0
  689. package/js/src/src/pro/kraken.js +1785 -0
  690. package/js/src/src/pro/krakenfutures.d.ts +178 -0
  691. package/js/src/src/pro/krakenfutures.js +1592 -0
  692. package/js/src/src/pro/kucoin.d.ts +221 -0
  693. package/js/src/src/pro/kucoin.js +1430 -0
  694. package/js/src/src/pro/kucoinfutures.d.ts +205 -0
  695. package/js/src/src/pro/kucoinfutures.js +1295 -0
  696. package/js/src/src/pro/lbank.d.ts +134 -0
  697. package/js/src/src/pro/lbank.js +950 -0
  698. package/js/src/src/pro/luno.d.ts +44 -0
  699. package/js/src/src/pro/luno.js +322 -0
  700. package/js/src/src/pro/mexc.d.ts +210 -0
  701. package/js/src/src/pro/mexc.js +2009 -0
  702. package/js/src/src/pro/modetrade.d.ts +155 -0
  703. package/js/src/src/pro/modetrade.js +1335 -0
  704. package/js/src/src/pro/myokx.d.ts +4 -0
  705. package/js/src/src/pro/myokx.js +39 -0
  706. package/js/src/src/pro/ndax.d.ts +60 -0
  707. package/js/src/src/pro/ndax.js +545 -0
  708. package/js/src/src/pro/okcoin.d.ts +91 -0
  709. package/js/src/src/pro/okcoin.js +763 -0
  710. package/js/src/src/pro/okx.d.ts +408 -0
  711. package/js/src/src/pro/okx.js +2479 -0
  712. package/js/src/src/pro/okxus.d.ts +4 -0
  713. package/js/src/src/pro/okxus.js +39 -0
  714. package/js/src/src/pro/onetrading.d.ts +107 -0
  715. package/js/src/src/pro/onetrading.js +1343 -0
  716. package/js/src/src/pro/oxfun.d.ts +234 -0
  717. package/js/src/src/pro/oxfun.js +1112 -0
  718. package/js/src/src/pro/p2b.d.ts +104 -0
  719. package/js/src/src/pro/p2b.js +506 -0
  720. package/js/src/src/pro/paradex.d.ts +54 -0
  721. package/js/src/src/pro/paradex.js +370 -0
  722. package/js/src/src/pro/phemex.d.ts +129 -0
  723. package/js/src/src/pro/phemex.js +1569 -0
  724. package/js/src/src/pro/poloniex.d.ts +214 -0
  725. package/js/src/src/pro/poloniex.js +1318 -0
  726. package/js/src/src/pro/probit.d.ts +91 -0
  727. package/js/src/src/pro/probit.js +593 -0
  728. package/js/src/src/pro/tradeogre.d.ts +49 -0
  729. package/js/src/src/pro/tradeogre.js +284 -0
  730. package/js/src/src/pro/upbit.d.ts +124 -0
  731. package/js/src/src/pro/upbit.js +689 -0
  732. package/js/src/src/pro/vertex.d.ts +104 -0
  733. package/js/src/src/pro/vertex.js +999 -0
  734. package/js/src/src/pro/whitebit.d.ts +123 -0
  735. package/js/src/src/pro/whitebit.js +971 -0
  736. package/js/src/src/pro/woo.d.ts +161 -0
  737. package/js/src/src/pro/woo.js +1351 -0
  738. package/js/src/src/pro/woofipro.d.ts +155 -0
  739. package/js/src/src/pro/woofipro.js +1335 -0
  740. package/js/src/src/pro/xt.d.ts +165 -0
  741. package/js/src/src/pro/xt.js +1230 -0
  742. package/js/src/src/probit.d.ts +283 -0
  743. package/js/src/src/probit.js +1935 -0
  744. package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
  745. package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
  746. package/js/src/src/raastin.d.ts +24 -0
  747. package/js/src/src/raastin.js +494 -0
  748. package/js/src/src/ramzinex.d.ts +23 -0
  749. package/js/src/src/ramzinex.js +510 -0
  750. package/js/src/src/sarmayex.d.ts +21 -0
  751. package/js/src/src/sarmayex.js +376 -0
  752. package/js/src/src/sarrafex.d.ts +23 -0
  753. package/js/src/src/sarrafex.js +501 -0
  754. package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
  755. package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
  756. package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
  757. package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
  758. package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
  759. package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
  760. package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
  761. package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
  762. package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
  763. package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
  764. package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
  765. package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
  766. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
  767. package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
  768. package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
  769. package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
  770. package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
  771. package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
  772. package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
  773. package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
  774. package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
  775. package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
  776. package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
  777. package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
  778. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
  779. package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
  780. package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
  781. package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
  782. package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
  783. package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
  784. package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
  785. package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
  786. package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
  787. package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
  788. package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
  789. package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
  790. package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
  791. package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
  792. package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
  793. package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
  794. package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
  795. package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
  796. package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
  797. package/js/src/src/static_dependencies/ethers/index.js +22 -0
  798. package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
  799. package/js/src/src/static_dependencies/ethers/interface.js +990 -0
  800. package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
  801. package/js/src/src/static_dependencies/ethers/typed.js +608 -0
  802. package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
  803. package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
  804. package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
  805. package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
  806. package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
  807. package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
  808. package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
  809. package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
  810. package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
  811. package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
  812. package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
  813. package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
  814. package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
  815. package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
  816. package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
  817. package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
  818. package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
  819. package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
  820. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
  821. package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
  822. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
  823. package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
  824. package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
  825. package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
  826. package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
  827. package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
  828. package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
  829. package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
  830. package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
  831. package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
  832. package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
  833. package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
  834. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
  835. package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
  836. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
  837. package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
  838. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
  839. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
  840. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
  841. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  842. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
  843. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  844. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
  845. package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  846. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
  847. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
  848. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
  849. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
  850. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
  851. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
  852. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
  853. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
  854. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
  855. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
  856. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
  857. package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
  858. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
  859. package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
  860. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
  861. package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
  862. package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
  863. package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
  864. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
  865. package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
  866. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
  867. package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
  868. package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
  869. package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
  870. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
  871. package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
  872. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
  873. package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
  874. package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
  875. package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
  876. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
  877. package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
  878. package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
  879. package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
  880. package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
  881. package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
  882. package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
  883. package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
  884. package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
  885. package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
  886. package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
  887. package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
  888. package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
  889. package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
  890. package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
  891. package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
  892. package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
  893. package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
  894. package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
  895. package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
  896. package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
  897. package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
  898. package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
  899. package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
  900. package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
  901. package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
  902. package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
  903. package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
  904. package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
  905. package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
  906. package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
  907. package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
  908. package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
  909. package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
  910. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
  911. package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
  912. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
  913. package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
  914. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
  915. package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  916. package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
  917. package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
  918. package/js/src/src/static_dependencies/qs/index.cjs +15 -0
  919. package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
  920. package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
  921. package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
  922. package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
  923. package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
  924. package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
  925. package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
  926. package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
  927. package/js/src/src/static_dependencies/scure-base/index.js +420 -0
  928. package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
  929. package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
  930. package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
  931. package/js/src/src/static_dependencies/starknet/constants.js +67 -0
  932. package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
  933. package/js/src/src/static_dependencies/starknet/index.js +9 -0
  934. package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
  935. package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
  936. package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
  937. package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
  938. package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
  939. package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
  940. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
  941. package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
  942. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
  943. package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
  944. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
  945. package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
  946. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
  947. package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
  948. package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
  949. package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
  950. package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
  951. package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
  952. package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
  953. package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
  954. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
  955. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
  956. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
  957. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
  958. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
  959. package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
  960. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
  961. package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
  962. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
  963. package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
  964. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
  965. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
  966. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
  967. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
  968. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
  969. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
  970. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
  971. package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
  972. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
  973. package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
  974. package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
  975. package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
  976. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
  977. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
  978. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
  979. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
  980. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
  981. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
  982. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
  983. package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
  984. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
  985. package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
  986. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
  987. package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
  988. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
  989. package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
  990. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
  991. package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
  992. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
  993. package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
  994. package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
  995. package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
  996. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
  997. package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
  998. package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
  999. package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
  1000. package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
  1001. package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
  1002. package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
  1003. package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
  1004. package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
  1005. package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
  1006. package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
  1007. package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
  1008. package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
  1009. package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
  1010. package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
  1011. package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
  1012. package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
  1013. package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
  1014. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  1015. package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
  1016. package/js/src/src/tabdeal.d.ts +23 -0
  1017. package/js/src/src/tabdeal.js +387 -0
  1018. package/js/src/src/tehran_exchange.d.ts +21 -0
  1019. package/js/src/src/tehran_exchange.js +333 -0
  1020. package/js/src/src/tetherland.d.ts +21 -0
  1021. package/js/src/src/tetherland.js +367 -0
  1022. package/js/src/src/timex.d.ts +247 -0
  1023. package/js/src/src/timex.js +1792 -0
  1024. package/js/src/src/tokocrypto.d.ts +261 -0
  1025. package/js/src/src/tokocrypto.js +2641 -0
  1026. package/js/src/src/toobit.d.ts +22 -0
  1027. package/js/src/src/toobit.js +445 -0
  1028. package/js/src/src/tradeogre.d.ts +149 -0
  1029. package/js/src/src/tradeogre.js +878 -0
  1030. package/js/src/src/twox.d.ts +21 -0
  1031. package/js/src/src/twox.js +371 -0
  1032. package/js/src/src/ubitex.d.ts +23 -0
  1033. package/js/src/src/ubitex.js +433 -0
  1034. package/js/src/src/upbit.d.ts +377 -0
  1035. package/js/src/src/upbit.js +2340 -0
  1036. package/js/src/src/vertex.d.ts +346 -0
  1037. package/js/src/src/vertex.js +3146 -0
  1038. package/js/src/src/wallex.d.ts +23 -0
  1039. package/js/src/src/wallex.js +467 -0
  1040. package/js/src/src/wavesexchange.d.ts +244 -0
  1041. package/js/src/src/wavesexchange.js +2747 -0
  1042. package/js/src/src/whitebit.d.ts +571 -0
  1043. package/js/src/src/whitebit.js +3437 -0
  1044. package/js/src/src/woo.d.ts +727 -0
  1045. package/js/src/src/woo.js +4183 -0
  1046. package/js/src/src/woofipro.d.ts +497 -0
  1047. package/js/src/src/woofipro.js +2941 -0
  1048. package/js/src/src/xt.d.ts +568 -0
  1049. package/js/src/src/xt.js +5184 -0
  1050. package/js/src/src/yobit.d.ts +197 -0
  1051. package/js/src/src/yobit.js +1453 -0
  1052. package/js/src/src/zaif.d.ts +136 -0
  1053. package/js/src/src/zaif.js +821 -0
  1054. package/js/src/src/zonda.d.ts +214 -0
  1055. package/js/src/src/zonda.js +1984 -0
  1056. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
  1057. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +1 -1
  1058. package/js/test.js +9 -17
  1059. package/package.json +1 -1
@@ -0,0 +1,3681 @@
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/poloniex.js';
9
+ import { ArgumentsRequired, ExchangeError, ExchangeNotAvailable, NotSupported, RequestTimeout, AuthenticationError, PermissionDenied, InsufficientFunds, OrderNotFound, InvalidOrder, AccountSuspended, OnMaintenance, BadSymbol, BadRequest } from './base/errors.js';
10
+ import { Precise } from './base/Precise.js';
11
+ import { TICK_SIZE } from './base/functions/number.js';
12
+ import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
13
+ // ---------------------------------------------------------------------------
14
+ /**
15
+ * @class poloniex
16
+ * @augments Exchange
17
+ */
18
+ export default class poloniex extends Exchange {
19
+ describe() {
20
+ return this.deepExtend(super.describe(), {
21
+ 'id': 'poloniex',
22
+ 'name': 'Poloniex',
23
+ 'countries': ['US'],
24
+ // 200 requests per second for some unauthenticated market endpoints => 1000ms / 200 = 5ms between requests
25
+ 'rateLimit': 5,
26
+ 'certified': false,
27
+ 'pro': true,
28
+ 'has': {
29
+ 'CORS': undefined,
30
+ 'spot': true,
31
+ 'margin': undefined,
32
+ 'swap': true,
33
+ 'future': true,
34
+ 'option': false,
35
+ 'addMargin': true,
36
+ 'cancelAllOrders': true,
37
+ 'cancelOrder': true,
38
+ 'cancelOrders': undefined,
39
+ 'createDepositAddress': true,
40
+ 'createMarketBuyOrderWithCost': true,
41
+ 'createMarketOrderWithCost': false,
42
+ 'createMarketSellOrderWithCost': false,
43
+ 'createOrder': true,
44
+ 'createOrders': undefined,
45
+ 'createStopOrder': true,
46
+ 'createTriggerOrder': true,
47
+ 'editOrder': true,
48
+ 'fetchBalance': true,
49
+ 'fetchClosedOrder': false,
50
+ 'fetchClosedOrders': true,
51
+ 'fetchCurrencies': true,
52
+ 'fetchDepositAddress': true,
53
+ 'fetchDepositAddresses': false,
54
+ 'fetchDepositAddressesByNetwork': false,
55
+ 'fetchDeposits': true,
56
+ 'fetchDepositsWithdrawals': true,
57
+ 'fetchDepositWithdrawFee': 'emulated',
58
+ 'fetchDepositWithdrawFees': true,
59
+ 'fetchFundingHistory': false,
60
+ 'fetchFundingInterval': false,
61
+ 'fetchFundingIntervals': false,
62
+ 'fetchFundingRate': false,
63
+ 'fetchFundingRateHistory': false,
64
+ 'fetchFundingRates': undefined,
65
+ 'fetchLedger': undefined,
66
+ 'fetchLeverage': true,
67
+ 'fetchLiquidations': undefined,
68
+ 'fetchMarginMode': false,
69
+ 'fetchMarkets': true,
70
+ 'fetchMyTrades': true,
71
+ 'fetchOHLCV': true,
72
+ 'fetchOpenInterestHistory': false,
73
+ 'fetchOpenOrder': false,
74
+ 'fetchOpenOrders': true,
75
+ 'fetchOrder': true,
76
+ 'fetchOrderBook': true,
77
+ 'fetchOrderBooks': false,
78
+ 'fetchOrderTrades': true,
79
+ 'fetchPosition': false,
80
+ 'fetchPositionMode': true,
81
+ 'fetchPositions': true,
82
+ 'fetchTicker': true,
83
+ 'fetchTickers': true,
84
+ 'fetchTime': true,
85
+ 'fetchTrades': true,
86
+ 'fetchTradingFee': false,
87
+ 'fetchTradingFees': true,
88
+ 'fetchTransactions': 'emulated',
89
+ 'fetchTransfer': false,
90
+ 'fetchTransfers': false,
91
+ 'fetchWithdrawals': true,
92
+ 'reduceMargin': true,
93
+ 'sandbox': true,
94
+ 'setLeverage': true,
95
+ 'setPositionMode': true,
96
+ 'transfer': true,
97
+ 'withdraw': true,
98
+ },
99
+ 'timeframes': {
100
+ '1m': 'MINUTE_1',
101
+ '5m': 'MINUTE_5',
102
+ '10m': 'MINUTE_10',
103
+ '15m': 'MINUTE_15',
104
+ '30m': 'MINUTE_30',
105
+ '1h': 'HOUR_1',
106
+ '2h': 'HOUR_2',
107
+ '4h': 'HOUR_4',
108
+ '6h': 'HOUR_6',
109
+ '12h': 'HOUR_12',
110
+ '1d': 'DAY_1',
111
+ '3d': 'DAY_3',
112
+ '1w': 'WEEK_1',
113
+ '1M': 'MONTH_1', // not in swap
114
+ },
115
+ 'urls': {
116
+ 'logo': 'https://user-images.githubusercontent.com/1294454/27766817-e9456312-5ee6-11e7-9b3c-b628ca5626a5.jpg',
117
+ 'api': {
118
+ 'spot': 'https://api.poloniex.com',
119
+ 'swap': 'https://api.poloniex.com',
120
+ },
121
+ 'test': {
122
+ 'spot': 'https://sand-spot-api-gateway.poloniex.com',
123
+ },
124
+ 'www': 'https://www.poloniex.com',
125
+ 'doc': 'https://api-docs.poloniex.com/spot/',
126
+ 'fees': 'https://poloniex.com/fees',
127
+ 'referral': 'https://poloniex.com/signup?c=UBFZJRPJ',
128
+ },
129
+ 'api': {
130
+ 'public': {
131
+ 'get': {
132
+ 'markets': 20,
133
+ 'markets/{symbol}': 1,
134
+ 'currencies': 20,
135
+ 'currencies/{currency}': 20,
136
+ 'v2/currencies': 20,
137
+ 'v2/currencies/{currency}': 20,
138
+ 'timestamp': 1,
139
+ 'markets/price': 1,
140
+ 'markets/{symbol}/price': 1,
141
+ 'markets/markPrice': 1,
142
+ 'markets/{symbol}/markPrice': 1,
143
+ 'markets/{symbol}/markPriceComponents': 1,
144
+ 'markets/{symbol}/orderBook': 1,
145
+ 'markets/{symbol}/candles': 1,
146
+ 'markets/{symbol}/trades': 20,
147
+ 'markets/ticker24h': 20,
148
+ 'markets/{symbol}/ticker24h': 20,
149
+ 'markets/collateralInfo': 1,
150
+ 'markets/{currency}/collateralInfo': 1,
151
+ 'markets/borrowRatesInfo': 1,
152
+ },
153
+ },
154
+ 'private': {
155
+ 'get': {
156
+ 'accounts': 4,
157
+ 'accounts/balances': 4,
158
+ 'accounts/{id}/balances': 4,
159
+ 'accounts/activity': 20,
160
+ 'accounts/transfer': 20,
161
+ 'accounts/transfer/{id}': 4,
162
+ 'feeinfo': 20,
163
+ 'accounts/interest/history': 1,
164
+ 'subaccounts': 4,
165
+ 'subaccounts/balances': 20,
166
+ 'subaccounts/{id}/balances': 4,
167
+ 'subaccounts/transfer': 20,
168
+ 'subaccounts/transfer/{id}': 4,
169
+ 'wallets/addresses': 20,
170
+ 'wallets/addresses/{currency}': 20,
171
+ 'wallets/activity': 20,
172
+ 'margin/accountMargin': 4,
173
+ 'margin/borrowStatus': 4,
174
+ 'margin/maxSize': 4,
175
+ 'orders': 20,
176
+ 'orders/{id}': 4,
177
+ 'orders/killSwitchStatus': 4,
178
+ 'smartorders': 20,
179
+ 'smartorders/{id}': 4,
180
+ 'orders/history': 20,
181
+ 'smartorders/history': 20,
182
+ 'trades': 20,
183
+ 'orders/{id}/trades': 4,
184
+ },
185
+ 'post': {
186
+ 'accounts/transfer': 4,
187
+ 'subaccounts/transfer': 20,
188
+ 'wallets/address': 20,
189
+ 'wallets/withdraw': 20,
190
+ 'v2/wallets/withdraw': 20,
191
+ 'orders': 4,
192
+ 'orders/batch': 20,
193
+ 'orders/killSwitch': 4,
194
+ 'smartorders': 4,
195
+ },
196
+ 'delete': {
197
+ 'orders/{id}': 4,
198
+ 'orders/cancelByIds': 20,
199
+ 'orders': 20,
200
+ 'smartorders/{id}': 4,
201
+ 'smartorders/cancelByIds': 20,
202
+ 'smartorders': 20,
203
+ },
204
+ 'put': {
205
+ 'orders/{id}': 20,
206
+ 'smartorders/{id}': 20,
207
+ },
208
+ },
209
+ 'swapPublic': {
210
+ 'get': {
211
+ // 300 calls / second
212
+ 'v3/market/allInstruments': 2 / 3,
213
+ 'v3/market/instruments': 2 / 3,
214
+ 'v3/market/orderBook': 2 / 3,
215
+ 'v3/market/candles': 10,
216
+ 'v3/market/indexPriceCandlesticks': 10,
217
+ 'v3/market/premiumIndexCandlesticks': 10,
218
+ 'v3/market/markPriceCandlesticks': 10,
219
+ 'v3/market/trades': 2 / 3,
220
+ 'v3/market/liquidationOrder': 2 / 3,
221
+ 'v3/market/tickers': 2 / 3,
222
+ 'v3/market/markPrice': 2 / 3,
223
+ 'v3/market/indexPrice': 2 / 3,
224
+ 'v3/market/indexPriceComponents': 2 / 3,
225
+ 'v3/market/fundingRate': 2 / 3,
226
+ 'v3/market/openInterest': 2 / 3,
227
+ 'v3/market/insurance': 2 / 3,
228
+ 'v3/market/riskLimit': 2 / 3,
229
+ },
230
+ },
231
+ 'swapPrivate': {
232
+ 'get': {
233
+ 'v3/account/balance': 4,
234
+ 'v3/account/bills': 20,
235
+ 'v3/trade/order/opens': 20,
236
+ 'v3/trade/order/trades': 20,
237
+ 'v3/trade/order/history': 20,
238
+ 'v3/trade/position/opens': 20,
239
+ 'v3/trade/position/history': 20,
240
+ 'v3/position/leverages': 20,
241
+ 'v3/position/mode': 20,
242
+ },
243
+ 'post': {
244
+ 'v3/trade/order': 4,
245
+ 'v3/trade/orders': 40,
246
+ 'v3/trade/position': 20,
247
+ 'v3/trade/positionAll': 100,
248
+ 'v3/position/leverage': 20,
249
+ 'v3/position/mode': 20,
250
+ 'v3/trade/position/margin': 20,
251
+ },
252
+ 'delete': {
253
+ 'v3/trade/order': 2,
254
+ 'v3/trade/batchOrders': 20,
255
+ 'v3/trade/allOrders': 20,
256
+ },
257
+ },
258
+ },
259
+ 'fees': {
260
+ 'trading': {
261
+ 'feeSide': 'get',
262
+ // starting from Jan 8 2020
263
+ 'maker': this.parseNumber('0.0009'),
264
+ 'taker': this.parseNumber('0.0009'),
265
+ },
266
+ 'funding': {},
267
+ },
268
+ 'commonCurrencies': {
269
+ 'AIR': 'AirCoin',
270
+ 'APH': 'AphroditeCoin',
271
+ 'BCC': 'BTCtalkcoin',
272
+ 'BCHABC': 'BCHABC',
273
+ 'BDG': 'Badgercoin',
274
+ 'BTM': 'Bitmark',
275
+ 'CON': 'Coino',
276
+ 'ETHTRON': 'ETH',
277
+ 'GOLD': 'GoldEagles',
278
+ 'GPUC': 'GPU',
279
+ 'HOT': 'Hotcoin',
280
+ 'ITC': 'Information Coin',
281
+ 'KEY': 'KEYCoin',
282
+ 'MASK': 'NFTX Hashmasks Index',
283
+ 'MEME': 'Degenerator Meme',
284
+ 'PLX': 'ParallaxCoin',
285
+ 'REPV2': 'REP',
286
+ 'STR': 'XLM',
287
+ 'SOC': 'SOCC',
288
+ 'TRADE': 'Unitrade',
289
+ 'TRXETH': 'TRX',
290
+ 'XAP': 'API Coin',
291
+ // this is not documented in the API docs for Poloniex
292
+ // https://github.com/ccxt/ccxt/issues/7084
293
+ // when the user calls withdraw ('USDT', amount, address, tag, params)
294
+ // with params = { 'currencyToWithdrawAs': 'USDTTRON' }
295
+ // or params = { 'currencyToWithdrawAs': 'USDTETH' }
296
+ // fetchWithdrawals ('USDT') returns the corresponding withdrawals
297
+ // with a USDTTRON or a USDTETH currency id, respectfully
298
+ // therefore we have map them back to the original code USDT
299
+ // otherwise the returned withdrawals are filtered out
300
+ 'USDTBSC': 'USDT',
301
+ 'USDTTRON': 'USDT',
302
+ 'USDTETH': 'USDT',
303
+ 'UST': 'USTC',
304
+ },
305
+ 'options': {
306
+ 'defaultType': 'spot',
307
+ 'createMarketBuyOrderRequiresPrice': true,
308
+ 'networks': {
309
+ 'BEP20': 'BSC',
310
+ 'ERC20': 'ETH',
311
+ 'TRC20': 'TRON',
312
+ 'TRX': 'TRON',
313
+ },
314
+ 'networksById': {
315
+ 'TRX': 'TRC20',
316
+ 'TRON': 'TRC20',
317
+ },
318
+ 'limits': {
319
+ 'cost': {
320
+ 'min': {
321
+ 'BTC': 0.0001,
322
+ 'ETH': 0.0001,
323
+ 'USDT': 1.0,
324
+ 'TRX': 100,
325
+ 'BNB': 0.06,
326
+ 'USDC': 1.0,
327
+ 'USDJ': 1.0,
328
+ 'TUSD': 0.0001,
329
+ 'DAI': 1.0,
330
+ 'PAX': 1.0,
331
+ 'BUSD': 1.0,
332
+ },
333
+ },
334
+ },
335
+ 'accountsByType': {
336
+ 'spot': 'spot',
337
+ 'future': 'futures',
338
+ },
339
+ 'accountsById': {
340
+ 'exchange': 'spot',
341
+ 'futures': 'future',
342
+ },
343
+ },
344
+ 'features': {
345
+ 'default': {
346
+ 'sandbox': true,
347
+ 'createOrder': {
348
+ 'marginMode': true,
349
+ 'triggerPrice': true,
350
+ 'triggerPriceType': undefined,
351
+ 'triggerDirection': false,
352
+ 'stopLossPrice': false,
353
+ 'takeProfitPrice': false,
354
+ 'attachedStopLossTakeProfit': undefined,
355
+ 'timeInForce': {
356
+ 'IOC': true,
357
+ 'FOK': true,
358
+ 'PO': true,
359
+ 'GTD': false,
360
+ },
361
+ 'hedged': false,
362
+ 'leverage': false,
363
+ 'marketBuyByCost': true,
364
+ 'marketBuyRequiresPrice': false,
365
+ 'selfTradePrevention': true,
366
+ 'trailing': false,
367
+ 'iceberg': false,
368
+ },
369
+ 'createOrders': {
370
+ 'max': 20,
371
+ },
372
+ 'fetchMyTrades': {
373
+ 'marginMode': false,
374
+ 'limit': 1000,
375
+ 'daysBack': 100000,
376
+ 'untilDays': 100000,
377
+ 'symbolRequired': false,
378
+ },
379
+ 'fetchOrder': {
380
+ 'marginMode': false,
381
+ 'trigger': false,
382
+ 'trailing': false,
383
+ 'symbolRequired': false,
384
+ },
385
+ 'fetchOpenOrders': {
386
+ 'marginMode': false,
387
+ 'limit': 2000,
388
+ 'trigger': false,
389
+ 'trailing': false,
390
+ 'symbolRequired': false,
391
+ },
392
+ 'fetchOrders': undefined,
393
+ 'fetchClosedOrders': undefined,
394
+ 'fetchOHLCV': {
395
+ 'limit': 500,
396
+ },
397
+ },
398
+ 'spot': {
399
+ 'extends': 'default',
400
+ },
401
+ 'forContracts': {
402
+ 'extends': 'default',
403
+ 'createOrder': {
404
+ 'marginMode': true,
405
+ 'triggerPrice': false,
406
+ 'hedged': true,
407
+ 'stpMode': true,
408
+ 'marketBuyByCost': false,
409
+ },
410
+ 'createOrders': {
411
+ 'max': 10,
412
+ },
413
+ 'fetchOpenOrders': {
414
+ 'limit': 100,
415
+ },
416
+ 'fetchClosedOrders': {
417
+ 'marginMode': false,
418
+ 'limit': 100,
419
+ 'daysBack': undefined,
420
+ 'daysBackCanceled': 1 / 6,
421
+ 'untilDays': undefined,
422
+ 'trigger': false,
423
+ 'trailing': false,
424
+ 'symbolRequired': false,
425
+ },
426
+ 'fetchMyTrades': {
427
+ 'limit': 100,
428
+ 'untilDays': 90,
429
+ },
430
+ },
431
+ 'swap': {
432
+ 'linear': {
433
+ 'extends': 'forContracts',
434
+ },
435
+ 'inverse': {
436
+ 'extends': 'forContracts',
437
+ },
438
+ },
439
+ 'future': {
440
+ 'linear': {
441
+ 'extends': 'forContracts',
442
+ },
443
+ 'inverse': {
444
+ 'extends': 'forContracts',
445
+ },
446
+ },
447
+ },
448
+ 'precisionMode': TICK_SIZE,
449
+ 'exceptions': {
450
+ 'exact': {
451
+ // General
452
+ '500': ExchangeNotAvailable,
453
+ '603': RequestTimeout,
454
+ '601': BadRequest,
455
+ '415': ExchangeError,
456
+ '602': ArgumentsRequired,
457
+ // Accounts
458
+ '21604': BadRequest,
459
+ '21600': AuthenticationError,
460
+ '21605': AuthenticationError,
461
+ '21102': ExchangeError,
462
+ '21100': AuthenticationError,
463
+ '21704': AuthenticationError,
464
+ '21700': BadRequest,
465
+ '21705': BadRequest,
466
+ '21707': ExchangeError,
467
+ '21708': BadRequest,
468
+ '21601': AccountSuspended,
469
+ '21711': ExchangeError,
470
+ '21709': InsufficientFunds,
471
+ '250000': ExchangeError,
472
+ '250001': BadRequest,
473
+ '250002': BadRequest,
474
+ '250003': BadRequest,
475
+ '250004': BadRequest,
476
+ '250005': InsufficientFunds,
477
+ '250008': BadRequest,
478
+ '250012': ExchangeError,
479
+ // Trading
480
+ '21110': BadRequest,
481
+ '10040': BadSymbol,
482
+ '10060': ExchangeError,
483
+ '10020': BadSymbol,
484
+ '10041': BadSymbol,
485
+ '21340': OnMaintenance,
486
+ '21341': InvalidOrder,
487
+ '21342': InvalidOrder,
488
+ '21343': InvalidOrder,
489
+ '21351': AccountSuspended,
490
+ '21352': BadSymbol,
491
+ '21353': PermissionDenied,
492
+ '21354': PermissionDenied,
493
+ '21359': OrderNotFound,
494
+ '21360': InvalidOrder,
495
+ '24106': BadRequest,
496
+ '24201': ExchangeNotAvailable,
497
+ // Orders
498
+ '21301': OrderNotFound,
499
+ '21302': ExchangeError,
500
+ '21304': ExchangeError,
501
+ '21305': OrderNotFound,
502
+ '21307': ExchangeError,
503
+ '21309': InvalidOrder,
504
+ '21310': InvalidOrder,
505
+ '21311': InvalidOrder,
506
+ '21312': InvalidOrder,
507
+ '21314': InvalidOrder,
508
+ '21315': InvalidOrder,
509
+ '21317': InvalidOrder,
510
+ '21319': InvalidOrder,
511
+ '21320': InvalidOrder,
512
+ '21321': InvalidOrder,
513
+ '21322': InvalidOrder,
514
+ '21324': BadRequest,
515
+ '21327': InvalidOrder,
516
+ '21328': InvalidOrder,
517
+ '21330': InvalidOrder,
518
+ '21335': InvalidOrder,
519
+ '21336': InvalidOrder,
520
+ '21337': InvalidOrder,
521
+ '21344': InvalidOrder,
522
+ '21345': InvalidOrder,
523
+ '21346': InvalidOrder,
524
+ '21348': InvalidOrder,
525
+ '21347': InvalidOrder,
526
+ '21349': InvalidOrder,
527
+ '21350': InvalidOrder,
528
+ '21355': ExchangeError,
529
+ '21356': BadRequest,
530
+ '21721': InsufficientFunds,
531
+ '24101': BadSymbol,
532
+ '24102': InvalidOrder,
533
+ '24103': InvalidOrder,
534
+ '24104': InvalidOrder,
535
+ '24105': InvalidOrder,
536
+ '25020': InvalidOrder,
537
+ // Smartorders
538
+ '25000': InvalidOrder,
539
+ '25001': InvalidOrder,
540
+ '25002': InvalidOrder,
541
+ '25003': ExchangeError,
542
+ '25004': InvalidOrder,
543
+ '25005': ExchangeError,
544
+ '25006': InvalidOrder,
545
+ '25007': InvalidOrder,
546
+ '25008': InvalidOrder,
547
+ '25009': ExchangeError,
548
+ '25010': PermissionDenied,
549
+ '25011': InvalidOrder,
550
+ '25012': ExchangeError,
551
+ '25013': OrderNotFound,
552
+ '25014': OrderNotFound,
553
+ '25015': OrderNotFound,
554
+ '25016': ExchangeError,
555
+ '25017': ExchangeError,
556
+ '25018': BadRequest,
557
+ '25019': BadSymbol, // Invalid symbol
558
+ },
559
+ 'broad': {},
560
+ },
561
+ });
562
+ }
563
+ parseOHLCV(ohlcv, market = undefined) {
564
+ //
565
+ // spot:
566
+ //
567
+ // [
568
+ // [
569
+ // "22814.01",
570
+ // "22937.42",
571
+ // "22832.57",
572
+ // "22937.42",
573
+ // "3916.58764051",
574
+ // "0.171199",
575
+ // "2982.64647063",
576
+ // "0.130295",
577
+ // 33,
578
+ // 0,
579
+ // "22877.449915304470460711",
580
+ // "MINUTE_5",
581
+ // 1659664800000,
582
+ // 1659665099999
583
+ // ]
584
+ // ]
585
+ //
586
+ // contract:
587
+ //
588
+ // [
589
+ // "84207.02",
590
+ // "84320.85",
591
+ // "84207.02",
592
+ // "84253.83",
593
+ // "3707.5395",
594
+ // "44",
595
+ // "14",
596
+ // "1740770040000",
597
+ // "1740770099999",
598
+ // ],
599
+ //
600
+ const ohlcvLength = ohlcv.length;
601
+ const isContract = ohlcvLength === 9;
602
+ if (isContract) {
603
+ return [
604
+ this.safeInteger(ohlcv, 7),
605
+ this.safeNumber(ohlcv, 2),
606
+ this.safeNumber(ohlcv, 1),
607
+ this.safeNumber(ohlcv, 0),
608
+ this.safeNumber(ohlcv, 3),
609
+ this.safeNumber(ohlcv, 5),
610
+ ];
611
+ }
612
+ return [
613
+ this.safeInteger(ohlcv, 12),
614
+ this.safeNumber(ohlcv, 2),
615
+ this.safeNumber(ohlcv, 1),
616
+ this.safeNumber(ohlcv, 0),
617
+ this.safeNumber(ohlcv, 3),
618
+ this.safeNumber(ohlcv, 5),
619
+ ];
620
+ }
621
+ /**
622
+ * @method
623
+ * @name poloniex#fetchOHLCV
624
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
625
+ * @see https://api-docs.poloniex.com/spot/api/public/market-data#candles
626
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-kline-data
627
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
628
+ * @param {string} timeframe the length of time each candle represents
629
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
630
+ * @param {int} [limit] the maximum amount of candles to fetch
631
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
632
+ * @param {int} [params.until] timestamp in ms
633
+ * @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)
634
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
635
+ */
636
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
637
+ await this.loadMarkets();
638
+ let paginate = false;
639
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
640
+ if (paginate) {
641
+ return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 500);
642
+ }
643
+ const market = this.market(symbol);
644
+ let request = {
645
+ 'symbol': market['id'],
646
+ 'interval': this.safeString(this.timeframes, timeframe, timeframe),
647
+ };
648
+ const keyStart = market['spot'] ? 'startTime' : 'sTime';
649
+ const keyEnd = market['spot'] ? 'endTime' : 'eTime';
650
+ if (since !== undefined) {
651
+ request[keyStart] = since;
652
+ }
653
+ if (limit !== undefined) {
654
+ // limit should in between 100 and 500
655
+ request['limit'] = limit;
656
+ }
657
+ [request, params] = this.handleUntilOption(keyEnd, request, params);
658
+ if (market['contract']) {
659
+ if (this.inArray(timeframe, ['10m', '1M'])) {
660
+ throw new NotSupported(this.id + ' ' + timeframe + ' ' + market['type'] + ' fetchOHLCV is not supported');
661
+ }
662
+ const responseRaw = await this.swapPublicGetV3MarketCandles(this.extend(request, params));
663
+ //
664
+ // {
665
+ // code: "200",
666
+ // msg: "Success",
667
+ // data: [
668
+ // [
669
+ // "84207.02",
670
+ // "84320.85",
671
+ // "84207.02",
672
+ // "84253.83",
673
+ // "3707.5395",
674
+ // "44",
675
+ // "14",
676
+ // "1740770040000",
677
+ // "1740770099999",
678
+ // ],
679
+ //
680
+ const data = this.safeList(responseRaw, 'data');
681
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
682
+ }
683
+ const response = await this.publicGetMarketsSymbolCandles(this.extend(request, params));
684
+ //
685
+ // [
686
+ // [
687
+ // "22814.01",
688
+ // "22937.42",
689
+ // "22832.57",
690
+ // "22937.42",
691
+ // "3916.58764051",
692
+ // "0.171199",
693
+ // "2982.64647063",
694
+ // "0.130295",
695
+ // 33,
696
+ // 0,
697
+ // "22877.449915304470460711",
698
+ // "MINUTE_5",
699
+ // 1659664800000,
700
+ // 1659665099999
701
+ // ]
702
+ // ]
703
+ //
704
+ return this.parseOHLCVs(response, market, timeframe, since, limit);
705
+ }
706
+ async loadMarkets(reload = false, params = {}) {
707
+ const markets = await super.loadMarkets(reload, params);
708
+ const currenciesByNumericId = this.safeValue(this.options, 'currenciesByNumericId');
709
+ if ((currenciesByNumericId === undefined) || reload) {
710
+ this.options['currenciesByNumericId'] = this.indexBy(this.currencies, 'numericId');
711
+ }
712
+ return markets;
713
+ }
714
+ /**
715
+ * @method
716
+ * @name poloniex#fetchMarkets
717
+ * @description retrieves data on all markets for poloniex
718
+ * @see https://api-docs.poloniex.com/spot/api/public/reference-data#symbol-information
719
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-all-product-info
720
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
721
+ * @returns {object[]} an array of objects representing market data
722
+ */
723
+ async fetchMarkets(params = {}) {
724
+ const promises = [this.fetchSpotMarkets(params), this.fetchSwapMarkets(params)];
725
+ const results = await Promise.all(promises);
726
+ return this.arrayConcat(results[0], results[1]);
727
+ }
728
+ async fetchSpotMarkets(params = {}) {
729
+ const markets = await this.publicGetMarkets(params);
730
+ //
731
+ // [
732
+ // {
733
+ // "symbol" : "BTS_BTC",
734
+ // "baseCurrencyName" : "BTS",
735
+ // "quoteCurrencyName" : "BTC",
736
+ // "displayName" : "BTS/BTC",
737
+ // "state" : "NORMAL",
738
+ // "visibleStartTime" : 1659018816626,
739
+ // "tradableStartTime" : 1659018816626,
740
+ // "symbolTradeLimit" : {
741
+ // "symbol" : "BTS_BTC",
742
+ // "priceScale" : 10,
743
+ // "quantityScale" : 0,
744
+ // "amountScale" : 8,
745
+ // "minQuantity" : "100",
746
+ // "minAmount" : "0.00001",
747
+ // "highestBid" : "0",
748
+ // "lowestAsk" : "0"
749
+ // }
750
+ // }
751
+ // ]
752
+ //
753
+ return this.parseMarkets(markets);
754
+ }
755
+ async fetchSwapMarkets(params = {}) {
756
+ // do similar as spot per https://api-docs.poloniex.com/v3/futures/api/market/get-product-info
757
+ const response = await this.swapPublicGetV3MarketAllInstruments(params);
758
+ //
759
+ // {
760
+ // "code": "200",
761
+ // "msg": "Success",
762
+ // "data": [
763
+ // {
764
+ // "symbol": "BNB_USDT_PERP",
765
+ // "bAsset": ".PBNBUSDT",
766
+ // "bCcy": "BNB",
767
+ // "qCcy": "USDT",
768
+ // "visibleStartTime": "1620390600000",
769
+ // "tradableStartTime": "1620390600000",
770
+ // "sCcy": "USDT",
771
+ // "tSz": "0.001",
772
+ // "pxScale": "0.001,0.01,0.1,1,10",
773
+ // "lotSz": "1",
774
+ // "minSz": "1",
775
+ // "ctVal": "0.1",
776
+ // "status": "OPEN",
777
+ // "oDate": "1620287590000",
778
+ // "maxPx": "1000000",
779
+ // "minPx": "0.001",
780
+ // "maxQty": "1000000",
781
+ // "minQty": "1",
782
+ // "maxLever": "50",
783
+ // "lever": "10",
784
+ // "ctType": "LINEAR",
785
+ // "alias": "",
786
+ // "iM": "0.02",
787
+ // "mM": "0.0115",
788
+ // "mR": "2000",
789
+ // "buyLmt": "",
790
+ // "sellLmt": "",
791
+ // "ordPxRange": "0.05",
792
+ // "marketMaxQty": "2800",
793
+ // "limitMaxQty": "1000000"
794
+ // },
795
+ //
796
+ const markets = this.safeList(response, 'data');
797
+ return this.parseMarkets(markets);
798
+ }
799
+ parseMarket(market) {
800
+ if ('ctType' in market) {
801
+ return this.parseSwapMarket(market);
802
+ }
803
+ else {
804
+ return this.parseSpotMarket(market);
805
+ }
806
+ }
807
+ parseSpotMarket(market) {
808
+ const id = this.safeString(market, 'symbol');
809
+ const baseId = this.safeString(market, 'baseCurrencyName');
810
+ const quoteId = this.safeString(market, 'quoteCurrencyName');
811
+ const base = this.safeCurrencyCode(baseId);
812
+ const quote = this.safeCurrencyCode(quoteId);
813
+ const state = this.safeString(market, 'state');
814
+ const active = state === 'NORMAL';
815
+ const symbolTradeLimit = this.safeValue(market, 'symbolTradeLimit');
816
+ // these are known defaults
817
+ return {
818
+ 'id': id,
819
+ 'symbol': base + '/' + quote,
820
+ 'base': base,
821
+ 'quote': quote,
822
+ 'settle': undefined,
823
+ 'baseId': baseId,
824
+ 'quoteId': quoteId,
825
+ 'settleId': undefined,
826
+ 'type': 'spot',
827
+ 'spot': true,
828
+ 'margin': false,
829
+ 'swap': false,
830
+ 'future': false,
831
+ 'option': false,
832
+ 'active': active,
833
+ 'contract': false,
834
+ 'linear': undefined,
835
+ 'inverse': undefined,
836
+ 'contractSize': undefined,
837
+ 'expiry': undefined,
838
+ 'expiryDatetime': undefined,
839
+ 'strike': undefined,
840
+ 'optionType': undefined,
841
+ 'precision': {
842
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(symbolTradeLimit, 'quantityScale'))),
843
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(symbolTradeLimit, 'priceScale'))),
844
+ },
845
+ 'limits': {
846
+ 'amount': {
847
+ 'min': this.safeNumber(symbolTradeLimit, 'minQuantity'),
848
+ 'max': undefined,
849
+ },
850
+ 'price': {
851
+ 'min': undefined,
852
+ 'max': undefined,
853
+ },
854
+ 'cost': {
855
+ 'min': this.safeNumber(symbolTradeLimit, 'minAmount'),
856
+ 'max': undefined,
857
+ },
858
+ },
859
+ 'created': this.safeInteger(market, 'tradableStartTime'),
860
+ 'info': market,
861
+ };
862
+ }
863
+ parseSwapMarket(market) {
864
+ //
865
+ // {
866
+ // "symbol": "BNB_USDT_PERP",
867
+ // "bAsset": ".PBNBUSDT",
868
+ // "bCcy": "BNB",
869
+ // "qCcy": "USDT",
870
+ // "visibleStartTime": "1620390600000",
871
+ // "tradableStartTime": "1620390600000",
872
+ // "sCcy": "USDT",
873
+ // "tSz": "0.001",
874
+ // "pxScale": "0.001,0.01,0.1,1,10",
875
+ // "lotSz": "1",
876
+ // "minSz": "1",
877
+ // "ctVal": "0.1",
878
+ // "status": "OPEN",
879
+ // "oDate": "1620287590000",
880
+ // "maxPx": "1000000",
881
+ // "minPx": "0.001",
882
+ // "maxQty": "1000000",
883
+ // "minQty": "1",
884
+ // "maxLever": "50",
885
+ // "lever": "10",
886
+ // "ctType": "LINEAR",
887
+ // "alias": "",
888
+ // "iM": "0.02",
889
+ // "mM": "0.0115",
890
+ // "mR": "2000",
891
+ // "buyLmt": "",
892
+ // "sellLmt": "",
893
+ // "ordPxRange": "0.05",
894
+ // "marketMaxQty": "2800",
895
+ // "limitMaxQty": "1000000"
896
+ // },
897
+ //
898
+ const id = this.safeString(market, 'symbol');
899
+ const baseId = this.safeString(market, 'bCcy');
900
+ const quoteId = this.safeString(market, 'qCcy');
901
+ const settleId = this.safeString(market, 'sCcy');
902
+ const base = this.safeCurrencyCode(baseId);
903
+ const quote = this.safeCurrencyCode(quoteId);
904
+ const settle = this.safeCurrencyCode(settleId);
905
+ const status = this.safeString(market, 'status');
906
+ const active = status === 'OPEN';
907
+ const linear = market['ctType'] === 'LINEAR';
908
+ let symbol = base + '/' + quote;
909
+ if (linear) {
910
+ symbol += ':' + settle;
911
+ }
912
+ else {
913
+ // actually, exchange does not have any inverse future now
914
+ symbol += ':' + base;
915
+ }
916
+ const alias = this.safeString(market, 'alias');
917
+ let type = 'swap';
918
+ if (alias !== undefined) {
919
+ type = 'future';
920
+ }
921
+ return {
922
+ 'id': id,
923
+ 'symbol': symbol,
924
+ 'base': base,
925
+ 'quote': quote,
926
+ 'settle': settle,
927
+ 'baseId': baseId,
928
+ 'quoteId': quoteId,
929
+ 'settleId': settleId,
930
+ 'type': (type === 'future') ? 'future' : 'swap',
931
+ 'spot': false,
932
+ 'margin': false,
933
+ 'swap': type === 'swap',
934
+ 'future': type === 'future',
935
+ 'option': false,
936
+ 'active': active,
937
+ 'contract': true,
938
+ 'linear': linear,
939
+ 'inverse': !linear,
940
+ 'contractSize': this.safeNumber(market, 'ctVal'),
941
+ 'expiry': undefined,
942
+ 'expiryDatetime': undefined,
943
+ 'strike': undefined,
944
+ 'optionType': undefined,
945
+ 'taker': this.safeNumber(market, 'tFee'),
946
+ 'maker': this.safeNumber(market, 'mFee'),
947
+ 'precision': {
948
+ 'amount': this.safeNumber(market, 'lotSz'),
949
+ 'price': this.safeNumber(market, 'tSz'),
950
+ },
951
+ 'limits': {
952
+ 'amount': {
953
+ 'min': this.safeNumber(market, 'minSz'),
954
+ 'max': this.safeNumber(market, 'limitMaxQty'),
955
+ },
956
+ 'price': {
957
+ 'min': this.safeNumber(market, 'minPx'),
958
+ 'max': this.safeNumber(market, 'maxPx'),
959
+ },
960
+ 'cost': {
961
+ 'min': undefined,
962
+ 'max': undefined,
963
+ },
964
+ 'leverage': {
965
+ 'max': this.safeNumber(market, 'maxLever'),
966
+ 'min': undefined,
967
+ },
968
+ },
969
+ 'created': this.safeInteger(market, 'oDate'),
970
+ 'info': market,
971
+ };
972
+ }
973
+ /**
974
+ * @method
975
+ * @name poloniex#fetchTime
976
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
977
+ * @see https://api-docs.poloniex.com/spot/api/public/reference-data#system-timestamp
978
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
979
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
980
+ */
981
+ async fetchTime(params = {}) {
982
+ const response = await this.publicGetTimestamp(params);
983
+ return this.safeInteger(response, 'serverTime');
984
+ }
985
+ parseTicker(ticker, market = undefined) {
986
+ //
987
+ // spot:
988
+ //
989
+ // {
990
+ // "symbol" : "BTC_USDT",
991
+ // "open" : "26053.33",
992
+ // "low" : "26053.33",
993
+ // "high" : "26798.02",
994
+ // "close" : "26447.58",
995
+ // "quantity" : "6116.210188",
996
+ // "amount" : "161082122.88450926",
997
+ // "tradeCount" : "134709",
998
+ // "startTime" : "1692784440000",
999
+ // "closeTime" : "1692870839630",
1000
+ // "displayName" : "BTC/USDT",
1001
+ // "dailyChange" : "0.0151",
1002
+ // "bid" : "26447.57",
1003
+ // "bidQuantity" : "0.016313",
1004
+ // "ask" : "26447.58",
1005
+ // "askQuantity" : "0.068307",
1006
+ // "ts" : "1692870845446",
1007
+ // "markPrice" : "26444.11"
1008
+ // }
1009
+ //
1010
+ // swap:
1011
+ //
1012
+ // {
1013
+ // "s": "XRP_USDT_PERP",
1014
+ // "o": "2.0503",
1015
+ // "l": "2.0066",
1016
+ // "h": "2.216",
1017
+ // "c": "2.1798",
1018
+ // "qty": "21090",
1019
+ // "amt": "451339.65",
1020
+ // "tC": "3267",
1021
+ // "sT": "1740736380000",
1022
+ // "cT": "1740822777559",
1023
+ // "dN": "XRP/USDT/PERP",
1024
+ // "dC": "0.0632",
1025
+ // "bPx": "2.175",
1026
+ // "bSz": "3",
1027
+ // "aPx": "2.1831",
1028
+ // "aSz": "111",
1029
+ // "mPx": "2.1798",
1030
+ // "iPx": "2.1834"
1031
+ // },
1032
+ //
1033
+ const timestamp = this.safeInteger2(ticker, 'ts', 'cT');
1034
+ const marketId = this.safeString2(ticker, 'symbol', 's');
1035
+ market = this.safeMarket(marketId);
1036
+ const relativeChange = this.safeString2(ticker, 'dailyChange', 'dc');
1037
+ const percentage = Precise.stringMul(relativeChange, '100');
1038
+ return this.safeTicker({
1039
+ 'id': marketId,
1040
+ 'symbol': market['symbol'],
1041
+ 'timestamp': timestamp,
1042
+ 'datetime': this.iso8601(timestamp),
1043
+ 'high': this.safeString2(ticker, 'high', 'h'),
1044
+ 'low': this.safeString2(ticker, 'low', 'l'),
1045
+ 'bid': this.safeString2(ticker, 'bid', 'bPx'),
1046
+ 'bidVolume': this.safeString2(ticker, 'bidQuantity', 'bSz'),
1047
+ 'ask': this.safeString2(ticker, 'ask', 'aPx'),
1048
+ 'askVolume': this.safeString2(ticker, 'askQuantity', 'aSz'),
1049
+ 'vwap': undefined,
1050
+ 'open': this.safeString2(ticker, 'open', 'o'),
1051
+ 'close': this.safeString2(ticker, 'close', 'c'),
1052
+ 'previousClose': undefined,
1053
+ 'change': undefined,
1054
+ 'percentage': percentage,
1055
+ 'average': undefined,
1056
+ 'baseVolume': this.safeString2(ticker, 'quantity', 'qty'),
1057
+ 'quoteVolume': this.safeString2(ticker, 'amount', 'amt'),
1058
+ 'markPrice': this.safeString2(ticker, 'markPrice', 'mPx'),
1059
+ 'indexPrice': this.safeString(ticker, 'iPx'),
1060
+ 'info': ticker,
1061
+ }, market);
1062
+ }
1063
+ /**
1064
+ * @method
1065
+ * @name poloniex#fetchTickers
1066
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1067
+ * @see https://api-docs.poloniex.com/spot/api/public/market-data#ticker
1068
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-market-info
1069
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1070
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1071
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1072
+ */
1073
+ async fetchTickers(symbols = undefined, params = {}) {
1074
+ await this.loadMarkets();
1075
+ let market = undefined;
1076
+ const request = {};
1077
+ if (symbols !== undefined) {
1078
+ symbols = this.marketSymbols(symbols, undefined, true, true, false);
1079
+ const symbolsLength = symbols.length;
1080
+ if (symbolsLength > 0) {
1081
+ market = this.market(symbols[0]);
1082
+ if (symbolsLength === 1) {
1083
+ request['symbol'] = market['id'];
1084
+ }
1085
+ }
1086
+ }
1087
+ let marketType = undefined;
1088
+ [marketType, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
1089
+ if (marketType === 'swap') {
1090
+ const responseRaw = await this.swapPublicGetV3MarketTickers(this.extend(request, params));
1091
+ //
1092
+ // {
1093
+ // "code": "200",
1094
+ // "msg": "Success",
1095
+ // "data": [
1096
+ // {
1097
+ // "s": "XRP_USDT_PERP",
1098
+ // "o": "2.0503",
1099
+ // "l": "2.0066",
1100
+ // "h": "2.216",
1101
+ // "c": "2.1798",
1102
+ // "qty": "21090",
1103
+ // "amt": "451339.65",
1104
+ // "tC": "3267",
1105
+ // "sT": "1740736380000",
1106
+ // "cT": "1740822777559",
1107
+ // "dN": "XRP/USDT/PERP",
1108
+ // "dC": "0.0632",
1109
+ // "bPx": "2.175",
1110
+ // "bSz": "3",
1111
+ // "aPx": "2.1831",
1112
+ // "aSz": "111",
1113
+ // "mPx": "2.1798",
1114
+ // "iPx": "2.1834"
1115
+ // },
1116
+ //
1117
+ const data = this.safeList(responseRaw, 'data');
1118
+ return this.parseTickers(data, symbols);
1119
+ }
1120
+ const response = await this.publicGetMarketsTicker24h(params);
1121
+ //
1122
+ // [
1123
+ // {
1124
+ // "symbol" : "BTC_USDT",
1125
+ // "open" : "26053.33",
1126
+ // "low" : "26053.33",
1127
+ // "high" : "26798.02",
1128
+ // "close" : "26447.58",
1129
+ // "quantity" : "6116.210188",
1130
+ // "amount" : "161082122.88450926",
1131
+ // "tradeCount" : "134709",
1132
+ // "startTime" : "1692784440000",
1133
+ // "closeTime" : "1692870839630",
1134
+ // "displayName" : "BTC/USDT",
1135
+ // "dailyChange" : "0.0151",
1136
+ // "bid" : "26447.57",
1137
+ // "bidQuantity" : "0.016313",
1138
+ // "ask" : "26447.58",
1139
+ // "askQuantity" : "0.068307",
1140
+ // "ts" : "1692870845446",
1141
+ // "markPrice" : "26444.11"
1142
+ // }
1143
+ // ]
1144
+ //
1145
+ return this.parseTickers(response, symbols);
1146
+ }
1147
+ /**
1148
+ * @method
1149
+ * @name poloniex#fetchCurrencies
1150
+ * @description fetches all available currencies on an exchange
1151
+ * @see https://api-docs.poloniex.com/spot/api/public/reference-data#currency-information
1152
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1153
+ * @returns {object} an associative dictionary of currencies
1154
+ */
1155
+ async fetchCurrencies(params = {}) {
1156
+ const response = await this.publicGetCurrencies(this.extend(params, { 'includeMultiChainCurrencies': true }));
1157
+ //
1158
+ // [
1159
+ // {
1160
+ // "USDT": {
1161
+ // "id": 214,
1162
+ // "name": "Tether USD",
1163
+ // "description": "Sweep to Main Account",
1164
+ // "type": "address",
1165
+ // "withdrawalFee": "0.00000000",
1166
+ // "minConf": 2,
1167
+ // "depositAddress": null,
1168
+ // "blockchain": "OMNI",
1169
+ // "delisted": false,
1170
+ // "tradingState": "NORMAL",
1171
+ // "walletState": "DISABLED",
1172
+ // "walletDepositState": "DISABLED",
1173
+ // "walletWithdrawalState": "DISABLED",
1174
+ // "supportCollateral": true,
1175
+ // "supportBorrow": true,
1176
+ // "parentChain": null,
1177
+ // "isMultiChain": true,
1178
+ // "isChildChain": false,
1179
+ // "childChains": [
1180
+ // "USDTBSC",
1181
+ // "USDTETH",
1182
+ // "USDTSOL",
1183
+ // "USDTTRON"
1184
+ // ]
1185
+ // }
1186
+ // },
1187
+ // ...
1188
+ // {
1189
+ // "USDTBSC": {
1190
+ // "id": 582,
1191
+ // "name": "Binance-Peg BSC-USD",
1192
+ // "description": "Sweep to Main Account",
1193
+ // "type": "address",
1194
+ // "withdrawalFee": "0.00000000",
1195
+ // "minConf": 15,
1196
+ // "depositAddress": null,
1197
+ // "blockchain": "BSC",
1198
+ // "delisted": false,
1199
+ // "tradingState": "OFFLINE",
1200
+ // "walletState": "ENABLED",
1201
+ // "walletDepositState": "ENABLED",
1202
+ // "walletWithdrawalState": "DISABLED",
1203
+ // "supportCollateral": false,
1204
+ // "supportBorrow": false,
1205
+ // "parentChain": "USDT",
1206
+ // "isMultiChain": true,
1207
+ // "isChildChain": true,
1208
+ // "childChains": []
1209
+ // }
1210
+ // },
1211
+ // ...
1212
+ // ]
1213
+ //
1214
+ const result = {};
1215
+ // poloniex has a complicated structure of currencies, so we handle them differently
1216
+ // at first, turn the response into a normal dictionary
1217
+ const currenciesDict = {};
1218
+ for (let i = 0; i < response.length; i++) {
1219
+ const item = this.safeDict(response, i);
1220
+ const ids = Object.keys(item);
1221
+ const id = this.safeString(ids, 0);
1222
+ currenciesDict[id] = item[id];
1223
+ }
1224
+ const keys = Object.keys(currenciesDict);
1225
+ for (let i = 0; i < keys.length; i++) {
1226
+ const id = keys[i];
1227
+ const entry = currenciesDict[id];
1228
+ const code = this.safeCurrencyCode(id);
1229
+ // skip childChains, as they are collected in parentChain loop
1230
+ if (this.safeBool(entry, 'isChildChain')) {
1231
+ continue;
1232
+ }
1233
+ const allChainEntries = [];
1234
+ const childChains = this.safeList(entry, 'childChains', []);
1235
+ if (childChains !== undefined) {
1236
+ for (let j = 0; j < childChains.length; j++) {
1237
+ const childChainId = childChains[j];
1238
+ const childNetworkEntry = this.safeDict(currenciesDict, childChainId);
1239
+ allChainEntries.push(childNetworkEntry);
1240
+ }
1241
+ }
1242
+ allChainEntries.push(entry);
1243
+ const networks = {};
1244
+ for (let j = 0; j < allChainEntries.length; j++) {
1245
+ const chainEntry = allChainEntries[j];
1246
+ const networkName = this.safeString(chainEntry, 'blockchain');
1247
+ const networkCode = this.networkIdToCode(networkName, code);
1248
+ const specialNetworkId = this.safeString(childChains, j, id); // in case it's primary chain, defeault to ID
1249
+ networks[networkCode] = {
1250
+ 'info': chainEntry,
1251
+ 'id': specialNetworkId,
1252
+ 'numericId': this.safeInteger(chainEntry, 'id'),
1253
+ 'network': networkCode,
1254
+ 'active': this.safeBool(chainEntry, 'walletState'),
1255
+ 'deposit': this.safeString(chainEntry, 'walletDepositState') === 'ENABLED',
1256
+ 'withdraw': this.safeString(chainEntry, 'walletWithdrawalState') === 'ENABLED',
1257
+ 'fee': this.safeNumber(chainEntry, 'withdrawalFee'),
1258
+ 'precision': undefined,
1259
+ 'limits': {
1260
+ 'withdraw': {
1261
+ 'min': undefined,
1262
+ 'max': undefined,
1263
+ },
1264
+ 'deposit': {
1265
+ 'min': undefined,
1266
+ 'max': undefined,
1267
+ },
1268
+ },
1269
+ };
1270
+ }
1271
+ result[code] = this.safeCurrencyStructure({
1272
+ 'info': entry,
1273
+ 'code': code,
1274
+ 'id': id,
1275
+ 'numericId': this.safeInteger(entry, 'id'),
1276
+ 'type': 'crypto',
1277
+ 'name': this.safeString(entry, 'name'),
1278
+ 'active': undefined,
1279
+ 'deposit': undefined,
1280
+ 'withdraw': undefined,
1281
+ 'fee': undefined,
1282
+ 'precision': undefined,
1283
+ 'limits': {
1284
+ 'amount': {
1285
+ 'min': undefined,
1286
+ 'max': undefined,
1287
+ },
1288
+ 'withdraw': {
1289
+ 'min': undefined,
1290
+ 'max': undefined,
1291
+ },
1292
+ 'deposit': {
1293
+ 'min': undefined,
1294
+ 'max': undefined,
1295
+ },
1296
+ },
1297
+ 'networks': networks,
1298
+ });
1299
+ }
1300
+ return result;
1301
+ }
1302
+ /**
1303
+ * @method
1304
+ * @name poloniex#fetchTicker
1305
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
1306
+ * @see https://api-docs.poloniex.com/spot/api/public/market-data#ticker
1307
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-market-info
1308
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
1309
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1310
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
1311
+ */
1312
+ async fetchTicker(symbol, params = {}) {
1313
+ await this.loadMarkets();
1314
+ const market = this.market(symbol);
1315
+ const request = {
1316
+ 'symbol': market['id'],
1317
+ };
1318
+ if (market['contract']) {
1319
+ const tickers = await this.fetchTickers([market['symbol']], params);
1320
+ return this.safeDict(tickers, symbol);
1321
+ }
1322
+ const response = await this.publicGetMarketsSymbolTicker24h(this.extend(request, params));
1323
+ //
1324
+ // {
1325
+ // "symbol" : "BTC_USDT",
1326
+ // "open" : "26053.33",
1327
+ // "low" : "26053.33",
1328
+ // "high" : "26798.02",
1329
+ // "close" : "26447.58",
1330
+ // "quantity" : "6116.210188",
1331
+ // "amount" : "161082122.88450926",
1332
+ // "tradeCount" : "134709",
1333
+ // "startTime" : "1692784440000",
1334
+ // "closeTime" : "1692870839630",
1335
+ // "displayName" : "BTC/USDT",
1336
+ // "dailyChange" : "0.0151",
1337
+ // "bid" : "26447.57",
1338
+ // "bidQuantity" : "0.016313",
1339
+ // "ask" : "26447.58",
1340
+ // "askQuantity" : "0.068307",
1341
+ // "ts" : "1692870845446",
1342
+ // "markPrice" : "26444.11"
1343
+ // }
1344
+ //
1345
+ return this.parseTicker(response, market);
1346
+ }
1347
+ parseTrade(trade, market = undefined) {
1348
+ //
1349
+ // fetchTrades
1350
+ //
1351
+ // spot:
1352
+ //
1353
+ // {
1354
+ // "id" : "60014521",
1355
+ // "price" : "23162.94",
1356
+ // "quantity" : "0.00009",
1357
+ // "amount" : "2.0846646",
1358
+ // "takerSide" : "SELL",
1359
+ // "ts" : 1659684602042,
1360
+ // "createTime" : 1659684602036
1361
+ // }
1362
+ //
1363
+ // swap:
1364
+ //
1365
+ // {
1366
+ // "id": "105807376",
1367
+ // "side": "buy",
1368
+ // "px": "84410.57",
1369
+ // "qty": "1",
1370
+ // "amt": "84.41057",
1371
+ // "cT": "1740777563557",
1372
+ // }
1373
+ //
1374
+ // fetchMyTrades
1375
+ //
1376
+ // spot:
1377
+ //
1378
+ // {
1379
+ // "id": "32164924331503616",
1380
+ // "symbol": "LINK_USDT",
1381
+ // "accountType": "SPOT",
1382
+ // "orderId": "32164923987566592",
1383
+ // "side": "SELL",
1384
+ // "type": "MARKET",
1385
+ // "matchRole": "TAKER",
1386
+ // "createTime": 1648635115525,
1387
+ // "price": "11",
1388
+ // "quantity": "0.5",
1389
+ // "amount": "5.5",
1390
+ // "feeCurrency": "USDT",
1391
+ // "feeAmount": "0.007975",
1392
+ // "pageId": "32164924331503616",
1393
+ // "clientOrderId": "myOwnId-321"
1394
+ // }
1395
+ //
1396
+ // swap:
1397
+ //
1398
+ // {
1399
+ // "symbol": "BTC_USDT_PERP",
1400
+ // "trdId": "105813553",
1401
+ // "side": "SELL",
1402
+ // "type": "TRADE",
1403
+ // "mgnMode": "CROSS",
1404
+ // "ordType": "MARKET",
1405
+ // "clOrdId": "polo418912106147315112",
1406
+ // "role": "TAKER",
1407
+ // "px": "84704.9",
1408
+ // "qty": "1",
1409
+ // "cTime": "1740842829430",
1410
+ // "uTime": "1740842829450",
1411
+ // "feeCcy": "USDT",
1412
+ // "feeAmt": "0.04235245",
1413
+ // "deductCcy": "",
1414
+ // "deductAmt": "0",
1415
+ // "feeRate": "0.0005",
1416
+ // "id": "418912106342654592",
1417
+ // "posSide": "BOTH",
1418
+ // "ordId": "418912106147315112",
1419
+ // "qCcy": "USDT",
1420
+ // "value": "84.7049",
1421
+ // "actType": "TRADING"
1422
+ // },
1423
+ //
1424
+ // fetchOrderTrades (taker trades)
1425
+ //
1426
+ // {
1427
+ // "id": "30341456333942784",
1428
+ // "symbol": "LINK_USDT",
1429
+ // "accountType": "SPOT",
1430
+ // "orderId": "30249408733945856",
1431
+ // "side": "BUY",
1432
+ // "type": "LIMIT",
1433
+ // "matchRole": "MAKER",
1434
+ // "createTime": 1648200366864,
1435
+ // "price": "3.1",
1436
+ // "quantity": "1",
1437
+ // "amount": "3.1",
1438
+ // "feeCurrency": "LINK",
1439
+ // "feeAmount": "0.00145",
1440
+ // "pageId": "30341456333942784",
1441
+ // "clientOrderId": ""
1442
+ // }
1443
+ //
1444
+ const id = this.safeStringN(trade, ['id', 'tradeID', 'trdId']);
1445
+ const orderId = this.safeString2(trade, 'orderId', 'ordId');
1446
+ const timestamp = this.safeIntegerN(trade, ['ts', 'createTime', 'cT', 'cTime']);
1447
+ const marketId = this.safeString(trade, 'symbol');
1448
+ market = this.safeMarket(marketId, market, '_');
1449
+ const symbol = market['symbol'];
1450
+ const side = this.safeStringLower2(trade, 'side', 'takerSide');
1451
+ let fee = undefined;
1452
+ const priceString = this.safeString2(trade, 'price', 'px');
1453
+ const amountString = this.safeString2(trade, 'quantity', 'qty');
1454
+ const costString = this.safeString2(trade, 'amount', 'amt');
1455
+ const feeCurrencyId = this.safeString2(trade, 'feeCurrency', 'feeCcy');
1456
+ const feeCostString = this.safeString2(trade, 'feeAmount', 'feeAmt');
1457
+ if (feeCostString !== undefined) {
1458
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
1459
+ fee = {
1460
+ 'cost': feeCostString,
1461
+ 'currency': feeCurrencyCode,
1462
+ };
1463
+ }
1464
+ return this.safeTrade({
1465
+ 'id': id,
1466
+ 'info': trade,
1467
+ 'timestamp': timestamp,
1468
+ 'datetime': this.iso8601(timestamp),
1469
+ 'symbol': symbol,
1470
+ 'order': orderId,
1471
+ 'type': this.safeStringLower2(trade, 'ordType', 'type'),
1472
+ 'side': side,
1473
+ 'takerOrMaker': this.safeStringLower2(trade, 'matchRole', 'role'),
1474
+ 'price': priceString,
1475
+ 'amount': amountString,
1476
+ 'cost': costString,
1477
+ 'fee': fee,
1478
+ }, market);
1479
+ }
1480
+ /**
1481
+ * @method
1482
+ * @name poloniex#fetchTrades
1483
+ * @description get the list of most recent trades for a particular symbol
1484
+ * @see https://api-docs.poloniex.com/spot/api/public/market-data#trades
1485
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-execution-info
1486
+ * @param {string} symbol unified symbol of the market to fetch trades for
1487
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1488
+ * @param {int} [limit] the maximum amount of trades to fetch
1489
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1490
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1491
+ */
1492
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1493
+ await this.loadMarkets();
1494
+ const market = this.market(symbol);
1495
+ const request = {
1496
+ 'symbol': market['id'],
1497
+ };
1498
+ if (limit !== undefined) {
1499
+ request['limit'] = limit; // max 1000, for spot & swap
1500
+ }
1501
+ if (market['contract']) {
1502
+ const response = await this.swapPublicGetV3MarketTrades(this.extend(request, params));
1503
+ //
1504
+ // {
1505
+ // code: "200",
1506
+ // msg: "Success",
1507
+ // data: [
1508
+ // {
1509
+ // id: "105807320", // descending order
1510
+ // side: "sell",
1511
+ // px: "84383.93",
1512
+ // qty: "1",
1513
+ // amt: "84.38393",
1514
+ // cT: "1740777074704",
1515
+ // },
1516
+ //
1517
+ const tradesList = this.safeList(response, 'data');
1518
+ return this.parseTrades(tradesList, market, since, limit);
1519
+ }
1520
+ const trades = await this.publicGetMarketsSymbolTrades(this.extend(request, params));
1521
+ //
1522
+ // [
1523
+ // {
1524
+ // "id" : "60014521",
1525
+ // "price" : "23162.94",
1526
+ // "quantity" : "0.00009",
1527
+ // "amount" : "2.0846646",
1528
+ // "takerSide" : "SELL",
1529
+ // "ts" : 1659684602042,
1530
+ // "createTime" : 1659684602036
1531
+ // }
1532
+ // ]
1533
+ //
1534
+ return this.parseTrades(trades, market, since, limit);
1535
+ }
1536
+ /**
1537
+ * @method
1538
+ * @name poloniex#fetchMyTrades
1539
+ * @description fetch all trades made by the user
1540
+ * @see https://api-docs.poloniex.com/spot/api/private/trade#trade-history
1541
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-execution-details
1542
+ * @param {string} symbol unified market symbol
1543
+ * @param {int} [since] the earliest time in ms to fetch trades for
1544
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1545
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1546
+ * @param {int} [params.until] the latest time in ms to fetch entries for
1547
+ * @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)
1548
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1549
+ */
1550
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1551
+ await this.loadMarkets();
1552
+ let paginate = false;
1553
+ [paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
1554
+ if (paginate) {
1555
+ return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);
1556
+ }
1557
+ let market = undefined;
1558
+ if (symbol !== undefined) {
1559
+ market = this.market(symbol);
1560
+ }
1561
+ let marketType = undefined;
1562
+ [marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
1563
+ const isContract = this.inArray(marketType, ['swap', 'future']);
1564
+ let request = {
1565
+ // 'from': 12345678, // A 'trade Id'. The query begins at ‘from'.
1566
+ // 'direction': 'PRE', // PRE, NEXT The direction before or after ‘from'.
1567
+ };
1568
+ const startKey = isContract ? 'sTime' : 'startTime';
1569
+ const endKey = isContract ? 'eTime' : 'endTime';
1570
+ if (since !== undefined) {
1571
+ request[startKey] = since;
1572
+ }
1573
+ if (limit !== undefined) {
1574
+ request['limit'] = limit;
1575
+ }
1576
+ if (isContract && symbol !== undefined) {
1577
+ request['symbol'] = market['id'];
1578
+ }
1579
+ [request, params] = this.handleUntilOption(endKey, request, params);
1580
+ if (isContract) {
1581
+ const raw = await this.swapPrivateGetV3TradeOrderTrades(this.extend(request, params));
1582
+ //
1583
+ // {
1584
+ // "code": "200",
1585
+ // "msg": "",
1586
+ // "data": [
1587
+ // {
1588
+ // "symbol": "BTC_USDT_PERP",
1589
+ // "trdId": "105813553",
1590
+ // "side": "SELL",
1591
+ // "type": "TRADE",
1592
+ // "mgnMode": "CROSS",
1593
+ // "ordType": "MARKET",
1594
+ // "clOrdId": "polo418912106147315112",
1595
+ // "role": "TAKER",
1596
+ // "px": "84704.9",
1597
+ // "qty": "1",
1598
+ // "cTime": "1740842829430",
1599
+ // "uTime": "1740842829450",
1600
+ // "feeCcy": "USDT",
1601
+ // "feeAmt": "0.04235245",
1602
+ // "deductCcy": "",
1603
+ // "deductAmt": "0",
1604
+ // "feeRate": "0.0005",
1605
+ // "id": "418912106342654592",
1606
+ // "posSide": "BOTH",
1607
+ // "ordId": "418912106147315112",
1608
+ // "qCcy": "USDT",
1609
+ // "value": "84.7049",
1610
+ // "actType": "TRADING"
1611
+ // },
1612
+ //
1613
+ const data = this.safeList(raw, 'data');
1614
+ return this.parseTrades(data, market, since, limit);
1615
+ }
1616
+ const response = await this.privateGetTrades(this.extend(request, params));
1617
+ //
1618
+ // [
1619
+ // {
1620
+ // "id": "32164924331503616",
1621
+ // "symbol": "LINK_USDT",
1622
+ // "accountType": "SPOT",
1623
+ // "orderId": "32164923987566592",
1624
+ // "side": "SELL",
1625
+ // "type": "MARKET",
1626
+ // "matchRole": "TAKER",
1627
+ // "createTime": 1648635115525,
1628
+ // "price": "11",
1629
+ // "quantity": "0.5",
1630
+ // "amount": "5.5",
1631
+ // "feeCurrency": "USDT",
1632
+ // "feeAmount": "0.007975",
1633
+ // "pageId": "32164924331503616",
1634
+ // "clientOrderId": "myOwnId-321"
1635
+ // }
1636
+ // ]
1637
+ //
1638
+ const result = this.parseTrades(response, market, since, limit);
1639
+ return result;
1640
+ }
1641
+ parseOrderStatus(status) {
1642
+ const statuses = {
1643
+ 'NEW': 'open',
1644
+ 'PARTIALLY_FILLED': 'open',
1645
+ 'FILLED': 'closed',
1646
+ 'PENDING_CANCEL': 'canceled',
1647
+ 'PARTIALLY_CANCELED': 'canceled',
1648
+ 'CANCELED': 'canceled',
1649
+ 'FAILED': 'canceled',
1650
+ };
1651
+ return this.safeString(statuses, status, status);
1652
+ }
1653
+ parseOrder(order, market = undefined) {
1654
+ //
1655
+ // fetchOpenOrder
1656
+ //
1657
+ // {
1658
+ // "id" : "7xxxxxxxxxxxxxxx6",
1659
+ // "clientOrderId" : "",
1660
+ // "symbol" : "ETH_USDT",
1661
+ // "state" : "NEW",
1662
+ // "accountType" : "SPOT",
1663
+ // "side" : "BUY",
1664
+ // "type" : "LIMIT",
1665
+ // "timeInForce" : "GTC",
1666
+ // "quantity" : "0.001",
1667
+ // "price" : "1600",
1668
+ // "avgPrice" : "0",
1669
+ // "amount" : "0",
1670
+ // "filledQuantity" : "0",
1671
+ // "filledAmount" : "0",
1672
+ // "createTime" : 16xxxxxxxxx26,
1673
+ // "updateTime" : 16xxxxxxxxx36
1674
+ // }
1675
+ //
1676
+ // fetchOpenOrders (and fetchClosedOrders same for contracts)
1677
+ //
1678
+ // spot:
1679
+ //
1680
+ // {
1681
+ // "id": "24993088082542592",
1682
+ // "clientOrderId": "",
1683
+ // "symbol": "ELON_USDC",
1684
+ // "state": "NEW",
1685
+ // "accountType": "SPOT",
1686
+ // "side": "SELL",
1687
+ // "type": "MARKET",
1688
+ // "timeInForce": "GTC",
1689
+ // "quantity": "1.00",
1690
+ // "price": "0.00",
1691
+ // "avgPrice": "0.00",
1692
+ // "amount": "0.00",
1693
+ // "filledQuantity": "0.00",
1694
+ // "filledAmount": "0.00",
1695
+ // "createTime": 1646925216548,
1696
+ // "updateTime": 1646925216548
1697
+ // }
1698
+ //
1699
+ // contract:
1700
+ //
1701
+ // {
1702
+ // "symbol": "BTC_USDT_PERP",
1703
+ // "side": "BUY",
1704
+ // "type": "LIMIT",
1705
+ // "ordId": "418890767248232148",
1706
+ // "clOrdId": "polo418890767248232148",
1707
+ // "mgnMode": "CROSS",
1708
+ // "px": "81130.13",
1709
+ // "reduceOnly": false,
1710
+ // "lever": "20",
1711
+ // "state": "NEW",
1712
+ // "source": "WEB",
1713
+ // "timeInForce": "GTC",
1714
+ // "tpTrgPx": "",
1715
+ // "tpPx": "",
1716
+ // "tpTrgPxType": "",
1717
+ // "slTrgPx": "",
1718
+ // "slPx": "",
1719
+ // "slTrgPxType": "",
1720
+ // "avgPx": "0",
1721
+ // "execQty": "0",
1722
+ // "execAmt": "0",
1723
+ // "feeCcy": "",
1724
+ // "feeAmt": "0",
1725
+ // "deductCcy": "0",
1726
+ // "deductAmt": "0",
1727
+ // "stpMode": "NONE", // todo: selfTradePrevention
1728
+ // "cTime": "1740837741523",
1729
+ // "uTime": "1740840846882",
1730
+ // "sz": "1",
1731
+ // "posSide": "BOTH",
1732
+ // "qCcy": "USDT"
1733
+ // "cancelReason": "", // this field can only be in closed orders
1734
+ // },
1735
+ //
1736
+ // createOrder, editOrder
1737
+ //
1738
+ // spot:
1739
+ //
1740
+ // {
1741
+ // "id": "29772698821328896",
1742
+ // "clientOrderId": "1234Abc"
1743
+ // }
1744
+ //
1745
+ // contract:
1746
+ //
1747
+ // {
1748
+ // "ordId":"418876147745775616",
1749
+ // "clOrdId":"polo418876147745775616"
1750
+ // }
1751
+ //
1752
+ let timestamp = this.safeIntegerN(order, ['timestamp', 'createTime', 'cTime']);
1753
+ if (timestamp === undefined) {
1754
+ timestamp = this.parse8601(this.safeString(order, 'date'));
1755
+ }
1756
+ const marketId = this.safeString(order, 'symbol');
1757
+ market = this.safeMarket(marketId, market, '_');
1758
+ const symbol = market['symbol'];
1759
+ let resultingTrades = this.safeValue(order, 'resultingTrades');
1760
+ if (resultingTrades !== undefined) {
1761
+ if (!Array.isArray(resultingTrades)) {
1762
+ resultingTrades = this.safeValue(resultingTrades, this.safeString(market, 'id', marketId));
1763
+ }
1764
+ }
1765
+ const price = this.safeStringN(order, ['price', 'rate', 'px']);
1766
+ const amount = this.safeString2(order, 'quantity', 'sz');
1767
+ const filled = this.safeString2(order, 'filledQuantity', 'execQty');
1768
+ const status = this.parseOrderStatus(this.safeString(order, 'state'));
1769
+ const side = this.safeStringLower(order, 'side');
1770
+ const rawType = this.safeString(order, 'type');
1771
+ const type = this.parseOrderType(rawType);
1772
+ const id = this.safeStringN(order, ['orderNumber', 'id', 'orderId', 'ordId']);
1773
+ let fee = undefined;
1774
+ const feeCurrency = this.safeString2(order, 'tokenFeeCurrency', 'feeCcy');
1775
+ let feeCost = undefined;
1776
+ let feeCurrencyCode = undefined;
1777
+ const rate = this.safeString(order, 'fee');
1778
+ if (feeCurrency === undefined) {
1779
+ feeCurrencyCode = (side === 'buy') ? market['base'] : market['quote'];
1780
+ }
1781
+ else {
1782
+ // poloniex accepts a 30% discount to pay fees in TRX
1783
+ feeCurrencyCode = this.safeCurrencyCode(feeCurrency);
1784
+ feeCost = this.safeString2(order, 'tokenFee', 'feeAmt');
1785
+ }
1786
+ if (feeCost !== undefined) {
1787
+ fee = {
1788
+ 'rate': rate,
1789
+ 'cost': feeCost,
1790
+ 'currency': feeCurrencyCode,
1791
+ };
1792
+ }
1793
+ const clientOrderId = this.safeString2(order, 'clientOrderId', 'clOrdId');
1794
+ const marginMode = this.safeStringLower(order, 'mgnMode');
1795
+ const reduceOnly = this.safeBool(order, 'reduceOnly');
1796
+ const leverage = this.safeInteger(order, 'lever');
1797
+ const hedged = this.safeString(order, 'posSide') !== 'BOTH';
1798
+ return this.safeOrder({
1799
+ 'info': order,
1800
+ 'id': id,
1801
+ 'clientOrderId': clientOrderId,
1802
+ 'timestamp': timestamp,
1803
+ 'datetime': this.iso8601(timestamp),
1804
+ 'lastTradeTimestamp': this.safeInteger(order, 'updateTime'),
1805
+ 'status': status,
1806
+ 'symbol': symbol,
1807
+ 'type': type,
1808
+ 'timeInForce': this.safeString(order, 'timeInForce'),
1809
+ 'postOnly': rawType === 'LIMIT_MAKER',
1810
+ 'side': side,
1811
+ 'price': price,
1812
+ 'triggerPrice': this.safeString2(order, 'triggerPrice', 'stopPrice'),
1813
+ 'cost': this.safeString(order, 'execAmt'),
1814
+ 'average': this.safeString2(order, 'avgPrice', 'avgPx'),
1815
+ 'amount': amount,
1816
+ 'filled': filled,
1817
+ 'remaining': undefined,
1818
+ 'trades': resultingTrades,
1819
+ 'fee': fee,
1820
+ 'marginMode': marginMode,
1821
+ 'reduceOnly': reduceOnly,
1822
+ 'leverage': leverage,
1823
+ 'hedged': hedged,
1824
+ }, market);
1825
+ }
1826
+ parseOrderType(status) {
1827
+ const statuses = {
1828
+ 'MARKET': 'market',
1829
+ 'LIMIT': 'limit',
1830
+ 'LIMIT_MAKER': 'limit',
1831
+ 'STOP-LIMIT': 'limit',
1832
+ 'STOP-MARKET': 'market',
1833
+ };
1834
+ return this.safeString(statuses, status, status);
1835
+ }
1836
+ parseOpenOrders(orders, market, result) {
1837
+ for (let i = 0; i < orders.length; i++) {
1838
+ const order = orders[i];
1839
+ const extended = this.extend(order, {
1840
+ 'status': 'open',
1841
+ 'type': 'limit',
1842
+ 'side': order['type'],
1843
+ 'price': order['rate'],
1844
+ });
1845
+ result.push(this.parseOrder(extended, market));
1846
+ }
1847
+ return result;
1848
+ }
1849
+ /**
1850
+ * @method
1851
+ * @name poloniex#fetchOpenOrders
1852
+ * @description fetch all unfilled currently open orders
1853
+ * @see https://api-docs.poloniex.com/spot/api/private/order#open-orders
1854
+ * @see https://api-docs.poloniex.com/spot/api/private/smart-order#open-orders // trigger orders
1855
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-current-orders
1856
+ * @param {string} symbol unified market symbol
1857
+ * @param {int} [since] the earliest time in ms to fetch open orders for
1858
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
1859
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1860
+ * @param {boolean} [params.trigger] set true to fetch trigger orders instead of regular orders
1861
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1862
+ */
1863
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1864
+ await this.loadMarkets();
1865
+ let market = undefined;
1866
+ const request = {};
1867
+ if (symbol !== undefined) {
1868
+ market = this.market(symbol);
1869
+ request['symbol'] = market['id'];
1870
+ }
1871
+ let marketType = undefined;
1872
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);
1873
+ if (limit !== undefined) {
1874
+ const max = (marketType === 'spot') ? 2000 : 100;
1875
+ request['limit'] = Math.max(limit, max);
1876
+ }
1877
+ const isTrigger = this.safeValue2(params, 'trigger', 'stop');
1878
+ params = this.omit(params, ['trigger', 'stop']);
1879
+ let response = undefined;
1880
+ if (marketType !== 'spot') {
1881
+ const raw = await this.swapPrivateGetV3TradeOrderOpens(this.extend(request, params));
1882
+ //
1883
+ // {
1884
+ // "code": "200",
1885
+ // "msg": "",
1886
+ // "data": [
1887
+ // {
1888
+ // "symbol": "BTC_USDT_PERP",
1889
+ // "side": "BUY",
1890
+ // "type": "LIMIT",
1891
+ // "ordId": "418890767248232148",
1892
+ // "clOrdId": "polo418890767248232148",
1893
+ // "mgnMode": "CROSS",
1894
+ // "px": "81130.13",
1895
+ // "reduceOnly": false,
1896
+ // "lever": "20",
1897
+ // "state": "NEW",
1898
+ // "source": "WEB",
1899
+ // "timeInForce": "GTC",
1900
+ // "tpTrgPx": "",
1901
+ // "tpPx": "",
1902
+ // "tpTrgPxType": "",
1903
+ // "slTrgPx": "",
1904
+ // "slPx": "",
1905
+ // "slTrgPxType": "",
1906
+ // "avgPx": "0",
1907
+ // "execQty": "0",
1908
+ // "execAmt": "0",
1909
+ // "feeCcy": "",
1910
+ // "feeAmt": "0",
1911
+ // "deductCcy": "0",
1912
+ // "deductAmt": "0",
1913
+ // "stpMode": "NONE",
1914
+ // "cTime": "1740837741523",
1915
+ // "uTime": "1740840846882",
1916
+ // "sz": "1",
1917
+ // "posSide": "BOTH",
1918
+ // "qCcy": "USDT"
1919
+ // },
1920
+ //
1921
+ response = this.safeList(raw, 'data');
1922
+ }
1923
+ else if (isTrigger) {
1924
+ response = await this.privateGetSmartorders(this.extend(request, params));
1925
+ }
1926
+ else {
1927
+ response = await this.privateGetOrders(this.extend(request, params));
1928
+ }
1929
+ //
1930
+ // [
1931
+ // {
1932
+ // "id" : "7xxxxxxxxxxxxxxx6",
1933
+ // "clientOrderId" : "",
1934
+ // "symbol" : "ETH_USDT",
1935
+ // "state" : "NEW",
1936
+ // "accountType" : "SPOT",
1937
+ // "side" : "BUY",
1938
+ // "type" : "LIMIT",
1939
+ // "timeInForce" : "GTC",
1940
+ // "quantity" : "0.001",
1941
+ // "price" : "1600",
1942
+ // "avgPrice" : "0",
1943
+ // "amount" : "0",
1944
+ // "filledQuantity" : "0",
1945
+ // "filledAmount" : "0",
1946
+ // "stopPrice": "3750.00", // for trigger orders
1947
+ // "createTime" : 16xxxxxxxxx26,
1948
+ // "updateTime" : 16xxxxxxxxx36
1949
+ // }
1950
+ // ]
1951
+ //
1952
+ const extension = { 'status': 'open' };
1953
+ return this.parseOrders(response, market, since, limit, extension);
1954
+ }
1955
+ /**
1956
+ * @method
1957
+ * @name poloniex#fetchClosedOrders
1958
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-order-history
1959
+ * @description fetches information on multiple closed orders made by the user
1960
+ * @param {string} symbol unified market symbol of the market orders were made in
1961
+ * @param {int} [since] the earliest time in ms to fetch orders for
1962
+ * @param {int} [limit] the maximum number of order structures to retrieve
1963
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1964
+ * @param {int} [params.until] timestamp in ms of the latest entry
1965
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1966
+ */
1967
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1968
+ await this.loadMarkets();
1969
+ let market = undefined;
1970
+ let request = {};
1971
+ if (symbol !== undefined) {
1972
+ market = this.market(symbol);
1973
+ request['symbol'] = market['id'];
1974
+ }
1975
+ let marketType = undefined;
1976
+ [marketType, params] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params, 'swap');
1977
+ if (marketType === 'spot') {
1978
+ throw new NotSupported(this.id + ' fetchClosedOrders() is not supported for spot markets yet');
1979
+ }
1980
+ if (limit !== undefined) {
1981
+ request['limit'] = Math.min(200, limit);
1982
+ }
1983
+ if (since !== undefined) {
1984
+ request['sTime'] = since;
1985
+ }
1986
+ [request, params] = this.handleUntilOption('eTime', request, params);
1987
+ const response = await this.swapPrivateGetV3TradeOrderHistory(this.extend(request, params));
1988
+ //
1989
+ // {
1990
+ // "code": "200",
1991
+ // "msg": "",
1992
+ // "data": [
1993
+ // {
1994
+ // "symbol": "BTC_USDT_PERP",
1995
+ // "side": "SELL",
1996
+ // "type": "MARKET",
1997
+ // "ordId": "418912106147315712",
1998
+ // "clOrdId": "polo418912106147315712",
1999
+ // "mgnMode": "CROSS",
2000
+ // "px": "0",
2001
+ // "sz": "2",
2002
+ // "lever": "20",
2003
+ // "state": "FILLED",
2004
+ // "cancelReason": "",
2005
+ // "source": "WEB",
2006
+ // "reduceOnly": "true",
2007
+ // "timeInForce": "GTC",
2008
+ // "tpTrgPx": "",
2009
+ // "tpPx": "",
2010
+ // "tpTrgPxType": "",
2011
+ // "slTrgPx": "",
2012
+ // "slPx": "",
2013
+ // "slTrgPxType": "",
2014
+ // "avgPx": "84705.56",
2015
+ // "execQty": "2",
2016
+ // "execAmt": "169.41112",
2017
+ // "feeCcy": "USDT",
2018
+ // "feeAmt": "0.08470556",
2019
+ // "deductCcy": "0",
2020
+ // "deductAmt": "0",
2021
+ // "stpMode": "NONE",
2022
+ // "cTime": "1740842829116",
2023
+ // "uTime": "1740842829130",
2024
+ // "posSide": "BOTH",
2025
+ // "qCcy": "USDT"
2026
+ // },
2027
+ //
2028
+ const data = this.safeList(response, 'data', []);
2029
+ return this.parseOrders(data, market, since, limit);
2030
+ }
2031
+ /**
2032
+ * @method
2033
+ * @name poloniex#createOrder
2034
+ * @description create a trade order
2035
+ * @see https://api-docs.poloniex.com/spot/api/private/order#create-order
2036
+ * @see https://api-docs.poloniex.com/spot/api/private/smart-order#create-order // trigger orders
2037
+ * @param {string} symbol unified symbol of the market to create an order in
2038
+ * @param {string} type 'market' or 'limit'
2039
+ * @param {string} side 'buy' or 'sell'
2040
+ * @param {float} amount how much of currency you want to trade in units of base currency
2041
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
2042
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2043
+ * @param {float} [params.triggerPrice] the price at which a trigger order is triggered at
2044
+ * @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount
2045
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2046
+ */
2047
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
2048
+ await this.loadMarkets();
2049
+ const market = this.market(symbol);
2050
+ let request = {
2051
+ 'symbol': market['id'],
2052
+ 'side': side.toUpperCase(), // uppercase, both for spot & swap
2053
+ // 'timeInForce': timeInForce, // matches unified values
2054
+ // 'accountType': 'SPOT',
2055
+ // 'amount': amount,
2056
+ };
2057
+ const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
2058
+ [request, params] = this.orderRequest(symbol, type, side, amount, request, price, params);
2059
+ let response = undefined;
2060
+ if (market['swap'] || market['future']) {
2061
+ const responseInitial = await this.swapPrivatePostV3TradeOrder(this.extend(request, params));
2062
+ //
2063
+ // {"code":200,"msg":"Success","data":{"ordId":"418876147745775616","clOrdId":"polo418876147745775616"}}
2064
+ //
2065
+ response = this.safeDict(responseInitial, 'data');
2066
+ }
2067
+ else if (triggerPrice !== undefined) {
2068
+ response = await this.privatePostSmartorders(this.extend(request, params));
2069
+ }
2070
+ else {
2071
+ response = await this.privatePostOrders(this.extend(request, params));
2072
+ }
2073
+ //
2074
+ // {
2075
+ // "id" : "78923648051920896",
2076
+ // "clientOrderId" : ""
2077
+ // }
2078
+ //
2079
+ return this.parseOrder(response, market);
2080
+ }
2081
+ orderRequest(symbol, type, side, amount, request, price = undefined, params = {}) {
2082
+ const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
2083
+ const market = this.market(symbol);
2084
+ if (market['contract']) {
2085
+ let marginMode = undefined;
2086
+ [marginMode, params] = this.handleParamString(params, 'marginMode');
2087
+ if (marginMode !== undefined) {
2088
+ this.checkRequiredArgument('createOrder', marginMode, 'marginMode', ['cross', 'isolated']);
2089
+ request['mgnMode'] = marginMode.toUpperCase();
2090
+ }
2091
+ let hedged = undefined;
2092
+ [hedged, params] = this.handleParamString(params, 'hedged');
2093
+ if (hedged) {
2094
+ if (marginMode === undefined) {
2095
+ throw new ArgumentsRequired(this.id + ' createOrder() requires a marginMode parameter "cross" or "isolated" for hedged orders');
2096
+ }
2097
+ if (!('posSide' in params)) {
2098
+ throw new ArgumentsRequired(this.id + ' createOrder() requires a posSide parameter "LONG" or "SHORT" for hedged orders');
2099
+ }
2100
+ }
2101
+ }
2102
+ let upperCaseType = type.toUpperCase();
2103
+ const isMarket = upperCaseType === 'MARKET';
2104
+ const isPostOnly = this.isPostOnly(isMarket, upperCaseType === 'LIMIT_MAKER', params);
2105
+ params = this.omit(params, ['postOnly', 'triggerPrice', 'stopPrice']);
2106
+ if (triggerPrice !== undefined) {
2107
+ if (!market['spot']) {
2108
+ throw new InvalidOrder(this.id + ' createOrder() does not support trigger orders for ' + market['type'] + ' markets');
2109
+ }
2110
+ upperCaseType = (price === undefined) ? 'STOP' : 'STOP_LIMIT';
2111
+ request['stopPrice'] = triggerPrice;
2112
+ }
2113
+ else if (isPostOnly) {
2114
+ upperCaseType = 'LIMIT_MAKER';
2115
+ }
2116
+ request['type'] = upperCaseType;
2117
+ if (isMarket) {
2118
+ if (side === 'buy') {
2119
+ let quoteAmount = undefined;
2120
+ let createMarketBuyOrderRequiresPrice = true;
2121
+ [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
2122
+ const cost = this.safeNumber(params, 'cost');
2123
+ params = this.omit(params, 'cost');
2124
+ if (cost !== undefined) {
2125
+ quoteAmount = this.costToPrecision(symbol, cost);
2126
+ }
2127
+ else if (createMarketBuyOrderRequiresPrice && market['spot']) {
2128
+ if (price === undefined) {
2129
+ throw new InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend (quote quantity) in the amount argument');
2130
+ }
2131
+ else {
2132
+ const amountString = this.numberToString(amount);
2133
+ const priceString = this.numberToString(price);
2134
+ const costRequest = Precise.stringMul(amountString, priceString);
2135
+ quoteAmount = this.costToPrecision(symbol, costRequest);
2136
+ }
2137
+ }
2138
+ else {
2139
+ quoteAmount = this.costToPrecision(symbol, amount);
2140
+ }
2141
+ const amountKey = market['spot'] ? 'amount' : 'sz';
2142
+ request[amountKey] = quoteAmount;
2143
+ }
2144
+ else {
2145
+ const amountKey = market['spot'] ? 'quantity' : 'sz';
2146
+ request[amountKey] = this.amountToPrecision(symbol, amount);
2147
+ }
2148
+ }
2149
+ else {
2150
+ const amountKey = market['spot'] ? 'quantity' : 'sz';
2151
+ request[amountKey] = this.amountToPrecision(symbol, amount);
2152
+ const priceKey = market['spot'] ? 'price' : 'px';
2153
+ request[priceKey] = this.priceToPrecision(symbol, price);
2154
+ }
2155
+ const clientOrderId = this.safeString(params, 'clientOrderId');
2156
+ if (clientOrderId !== undefined) {
2157
+ request['clientOrderId'] = clientOrderId;
2158
+ params = this.omit(params, 'clientOrderId');
2159
+ }
2160
+ // remember the timestamp before issuing the request
2161
+ return [request, params];
2162
+ }
2163
+ /**
2164
+ * @method
2165
+ * @name poloniex#editOrder
2166
+ * @description edit a trade order
2167
+ * @see https://api-docs.poloniex.com/spot/api/private/order#cancel-replace-order
2168
+ * @see https://api-docs.poloniex.com/spot/api/private/smart-order#cancel-replace-order
2169
+ * @param {string} id order id
2170
+ * @param {string} symbol unified symbol of the market to create an order in
2171
+ * @param {string} type 'market' or 'limit'
2172
+ * @param {string} side 'buy' or 'sell'
2173
+ * @param {float} [amount] how much of the currency you want to trade in units of the base currency
2174
+ * @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
2175
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2176
+ * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at
2177
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2178
+ */
2179
+ async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
2180
+ await this.loadMarkets();
2181
+ const market = this.market(symbol);
2182
+ if (!market['spot']) {
2183
+ throw new NotSupported(this.id + ' editOrder() does not support ' + market['type'] + ' orders, only spot orders are accepted');
2184
+ }
2185
+ let request = {
2186
+ 'id': id,
2187
+ // 'timeInForce': timeInForce,
2188
+ };
2189
+ const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
2190
+ [request, params] = this.orderRequest(symbol, type, side, amount, request, price, params);
2191
+ let response = undefined;
2192
+ if (triggerPrice !== undefined) {
2193
+ response = await this.privatePutSmartordersId(this.extend(request, params));
2194
+ }
2195
+ else {
2196
+ response = await this.privatePutOrdersId(this.extend(request, params));
2197
+ }
2198
+ //
2199
+ // {
2200
+ // "id" : "78923648051920896",
2201
+ // "clientOrderId" : ""
2202
+ // }
2203
+ //
2204
+ response = this.extend(response, {
2205
+ 'side': side,
2206
+ 'type': type,
2207
+ });
2208
+ return this.parseOrder(response, market);
2209
+ }
2210
+ async cancelOrder(id, symbol = undefined, params = {}) {
2211
+ //
2212
+ // @method
2213
+ // @name poloniex#cancelOrder
2214
+ // @description cancels an open order
2215
+ // @see https://api-docs.poloniex.com/spot/api/private/order#cancel-order-by-id
2216
+ // @see https://api-docs.poloniex.com/spot/api/private/smart-order#cancel-order-by-id // trigger orders
2217
+ // @param {string} id order id
2218
+ // @param {string} symbol unified symbol of the market the order was made in
2219
+ // @param {object} [params] extra parameters specific to the exchange API endpoint
2220
+ // @param {boolean} [params.trigger] true if canceling a trigger order
2221
+ // @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2222
+ //
2223
+ await this.loadMarkets();
2224
+ if (symbol === undefined) {
2225
+ throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
2226
+ }
2227
+ const market = this.market(symbol);
2228
+ const request = {};
2229
+ if (!market['spot']) {
2230
+ request['symbol'] = market['id'];
2231
+ request['ordId'] = id;
2232
+ const raw = await this.swapPrivateDeleteV3TradeOrder(this.extend(request, params));
2233
+ //
2234
+ // {
2235
+ // "code": "200",
2236
+ // "msg": "Success",
2237
+ // "data": {
2238
+ // "ordId": "418886099910612040",
2239
+ // "clOrdId": "polo418886099910612040"
2240
+ // }
2241
+ // }
2242
+ //
2243
+ return this.parseOrder(this.safeDict(raw, 'data'));
2244
+ }
2245
+ const clientOrderId = this.safeValue(params, 'clientOrderId');
2246
+ if (clientOrderId !== undefined) {
2247
+ id = clientOrderId;
2248
+ }
2249
+ request['id'] = id;
2250
+ const isTrigger = this.safeValue2(params, 'trigger', 'stop');
2251
+ params = this.omit(params, ['clientOrderId', 'trigger', 'stop']);
2252
+ let response = undefined;
2253
+ if (isTrigger) {
2254
+ response = await this.privateDeleteSmartordersId(this.extend(request, params));
2255
+ }
2256
+ else {
2257
+ response = await this.privateDeleteOrdersId(this.extend(request, params));
2258
+ }
2259
+ //
2260
+ // {
2261
+ // "orderId":"210832697138888704",
2262
+ // "clientOrderId":"",
2263
+ // "state":"PENDING_CANCEL",
2264
+ // "code":200,
2265
+ // "message":""
2266
+ // }
2267
+ //
2268
+ return this.parseOrder(response);
2269
+ }
2270
+ /**
2271
+ * @method
2272
+ * @name poloniex#cancelAllOrders
2273
+ * @description cancel all open orders
2274
+ * @see https://api-docs.poloniex.com/spot/api/private/order#cancel-all-orders
2275
+ * @see https://api-docs.poloniex.com/spot/api/private/smart-order#cancel-all-orders // trigger orders
2276
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/cancel-all-orders - contract markets
2277
+ * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
2278
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2279
+ * @param {boolean} [params.trigger] true if canceling trigger orders
2280
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
2281
+ */
2282
+ async cancelAllOrders(symbol = undefined, params = {}) {
2283
+ await this.loadMarkets();
2284
+ const request = {
2285
+ // 'accountTypes': 'SPOT',
2286
+ 'symbols': [],
2287
+ };
2288
+ let market = undefined;
2289
+ if (symbol !== undefined) {
2290
+ market = this.market(symbol);
2291
+ request['symbols'] = [
2292
+ market['id'],
2293
+ ];
2294
+ }
2295
+ let response = undefined;
2296
+ let marketType = undefined;
2297
+ [marketType, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);
2298
+ if (marketType === 'swap' || marketType === 'future') {
2299
+ const raw = await this.swapPrivateDeleteV3TradeAllOrders(this.extend(request, params));
2300
+ //
2301
+ // {
2302
+ // "code": "200",
2303
+ // "msg": "Success",
2304
+ // "data": [
2305
+ // {
2306
+ // "code": "200",
2307
+ // "msg": "Success",
2308
+ // "ordId": "418885787866388511",
2309
+ // "clOrdId": "polo418885787866388511"
2310
+ // }
2311
+ // ]
2312
+ // }
2313
+ //
2314
+ response = this.safeList(raw, 'data');
2315
+ return this.parseOrders(response, market);
2316
+ }
2317
+ const isTrigger = this.safeValue2(params, 'trigger', 'stop');
2318
+ params = this.omit(params, ['trigger', 'stop']);
2319
+ if (isTrigger) {
2320
+ response = await this.privateDeleteSmartorders(this.extend(request, params));
2321
+ }
2322
+ else {
2323
+ response = await this.privateDeleteOrders(this.extend(request, params));
2324
+ }
2325
+ //
2326
+ // [
2327
+ // {
2328
+ // "orderId" : "78xxxxxxxx80",
2329
+ // "clientOrderId" : "",
2330
+ // "state" : "NEW",
2331
+ // "code" : 200,
2332
+ // "message" : ""
2333
+ // }, {
2334
+ // "orderId" : "78xxxxxxxxx80",
2335
+ // "clientOrderId" : "",
2336
+ // "state" : "NEW",
2337
+ // "code" : 200,
2338
+ // "message" : ""
2339
+ // }
2340
+ // ]
2341
+ //
2342
+ return this.parseOrders(response, market);
2343
+ }
2344
+ /**
2345
+ * @method
2346
+ * @name poloniex#fetchOrder
2347
+ * @description fetch an order by it's id
2348
+ * @see https://api-docs.poloniex.com/spot/api/private/order#order-details
2349
+ * @see https://api-docs.poloniex.com/spot/api/private/smart-order#open-orders // trigger orders
2350
+ * @param {string} id order id
2351
+ * @param {string} symbol unified market symbol, default is undefined
2352
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2353
+ * @param {boolean} [params.trigger] true if fetching a trigger order
2354
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2355
+ */
2356
+ async fetchOrder(id, symbol = undefined, params = {}) {
2357
+ await this.loadMarkets();
2358
+ id = id.toString();
2359
+ const request = {
2360
+ 'id': id,
2361
+ };
2362
+ let market = undefined;
2363
+ if (symbol !== undefined) {
2364
+ market = this.market(symbol);
2365
+ request['symbol'] = market['id'];
2366
+ }
2367
+ let marketType = undefined;
2368
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOrder', market, params);
2369
+ if (marketType !== 'spot') {
2370
+ throw new NotSupported(this.id + ' fetchOrder() is not supported for ' + marketType + ' markets yet');
2371
+ }
2372
+ const isTrigger = this.safeValue2(params, 'trigger', 'stop');
2373
+ params = this.omit(params, ['trigger', 'stop']);
2374
+ let response = undefined;
2375
+ if (isTrigger) {
2376
+ response = await this.privateGetSmartordersId(this.extend(request, params));
2377
+ response = this.safeValue(response, 0);
2378
+ }
2379
+ else {
2380
+ response = await this.privateGetOrdersId(this.extend(request, params));
2381
+ }
2382
+ //
2383
+ // {
2384
+ // "id": "21934611974062080",
2385
+ // "clientOrderId": "123",
2386
+ // "symbol": "TRX_USDC",
2387
+ // "state": "NEW",
2388
+ // "accountType": "SPOT",
2389
+ // "side": "SELL",
2390
+ // "type": "LIMIT",
2391
+ // "timeInForce": "GTC",
2392
+ // "quantity": "1.00",
2393
+ // "price": "10.00",
2394
+ // "avgPrice": "0.00",
2395
+ // "amount": "0.00",
2396
+ // "filledQuantity": "0.00",
2397
+ // "filledAmount": "0.00",
2398
+ // "stopPrice": "3750.00", // for trigger orders
2399
+ // "createTime": 1646196019020,
2400
+ // "updateTime": 1646196019020
2401
+ // }
2402
+ //
2403
+ const order = this.parseOrder(response);
2404
+ order['id'] = id;
2405
+ return order;
2406
+ }
2407
+ async fetchOrderStatus(id, symbol = undefined, params = {}) {
2408
+ await this.loadMarkets();
2409
+ const orders = await this.fetchOpenOrders(symbol, undefined, undefined, params);
2410
+ const indexed = this.indexBy(orders, 'id');
2411
+ return (id in indexed) ? 'open' : 'closed';
2412
+ }
2413
+ /**
2414
+ * @method
2415
+ * @name poloniex#fetchOrderTrades
2416
+ * @description fetch all the trades made from a single order
2417
+ * @see https://api-docs.poloniex.com/spot/api/private/trade#trades-by-order-id
2418
+ * @param {string} id order id
2419
+ * @param {string} symbol unified market symbol
2420
+ * @param {int} [since] the earliest time in ms to fetch trades for
2421
+ * @param {int} [limit] the maximum number of trades to retrieve
2422
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2423
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
2424
+ */
2425
+ async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
2426
+ await this.loadMarkets();
2427
+ const request = {
2428
+ 'id': id,
2429
+ };
2430
+ const trades = await this.privateGetOrdersIdTrades(this.extend(request, params));
2431
+ //
2432
+ // [
2433
+ // {
2434
+ // "id": "30341456333942784",
2435
+ // "symbol": "LINK_USDT",
2436
+ // "accountType": "SPOT",
2437
+ // "orderId": "30249408733945856",
2438
+ // "side": "BUY",
2439
+ // "type": "LIMIT",
2440
+ // "matchRole": "MAKER",
2441
+ // "createTime": 1648200366864,
2442
+ // "price": "3.1",
2443
+ // "quantity": "1",
2444
+ // "amount": "3.1",
2445
+ // "feeCurrency": "LINK",
2446
+ // "feeAmount": "0.00145",
2447
+ // "pageId": "30341456333942784",
2448
+ // "clientOrderId": ""
2449
+ // }
2450
+ // ]
2451
+ //
2452
+ return this.parseTrades(trades);
2453
+ }
2454
+ parseBalance(response) {
2455
+ const result = {
2456
+ 'info': response,
2457
+ 'timestamp': undefined,
2458
+ 'datetime': undefined,
2459
+ };
2460
+ // for swap
2461
+ if (!Array.isArray(response)) {
2462
+ const ts = this.safeInteger(response, 'uTime');
2463
+ result['timestamp'] = ts;
2464
+ result['datetime'] = this.iso8601(ts);
2465
+ const details = this.safeList(response, 'details', []);
2466
+ for (let i = 0; i < details.length; i++) {
2467
+ const balance = details[i];
2468
+ const currencyId = this.safeString(balance, 'ccy');
2469
+ const code = this.safeCurrencyCode(currencyId);
2470
+ const account = this.account();
2471
+ account['total'] = this.safeString(balance, 'avail');
2472
+ account['used'] = this.safeString(balance, 'im');
2473
+ result[code] = account;
2474
+ }
2475
+ return this.safeBalance(result);
2476
+ }
2477
+ // for spot
2478
+ for (let i = 0; i < response.length; i++) {
2479
+ const account = this.safeValue(response, i, {});
2480
+ const balances = this.safeValue(account, 'balances');
2481
+ for (let j = 0; j < balances.length; j++) {
2482
+ const balance = this.safeValue(balances, j);
2483
+ const currencyId = this.safeString(balance, 'currency');
2484
+ const code = this.safeCurrencyCode(currencyId);
2485
+ const newAccount = this.account();
2486
+ newAccount['free'] = this.safeString(balance, 'available');
2487
+ newAccount['used'] = this.safeString(balance, 'hold');
2488
+ result[code] = newAccount;
2489
+ }
2490
+ }
2491
+ return this.safeBalance(result);
2492
+ }
2493
+ /**
2494
+ * @method
2495
+ * @name poloniex#fetchBalance
2496
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
2497
+ * @see https://api-docs.poloniex.com/spot/api/private/account#all-account-balances
2498
+ * @see https://api-docs.poloniex.com/v3/futures/api/account/balance
2499
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2500
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
2501
+ */
2502
+ async fetchBalance(params = {}) {
2503
+ await this.loadMarkets();
2504
+ let marketType = undefined;
2505
+ [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
2506
+ if (marketType !== 'spot') {
2507
+ const responseRaw = await this.swapPrivateGetV3AccountBalance(params);
2508
+ //
2509
+ // {
2510
+ // "code": "200",
2511
+ // "msg": "",
2512
+ // "data": {
2513
+ // "state": "NORMAL",
2514
+ // "eq": "9.98571622",
2515
+ // "isoEq": "0",
2516
+ // "im": "0",
2517
+ // "mm": "0",
2518
+ // "mmr": "0",
2519
+ // "upl": "0",
2520
+ // "availMgn": "9.98571622",
2521
+ // "cTime": "1738093601775",
2522
+ // "uTime": "1740829116236",
2523
+ // "details": [
2524
+ // {
2525
+ // "ccy": "USDT",
2526
+ // "eq": "9.98571622",
2527
+ // "isoEq": "0",
2528
+ // "avail": "9.98571622",
2529
+ // "trdHold": "0",
2530
+ // "upl": "0",
2531
+ // "isoAvail": "0",
2532
+ // "isoHold": "0",
2533
+ // "isoUpl": "0",
2534
+ // "im": "0",
2535
+ // "mm": "0",
2536
+ // "mmr": "0",
2537
+ // "imr": "0",
2538
+ // "cTime": "1740829116236",
2539
+ // "uTime": "1740829116236"
2540
+ // }
2541
+ // ]
2542
+ // }
2543
+ // }
2544
+ //
2545
+ const data = this.safeDict(responseRaw, 'data', {});
2546
+ return this.parseBalance(data);
2547
+ }
2548
+ const request = {
2549
+ 'accountType': 'SPOT',
2550
+ };
2551
+ const response = await this.privateGetAccountsBalances(this.extend(request, params));
2552
+ //
2553
+ // [
2554
+ // {
2555
+ // "accountId" : "7xxxxxxxxxx8",
2556
+ // "accountType" : "SPOT",
2557
+ // "balances" : [
2558
+ // {
2559
+ // "currencyId" : "214",
2560
+ // "currency" : "USDT",
2561
+ // "available" : "2.00",
2562
+ // "hold" : "0.00"
2563
+ // }
2564
+ // ]
2565
+ // }
2566
+ // ]
2567
+ //
2568
+ return this.parseBalance(response);
2569
+ }
2570
+ /**
2571
+ * @method
2572
+ * @name poloniex#fetchTradingFees
2573
+ * @description fetch the trading fees for multiple markets
2574
+ * @see https://api-docs.poloniex.com/spot/api/private/account#fee-info
2575
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2576
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
2577
+ */
2578
+ async fetchTradingFees(params = {}) {
2579
+ await this.loadMarkets();
2580
+ const response = await this.privateGetFeeinfo(params);
2581
+ //
2582
+ // {
2583
+ // "trxDiscount" : false,
2584
+ // "makerRate" : "0.00145",
2585
+ // "takerRate" : "0.00155",
2586
+ // "volume30D" : "0.00"
2587
+ // }
2588
+ //
2589
+ const result = {};
2590
+ for (let i = 0; i < this.symbols.length; i++) {
2591
+ const symbol = this.symbols[i];
2592
+ result[symbol] = {
2593
+ 'info': response,
2594
+ 'symbol': symbol,
2595
+ 'maker': this.safeNumber(response, 'makerRate'),
2596
+ 'taker': this.safeNumber(response, 'takerRate'),
2597
+ 'percentage': true,
2598
+ 'tierBased': true,
2599
+ };
2600
+ }
2601
+ return result;
2602
+ }
2603
+ /**
2604
+ * @method
2605
+ * @name poloniex#fetchOrderBook
2606
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
2607
+ * @see https://api-docs.poloniex.com/spot/api/public/market-data#order-book
2608
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-order-book
2609
+ * @param {string} symbol unified symbol of the market to fetch the order book for
2610
+ * @param {int} [limit] the maximum amount of order book entries to return
2611
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2612
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
2613
+ */
2614
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
2615
+ await this.loadMarkets();
2616
+ const market = this.market(symbol);
2617
+ const request = {
2618
+ 'symbol': market['id'],
2619
+ };
2620
+ if (limit !== undefined) {
2621
+ request['limit'] = limit; // The default value of limit is 10. Valid limit values are: 5, 10, 20, 50, 100, 150.
2622
+ if (market['contract']) {
2623
+ request['limit'] = this.findNearestCeiling([5, 10, 20, 100, 150], limit);
2624
+ }
2625
+ }
2626
+ if (market['contract']) {
2627
+ const responseRaw = await this.swapPublicGetV3MarketOrderBook(this.extend(request, params));
2628
+ //
2629
+ // {
2630
+ // "code": 200,
2631
+ // "data": {
2632
+ // "asks": [ ["58700", "9934"], ..],
2633
+ // "bids": [ ["58600", "9952"], ..],
2634
+ // "s": "100",
2635
+ // "ts": 1719974138333
2636
+ // },
2637
+ // "msg": "Success"
2638
+ // }
2639
+ //
2640
+ const data = this.safeDict(responseRaw, 'data', {});
2641
+ const ts = this.safeInteger(data, 'ts');
2642
+ return this.parseOrderBook(data, symbol, ts);
2643
+ }
2644
+ const response = await this.publicGetMarketsSymbolOrderBook(this.extend(request, params));
2645
+ //
2646
+ // {
2647
+ // "time" : 1659695219507,
2648
+ // "scale" : "-1",
2649
+ // "asks" : [ "23139.82", "0.317981", "23140", "0.191091", "23170.06", "0.01", "23200", "0.107758", "23230.55", "0.01", "23247.2", "0.154", "23254", "0.005121", "23263", "0.038", "23285.4", "0.308", "23300", "0.108896" ],
2650
+ // "bids" : [ "23139.74", "0.432092", "23139.73", "0.198592", "23123.21", "0.000886", "23123.2", "0.308", "23121.4", "0.154", "23105", "0.000789", "23100", "0.078175", "23069.1", "0.026276", "23068.83", "0.001329", "23051", "0.000048" ],
2651
+ // "ts" : 1659695219513
2652
+ // }
2653
+ //
2654
+ const timestamp = this.safeInteger(response, 'time');
2655
+ const asks = this.safeValue(response, 'asks');
2656
+ const bids = this.safeValue(response, 'bids');
2657
+ const asksResult = [];
2658
+ const bidsResult = [];
2659
+ for (let i = 0; i < asks.length; i++) {
2660
+ if ((i % 2) < 1) {
2661
+ const price = this.safeNumber(asks, i);
2662
+ const amount = this.safeNumber(asks, this.sum(i, 1));
2663
+ asksResult.push([price, amount]);
2664
+ }
2665
+ }
2666
+ for (let i = 0; i < bids.length; i++) {
2667
+ if ((i % 2) < 1) {
2668
+ const price = this.safeNumber(bids, i);
2669
+ const amount = this.safeNumber(bids, this.sum(i, 1));
2670
+ bidsResult.push([price, amount]);
2671
+ }
2672
+ }
2673
+ return {
2674
+ 'symbol': market['symbol'],
2675
+ 'bids': this.sortBy(bidsResult, 0, true),
2676
+ 'asks': this.sortBy(asksResult, 0),
2677
+ 'timestamp': timestamp,
2678
+ 'datetime': this.iso8601(timestamp),
2679
+ 'nonce': undefined,
2680
+ };
2681
+ }
2682
+ /**
2683
+ * @method
2684
+ * @name poloniex#createDepositAddress
2685
+ * @description create a currency deposit address
2686
+ * @see https://api-docs.poloniex.com/spot/api/private/wallet#deposit-addresses
2687
+ * @param {string} code unified currency code of the currency for the deposit address
2688
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2689
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
2690
+ */
2691
+ async createDepositAddress(code, params = {}) {
2692
+ await this.loadMarkets();
2693
+ const [request, extraParams, currency, networkEntry] = this.prepareRequestForDepositAddress(code, params);
2694
+ params = extraParams;
2695
+ const response = await this.privatePostWalletsAddress(this.extend(request, params));
2696
+ //
2697
+ // {
2698
+ // "address" : "0xfxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf"
2699
+ // }
2700
+ //
2701
+ return this.parseDepositAddressSpecial(response, currency, networkEntry);
2702
+ }
2703
+ /**
2704
+ * @method
2705
+ * @name poloniex#fetchDepositAddress
2706
+ * @description fetch the deposit address for a currency associated with this account
2707
+ * @see https://api-docs.poloniex.com/spot/api/private/wallet#deposit-addresses
2708
+ * @param {string} code unified currency code
2709
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2710
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
2711
+ */
2712
+ async fetchDepositAddress(code, params = {}) {
2713
+ await this.loadMarkets();
2714
+ const [request, extraParams, currency, networkEntry] = this.prepareRequestForDepositAddress(code, params);
2715
+ params = extraParams;
2716
+ const response = await this.privateGetWalletsAddresses(this.extend(request, params));
2717
+ //
2718
+ // {
2719
+ // "USDTTRON" : "Txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp"
2720
+ // }
2721
+ //
2722
+ const keys = Object.keys(response);
2723
+ const length = keys.length;
2724
+ if (length < 1) {
2725
+ throw new ExchangeError(this.id + ' fetchDepositAddress() returned an empty response, you might need to try "createDepositAddress" at first and then use "fetchDepositAddress"');
2726
+ }
2727
+ return this.parseDepositAddressSpecial(response, currency, networkEntry);
2728
+ }
2729
+ prepareRequestForDepositAddress(code, params = {}) {
2730
+ if (!(code in this.currencies)) {
2731
+ throw new BadSymbol(this.id + ' fetchDepositAddress(): can not recognize ' + code + ' currency, you might try using unified currency-code and add provide specific "network" parameter, like: fetchDepositAddress("USDT", { "network": "TRC20" })');
2732
+ }
2733
+ const currency = this.currency(code);
2734
+ let networkCode = undefined;
2735
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
2736
+ if (networkCode === undefined) {
2737
+ // we need to know the network to find out the currency-junction
2738
+ throw new ArgumentsRequired(this.id + ' fetchDepositAddress requires a network parameter for ' + code + '.');
2739
+ }
2740
+ let exchangeNetworkId = undefined;
2741
+ networkCode = this.networkIdToCode(networkCode, code);
2742
+ const networkEntry = this.safeDict(currency['networks'], networkCode);
2743
+ if (networkEntry !== undefined) {
2744
+ exchangeNetworkId = networkEntry['id'];
2745
+ }
2746
+ else {
2747
+ exchangeNetworkId = networkCode;
2748
+ }
2749
+ const request = {
2750
+ 'currency': exchangeNetworkId,
2751
+ };
2752
+ return [request, params, currency, networkEntry];
2753
+ }
2754
+ parseDepositAddressSpecial(response, currency, networkEntry) {
2755
+ let address = this.safeString(response, 'address');
2756
+ if (address === undefined) {
2757
+ address = this.safeString(response, networkEntry['id']);
2758
+ }
2759
+ let tag = undefined;
2760
+ this.checkAddress(address);
2761
+ if (networkEntry !== undefined) {
2762
+ const depositAddress = this.safeString(networkEntry['info'], 'depositAddress');
2763
+ if (depositAddress !== undefined) {
2764
+ tag = address;
2765
+ address = depositAddress;
2766
+ }
2767
+ }
2768
+ return {
2769
+ 'info': response,
2770
+ 'currency': currency['code'],
2771
+ 'network': this.safeString(networkEntry, 'network'),
2772
+ 'address': address,
2773
+ 'tag': tag,
2774
+ };
2775
+ }
2776
+ /**
2777
+ * @method
2778
+ * @name poloniex#transfer
2779
+ * @description transfer currency internally between wallets on the same account
2780
+ * @see https://api-docs.poloniex.com/spot/api/private/account#accounts-transfer
2781
+ * @param {string} code unified currency code
2782
+ * @param {float} amount amount to transfer
2783
+ * @param {string} fromAccount account to transfer from
2784
+ * @param {string} toAccount account to transfer to
2785
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2786
+ * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
2787
+ */
2788
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
2789
+ await this.loadMarkets();
2790
+ const currency = this.currency(code);
2791
+ const accountsByType = this.safeValue(this.options, 'accountsByType', {});
2792
+ const fromId = this.safeString(accountsByType, fromAccount, fromAccount);
2793
+ const toId = this.safeString(accountsByType, toAccount, fromAccount);
2794
+ const request = {
2795
+ 'amount': this.currencyToPrecision(code, amount),
2796
+ 'currency': currency['id'],
2797
+ 'fromAccount': fromId,
2798
+ 'toAccount': toId,
2799
+ };
2800
+ const response = await this.privatePostAccountsTransfer(this.extend(request, params));
2801
+ //
2802
+ // {
2803
+ // "transferId" : "168041074"
2804
+ // }
2805
+ //
2806
+ return this.parseTransfer(response, currency);
2807
+ }
2808
+ parseTransfer(transfer, currency = undefined) {
2809
+ //
2810
+ // {
2811
+ // "transferId" : "168041074"
2812
+ // }
2813
+ //
2814
+ return {
2815
+ 'info': transfer,
2816
+ 'id': this.safeString(transfer, 'transferId'),
2817
+ 'timestamp': undefined,
2818
+ 'datetime': undefined,
2819
+ 'currency': this.safeString(currency, 'id'),
2820
+ 'amount': undefined,
2821
+ 'fromAccount': undefined,
2822
+ 'toAccount': undefined,
2823
+ 'status': undefined,
2824
+ };
2825
+ }
2826
+ /**
2827
+ * @method
2828
+ * @name poloniex#withdraw
2829
+ * @description make a withdrawal
2830
+ * @see https://api-docs.poloniex.com/spot/api/private/wallet#withdraw-currency
2831
+ * @param {string} code unified currency code
2832
+ * @param {float} amount the amount to withdraw
2833
+ * @param {string} address the address to withdraw to
2834
+ * @param {string} tag
2835
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2836
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2837
+ */
2838
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2839
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
2840
+ this.checkAddress(address);
2841
+ const [request, extraParams, currency, networkEntry] = this.prepareRequestForDepositAddress(code, params);
2842
+ params = extraParams;
2843
+ request['amount'] = this.currencyToPrecision(code, amount);
2844
+ request['address'] = address;
2845
+ if (tag !== undefined) {
2846
+ request['paymentId'] = tag;
2847
+ }
2848
+ const response = await this.privatePostWalletsWithdraw(this.extend(request, params));
2849
+ //
2850
+ // {
2851
+ // "response": "Withdrew 1.00000000 USDT.",
2852
+ // "email2FA": false,
2853
+ // "withdrawalNumber": 13449869
2854
+ // }
2855
+ //
2856
+ const withdrawResponse = {
2857
+ 'response': response,
2858
+ 'withdrawNetworkEntry': networkEntry,
2859
+ };
2860
+ return this.parseTransaction(withdrawResponse, currency);
2861
+ }
2862
+ async fetchTransactionsHelper(code = undefined, since = undefined, limit = undefined, params = {}) {
2863
+ await this.loadMarkets();
2864
+ const year = 31104000; // 60 * 60 * 24 * 30 * 12 = one year of history, why not
2865
+ const now = this.seconds();
2866
+ const start = (since !== undefined) ? this.parseToInt(since / 1000) : now - 10 * year;
2867
+ const request = {
2868
+ 'start': start,
2869
+ 'end': now, // UNIX timestamp, required
2870
+ };
2871
+ const response = await this.privateGetWalletsActivity(this.extend(request, params));
2872
+ //
2873
+ // {
2874
+ // "adjustments":[],
2875
+ // "deposits":[
2876
+ // {
2877
+ // "currency": "BTC",
2878
+ // "address": "1MEtiqJWru53FhhHrfJPPvd2tC3TPDVcmW",
2879
+ // "amount": "0.01063000",
2880
+ // "confirmations": 1,
2881
+ // "txid": "952b0e1888d6d491591facc0d37b5ebec540ac1efb241fdbc22bcc20d1822fb6",
2882
+ // "timestamp": 1507916888,
2883
+ // "status": "COMPLETE"
2884
+ // },
2885
+ // {
2886
+ // "currency": "ETH",
2887
+ // "address": "0x20108ba20b65c04d82909e91df06618107460197",
2888
+ // "amount": "4.00000000",
2889
+ // "confirmations": 38,
2890
+ // "txid": "0x4be260073491fe63935e9e0da42bd71138fdeb803732f41501015a2d46eb479d",
2891
+ // "timestamp": 1525060430,
2892
+ // "status": "COMPLETE"
2893
+ // }
2894
+ // ],
2895
+ // "withdrawals":[
2896
+ // {
2897
+ // "withdrawalNumber":13449869,
2898
+ // "currency":"USDTTRON", // not documented in API docs, see commonCurrencies in describe()
2899
+ // "address":"TXGaqPW23JdRWhsVwS2mRsGsegbdnAd3Rw",
2900
+ // "amount":"1.00000000",
2901
+ // "fee":"0.00000000",
2902
+ // "timestamp":1591573420,
2903
+ // "status":"COMPLETE: dadf427224b3d44b38a2c13caa4395e4666152556ca0b2f67dbd86a95655150f",
2904
+ // "ipAddress":"x.x.x.x",
2905
+ // "canCancel":0,
2906
+ // "canResendEmail":0,
2907
+ // "paymentID":null,
2908
+ // "scope":"crypto"
2909
+ // },
2910
+ // {
2911
+ // "withdrawalNumber": 8224394,
2912
+ // "currency": "EMC2",
2913
+ // "address": "EYEKyCrqTNmVCpdDV8w49XvSKRP9N3EUyF",
2914
+ // "amount": "63.10796020",
2915
+ // "fee": "0.01000000",
2916
+ // "timestamp": 1510819838,
2917
+ // "status": "COMPLETE: d37354f9d02cb24d98c8c4fc17aa42f475530b5727effdf668ee5a43ce667fd6",
2918
+ // "ipAddress": "x.x.x.x"
2919
+ // },
2920
+ // {
2921
+ // "withdrawalNumber": 9290444,
2922
+ // "currency": "ETH",
2923
+ // "address": "0x191015ff2e75261d50433fbd05bd57e942336149",
2924
+ // "amount": "0.15500000",
2925
+ // "fee": "0.00500000",
2926
+ // "timestamp": 1514099289,
2927
+ // "status": "COMPLETE: 0x12d444493b4bca668992021fd9e54b5292b8e71d9927af1f076f554e4bea5b2d",
2928
+ // "ipAddress": "x.x.x.x"
2929
+ // },
2930
+ // {
2931
+ // "withdrawalNumber": 11518260,
2932
+ // "currency": "BTC",
2933
+ // "address": "8JoDXAmE1GY2LRK8jD1gmAmgRPq54kXJ4t",
2934
+ // "amount": "0.20000000",
2935
+ // "fee": "0.00050000",
2936
+ // "timestamp": 1527918155,
2937
+ // "status": "COMPLETE: 1864f4ebb277d90b0b1ff53259b36b97fa1990edc7ad2be47c5e0ab41916b5ff",
2938
+ // "ipAddress": "x.x.x.x"
2939
+ // }
2940
+ // ]
2941
+ // }
2942
+ //
2943
+ return response;
2944
+ }
2945
+ /**
2946
+ * @method
2947
+ * @name poloniex#fetchDepositsWithdrawals
2948
+ * @description fetch history of deposits and withdrawals
2949
+ * @see https://api-docs.poloniex.com/spot/api/private/wallet#wallets-activity-records
2950
+ * @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
2951
+ * @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
2952
+ * @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
2953
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2954
+ * @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2955
+ */
2956
+ async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2957
+ await this.loadMarkets();
2958
+ const response = await this.fetchTransactionsHelper(code, since, limit, params);
2959
+ let currency = undefined;
2960
+ if (code !== undefined) {
2961
+ currency = this.currency(code);
2962
+ }
2963
+ const withdrawals = this.safeValue(response, 'withdrawals', []);
2964
+ const deposits = this.safeValue(response, 'deposits', []);
2965
+ const withdrawalTransactions = this.parseTransactions(withdrawals, currency, since, limit);
2966
+ const depositTransactions = this.parseTransactions(deposits, currency, since, limit);
2967
+ const transactions = this.arrayConcat(depositTransactions, withdrawalTransactions);
2968
+ return this.filterByCurrencySinceLimit(this.sortBy(transactions, 'timestamp'), code, since, limit);
2969
+ }
2970
+ /**
2971
+ * @method
2972
+ * @name poloniex#fetchWithdrawals
2973
+ * @description fetch all withdrawals made from an account
2974
+ * @see https://api-docs.poloniex.com/spot/api/private/wallet#wallets-activity-records
2975
+ * @param {string} code unified currency code
2976
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
2977
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
2978
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2979
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2980
+ */
2981
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
2982
+ const response = await this.fetchTransactionsHelper(code, since, limit, params);
2983
+ let currency = undefined;
2984
+ if (code !== undefined) {
2985
+ currency = this.currency(code);
2986
+ }
2987
+ const withdrawals = this.safeValue(response, 'withdrawals', []);
2988
+ const transactions = this.parseTransactions(withdrawals, currency, since, limit);
2989
+ return this.filterByCurrencySinceLimit(transactions, code, since, limit);
2990
+ }
2991
+ /**
2992
+ * @method
2993
+ * @name poloniex#fetchDepositWithdrawFees
2994
+ * @description fetch deposit and withdraw fees
2995
+ * @see https://api-docs.poloniex.com/spot/api/public/reference-data#currency-information
2996
+ * @param {string[]|undefined} codes list of unified currency codes
2997
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2998
+ * @returns {object[]} a list of [fees structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
2999
+ */
3000
+ async fetchDepositWithdrawFees(codes = undefined, params = {}) {
3001
+ await this.loadMarkets();
3002
+ const response = await this.publicGetCurrencies(this.extend(params, { 'includeMultiChainCurrencies': true }));
3003
+ //
3004
+ // [
3005
+ // {
3006
+ // "1CR": {
3007
+ // "id": 1,
3008
+ // "name": "1CRedit",
3009
+ // "description": "BTC Clone",
3010
+ // "type": "address",
3011
+ // "withdrawalFee": "0.01000000",
3012
+ // "minConf": 10000,
3013
+ // "depositAddress": null,
3014
+ // "blockchain": "1CR",
3015
+ // "delisted": false,
3016
+ // "tradingState": "NORMAL",
3017
+ // "walletState": "DISABLED",
3018
+ // "parentChain": null,
3019
+ // "isMultiChain": false,
3020
+ // "isChildChain": false,
3021
+ // "childChains": []
3022
+ // }
3023
+ // }
3024
+ // ]
3025
+ //
3026
+ const data = {};
3027
+ for (let i = 0; i < response.length; i++) {
3028
+ const entry = response[i];
3029
+ const currencies = Object.keys(entry);
3030
+ const currencyId = this.safeString(currencies, 0);
3031
+ data[currencyId] = entry[currencyId];
3032
+ }
3033
+ return this.parseDepositWithdrawFees(data, codes);
3034
+ }
3035
+ parseDepositWithdrawFees(response, codes = undefined, currencyIdKey = undefined) {
3036
+ //
3037
+ // {
3038
+ // "1CR": {
3039
+ // "id": 1,
3040
+ // "name": "1CRedit",
3041
+ // "description": "BTC Clone",
3042
+ // "type": "address",
3043
+ // "withdrawalFee": "0.01000000",
3044
+ // "minConf": 10000,
3045
+ // "depositAddress": null,
3046
+ // "blockchain": "1CR",
3047
+ // "delisted": false,
3048
+ // "tradingState": "NORMAL",
3049
+ // "walletState": "DISABLED",
3050
+ // "parentChain": null,
3051
+ // "isMultiChain": false,
3052
+ // "isChildChain": false,
3053
+ // "childChains": []
3054
+ // },
3055
+ // }
3056
+ //
3057
+ const depositWithdrawFees = {};
3058
+ codes = this.marketCodes(codes);
3059
+ const responseKeys = Object.keys(response);
3060
+ for (let i = 0; i < responseKeys.length; i++) {
3061
+ const currencyId = responseKeys[i];
3062
+ const code = this.safeCurrencyCode(currencyId);
3063
+ const feeInfo = response[currencyId];
3064
+ if ((codes === undefined) || (this.inArray(code, codes))) {
3065
+ const currency = this.currency(code);
3066
+ depositWithdrawFees[code] = this.parseDepositWithdrawFee(feeInfo, currency);
3067
+ const childChains = this.safeValue(feeInfo, 'childChains');
3068
+ const chainsLength = childChains.length;
3069
+ if (chainsLength > 0) {
3070
+ for (let j = 0; j < childChains.length; j++) {
3071
+ let networkId = childChains[j];
3072
+ networkId = networkId.replace(code, '');
3073
+ const networkCode = this.networkIdToCode(networkId);
3074
+ const networkInfo = this.safeValue(response, networkId);
3075
+ const networkObject = {};
3076
+ const withdrawFee = this.safeNumber(networkInfo, 'withdrawalFee');
3077
+ networkObject[networkCode] = {
3078
+ 'withdraw': {
3079
+ 'fee': withdrawFee,
3080
+ 'percentage': (withdrawFee !== undefined) ? false : undefined,
3081
+ },
3082
+ 'deposit': {
3083
+ 'fee': undefined,
3084
+ 'percentage': undefined,
3085
+ },
3086
+ };
3087
+ depositWithdrawFees[code]['networks'] = this.extend(depositWithdrawFees[code]['networks'], networkObject);
3088
+ }
3089
+ }
3090
+ }
3091
+ }
3092
+ return depositWithdrawFees;
3093
+ }
3094
+ parseDepositWithdrawFee(fee, currency = undefined) {
3095
+ const depositWithdrawFee = this.depositWithdrawFee({});
3096
+ depositWithdrawFee['info'][currency['code']] = fee;
3097
+ const networkId = this.safeString(fee, 'blockchain');
3098
+ const withdrawFee = this.safeNumber(fee, 'withdrawalFee');
3099
+ const withdrawResult = {
3100
+ 'fee': withdrawFee,
3101
+ 'percentage': (withdrawFee !== undefined) ? false : undefined,
3102
+ };
3103
+ const depositResult = {
3104
+ 'fee': undefined,
3105
+ 'percentage': undefined,
3106
+ };
3107
+ depositWithdrawFee['withdraw'] = withdrawResult;
3108
+ depositWithdrawFee['deposit'] = depositResult;
3109
+ const networkCode = this.networkIdToCode(networkId);
3110
+ depositWithdrawFee['networks'][networkCode] = {
3111
+ 'withdraw': withdrawResult,
3112
+ 'deposit': depositResult,
3113
+ };
3114
+ return depositWithdrawFee;
3115
+ }
3116
+ /**
3117
+ * @method
3118
+ * @name poloniex#fetchDeposits
3119
+ * @description fetch all deposits made to an account
3120
+ * @see https://api-docs.poloniex.com/spot/api/private/wallet#wallets-activity-records
3121
+ * @param {string} code unified currency code
3122
+ * @param {int} [since] the earliest time in ms to fetch deposits for
3123
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
3124
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3125
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
3126
+ */
3127
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
3128
+ const response = await this.fetchTransactionsHelper(code, since, limit, params);
3129
+ let currency = undefined;
3130
+ if (code !== undefined) {
3131
+ currency = this.currency(code);
3132
+ }
3133
+ const deposits = this.safeValue(response, 'deposits', []);
3134
+ const transactions = this.parseTransactions(deposits, currency, since, limit);
3135
+ return this.filterByCurrencySinceLimit(transactions, code, since, limit);
3136
+ }
3137
+ parseTransactionStatus(status) {
3138
+ const statuses = {
3139
+ 'COMPLETE': 'ok',
3140
+ 'COMPLETED': 'ok',
3141
+ 'AWAITING APPROVAL': 'pending',
3142
+ 'AWAITING_APPROVAL': 'pending',
3143
+ 'PENDING': 'pending',
3144
+ 'PROCESSING': 'pending',
3145
+ 'COMPLETE ERROR': 'failed',
3146
+ 'COMPLETE_ERROR': 'failed',
3147
+ };
3148
+ return this.safeString(statuses, status, status);
3149
+ }
3150
+ parseTransaction(transaction, currency = undefined) {
3151
+ //
3152
+ // deposits
3153
+ //
3154
+ // {
3155
+ // "txid": "f49d489616911db44b740612d19464521179c76ebe9021af85b6de1e2f8d68cd",
3156
+ // "amount": "49798.01987021",
3157
+ // "status": "COMPLETE",
3158
+ // "address": "DJVJZ58tJC8UeUv9Tqcdtn6uhWobouxFLT",
3159
+ // "currency": "DOGE",
3160
+ // "timestamp": 1524321838,
3161
+ // "confirmations": 3371,
3162
+ // "depositNumber": 134587098
3163
+ // }
3164
+ //
3165
+ // withdrawals
3166
+ //
3167
+ // {
3168
+ // "withdrawalRequestsId": 7397527,
3169
+ // "currency": "ETC",
3170
+ // "address": "0x26419a62055af459d2cd69bb7392f5100b75e304",
3171
+ // "amount": "13.19951600",
3172
+ // "fee": "0.01000000",
3173
+ // "timestamp": 1506010932,
3174
+ // "status": "COMPLETED",
3175
+ // "txid": "343346392f82ac16e8c2604f2a604b7b2382d0e9d8030f673821f8de4b5f5bk",
3176
+ // "ipAddress": "1.2.3.4",
3177
+ // "paymentID": null
3178
+ // }
3179
+ //
3180
+ // withdraw
3181
+ //
3182
+ // {
3183
+ // "withdrawalRequestsId": 33485231
3184
+ // }
3185
+ //
3186
+ // if it's being parsed from "withdraw()" method, get the original response
3187
+ if ('withdrawNetworkEntry' in transaction) {
3188
+ transaction = transaction['response'];
3189
+ }
3190
+ const timestamp = this.safeTimestamp(transaction, 'timestamp');
3191
+ const currencyId = this.safeString(transaction, 'currency');
3192
+ const code = this.safeCurrencyCode(currencyId);
3193
+ let status = this.safeString(transaction, 'status', 'pending');
3194
+ status = this.parseTransactionStatus(status);
3195
+ const txid = this.safeString(transaction, 'txid');
3196
+ const type = ('withdrawalRequestsId' in transaction) ? 'withdrawal' : 'deposit';
3197
+ const id = this.safeString2(transaction, 'withdrawalRequestsId', 'depositNumber');
3198
+ const address = this.safeString(transaction, 'address');
3199
+ const tag = this.safeString(transaction, 'paymentID');
3200
+ let amountString = this.safeString(transaction, 'amount');
3201
+ const feeCostString = this.safeString(transaction, 'fee');
3202
+ if (type === 'withdrawal') {
3203
+ amountString = Precise.stringSub(amountString, feeCostString);
3204
+ }
3205
+ return {
3206
+ 'info': transaction,
3207
+ 'id': id,
3208
+ 'currency': code,
3209
+ 'amount': this.parseNumber(amountString),
3210
+ 'network': undefined,
3211
+ 'address': address,
3212
+ 'addressTo': undefined,
3213
+ 'addressFrom': undefined,
3214
+ 'tag': tag,
3215
+ 'tagTo': undefined,
3216
+ 'tagFrom': undefined,
3217
+ 'status': status,
3218
+ 'type': type,
3219
+ 'updated': undefined,
3220
+ 'txid': txid,
3221
+ 'timestamp': timestamp,
3222
+ 'datetime': this.iso8601(timestamp),
3223
+ 'comment': undefined,
3224
+ 'internal': undefined,
3225
+ 'fee': {
3226
+ 'currency': code,
3227
+ 'cost': this.parseNumber(feeCostString),
3228
+ 'rate': undefined,
3229
+ },
3230
+ };
3231
+ }
3232
+ /**
3233
+ * @method
3234
+ * @name poloniex#setLeverage
3235
+ * @description set the level of leverage for a market
3236
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/set-leverage
3237
+ * @param {int} leverage the rate of leverage
3238
+ * @param {string} symbol unified market symbol
3239
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3240
+ * @param {string} [params.marginMode] 'cross' or 'isolated'
3241
+ * @returns {object} response from the exchange
3242
+ */
3243
+ async setLeverage(leverage, symbol = undefined, params = {}) {
3244
+ if (symbol === undefined) {
3245
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
3246
+ }
3247
+ await this.loadMarkets();
3248
+ const market = this.market(symbol);
3249
+ let marginMode = undefined;
3250
+ [marginMode, params] = this.handleMarginModeAndParams('setLeverage', params);
3251
+ if (marginMode === undefined) {
3252
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a marginMode parameter "cross" or "isolated"');
3253
+ }
3254
+ let hedged = undefined;
3255
+ [hedged, params] = this.handleParamBool(params, 'hedged', false);
3256
+ if (hedged) {
3257
+ if (!('posSide' in params)) {
3258
+ throw new ArgumentsRequired(this.id + ' setLeverage() requires a posSide parameter for hedged mode: "LONG" or "SHORT"');
3259
+ }
3260
+ }
3261
+ const request = {
3262
+ 'lever': leverage,
3263
+ 'mgnMode': marginMode.toUpperCase(),
3264
+ 'symbol': market['id'],
3265
+ };
3266
+ const response = await this.swapPrivatePostV3PositionLeverage(this.extend(request, params));
3267
+ return response;
3268
+ }
3269
+ /**
3270
+ * @method
3271
+ * @name poloniex#fetchLeverage
3272
+ * @description fetch the set leverage for a market
3273
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/get-leverages
3274
+ * @param {string} symbol unified market symbol
3275
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3276
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
3277
+ */
3278
+ async fetchLeverage(symbol, params = {}) {
3279
+ await this.loadMarkets();
3280
+ const market = this.market(symbol);
3281
+ const request = {
3282
+ 'symbol': market['id'],
3283
+ };
3284
+ let marginMode = undefined;
3285
+ [marginMode, params] = this.handleMarginModeAndParams('fetchLeverage', params);
3286
+ if (marginMode === undefined) {
3287
+ throw new ArgumentsRequired(this.id + ' fetchLeverage() requires a marginMode parameter "cross" or "isolated"');
3288
+ }
3289
+ request['mgnMode'] = marginMode.toUpperCase();
3290
+ const response = await this.swapPrivateGetV3PositionLeverages(this.extend(request, params));
3291
+ //
3292
+ // for one-way mode:
3293
+ //
3294
+ // {
3295
+ // "code": "200",
3296
+ // "msg": "",
3297
+ // "data": [
3298
+ // {
3299
+ // "symbol": "BTC_USDT_PERP",
3300
+ // "lever": "10",
3301
+ // "mgnMode": "CROSS",
3302
+ // "posSide": "BOTH"
3303
+ // }
3304
+ // ]
3305
+ // }
3306
+ //
3307
+ // for hedge:
3308
+ //
3309
+ // {
3310
+ // "code": "200",
3311
+ // "msg": "",
3312
+ // "data": [
3313
+ // {
3314
+ // "symbol": "BTC_USDT_PERP",
3315
+ // "lever": "20",
3316
+ // "mgnMode": "CROSS",
3317
+ // "posSide": "SHORT"
3318
+ // },
3319
+ // {
3320
+ // "symbol": "BTC_USDT_PERP",
3321
+ // "lever": "20",
3322
+ // "mgnMode": "CROSS",
3323
+ // "posSide": "LONG"
3324
+ // }
3325
+ // ]
3326
+ // }
3327
+ //
3328
+ return this.parseLeverage(response, market);
3329
+ }
3330
+ parseLeverage(leverage, market = undefined) {
3331
+ let shortLeverage = undefined;
3332
+ let longLeverage = undefined;
3333
+ let marketId = undefined;
3334
+ let marginMode = undefined;
3335
+ const data = this.safeList(leverage, 'data');
3336
+ for (let i = 0; i < data.length; i++) {
3337
+ const entry = data[i];
3338
+ marketId = this.safeString(entry, 'symbol');
3339
+ marginMode = this.safeString(entry, 'mgnMode');
3340
+ const lever = this.safeInteger(entry, 'lever');
3341
+ const posSide = this.safeString(entry, 'posSide');
3342
+ if (posSide === 'LONG') {
3343
+ longLeverage = lever;
3344
+ }
3345
+ else if (posSide === 'SHORT') {
3346
+ shortLeverage = lever;
3347
+ }
3348
+ else {
3349
+ longLeverage = lever;
3350
+ shortLeverage = lever;
3351
+ }
3352
+ }
3353
+ return {
3354
+ 'info': leverage,
3355
+ 'symbol': this.safeSymbol(marketId, market),
3356
+ 'marginMode': marginMode,
3357
+ 'longLeverage': longLeverage,
3358
+ 'shortLeverage': shortLeverage,
3359
+ };
3360
+ }
3361
+ /**
3362
+ * @method
3363
+ * @name poloniex#fetchPositionMode
3364
+ * @description fetchs the position mode, hedged or one way, hedged for binance is set identically for all linear markets or all inverse markets
3365
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/position-mode-switch
3366
+ * @param {string} symbol unified symbol of the market to fetch the order book for
3367
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3368
+ * @returns {object} an object detailing whether the market is in hedged or one-way mode
3369
+ */
3370
+ async fetchPositionMode(symbol = undefined, params = {}) {
3371
+ const response = await this.swapPrivateGetV3PositionMode(params);
3372
+ //
3373
+ // {
3374
+ // "code": "200",
3375
+ // "msg": "Success",
3376
+ // "data": {
3377
+ // "posMode": "ONE_WAY"
3378
+ // }
3379
+ // }
3380
+ //
3381
+ const data = this.safeDict(response, 'data', {});
3382
+ const posMode = this.safeString(data, 'posMode');
3383
+ const hedged = posMode === 'HEDGE';
3384
+ return {
3385
+ 'info': response,
3386
+ 'hedged': hedged,
3387
+ };
3388
+ }
3389
+ /**
3390
+ * @method
3391
+ * @name poloniex#setPositionMode
3392
+ * @description set hedged to true or false for a market
3393
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/position-mode-switch
3394
+ * @param {bool} hedged set to true to use dualSidePosition
3395
+ * @param {string} symbol not used by binance setPositionMode ()
3396
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3397
+ * @returns {object} response from the exchange
3398
+ */
3399
+ async setPositionMode(hedged, symbol = undefined, params = {}) {
3400
+ const mode = hedged ? 'HEDGE' : 'ONE_WAY';
3401
+ const request = {
3402
+ 'posMode': mode,
3403
+ };
3404
+ const response = await this.swapPrivatePostV3PositionMode(this.extend(request, params));
3405
+ //
3406
+ // {
3407
+ // "code": "200",
3408
+ // "msg": "Success",
3409
+ // "data": {}
3410
+ // }
3411
+ //
3412
+ return response;
3413
+ }
3414
+ /**
3415
+ * @method
3416
+ * @name poloniex#fetchPositions
3417
+ * @description fetch all open positions
3418
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/get-current-position
3419
+ * @param {string[]|undefined} symbols list of unified market symbols
3420
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3421
+ * @param {boolean} [params.standard] whether to fetch standard contract positions
3422
+ * @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
3423
+ */
3424
+ async fetchPositions(symbols = undefined, params = {}) {
3425
+ await this.loadMarkets();
3426
+ symbols = this.marketSymbols(symbols);
3427
+ const response = await this.swapPrivateGetV3TradePositionOpens(params);
3428
+ //
3429
+ // {
3430
+ // "code": "200",
3431
+ // "msg": "",
3432
+ // "data": [
3433
+ // {
3434
+ // "symbol": "BTC_USDT_PERP",
3435
+ // "posSide": "LONG",
3436
+ // "side": "BUY",
3437
+ // "mgnMode": "CROSS",
3438
+ // "openAvgPx": "94193.42",
3439
+ // "qty": "1",
3440
+ // "availQty": "1",
3441
+ // "lever": "20",
3442
+ // "adl": "0.3007",
3443
+ // "liqPx": "84918.201844064386317906",
3444
+ // "im": "4.7047795",
3445
+ // "mm": "0.56457354",
3446
+ // "upl": "-0.09783",
3447
+ // "uplRatio": "-0.0207",
3448
+ // "pnl": "0",
3449
+ // "markPx": "94095.59",
3450
+ // "mgnRatio": "0.0582",
3451
+ // "state": "NORMAL",
3452
+ // "cTime": "1740950344401",
3453
+ // "uTime": "1740950344401",
3454
+ // "mgn": "4.7047795",
3455
+ // "actType": "TRADING",
3456
+ // "maxWAmt": "0",
3457
+ // "tpTrgPx": "",
3458
+ // "slTrgPx": ""
3459
+ // }
3460
+ // ]
3461
+ // }
3462
+ //
3463
+ const positions = this.safeList(response, 'data', []);
3464
+ return this.parsePositions(positions, symbols);
3465
+ }
3466
+ parsePosition(position, market = undefined) {
3467
+ //
3468
+ // {
3469
+ // "symbol": "BTC_USDT_PERP",
3470
+ // "posSide": "LONG",
3471
+ // "side": "BUY",
3472
+ // "mgnMode": "CROSS",
3473
+ // "openAvgPx": "94193.42",
3474
+ // "qty": "1",
3475
+ // "availQty": "1",
3476
+ // "lever": "20",
3477
+ // "adl": "0.3007",
3478
+ // "liqPx": "84918.201844064386317906",
3479
+ // "im": "4.7047795",
3480
+ // "mm": "0.56457354",
3481
+ // "upl": "-0.09783",
3482
+ // "uplRatio": "-0.0207",
3483
+ // "pnl": "0",
3484
+ // "markPx": "94095.59",
3485
+ // "mgnRatio": "0.0582",
3486
+ // "state": "NORMAL",
3487
+ // "cTime": "1740950344401",
3488
+ // "uTime": "1740950344401",
3489
+ // "mgn": "4.7047795",
3490
+ // "actType": "TRADING",
3491
+ // "maxWAmt": "0",
3492
+ // "tpTrgPx": "",
3493
+ // "slTrgPx": ""
3494
+ // }
3495
+ //
3496
+ const marketId = this.safeString(position, 'symbol');
3497
+ market = this.safeMarket(marketId, market);
3498
+ const timestamp = this.safeInteger(position, 'cTime');
3499
+ const marginMode = this.safeStringLower(position, 'mgnMode');
3500
+ const leverage = this.safeString(position, 'lever');
3501
+ const initialMargin = this.safeString(position, 'im');
3502
+ const notional = Precise.stringMul(leverage, initialMargin);
3503
+ const qty = this.safeString(position, 'qty');
3504
+ const avgPrice = this.safeString(position, 'openAvgPx');
3505
+ const collateral = Precise.stringMul(qty, avgPrice);
3506
+ // todo: some more fields
3507
+ return this.safePosition({
3508
+ 'info': position,
3509
+ 'id': undefined,
3510
+ 'symbol': market['symbol'],
3511
+ 'notional': notional,
3512
+ 'marginMode': marginMode,
3513
+ 'liquidationPrice': this.safeNumber(position, 'liqPx'),
3514
+ 'entryPrice': this.safeNumber(position, 'openAvgPx'),
3515
+ 'unrealizedPnl': this.safeNumber(position, 'upl'),
3516
+ 'percentage': undefined,
3517
+ 'contracts': this.safeNumber(position, 'qty'),
3518
+ 'contractSize': undefined,
3519
+ 'markPrice': this.safeNumber(position, 'markPx'),
3520
+ 'lastPrice': undefined,
3521
+ 'side': this.safeStringLower(position, 'posSide'),
3522
+ 'hedged': undefined,
3523
+ 'timestamp': timestamp,
3524
+ 'datetime': this.iso8601(timestamp),
3525
+ 'lastUpdateTimestamp': undefined,
3526
+ 'maintenanceMargin': this.safeNumber(position, 'mm'),
3527
+ 'maintenanceMarginPercentage': undefined,
3528
+ 'collateral': collateral,
3529
+ 'initialMargin': initialMargin,
3530
+ 'initialMarginPercentage': undefined,
3531
+ 'leverage': parseInt(leverage),
3532
+ 'marginRatio': this.safeNumber(position, 'mgnRatio'),
3533
+ 'stopLossPrice': this.safeNumber(position, 'slTrgPx'),
3534
+ 'takeProfitPrice': this.safeNumber(position, 'tpTrgPx'),
3535
+ });
3536
+ }
3537
+ async modifyMarginHelper(symbol, amount, type, params = {}) {
3538
+ await this.loadMarkets();
3539
+ const market = this.market(symbol);
3540
+ amount = this.amountToPrecision(symbol, amount);
3541
+ const request = {
3542
+ 'symbol': market['id'],
3543
+ 'amt': Precise.stringAbs(amount),
3544
+ 'type': type.toUpperCase(), // 'ADD' or 'REDUCE'
3545
+ };
3546
+ // todo: hedged handling, tricky
3547
+ if (!('posMode' in params)) {
3548
+ request['posMode'] = 'BOTH';
3549
+ }
3550
+ const response = await this.swapPrivatePostV3TradePositionMargin(this.extend(request, params));
3551
+ //
3552
+ // {
3553
+ // "code": 200,
3554
+ // "data": {
3555
+ // "amt": "50",
3556
+ // "lever": "20",
3557
+ // "symbol": "DOT_USDT_PERP",
3558
+ // "posSide": "BOTH",
3559
+ // "type": "ADD"
3560
+ // },
3561
+ // "msg": "Success"
3562
+ // }
3563
+ //
3564
+ if (type === 'reduce') {
3565
+ amount = Precise.stringAbs(amount);
3566
+ }
3567
+ const data = this.safeDict(response, 'data');
3568
+ return this.parseMarginModification(data, market);
3569
+ }
3570
+ parseMarginModification(data, market = undefined) {
3571
+ const marketId = this.safeString(data, 'symbol');
3572
+ market = this.safeMarket(marketId, market);
3573
+ const rawType = this.safeString(data, 'type');
3574
+ const type = (rawType === 'ADD') ? 'add' : 'reduce';
3575
+ return {
3576
+ 'info': data,
3577
+ 'symbol': market['symbol'],
3578
+ 'type': type,
3579
+ 'marginMode': undefined,
3580
+ 'amount': this.safeNumber(data, 'amt'),
3581
+ 'total': undefined,
3582
+ 'code': undefined,
3583
+ 'status': 'ok',
3584
+ 'timestamp': undefined,
3585
+ 'datetime': undefined,
3586
+ };
3587
+ }
3588
+ /**
3589
+ * @method
3590
+ * @name poloniex#reduceMargin
3591
+ * @description remove margin from a position
3592
+ * @param {string} symbol unified market symbol
3593
+ * @param {float} amount the amount of margin to remove
3594
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3595
+ * @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=reduce-margin-structure}
3596
+ */
3597
+ async reduceMargin(symbol, amount, params = {}) {
3598
+ return await this.modifyMarginHelper(symbol, -amount, 'reduce', params);
3599
+ }
3600
+ /**
3601
+ * @method
3602
+ * @name poloniex#addMargin
3603
+ * @description add margin
3604
+ * @param {string} symbol unified market symbol
3605
+ * @param {float} amount amount of margin to add
3606
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3607
+ * @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=add-margin-structure}
3608
+ */
3609
+ async addMargin(symbol, amount, params = {}) {
3610
+ return await this.modifyMarginHelper(symbol, amount, 'add', params);
3611
+ }
3612
+ nonce() {
3613
+ return this.milliseconds();
3614
+ }
3615
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
3616
+ let url = this.urls['api']['spot'];
3617
+ if (this.inArray(api, ['swapPublic', 'swapPrivate'])) {
3618
+ url = this.urls['api']['swap'];
3619
+ }
3620
+ const query = this.omit(params, this.extractParams(path));
3621
+ const implodedPath = this.implodeParams(path, params);
3622
+ if (api === 'public' || api === 'swapPublic') {
3623
+ url += '/' + implodedPath;
3624
+ if (Object.keys(query).length) {
3625
+ url += '?' + this.urlencode(query);
3626
+ }
3627
+ }
3628
+ else {
3629
+ this.checkRequiredCredentials();
3630
+ const timestamp = this.nonce().toString();
3631
+ let auth = method + "\n"; // eslint-disable-line quotes
3632
+ url += '/' + implodedPath;
3633
+ auth += '/' + implodedPath;
3634
+ if ((method === 'POST') || (method === 'PUT') || (method === 'DELETE')) {
3635
+ auth += "\n"; // eslint-disable-line quotes
3636
+ if (Object.keys(query).length) {
3637
+ body = this.json(query);
3638
+ auth += 'requestBody=' + body + '&';
3639
+ }
3640
+ auth += 'signTimestamp=' + timestamp;
3641
+ }
3642
+ else {
3643
+ let sortedQuery = this.extend({ 'signTimestamp': timestamp }, query);
3644
+ sortedQuery = this.keysort(sortedQuery);
3645
+ auth += "\n" + this.urlencode(sortedQuery); // eslint-disable-line quotes
3646
+ if (Object.keys(query).length) {
3647
+ url += '?' + this.urlencode(query);
3648
+ }
3649
+ }
3650
+ const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256, 'base64');
3651
+ headers = {
3652
+ 'Content-Type': 'application/json',
3653
+ 'key': this.apiKey,
3654
+ 'signTimestamp': timestamp,
3655
+ 'signature': signature,
3656
+ };
3657
+ }
3658
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
3659
+ }
3660
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
3661
+ if (response === undefined) {
3662
+ return undefined;
3663
+ }
3664
+ //
3665
+ // {
3666
+ // "code" : 21709,
3667
+ // "message" : "Low available balance"
3668
+ // }
3669
+ //
3670
+ const responseCode = this.safeString(response, 'code');
3671
+ if ((responseCode !== undefined) && (responseCode !== '200')) {
3672
+ const codeInner = response['code'];
3673
+ const message = this.safeString(response, 'message');
3674
+ const feedback = this.id + ' ' + body;
3675
+ this.throwExactlyMatchedException(this.exceptions['exact'], codeInner, feedback);
3676
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
3677
+ throw new ExchangeError(feedback); // unknown message
3678
+ }
3679
+ return undefined;
3680
+ }
3681
+ }