ccxt 4.2.17 → 4.2.19

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 (439) hide show
  1. package/README.md +9 -9
  2. package/dist/ccxt.browser.js +48992 -47725
  3. package/dist/ccxt.browser.min.js +3 -3
  4. package/dist/cjs/ccxt.js +12 -1
  5. package/dist/cjs/src/alpaca.js +18 -18
  6. package/dist/cjs/src/ascendex.js +13 -6
  7. package/dist/cjs/src/base/Exchange.js +266 -27
  8. package/dist/cjs/src/bigone.js +434 -168
  9. package/dist/cjs/src/binance.js +163 -34
  10. package/dist/cjs/src/binanceus.js +8 -0
  11. package/dist/cjs/src/bingx.js +183 -41
  12. package/dist/cjs/src/bitfinex.js +2 -3
  13. package/dist/cjs/src/bitget.js +59 -16
  14. package/dist/cjs/src/bitmart.js +5 -5
  15. package/dist/cjs/src/bitmex.js +4 -6
  16. package/dist/cjs/src/bitpanda.js +5 -1991
  17. package/dist/cjs/src/bitstamp.js +8 -0
  18. package/dist/cjs/src/bybit.js +27 -47
  19. package/dist/cjs/src/coinbase.js +176 -26
  20. package/dist/cjs/src/coincheck.js +1 -0
  21. package/dist/cjs/src/coinex.js +3 -0
  22. package/dist/cjs/src/coinlist.js +13 -6
  23. package/dist/cjs/src/coinone.js +2 -2
  24. package/dist/cjs/src/coinsph.js +4 -5
  25. package/dist/cjs/src/delta.js +7 -1
  26. package/dist/cjs/src/deribit.js +17 -4
  27. package/dist/cjs/src/gate.js +151 -169
  28. package/dist/cjs/src/gemini.js +1 -1
  29. package/dist/cjs/src/hitbtc.js +2 -3
  30. package/dist/cjs/src/htx.js +157 -7
  31. package/dist/cjs/src/huobijp.js +2 -3
  32. package/dist/cjs/src/independentreserve.js +7 -5
  33. package/dist/cjs/src/kraken.js +86 -54
  34. package/dist/cjs/src/kucoin.js +5 -0
  35. package/dist/cjs/src/kucoinfutures.js +131 -77
  36. package/dist/cjs/src/lbank.js +60 -33
  37. package/dist/cjs/src/luno.js +84 -2
  38. package/dist/cjs/src/mexc.js +3 -3
  39. package/dist/cjs/src/oceanex.js +1 -1
  40. package/dist/cjs/src/okx.js +23 -11
  41. package/dist/cjs/{js/src/bitpanda.js → src/onetrading.js} +39 -39
  42. package/dist/cjs/src/phemex.js +37 -27
  43. package/dist/cjs/src/poloniexfutures.js +1 -0
  44. package/dist/cjs/src/pro/binance.js +66 -25
  45. package/dist/cjs/src/pro/bitget.js +1 -1
  46. package/dist/cjs/src/pro/bitpanda.js +5 -1330
  47. package/dist/cjs/src/pro/coinbase.js +4 -1
  48. package/dist/cjs/src/pro/coincheck.js +208 -0
  49. package/dist/cjs/src/pro/hitbtc.js +5 -4
  50. package/dist/cjs/src/pro/htx.js +6 -1
  51. package/dist/cjs/src/pro/kraken.js +1 -1
  52. package/dist/cjs/src/pro/krakenfutures.js +7 -1
  53. package/dist/cjs/src/pro/kucoin.js +46 -36
  54. package/dist/cjs/src/pro/kucoinfutures.js +45 -37
  55. package/dist/cjs/src/pro/lbank.js +881 -0
  56. package/dist/cjs/src/pro/okx.js +52 -2
  57. package/dist/cjs/{js/src/pro/bitpanda.js → src/pro/onetrading.js} +4 -7
  58. package/dist/cjs/src/pro/poloniex.js +2 -2
  59. package/dist/cjs/src/pro/poloniexfutures.js +43 -35
  60. package/dist/cjs/src/pro/woo.js +126 -0
  61. package/dist/cjs/src/probit.js +4 -2
  62. package/dist/cjs/src/upbit.js +12 -12
  63. package/dist/cjs/src/wavesexchange.js +1 -1
  64. package/dist/cjs/src/whitebit.js +1 -0
  65. package/dist/cjs/src/woo.js +56 -0
  66. package/js/ccxt.d.ts +14 -2
  67. package/js/ccxt.js +10 -2
  68. package/js/src/abstract/bitpanda.d.ts +4 -4
  69. package/js/src/abstract/bitstamp.d.ts +8 -0
  70. package/js/src/abstract/gate.d.ts +1 -0
  71. package/js/src/abstract/gateio.d.ts +1 -0
  72. package/js/src/abstract/htx.d.ts +3 -0
  73. package/js/src/abstract/huobi.d.ts +3 -0
  74. package/js/src/abstract/luno.d.ts +1 -0
  75. package/js/src/abstract/onetrading.d.ts +38 -0
  76. package/js/src/ascendex.js +2 -0
  77. package/js/src/base/Exchange.d.ts +2 -3
  78. package/js/src/base/Exchange.js +5 -2
  79. package/js/src/binance.js +7 -1
  80. package/js/src/bingx.d.ts +1 -0
  81. package/js/src/bingx.js +26 -0
  82. package/js/src/bitget.js +22 -3
  83. package/js/src/bitpanda.d.ts +2 -72
  84. package/js/src/bitpanda.js +5 -1991
  85. package/js/src/bitstamp.js +8 -0
  86. package/js/src/bybit.js +21 -47
  87. package/js/src/coincheck.js +1 -0
  88. package/js/src/deribit.js +16 -4
  89. package/js/src/gate.d.ts +1 -0
  90. package/js/src/gate.js +50 -110
  91. package/js/src/htx.js +3 -0
  92. package/js/src/kraken.d.ts +1 -0
  93. package/js/src/kraken.js +40 -39
  94. package/js/src/lbank.js +1 -0
  95. package/js/src/luno.d.ts +3 -1
  96. package/js/src/luno.js +84 -2
  97. package/js/src/mexc.js +1 -2
  98. package/js/src/onetrading.d.ts +74 -0
  99. package/js/src/onetrading.js +2003 -0
  100. package/js/src/poloniexfutures.js +1 -0
  101. package/js/src/pro/binance.js +7 -2
  102. package/js/src/pro/bitget.js +1 -1
  103. package/js/src/pro/bitpanda.d.ts +2 -34
  104. package/js/src/pro/bitpanda.js +5 -1330
  105. package/js/src/pro/coincheck.d.ts +12 -0
  106. package/js/src/pro/coincheck.js +209 -0
  107. package/js/src/pro/kucoin.js +43 -35
  108. package/js/src/pro/kucoinfutures.js +45 -37
  109. package/js/src/pro/lbank.d.ts +29 -0
  110. package/js/src/pro/lbank.js +882 -0
  111. package/js/src/pro/onetrading.d.ts +36 -0
  112. package/js/src/pro/onetrading.js +1339 -0
  113. package/js/src/pro/poloniexfutures.js +43 -35
  114. package/js/src/whitebit.js +1 -0
  115. package/package.json +2 -2
  116. package/rollup.config.js +2 -0
  117. package/skip-tests.json +14 -2
  118. package/test-commonjs.cjs +25 -1
  119. package/dist/cjs/js/ccxt.js +0 -476
  120. package/dist/cjs/js/src/abstract/alpaca.js +0 -9
  121. package/dist/cjs/js/src/abstract/ascendex.js +0 -9
  122. package/dist/cjs/js/src/abstract/bigone.js +0 -9
  123. package/dist/cjs/js/src/abstract/binance.js +0 -9
  124. package/dist/cjs/js/src/abstract/bingx.js +0 -9
  125. package/dist/cjs/js/src/abstract/bit2c.js +0 -9
  126. package/dist/cjs/js/src/abstract/bitbank.js +0 -9
  127. package/dist/cjs/js/src/abstract/bitbns.js +0 -9
  128. package/dist/cjs/js/src/abstract/bitfinex.js +0 -9
  129. package/dist/cjs/js/src/abstract/bitfinex2.js +0 -9
  130. package/dist/cjs/js/src/abstract/bitflyer.js +0 -9
  131. package/dist/cjs/js/src/abstract/bitforex.js +0 -9
  132. package/dist/cjs/js/src/abstract/bitget.js +0 -9
  133. package/dist/cjs/js/src/abstract/bithumb.js +0 -9
  134. package/dist/cjs/js/src/abstract/bitmart.js +0 -9
  135. package/dist/cjs/js/src/abstract/bitmex.js +0 -9
  136. package/dist/cjs/js/src/abstract/bitopro.js +0 -9
  137. package/dist/cjs/js/src/abstract/bitpanda.js +0 -9
  138. package/dist/cjs/js/src/abstract/bitrue.js +0 -9
  139. package/dist/cjs/js/src/abstract/bitso.js +0 -9
  140. package/dist/cjs/js/src/abstract/bitstamp.js +0 -9
  141. package/dist/cjs/js/src/abstract/bitteam.js +0 -9
  142. package/dist/cjs/js/src/abstract/bitvavo.js +0 -9
  143. package/dist/cjs/js/src/abstract/bl3p.js +0 -9
  144. package/dist/cjs/js/src/abstract/blockchaincom.js +0 -9
  145. package/dist/cjs/js/src/abstract/btcalpha.js +0 -9
  146. package/dist/cjs/js/src/abstract/btcbox.js +0 -9
  147. package/dist/cjs/js/src/abstract/btcmarkets.js +0 -9
  148. package/dist/cjs/js/src/abstract/btcturk.js +0 -9
  149. package/dist/cjs/js/src/abstract/bybit.js +0 -9
  150. package/dist/cjs/js/src/abstract/cex.js +0 -9
  151. package/dist/cjs/js/src/abstract/coinbase.js +0 -9
  152. package/dist/cjs/js/src/abstract/coinbasepro.js +0 -9
  153. package/dist/cjs/js/src/abstract/coincheck.js +0 -9
  154. package/dist/cjs/js/src/abstract/coinex.js +0 -9
  155. package/dist/cjs/js/src/abstract/coinlist.js +0 -9
  156. package/dist/cjs/js/src/abstract/coinmate.js +0 -9
  157. package/dist/cjs/js/src/abstract/coinone.js +0 -9
  158. package/dist/cjs/js/src/abstract/coinsph.js +0 -9
  159. package/dist/cjs/js/src/abstract/coinspot.js +0 -9
  160. package/dist/cjs/js/src/abstract/cryptocom.js +0 -9
  161. package/dist/cjs/js/src/abstract/currencycom.js +0 -9
  162. package/dist/cjs/js/src/abstract/delta.js +0 -9
  163. package/dist/cjs/js/src/abstract/deribit.js +0 -9
  164. package/dist/cjs/js/src/abstract/digifinex.js +0 -9
  165. package/dist/cjs/js/src/abstract/exmo.js +0 -9
  166. package/dist/cjs/js/src/abstract/gate.js +0 -9
  167. package/dist/cjs/js/src/abstract/gemini.js +0 -9
  168. package/dist/cjs/js/src/abstract/hitbtc.js +0 -9
  169. package/dist/cjs/js/src/abstract/hollaex.js +0 -9
  170. package/dist/cjs/js/src/abstract/htx.js +0 -9
  171. package/dist/cjs/js/src/abstract/huobijp.js +0 -9
  172. package/dist/cjs/js/src/abstract/idex.js +0 -9
  173. package/dist/cjs/js/src/abstract/independentreserve.js +0 -9
  174. package/dist/cjs/js/src/abstract/indodax.js +0 -9
  175. package/dist/cjs/js/src/abstract/kraken.js +0 -9
  176. package/dist/cjs/js/src/abstract/krakenfutures.js +0 -9
  177. package/dist/cjs/js/src/abstract/kucoin.js +0 -9
  178. package/dist/cjs/js/src/abstract/kucoinfutures.js +0 -9
  179. package/dist/cjs/js/src/abstract/kuna.js +0 -9
  180. package/dist/cjs/js/src/abstract/latoken.js +0 -9
  181. package/dist/cjs/js/src/abstract/lbank.js +0 -9
  182. package/dist/cjs/js/src/abstract/luno.js +0 -9
  183. package/dist/cjs/js/src/abstract/lykke.js +0 -9
  184. package/dist/cjs/js/src/abstract/mercado.js +0 -9
  185. package/dist/cjs/js/src/abstract/mexc.js +0 -9
  186. package/dist/cjs/js/src/abstract/ndax.js +0 -9
  187. package/dist/cjs/js/src/abstract/novadax.js +0 -9
  188. package/dist/cjs/js/src/abstract/oceanex.js +0 -9
  189. package/dist/cjs/js/src/abstract/okcoin.js +0 -9
  190. package/dist/cjs/js/src/abstract/okx.js +0 -9
  191. package/dist/cjs/js/src/abstract/p2b.js +0 -9
  192. package/dist/cjs/js/src/abstract/paymium.js +0 -9
  193. package/dist/cjs/js/src/abstract/phemex.js +0 -9
  194. package/dist/cjs/js/src/abstract/poloniex.js +0 -9
  195. package/dist/cjs/js/src/abstract/poloniexfutures.js +0 -9
  196. package/dist/cjs/js/src/abstract/probit.js +0 -9
  197. package/dist/cjs/js/src/abstract/timex.js +0 -9
  198. package/dist/cjs/js/src/abstract/tokocrypto.js +0 -9
  199. package/dist/cjs/js/src/abstract/upbit.js +0 -9
  200. package/dist/cjs/js/src/abstract/wavesexchange.js +0 -9
  201. package/dist/cjs/js/src/abstract/wazirx.js +0 -9
  202. package/dist/cjs/js/src/abstract/whitebit.js +0 -9
  203. package/dist/cjs/js/src/abstract/woo.js +0 -9
  204. package/dist/cjs/js/src/abstract/yobit.js +0 -9
  205. package/dist/cjs/js/src/abstract/zaif.js +0 -9
  206. package/dist/cjs/js/src/abstract/zonda.js +0 -9
  207. package/dist/cjs/js/src/ace.js +0 -1058
  208. package/dist/cjs/js/src/alpaca.js +0 -1125
  209. package/dist/cjs/js/src/ascendex.js +0 -3365
  210. package/dist/cjs/js/src/base/Exchange.js +0 -5257
  211. package/dist/cjs/js/src/base/Precise.js +0 -263
  212. package/dist/cjs/js/src/base/errors.js +0 -299
  213. package/dist/cjs/js/src/base/functions/crypto.js +0 -78
  214. package/dist/cjs/js/src/base/functions/encode.js +0 -44
  215. package/dist/cjs/js/src/base/functions/generic.js +0 -193
  216. package/dist/cjs/js/src/base/functions/misc.js +0 -96
  217. package/dist/cjs/js/src/base/functions/number.js +0 -297
  218. package/dist/cjs/js/src/base/functions/platform.js +0 -28
  219. package/dist/cjs/js/src/base/functions/rsa.js +0 -34
  220. package/dist/cjs/js/src/base/functions/string.js +0 -48
  221. package/dist/cjs/js/src/base/functions/throttle.js +0 -66
  222. package/dist/cjs/js/src/base/functions/time.js +0 -187
  223. package/dist/cjs/js/src/base/functions/totp.js +0 -24
  224. package/dist/cjs/js/src/base/functions/type.js +0 -162
  225. package/dist/cjs/js/src/base/functions.js +0 -157
  226. package/dist/cjs/js/src/base/ws/Cache.js +0 -254
  227. package/dist/cjs/js/src/base/ws/Client.js +0 -299
  228. package/dist/cjs/js/src/base/ws/Future.js +0 -34
  229. package/dist/cjs/js/src/base/ws/OrderBook.js +0 -107
  230. package/dist/cjs/js/src/base/ws/OrderBookSide.js +0 -281
  231. package/dist/cjs/js/src/base/ws/WsClient.js +0 -69
  232. package/dist/cjs/js/src/bequant.js +0 -33
  233. package/dist/cjs/js/src/bigone.js +0 -2213
  234. package/dist/cjs/js/src/binance.js +0 -9845
  235. package/dist/cjs/js/src/binancecoinm.js +0 -45
  236. package/dist/cjs/js/src/binanceus.js +0 -92
  237. package/dist/cjs/js/src/binanceusdm.js +0 -58
  238. package/dist/cjs/js/src/bingx.js +0 -3846
  239. package/dist/cjs/js/src/bit2c.js +0 -916
  240. package/dist/cjs/js/src/bitbank.js +0 -1000
  241. package/dist/cjs/js/src/bitbay.js +0 -17
  242. package/dist/cjs/js/src/bitbns.js +0 -1220
  243. package/dist/cjs/js/src/bitcoincom.js +0 -17
  244. package/dist/cjs/js/src/bitfinex.js +0 -1670
  245. package/dist/cjs/js/src/bitfinex2.js +0 -2990
  246. package/dist/cjs/js/src/bitflyer.js +0 -1045
  247. package/dist/cjs/js/src/bitforex.js +0 -852
  248. package/dist/cjs/js/src/bitget.js +0 -8295
  249. package/dist/cjs/js/src/bithumb.js +0 -1090
  250. package/dist/cjs/js/src/bitmart.js +0 -4454
  251. package/dist/cjs/js/src/bitmex.js +0 -2881
  252. package/dist/cjs/js/src/bitopro.js +0 -1724
  253. package/dist/cjs/js/src/bitrue.js +0 -3253
  254. package/dist/cjs/js/src/bitso.js +0 -1753
  255. package/dist/cjs/js/src/bitstamp.js +0 -2188
  256. package/dist/cjs/js/src/bitteam.js +0 -2309
  257. package/dist/cjs/js/src/bitvavo.js +0 -1968
  258. package/dist/cjs/js/src/bl3p.js +0 -447
  259. package/dist/cjs/js/src/blockchaincom.js +0 -1160
  260. package/dist/cjs/js/src/btcalpha.js +0 -929
  261. package/dist/cjs/js/src/btcbox.js +0 -565
  262. package/dist/cjs/js/src/btcmarkets.js +0 -1237
  263. package/dist/cjs/js/src/btcturk.js +0 -929
  264. package/dist/cjs/js/src/bybit.js +0 -7650
  265. package/dist/cjs/js/src/cex.js +0 -1693
  266. package/dist/cjs/js/src/coinbase.js +0 -3424
  267. package/dist/cjs/js/src/coinbasepro.js +0 -1866
  268. package/dist/cjs/js/src/coincheck.js +0 -843
  269. package/dist/cjs/js/src/coinex.js +0 -5417
  270. package/dist/cjs/js/src/coinlist.js +0 -2337
  271. package/dist/cjs/js/src/coinmate.js +0 -989
  272. package/dist/cjs/js/src/coinone.js +0 -1185
  273. package/dist/cjs/js/src/coinsph.js +0 -1933
  274. package/dist/cjs/js/src/coinspot.js +0 -548
  275. package/dist/cjs/js/src/cryptocom.js +0 -3007
  276. package/dist/cjs/js/src/currencycom.js +0 -2015
  277. package/dist/cjs/js/src/delta.js +0 -3262
  278. package/dist/cjs/js/src/deribit.js +0 -3306
  279. package/dist/cjs/js/src/digifinex.js +0 -4307
  280. package/dist/cjs/js/src/exmo.js +0 -2645
  281. package/dist/cjs/js/src/fmfwio.js +0 -34
  282. package/dist/cjs/js/src/gate.js +0 -7077
  283. package/dist/cjs/js/src/gateio.js +0 -16
  284. package/dist/cjs/js/src/gemini.js +0 -1801
  285. package/dist/cjs/js/src/hitbtc.js +0 -3660
  286. package/dist/cjs/js/src/hitbtc3.js +0 -19
  287. package/dist/cjs/js/src/hollaex.js +0 -1882
  288. package/dist/cjs/js/src/htx.js +0 -9174
  289. package/dist/cjs/js/src/huobi.js +0 -16
  290. package/dist/cjs/js/src/huobijp.js +0 -1918
  291. package/dist/cjs/js/src/idex.js +0 -1770
  292. package/dist/cjs/js/src/independentreserve.js +0 -761
  293. package/dist/cjs/js/src/indodax.js +0 -1069
  294. package/dist/cjs/js/src/kraken.js +0 -2891
  295. package/dist/cjs/js/src/krakenfutures.js +0 -2407
  296. package/dist/cjs/js/src/kucoin.js +0 -4494
  297. package/dist/cjs/js/src/kucoinfutures.js +0 -2529
  298. package/dist/cjs/js/src/kuna.js +0 -1949
  299. package/dist/cjs/js/src/latoken.js +0 -1729
  300. package/dist/cjs/js/src/lbank.js +0 -2851
  301. package/dist/cjs/js/src/luno.js +0 -1044
  302. package/dist/cjs/js/src/lykke.js +0 -1303
  303. package/dist/cjs/js/src/mercado.js +0 -897
  304. package/dist/cjs/js/src/mexc.js +0 -5407
  305. package/dist/cjs/js/src/ndax.js +0 -2450
  306. package/dist/cjs/js/src/novadax.js +0 -1556
  307. package/dist/cjs/js/src/oceanex.js +0 -964
  308. package/dist/cjs/js/src/okcoin.js +0 -3115
  309. package/dist/cjs/js/src/okx.js +0 -7331
  310. package/dist/cjs/js/src/p2b.js +0 -1243
  311. package/dist/cjs/js/src/paymium.js +0 -597
  312. package/dist/cjs/js/src/phemex.js +0 -4725
  313. package/dist/cjs/js/src/poloniex.js +0 -2356
  314. package/dist/cjs/js/src/poloniexfutures.js +0 -1794
  315. package/dist/cjs/js/src/pro/alpaca.js +0 -714
  316. package/dist/cjs/js/src/pro/ascendex.js +0 -957
  317. package/dist/cjs/js/src/pro/bequant.js +0 -33
  318. package/dist/cjs/js/src/pro/binance.js +0 -2796
  319. package/dist/cjs/js/src/pro/binancecoinm.js +0 -23
  320. package/dist/cjs/js/src/pro/binanceus.js +0 -51
  321. package/dist/cjs/js/src/pro/binanceusdm.js +0 -32
  322. package/dist/cjs/js/src/pro/bingx.js +0 -944
  323. package/dist/cjs/js/src/pro/bitcoincom.js +0 -29
  324. package/dist/cjs/js/src/pro/bitfinex.js +0 -672
  325. package/dist/cjs/js/src/pro/bitfinex2.js +0 -1159
  326. package/dist/cjs/js/src/pro/bitget.js +0 -1733
  327. package/dist/cjs/js/src/pro/bitmart.js +0 -1486
  328. package/dist/cjs/js/src/pro/bitmex.js +0 -1576
  329. package/dist/cjs/js/src/pro/bitopro.js +0 -327
  330. package/dist/cjs/js/src/pro/bitrue.js +0 -462
  331. package/dist/cjs/js/src/pro/bitstamp.js +0 -547
  332. package/dist/cjs/js/src/pro/bitvavo.js +0 -704
  333. package/dist/cjs/js/src/pro/blockchaincom.js +0 -794
  334. package/dist/cjs/js/src/pro/bybit.js +0 -1843
  335. package/dist/cjs/js/src/pro/cex.js +0 -1510
  336. package/dist/cjs/js/src/pro/coinbase.js +0 -561
  337. package/dist/cjs/js/src/pro/coinbasepro.js +0 -968
  338. package/dist/cjs/js/src/pro/coinex.js +0 -1095
  339. package/dist/cjs/js/src/pro/cryptocom.js +0 -1020
  340. package/dist/cjs/js/src/pro/currencycom.js +0 -563
  341. package/dist/cjs/js/src/pro/deribit.js +0 -825
  342. package/dist/cjs/js/src/pro/exmo.js +0 -658
  343. package/dist/cjs/js/src/pro/gate.js +0 -1316
  344. package/dist/cjs/js/src/pro/gateio.js +0 -16
  345. package/dist/cjs/js/src/pro/gemini.js +0 -649
  346. package/dist/cjs/js/src/pro/hitbtc.js +0 -1294
  347. package/dist/cjs/js/src/pro/hollaex.js +0 -597
  348. package/dist/cjs/js/src/pro/htx.js +0 -2388
  349. package/dist/cjs/js/src/pro/huobi.js +0 -16
  350. package/dist/cjs/js/src/pro/huobijp.js +0 -606
  351. package/dist/cjs/js/src/pro/idex.js +0 -714
  352. package/dist/cjs/js/src/pro/independentreserve.js +0 -280
  353. package/dist/cjs/js/src/pro/kraken.js +0 -1364
  354. package/dist/cjs/js/src/pro/krakenfutures.js +0 -1506
  355. package/dist/cjs/js/src/pro/kucoin.js +0 -1054
  356. package/dist/cjs/js/src/pro/kucoinfutures.js +0 -981
  357. package/dist/cjs/js/src/pro/luno.js +0 -322
  358. package/dist/cjs/js/src/pro/mexc.js +0 -1170
  359. package/dist/cjs/js/src/pro/ndax.js +0 -545
  360. package/dist/cjs/js/src/pro/okcoin.js +0 -760
  361. package/dist/cjs/js/src/pro/okx.js +0 -1608
  362. package/dist/cjs/js/src/pro/phemex.js +0 -1511
  363. package/dist/cjs/js/src/pro/poloniex.js +0 -1253
  364. package/dist/cjs/js/src/pro/poloniexfutures.js +0 -1014
  365. package/dist/cjs/js/src/pro/probit.js +0 -586
  366. package/dist/cjs/js/src/pro/upbit.js +0 -234
  367. package/dist/cjs/js/src/pro/wazirx.js +0 -776
  368. package/dist/cjs/js/src/pro/whitebit.js +0 -927
  369. package/dist/cjs/js/src/pro/woo.js +0 -895
  370. package/dist/cjs/js/src/probit.js +0 -1867
  371. package/dist/cjs/js/src/static_dependencies/fflake/browser.js +0 -401
  372. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -195
  373. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -308
  374. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -554
  375. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -94
  376. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -70
  377. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -91
  378. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -16
  379. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -1760
  380. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -52
  381. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -81
  382. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -376
  383. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -70
  384. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -1580
  385. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -74
  386. package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -24
  387. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -158
  388. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -429
  389. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -176
  390. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -324
  391. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -163
  392. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -245
  393. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -1018
  394. package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +0 -383
  395. package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +0 -258
  396. package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +0 -53
  397. package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +0 -120
  398. package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +0 -69
  399. package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +0 -7
  400. package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +0 -83
  401. package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +0 -240
  402. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +0 -91
  403. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +0 -130
  404. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +0 -214
  405. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +0 -239
  406. package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +0 -93
  407. package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +0 -354
  408. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -16
  409. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +0 -20
  410. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -30
  411. package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +0 -239
  412. package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +0 -372
  413. package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +0 -273
  414. package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +0 -139
  415. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -14
  416. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -16
  417. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +0 -81
  418. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -292
  419. package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +0 -103
  420. package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -140
  421. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -175
  422. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -95
  423. package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +0 -7
  424. package/dist/cjs/js/src/static_dependencies/scure-base/index.js +0 -383
  425. package/dist/cjs/js/src/timex.js +0 -1562
  426. package/dist/cjs/js/src/tokocrypto.js +0 -2542
  427. package/dist/cjs/js/src/upbit.js +0 -1844
  428. package/dist/cjs/js/src/wavesexchange.js +0 -2607
  429. package/dist/cjs/js/src/wazirx.js +0 -953
  430. package/dist/cjs/js/src/whitebit.js +0 -2309
  431. package/dist/cjs/js/src/woo.js +0 -2769
  432. package/dist/cjs/js/src/yobit.js +0 -1314
  433. package/dist/cjs/js/src/zaif.js +0 -736
  434. package/dist/cjs/js/src/zonda.js +0 -1883
  435. package/dist/cjs/src/abstract/bitpanda.js +0 -9
  436. package/test.ts +0 -0
  437. /package/dist/cjs/{js/src/abstract/ace.js → src/abstract/onetrading.js} +0 -0
  438. /package/dist/cjs/{js/src → src}/pro/coinone.js +0 -0
  439. /package/js/src/abstract/{bitpanda.js → onetrading.js} +0 -0
package/dist/cjs/ccxt.js CHANGED
@@ -94,6 +94,7 @@ var novadax = require('./src/novadax.js');
94
94
  var oceanex = require('./src/oceanex.js');
95
95
  var okcoin = require('./src/okcoin.js');
96
96
  var okx = require('./src/okx.js');
97
+ var onetrading = require('./src/onetrading.js');
97
98
  var p2b = require('./src/p2b.js');
98
99
  var paymium = require('./src/paymium.js');
99
100
  var phemex = require('./src/phemex.js');
@@ -134,7 +135,9 @@ var bybit$1 = require('./src/pro/bybit.js');
134
135
  var cex$1 = require('./src/pro/cex.js');
135
136
  var coinbase$1 = require('./src/pro/coinbase.js');
136
137
  var coinbasepro$1 = require('./src/pro/coinbasepro.js');
138
+ var coincheck$1 = require('./src/pro/coincheck.js');
137
139
  var coinex$1 = require('./src/pro/coinex.js');
140
+ var coinone$1 = require('./src/pro/coinone.js');
138
141
  var cryptocom$1 = require('./src/pro/cryptocom.js');
139
142
  var currencycom$1 = require('./src/pro/currencycom.js');
140
143
  var deribit$1 = require('./src/pro/deribit.js');
@@ -153,11 +156,13 @@ var kraken$1 = require('./src/pro/kraken.js');
153
156
  var krakenfutures$1 = require('./src/pro/krakenfutures.js');
154
157
  var kucoin$1 = require('./src/pro/kucoin.js');
155
158
  var kucoinfutures$1 = require('./src/pro/kucoinfutures.js');
159
+ var lbank$1 = require('./src/pro/lbank.js');
156
160
  var luno$1 = require('./src/pro/luno.js');
157
161
  var mexc$1 = require('./src/pro/mexc.js');
158
162
  var ndax$1 = require('./src/pro/ndax.js');
159
163
  var okcoin$1 = require('./src/pro/okcoin.js');
160
164
  var okx$1 = require('./src/pro/okx.js');
165
+ var onetrading$1 = require('./src/pro/onetrading.js');
161
166
  var phemex$1 = require('./src/pro/phemex.js');
162
167
  var poloniex$1 = require('./src/pro/poloniex.js');
163
168
  var poloniexfutures$1 = require('./src/pro/poloniexfutures.js');
@@ -169,7 +174,7 @@ var woo$1 = require('./src/pro/woo.js');
169
174
 
170
175
  //-----------------------------------------------------------------------------
171
176
  // this is updated by vss.js when building
172
- const version = '4.2.17';
177
+ const version = '4.2.19';
173
178
  Exchange["default"].ccxtVersion = version;
174
179
  const exchanges = {
175
180
  'ace': ace,
@@ -254,6 +259,7 @@ const exchanges = {
254
259
  'oceanex': oceanex,
255
260
  'okcoin': okcoin,
256
261
  'okx': okx,
262
+ 'onetrading': onetrading,
257
263
  'p2b': p2b,
258
264
  'paymium': paymium,
259
265
  'phemex': phemex,
@@ -296,7 +302,9 @@ const pro = {
296
302
  'cex': cex$1,
297
303
  'coinbase': coinbase$1,
298
304
  'coinbasepro': coinbasepro$1,
305
+ 'coincheck': coincheck$1,
299
306
  'coinex': coinex$1,
307
+ 'coinone': coinone$1,
300
308
  'cryptocom': cryptocom$1,
301
309
  'currencycom': currencycom$1,
302
310
  'deribit': deribit$1,
@@ -315,11 +323,13 @@ const pro = {
315
323
  'krakenfutures': krakenfutures$1,
316
324
  'kucoin': kucoin$1,
317
325
  'kucoinfutures': kucoinfutures$1,
326
+ 'lbank': lbank$1,
318
327
  'luno': luno$1,
319
328
  'mexc': mexc$1,
320
329
  'ndax': ndax$1,
321
330
  'okcoin': okcoin$1,
322
331
  'okx': okx$1,
332
+ 'onetrading': onetrading$1,
323
333
  'phemex': phemex$1,
324
334
  'poloniex': poloniex$1,
325
335
  'poloniexfutures': poloniexfutures$1,
@@ -452,6 +462,7 @@ exports.novadax = novadax;
452
462
  exports.oceanex = oceanex;
453
463
  exports.okcoin = okcoin;
454
464
  exports.okx = okx;
465
+ exports.onetrading = onetrading;
455
466
  exports.p2b = p2b;
456
467
  exports.paymium = paymium;
457
468
  exports.phemex = phemex;
@@ -36,7 +36,7 @@ class alpaca extends alpaca$1 {
36
36
  'market': 'https://data.sandbox.{hostname}',
37
37
  },
38
38
  'doc': 'https://alpaca.markets/docs/',
39
- 'fees': 'https://alpaca.markets/support/what-are-the-fees-associated-with-crypto-trading/',
39
+ 'fees': 'https://docs.alpaca.markets/docs/crypto-fees',
40
40
  },
41
41
  'has': {
42
42
  'CORS': false,
@@ -207,28 +207,28 @@ class alpaca extends alpaca$1 {
207
207
  'trading': {
208
208
  'tierBased': true,
209
209
  'percentage': true,
210
- 'maker': this.parseNumber('0.003'),
211
- 'taker': this.parseNumber('0.003'),
210
+ 'maker': this.parseNumber('0.0015'),
211
+ 'taker': this.parseNumber('0.0025'),
212
212
  'tiers': {
213
213
  'taker': [
214
- [this.parseNumber('0'), this.parseNumber('0.003')],
215
- [this.parseNumber('500000'), this.parseNumber('0.0028')],
216
- [this.parseNumber('1000000'), this.parseNumber('0.0025')],
217
- [this.parseNumber('5000000'), this.parseNumber('0.002')],
218
- [this.parseNumber('10000000'), this.parseNumber('0.0018')],
219
- [this.parseNumber('25000000'), this.parseNumber('0.0015')],
220
- [this.parseNumber('50000000'), this.parseNumber('0.00125')],
214
+ [this.parseNumber('0'), this.parseNumber('0.0025')],
215
+ [this.parseNumber('100000'), this.parseNumber('0.0022')],
216
+ [this.parseNumber('500000'), this.parseNumber('0.0020')],
217
+ [this.parseNumber('1000000'), this.parseNumber('0.0018')],
218
+ [this.parseNumber('10000000'), this.parseNumber('0.0015')],
219
+ [this.parseNumber('25000000'), this.parseNumber('0.0013')],
220
+ [this.parseNumber('50000000'), this.parseNumber('0.0012')],
221
221
  [this.parseNumber('100000000'), this.parseNumber('0.001')],
222
222
  ],
223
223
  'maker': [
224
- [this.parseNumber('0'), this.parseNumber('0.003')],
225
- [this.parseNumber('500000'), this.parseNumber('0.0028')],
226
- [this.parseNumber('1000000'), this.parseNumber('0.0025')],
227
- [this.parseNumber('5000000'), this.parseNumber('0.002')],
228
- [this.parseNumber('10000000'), this.parseNumber('0.0018')],
229
- [this.parseNumber('25000000'), this.parseNumber('0.0015')],
230
- [this.parseNumber('50000000'), this.parseNumber('0.00125')],
231
- [this.parseNumber('100000000'), this.parseNumber('0.001')],
224
+ [this.parseNumber('0'), this.parseNumber('0.0015')],
225
+ [this.parseNumber('100000'), this.parseNumber('0.0012')],
226
+ [this.parseNumber('500000'), this.parseNumber('0.001')],
227
+ [this.parseNumber('1000000'), this.parseNumber('0.0008')],
228
+ [this.parseNumber('10000000'), this.parseNumber('0.0005')],
229
+ [this.parseNumber('25000000'), this.parseNumber('0.0002')],
230
+ [this.parseNumber('50000000'), this.parseNumber('0.0002')],
231
+ [this.parseNumber('100000000'), this.parseNumber('0.00')],
232
232
  ],
233
233
  },
234
234
  },
@@ -64,6 +64,8 @@ class ascendex extends ascendex$1 {
64
64
  'fetchMarkets': true,
65
65
  'fetchMarkOHLCV': false,
66
66
  'fetchOHLCV': true,
67
+ 'fetchOpenInterest': false,
68
+ 'fetchOpenInterestHistory': false,
67
69
  'fetchOpenOrders': true,
68
70
  'fetchOrder': true,
69
71
  'fetchOrderBook': true,
@@ -808,12 +810,14 @@ class ascendex extends ascendex$1 {
808
810
  */
809
811
  await this.loadMarkets();
810
812
  await this.loadAccounts();
811
- let query = undefined;
812
813
  let marketType = undefined;
813
- [marketType, query] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
814
+ let marginMode = undefined;
815
+ [marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
816
+ [marginMode, params] = this.handleMarginModeAndParams('fetchBalance', params);
814
817
  const isMargin = this.safeValue(params, 'margin', false);
815
- marketType = isMargin ? 'margin' : marketType;
816
- query = this.omit(query, 'margin');
818
+ const isCross = marginMode === 'cross';
819
+ marketType = (isMargin || isCross) ? 'margin' : marketType;
820
+ params = this.omit(params, 'margin');
817
821
  const accountsByType = this.safeValue(this.options, 'accountsByType', {});
818
822
  const accountCategory = this.safeString(accountsByType, marketType, 'cash');
819
823
  const account = this.safeValue(this.accounts, 0, {});
@@ -821,15 +825,18 @@ class ascendex extends ascendex$1 {
821
825
  const request = {
822
826
  'account-group': accountGroup,
823
827
  };
828
+ if ((marginMode === 'isolated') && (marketType !== 'swap')) {
829
+ throw new errors.BadRequest(this.id + ' does not supported isolated margin trading');
830
+ }
824
831
  if ((accountCategory === 'cash') || (accountCategory === 'margin')) {
825
832
  request['account-category'] = accountCategory;
826
833
  }
827
834
  let response = undefined;
828
835
  if ((marketType === 'spot') || (marketType === 'margin')) {
829
- response = await this.v1PrivateAccountCategoryGetBalance(this.extend(request, query));
836
+ response = await this.v1PrivateAccountCategoryGetBalance(this.extend(request, params));
830
837
  }
831
838
  else if (marketType === 'swap') {
832
- response = await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(request, query));
839
+ response = await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(request, params));
833
840
  }
834
841
  else {
835
842
  throw new errors.NotSupported(this.id + ' fetchBalance() is not currently supported for ' + marketType + ' markets');
@@ -365,11 +365,17 @@ class Exchange {
365
365
  'createMarketOrderWithCost': undefined,
366
366
  'createMarketSellOrderWithCost': undefined,
367
367
  'createOrders': undefined,
368
+ 'createOrderWithTakeProfitAndStopLoss': undefined,
368
369
  'createPostOnlyOrder': undefined,
369
370
  'createReduceOnlyOrder': undefined,
371
+ 'createStopLossOrder': undefined,
370
372
  'createStopOrder': undefined,
371
373
  'createStopLimitOrder': undefined,
372
374
  'createStopMarketOrder': undefined,
375
+ 'createTakeProfitOrder': undefined,
376
+ 'createTrailingAmountOrder': undefined,
377
+ 'createTrailingPercentOrder': undefined,
378
+ 'createTriggerOrder': undefined,
373
379
  'createOrderWs': undefined,
374
380
  'editOrderWs': undefined,
375
381
  'fetchOpenOrdersWs': undefined,
@@ -433,7 +439,7 @@ class Exchange {
433
439
  'fetchPositionsForSymbol': undefined,
434
440
  'fetchPositionsRisk': undefined,
435
441
  'fetchPremiumIndexOHLCV': undefined,
436
- 'fetchStatus': 'emulated',
442
+ 'fetchStatus': undefined,
437
443
  'fetchTicker': true,
438
444
  'fetchTickers': undefined,
439
445
  'fetchTime': undefined,
@@ -662,10 +668,28 @@ class Exchange {
662
668
  console.log(...args);
663
669
  }
664
670
  async loadProxyModules() {
671
+ if (this.proxyModulesLoaded) {
672
+ return;
673
+ }
665
674
  this.proxyModulesLoaded = true;
666
- // todo: possible sync alternatives: https://stackoverflow.com/questions/51069002/convert-import-to-synchronous
667
- this.httpProxyAgentModule = await Promise.resolve().then(function () { return require(/* webpackIgnore: true */ '../static_dependencies/proxies/http-proxy-agent/index.js'); });
668
- this.httpsProxyAgentModule = await Promise.resolve().then(function () { return require(/* webpackIgnore: true */ '../static_dependencies/proxies/https-proxy-agent/index.js'); });
675
+ // we have to handle it with below nested way, because of dynamic
676
+ // import issues (https://github.com/ccxt/ccxt/pull/20687)
677
+ try {
678
+ // todo: possible sync alternatives: https://stackoverflow.com/questions/51069002/convert-import-to-synchronous
679
+ this.httpProxyAgentModule = await Promise.resolve().then(function () { return require(/* webpackIgnore: true */ '../static_dependencies/proxies/http-proxy-agent/index.js'); });
680
+ this.httpsProxyAgentModule = await Promise.resolve().then(function () { return require(/* webpackIgnore: true */ '../static_dependencies/proxies/https-proxy-agent/index.js'); });
681
+ }
682
+ catch (e) {
683
+ // if several users are using those frameworks which cause exceptions,
684
+ // let them to be able to load modules still, by installing them
685
+ try {
686
+ // @ts-ignore
687
+ this.httpProxyAgentModule = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackIgnore: true */ 'http-proxy-agent')); });
688
+ // @ts-ignore
689
+ this.httpProxyAgentModule = await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require(/* webpackIgnore: true */ 'https-proxy-agent')); });
690
+ }
691
+ catch { }
692
+ }
669
693
  if (this.socksProxyAgentModuleChecked === false) {
670
694
  this.socksProxyAgentModuleChecked = true;
671
695
  try {
@@ -757,11 +781,10 @@ class Exchange {
757
781
  // proxy agents
758
782
  const [httpProxy, httpsProxy, socksProxy] = this.checkProxySettings(url, method, headers, body);
759
783
  this.checkConflictingProxies(httpProxy || httpsProxy || socksProxy, proxyUrl);
784
+ // skip proxies on the browser
760
785
  if (isNode) {
761
- // skip this on the browser
762
- if (!this.proxyModulesLoaded) {
763
- await this.loadProxyModules(); // this is needed in JS, independently whether proxy properties were set or not, we have to load them because of necessity in WS, which would happen beyond 'fetch' method (WS/etc)
764
- }
786
+ // this is needed in JS, independently whether proxy properties were set or not, we have to load them because of necessity in WS, which would happen beyond 'fetch' method (WS/etc)
787
+ await this.loadProxyModules();
765
788
  }
766
789
  const chosenAgent = this.setProxyAgents(httpProxy, httpsProxy, socksProxy);
767
790
  // user-agent
@@ -783,13 +806,29 @@ class Exchange {
783
806
  // end of proxies & headers
784
807
  if (this.fetchImplementation === undefined) {
785
808
  if (isNode) {
786
- const module = await Promise.resolve().then(function () { return require(/* webpackIgnore: true */ '../static_dependencies/node-fetch/index.js'); });
787
809
  if (this.agent === undefined) {
788
810
  this.agent = this.httpsAgent;
789
811
  }
790
- this.AbortError = module.AbortError;
791
- this.fetchImplementation = module.default;
792
- this.FetchError = module.FetchError;
812
+ try {
813
+ const module = await Promise.resolve().then(function () { return require(/* webpackIgnore: true */ '../static_dependencies/node-fetch/index.js'); });
814
+ this.AbortError = module.AbortError;
815
+ this.fetchImplementation = module.default;
816
+ this.FetchError = module.FetchError;
817
+ }
818
+ catch (e) {
819
+ // some users having issues with dynamic imports (https://github.com/ccxt/ccxt/pull/20687)
820
+ // so let them to fallback to node's native fetch
821
+ if (typeof fetch === 'function') {
822
+ this.fetchImplementation = fetch;
823
+ // as it's browser-compatible implementation ( https://nodejs.org/dist/latest-v20.x/docs/api/globals.html#fetch )
824
+ // it throws same error types
825
+ this.AbortError = DOMException;
826
+ this.FetchError = TypeError;
827
+ }
828
+ else {
829
+ throw new Error('Seems, "fetch" function is not available in your node-js version, please use latest node-js version');
830
+ }
831
+ }
793
832
  }
794
833
  else {
795
834
  this.fetchImplementation = self.fetch;
@@ -982,7 +1021,10 @@ class Exchange {
982
1021
  }
983
1022
  spawn(method, ...args) {
984
1023
  const future = Future.Future();
985
- method.apply(this, args).then(future.resolve).catch(future.reject);
1024
+ // using setTimeout 0 to force the execution to run after the future is returned
1025
+ setTimeout(() => {
1026
+ method.apply(this, args).then(future.resolve).catch(future.reject);
1027
+ }, 0);
986
1028
  return future;
987
1029
  }
988
1030
  delay(timeout, method, ...args) {
@@ -1413,11 +1455,11 @@ class Exchange {
1413
1455
  let httpsProxy = undefined;
1414
1456
  let socksProxy = undefined;
1415
1457
  // httpProxy
1416
- if (this.httpProxy !== undefined) {
1458
+ if (this.valueIsDefined(this.httpProxy)) {
1417
1459
  usedProxies.push('httpProxy');
1418
1460
  httpProxy = this.httpProxy;
1419
1461
  }
1420
- if (this.http_proxy !== undefined) {
1462
+ if (this.valueIsDefined(this.http_proxy)) {
1421
1463
  usedProxies.push('http_proxy');
1422
1464
  httpProxy = this.http_proxy;
1423
1465
  }
@@ -1430,11 +1472,11 @@ class Exchange {
1430
1472
  httpProxy = this.http_proxy_callback(url, method, headers, body);
1431
1473
  }
1432
1474
  // httpsProxy
1433
- if (this.httpsProxy !== undefined) {
1475
+ if (this.valueIsDefined(this.httpsProxy)) {
1434
1476
  usedProxies.push('httpsProxy');
1435
1477
  httpsProxy = this.httpsProxy;
1436
1478
  }
1437
- if (this.https_proxy !== undefined) {
1479
+ if (this.valueIsDefined(this.https_proxy)) {
1438
1480
  usedProxies.push('https_proxy');
1439
1481
  httpsProxy = this.https_proxy;
1440
1482
  }
@@ -1447,11 +1489,11 @@ class Exchange {
1447
1489
  httpsProxy = this.https_proxy_callback(url, method, headers, body);
1448
1490
  }
1449
1491
  // socksProxy
1450
- if (this.socksProxy !== undefined) {
1492
+ if (this.valueIsDefined(this.socksProxy)) {
1451
1493
  usedProxies.push('socksProxy');
1452
1494
  socksProxy = this.socksProxy;
1453
1495
  }
1454
- if (this.socks_proxy !== undefined) {
1496
+ if (this.valueIsDefined(this.socks_proxy)) {
1455
1497
  usedProxies.push('socks_proxy');
1456
1498
  socksProxy = this.socks_proxy;
1457
1499
  }
@@ -1477,29 +1519,29 @@ class Exchange {
1477
1519
  let wssProxy = undefined;
1478
1520
  let wsSocksProxy = undefined;
1479
1521
  // ws proxy
1480
- if (this.wsProxy !== undefined) {
1522
+ if (this.valueIsDefined(this.wsProxy)) {
1481
1523
  usedProxies.push('wsProxy');
1482
1524
  wsProxy = this.wsProxy;
1483
1525
  }
1484
- if (this.ws_proxy !== undefined) {
1526
+ if (this.valueIsDefined(this.ws_proxy)) {
1485
1527
  usedProxies.push('ws_proxy');
1486
1528
  wsProxy = this.ws_proxy;
1487
1529
  }
1488
1530
  // wss proxy
1489
- if (this.wssProxy !== undefined) {
1531
+ if (this.valueIsDefined(this.wssProxy)) {
1490
1532
  usedProxies.push('wssProxy');
1491
1533
  wssProxy = this.wssProxy;
1492
1534
  }
1493
- if (this.wss_proxy !== undefined) {
1535
+ if (this.valueIsDefined(this.wss_proxy)) {
1494
1536
  usedProxies.push('wss_proxy');
1495
1537
  wssProxy = this.wss_proxy;
1496
1538
  }
1497
1539
  // ws socks proxy
1498
- if (this.wsSocksProxy !== undefined) {
1540
+ if (this.valueIsDefined(this.wsSocksProxy)) {
1499
1541
  usedProxies.push('wsSocksProxy');
1500
1542
  wsSocksProxy = this.wsSocksProxy;
1501
1543
  }
1502
- if (this.ws_socks_proxy !== undefined) {
1544
+ if (this.valueIsDefined(this.ws_socks_proxy)) {
1503
1545
  usedProxies.push('ws_socks_proxy');
1504
1546
  wsSocksProxy = this.ws_socks_proxy;
1505
1547
  }
@@ -3742,6 +3784,60 @@ class Exchange {
3742
3784
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
3743
3785
  throw new errors.NotSupported(this.id + ' createOrder() is not supported yet');
3744
3786
  }
3787
+ async createTrailingAmountOrder(symbol, type, side, amount, price = undefined, trailingAmount = undefined, trailingTriggerPrice = undefined, params = {}) {
3788
+ /**
3789
+ * @method
3790
+ * @name createTrailingAmountOrder
3791
+ * @description create a trailing order by providing the symbol, type, side, amount, price and trailingAmount
3792
+ * @param {string} symbol unified symbol of the market to create an order in
3793
+ * @param {string} type 'market' or 'limit'
3794
+ * @param {string} side 'buy' or 'sell'
3795
+ * @param {float} amount how much you want to trade in units of the base currency, or number of contracts
3796
+ * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders
3797
+ * @param {float} trailingAmount the quote amount to trail away from the current market price
3798
+ * @param {float} [trailingTriggerPrice] the price to activate a trailing order, default uses the price argument
3799
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3800
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3801
+ */
3802
+ if (trailingAmount === undefined) {
3803
+ throw new errors.ArgumentsRequired(this.id + ' createTrailingAmountOrder() requires a trailingAmount argument');
3804
+ }
3805
+ params['trailingAmount'] = trailingAmount;
3806
+ if (trailingTriggerPrice !== undefined) {
3807
+ params['trailingTriggerPrice'] = trailingTriggerPrice;
3808
+ }
3809
+ if (this.has['createTrailingAmountOrder']) {
3810
+ return await this.createOrder(symbol, type, side, amount, price, params);
3811
+ }
3812
+ throw new errors.NotSupported(this.id + ' createTrailingAmountOrder() is not supported yet');
3813
+ }
3814
+ async createTrailingPercentOrder(symbol, type, side, amount, price = undefined, trailingPercent = undefined, trailingTriggerPrice = undefined, params = {}) {
3815
+ /**
3816
+ * @method
3817
+ * @name createTrailingPercentOrder
3818
+ * @description create a trailing order by providing the symbol, type, side, amount, price and trailingPercent
3819
+ * @param {string} symbol unified symbol of the market to create an order in
3820
+ * @param {string} type 'market' or 'limit'
3821
+ * @param {string} side 'buy' or 'sell'
3822
+ * @param {float} amount how much you want to trade in units of the base currency, or number of contracts
3823
+ * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders
3824
+ * @param {float} trailingPercent the percent to trail away from the current market price
3825
+ * @param {float} [trailingTriggerPrice] the price to activate a trailing order, default uses the price argument
3826
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3827
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3828
+ */
3829
+ if (trailingPercent === undefined) {
3830
+ throw new errors.ArgumentsRequired(this.id + ' createTrailingPercentOrder() requires a trailingPercent argument');
3831
+ }
3832
+ params['trailingPercent'] = trailingPercent;
3833
+ if (trailingTriggerPrice !== undefined) {
3834
+ params['trailingTriggerPrice'] = trailingTriggerPrice;
3835
+ }
3836
+ if (this.has['createTrailingPercentOrder']) {
3837
+ return await this.createOrder(symbol, type, side, amount, price, params);
3838
+ }
3839
+ throw new errors.NotSupported(this.id + ' createTrailingPercentOrder() is not supported yet');
3840
+ }
3745
3841
  async createMarketOrderWithCost(symbol, side, cost, params = {}) {
3746
3842
  /**
3747
3843
  * @method
@@ -3783,11 +3879,154 @@ class Exchange {
3783
3879
  * @param {object} [params] extra parameters specific to the exchange API endpoint
3784
3880
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3785
3881
  */
3786
- if (this.options['createMarketSellOrderRequiresPrice'] || this.options['createMarketSellOrderWithCost']) {
3882
+ if (this.options['createMarketSellOrderRequiresPrice'] || this.has['createMarketSellOrderWithCost']) {
3787
3883
  return await this.createOrder(symbol, 'market', 'sell', cost, 1, params);
3788
3884
  }
3789
3885
  throw new errors.NotSupported(this.id + ' createMarketSellOrderWithCost() is not supported yet');
3790
3886
  }
3887
+ async createTriggerOrder(symbol, type, side, amount, price = undefined, triggerPrice = undefined, params = {}) {
3888
+ /**
3889
+ * @method
3890
+ * @name createTriggerOrder
3891
+ * @description create a trigger stop order (type 1)
3892
+ * @param {string} symbol unified symbol of the market to create an order in
3893
+ * @param {string} type 'market' or 'limit'
3894
+ * @param {string} side 'buy' or 'sell'
3895
+ * @param {float} amount how much you want to trade in units of the base currency or the number of contracts
3896
+ * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders
3897
+ * @param {float} triggerPrice the price to trigger the stop order, in units of the quote currency
3898
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3899
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3900
+ */
3901
+ if (triggerPrice === undefined) {
3902
+ throw new errors.ArgumentsRequired(this.id + ' createTriggerOrder() requires a triggerPrice argument');
3903
+ }
3904
+ params['triggerPrice'] = triggerPrice;
3905
+ if (this.has['createTriggerOrder']) {
3906
+ return await this.createOrder(symbol, type, side, amount, price, params);
3907
+ }
3908
+ throw new errors.NotSupported(this.id + ' createTriggerOrder() is not supported yet');
3909
+ }
3910
+ async createStopLossOrder(symbol, type, side, amount, price = undefined, stopLossPrice = undefined, params = {}) {
3911
+ /**
3912
+ * @method
3913
+ * @name createStopLossOrder
3914
+ * @description create a trigger stop loss order (type 2)
3915
+ * @param {string} symbol unified symbol of the market to create an order in
3916
+ * @param {string} type 'market' or 'limit'
3917
+ * @param {string} side 'buy' or 'sell'
3918
+ * @param {float} amount how much you want to trade in units of the base currency or the number of contracts
3919
+ * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders
3920
+ * @param {float} stopLossPrice the price to trigger the stop loss order, in units of the quote currency
3921
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3922
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3923
+ */
3924
+ if (stopLossPrice === undefined) {
3925
+ throw new errors.ArgumentsRequired(this.id + ' createStopLossOrder() requires a stopLossPrice argument');
3926
+ }
3927
+ params['stopLossPrice'] = stopLossPrice;
3928
+ if (this.has['createStopLossOrder']) {
3929
+ return await this.createOrder(symbol, type, side, amount, price, params);
3930
+ }
3931
+ throw new errors.NotSupported(this.id + ' createStopLossOrder() is not supported yet');
3932
+ }
3933
+ async createTakeProfitOrder(symbol, type, side, amount, price = undefined, takeProfitPrice = undefined, params = {}) {
3934
+ /**
3935
+ * @method
3936
+ * @name createTakeProfitOrder
3937
+ * @description create a trigger take profit order (type 2)
3938
+ * @param {string} symbol unified symbol of the market to create an order in
3939
+ * @param {string} type 'market' or 'limit'
3940
+ * @param {string} side 'buy' or 'sell'
3941
+ * @param {float} amount how much you want to trade in units of the base currency or the number of contracts
3942
+ * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders
3943
+ * @param {float} takeProfitPrice the price to trigger the take profit order, in units of the quote currency
3944
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3945
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3946
+ */
3947
+ if (takeProfitPrice === undefined) {
3948
+ throw new errors.ArgumentsRequired(this.id + ' createTakeProfitOrder() requires a takeProfitPrice argument');
3949
+ }
3950
+ params['takeProfitPrice'] = takeProfitPrice;
3951
+ if (this.has['createTakeProfitOrder']) {
3952
+ return await this.createOrder(symbol, type, side, amount, price, params);
3953
+ }
3954
+ throw new errors.NotSupported(this.id + ' createTakeProfitOrder() is not supported yet');
3955
+ }
3956
+ async createOrderWithTakeProfitAndStopLoss(symbol, type, side, amount, price = undefined, takeProfit = undefined, stopLoss = undefined, params = {}) {
3957
+ /**
3958
+ * @method
3959
+ * @name createOrderWithTakeProfitAndStopLoss
3960
+ * @description create an order with a stop loss or take profit attached (type 3)
3961
+ * @param {string} symbol unified symbol of the market to create an order in
3962
+ * @param {string} type 'market' or 'limit'
3963
+ * @param {string} side 'buy' or 'sell'
3964
+ * @param {float} amount how much you want to trade in units of the base currency or the number of contracts
3965
+ * @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders
3966
+ * @param {float} [takeProfit] the take profit price, in units of the quote currency
3967
+ * @param {float} [stopLoss] the stop loss price, in units of the quote currency
3968
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
3969
+ * @param {string} [params.takeProfitType] *not available on all exchanges* 'limit' or 'market'
3970
+ * @param {string} [params.stopLossType] *not available on all exchanges* 'limit' or 'market'
3971
+ * @param {string} [params.takeProfitPriceType] *not available on all exchanges* 'last', 'mark' or 'index'
3972
+ * @param {string} [params.stopLossPriceType] *not available on all exchanges* 'last', 'mark' or 'index'
3973
+ * @param {float} [params.takeProfitLimitPrice] *not available on all exchanges* limit price for a limit take profit order
3974
+ * @param {float} [params.stopLossLimitPrice] *not available on all exchanges* stop loss for a limit stop loss order
3975
+ * @param {float} [params.takeProfitAmount] *not available on all exchanges* the amount for a take profit
3976
+ * @param {float} [params.stopLossAmount] *not available on all exchanges* the amount for a stop loss
3977
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
3978
+ */
3979
+ if ((takeProfit === undefined) && (stopLoss === undefined)) {
3980
+ throw new errors.ArgumentsRequired(this.id + ' createOrderWithTakeProfitAndStopLoss() requires either a takeProfit or stopLoss argument');
3981
+ }
3982
+ if (takeProfit !== undefined) {
3983
+ params['takeProfit'] = {
3984
+ 'triggerPrice': takeProfit,
3985
+ };
3986
+ }
3987
+ if (stopLoss !== undefined) {
3988
+ params['stopLoss'] = {
3989
+ 'triggerPrice': stopLoss,
3990
+ };
3991
+ }
3992
+ const takeProfitType = this.safeString(params, 'takeProfitType');
3993
+ const takeProfitPriceType = this.safeString(params, 'takeProfitPriceType');
3994
+ const takeProfitLimitPrice = this.safeString(params, 'takeProfitLimitPrice');
3995
+ const takeProfitAmount = this.safeString(params, 'takeProfitAmount');
3996
+ const stopLossType = this.safeString(params, 'stopLossType');
3997
+ const stopLossPriceType = this.safeString(params, 'stopLossPriceType');
3998
+ const stopLossLimitPrice = this.safeString(params, 'stopLossLimitPrice');
3999
+ const stopLossAmount = this.safeString(params, 'stopLossAmount');
4000
+ if (takeProfitType !== undefined) {
4001
+ params['takeProfit']['type'] = takeProfitType;
4002
+ }
4003
+ if (takeProfitPriceType !== undefined) {
4004
+ params['takeProfit']['priceType'] = takeProfitPriceType;
4005
+ }
4006
+ if (takeProfitLimitPrice !== undefined) {
4007
+ params['takeProfit']['price'] = this.parseToNumeric(takeProfitLimitPrice);
4008
+ }
4009
+ if (takeProfitAmount !== undefined) {
4010
+ params['takeProfit']['amount'] = this.parseToNumeric(takeProfitAmount);
4011
+ }
4012
+ if (stopLossType !== undefined) {
4013
+ params['stopLoss']['type'] = stopLossType;
4014
+ }
4015
+ if (stopLossPriceType !== undefined) {
4016
+ params['stopLoss']['priceType'] = stopLossPriceType;
4017
+ }
4018
+ if (stopLossLimitPrice !== undefined) {
4019
+ params['stopLoss']['price'] = this.parseToNumeric(stopLossLimitPrice);
4020
+ }
4021
+ if (stopLossAmount !== undefined) {
4022
+ params['stopLoss']['amount'] = this.parseToNumeric(stopLossAmount);
4023
+ }
4024
+ params = this.omit(params, ['takeProfitType', 'takeProfitPriceType', 'takeProfitLimitPrice', 'takeProfitAmount', 'stopLossType', 'stopLossPriceType', 'stopLossLimitPrice', 'stopLossAmount']);
4025
+ if (this.has['createOrderWithTakeProfitAndStopLoss']) {
4026
+ return await this.createOrder(symbol, type, side, amount, price, params);
4027
+ }
4028
+ throw new errors.NotSupported(this.id + ' createOrderWithTakeProfitAndStopLoss() is not supported yet');
4029
+ }
3791
4030
  async createOrders(orders, params = {}) {
3792
4031
  throw new errors.NotSupported(this.id + ' createOrders() is not supported yet');
3793
4032
  }
@@ -3902,7 +4141,7 @@ class Exchange {
3902
4141
  throw new errors.NotSupported(this.id + ' fetchFundingHistory() is not supported yet');
3903
4142
  }
3904
4143
  async closePosition(symbol, side = undefined, params = {}) {
3905
- throw new errors.NotSupported(this.id + ' closePositions() is not supported yet');
4144
+ throw new errors.NotSupported(this.id + ' closePosition() is not supported yet');
3906
4145
  }
3907
4146
  async closeAllPositions(params = {}) {
3908
4147
  throw new errors.NotSupported(this.id + ' closeAllPositions() is not supported yet');