ccxt 4.4.70 → 4.4.72

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 (935) hide show
  1. package/README.md +5 -8
  2. package/dist/ccxt.browser.min.js +7 -7
  3. package/dist/cjs/ccxt.js +1 -6
  4. package/dist/cjs/src/abstract/ace.js +1 -1
  5. package/dist/cjs/src/abstract/alpaca.js +1 -1
  6. package/dist/cjs/src/abstract/ascendex.js +1 -1
  7. package/dist/cjs/src/abstract/bigone.js +1 -1
  8. package/dist/cjs/src/abstract/binance.js +1 -1
  9. package/dist/cjs/src/abstract/bingx.js +1 -1
  10. package/dist/cjs/src/abstract/bit2c.js +1 -1
  11. package/dist/cjs/src/abstract/bitbank.js +1 -1
  12. package/dist/cjs/src/abstract/bitbns.js +1 -1
  13. package/dist/cjs/src/abstract/bitfinex.js +1 -1
  14. package/dist/cjs/src/abstract/bitfinex1.js +1 -1
  15. package/dist/cjs/src/abstract/bitflyer.js +1 -1
  16. package/dist/cjs/src/abstract/bitget.js +1 -1
  17. package/dist/cjs/src/abstract/bithumb.js +1 -1
  18. package/dist/cjs/src/abstract/bitmart.js +1 -1
  19. package/dist/cjs/src/abstract/bitmex.js +1 -1
  20. package/dist/cjs/src/abstract/bitopro.js +1 -1
  21. package/dist/cjs/src/abstract/bitrue.js +1 -1
  22. package/dist/cjs/src/abstract/bitso.js +1 -1
  23. package/dist/cjs/src/abstract/bitstamp.js +1 -1
  24. package/dist/cjs/src/abstract/bitteam.js +1 -1
  25. package/dist/cjs/src/abstract/bitvavo.js +1 -1
  26. package/dist/cjs/src/abstract/bl3p.js +1 -1
  27. package/dist/cjs/src/abstract/blockchaincom.js +1 -1
  28. package/dist/cjs/src/abstract/blofin.js +1 -1
  29. package/dist/cjs/src/abstract/btcalpha.js +1 -1
  30. package/dist/cjs/src/abstract/btcbox.js +1 -1
  31. package/dist/cjs/src/abstract/btcmarkets.js +1 -1
  32. package/dist/cjs/src/abstract/btcturk.js +1 -1
  33. package/dist/cjs/src/abstract/bybit.js +1 -1
  34. package/dist/cjs/src/abstract/cex.js +1 -1
  35. package/dist/cjs/src/abstract/coinbase.js +1 -1
  36. package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
  37. package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
  38. package/dist/cjs/src/abstract/coincatch.js +1 -1
  39. package/dist/cjs/src/abstract/coincheck.js +1 -1
  40. package/dist/cjs/src/abstract/coinex.js +1 -1
  41. package/dist/cjs/src/abstract/coinlist.js +1 -1
  42. package/dist/cjs/src/abstract/coinmate.js +1 -1
  43. package/dist/cjs/src/abstract/coinmetro.js +1 -1
  44. package/dist/cjs/src/abstract/coinone.js +1 -1
  45. package/dist/cjs/src/abstract/coinsph.js +1 -1
  46. package/dist/cjs/src/abstract/coinspot.js +1 -1
  47. package/dist/cjs/src/abstract/cryptocom.js +1 -1
  48. package/dist/cjs/src/abstract/cryptomus.js +1 -1
  49. package/dist/cjs/src/abstract/defx.js +1 -1
  50. package/dist/cjs/src/abstract/delta.js +1 -1
  51. package/dist/cjs/src/abstract/deribit.js +1 -1
  52. package/dist/cjs/src/abstract/derive.js +1 -1
  53. package/dist/cjs/src/abstract/digifinex.js +1 -1
  54. package/dist/cjs/src/abstract/ellipx.js +1 -1
  55. package/dist/cjs/src/abstract/exmo.js +1 -1
  56. package/dist/cjs/src/abstract/gate.js +1 -1
  57. package/dist/cjs/src/abstract/gemini.js +1 -1
  58. package/dist/cjs/src/abstract/hashkey.js +1 -1
  59. package/dist/cjs/src/abstract/hitbtc.js +1 -1
  60. package/dist/cjs/src/abstract/hollaex.js +1 -1
  61. package/dist/cjs/src/abstract/htx.js +1 -1
  62. package/dist/cjs/src/abstract/huobijp.js +1 -1
  63. package/dist/cjs/src/abstract/hyperliquid.js +1 -1
  64. package/dist/cjs/src/abstract/idex.js +1 -1
  65. package/dist/cjs/src/abstract/independentreserve.js +1 -1
  66. package/dist/cjs/src/abstract/indodax.js +1 -1
  67. package/dist/cjs/src/abstract/kraken.js +1 -1
  68. package/dist/cjs/src/abstract/krakenfutures.js +1 -1
  69. package/dist/cjs/src/abstract/kucoin.js +1 -1
  70. package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
  71. package/dist/cjs/src/abstract/kuna.js +1 -1
  72. package/dist/cjs/src/abstract/latoken.js +1 -1
  73. package/dist/cjs/src/abstract/lbank.js +1 -1
  74. package/dist/cjs/src/abstract/luno.js +1 -1
  75. package/dist/cjs/src/abstract/mercado.js +1 -1
  76. package/dist/cjs/src/abstract/mexc.js +1 -1
  77. package/dist/cjs/src/abstract/ndax.js +1 -1
  78. package/dist/cjs/src/abstract/novadax.js +1 -1
  79. package/dist/cjs/src/abstract/oceanex.js +1 -1
  80. package/dist/cjs/src/abstract/okcoin.js +1 -1
  81. package/dist/cjs/src/abstract/okx.js +1 -1
  82. package/dist/cjs/src/abstract/onetrading.js +1 -1
  83. package/dist/cjs/src/abstract/oxfun.js +1 -1
  84. package/dist/cjs/src/abstract/p2b.js +1 -1
  85. package/dist/cjs/src/abstract/paradex.js +1 -1
  86. package/dist/cjs/src/abstract/paymium.js +1 -1
  87. package/dist/cjs/src/abstract/phemex.js +1 -1
  88. package/dist/cjs/src/abstract/poloniex.js +1 -1
  89. package/dist/cjs/src/abstract/poloniexfutures.js +1 -1
  90. package/dist/cjs/src/abstract/probit.js +1 -1
  91. package/dist/cjs/src/abstract/timex.js +1 -1
  92. package/dist/cjs/src/abstract/tokocrypto.js +1 -1
  93. package/dist/cjs/src/abstract/tradeogre.js +1 -1
  94. package/dist/cjs/src/abstract/upbit.js +1 -1
  95. package/dist/cjs/src/abstract/vertex.js +1 -1
  96. package/dist/cjs/src/abstract/wavesexchange.js +1 -1
  97. package/dist/cjs/src/abstract/whitebit.js +1 -1
  98. package/dist/cjs/src/abstract/woo.js +1 -1
  99. package/dist/cjs/src/abstract/woofipro.js +1 -1
  100. package/dist/cjs/src/abstract/xt.js +1 -1
  101. package/dist/cjs/src/abstract/yobit.js +1 -1
  102. package/dist/cjs/src/abstract/zaif.js +1 -1
  103. package/dist/cjs/src/abstract/zonda.js +1 -1
  104. package/dist/cjs/src/ace.js +1 -1
  105. package/dist/cjs/src/alpaca.js +1 -1
  106. package/dist/cjs/src/ascendex.js +2 -2
  107. package/dist/cjs/src/base/Exchange.js +33 -1
  108. package/dist/cjs/src/base/Precise.js +6 -0
  109. package/dist/cjs/src/base/errors.js +6 -0
  110. package/dist/cjs/src/base/functions/crypto.js +1 -1
  111. package/dist/cjs/src/base/functions/encode.js +1 -1
  112. package/dist/cjs/src/base/functions/misc.js +1 -0
  113. package/dist/cjs/src/base/functions/number.js +6 -0
  114. package/dist/cjs/src/base/functions/platform.js +6 -0
  115. package/dist/cjs/src/base/functions/rsa.js +1 -0
  116. package/dist/cjs/src/base/functions/string.js +6 -0
  117. package/dist/cjs/src/base/functions/throttle.js +1 -1
  118. package/dist/cjs/src/base/functions/time.js +6 -0
  119. package/dist/cjs/src/base/functions/totp.js +1 -0
  120. package/dist/cjs/src/base/functions/type.js +6 -0
  121. package/dist/cjs/src/base/functions.js +1 -1
  122. package/dist/cjs/src/base/ws/Cache.js +6 -0
  123. package/dist/cjs/src/base/ws/Client.js +1 -0
  124. package/dist/cjs/src/base/ws/Future.js +1 -1
  125. package/dist/cjs/src/base/ws/OrderBook.js +1 -1
  126. package/dist/cjs/src/base/ws/OrderBookSide.js +6 -0
  127. package/dist/cjs/src/base/ws/WsClient.js +1 -1
  128. package/dist/cjs/src/bequant.js +1 -1
  129. package/dist/cjs/src/bigone.js +1 -1
  130. package/dist/cjs/src/binance.js +108 -103
  131. package/dist/cjs/src/binancecoinm.js +1 -1
  132. package/dist/cjs/src/binanceus.js +1 -1
  133. package/dist/cjs/src/binanceusdm.js +1 -1
  134. package/dist/cjs/src/bingx.js +66 -44
  135. package/dist/cjs/src/bit2c.js +1 -1
  136. package/dist/cjs/src/bitbank.js +1 -1
  137. package/dist/cjs/src/bitbns.js +1 -1
  138. package/dist/cjs/src/bitcoincom.js +1 -1
  139. package/dist/cjs/src/bitfinex.js +1 -1
  140. package/dist/cjs/src/bitfinex1.js +1 -1
  141. package/dist/cjs/src/bitflyer.js +1 -1
  142. package/dist/cjs/src/bitget.js +2 -6
  143. package/dist/cjs/src/bithumb.js +1 -1
  144. package/dist/cjs/src/bitmart.js +16 -2
  145. package/dist/cjs/src/bitmex.js +1 -1
  146. package/dist/cjs/src/bitopro.js +2 -1
  147. package/dist/cjs/src/bitpanda.js +1 -1
  148. package/dist/cjs/src/bitrue.js +2 -1
  149. package/dist/cjs/src/bitso.js +1 -1
  150. package/dist/cjs/src/bitstamp.js +1 -1
  151. package/dist/cjs/src/bitteam.js +1 -1
  152. package/dist/cjs/src/bl3p.js +1 -1
  153. package/dist/cjs/src/blockchaincom.js +1 -1
  154. package/dist/cjs/src/blofin.js +1 -1
  155. package/dist/cjs/src/btcalpha.js +1 -1
  156. package/dist/cjs/src/btcbox.js +1 -1
  157. package/dist/cjs/src/btcmarkets.js +1 -1
  158. package/dist/cjs/src/btcturk.js +1 -1
  159. package/dist/cjs/src/bybit.js +1 -1
  160. package/dist/cjs/src/cex.js +3 -1
  161. package/dist/cjs/src/coinbase.js +2 -1
  162. package/dist/cjs/src/coinbaseadvanced.js +1 -1
  163. package/dist/cjs/src/coinbaseexchange.js +2 -0
  164. package/dist/cjs/src/coinbaseinternational.js +1 -0
  165. package/dist/cjs/src/coincatch.js +1 -1
  166. package/dist/cjs/src/coincheck.js +1 -1
  167. package/dist/cjs/src/coinex.js +1 -1
  168. package/dist/cjs/src/coinlist.js +1 -0
  169. package/dist/cjs/src/coinmate.js +1 -1
  170. package/dist/cjs/src/coinmetro.js +1 -1
  171. package/dist/cjs/src/coinone.js +1 -1
  172. package/dist/cjs/src/coinsph.js +1 -0
  173. package/dist/cjs/src/coinspot.js +1 -1
  174. package/dist/cjs/src/cryptocom.js +1 -1
  175. package/dist/cjs/src/cryptomus.js +1 -1
  176. package/dist/cjs/src/defx.js +1 -1
  177. package/dist/cjs/src/delta.js +1 -1
  178. package/dist/cjs/src/deribit.js +3 -1
  179. package/dist/cjs/src/derive.js +14 -8
  180. package/dist/cjs/src/digifinex.js +1 -1
  181. package/dist/cjs/src/ellipx.js +1 -1
  182. package/dist/cjs/src/exmo.js +1 -1
  183. package/dist/cjs/src/fmfwio.js +1 -1
  184. package/dist/cjs/src/gate.js +5 -1
  185. package/dist/cjs/src/gateio.js +1 -1
  186. package/dist/cjs/src/gemini.js +2 -1
  187. package/dist/cjs/src/hashkey.js +5 -3
  188. package/dist/cjs/src/hitbtc.js +1 -0
  189. package/dist/cjs/src/hollaex.js +1 -1
  190. package/dist/cjs/src/htx.js +1 -1
  191. package/dist/cjs/src/huobi.js +1 -1
  192. package/dist/cjs/src/huobijp.js +1 -1
  193. package/dist/cjs/src/hyperliquid.js +41 -1
  194. package/dist/cjs/src/idex.js +1 -1
  195. package/dist/cjs/src/independentreserve.js +1 -1
  196. package/dist/cjs/src/indodax.js +1 -1
  197. package/dist/cjs/src/kraken.js +84 -7
  198. package/dist/cjs/src/krakenfutures.js +5 -1
  199. package/dist/cjs/src/kucoin.js +5 -3
  200. package/dist/cjs/src/kucoinfutures.js +1 -1
  201. package/dist/cjs/src/kuna.js +1 -1
  202. package/dist/cjs/src/latoken.js +1 -1
  203. package/dist/cjs/src/lbank.js +1 -1
  204. package/dist/cjs/src/luno.js +1 -1
  205. package/dist/cjs/src/mercado.js +1 -1
  206. package/dist/cjs/src/mexc.js +9 -5
  207. package/dist/cjs/src/myokx.js +1 -1
  208. package/dist/cjs/src/ndax.js +1 -1
  209. package/dist/cjs/src/novadax.js +1 -1
  210. package/dist/cjs/src/oceanex.js +1 -1
  211. package/dist/cjs/src/okcoin.js +5 -1
  212. package/dist/cjs/src/okx.js +81 -79
  213. package/dist/cjs/src/onetrading.js +1 -1
  214. package/dist/cjs/src/oxfun.js +1 -1
  215. package/dist/cjs/src/p2b.js +1 -1
  216. package/dist/cjs/src/paradex.js +70 -10
  217. package/dist/cjs/src/paymium.js +1 -1
  218. package/dist/cjs/src/poloniex.js +1313 -82
  219. package/dist/cjs/src/poloniexfutures.js +1 -1
  220. package/dist/cjs/src/pro/alpaca.js +1 -1
  221. package/dist/cjs/src/pro/ascendex.js +1 -1
  222. package/dist/cjs/src/pro/bequant.js +1 -1
  223. package/dist/cjs/src/pro/binance.js +94 -94
  224. package/dist/cjs/src/pro/binancecoinm.js +1 -1
  225. package/dist/cjs/src/pro/binanceus.js +1 -1
  226. package/dist/cjs/src/pro/binanceusdm.js +1 -1
  227. package/dist/cjs/src/pro/bingx.js +64 -53
  228. package/dist/cjs/src/pro/bitcoincom.js +1 -1
  229. package/dist/cjs/src/pro/bitfinex.js +1 -1
  230. package/dist/cjs/src/pro/bitfinex1.js +1 -1
  231. package/dist/cjs/src/pro/bitget.js +1 -1
  232. package/dist/cjs/src/pro/bithumb.js +1 -1
  233. package/dist/cjs/src/pro/bitmart.js +20 -8
  234. package/dist/cjs/src/pro/bitmex.js +1 -1
  235. package/dist/cjs/src/pro/bitpanda.js +1 -1
  236. package/dist/cjs/src/pro/bitrue.js +1 -1
  237. package/dist/cjs/src/pro/bitstamp.js +1 -1
  238. package/dist/cjs/src/pro/bitvavo.js +1 -1
  239. package/dist/cjs/src/pro/blockchaincom.js +1 -1
  240. package/dist/cjs/src/pro/blofin.js +1 -1
  241. package/dist/cjs/src/pro/bybit.js +1 -1
  242. package/dist/cjs/src/pro/cex.js +1 -1
  243. package/dist/cjs/src/pro/coinbase.js +1 -1
  244. package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
  245. package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
  246. package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
  247. package/dist/cjs/src/pro/coincatch.js +1 -1
  248. package/dist/cjs/src/pro/coincheck.js +1 -1
  249. package/dist/cjs/src/pro/coinex.js +1 -1
  250. package/dist/cjs/src/pro/coinone.js +1 -1
  251. package/dist/cjs/src/pro/cryptocom.js +1 -1
  252. package/dist/cjs/src/pro/defx.js +1 -1
  253. package/dist/cjs/src/pro/deribit.js +1 -1
  254. package/dist/cjs/src/pro/derive.js +2 -2
  255. package/dist/cjs/src/pro/exmo.js +1 -1
  256. package/dist/cjs/src/pro/gate.js +1 -1
  257. package/dist/cjs/src/pro/gateio.js +1 -1
  258. package/dist/cjs/src/pro/gemini.js +1 -1
  259. package/dist/cjs/src/pro/hashkey.js +1 -1
  260. package/dist/cjs/src/pro/hitbtc.js +1 -1
  261. package/dist/cjs/src/pro/hollaex.js +1 -1
  262. package/dist/cjs/src/pro/htx.js +1 -1
  263. package/dist/cjs/src/pro/huobi.js +1 -1
  264. package/dist/cjs/src/pro/hyperliquid.js +1 -1
  265. package/dist/cjs/src/pro/idex.js +1 -1
  266. package/dist/cjs/src/pro/independentreserve.js +1 -1
  267. package/dist/cjs/src/pro/kraken.js +1 -1
  268. package/dist/cjs/src/pro/krakenfutures.js +2 -2
  269. package/dist/cjs/src/pro/kucoin.js +1 -1
  270. package/dist/cjs/src/pro/kucoinfutures.js +1 -1
  271. package/dist/cjs/src/pro/lbank.js +1 -0
  272. package/dist/cjs/src/pro/luno.js +1 -1
  273. package/dist/cjs/src/pro/mexc.js +1 -1
  274. package/dist/cjs/src/pro/myokx.js +1 -1
  275. package/dist/cjs/src/pro/ndax.js +1 -1
  276. package/dist/cjs/src/pro/okcoin.js +1 -1
  277. package/dist/cjs/src/pro/okx.js +1 -1
  278. package/dist/cjs/src/pro/onetrading.js +1 -1
  279. package/dist/cjs/src/pro/oxfun.js +1 -1
  280. package/dist/cjs/src/pro/p2b.js +1 -1
  281. package/dist/cjs/src/pro/paradex.js +1 -1
  282. package/dist/cjs/src/pro/phemex.js +1 -1
  283. package/dist/cjs/src/pro/poloniex.js +1 -1
  284. package/dist/cjs/src/pro/poloniexfutures.js +1 -1
  285. package/dist/cjs/src/pro/probit.js +1 -1
  286. package/dist/cjs/src/pro/upbit.js +1 -1
  287. package/dist/cjs/src/pro/whitebit.js +1 -1
  288. package/dist/cjs/src/pro/xt.js +1 -1
  289. package/dist/cjs/src/probit.js +1 -1
  290. package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +6 -0
  291. package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
  292. package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
  293. package/dist/cjs/src/static_dependencies/ethers/coders/address.js +1 -0
  294. package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +1 -0
  295. package/dist/cjs/src/static_dependencies/ethers/coders/array.js +1 -0
  296. package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +1 -0
  297. package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +1 -0
  298. package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +1 -0
  299. package/dist/cjs/src/static_dependencies/ethers/coders/null.js +1 -0
  300. package/dist/cjs/src/static_dependencies/ethers/coders/number.js +1 -0
  301. package/dist/cjs/src/static_dependencies/ethers/coders/string.js +1 -0
  302. package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +1 -0
  303. package/dist/cjs/src/static_dependencies/ethers/fragments.js +6 -0
  304. package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +6 -0
  305. package/dist/cjs/src/static_dependencies/ethers/index.js +1 -10
  306. package/dist/cjs/src/static_dependencies/ethers/interface.js +6 -0
  307. package/dist/cjs/src/static_dependencies/ethers/typed.js +6 -0
  308. package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +1 -13
  309. package/dist/cjs/src/static_dependencies/ethers/utils/data.js +1 -6
  310. package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +1 -9
  311. package/dist/cjs/src/static_dependencies/ethers/utils/events.js +6 -0
  312. package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
  313. package/dist/cjs/src/static_dependencies/ethers/utils/index.js +1 -7
  314. package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +1 -5
  315. package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +6 -0
  316. package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +1 -8
  317. package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
  318. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +1 -0
  319. package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +1 -0
  320. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
  321. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
  322. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
  323. package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
  324. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +1 -0
  325. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
  326. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
  327. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
  328. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
  329. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
  330. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
  331. package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
  332. package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +6 -0
  333. package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
  334. package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
  335. package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
  336. package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +1 -0
  337. package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
  338. package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
  339. package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
  340. package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
  341. package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
  342. package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
  343. package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
  344. package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
  345. package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +6 -0
  346. package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +1 -0
  347. package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +6 -0
  348. package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +6 -0
  349. package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +1 -0
  350. package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +1 -0
  351. package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +1 -0
  352. package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +1 -0
  353. package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +1 -0
  354. package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +1 -0
  355. package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
  356. package/dist/cjs/src/static_dependencies/node-fetch/body.js +1 -5
  357. package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +1 -0
  358. package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +6 -0
  359. package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +1 -0
  360. package/dist/cjs/src/static_dependencies/node-fetch/headers.js +1 -5
  361. package/dist/cjs/src/static_dependencies/node-fetch/index.js +1 -7
  362. package/dist/cjs/src/static_dependencies/node-fetch/request.js +1 -7
  363. package/dist/cjs/src/static_dependencies/node-fetch/response.js +1 -5
  364. package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
  365. package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
  366. package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +6 -0
  367. package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +1 -0
  368. package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +1 -0
  369. package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +1 -0
  370. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +1 -0
  371. package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
  372. package/dist/cjs/src/static_dependencies/scure-base/index.js +6 -0
  373. package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
  374. package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
  375. package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +6 -0
  376. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
  377. package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
  378. package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +6 -0
  379. package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +6 -0
  380. package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +6 -0
  381. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
  382. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
  383. package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
  384. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +1 -0
  385. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +1 -0
  386. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
  387. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
  388. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
  389. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +1 -0
  390. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
  391. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +1 -0
  392. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +1 -0
  393. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
  394. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +1 -0
  395. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +1 -0
  396. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +1 -0
  397. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
  398. package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +1 -4
  399. package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +1 -0
  400. package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +1 -3
  401. package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +1 -0
  402. package/dist/cjs/src/static_dependencies/starknet/utils/num.js +1 -0
  403. package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +1 -0
  404. package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +1 -0
  405. package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
  406. package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +6 -0
  407. package/dist/cjs/src/timex.js +1 -0
  408. package/dist/cjs/src/tokocrypto.js +1 -1
  409. package/dist/cjs/src/tradeogre.js +1 -1
  410. package/dist/cjs/src/upbit.js +1 -1
  411. package/dist/cjs/src/vertex.js +1 -1
  412. package/dist/cjs/src/wavesexchange.js +1 -1
  413. package/dist/cjs/src/whitebit.js +102 -4
  414. package/dist/cjs/src/woo.js +4 -2
  415. package/dist/cjs/src/woofipro.js +2 -2
  416. package/dist/cjs/src/xt.js +1 -1
  417. package/dist/cjs/src/yobit.js +2 -1
  418. package/dist/cjs/src/zaif.js +1 -1
  419. package/dist/cjs/src/zonda.js +1 -1
  420. package/js/ccxt.d.ts +3 -9
  421. package/js/ccxt.js +8 -6
  422. package/js/src/abstract/ace.js +6 -0
  423. package/js/src/abstract/alpaca.js +6 -0
  424. package/js/src/abstract/ascendex.js +6 -0
  425. package/js/src/abstract/bequant.js +6 -0
  426. package/js/src/abstract/bigone.js +6 -0
  427. package/js/src/abstract/binance.js +6 -0
  428. package/js/src/abstract/binancecoinm.js +6 -0
  429. package/js/src/abstract/binanceus.js +6 -0
  430. package/js/src/abstract/binanceusdm.js +6 -0
  431. package/js/src/abstract/bingx.d.ts +1 -0
  432. package/js/src/abstract/bingx.js +6 -0
  433. package/js/src/abstract/bit2c.js +6 -0
  434. package/js/src/abstract/bitbank.js +6 -0
  435. package/js/src/abstract/bitbns.js +6 -0
  436. package/js/src/abstract/bitcoincom.js +6 -0
  437. package/js/src/abstract/bitfinex.js +6 -0
  438. package/js/src/abstract/bitfinex1.js +6 -0
  439. package/js/src/abstract/bitflyer.js +6 -0
  440. package/js/src/abstract/bitget.js +6 -0
  441. package/js/src/abstract/bithumb.js +6 -0
  442. package/js/src/abstract/bitmart.d.ts +1 -0
  443. package/js/src/abstract/bitmart.js +6 -0
  444. package/js/src/abstract/bitmex.js +6 -0
  445. package/js/src/abstract/bitopro.js +6 -0
  446. package/js/src/abstract/bitpanda.js +6 -0
  447. package/js/src/abstract/bitrue.js +6 -0
  448. package/js/src/abstract/bitso.js +6 -0
  449. package/js/src/abstract/bitstamp.js +6 -0
  450. package/js/src/abstract/bitteam.js +6 -0
  451. package/js/src/abstract/bitvavo.js +6 -0
  452. package/js/src/abstract/bl3p.js +6 -0
  453. package/js/src/abstract/blockchaincom.js +6 -0
  454. package/js/src/abstract/blofin.js +6 -0
  455. package/js/src/abstract/btcalpha.js +6 -0
  456. package/js/src/abstract/btcbox.js +6 -0
  457. package/js/src/abstract/btcmarkets.js +6 -0
  458. package/js/src/abstract/btcturk.js +6 -0
  459. package/js/src/abstract/bybit.js +6 -0
  460. package/js/src/abstract/cex.js +6 -0
  461. package/js/src/abstract/coinbase.js +6 -0
  462. package/js/src/abstract/coinbaseadvanced.js +6 -0
  463. package/js/src/abstract/coinbaseexchange.js +6 -0
  464. package/js/src/abstract/coinbaseinternational.js +6 -0
  465. package/js/src/abstract/coincatch.js +6 -0
  466. package/js/src/abstract/coincheck.js +6 -0
  467. package/js/src/abstract/coinex.js +6 -0
  468. package/js/src/abstract/coinlist.js +6 -0
  469. package/js/src/abstract/coinmate.js +6 -0
  470. package/js/src/abstract/coinmetro.js +6 -0
  471. package/js/src/abstract/coinone.js +6 -0
  472. package/js/src/abstract/coinsph.js +6 -0
  473. package/js/src/abstract/coinspot.js +6 -0
  474. package/js/src/abstract/cryptocom.js +6 -0
  475. package/js/src/abstract/cryptomus.js +6 -0
  476. package/js/src/abstract/defx.js +6 -0
  477. package/js/src/abstract/delta.js +6 -0
  478. package/js/src/abstract/deribit.js +6 -0
  479. package/js/src/abstract/derive.js +6 -0
  480. package/js/src/abstract/digifinex.js +6 -0
  481. package/js/src/abstract/ellipx.js +6 -0
  482. package/js/src/abstract/exmo.js +6 -0
  483. package/js/src/abstract/fmfwio.js +6 -0
  484. package/js/src/abstract/gate.js +6 -0
  485. package/js/src/abstract/gateio.js +6 -0
  486. package/js/src/abstract/gemini.js +6 -0
  487. package/js/src/abstract/hashkey.js +6 -0
  488. package/js/src/abstract/hitbtc.js +6 -0
  489. package/js/src/abstract/hollaex.js +6 -0
  490. package/js/src/abstract/htx.js +6 -0
  491. package/js/src/abstract/huobi.js +6 -0
  492. package/js/src/abstract/huobijp.js +6 -0
  493. package/js/src/abstract/hyperliquid.js +6 -0
  494. package/js/src/abstract/idex.js +6 -0
  495. package/js/src/abstract/independentreserve.js +6 -0
  496. package/js/src/abstract/indodax.js +6 -0
  497. package/js/src/abstract/kraken.js +6 -0
  498. package/js/src/abstract/krakenfutures.js +6 -0
  499. package/js/src/abstract/kucoin.js +6 -0
  500. package/js/src/abstract/kucoinfutures.js +6 -0
  501. package/js/src/abstract/kuna.js +6 -0
  502. package/js/src/abstract/latoken.js +6 -0
  503. package/js/src/abstract/lbank.js +6 -0
  504. package/js/src/abstract/luno.js +6 -0
  505. package/js/src/abstract/mercado.js +6 -0
  506. package/js/src/abstract/mexc.js +6 -0
  507. package/js/src/abstract/myokx.js +6 -0
  508. package/js/src/abstract/ndax.js +6 -0
  509. package/js/src/abstract/novadax.js +6 -0
  510. package/js/src/abstract/oceanex.js +6 -0
  511. package/js/src/abstract/okcoin.js +6 -0
  512. package/js/src/abstract/okx.js +6 -0
  513. package/js/src/abstract/onetrading.js +6 -0
  514. package/js/src/abstract/oxfun.js +6 -0
  515. package/js/src/abstract/p2b.js +6 -0
  516. package/js/src/abstract/paradex.js +6 -0
  517. package/js/src/abstract/paymium.js +6 -0
  518. package/js/src/abstract/phemex.js +6 -0
  519. package/js/src/abstract/poloniex.d.ts +36 -0
  520. package/js/src/abstract/poloniex.js +6 -0
  521. package/js/src/abstract/poloniexfutures.js +6 -0
  522. package/js/src/abstract/probit.js +6 -0
  523. package/js/src/abstract/timex.js +6 -0
  524. package/js/src/abstract/tokocrypto.js +6 -0
  525. package/js/src/abstract/tradeogre.js +6 -0
  526. package/js/src/abstract/upbit.js +6 -0
  527. package/js/src/abstract/vertex.js +6 -0
  528. package/js/src/abstract/wavesexchange.js +6 -0
  529. package/js/src/abstract/whitebit.js +6 -0
  530. package/js/src/abstract/woo.js +6 -0
  531. package/js/src/abstract/woofipro.js +6 -0
  532. package/js/src/abstract/xt.js +6 -0
  533. package/js/src/abstract/yobit.js +6 -0
  534. package/js/src/abstract/zaif.js +6 -0
  535. package/js/src/abstract/zonda.js +6 -0
  536. package/js/src/ace.js +6 -0
  537. package/js/src/alpaca.js +6 -0
  538. package/js/src/ascendex.js +7 -1
  539. package/js/src/base/Exchange.d.ts +14 -5
  540. package/js/src/base/Exchange.js +39 -1
  541. package/js/src/base/Precise.js +6 -0
  542. package/js/src/base/errorHierarchy.js +6 -0
  543. package/js/src/base/errors.js +6 -0
  544. package/js/src/base/functions/crypto.js +6 -0
  545. package/js/src/base/functions/encode.js +6 -0
  546. package/js/src/base/functions/generic.js +6 -0
  547. package/js/src/base/functions/misc.js +6 -0
  548. package/js/src/base/functions/number.js +6 -0
  549. package/js/src/base/functions/platform.js +6 -0
  550. package/js/src/base/functions/rsa.js +6 -0
  551. package/js/src/base/functions/string.js +6 -0
  552. package/js/src/base/functions/throttle.js +6 -0
  553. package/js/src/base/functions/time.js +6 -0
  554. package/js/src/base/functions/totp.js +6 -0
  555. package/js/src/base/functions/type.js +6 -0
  556. package/js/src/base/functions.js +6 -0
  557. package/js/src/base/types.d.ts +31 -6
  558. package/js/src/base/types.js +6 -0
  559. package/js/src/base/ws/Cache.js +6 -0
  560. package/js/src/base/ws/Client.js +6 -0
  561. package/js/src/base/ws/Future.js +6 -0
  562. package/js/src/base/ws/OrderBook.js +6 -0
  563. package/js/src/base/ws/OrderBookSide.js +6 -0
  564. package/js/src/base/ws/WsClient.js +6 -0
  565. package/js/src/base/ws/functions.js +6 -0
  566. package/js/src/bequant.js +6 -0
  567. package/js/src/bigone.js +6 -0
  568. package/js/src/binance.d.ts +98 -97
  569. package/js/src/binance.js +113 -102
  570. package/js/src/binancecoinm.js +6 -0
  571. package/js/src/binanceus.js +6 -0
  572. package/js/src/binanceusdm.js +6 -0
  573. package/js/src/bingx.js +71 -43
  574. package/js/src/bit2c.js +6 -0
  575. package/js/src/bitbank.js +6 -0
  576. package/js/src/bitbns.js +6 -0
  577. package/js/src/bitcoincom.js +6 -0
  578. package/js/src/bitfinex.js +6 -0
  579. package/js/src/bitfinex1.js +6 -0
  580. package/js/src/bitflyer.js +6 -0
  581. package/js/src/bitget.js +7 -5
  582. package/js/src/bithumb.js +6 -0
  583. package/js/src/bitmart.d.ts +1 -0
  584. package/js/src/bitmart.js +21 -1
  585. package/js/src/bitmex.js +6 -0
  586. package/js/src/bitopro.js +7 -0
  587. package/js/src/bitpanda.js +6 -0
  588. package/js/src/bitrue.js +7 -0
  589. package/js/src/bitso.js +6 -0
  590. package/js/src/bitstamp.js +6 -0
  591. package/js/src/bitteam.js +6 -0
  592. package/js/src/bitvavo.js +6 -0
  593. package/js/src/bl3p.d.ts +2 -8
  594. package/js/src/bl3p.js +6 -0
  595. package/js/src/blockchaincom.js +6 -0
  596. package/js/src/blofin.js +6 -0
  597. package/js/src/btcalpha.js +6 -0
  598. package/js/src/btcbox.js +6 -0
  599. package/js/src/btcmarkets.js +6 -0
  600. package/js/src/btcturk.js +6 -0
  601. package/js/src/bybit.js +6 -0
  602. package/js/src/cex.js +8 -0
  603. package/js/src/coinbase.d.ts +1 -6
  604. package/js/src/coinbase.js +8 -1
  605. package/js/src/coinbaseadvanced.js +6 -0
  606. package/js/src/coinbaseexchange.d.ts +2 -7
  607. package/js/src/coinbaseexchange.js +8 -0
  608. package/js/src/coinbaseinternational.d.ts +2 -7
  609. package/js/src/coinbaseinternational.js +7 -0
  610. package/js/src/coincatch.js +6 -0
  611. package/js/src/coincheck.js +6 -0
  612. package/js/src/coinex.js +6 -0
  613. package/js/src/coinlist.js +6 -0
  614. package/js/src/coinmate.js +6 -0
  615. package/js/src/coinmetro.js +6 -0
  616. package/js/src/coinone.js +6 -0
  617. package/js/src/coinsph.js +6 -0
  618. package/js/src/coinspot.js +6 -0
  619. package/js/src/cryptocom.js +6 -0
  620. package/js/src/cryptomus.js +6 -0
  621. package/js/src/defx.js +6 -0
  622. package/js/src/delta.js +6 -0
  623. package/js/src/deribit.d.ts +1 -6
  624. package/js/src/deribit.js +8 -0
  625. package/js/src/derive.js +19 -7
  626. package/js/src/digifinex.js +6 -0
  627. package/js/src/ellipx.js +6 -0
  628. package/js/src/exmo.js +6 -0
  629. package/js/src/fmfwio.js +6 -0
  630. package/js/src/gate.js +10 -0
  631. package/js/src/gateio.js +6 -0
  632. package/js/src/gemini.d.ts +1 -6
  633. package/js/src/gemini.js +7 -0
  634. package/js/src/hashkey.js +10 -2
  635. package/js/src/hitbtc.d.ts +1 -7
  636. package/js/src/hitbtc.js +6 -0
  637. package/js/src/hollaex.js +6 -0
  638. package/js/src/htx.js +6 -0
  639. package/js/src/huobi.js +6 -0
  640. package/js/src/huobijp.js +6 -0
  641. package/js/src/hyperliquid.d.ts +11 -0
  642. package/js/src/hyperliquid.js +46 -0
  643. package/js/src/idex.js +6 -0
  644. package/js/src/independentreserve.js +6 -0
  645. package/js/src/indodax.js +6 -0
  646. package/js/src/kraken.d.ts +1 -0
  647. package/js/src/kraken.js +89 -6
  648. package/js/src/krakenfutures.js +10 -0
  649. package/js/src/kucoin.js +10 -2
  650. package/js/src/kucoinfutures.js +6 -0
  651. package/js/src/kuna.js +6 -0
  652. package/js/src/latoken.js +6 -0
  653. package/js/src/lbank.js +6 -0
  654. package/js/src/luno.js +6 -0
  655. package/js/src/mercado.js +6 -0
  656. package/js/src/mexc.js +14 -4
  657. package/js/src/myokx.js +6 -0
  658. package/js/src/ndax.js +6 -0
  659. package/js/src/novadax.js +6 -0
  660. package/js/src/oceanex.js +6 -0
  661. package/js/src/okcoin.js +10 -0
  662. package/js/src/okx.js +86 -78
  663. package/js/src/onetrading.js +6 -0
  664. package/js/src/oxfun.js +6 -0
  665. package/js/src/p2b.js +6 -0
  666. package/js/src/paradex.js +75 -9
  667. package/js/src/paymium.js +6 -0
  668. package/js/src/phemex.js +6 -0
  669. package/js/src/poloniex.d.ts +110 -8
  670. package/js/src/poloniex.js +1318 -81
  671. package/js/src/poloniexfutures.js +6 -0
  672. package/js/src/pro/alpaca.js +6 -0
  673. package/js/src/pro/ascendex.js +6 -0
  674. package/js/src/pro/bequant.js +6 -0
  675. package/js/src/pro/binance.d.ts +94 -94
  676. package/js/src/pro/binance.js +100 -94
  677. package/js/src/pro/binancecoinm.js +6 -0
  678. package/js/src/pro/binanceus.js +6 -0
  679. package/js/src/pro/binanceusdm.js +6 -0
  680. package/js/src/pro/bingx.js +69 -52
  681. package/js/src/pro/bitcoincom.js +6 -0
  682. package/js/src/pro/bitfinex.js +6 -0
  683. package/js/src/pro/bitfinex1.js +6 -0
  684. package/js/src/pro/bitget.js +6 -0
  685. package/js/src/pro/bithumb.js +6 -0
  686. package/js/src/pro/bitmart.js +25 -7
  687. package/js/src/pro/bitmex.js +6 -0
  688. package/js/src/pro/bitopro.js +6 -0
  689. package/js/src/pro/bitpanda.js +6 -0
  690. package/js/src/pro/bitrue.js +6 -0
  691. package/js/src/pro/bitstamp.js +6 -0
  692. package/js/src/pro/bitvavo.js +6 -0
  693. package/js/src/pro/blockchaincom.js +6 -0
  694. package/js/src/pro/blofin.js +6 -0
  695. package/js/src/pro/bybit.js +6 -0
  696. package/js/src/pro/cex.js +6 -0
  697. package/js/src/pro/coinbase.js +6 -0
  698. package/js/src/pro/coinbaseadvanced.js +6 -0
  699. package/js/src/pro/coinbaseexchange.js +6 -0
  700. package/js/src/pro/coinbaseinternational.js +6 -0
  701. package/js/src/pro/coincatch.js +6 -0
  702. package/js/src/pro/coincheck.js +6 -0
  703. package/js/src/pro/coinex.js +6 -0
  704. package/js/src/pro/coinone.js +6 -0
  705. package/js/src/pro/cryptocom.js +6 -0
  706. package/js/src/pro/defx.js +6 -0
  707. package/js/src/pro/deribit.js +6 -0
  708. package/js/src/pro/derive.js +8 -2
  709. package/js/src/pro/exmo.js +6 -0
  710. package/js/src/pro/gate.js +6 -0
  711. package/js/src/pro/gateio.js +6 -0
  712. package/js/src/pro/gemini.js +6 -0
  713. package/js/src/pro/hashkey.js +6 -0
  714. package/js/src/pro/hitbtc.js +6 -0
  715. package/js/src/pro/hollaex.js +6 -0
  716. package/js/src/pro/htx.js +6 -0
  717. package/js/src/pro/huobi.js +6 -0
  718. package/js/src/pro/huobijp.js +6 -0
  719. package/js/src/pro/hyperliquid.js +6 -0
  720. package/js/src/pro/idex.js +6 -0
  721. package/js/src/pro/independentreserve.js +6 -0
  722. package/js/src/pro/kraken.js +6 -0
  723. package/js/src/pro/krakenfutures.js +7 -1
  724. package/js/src/pro/kucoin.js +6 -0
  725. package/js/src/pro/kucoinfutures.js +6 -0
  726. package/js/src/pro/lbank.js +6 -0
  727. package/js/src/pro/luno.js +6 -0
  728. package/js/src/pro/mexc.js +6 -0
  729. package/js/src/pro/myokx.js +6 -0
  730. package/js/src/pro/ndax.js +6 -0
  731. package/js/src/pro/okcoin.js +6 -0
  732. package/js/src/pro/okx.js +6 -0
  733. package/js/src/pro/onetrading.js +6 -0
  734. package/js/src/pro/oxfun.js +6 -0
  735. package/js/src/pro/p2b.js +6 -0
  736. package/js/src/pro/paradex.js +6 -0
  737. package/js/src/pro/phemex.js +6 -0
  738. package/js/src/pro/poloniex.js +6 -0
  739. package/js/src/pro/poloniexfutures.js +6 -0
  740. package/js/src/pro/probit.js +6 -0
  741. package/js/src/pro/upbit.js +6 -0
  742. package/js/src/pro/vertex.js +6 -0
  743. package/js/src/pro/whitebit.js +6 -0
  744. package/js/src/pro/woo.js +6 -0
  745. package/js/src/pro/woofipro.js +6 -0
  746. package/js/src/pro/xt.js +6 -0
  747. package/js/src/probit.js +6 -0
  748. package/js/src/static_dependencies/ethers/abi-coder.js +6 -0
  749. package/js/src/static_dependencies/ethers/address/address.js +6 -0
  750. package/js/src/static_dependencies/ethers/address/checks.js +6 -0
  751. package/js/src/static_dependencies/ethers/address/contract-address.js +6 -0
  752. package/js/src/static_dependencies/ethers/address/index.js +6 -0
  753. package/js/src/static_dependencies/ethers/bytes32.js +6 -0
  754. package/js/src/static_dependencies/ethers/coders/abstract-coder.js +6 -0
  755. package/js/src/static_dependencies/ethers/coders/address.js +6 -0
  756. package/js/src/static_dependencies/ethers/coders/anonymous.js +6 -0
  757. package/js/src/static_dependencies/ethers/coders/array.js +6 -0
  758. package/js/src/static_dependencies/ethers/coders/boolean.js +6 -0
  759. package/js/src/static_dependencies/ethers/coders/bytes.js +6 -0
  760. package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +6 -0
  761. package/js/src/static_dependencies/ethers/coders/null.js +6 -0
  762. package/js/src/static_dependencies/ethers/coders/number.js +6 -0
  763. package/js/src/static_dependencies/ethers/coders/string.js +6 -0
  764. package/js/src/static_dependencies/ethers/coders/tuple.js +6 -0
  765. package/js/src/static_dependencies/ethers/fragments.js +6 -0
  766. package/js/src/static_dependencies/ethers/hash/index.js +6 -0
  767. package/js/src/static_dependencies/ethers/hash/solidity.js +6 -0
  768. package/js/src/static_dependencies/ethers/hash/typed-data.js +6 -0
  769. package/js/src/static_dependencies/ethers/index.js +6 -0
  770. package/js/src/static_dependencies/ethers/interface.js +6 -0
  771. package/js/src/static_dependencies/ethers/typed.js +6 -0
  772. package/js/src/static_dependencies/ethers/utils/base58.js +6 -0
  773. package/js/src/static_dependencies/ethers/utils/base64-browser.js +6 -0
  774. package/js/src/static_dependencies/ethers/utils/base64.js +6 -0
  775. package/js/src/static_dependencies/ethers/utils/data.js +6 -0
  776. package/js/src/static_dependencies/ethers/utils/errors.js +6 -0
  777. package/js/src/static_dependencies/ethers/utils/events.js +6 -0
  778. package/js/src/static_dependencies/ethers/utils/fixednumber.js +6 -0
  779. package/js/src/static_dependencies/ethers/utils/index.js +6 -0
  780. package/js/src/static_dependencies/ethers/utils/maths.js +6 -0
  781. package/js/src/static_dependencies/ethers/utils/properties.js +6 -0
  782. package/js/src/static_dependencies/ethers/utils/rlp-decode.js +6 -0
  783. package/js/src/static_dependencies/ethers/utils/rlp-encode.js +6 -0
  784. package/js/src/static_dependencies/ethers/utils/rlp.js +6 -0
  785. package/js/src/static_dependencies/ethers/utils/units.js +6 -0
  786. package/js/src/static_dependencies/ethers/utils/utf8.js +6 -0
  787. package/js/src/static_dependencies/ethers/utils/uuid.js +6 -0
  788. package/js/src/static_dependencies/fflake/browser.js +6 -0
  789. package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +6 -0
  790. package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +6 -0
  791. package/js/src/static_dependencies/jsencrypt/index.js +6 -0
  792. package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +6 -0
  793. package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +6 -0
  794. package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +6 -0
  795. package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +6 -0
  796. package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +6 -0
  797. package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +6 -0
  798. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +6 -0
  799. package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +6 -0
  800. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +6 -0
  801. package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +6 -0
  802. package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +6 -0
  803. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +6 -0
  804. package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +6 -0
  805. package/js/src/static_dependencies/messagepack/msgpack.js +6 -0
  806. package/js/src/static_dependencies/noble-curves/_shortw_utils.js +6 -0
  807. package/js/src/static_dependencies/noble-curves/abstract/curve.js +6 -0
  808. package/js/src/static_dependencies/noble-curves/abstract/edwards.js +6 -0
  809. package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +6 -0
  810. package/js/src/static_dependencies/noble-curves/abstract/modular.js +6 -0
  811. package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +6 -0
  812. package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +6 -0
  813. package/js/src/static_dependencies/noble-curves/abstract/utils.js +6 -0
  814. package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +6 -0
  815. package/js/src/static_dependencies/noble-curves/bn.js +6 -0
  816. package/js/src/static_dependencies/noble-curves/ed25519.js +6 -0
  817. package/js/src/static_dependencies/noble-curves/ed448.js +6 -0
  818. package/js/src/static_dependencies/noble-curves/index.js +6 -0
  819. package/js/src/static_dependencies/noble-curves/jubjub.js +6 -0
  820. package/js/src/static_dependencies/noble-curves/p256.js +6 -0
  821. package/js/src/static_dependencies/noble-curves/p384.js +6 -0
  822. package/js/src/static_dependencies/noble-curves/p521.js +6 -0
  823. package/js/src/static_dependencies/noble-curves/pasta.js +6 -0
  824. package/js/src/static_dependencies/noble-curves/secp256k1.js +6 -0
  825. package/js/src/static_dependencies/noble-hashes/_assert.js +6 -0
  826. package/js/src/static_dependencies/noble-hashes/_blake2.js +6 -0
  827. package/js/src/static_dependencies/noble-hashes/_sha2.js +6 -0
  828. package/js/src/static_dependencies/noble-hashes/_u64.js +6 -0
  829. package/js/src/static_dependencies/noble-hashes/argon2.js +6 -0
  830. package/js/src/static_dependencies/noble-hashes/blake2b.js +6 -0
  831. package/js/src/static_dependencies/noble-hashes/blake2s.js +6 -0
  832. package/js/src/static_dependencies/noble-hashes/blake3.js +6 -0
  833. package/js/src/static_dependencies/noble-hashes/crypto.js +6 -0
  834. package/js/src/static_dependencies/noble-hashes/cryptoNode.js +6 -0
  835. package/js/src/static_dependencies/noble-hashes/eskdf.js +6 -0
  836. package/js/src/static_dependencies/noble-hashes/hkdf.js +6 -0
  837. package/js/src/static_dependencies/noble-hashes/hmac.js +6 -0
  838. package/js/src/static_dependencies/noble-hashes/index.js +6 -0
  839. package/js/src/static_dependencies/noble-hashes/md5.js +6 -0
  840. package/js/src/static_dependencies/noble-hashes/pbkdf2.js +6 -0
  841. package/js/src/static_dependencies/noble-hashes/ripemd160.js +6 -0
  842. package/js/src/static_dependencies/noble-hashes/scrypt.js +6 -0
  843. package/js/src/static_dependencies/noble-hashes/sha1.js +6 -0
  844. package/js/src/static_dependencies/noble-hashes/sha256.js +6 -0
  845. package/js/src/static_dependencies/noble-hashes/sha3-addons.js +6 -0
  846. package/js/src/static_dependencies/noble-hashes/sha3.js +6 -0
  847. package/js/src/static_dependencies/noble-hashes/sha512.js +6 -0
  848. package/js/src/static_dependencies/noble-hashes/utils.js +6 -0
  849. package/js/src/static_dependencies/node-fetch/body.js +6 -0
  850. package/js/src/static_dependencies/node-fetch/errors/abort-error.js +6 -0
  851. package/js/src/static_dependencies/node-fetch/errors/base.js +6 -0
  852. package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +6 -0
  853. package/js/src/static_dependencies/node-fetch/headers.js +6 -0
  854. package/js/src/static_dependencies/node-fetch/index.js +6 -0
  855. package/js/src/static_dependencies/node-fetch/request.js +6 -0
  856. package/js/src/static_dependencies/node-fetch/response.js +6 -0
  857. package/js/src/static_dependencies/node-fetch/utils/get-search.js +6 -0
  858. package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +6 -0
  859. package/js/src/static_dependencies/node-fetch/utils/is.js +6 -0
  860. package/js/src/static_dependencies/node-fetch/utils/referrer.js +6 -0
  861. package/js/src/static_dependencies/proxies/agent-base/helpers.js +6 -0
  862. package/js/src/static_dependencies/proxies/agent-base/index.js +6 -0
  863. package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +6 -0
  864. package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +6 -0
  865. package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +6 -0
  866. package/js/src/static_dependencies/qs/formats.cjs +6 -0
  867. package/js/src/static_dependencies/qs/index.cjs +6 -0
  868. package/js/src/static_dependencies/qs/parse.cjs +6 -0
  869. package/js/src/static_dependencies/qs/stringify.cjs +6 -0
  870. package/js/src/static_dependencies/qs/utils.cjs +6 -0
  871. package/js/src/static_dependencies/scure-base/index.js +6 -0
  872. package/js/src/static_dependencies/scure-starknet/index.js +6 -0
  873. package/js/src/static_dependencies/starknet/constants.js +6 -0
  874. package/js/src/static_dependencies/starknet/index.js +6 -0
  875. package/js/src/static_dependencies/starknet/types/cairoEnum.js +6 -0
  876. package/js/src/static_dependencies/starknet/types/calldata.js +6 -0
  877. package/js/src/static_dependencies/starknet/types/index.js +6 -0
  878. package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +6 -0
  879. package/js/src/static_dependencies/starknet/types/lib/contract/index.js +6 -0
  880. package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +6 -0
  881. package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +6 -0
  882. package/js/src/static_dependencies/starknet/types/lib/index.js +6 -0
  883. package/js/src/static_dependencies/starknet/types/typedData.js +6 -0
  884. package/js/src/static_dependencies/starknet/utils/address.js +6 -0
  885. package/js/src/static_dependencies/starknet/utils/assert.js +6 -0
  886. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +6 -0
  887. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +6 -0
  888. package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +6 -0
  889. package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +6 -0
  890. package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +6 -0
  891. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +6 -0
  892. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +6 -0
  893. package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +6 -0
  894. package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +6 -0
  895. package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +6 -0
  896. package/js/src/static_dependencies/starknet/utils/calldata/index.js +6 -0
  897. package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +6 -0
  898. package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +6 -0
  899. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +6 -0
  900. package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +6 -0
  901. package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +6 -0
  902. package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +6 -0
  903. package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +6 -0
  904. package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +6 -0
  905. package/js/src/static_dependencies/starknet/utils/calldata/validate.js +6 -0
  906. package/js/src/static_dependencies/starknet/utils/encode.js +6 -0
  907. package/js/src/static_dependencies/starknet/utils/hash/classHash.js +6 -0
  908. package/js/src/static_dependencies/starknet/utils/hash/index.js +6 -0
  909. package/js/src/static_dependencies/starknet/utils/merkle.js +6 -0
  910. package/js/src/static_dependencies/starknet/utils/num.js +6 -0
  911. package/js/src/static_dependencies/starknet/utils/selector.js +6 -0
  912. package/js/src/static_dependencies/starknet/utils/shortString.js +6 -0
  913. package/js/src/static_dependencies/starknet/utils/starknetId.js +6 -0
  914. package/js/src/static_dependencies/starknet/utils/typedData.js +6 -0
  915. package/js/src/static_dependencies/starknet/utils/uint256.js +6 -0
  916. package/js/src/static_dependencies/starknet/utils/url.js +6 -0
  917. package/js/src/static_dependencies/watchable/src/index.js +6 -0
  918. package/js/src/static_dependencies/watchable/src/types.js +6 -0
  919. package/js/src/static_dependencies/watchable/src/unpromise.js +6 -0
  920. package/js/src/timex.js +6 -0
  921. package/js/src/tokocrypto.js +6 -0
  922. package/js/src/tradeogre.js +6 -0
  923. package/js/src/upbit.js +6 -0
  924. package/js/src/vertex.js +6 -0
  925. package/js/src/wavesexchange.js +6 -0
  926. package/js/src/whitebit.d.ts +36 -1
  927. package/js/src/whitebit.js +107 -3
  928. package/js/src/woo.js +9 -1
  929. package/js/src/woofipro.js +7 -1
  930. package/js/src/xt.js +6 -0
  931. package/js/src/yobit.d.ts +1 -6
  932. package/js/src/yobit.js +7 -0
  933. package/js/src/zaif.js +6 -0
  934. package/js/src/zonda.js +6 -0
  935. package/package.json +1 -1
@@ -6,7 +6,7 @@ var Precise = require('./base/Precise.js');
6
6
  var number = require('./base/functions/number.js');
7
7
  var sha256 = require('./static_dependencies/noble-hashes/sha256.js');
8
8
 
9
- // ---------------------------------------------------------------------------
9
+ // ----------------------------------------------------------------------------
10
10
  // ---------------------------------------------------------------------------
11
11
  /**
12
12
  * @class poloniex
@@ -26,21 +26,25 @@ class poloniex extends poloniex$1 {
26
26
  'CORS': undefined,
27
27
  'spot': true,
28
28
  'margin': undefined,
29
- 'swap': false,
30
- 'future': false,
29
+ 'swap': true,
30
+ 'future': true,
31
31
  'option': false,
32
+ 'addMargin': true,
32
33
  'cancelAllOrders': true,
33
34
  'cancelOrder': true,
35
+ 'cancelOrders': undefined,
34
36
  'createDepositAddress': true,
35
37
  'createMarketBuyOrderWithCost': true,
36
38
  'createMarketOrderWithCost': false,
37
39
  'createMarketSellOrderWithCost': false,
38
40
  'createOrder': true,
41
+ 'createOrders': undefined,
39
42
  'createStopOrder': true,
40
43
  'createTriggerOrder': true,
41
44
  'editOrder': true,
42
45
  'fetchBalance': true,
43
46
  'fetchClosedOrder': false,
47
+ 'fetchClosedOrders': true,
44
48
  'fetchCurrencies': true,
45
49
  'fetchDepositAddress': true,
46
50
  'fetchDepositAddresses': false,
@@ -54,7 +58,10 @@ class poloniex extends poloniex$1 {
54
58
  'fetchFundingIntervals': false,
55
59
  'fetchFundingRate': false,
56
60
  'fetchFundingRateHistory': false,
57
- 'fetchFundingRates': false,
61
+ 'fetchFundingRates': undefined,
62
+ 'fetchLedger': undefined,
63
+ 'fetchLeverage': true,
64
+ 'fetchLiquidations': undefined,
58
65
  'fetchMarginMode': false,
59
66
  'fetchMarkets': true,
60
67
  'fetchMyTrades': true,
@@ -67,7 +74,8 @@ class poloniex extends poloniex$1 {
67
74
  'fetchOrderBooks': false,
68
75
  'fetchOrderTrades': true,
69
76
  'fetchPosition': false,
70
- 'fetchPositionMode': false,
77
+ 'fetchPositionMode': true,
78
+ 'fetchPositions': true,
71
79
  'fetchTicker': true,
72
80
  'fetchTickers': true,
73
81
  'fetchTime': true,
@@ -78,7 +86,10 @@ class poloniex extends poloniex$1 {
78
86
  'fetchTransfer': false,
79
87
  'fetchTransfers': false,
80
88
  'fetchWithdrawals': true,
89
+ 'reduceMargin': true,
81
90
  'sandbox': true,
91
+ 'setLeverage': true,
92
+ 'setPositionMode': true,
82
93
  'transfer': true,
83
94
  'withdraw': true,
84
95
  },
@@ -96,15 +107,16 @@ class poloniex extends poloniex$1 {
96
107
  '1d': 'DAY_1',
97
108
  '3d': 'DAY_3',
98
109
  '1w': 'WEEK_1',
99
- '1M': 'MONTH_1',
110
+ '1M': 'MONTH_1', // not in swap
100
111
  },
101
112
  'urls': {
102
113
  'logo': 'https://user-images.githubusercontent.com/1294454/27766817-e9456312-5ee6-11e7-9b3c-b628ca5626a5.jpg',
103
114
  'api': {
104
- 'rest': 'https://api.poloniex.com',
115
+ 'spot': 'https://api.poloniex.com',
116
+ 'swap': 'https://api.poloniex.com',
105
117
  },
106
118
  'test': {
107
- 'rest': 'https://sand-spot-api-gateway.poloniex.com',
119
+ 'spot': 'https://sand-spot-api-gateway.poloniex.com',
108
120
  },
109
121
  'www': 'https://www.poloniex.com',
110
122
  'doc': 'https://api-docs.poloniex.com/spot/',
@@ -191,6 +203,55 @@ class poloniex extends poloniex$1 {
191
203
  'smartorders/{id}': 20,
192
204
  },
193
205
  },
206
+ 'swapPublic': {
207
+ 'get': {
208
+ // 300 calls / second
209
+ 'v3/market/allInstruments': 2 / 3,
210
+ 'v3/market/instruments': 2 / 3,
211
+ 'v3/market/orderBook': 2 / 3,
212
+ 'v3/market/candles': 10,
213
+ 'v3/market/indexPriceCandlesticks': 10,
214
+ 'v3/market/premiumIndexCandlesticks': 10,
215
+ 'v3/market/markPriceCandlesticks': 10,
216
+ 'v3/market/trades': 2 / 3,
217
+ 'v3/market/liquidationOrder': 2 / 3,
218
+ 'v3/market/tickers': 2 / 3,
219
+ 'v3/market/markPrice': 2 / 3,
220
+ 'v3/market/indexPrice': 2 / 3,
221
+ 'v3/market/indexPriceComponents': 2 / 3,
222
+ 'v3/market/fundingRate': 2 / 3,
223
+ 'v3/market/openInterest': 2 / 3,
224
+ 'v3/market/insurance': 2 / 3,
225
+ 'v3/market/riskLimit': 2 / 3,
226
+ },
227
+ },
228
+ 'swapPrivate': {
229
+ 'get': {
230
+ 'v3/account/balance': 4,
231
+ 'v3/account/bills': 20,
232
+ 'v3/trade/order/opens': 20,
233
+ 'v3/trade/order/trades': 20,
234
+ 'v3/trade/order/history': 20,
235
+ 'v3/trade/position/opens': 20,
236
+ 'v3/trade/position/history': 20,
237
+ 'v3/position/leverages': 20,
238
+ 'v3/position/mode': 20,
239
+ },
240
+ 'post': {
241
+ 'v3/trade/order': 4,
242
+ 'v3/trade/orders': 40,
243
+ 'v3/trade/position': 20,
244
+ 'v3/trade/positionAll': 100,
245
+ 'v3/position/leverage': 20,
246
+ 'v3/position/mode': 20,
247
+ 'v3/trade/position/margin': 20,
248
+ },
249
+ 'delete': {
250
+ 'v3/trade/order': 2,
251
+ 'v3/trade/batchOrders': 20,
252
+ 'v3/trade/allOrders': 20,
253
+ },
254
+ },
194
255
  },
195
256
  'fees': {
196
257
  'trading': {
@@ -239,6 +300,7 @@ class poloniex extends poloniex$1 {
239
300
  'UST': 'USTC',
240
301
  },
241
302
  'options': {
303
+ 'defaultType': 'spot',
242
304
  'createMarketBuyOrderRequiresPrice': true,
243
305
  'networks': {
244
306
  'BEP20': 'BSC',
@@ -285,7 +347,7 @@ class poloniex extends poloniex$1 {
285
347
  'timeInForce': {
286
348
  'IOC': true,
287
349
  'FOK': true,
288
- 'PO': false,
350
+ 'PO': true,
289
351
  'GTD': false,
290
352
  },
291
353
  'hedged': false,
@@ -296,7 +358,9 @@ class poloniex extends poloniex$1 {
296
358
  'trailing': false,
297
359
  'iceberg': false,
298
360
  },
299
- 'createOrders': undefined,
361
+ 'createOrders': {
362
+ 'max': 20,
363
+ },
300
364
  'fetchMyTrades': {
301
365
  'marginMode': false,
302
366
  'limit': 1000,
@@ -326,13 +390,51 @@ class poloniex extends poloniex$1 {
326
390
  'spot': {
327
391
  'extends': 'default',
328
392
  },
393
+ 'forContracts': {
394
+ 'extends': 'default',
395
+ 'createOrder': {
396
+ 'marginMode': true,
397
+ 'triggerPrice': false,
398
+ 'hedged': true,
399
+ 'stpMode': true,
400
+ 'marketBuyByCost': false,
401
+ },
402
+ 'createOrders': {
403
+ 'max': 10,
404
+ },
405
+ 'fetchOpenOrders': {
406
+ 'limit': 100,
407
+ },
408
+ 'fetchClosedOrders': {
409
+ 'marginMode': false,
410
+ 'limit': 100,
411
+ 'daysBack': undefined,
412
+ 'daysBackCanceled': 1 / 6,
413
+ 'untilDays': undefined,
414
+ 'trigger': false,
415
+ 'trailing': false,
416
+ 'symbolRequired': false,
417
+ },
418
+ 'fetchMyTrades': {
419
+ 'limit': 100,
420
+ 'untilDays': 90,
421
+ },
422
+ },
329
423
  'swap': {
330
- 'linear': undefined,
331
- 'inverse': undefined,
424
+ 'linear': {
425
+ 'extends': 'forContracts',
426
+ },
427
+ 'inverse': {
428
+ 'extends': 'forContracts',
429
+ },
332
430
  },
333
431
  'future': {
334
- 'linear': undefined,
335
- 'inverse': undefined,
432
+ 'linear': {
433
+ 'extends': 'forContracts',
434
+ },
435
+ 'inverse': {
436
+ 'extends': 'forContracts',
437
+ },
336
438
  },
337
439
  },
338
440
  'precisionMode': number.TICK_SIZE,
@@ -451,6 +553,8 @@ class poloniex extends poloniex$1 {
451
553
  });
452
554
  }
453
555
  parseOHLCV(ohlcv, market = undefined) {
556
+ //
557
+ // spot:
454
558
  //
455
559
  // [
456
560
  // [
@@ -471,6 +575,32 @@ class poloniex extends poloniex$1 {
471
575
  // ]
472
576
  // ]
473
577
  //
578
+ // contract:
579
+ //
580
+ // [
581
+ // "84207.02",
582
+ // "84320.85",
583
+ // "84207.02",
584
+ // "84253.83",
585
+ // "3707.5395",
586
+ // "44",
587
+ // "14",
588
+ // "1740770040000",
589
+ // "1740770099999",
590
+ // ],
591
+ //
592
+ const ohlcvLength = ohlcv.length;
593
+ const isContract = ohlcvLength === 9;
594
+ if (isContract) {
595
+ return [
596
+ this.safeInteger(ohlcv, 7),
597
+ this.safeNumber(ohlcv, 2),
598
+ this.safeNumber(ohlcv, 1),
599
+ this.safeNumber(ohlcv, 0),
600
+ this.safeNumber(ohlcv, 3),
601
+ this.safeNumber(ohlcv, 5),
602
+ ];
603
+ }
474
604
  return [
475
605
  this.safeInteger(ohlcv, 12),
476
606
  this.safeNumber(ohlcv, 2),
@@ -485,6 +615,7 @@ class poloniex extends poloniex$1 {
485
615
  * @name poloniex#fetchOHLCV
486
616
  * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
487
617
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#candles
618
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-kline-data
488
619
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
489
620
  * @param {string} timeframe the length of time each candle represents
490
621
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
@@ -506,14 +637,41 @@ class poloniex extends poloniex$1 {
506
637
  'symbol': market['id'],
507
638
  'interval': this.safeString(this.timeframes, timeframe, timeframe),
508
639
  };
640
+ const keyStart = market['spot'] ? 'startTime' : 'sTime';
641
+ const keyEnd = market['spot'] ? 'endTime' : 'eTime';
509
642
  if (since !== undefined) {
510
- request['startTime'] = since;
643
+ request[keyStart] = since;
511
644
  }
512
645
  if (limit !== undefined) {
513
646
  // limit should in between 100 and 500
514
647
  request['limit'] = limit;
515
648
  }
516
- [request, params] = this.handleUntilOption('endTime', request, params);
649
+ [request, params] = this.handleUntilOption(keyEnd, request, params);
650
+ if (market['contract']) {
651
+ if (this.inArray(timeframe, ['10m', '1M'])) {
652
+ throw new errors.NotSupported(this.id + ' ' + timeframe + ' ' + market['type'] + ' fetchOHLCV is not supported');
653
+ }
654
+ const responseRaw = await this.swapPublicGetV3MarketCandles(this.extend(request, params));
655
+ //
656
+ // {
657
+ // code: "200",
658
+ // msg: "Success",
659
+ // data: [
660
+ // [
661
+ // "84207.02",
662
+ // "84320.85",
663
+ // "84207.02",
664
+ // "84253.83",
665
+ // "3707.5395",
666
+ // "44",
667
+ // "14",
668
+ // "1740770040000",
669
+ // "1740770099999",
670
+ // ],
671
+ //
672
+ const data = this.safeList(responseRaw, 'data');
673
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
674
+ }
517
675
  const response = await this.publicGetMarketsSymbolCandles(this.extend(request, params));
518
676
  //
519
677
  // [
@@ -550,10 +708,16 @@ class poloniex extends poloniex$1 {
550
708
  * @name poloniex#fetchMarkets
551
709
  * @description retrieves data on all markets for poloniex
552
710
  * @see https://api-docs.poloniex.com/spot/api/public/reference-data#symbol-information
711
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-all-product-info
553
712
  * @param {object} [params] extra parameters specific to the exchange API endpoint
554
713
  * @returns {object[]} an array of objects representing market data
555
714
  */
556
715
  async fetchMarkets(params = {}) {
716
+ const promises = [this.fetchSpotMarkets(params), this.fetchSwapMarkets(params)];
717
+ const results = await Promise.all(promises);
718
+ return this.arrayConcat(results[0], results[1]);
719
+ }
720
+ async fetchSpotMarkets(params = {}) {
557
721
  const markets = await this.publicGetMarkets(params);
558
722
  //
559
723
  // [
@@ -580,7 +744,59 @@ class poloniex extends poloniex$1 {
580
744
  //
581
745
  return this.parseMarkets(markets);
582
746
  }
747
+ async fetchSwapMarkets(params = {}) {
748
+ // do similar as spot per https://api-docs.poloniex.com/v3/futures/api/market/get-product-info
749
+ const response = await this.swapPublicGetV3MarketAllInstruments(params);
750
+ //
751
+ // {
752
+ // "code": "200",
753
+ // "msg": "Success",
754
+ // "data": [
755
+ // {
756
+ // "symbol": "BNB_USDT_PERP",
757
+ // "bAsset": ".PBNBUSDT",
758
+ // "bCcy": "BNB",
759
+ // "qCcy": "USDT",
760
+ // "visibleStartTime": "1620390600000",
761
+ // "tradableStartTime": "1620390600000",
762
+ // "sCcy": "USDT",
763
+ // "tSz": "0.001",
764
+ // "pxScale": "0.001,0.01,0.1,1,10",
765
+ // "lotSz": "1",
766
+ // "minSz": "1",
767
+ // "ctVal": "0.1",
768
+ // "status": "OPEN",
769
+ // "oDate": "1620287590000",
770
+ // "maxPx": "1000000",
771
+ // "minPx": "0.001",
772
+ // "maxQty": "1000000",
773
+ // "minQty": "1",
774
+ // "maxLever": "50",
775
+ // "lever": "10",
776
+ // "ctType": "LINEAR",
777
+ // "alias": "",
778
+ // "iM": "0.02",
779
+ // "mM": "0.0115",
780
+ // "mR": "2000",
781
+ // "buyLmt": "",
782
+ // "sellLmt": "",
783
+ // "ordPxRange": "0.05",
784
+ // "marketMaxQty": "2800",
785
+ // "limitMaxQty": "1000000"
786
+ // },
787
+ //
788
+ const markets = this.safeList(response, 'data');
789
+ return this.parseMarkets(markets);
790
+ }
583
791
  parseMarket(market) {
792
+ if ('ctType' in market) {
793
+ return this.parseSwapMarket(market);
794
+ }
795
+ else {
796
+ return this.parseSpotMarket(market);
797
+ }
798
+ }
799
+ parseSpotMarket(market) {
584
800
  const id = this.safeString(market, 'symbol');
585
801
  const baseId = this.safeString(market, 'baseCurrencyName');
586
802
  const quoteId = this.safeString(market, 'quoteCurrencyName');
@@ -636,6 +852,116 @@ class poloniex extends poloniex$1 {
636
852
  'info': market,
637
853
  };
638
854
  }
855
+ parseSwapMarket(market) {
856
+ //
857
+ // {
858
+ // "symbol": "BNB_USDT_PERP",
859
+ // "bAsset": ".PBNBUSDT",
860
+ // "bCcy": "BNB",
861
+ // "qCcy": "USDT",
862
+ // "visibleStartTime": "1620390600000",
863
+ // "tradableStartTime": "1620390600000",
864
+ // "sCcy": "USDT",
865
+ // "tSz": "0.001",
866
+ // "pxScale": "0.001,0.01,0.1,1,10",
867
+ // "lotSz": "1",
868
+ // "minSz": "1",
869
+ // "ctVal": "0.1",
870
+ // "status": "OPEN",
871
+ // "oDate": "1620287590000",
872
+ // "maxPx": "1000000",
873
+ // "minPx": "0.001",
874
+ // "maxQty": "1000000",
875
+ // "minQty": "1",
876
+ // "maxLever": "50",
877
+ // "lever": "10",
878
+ // "ctType": "LINEAR",
879
+ // "alias": "",
880
+ // "iM": "0.02",
881
+ // "mM": "0.0115",
882
+ // "mR": "2000",
883
+ // "buyLmt": "",
884
+ // "sellLmt": "",
885
+ // "ordPxRange": "0.05",
886
+ // "marketMaxQty": "2800",
887
+ // "limitMaxQty": "1000000"
888
+ // },
889
+ //
890
+ const id = this.safeString(market, 'symbol');
891
+ const baseId = this.safeString(market, 'bCcy');
892
+ const quoteId = this.safeString(market, 'qCcy');
893
+ const settleId = this.safeString(market, 'sCcy');
894
+ const base = this.safeCurrencyCode(baseId);
895
+ const quote = this.safeCurrencyCode(quoteId);
896
+ const settle = this.safeCurrencyCode(settleId);
897
+ const status = this.safeString(market, 'status');
898
+ const active = status === 'OPEN';
899
+ const linear = market['ctType'] === 'LINEAR';
900
+ let symbol = base + '/' + quote;
901
+ if (linear) {
902
+ symbol += ':' + settle;
903
+ }
904
+ else {
905
+ // actually, exchange does not have any inverse future now
906
+ symbol += ':' + base;
907
+ }
908
+ const alias = this.safeString(market, 'alias');
909
+ let type = 'swap';
910
+ if (alias !== undefined) {
911
+ type = 'future';
912
+ }
913
+ return {
914
+ 'id': id,
915
+ 'symbol': symbol,
916
+ 'base': base,
917
+ 'quote': quote,
918
+ 'settle': settle,
919
+ 'baseId': baseId,
920
+ 'quoteId': quoteId,
921
+ 'settleId': settleId,
922
+ 'type': (type === 'future') ? 'future' : 'swap',
923
+ 'spot': false,
924
+ 'margin': false,
925
+ 'swap': type === 'swap',
926
+ 'future': type === 'future',
927
+ 'option': false,
928
+ 'active': active,
929
+ 'contract': true,
930
+ 'linear': linear,
931
+ 'inverse': !linear,
932
+ 'contractSize': this.safeNumber(market, 'ctVal'),
933
+ 'expiry': undefined,
934
+ 'expiryDatetime': undefined,
935
+ 'strike': undefined,
936
+ 'optionType': undefined,
937
+ 'taker': this.safeNumber(market, 'tFee'),
938
+ 'maker': this.safeNumber(market, 'mFee'),
939
+ 'precision': {
940
+ 'amount': this.safeNumber(market, 'lotSz'),
941
+ 'price': this.safeNumber(market, 'tSz'),
942
+ },
943
+ 'limits': {
944
+ 'amount': {
945
+ 'min': this.safeNumber(market, 'minSz'),
946
+ 'max': this.safeNumber(market, 'limitMaxQty'),
947
+ },
948
+ 'price': {
949
+ 'min': this.safeNumber(market, 'minPx'),
950
+ 'max': this.safeNumber(market, 'maxPx'),
951
+ },
952
+ 'cost': {
953
+ 'min': undefined,
954
+ 'max': undefined,
955
+ },
956
+ 'leverage': {
957
+ 'max': this.safeNumber(market, 'maxLever'),
958
+ 'min': undefined,
959
+ },
960
+ },
961
+ 'created': this.safeInteger(market, 'oDate'),
962
+ 'info': market,
963
+ };
964
+ }
639
965
  /**
640
966
  * @method
641
967
  * @name poloniex#fetchTime
@@ -649,6 +975,8 @@ class poloniex extends poloniex$1 {
649
975
  return this.safeInteger(response, 'serverTime');
650
976
  }
651
977
  parseTicker(ticker, market = undefined) {
978
+ //
979
+ // spot:
652
980
  //
653
981
  // {
654
982
  // "symbol" : "BTC_USDT",
@@ -671,36 +999,56 @@ class poloniex extends poloniex$1 {
671
999
  // "markPrice" : "26444.11"
672
1000
  // }
673
1001
  //
674
- const timestamp = this.safeInteger(ticker, 'ts');
675
- const marketId = this.safeString(ticker, 'symbol');
1002
+ // swap:
1003
+ //
1004
+ // {
1005
+ // "s": "XRP_USDT_PERP",
1006
+ // "o": "2.0503",
1007
+ // "l": "2.0066",
1008
+ // "h": "2.216",
1009
+ // "c": "2.1798",
1010
+ // "qty": "21090",
1011
+ // "amt": "451339.65",
1012
+ // "tC": "3267",
1013
+ // "sT": "1740736380000",
1014
+ // "cT": "1740822777559",
1015
+ // "dN": "XRP/USDT/PERP",
1016
+ // "dC": "0.0632",
1017
+ // "bPx": "2.175",
1018
+ // "bSz": "3",
1019
+ // "aPx": "2.1831",
1020
+ // "aSz": "111",
1021
+ // "mPx": "2.1798",
1022
+ // "iPx": "2.1834"
1023
+ // },
1024
+ //
1025
+ const timestamp = this.safeInteger2(ticker, 'ts', 'cT');
1026
+ const marketId = this.safeString2(ticker, 'symbol', 's');
676
1027
  market = this.safeMarket(marketId);
677
- const close = this.safeString(ticker, 'close');
678
- const relativeChange = this.safeString(ticker, 'dailyChange');
1028
+ const relativeChange = this.safeString2(ticker, 'dailyChange', 'dc');
679
1029
  const percentage = Precise["default"].stringMul(relativeChange, '100');
680
- const bidVolume = this.safeString(ticker, 'bidQuantity');
681
- const askVolume = this.safeString(ticker, 'askQuantity');
682
1030
  return this.safeTicker({
683
1031
  'id': marketId,
684
1032
  'symbol': market['symbol'],
685
1033
  'timestamp': timestamp,
686
1034
  'datetime': this.iso8601(timestamp),
687
- 'high': this.safeString(ticker, 'high'),
688
- 'low': this.safeString(ticker, 'low'),
689
- 'bid': this.safeString(ticker, 'bid'),
690
- 'bidVolume': bidVolume,
691
- 'ask': this.safeString(ticker, 'ask'),
692
- 'askVolume': askVolume,
1035
+ 'high': this.safeString2(ticker, 'high', 'h'),
1036
+ 'low': this.safeString2(ticker, 'low', 'l'),
1037
+ 'bid': this.safeString2(ticker, 'bid', 'bPx'),
1038
+ 'bidVolume': this.safeString2(ticker, 'bidQuantity', 'bSz'),
1039
+ 'ask': this.safeString2(ticker, 'ask', 'aPx'),
1040
+ 'askVolume': this.safeString2(ticker, 'askQuantity', 'aSz'),
693
1041
  'vwap': undefined,
694
- 'open': this.safeString(ticker, 'open'),
695
- 'close': close,
696
- 'last': close,
1042
+ 'open': this.safeString2(ticker, 'open', 'o'),
1043
+ 'close': this.safeString2(ticker, 'close', 'c'),
697
1044
  'previousClose': undefined,
698
1045
  'change': undefined,
699
1046
  'percentage': percentage,
700
1047
  'average': undefined,
701
- 'baseVolume': this.safeString(ticker, 'quantity'),
702
- 'quoteVolume': this.safeString(ticker, 'amount'),
703
- 'markPrice': this.safeString(ticker, 'markPrice'),
1048
+ 'baseVolume': this.safeString2(ticker, 'quantity', 'qty'),
1049
+ 'quoteVolume': this.safeString2(ticker, 'amount', 'amt'),
1050
+ 'markPrice': this.safeString2(ticker, 'markPrice', 'mPx'),
1051
+ 'indexPrice': this.safeString(ticker, 'iPx'),
704
1052
  'info': ticker,
705
1053
  }, market);
706
1054
  }
@@ -709,13 +1057,58 @@ class poloniex extends poloniex$1 {
709
1057
  * @name poloniex#fetchTickers
710
1058
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
711
1059
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#ticker
1060
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-market-info
712
1061
  * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
713
1062
  * @param {object} [params] extra parameters specific to the exchange API endpoint
714
1063
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
715
1064
  */
716
1065
  async fetchTickers(symbols = undefined, params = {}) {
717
1066
  await this.loadMarkets();
718
- symbols = this.marketSymbols(symbols);
1067
+ let market = undefined;
1068
+ const request = {};
1069
+ if (symbols !== undefined) {
1070
+ symbols = this.marketSymbols(symbols, undefined, true, true, false);
1071
+ const symbolsLength = symbols.length;
1072
+ if (symbolsLength > 0) {
1073
+ market = this.market(symbols[0]);
1074
+ if (symbolsLength === 1) {
1075
+ request['symbol'] = market['id'];
1076
+ }
1077
+ }
1078
+ }
1079
+ let marketType = undefined;
1080
+ [marketType, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
1081
+ if (marketType === 'swap') {
1082
+ const responseRaw = await this.swapPublicGetV3MarketTickers(this.extend(request, params));
1083
+ //
1084
+ // {
1085
+ // "code": "200",
1086
+ // "msg": "Success",
1087
+ // "data": [
1088
+ // {
1089
+ // "s": "XRP_USDT_PERP",
1090
+ // "o": "2.0503",
1091
+ // "l": "2.0066",
1092
+ // "h": "2.216",
1093
+ // "c": "2.1798",
1094
+ // "qty": "21090",
1095
+ // "amt": "451339.65",
1096
+ // "tC": "3267",
1097
+ // "sT": "1740736380000",
1098
+ // "cT": "1740822777559",
1099
+ // "dN": "XRP/USDT/PERP",
1100
+ // "dC": "0.0632",
1101
+ // "bPx": "2.175",
1102
+ // "bSz": "3",
1103
+ // "aPx": "2.1831",
1104
+ // "aSz": "111",
1105
+ // "mPx": "2.1798",
1106
+ // "iPx": "2.1834"
1107
+ // },
1108
+ //
1109
+ const data = this.safeList(responseRaw, 'data');
1110
+ return this.parseTickers(data, symbols);
1111
+ }
719
1112
  const response = await this.publicGetMarketsTicker24h(params);
720
1113
  //
721
1114
  // [
@@ -886,6 +1279,7 @@ class poloniex extends poloniex$1 {
886
1279
  * @name poloniex#fetchTicker
887
1280
  * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
888
1281
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#ticker
1282
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-market-info
889
1283
  * @param {string} symbol unified symbol of the market to fetch the ticker for
890
1284
  * @param {object} [params] extra parameters specific to the exchange API endpoint
891
1285
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -896,6 +1290,10 @@ class poloniex extends poloniex$1 {
896
1290
  const request = {
897
1291
  'symbol': market['id'],
898
1292
  };
1293
+ if (market['contract']) {
1294
+ const tickers = await this.fetchTickers([market['symbol']], params);
1295
+ return this.safeDict(tickers, symbol);
1296
+ }
899
1297
  const response = await this.publicGetMarketsSymbolTicker24h(this.extend(request, params));
900
1298
  //
901
1299
  // {
@@ -925,6 +1323,8 @@ class poloniex extends poloniex$1 {
925
1323
  //
926
1324
  // fetchTrades
927
1325
  //
1326
+ // spot:
1327
+ //
928
1328
  // {
929
1329
  // "id" : "60014521",
930
1330
  // "price" : "23162.94",
@@ -935,8 +1335,21 @@ class poloniex extends poloniex$1 {
935
1335
  // "createTime" : 1659684602036
936
1336
  // }
937
1337
  //
1338
+ // swap:
1339
+ //
1340
+ // {
1341
+ // "id": "105807376",
1342
+ // "side": "buy",
1343
+ // "px": "84410.57",
1344
+ // "qty": "1",
1345
+ // "amt": "84.41057",
1346
+ // "cT": "1740777563557",
1347
+ // }
1348
+ //
938
1349
  // fetchMyTrades
939
1350
  //
1351
+ // spot:
1352
+ //
940
1353
  // {
941
1354
  // "id": "32164924331503616",
942
1355
  // "symbol": "LINK_USDT",
@@ -955,6 +1368,34 @@ class poloniex extends poloniex$1 {
955
1368
  // "clientOrderId": "myOwnId-321"
956
1369
  // }
957
1370
  //
1371
+ // swap:
1372
+ //
1373
+ // {
1374
+ // "symbol": "BTC_USDT_PERP",
1375
+ // "trdId": "105813553",
1376
+ // "side": "SELL",
1377
+ // "type": "TRADE",
1378
+ // "mgnMode": "CROSS",
1379
+ // "ordType": "MARKET",
1380
+ // "clOrdId": "polo418912106147315112",
1381
+ // "role": "TAKER",
1382
+ // "px": "84704.9",
1383
+ // "qty": "1",
1384
+ // "cTime": "1740842829430",
1385
+ // "uTime": "1740842829450",
1386
+ // "feeCcy": "USDT",
1387
+ // "feeAmt": "0.04235245",
1388
+ // "deductCcy": "",
1389
+ // "deductAmt": "0",
1390
+ // "feeRate": "0.0005",
1391
+ // "id": "418912106342654592",
1392
+ // "posSide": "BOTH",
1393
+ // "ordId": "418912106147315112",
1394
+ // "qCcy": "USDT",
1395
+ // "value": "84.7049",
1396
+ // "actType": "TRADING"
1397
+ // },
1398
+ //
958
1399
  // fetchOrderTrades (taker trades)
959
1400
  //
960
1401
  // {
@@ -975,20 +1416,19 @@ class poloniex extends poloniex$1 {
975
1416
  // "clientOrderId": ""
976
1417
  // }
977
1418
  //
978
- //
979
- const id = this.safeString2(trade, 'id', 'tradeID');
980
- const orderId = this.safeString(trade, 'orderId');
981
- const timestamp = this.safeInteger2(trade, 'ts', 'createTime');
1419
+ const id = this.safeStringN(trade, ['id', 'tradeID', 'trdId']);
1420
+ const orderId = this.safeString2(trade, 'orderId', 'ordId');
1421
+ const timestamp = this.safeIntegerN(trade, ['ts', 'createTime', 'cT', 'cTime']);
982
1422
  const marketId = this.safeString(trade, 'symbol');
983
1423
  market = this.safeMarket(marketId, market, '_');
984
1424
  const symbol = market['symbol'];
985
1425
  const side = this.safeStringLower2(trade, 'side', 'takerSide');
986
1426
  let fee = undefined;
987
- const priceString = this.safeString(trade, 'price');
988
- const amountString = this.safeString(trade, 'quantity');
989
- const costString = this.safeString(trade, 'amount');
990
- const feeCurrencyId = this.safeString(trade, 'feeCurrency');
991
- const feeCostString = this.safeString(trade, 'feeAmount');
1427
+ const priceString = this.safeString2(trade, 'price', 'px');
1428
+ const amountString = this.safeString2(trade, 'quantity', 'qty');
1429
+ const costString = this.safeString2(trade, 'amount', 'amt');
1430
+ const feeCurrencyId = this.safeString2(trade, 'feeCurrency', 'feeCcy');
1431
+ const feeCostString = this.safeString2(trade, 'feeAmount', 'feeAmt');
992
1432
  if (feeCostString !== undefined) {
993
1433
  const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
994
1434
  fee = {
@@ -1003,9 +1443,9 @@ class poloniex extends poloniex$1 {
1003
1443
  'datetime': this.iso8601(timestamp),
1004
1444
  'symbol': symbol,
1005
1445
  'order': orderId,
1006
- 'type': this.safeStringLower(trade, 'type'),
1446
+ 'type': this.safeStringLower2(trade, 'ordType', 'type'),
1007
1447
  'side': side,
1008
- 'takerOrMaker': this.safeStringLower(trade, 'matchRole'),
1448
+ 'takerOrMaker': this.safeStringLower2(trade, 'matchRole', 'role'),
1009
1449
  'price': priceString,
1010
1450
  'amount': amountString,
1011
1451
  'cost': costString,
@@ -1017,6 +1457,7 @@ class poloniex extends poloniex$1 {
1017
1457
  * @name poloniex#fetchTrades
1018
1458
  * @description get the list of most recent trades for a particular symbol
1019
1459
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#trades
1460
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-execution-info
1020
1461
  * @param {string} symbol unified symbol of the market to fetch trades for
1021
1462
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
1022
1463
  * @param {int} [limit] the maximum amount of trades to fetch
@@ -1030,7 +1471,26 @@ class poloniex extends poloniex$1 {
1030
1471
  'symbol': market['id'],
1031
1472
  };
1032
1473
  if (limit !== undefined) {
1033
- request['limit'] = limit;
1474
+ request['limit'] = limit; // max 1000, for spot & swap
1475
+ }
1476
+ if (market['contract']) {
1477
+ const response = await this.swapPublicGetV3MarketTrades(this.extend(request, params));
1478
+ //
1479
+ // {
1480
+ // code: "200",
1481
+ // msg: "Success",
1482
+ // data: [
1483
+ // {
1484
+ // id: "105807320", // descending order
1485
+ // side: "sell",
1486
+ // px: "84383.93",
1487
+ // qty: "1",
1488
+ // amt: "84.38393",
1489
+ // cT: "1740777074704",
1490
+ // },
1491
+ //
1492
+ const tradesList = this.safeList(response, 'data');
1493
+ return this.parseTrades(tradesList, market, since, limit);
1034
1494
  }
1035
1495
  const trades = await this.publicGetMarketsSymbolTrades(this.extend(request, params));
1036
1496
  //
@@ -1053,6 +1513,7 @@ class poloniex extends poloniex$1 {
1053
1513
  * @name poloniex#fetchMyTrades
1054
1514
  * @description fetch all trades made by the user
1055
1515
  * @see https://api-docs.poloniex.com/spot/api/private/trade#trade-history
1516
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-execution-details
1056
1517
  * @param {string} symbol unified market symbol
1057
1518
  * @param {int} [since] the earliest time in ms to fetch trades for
1058
1519
  * @param {int} [limit] the maximum number of trades structures to retrieve
@@ -1072,17 +1533,61 @@ class poloniex extends poloniex$1 {
1072
1533
  if (symbol !== undefined) {
1073
1534
  market = this.market(symbol);
1074
1535
  }
1536
+ let marketType = undefined;
1537
+ [marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
1538
+ const isContract = this.inArray(marketType, ['swap', 'future']);
1075
1539
  let request = {
1076
1540
  // 'from': 12345678, // A 'trade Id'. The query begins at ‘from'.
1077
1541
  // 'direction': 'PRE', // PRE, NEXT The direction before or after ‘from'.
1078
1542
  };
1543
+ const startKey = isContract ? 'sTime' : 'startTime';
1544
+ const endKey = isContract ? 'eTime' : 'endTime';
1079
1545
  if (since !== undefined) {
1080
- request['startTime'] = since;
1546
+ request[startKey] = since;
1081
1547
  }
1082
1548
  if (limit !== undefined) {
1083
1549
  request['limit'] = limit;
1084
1550
  }
1085
- [request, params] = this.handleUntilOption('endTime', request, params);
1551
+ if (isContract && symbol !== undefined) {
1552
+ request['symbol'] = market['id'];
1553
+ }
1554
+ [request, params] = this.handleUntilOption(endKey, request, params);
1555
+ if (isContract) {
1556
+ const raw = await this.swapPrivateGetV3TradeOrderTrades(this.extend(request, params));
1557
+ //
1558
+ // {
1559
+ // "code": "200",
1560
+ // "msg": "",
1561
+ // "data": [
1562
+ // {
1563
+ // "symbol": "BTC_USDT_PERP",
1564
+ // "trdId": "105813553",
1565
+ // "side": "SELL",
1566
+ // "type": "TRADE",
1567
+ // "mgnMode": "CROSS",
1568
+ // "ordType": "MARKET",
1569
+ // "clOrdId": "polo418912106147315112",
1570
+ // "role": "TAKER",
1571
+ // "px": "84704.9",
1572
+ // "qty": "1",
1573
+ // "cTime": "1740842829430",
1574
+ // "uTime": "1740842829450",
1575
+ // "feeCcy": "USDT",
1576
+ // "feeAmt": "0.04235245",
1577
+ // "deductCcy": "",
1578
+ // "deductAmt": "0",
1579
+ // "feeRate": "0.0005",
1580
+ // "id": "418912106342654592",
1581
+ // "posSide": "BOTH",
1582
+ // "ordId": "418912106147315112",
1583
+ // "qCcy": "USDT",
1584
+ // "value": "84.7049",
1585
+ // "actType": "TRADING"
1586
+ // },
1587
+ //
1588
+ const data = this.safeList(raw, 'data');
1589
+ return this.parseTrades(data, market, since, limit);
1590
+ }
1086
1591
  const response = await this.privateGetTrades(this.extend(request, params));
1087
1592
  //
1088
1593
  // [
@@ -1143,7 +1648,9 @@ class poloniex extends poloniex$1 {
1143
1648
  // "updateTime" : 16xxxxxxxxx36
1144
1649
  // }
1145
1650
  //
1146
- // fetchOpenOrders
1651
+ // fetchOpenOrders (and fetchClosedOrders same for contracts)
1652
+ //
1653
+ // spot:
1147
1654
  //
1148
1655
  // {
1149
1656
  // "id": "24993088082542592",
@@ -1164,14 +1671,60 @@ class poloniex extends poloniex$1 {
1164
1671
  // "updateTime": 1646925216548
1165
1672
  // }
1166
1673
  //
1674
+ // contract:
1675
+ //
1676
+ // {
1677
+ // "symbol": "BTC_USDT_PERP",
1678
+ // "side": "BUY",
1679
+ // "type": "LIMIT",
1680
+ // "ordId": "418890767248232148",
1681
+ // "clOrdId": "polo418890767248232148",
1682
+ // "mgnMode": "CROSS",
1683
+ // "px": "81130.13",
1684
+ // "reduceOnly": false,
1685
+ // "lever": "20",
1686
+ // "state": "NEW",
1687
+ // "source": "WEB",
1688
+ // "timeInForce": "GTC",
1689
+ // "tpTrgPx": "",
1690
+ // "tpPx": "",
1691
+ // "tpTrgPxType": "",
1692
+ // "slTrgPx": "",
1693
+ // "slPx": "",
1694
+ // "slTrgPxType": "",
1695
+ // "avgPx": "0",
1696
+ // "execQty": "0",
1697
+ // "execAmt": "0",
1698
+ // "feeCcy": "",
1699
+ // "feeAmt": "0",
1700
+ // "deductCcy": "0",
1701
+ // "deductAmt": "0",
1702
+ // "stpMode": "NONE", // todo: selfTradePrevention
1703
+ // "cTime": "1740837741523",
1704
+ // "uTime": "1740840846882",
1705
+ // "sz": "1",
1706
+ // "posSide": "BOTH",
1707
+ // "qCcy": "USDT"
1708
+ // "cancelReason": "", // this field can only be in closed orders
1709
+ // },
1710
+ //
1167
1711
  // createOrder, editOrder
1168
1712
  //
1713
+ // spot:
1714
+ //
1169
1715
  // {
1170
1716
  // "id": "29772698821328896",
1171
1717
  // "clientOrderId": "1234Abc"
1172
1718
  // }
1173
1719
  //
1174
- let timestamp = this.safeInteger2(order, 'timestamp', 'createTime');
1720
+ // contract:
1721
+ //
1722
+ // {
1723
+ // "ordId":"418876147745775616",
1724
+ // "clOrdId":"polo418876147745775616"
1725
+ // }
1726
+ //
1727
+ let timestamp = this.safeIntegerN(order, ['timestamp', 'createTime', 'cTime']);
1175
1728
  if (timestamp === undefined) {
1176
1729
  timestamp = this.parse8601(this.safeString(order, 'date'));
1177
1730
  }
@@ -1184,16 +1737,16 @@ class poloniex extends poloniex$1 {
1184
1737
  resultingTrades = this.safeValue(resultingTrades, this.safeString(market, 'id', marketId));
1185
1738
  }
1186
1739
  }
1187
- const price = this.safeString2(order, 'price', 'rate');
1188
- const amount = this.safeString(order, 'quantity');
1189
- const filled = this.safeString(order, 'filledQuantity');
1740
+ const price = this.safeStringN(order, ['price', 'rate', 'px']);
1741
+ const amount = this.safeString2(order, 'quantity', 'sz');
1742
+ const filled = this.safeString2(order, 'filledQuantity', 'execQty');
1190
1743
  const status = this.parseOrderStatus(this.safeString(order, 'state'));
1191
1744
  const side = this.safeStringLower(order, 'side');
1192
1745
  const rawType = this.safeString(order, 'type');
1193
1746
  const type = this.parseOrderType(rawType);
1194
- const id = this.safeStringN(order, ['orderNumber', 'id', 'orderId']);
1747
+ const id = this.safeStringN(order, ['orderNumber', 'id', 'orderId', 'ordId']);
1195
1748
  let fee = undefined;
1196
- const feeCurrency = this.safeString(order, 'tokenFeeCurrency');
1749
+ const feeCurrency = this.safeString2(order, 'tokenFeeCurrency', 'feeCcy');
1197
1750
  let feeCost = undefined;
1198
1751
  let feeCurrencyCode = undefined;
1199
1752
  const rate = this.safeString(order, 'fee');
@@ -1203,7 +1756,7 @@ class poloniex extends poloniex$1 {
1203
1756
  else {
1204
1757
  // poloniex accepts a 30% discount to pay fees in TRX
1205
1758
  feeCurrencyCode = this.safeCurrencyCode(feeCurrency);
1206
- feeCost = this.safeString(order, 'tokenFee');
1759
+ feeCost = this.safeString2(order, 'tokenFee', 'feeAmt');
1207
1760
  }
1208
1761
  if (feeCost !== undefined) {
1209
1762
  fee = {
@@ -1212,7 +1765,11 @@ class poloniex extends poloniex$1 {
1212
1765
  'currency': feeCurrencyCode,
1213
1766
  };
1214
1767
  }
1215
- const clientOrderId = this.safeString(order, 'clientOrderId');
1768
+ const clientOrderId = this.safeString2(order, 'clientOrderId', 'clOrdId');
1769
+ const marginMode = this.safeStringLower(order, 'mgnMode');
1770
+ const reduceOnly = this.safeBool(order, 'reduceOnly');
1771
+ const leverage = this.safeInteger(order, 'lever');
1772
+ const hedged = this.safeString(order, 'posSide') !== 'BOTH';
1216
1773
  return this.safeOrder({
1217
1774
  'info': order,
1218
1775
  'id': id,
@@ -1224,23 +1781,28 @@ class poloniex extends poloniex$1 {
1224
1781
  'symbol': symbol,
1225
1782
  'type': type,
1226
1783
  'timeInForce': this.safeString(order, 'timeInForce'),
1227
- 'postOnly': undefined,
1784
+ 'postOnly': rawType === 'LIMIT_MAKER',
1228
1785
  'side': side,
1229
1786
  'price': price,
1230
1787
  'triggerPrice': this.safeString2(order, 'triggerPrice', 'stopPrice'),
1231
- 'cost': undefined,
1232
- 'average': this.safeString(order, 'avgPrice'),
1788
+ 'cost': this.safeString(order, 'execAmt'),
1789
+ 'average': this.safeString2(order, 'avgPrice', 'avgPx'),
1233
1790
  'amount': amount,
1234
1791
  'filled': filled,
1235
1792
  'remaining': undefined,
1236
1793
  'trades': resultingTrades,
1237
1794
  'fee': fee,
1795
+ 'marginMode': marginMode,
1796
+ 'reduceOnly': reduceOnly,
1797
+ 'leverage': leverage,
1798
+ 'hedged': hedged,
1238
1799
  }, market);
1239
1800
  }
1240
1801
  parseOrderType(status) {
1241
1802
  const statuses = {
1242
1803
  'MARKET': 'market',
1243
1804
  'LIMIT': 'limit',
1805
+ 'LIMIT_MAKER': 'limit',
1244
1806
  'STOP-LIMIT': 'limit',
1245
1807
  'STOP-MARKET': 'market',
1246
1808
  };
@@ -1265,6 +1827,7 @@ class poloniex extends poloniex$1 {
1265
1827
  * @description fetch all unfilled currently open orders
1266
1828
  * @see https://api-docs.poloniex.com/spot/api/private/order#open-orders
1267
1829
  * @see https://api-docs.poloniex.com/spot/api/private/smart-order#open-orders // trigger orders
1830
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-current-orders
1268
1831
  * @param {string} symbol unified market symbol
1269
1832
  * @param {int} [since] the earliest time in ms to fetch open orders for
1270
1833
  * @param {int} [limit] the maximum number of open orders structures to retrieve
@@ -1280,13 +1843,59 @@ class poloniex extends poloniex$1 {
1280
1843
  market = this.market(symbol);
1281
1844
  request['symbol'] = market['id'];
1282
1845
  }
1846
+ let marketType = undefined;
1847
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);
1283
1848
  if (limit !== undefined) {
1284
- request['limit'] = limit;
1849
+ const max = (marketType === 'spot') ? 2000 : 100;
1850
+ request['limit'] = Math.max(limit, max);
1285
1851
  }
1286
1852
  const isTrigger = this.safeValue2(params, 'trigger', 'stop');
1287
1853
  params = this.omit(params, ['trigger', 'stop']);
1288
1854
  let response = undefined;
1289
- if (isTrigger) {
1855
+ if (!market['spot']) {
1856
+ const raw = await this.swapPrivateGetV3TradeOrderOpens(this.extend(request, params));
1857
+ //
1858
+ // {
1859
+ // "code": "200",
1860
+ // "msg": "",
1861
+ // "data": [
1862
+ // {
1863
+ // "symbol": "BTC_USDT_PERP",
1864
+ // "side": "BUY",
1865
+ // "type": "LIMIT",
1866
+ // "ordId": "418890767248232148",
1867
+ // "clOrdId": "polo418890767248232148",
1868
+ // "mgnMode": "CROSS",
1869
+ // "px": "81130.13",
1870
+ // "reduceOnly": false,
1871
+ // "lever": "20",
1872
+ // "state": "NEW",
1873
+ // "source": "WEB",
1874
+ // "timeInForce": "GTC",
1875
+ // "tpTrgPx": "",
1876
+ // "tpPx": "",
1877
+ // "tpTrgPxType": "",
1878
+ // "slTrgPx": "",
1879
+ // "slPx": "",
1880
+ // "slTrgPxType": "",
1881
+ // "avgPx": "0",
1882
+ // "execQty": "0",
1883
+ // "execAmt": "0",
1884
+ // "feeCcy": "",
1885
+ // "feeAmt": "0",
1886
+ // "deductCcy": "0",
1887
+ // "deductAmt": "0",
1888
+ // "stpMode": "NONE",
1889
+ // "cTime": "1740837741523",
1890
+ // "uTime": "1740840846882",
1891
+ // "sz": "1",
1892
+ // "posSide": "BOTH",
1893
+ // "qCcy": "USDT"
1894
+ // },
1895
+ //
1896
+ response = this.safeList(raw, 'data');
1897
+ }
1898
+ else if (isTrigger) {
1290
1899
  response = await this.privateGetSmartorders(this.extend(request, params));
1291
1900
  }
1292
1901
  else {
@@ -1318,6 +1927,82 @@ class poloniex extends poloniex$1 {
1318
1927
  const extension = { 'status': 'open' };
1319
1928
  return this.parseOrders(response, market, since, limit, extension);
1320
1929
  }
1930
+ /**
1931
+ * @method
1932
+ * @name poloniex#fetchClosedOrders
1933
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/get-order-history
1934
+ * @description fetches information on multiple closed orders made by the user
1935
+ * @param {string} symbol unified market symbol of the market orders were made in
1936
+ * @param {int} [since] the earliest time in ms to fetch orders for
1937
+ * @param {int} [limit] the maximum number of order structures to retrieve
1938
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1939
+ * @param {int} [params.until] timestamp in ms of the latest entry
1940
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1941
+ */
1942
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1943
+ await this.loadMarkets();
1944
+ let market = undefined;
1945
+ let request = {};
1946
+ if (symbol !== undefined) {
1947
+ market = this.market(symbol);
1948
+ request['symbol'] = market['id'];
1949
+ }
1950
+ let marketType = undefined;
1951
+ [marketType, params] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params, 'swap');
1952
+ if (marketType === 'spot') {
1953
+ throw new errors.NotSupported(this.id + ' fetchClosedOrders() is not supported for spot markets yet');
1954
+ }
1955
+ if (limit !== undefined) {
1956
+ request['limit'] = Math.min(200, limit);
1957
+ }
1958
+ if (since !== undefined) {
1959
+ request['sTime'] = since;
1960
+ }
1961
+ [request, params] = this.handleUntilOption('eTime', request, params);
1962
+ const response = await this.swapPrivateGetV3TradeOrderHistory(this.extend(request, params));
1963
+ //
1964
+ // {
1965
+ // "code": "200",
1966
+ // "msg": "",
1967
+ // "data": [
1968
+ // {
1969
+ // "symbol": "BTC_USDT_PERP",
1970
+ // "side": "SELL",
1971
+ // "type": "MARKET",
1972
+ // "ordId": "418912106147315712",
1973
+ // "clOrdId": "polo418912106147315712",
1974
+ // "mgnMode": "CROSS",
1975
+ // "px": "0",
1976
+ // "sz": "2",
1977
+ // "lever": "20",
1978
+ // "state": "FILLED",
1979
+ // "cancelReason": "",
1980
+ // "source": "WEB",
1981
+ // "reduceOnly": "true",
1982
+ // "timeInForce": "GTC",
1983
+ // "tpTrgPx": "",
1984
+ // "tpPx": "",
1985
+ // "tpTrgPxType": "",
1986
+ // "slTrgPx": "",
1987
+ // "slPx": "",
1988
+ // "slTrgPxType": "",
1989
+ // "avgPx": "84705.56",
1990
+ // "execQty": "2",
1991
+ // "execAmt": "169.41112",
1992
+ // "feeCcy": "USDT",
1993
+ // "feeAmt": "0.08470556",
1994
+ // "deductCcy": "0",
1995
+ // "deductAmt": "0",
1996
+ // "stpMode": "NONE",
1997
+ // "cTime": "1740842829116",
1998
+ // "uTime": "1740842829130",
1999
+ // "posSide": "BOTH",
2000
+ // "qCcy": "USDT"
2001
+ // },
2002
+ //
2003
+ const data = this.safeList(response, 'data', []);
2004
+ return this.parseOrders(data, market, since, limit);
2005
+ }
1321
2006
  /**
1322
2007
  * @method
1323
2008
  * @name poloniex#createOrder
@@ -1337,20 +2022,24 @@ class poloniex extends poloniex$1 {
1337
2022
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1338
2023
  await this.loadMarkets();
1339
2024
  const market = this.market(symbol);
1340
- if (!market['spot']) {
1341
- throw new errors.NotSupported(this.id + ' createOrder() does not support ' + market['type'] + ' orders, only spot orders are accepted');
1342
- }
1343
2025
  let request = {
1344
2026
  'symbol': market['id'],
1345
- 'side': side,
1346
- // 'timeInForce': timeInForce,
2027
+ 'side': side.toUpperCase(), // uppercase, both for spot & swap
2028
+ // 'timeInForce': timeInForce, // matches unified values
1347
2029
  // 'accountType': 'SPOT',
1348
2030
  // 'amount': amount,
1349
2031
  };
1350
2032
  const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
1351
2033
  [request, params] = this.orderRequest(symbol, type, side, amount, request, price, params);
1352
2034
  let response = undefined;
1353
- if (triggerPrice !== undefined) {
2035
+ if (market['swap'] || market['future']) {
2036
+ const responseInitial = await this.swapPrivatePostV3TradeOrder(this.extend(request, params));
2037
+ //
2038
+ // {"code":200,"msg":"Success","data":{"ordId":"418876147745775616","clOrdId":"polo418876147745775616"}}
2039
+ //
2040
+ response = this.safeDict(responseInitial, 'data');
2041
+ }
2042
+ else if (triggerPrice !== undefined) {
1354
2043
  response = await this.privatePostSmartorders(this.extend(request, params));
1355
2044
  }
1356
2045
  else {
@@ -1362,19 +2051,37 @@ class poloniex extends poloniex$1 {
1362
2051
  // "clientOrderId" : ""
1363
2052
  // }
1364
2053
  //
1365
- response = this.extend(response, {
1366
- 'type': type,
1367
- 'side': side,
1368
- });
1369
2054
  return this.parseOrder(response, market);
1370
2055
  }
1371
2056
  orderRequest(symbol, type, side, amount, request, price = undefined, params = {}) {
2057
+ const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
2058
+ const market = this.market(symbol);
2059
+ if (market['contract']) {
2060
+ let marginMode = undefined;
2061
+ [marginMode, params] = this.handleParamString(params, 'marginMode');
2062
+ if (marginMode !== undefined) {
2063
+ this.checkRequiredArgument('createOrder', marginMode, 'marginMode', ['cross', 'isolated']);
2064
+ request['mgnMode'] = marginMode.toUpperCase();
2065
+ }
2066
+ let hedged = undefined;
2067
+ [hedged, params] = this.handleParamString(params, 'hedged');
2068
+ if (hedged) {
2069
+ if (marginMode === undefined) {
2070
+ throw new errors.ArgumentsRequired(this.id + ' createOrder() requires a marginMode parameter "cross" or "isolated" for hedged orders');
2071
+ }
2072
+ if (!('posSide' in params)) {
2073
+ throw new errors.ArgumentsRequired(this.id + ' createOrder() requires a posSide parameter "LONG" or "SHORT" for hedged orders');
2074
+ }
2075
+ }
2076
+ }
1372
2077
  let upperCaseType = type.toUpperCase();
1373
2078
  const isMarket = upperCaseType === 'MARKET';
1374
2079
  const isPostOnly = this.isPostOnly(isMarket, upperCaseType === 'LIMIT_MAKER', params);
1375
- const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
1376
2080
  params = this.omit(params, ['postOnly', 'triggerPrice', 'stopPrice']);
1377
2081
  if (triggerPrice !== undefined) {
2082
+ if (!market['spot']) {
2083
+ throw new errors.InvalidOrder(this.id + ' createOrder() does not support trigger orders for ' + market['type'] + ' markets');
2084
+ }
1378
2085
  upperCaseType = (price === undefined) ? 'STOP' : 'STOP_LIMIT';
1379
2086
  request['stopPrice'] = triggerPrice;
1380
2087
  }
@@ -1392,7 +2099,7 @@ class poloniex extends poloniex$1 {
1392
2099
  if (cost !== undefined) {
1393
2100
  quoteAmount = this.costToPrecision(symbol, cost);
1394
2101
  }
1395
- else if (createMarketBuyOrderRequiresPrice) {
2102
+ else if (createMarketBuyOrderRequiresPrice && market['spot']) {
1396
2103
  if (price === undefined) {
1397
2104
  throw new errors.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');
1398
2105
  }
@@ -1406,15 +2113,19 @@ class poloniex extends poloniex$1 {
1406
2113
  else {
1407
2114
  quoteAmount = this.costToPrecision(symbol, amount);
1408
2115
  }
1409
- request['amount'] = quoteAmount;
2116
+ const amountKey = market['spot'] ? 'amount' : 'sz';
2117
+ request[amountKey] = quoteAmount;
1410
2118
  }
1411
2119
  else {
1412
- request['quantity'] = this.amountToPrecision(symbol, amount);
2120
+ const amountKey = market['spot'] ? 'quantity' : 'sz';
2121
+ request[amountKey] = this.amountToPrecision(symbol, amount);
1413
2122
  }
1414
2123
  }
1415
2124
  else {
1416
- request['quantity'] = this.amountToPrecision(symbol, amount);
1417
- request['price'] = this.priceToPrecision(symbol, price);
2125
+ const amountKey = market['spot'] ? 'quantity' : 'sz';
2126
+ request[amountKey] = this.amountToPrecision(symbol, amount);
2127
+ const priceKey = market['spot'] ? 'price' : 'px';
2128
+ request[priceKey] = this.priceToPrecision(symbol, price);
1418
2129
  }
1419
2130
  const clientOrderId = this.safeString(params, 'clientOrderId');
1420
2131
  if (clientOrderId !== undefined) {
@@ -1485,7 +2196,27 @@ class poloniex extends poloniex$1 {
1485
2196
  // @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1486
2197
  //
1487
2198
  await this.loadMarkets();
2199
+ if (symbol === undefined) {
2200
+ throw new errors.ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
2201
+ }
2202
+ const market = this.market(symbol);
1488
2203
  const request = {};
2204
+ if (!market['spot']) {
2205
+ request['symbol'] = market['id'];
2206
+ request['ordId'] = id;
2207
+ const raw = await this.swapPrivateDeleteV3TradeOrder(this.extend(request, params));
2208
+ //
2209
+ // {
2210
+ // "code": "200",
2211
+ // "msg": "Success",
2212
+ // "data": {
2213
+ // "ordId": "418886099910612040",
2214
+ // "clOrdId": "polo418886099910612040"
2215
+ // }
2216
+ // }
2217
+ //
2218
+ return this.parseOrder(this.safeDict(raw, 'data'));
2219
+ }
1489
2220
  const clientOrderId = this.safeValue(params, 'clientOrderId');
1490
2221
  if (clientOrderId !== undefined) {
1491
2222
  id = clientOrderId;
@@ -1517,6 +2248,7 @@ class poloniex extends poloniex$1 {
1517
2248
  * @description cancel all open orders
1518
2249
  * @see https://api-docs.poloniex.com/spot/api/private/order#cancel-all-orders
1519
2250
  * @see https://api-docs.poloniex.com/spot/api/private/smart-order#cancel-all-orders // trigger orders
2251
+ * @see https://api-docs.poloniex.com/v3/futures/api/trade/cancel-all-orders - contract markets
1520
2252
  * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
1521
2253
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1522
2254
  * @param {boolean} [params.trigger] true if canceling trigger orders
@@ -1535,9 +2267,30 @@ class poloniex extends poloniex$1 {
1535
2267
  market['id'],
1536
2268
  ];
1537
2269
  }
2270
+ let response = undefined;
2271
+ let marketType = undefined;
2272
+ [marketType, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);
2273
+ if (marketType === 'swap' || marketType === 'future') {
2274
+ const raw = await this.swapPrivateDeleteV3TradeAllOrders(this.extend(request, params));
2275
+ //
2276
+ // {
2277
+ // "code": "200",
2278
+ // "msg": "Success",
2279
+ // "data": [
2280
+ // {
2281
+ // "code": "200",
2282
+ // "msg": "Success",
2283
+ // "ordId": "418885787866388511",
2284
+ // "clOrdId": "polo418885787866388511"
2285
+ // }
2286
+ // ]
2287
+ // }
2288
+ //
2289
+ response = this.safeList(raw, 'data');
2290
+ return this.parseOrders(response, market);
2291
+ }
1538
2292
  const isTrigger = this.safeValue2(params, 'trigger', 'stop');
1539
2293
  params = this.omit(params, ['trigger', 'stop']);
1540
- let response = undefined;
1541
2294
  if (isTrigger) {
1542
2295
  response = await this.privateDeleteSmartorders(this.extend(request, params));
1543
2296
  }
@@ -1581,6 +2334,16 @@ class poloniex extends poloniex$1 {
1581
2334
  const request = {
1582
2335
  'id': id,
1583
2336
  };
2337
+ let market = undefined;
2338
+ if (symbol !== undefined) {
2339
+ market = this.market(symbol);
2340
+ request['symbol'] = market['id'];
2341
+ }
2342
+ let marketType = undefined;
2343
+ [marketType, params] = this.handleMarketTypeAndParams('fetchOrder', market, params);
2344
+ if (marketType !== 'spot') {
2345
+ throw new errors.NotSupported(this.id + ' fetchOrder() is not supported for ' + marketType + ' markets yet');
2346
+ }
1584
2347
  const isTrigger = this.safeValue2(params, 'trigger', 'stop');
1585
2348
  params = this.omit(params, ['trigger', 'stop']);
1586
2349
  let response = undefined;
@@ -1669,6 +2432,24 @@ class poloniex extends poloniex$1 {
1669
2432
  'timestamp': undefined,
1670
2433
  'datetime': undefined,
1671
2434
  };
2435
+ // for swap
2436
+ if (!Array.isArray(response)) {
2437
+ const ts = this.safeInteger(response, 'uTime');
2438
+ result['timestamp'] = ts;
2439
+ result['datetime'] = this.iso8601(ts);
2440
+ const details = this.safeList(response, 'details', []);
2441
+ for (let i = 0; i < details.length; i++) {
2442
+ const balance = details[i];
2443
+ const currencyId = this.safeString(balance, 'ccy');
2444
+ const code = this.safeCurrencyCode(currencyId);
2445
+ const account = this.account();
2446
+ account['total'] = this.safeString(balance, 'avail');
2447
+ account['used'] = this.safeString(balance, 'im');
2448
+ result[code] = account;
2449
+ }
2450
+ return this.safeBalance(result);
2451
+ }
2452
+ // for spot
1672
2453
  for (let i = 0; i < response.length; i++) {
1673
2454
  const account = this.safeValue(response, i, {});
1674
2455
  const balances = this.safeValue(account, 'balances');
@@ -1689,11 +2470,56 @@ class poloniex extends poloniex$1 {
1689
2470
  * @name poloniex#fetchBalance
1690
2471
  * @description query for balance and get the amount of funds available for trading or funds locked in orders
1691
2472
  * @see https://api-docs.poloniex.com/spot/api/private/account#all-account-balances
2473
+ * @see https://api-docs.poloniex.com/v3/futures/api/account/balance
1692
2474
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1693
2475
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1694
2476
  */
1695
2477
  async fetchBalance(params = {}) {
1696
2478
  await this.loadMarkets();
2479
+ let marketType = undefined;
2480
+ [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
2481
+ if (marketType !== 'spot') {
2482
+ const responseRaw = await this.swapPrivateGetV3AccountBalance(params);
2483
+ //
2484
+ // {
2485
+ // "code": "200",
2486
+ // "msg": "",
2487
+ // "data": {
2488
+ // "state": "NORMAL",
2489
+ // "eq": "9.98571622",
2490
+ // "isoEq": "0",
2491
+ // "im": "0",
2492
+ // "mm": "0",
2493
+ // "mmr": "0",
2494
+ // "upl": "0",
2495
+ // "availMgn": "9.98571622",
2496
+ // "cTime": "1738093601775",
2497
+ // "uTime": "1740829116236",
2498
+ // "details": [
2499
+ // {
2500
+ // "ccy": "USDT",
2501
+ // "eq": "9.98571622",
2502
+ // "isoEq": "0",
2503
+ // "avail": "9.98571622",
2504
+ // "trdHold": "0",
2505
+ // "upl": "0",
2506
+ // "isoAvail": "0",
2507
+ // "isoHold": "0",
2508
+ // "isoUpl": "0",
2509
+ // "im": "0",
2510
+ // "mm": "0",
2511
+ // "mmr": "0",
2512
+ // "imr": "0",
2513
+ // "cTime": "1740829116236",
2514
+ // "uTime": "1740829116236"
2515
+ // }
2516
+ // ]
2517
+ // }
2518
+ // }
2519
+ //
2520
+ const data = this.safeDict(responseRaw, 'data', {});
2521
+ return this.parseBalance(data);
2522
+ }
1697
2523
  const request = {
1698
2524
  'accountType': 'SPOT',
1699
2525
  };
@@ -1754,6 +2580,7 @@ class poloniex extends poloniex$1 {
1754
2580
  * @name poloniex#fetchOrderBook
1755
2581
  * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
1756
2582
  * @see https://api-docs.poloniex.com/spot/api/public/market-data#order-book
2583
+ * @see https://api-docs.poloniex.com/v3/futures/api/market/get-order-book
1757
2584
  * @param {string} symbol unified symbol of the market to fetch the order book for
1758
2585
  * @param {int} [limit] the maximum amount of order book entries to return
1759
2586
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -1767,6 +2594,27 @@ class poloniex extends poloniex$1 {
1767
2594
  };
1768
2595
  if (limit !== undefined) {
1769
2596
  request['limit'] = limit; // The default value of limit is 10. Valid limit values are: 5, 10, 20, 50, 100, 150.
2597
+ if (market['contract']) {
2598
+ request['limit'] = this.findNearestCeiling([5, 10, 20, 100, 150], limit);
2599
+ }
2600
+ }
2601
+ if (market['contract']) {
2602
+ const responseRaw = await this.swapPublicGetV3MarketOrderBook(this.extend(request, params));
2603
+ //
2604
+ // {
2605
+ // "code": 200,
2606
+ // "data": {
2607
+ // "asks": [ ["58700", "9934"], ..],
2608
+ // "bids": [ ["58600", "9952"], ..],
2609
+ // "s": "100",
2610
+ // "ts": 1719974138333
2611
+ // },
2612
+ // "msg": "Success"
2613
+ // }
2614
+ //
2615
+ const data = this.safeDict(responseRaw, 'data', {});
2616
+ const ts = this.safeInteger(data, 'ts');
2617
+ return this.parseOrderBook(data, symbol, ts);
1770
2618
  }
1771
2619
  const response = await this.publicGetMarketsSymbolOrderBook(this.extend(request, params));
1772
2620
  //
@@ -2366,14 +3214,397 @@ class poloniex extends poloniex$1 {
2366
3214
  },
2367
3215
  };
2368
3216
  }
3217
+ /**
3218
+ * @method
3219
+ * @name poloniex#setLeverage
3220
+ * @description set the level of leverage for a market
3221
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/set-leverage
3222
+ * @param {int} leverage the rate of leverage
3223
+ * @param {string} symbol unified market symbol
3224
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3225
+ * @param {string} [params.marginMode] 'cross' or 'isolated'
3226
+ * @returns {object} response from the exchange
3227
+ */
3228
+ async setLeverage(leverage, symbol = undefined, params = {}) {
3229
+ if (symbol === undefined) {
3230
+ throw new errors.ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
3231
+ }
3232
+ await this.loadMarkets();
3233
+ const market = this.market(symbol);
3234
+ let marginMode = undefined;
3235
+ [marginMode, params] = this.handleMarginModeAndParams('setLeverage', params);
3236
+ if (marginMode === undefined) {
3237
+ throw new errors.ArgumentsRequired(this.id + ' setLeverage() requires a marginMode parameter "cross" or "isolated"');
3238
+ }
3239
+ let hedged = undefined;
3240
+ [hedged, params] = this.handleParamBool(params, 'hedged', false);
3241
+ if (hedged) {
3242
+ if (!('posSide' in params)) {
3243
+ throw new errors.ArgumentsRequired(this.id + ' setLeverage() requires a posSide parameter for hedged mode: "LONG" or "SHORT"');
3244
+ }
3245
+ }
3246
+ const request = {
3247
+ 'lever': leverage,
3248
+ 'mgnMode': marginMode.toUpperCase(),
3249
+ 'symbol': market['id'],
3250
+ };
3251
+ const response = await this.swapPrivatePostV3PositionLeverage(this.extend(request, params));
3252
+ return response;
3253
+ }
3254
+ /**
3255
+ * @method
3256
+ * @name poloniex#fetchLeverage
3257
+ * @description fetch the set leverage for a market
3258
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/get-leverages
3259
+ * @param {string} symbol unified market symbol
3260
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3261
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
3262
+ */
3263
+ async fetchLeverage(symbol, params = {}) {
3264
+ await this.loadMarkets();
3265
+ const market = this.market(symbol);
3266
+ const request = {
3267
+ 'symbol': market['id'],
3268
+ };
3269
+ let marginMode = undefined;
3270
+ [marginMode, params] = this.handleMarginModeAndParams('fetchLeverage', params);
3271
+ if (marginMode === undefined) {
3272
+ throw new errors.ArgumentsRequired(this.id + ' fetchLeverage() requires a marginMode parameter "cross" or "isolated"');
3273
+ }
3274
+ request['mgnMode'] = marginMode.toUpperCase();
3275
+ const response = await this.swapPrivateGetV3PositionLeverages(this.extend(request, params));
3276
+ //
3277
+ // for one-way mode:
3278
+ //
3279
+ // {
3280
+ // "code": "200",
3281
+ // "msg": "",
3282
+ // "data": [
3283
+ // {
3284
+ // "symbol": "BTC_USDT_PERP",
3285
+ // "lever": "10",
3286
+ // "mgnMode": "CROSS",
3287
+ // "posSide": "BOTH"
3288
+ // }
3289
+ // ]
3290
+ // }
3291
+ //
3292
+ // for hedge:
3293
+ //
3294
+ // {
3295
+ // "code": "200",
3296
+ // "msg": "",
3297
+ // "data": [
3298
+ // {
3299
+ // "symbol": "BTC_USDT_PERP",
3300
+ // "lever": "20",
3301
+ // "mgnMode": "CROSS",
3302
+ // "posSide": "SHORT"
3303
+ // },
3304
+ // {
3305
+ // "symbol": "BTC_USDT_PERP",
3306
+ // "lever": "20",
3307
+ // "mgnMode": "CROSS",
3308
+ // "posSide": "LONG"
3309
+ // }
3310
+ // ]
3311
+ // }
3312
+ //
3313
+ return this.parseLeverage(response, market);
3314
+ }
3315
+ parseLeverage(leverage, market = undefined) {
3316
+ let shortLeverage = undefined;
3317
+ let longLeverage = undefined;
3318
+ let marketId = undefined;
3319
+ let marginMode = undefined;
3320
+ const data = this.safeList(leverage, 'data');
3321
+ for (let i = 0; i < data.length; i++) {
3322
+ const entry = data[i];
3323
+ marketId = this.safeString(entry, 'symbol');
3324
+ marginMode = this.safeString(entry, 'mgnMode');
3325
+ const lever = this.safeInteger(entry, 'lever');
3326
+ const posSide = this.safeString(entry, 'posSide');
3327
+ if (posSide === 'LONG') {
3328
+ longLeverage = lever;
3329
+ }
3330
+ else if (posSide === 'SHORT') {
3331
+ shortLeverage = lever;
3332
+ }
3333
+ else {
3334
+ longLeverage = lever;
3335
+ shortLeverage = lever;
3336
+ }
3337
+ }
3338
+ return {
3339
+ 'info': leverage,
3340
+ 'symbol': this.safeSymbol(marketId, market),
3341
+ 'marginMode': marginMode,
3342
+ 'longLeverage': longLeverage,
3343
+ 'shortLeverage': shortLeverage,
3344
+ };
3345
+ }
3346
+ /**
3347
+ * @method
3348
+ * @name poloniex#fetchPositionMode
3349
+ * @description fetchs the position mode, hedged or one way, hedged for binance is set identically for all linear markets or all inverse markets
3350
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/position-mode-switch
3351
+ * @param {string} symbol unified symbol of the market to fetch the order book for
3352
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3353
+ * @returns {object} an object detailing whether the market is in hedged or one-way mode
3354
+ */
3355
+ async fetchPositionMode(symbol = undefined, params = {}) {
3356
+ const response = await this.swapPrivateGetV3PositionMode(params);
3357
+ //
3358
+ // {
3359
+ // "code": "200",
3360
+ // "msg": "Success",
3361
+ // "data": {
3362
+ // "posMode": "ONE_WAY"
3363
+ // }
3364
+ // }
3365
+ //
3366
+ const data = this.safeDict(response, 'data', {});
3367
+ const posMode = this.safeString(data, 'posMode');
3368
+ const hedged = posMode === 'HEDGE';
3369
+ return {
3370
+ 'info': response,
3371
+ 'hedged': hedged,
3372
+ };
3373
+ }
3374
+ /**
3375
+ * @method
3376
+ * @name poloniex#setPositionMode
3377
+ * @description set hedged to true or false for a market
3378
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/position-mode-switch
3379
+ * @param {bool} hedged set to true to use dualSidePosition
3380
+ * @param {string} symbol not used by binance setPositionMode ()
3381
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3382
+ * @returns {object} response from the exchange
3383
+ */
3384
+ async setPositionMode(hedged, symbol = undefined, params = {}) {
3385
+ const mode = hedged ? 'HEDGE' : 'ONE_WAY';
3386
+ const request = {
3387
+ 'posMode': mode,
3388
+ };
3389
+ const response = await this.swapPrivatePostV3PositionMode(this.extend(request, params));
3390
+ //
3391
+ // {
3392
+ // "code": "200",
3393
+ // "msg": "Success",
3394
+ // "data": {}
3395
+ // }
3396
+ //
3397
+ return response;
3398
+ }
3399
+ /**
3400
+ * @method
3401
+ * @name poloniex#fetchPositions
3402
+ * @description fetch all open positions
3403
+ * @see https://api-docs.poloniex.com/v3/futures/api/positions/get-current-position
3404
+ * @param {string[]|undefined} symbols list of unified market symbols
3405
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3406
+ * @param {boolean} [params.standard] whether to fetch standard contract positions
3407
+ * @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
3408
+ */
3409
+ async fetchPositions(symbols = undefined, params = {}) {
3410
+ await this.loadMarkets();
3411
+ symbols = this.marketSymbols(symbols);
3412
+ const response = await this.swapPrivateGetV3TradePositionOpens(params);
3413
+ //
3414
+ // {
3415
+ // "code": "200",
3416
+ // "msg": "",
3417
+ // "data": [
3418
+ // {
3419
+ // "symbol": "BTC_USDT_PERP",
3420
+ // "posSide": "LONG",
3421
+ // "side": "BUY",
3422
+ // "mgnMode": "CROSS",
3423
+ // "openAvgPx": "94193.42",
3424
+ // "qty": "1",
3425
+ // "availQty": "1",
3426
+ // "lever": "20",
3427
+ // "adl": "0.3007",
3428
+ // "liqPx": "84918.201844064386317906",
3429
+ // "im": "4.7047795",
3430
+ // "mm": "0.56457354",
3431
+ // "upl": "-0.09783",
3432
+ // "uplRatio": "-0.0207",
3433
+ // "pnl": "0",
3434
+ // "markPx": "94095.59",
3435
+ // "mgnRatio": "0.0582",
3436
+ // "state": "NORMAL",
3437
+ // "cTime": "1740950344401",
3438
+ // "uTime": "1740950344401",
3439
+ // "mgn": "4.7047795",
3440
+ // "actType": "TRADING",
3441
+ // "maxWAmt": "0",
3442
+ // "tpTrgPx": "",
3443
+ // "slTrgPx": ""
3444
+ // }
3445
+ // ]
3446
+ // }
3447
+ //
3448
+ const positions = this.safeList(response, 'data', []);
3449
+ return this.parsePositions(positions, symbols);
3450
+ }
3451
+ parsePosition(position, market = undefined) {
3452
+ //
3453
+ // {
3454
+ // "symbol": "BTC_USDT_PERP",
3455
+ // "posSide": "LONG",
3456
+ // "side": "BUY",
3457
+ // "mgnMode": "CROSS",
3458
+ // "openAvgPx": "94193.42",
3459
+ // "qty": "1",
3460
+ // "availQty": "1",
3461
+ // "lever": "20",
3462
+ // "adl": "0.3007",
3463
+ // "liqPx": "84918.201844064386317906",
3464
+ // "im": "4.7047795",
3465
+ // "mm": "0.56457354",
3466
+ // "upl": "-0.09783",
3467
+ // "uplRatio": "-0.0207",
3468
+ // "pnl": "0",
3469
+ // "markPx": "94095.59",
3470
+ // "mgnRatio": "0.0582",
3471
+ // "state": "NORMAL",
3472
+ // "cTime": "1740950344401",
3473
+ // "uTime": "1740950344401",
3474
+ // "mgn": "4.7047795",
3475
+ // "actType": "TRADING",
3476
+ // "maxWAmt": "0",
3477
+ // "tpTrgPx": "",
3478
+ // "slTrgPx": ""
3479
+ // }
3480
+ //
3481
+ const marketId = this.safeString(position, 'symbol');
3482
+ market = this.safeMarket(marketId, market);
3483
+ const timestamp = this.safeInteger(position, 'cTime');
3484
+ const marginMode = this.safeStringLower(position, 'mgnMode');
3485
+ const leverage = this.safeString(position, 'lever');
3486
+ const initialMargin = this.safeString(position, 'im');
3487
+ const notional = Precise["default"].stringMul(leverage, initialMargin);
3488
+ const qty = this.safeString(position, 'qty');
3489
+ const avgPrice = this.safeString(position, 'openAvgPx');
3490
+ const collateral = Precise["default"].stringMul(qty, avgPrice);
3491
+ // todo: some more fields
3492
+ return this.safePosition({
3493
+ 'info': position,
3494
+ 'id': undefined,
3495
+ 'symbol': market['symbol'],
3496
+ 'notional': notional,
3497
+ 'marginMode': marginMode,
3498
+ 'liquidationPrice': this.safeNumber(position, 'liqPx'),
3499
+ 'entryPrice': this.safeNumber(position, 'openAvgPx'),
3500
+ 'unrealizedPnl': this.safeNumber(position, 'upl'),
3501
+ 'percentage': undefined,
3502
+ 'contracts': this.safeNumber(position, 'qty'),
3503
+ 'contractSize': undefined,
3504
+ 'markPrice': this.safeNumber(position, 'markPx'),
3505
+ 'lastPrice': undefined,
3506
+ 'side': this.safeStringLower(position, 'posSide'),
3507
+ 'hedged': undefined,
3508
+ 'timestamp': timestamp,
3509
+ 'datetime': this.iso8601(timestamp),
3510
+ 'lastUpdateTimestamp': undefined,
3511
+ 'maintenanceMargin': this.safeNumber(position, 'mm'),
3512
+ 'maintenanceMarginPercentage': undefined,
3513
+ 'collateral': collateral,
3514
+ 'initialMargin': initialMargin,
3515
+ 'initialMarginPercentage': undefined,
3516
+ 'leverage': parseInt(leverage),
3517
+ 'marginRatio': this.safeNumber(position, 'mgnRatio'),
3518
+ 'stopLossPrice': this.safeNumber(position, 'slTrgPx'),
3519
+ 'takeProfitPrice': this.safeNumber(position, 'tpTrgPx'),
3520
+ });
3521
+ }
3522
+ async modifyMarginHelper(symbol, amount, type, params = {}) {
3523
+ await this.loadMarkets();
3524
+ const market = this.market(symbol);
3525
+ amount = this.amountToPrecision(symbol, amount);
3526
+ const request = {
3527
+ 'symbol': market['id'],
3528
+ 'amt': Precise["default"].stringAbs(amount),
3529
+ 'type': type.toUpperCase(), // 'ADD' or 'REDUCE'
3530
+ };
3531
+ // todo: hedged handling, tricky
3532
+ if (!('posMode' in params)) {
3533
+ request['posMode'] = 'BOTH';
3534
+ }
3535
+ const response = await this.swapPrivatePostV3TradePositionMargin(this.extend(request, params));
3536
+ //
3537
+ // {
3538
+ // "code": 200,
3539
+ // "data": {
3540
+ // "amt": "50",
3541
+ // "lever": "20",
3542
+ // "symbol": "DOT_USDT_PERP",
3543
+ // "posSide": "BOTH",
3544
+ // "type": "ADD"
3545
+ // },
3546
+ // "msg": "Success"
3547
+ // }
3548
+ //
3549
+ if (type === 'reduce') {
3550
+ amount = Precise["default"].stringAbs(amount);
3551
+ }
3552
+ const data = this.safeDict(response, 'data');
3553
+ return this.parseMarginModification(data, market);
3554
+ }
3555
+ parseMarginModification(data, market = undefined) {
3556
+ const marketId = this.safeString(data, 'symbol');
3557
+ market = this.safeMarket(marketId, market);
3558
+ const rawType = this.safeString(data, 'type');
3559
+ const type = (rawType === 'ADD') ? 'add' : 'reduce';
3560
+ return {
3561
+ 'info': data,
3562
+ 'symbol': market['symbol'],
3563
+ 'type': type,
3564
+ 'marginMode': undefined,
3565
+ 'amount': this.safeNumber(data, 'amt'),
3566
+ 'total': undefined,
3567
+ 'code': undefined,
3568
+ 'status': 'ok',
3569
+ 'timestamp': undefined,
3570
+ 'datetime': undefined,
3571
+ };
3572
+ }
3573
+ /**
3574
+ * @method
3575
+ * @name poloniex#reduceMargin
3576
+ * @description remove margin from a position
3577
+ * @param {string} symbol unified market symbol
3578
+ * @param {float} amount the amount of margin to remove
3579
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3580
+ * @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=reduce-margin-structure}
3581
+ */
3582
+ async reduceMargin(symbol, amount, params = {}) {
3583
+ return await this.modifyMarginHelper(symbol, -amount, 'reduce', params);
3584
+ }
3585
+ /**
3586
+ * @method
3587
+ * @name poloniex#addMargin
3588
+ * @description add margin
3589
+ * @param {string} symbol unified market symbol
3590
+ * @param {float} amount amount of margin to add
3591
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3592
+ * @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=add-margin-structure}
3593
+ */
3594
+ async addMargin(symbol, amount, params = {}) {
3595
+ return await this.modifyMarginHelper(symbol, amount, 'add', params);
3596
+ }
2369
3597
  nonce() {
2370
3598
  return this.milliseconds();
2371
3599
  }
2372
3600
  sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
2373
- let url = this.urls['api']['rest'];
3601
+ let url = this.urls['api']['spot'];
3602
+ if (this.inArray(api, ['swapPublic', 'swapPrivate'])) {
3603
+ url = this.urls['api']['swap'];
3604
+ }
2374
3605
  const query = this.omit(params, this.extractParams(path));
2375
3606
  const implodedPath = this.implodeParams(path, params);
2376
- if (api === 'public') {
3607
+ if (api === 'public' || api === 'swapPublic') {
2377
3608
  url += '/' + implodedPath;
2378
3609
  if (Object.keys(query).length) {
2379
3610
  url += '?' + this.urlencode(query);