ccxt 4.2.10 → 4.2.12

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 (383) hide show
  1. package/README.md +5 -5
  2. package/build.sh +4 -4
  3. package/dist/ccxt.browser.js +695 -282
  4. package/dist/ccxt.browser.min.js +3 -3
  5. package/dist/cjs/_virtual/agent.js +7 -0
  6. package/dist/cjs/_virtual/parse-proxy-response.js +7 -0
  7. package/dist/cjs/_virtual/promisify.js +7 -0
  8. package/dist/cjs/ccxt.js +1 -1
  9. package/dist/cjs/js/ccxt.js +474 -0
  10. package/dist/cjs/js/src/abstract/ace.js +9 -0
  11. package/dist/cjs/js/src/abstract/alpaca.js +9 -0
  12. package/dist/cjs/js/src/abstract/ascendex.js +9 -0
  13. package/dist/cjs/js/src/abstract/bigone.js +9 -0
  14. package/dist/cjs/js/src/abstract/binance.js +9 -0
  15. package/dist/cjs/js/src/abstract/bingx.js +9 -0
  16. package/dist/cjs/js/src/abstract/bit2c.js +9 -0
  17. package/dist/cjs/js/src/abstract/bitbank.js +9 -0
  18. package/dist/cjs/js/src/abstract/bitbns.js +9 -0
  19. package/dist/cjs/js/src/abstract/bitfinex.js +9 -0
  20. package/dist/cjs/js/src/abstract/bitfinex2.js +9 -0
  21. package/dist/cjs/js/src/abstract/bitflyer.js +9 -0
  22. package/dist/cjs/js/src/abstract/bitforex.js +9 -0
  23. package/dist/cjs/js/src/abstract/bitget.js +9 -0
  24. package/dist/cjs/js/src/abstract/bithumb.js +9 -0
  25. package/dist/cjs/js/src/abstract/bitmart.js +9 -0
  26. package/dist/cjs/js/src/abstract/bitmex.js +9 -0
  27. package/dist/cjs/js/src/abstract/bitopro.js +9 -0
  28. package/dist/cjs/js/src/abstract/bitpanda.js +9 -0
  29. package/dist/cjs/js/src/abstract/bitrue.js +9 -0
  30. package/dist/cjs/js/src/abstract/bitso.js +9 -0
  31. package/dist/cjs/js/src/abstract/bitstamp.js +9 -0
  32. package/dist/cjs/js/src/abstract/bitteam.js +9 -0
  33. package/dist/cjs/js/src/abstract/bitvavo.js +9 -0
  34. package/dist/cjs/js/src/abstract/bl3p.js +9 -0
  35. package/dist/cjs/js/src/abstract/blockchaincom.js +9 -0
  36. package/dist/cjs/js/src/abstract/btcalpha.js +9 -0
  37. package/dist/cjs/js/src/abstract/btcbox.js +9 -0
  38. package/dist/cjs/js/src/abstract/btcmarkets.js +9 -0
  39. package/dist/cjs/js/src/abstract/btcturk.js +9 -0
  40. package/dist/cjs/js/src/abstract/bybit.js +9 -0
  41. package/dist/cjs/js/src/abstract/cex.js +9 -0
  42. package/dist/cjs/js/src/abstract/coinbase.js +9 -0
  43. package/dist/cjs/js/src/abstract/coinbasepro.js +9 -0
  44. package/dist/cjs/js/src/abstract/coincheck.js +9 -0
  45. package/dist/cjs/js/src/abstract/coinex.js +9 -0
  46. package/dist/cjs/js/src/abstract/coinlist.js +9 -0
  47. package/dist/cjs/js/src/abstract/coinmate.js +9 -0
  48. package/dist/cjs/js/src/abstract/coinone.js +9 -0
  49. package/dist/cjs/js/src/abstract/coinsph.js +9 -0
  50. package/dist/cjs/js/src/abstract/coinspot.js +9 -0
  51. package/dist/cjs/js/src/abstract/cryptocom.js +9 -0
  52. package/dist/cjs/js/src/abstract/currencycom.js +9 -0
  53. package/dist/cjs/js/src/abstract/delta.js +9 -0
  54. package/dist/cjs/js/src/abstract/deribit.js +9 -0
  55. package/dist/cjs/js/src/abstract/digifinex.js +9 -0
  56. package/dist/cjs/js/src/abstract/exmo.js +9 -0
  57. package/dist/cjs/js/src/abstract/gate.js +9 -0
  58. package/dist/cjs/js/src/abstract/gemini.js +9 -0
  59. package/dist/cjs/js/src/abstract/hitbtc.js +9 -0
  60. package/dist/cjs/js/src/abstract/hollaex.js +9 -0
  61. package/dist/cjs/js/src/abstract/htx.js +9 -0
  62. package/dist/cjs/js/src/abstract/huobijp.js +9 -0
  63. package/dist/cjs/js/src/abstract/idex.js +9 -0
  64. package/dist/cjs/js/src/abstract/independentreserve.js +9 -0
  65. package/dist/cjs/js/src/abstract/indodax.js +9 -0
  66. package/dist/cjs/js/src/abstract/kraken.js +9 -0
  67. package/dist/cjs/js/src/abstract/krakenfutures.js +9 -0
  68. package/dist/cjs/js/src/abstract/kucoin.js +9 -0
  69. package/dist/cjs/js/src/abstract/kucoinfutures.js +9 -0
  70. package/dist/cjs/js/src/abstract/kuna.js +9 -0
  71. package/dist/cjs/js/src/abstract/latoken.js +9 -0
  72. package/dist/cjs/js/src/abstract/lbank.js +9 -0
  73. package/dist/cjs/js/src/abstract/luno.js +9 -0
  74. package/dist/cjs/js/src/abstract/lykke.js +9 -0
  75. package/dist/cjs/js/src/abstract/mercado.js +9 -0
  76. package/dist/cjs/js/src/abstract/mexc.js +9 -0
  77. package/dist/cjs/js/src/abstract/ndax.js +9 -0
  78. package/dist/cjs/js/src/abstract/novadax.js +9 -0
  79. package/dist/cjs/js/src/abstract/oceanex.js +9 -0
  80. package/dist/cjs/js/src/abstract/okcoin.js +9 -0
  81. package/dist/cjs/js/src/abstract/okx.js +9 -0
  82. package/dist/cjs/js/src/abstract/p2b.js +9 -0
  83. package/dist/cjs/js/src/abstract/paymium.js +9 -0
  84. package/dist/cjs/js/src/abstract/phemex.js +9 -0
  85. package/dist/cjs/js/src/abstract/poloniex.js +9 -0
  86. package/dist/cjs/js/src/abstract/poloniexfutures.js +9 -0
  87. package/dist/cjs/js/src/abstract/probit.js +9 -0
  88. package/dist/cjs/js/src/abstract/timex.js +9 -0
  89. package/dist/cjs/js/src/abstract/tokocrypto.js +9 -0
  90. package/dist/cjs/js/src/abstract/upbit.js +9 -0
  91. package/dist/cjs/js/src/abstract/wavesexchange.js +9 -0
  92. package/dist/cjs/js/src/abstract/wazirx.js +9 -0
  93. package/dist/cjs/js/src/abstract/whitebit.js +9 -0
  94. package/dist/cjs/js/src/abstract/woo.js +9 -0
  95. package/dist/cjs/js/src/abstract/yobit.js +9 -0
  96. package/dist/cjs/js/src/abstract/zaif.js +9 -0
  97. package/dist/cjs/js/src/abstract/zonda.js +9 -0
  98. package/dist/cjs/js/src/ace.js +1058 -0
  99. package/dist/cjs/js/src/alpaca.js +1125 -0
  100. package/dist/cjs/js/src/ascendex.js +3360 -0
  101. package/dist/cjs/js/src/base/Exchange.js +5110 -0
  102. package/dist/cjs/js/src/base/Precise.js +263 -0
  103. package/dist/cjs/js/src/base/errors.js +299 -0
  104. package/dist/cjs/js/src/base/functions/crypto.js +78 -0
  105. package/dist/cjs/js/src/base/functions/encode.js +44 -0
  106. package/dist/cjs/js/src/base/functions/generic.js +193 -0
  107. package/dist/cjs/js/src/base/functions/misc.js +96 -0
  108. package/dist/cjs/js/src/base/functions/number.js +297 -0
  109. package/dist/cjs/js/src/base/functions/platform.js +28 -0
  110. package/dist/cjs/js/src/base/functions/rsa.js +34 -0
  111. package/dist/cjs/js/src/base/functions/string.js +48 -0
  112. package/dist/cjs/js/src/base/functions/throttle.js +66 -0
  113. package/dist/cjs/js/src/base/functions/time.js +187 -0
  114. package/dist/cjs/js/src/base/functions/totp.js +24 -0
  115. package/dist/cjs/js/src/base/functions/type.js +162 -0
  116. package/dist/cjs/js/src/base/functions.js +157 -0
  117. package/dist/cjs/js/src/base/ws/Cache.js +254 -0
  118. package/dist/cjs/js/src/base/ws/Client.js +299 -0
  119. package/dist/cjs/js/src/base/ws/Future.js +34 -0
  120. package/dist/cjs/js/src/base/ws/OrderBook.js +107 -0
  121. package/dist/cjs/js/src/base/ws/OrderBookSide.js +281 -0
  122. package/dist/cjs/js/src/base/ws/WsClient.js +69 -0
  123. package/dist/cjs/js/src/bequant.js +33 -0
  124. package/dist/cjs/js/src/bigone.js +2142 -0
  125. package/dist/cjs/js/src/binance.js +9729 -0
  126. package/dist/cjs/js/src/binancecoinm.js +45 -0
  127. package/dist/cjs/js/src/binanceus.js +84 -0
  128. package/dist/cjs/js/src/binanceusdm.js +58 -0
  129. package/dist/cjs/js/src/bingx.js +3737 -0
  130. package/dist/cjs/js/src/bit2c.js +916 -0
  131. package/dist/cjs/js/src/bitbank.js +1000 -0
  132. package/dist/cjs/js/src/bitbay.js +17 -0
  133. package/dist/cjs/js/src/bitbns.js +1220 -0
  134. package/dist/cjs/js/src/bitcoincom.js +17 -0
  135. package/dist/cjs/js/src/bitfinex.js +1670 -0
  136. package/dist/cjs/js/src/bitfinex2.js +2990 -0
  137. package/dist/cjs/js/src/bitflyer.js +1045 -0
  138. package/dist/cjs/js/src/bitforex.js +852 -0
  139. package/dist/cjs/js/src/bitget.js +8284 -0
  140. package/dist/cjs/js/src/bithumb.js +1090 -0
  141. package/dist/cjs/js/src/bitmart.js +4454 -0
  142. package/dist/cjs/js/src/bitmex.js +2884 -0
  143. package/dist/cjs/js/src/bitopro.js +1724 -0
  144. package/dist/cjs/js/src/bitpanda.js +2002 -0
  145. package/dist/cjs/js/src/bitrue.js +3253 -0
  146. package/dist/cjs/js/src/bitso.js +1753 -0
  147. package/dist/cjs/js/src/bitstamp.js +2188 -0
  148. package/dist/cjs/js/src/bitteam.js +2309 -0
  149. package/dist/cjs/js/src/bitvavo.js +1968 -0
  150. package/dist/cjs/js/src/bl3p.js +447 -0
  151. package/dist/cjs/js/src/blockchaincom.js +1160 -0
  152. package/dist/cjs/js/src/btcalpha.js +929 -0
  153. package/dist/cjs/js/src/btcbox.js +565 -0
  154. package/dist/cjs/js/src/btcmarkets.js +1237 -0
  155. package/dist/cjs/js/src/btcturk.js +929 -0
  156. package/dist/cjs/js/src/bybit.js +7646 -0
  157. package/dist/cjs/js/src/cex.js +1693 -0
  158. package/dist/cjs/js/src/coinbase.js +3274 -0
  159. package/dist/cjs/js/src/coinbasepro.js +1866 -0
  160. package/dist/cjs/js/src/coincheck.js +843 -0
  161. package/dist/cjs/js/src/coinex.js +5414 -0
  162. package/dist/cjs/js/src/coinlist.js +2329 -0
  163. package/dist/cjs/js/src/coinmate.js +989 -0
  164. package/dist/cjs/js/src/coinone.js +1185 -0
  165. package/dist/cjs/js/src/coinsph.js +1933 -0
  166. package/dist/cjs/js/src/coinspot.js +548 -0
  167. package/dist/cjs/js/src/cryptocom.js +3007 -0
  168. package/dist/cjs/js/src/currencycom.js +2015 -0
  169. package/dist/cjs/js/src/delta.js +3256 -0
  170. package/dist/cjs/js/src/deribit.js +3306 -0
  171. package/dist/cjs/js/src/digifinex.js +4307 -0
  172. package/dist/cjs/js/src/exmo.js +2645 -0
  173. package/dist/cjs/js/src/fmfwio.js +34 -0
  174. package/dist/cjs/js/src/gate.js +7054 -0
  175. package/dist/cjs/js/src/gateio.js +16 -0
  176. package/dist/cjs/js/src/gemini.js +1801 -0
  177. package/dist/cjs/js/src/hitbtc.js +3660 -0
  178. package/dist/cjs/js/src/hitbtc3.js +19 -0
  179. package/dist/cjs/js/src/hollaex.js +1882 -0
  180. package/dist/cjs/js/src/htx.js +9024 -0
  181. package/dist/cjs/js/src/huobi.js +16 -0
  182. package/dist/cjs/js/src/huobijp.js +1918 -0
  183. package/dist/cjs/js/src/idex.js +1770 -0
  184. package/dist/cjs/js/src/independentreserve.js +759 -0
  185. package/dist/cjs/js/src/indodax.js +1069 -0
  186. package/dist/cjs/js/src/kraken.js +2861 -0
  187. package/dist/cjs/js/src/krakenfutures.js +2407 -0
  188. package/dist/cjs/js/src/kucoin.js +4489 -0
  189. package/dist/cjs/js/src/kucoinfutures.js +2475 -0
  190. package/dist/cjs/js/src/kuna.js +1949 -0
  191. package/dist/cjs/js/src/latoken.js +1729 -0
  192. package/dist/cjs/js/src/lbank.js +2825 -0
  193. package/dist/cjs/js/src/luno.js +1044 -0
  194. package/dist/cjs/js/src/lykke.js +1303 -0
  195. package/dist/cjs/js/src/mercado.js +897 -0
  196. package/dist/cjs/js/src/mexc.js +5407 -0
  197. package/dist/cjs/js/src/ndax.js +2450 -0
  198. package/dist/cjs/js/src/novadax.js +1556 -0
  199. package/dist/cjs/js/src/oceanex.js +964 -0
  200. package/dist/cjs/js/src/okcoin.js +3115 -0
  201. package/dist/cjs/js/src/okx.js +7329 -0
  202. package/dist/cjs/js/src/p2b.js +1243 -0
  203. package/dist/cjs/js/src/paymium.js +597 -0
  204. package/dist/cjs/js/src/phemex.js +4715 -0
  205. package/dist/cjs/js/src/poloniex.js +2356 -0
  206. package/dist/cjs/js/src/poloniexfutures.js +1794 -0
  207. package/dist/cjs/js/src/pro/alpaca.js +714 -0
  208. package/dist/cjs/js/src/pro/ascendex.js +957 -0
  209. package/dist/cjs/js/src/pro/bequant.js +33 -0
  210. package/dist/cjs/js/src/pro/binance.js +2796 -0
  211. package/dist/cjs/js/src/pro/binancecoinm.js +23 -0
  212. package/dist/cjs/js/src/pro/binanceus.js +51 -0
  213. package/dist/cjs/js/src/pro/binanceusdm.js +32 -0
  214. package/dist/cjs/js/src/pro/bingx.js +944 -0
  215. package/dist/cjs/js/src/pro/bitcoincom.js +29 -0
  216. package/dist/cjs/js/src/pro/bitfinex.js +672 -0
  217. package/dist/cjs/js/src/pro/bitfinex2.js +1159 -0
  218. package/dist/cjs/js/src/pro/bitget.js +1733 -0
  219. package/dist/cjs/js/src/pro/bitmart.js +1486 -0
  220. package/dist/cjs/js/src/pro/bitmex.js +1576 -0
  221. package/dist/cjs/js/src/pro/bitopro.js +327 -0
  222. package/dist/cjs/js/src/pro/bitpanda.js +1341 -0
  223. package/dist/cjs/js/src/pro/bitrue.js +462 -0
  224. package/dist/cjs/js/src/pro/bitstamp.js +547 -0
  225. package/dist/cjs/js/src/pro/bitvavo.js +704 -0
  226. package/dist/cjs/js/src/pro/blockchaincom.js +794 -0
  227. package/dist/cjs/js/src/pro/bybit.js +1843 -0
  228. package/dist/cjs/js/src/pro/cex.js +1510 -0
  229. package/dist/cjs/js/src/pro/coinbase.js +561 -0
  230. package/dist/cjs/js/src/pro/coinbasepro.js +968 -0
  231. package/dist/cjs/js/src/pro/coinex.js +1095 -0
  232. package/dist/cjs/js/src/pro/cryptocom.js +1020 -0
  233. package/dist/cjs/js/src/pro/currencycom.js +563 -0
  234. package/dist/cjs/js/src/pro/deribit.js +825 -0
  235. package/dist/cjs/js/src/pro/exmo.js +658 -0
  236. package/dist/cjs/js/src/pro/gate.js +1316 -0
  237. package/dist/cjs/js/src/pro/gateio.js +16 -0
  238. package/dist/cjs/js/src/pro/gemini.js +649 -0
  239. package/dist/cjs/js/src/pro/hitbtc.js +1293 -0
  240. package/dist/cjs/js/src/pro/hollaex.js +597 -0
  241. package/dist/cjs/js/src/pro/htx.js +2383 -0
  242. package/dist/cjs/js/src/pro/huobi.js +16 -0
  243. package/dist/cjs/js/src/pro/huobijp.js +606 -0
  244. package/dist/cjs/js/src/pro/idex.js +714 -0
  245. package/dist/cjs/js/src/pro/independentreserve.js +280 -0
  246. package/dist/cjs/js/src/pro/kraken.js +1364 -0
  247. package/dist/cjs/js/src/pro/krakenfutures.js +1500 -0
  248. package/dist/cjs/js/src/pro/kucoin.js +1052 -0
  249. package/dist/cjs/js/src/pro/kucoinfutures.js +981 -0
  250. package/dist/cjs/js/src/pro/luno.js +322 -0
  251. package/dist/cjs/js/src/pro/mexc.js +1170 -0
  252. package/dist/cjs/js/src/pro/ndax.js +545 -0
  253. package/dist/cjs/js/src/pro/okcoin.js +760 -0
  254. package/dist/cjs/js/src/pro/okx.js +1558 -0
  255. package/dist/cjs/js/src/pro/phemex.js +1511 -0
  256. package/dist/cjs/js/src/pro/poloniex.js +1253 -0
  257. package/dist/cjs/js/src/pro/poloniexfutures.js +1014 -0
  258. package/dist/cjs/js/src/pro/probit.js +586 -0
  259. package/dist/cjs/js/src/pro/upbit.js +234 -0
  260. package/dist/cjs/js/src/pro/wazirx.js +776 -0
  261. package/dist/cjs/js/src/pro/whitebit.js +927 -0
  262. package/dist/cjs/js/src/pro/woo.js +769 -0
  263. package/dist/cjs/js/src/probit.js +1865 -0
  264. package/dist/cjs/js/src/static_dependencies/fflake/browser.js +401 -0
  265. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +195 -0
  266. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +308 -0
  267. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +554 -0
  268. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  269. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  270. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  271. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +16 -0
  272. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1760 -0
  273. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +52 -0
  274. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +81 -0
  275. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +376 -0
  276. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +70 -0
  277. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1580 -0
  278. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +74 -0
  279. package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +24 -0
  280. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +158 -0
  281. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +429 -0
  282. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +176 -0
  283. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +324 -0
  284. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +163 -0
  285. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +245 -0
  286. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +1018 -0
  287. package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +383 -0
  288. package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +258 -0
  289. package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +53 -0
  290. package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +120 -0
  291. package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +69 -0
  292. package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +7 -0
  293. package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +83 -0
  294. package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +240 -0
  295. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +91 -0
  296. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +130 -0
  297. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +214 -0
  298. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +239 -0
  299. package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +93 -0
  300. package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +354 -0
  301. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +16 -0
  302. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +20 -0
  303. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +30 -0
  304. package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +239 -0
  305. package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +372 -0
  306. package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +273 -0
  307. package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +139 -0
  308. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +14 -0
  309. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +16 -0
  310. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +81 -0
  311. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +292 -0
  312. package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +103 -0
  313. package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +140 -0
  314. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +175 -0
  315. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  316. package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +7 -0
  317. package/dist/cjs/js/src/static_dependencies/scure-base/index.js +383 -0
  318. package/dist/cjs/js/src/timex.js +1562 -0
  319. package/dist/cjs/js/src/tokocrypto.js +2542 -0
  320. package/dist/cjs/js/src/upbit.js +1844 -0
  321. package/dist/cjs/js/src/wavesexchange.js +2607 -0
  322. package/dist/cjs/js/src/wazirx.js +953 -0
  323. package/dist/cjs/js/src/whitebit.js +2309 -0
  324. package/dist/cjs/js/src/woo.js +2715 -0
  325. package/dist/cjs/js/src/yobit.js +1314 -0
  326. package/dist/cjs/js/src/zaif.js +736 -0
  327. package/dist/cjs/js/src/zonda.js +1883 -0
  328. package/dist/cjs/src/base/Exchange.js +11 -0
  329. package/dist/cjs/src/bingx.js +0 -10
  330. package/dist/cjs/src/bitget.js +14 -5
  331. package/dist/cjs/src/bybit.js +1 -1
  332. package/dist/cjs/src/kucoin.js +29 -5
  333. package/js/ccxt.d.ts +1 -1
  334. package/js/ccxt.js +1 -1
  335. package/js/src/abstract/bigone.d.ts +18 -0
  336. package/js/src/abstract/binance.d.ts +2 -0
  337. package/js/src/abstract/binancecoinm.d.ts +2 -0
  338. package/js/src/abstract/binanceus.d.ts +2 -0
  339. package/js/src/abstract/binanceusdm.d.ts +2 -0
  340. package/js/src/abstract/bybit.d.ts +1 -0
  341. package/js/src/abstract/gate.d.ts +11 -0
  342. package/js/src/abstract/gateio.d.ts +11 -0
  343. package/js/src/alpaca.js +18 -18
  344. package/js/src/base/Exchange.d.ts +6 -1
  345. package/js/src/base/Exchange.js +112 -12
  346. package/js/src/bigone.d.ts +1 -2
  347. package/js/src/bigone.js +340 -145
  348. package/js/src/binance.js +15 -8
  349. package/js/src/bingx.d.ts +0 -1
  350. package/js/src/bingx.js +9 -12
  351. package/js/src/bitfinex.d.ts +2 -2
  352. package/js/src/bitfinex.js +2 -3
  353. package/js/src/bitget.js +35 -13
  354. package/js/src/bitmart.d.ts +2 -2
  355. package/js/src/bitmart.js +3 -3
  356. package/js/src/bitmex.js +1 -0
  357. package/js/src/bybit.js +3 -1
  358. package/js/src/coinlist.js +2 -3
  359. package/js/src/coinsph.js +2 -3
  360. package/js/src/deribit.js +1 -0
  361. package/js/src/gate.d.ts +4 -4
  362. package/js/src/gate.js +22 -3
  363. package/js/src/hitbtc.d.ts +4 -4
  364. package/js/src/hitbtc.js +2 -3
  365. package/js/src/htx.js +4 -7
  366. package/js/src/huobijp.js +2 -3
  367. package/js/src/kraken.js +1 -0
  368. package/js/src/kucoin.js +29 -5
  369. package/js/src/mexc.js +2 -1
  370. package/js/src/okx.js +13 -3
  371. package/js/src/pro/binance.d.ts +2 -23
  372. package/js/src/pro/binance.js +58 -22
  373. package/js/src/pro/coinbase.d.ts +2 -2
  374. package/js/src/pro/coinbase.js +4 -1
  375. package/js/src/pro/coinbasepro.d.ts +2 -2
  376. package/js/src/pro/hitbtc.d.ts +2 -2
  377. package/js/src/pro/poloniex.d.ts +2 -2
  378. package/js/src/upbit.d.ts +3 -101
  379. package/js/src/upbit.js +12 -12
  380. package/js/src/woo.js +2 -0
  381. package/package.json +11 -11
  382. package/skip-tests.json +5 -0
  383. package/tests-manager.sh +2 -2
@@ -2522,7 +2522,7 @@ class alpaca extends _abstract_alpaca_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
2522
2522
  'market': 'https://data.sandbox.{hostname}',
2523
2523
  },
2524
2524
  'doc': 'https://alpaca.markets/docs/',
2525
- 'fees': 'https://alpaca.markets/support/what-are-the-fees-associated-with-crypto-trading/',
2525
+ 'fees': 'https://docs.alpaca.markets/docs/crypto-fees',
2526
2526
  },
2527
2527
  'has': {
2528
2528
  'CORS': false,
@@ -2693,28 +2693,28 @@ class alpaca extends _abstract_alpaca_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
2693
2693
  'trading': {
2694
2694
  'tierBased': true,
2695
2695
  'percentage': true,
2696
- 'maker': this.parseNumber('0.003'),
2697
- 'taker': this.parseNumber('0.003'),
2696
+ 'maker': this.parseNumber('0.0015'),
2697
+ 'taker': this.parseNumber('0.0025'),
2698
2698
  'tiers': {
2699
2699
  'taker': [
2700
- [this.parseNumber('0'), this.parseNumber('0.003')],
2701
- [this.parseNumber('500000'), this.parseNumber('0.0028')],
2702
- [this.parseNumber('1000000'), this.parseNumber('0.0025')],
2703
- [this.parseNumber('5000000'), this.parseNumber('0.002')],
2704
- [this.parseNumber('10000000'), this.parseNumber('0.0018')],
2705
- [this.parseNumber('25000000'), this.parseNumber('0.0015')],
2706
- [this.parseNumber('50000000'), this.parseNumber('0.00125')],
2700
+ [this.parseNumber('0'), this.parseNumber('0.0025')],
2701
+ [this.parseNumber('100000'), this.parseNumber('0.0022')],
2702
+ [this.parseNumber('500000'), this.parseNumber('0.0020')],
2703
+ [this.parseNumber('1000000'), this.parseNumber('0.0018')],
2704
+ [this.parseNumber('10000000'), this.parseNumber('0.0015')],
2705
+ [this.parseNumber('25000000'), this.parseNumber('0.0013')],
2706
+ [this.parseNumber('50000000'), this.parseNumber('0.0012')],
2707
2707
  [this.parseNumber('100000000'), this.parseNumber('0.001')],
2708
2708
  ],
2709
2709
  'maker': [
2710
- [this.parseNumber('0'), this.parseNumber('0.003')],
2711
- [this.parseNumber('500000'), this.parseNumber('0.0028')],
2712
- [this.parseNumber('1000000'), this.parseNumber('0.0025')],
2713
- [this.parseNumber('5000000'), this.parseNumber('0.002')],
2714
- [this.parseNumber('10000000'), this.parseNumber('0.0018')],
2715
- [this.parseNumber('25000000'), this.parseNumber('0.0015')],
2716
- [this.parseNumber('50000000'), this.parseNumber('0.00125')],
2717
- [this.parseNumber('100000000'), this.parseNumber('0.001')],
2710
+ [this.parseNumber('0'), this.parseNumber('0.0015')],
2711
+ [this.parseNumber('100000'), this.parseNumber('0.0012')],
2712
+ [this.parseNumber('500000'), this.parseNumber('0.001')],
2713
+ [this.parseNumber('1000000'), this.parseNumber('0.0008')],
2714
+ [this.parseNumber('10000000'), this.parseNumber('0.0005')],
2715
+ [this.parseNumber('25000000'), this.parseNumber('0.0002')],
2716
+ [this.parseNumber('50000000'), this.parseNumber('0.0002')],
2717
+ [this.parseNumber('100000000'), this.parseNumber('0.00')],
2718
2718
  ],
2719
2719
  },
2720
2720
  },
@@ -7357,6 +7357,8 @@ class Exchange {
7357
7357
  'createStopOrder': undefined,
7358
7358
  'createStopLimitOrder': undefined,
7359
7359
  'createStopMarketOrder': undefined,
7360
+ 'createTrailingAmountOrder': undefined,
7361
+ 'createTrailingPercentOrder': undefined,
7360
7362
  'createOrderWs': undefined,
7361
7363
  'editOrderWs': undefined,
7362
7364
  'fetchOpenOrdersWs': undefined,
@@ -7649,10 +7651,28 @@ class Exchange {
7649
7651
  console.log(...args);
7650
7652
  }
7651
7653
  async loadProxyModules() {
7654
+ if (this.proxyModulesLoaded) {
7655
+ return;
7656
+ }
7652
7657
  this.proxyModulesLoaded = true;
7653
- // todo: possible sync alternatives: https://stackoverflow.com/questions/51069002/convert-import-to-synchronous
7654
- this.httpProxyAgentModule = await import(/* webpackIgnore: true */ '../static_dependencies/proxies/http-proxy-agent/index.js');
7655
- this.httpsProxyAgentModule = await import(/* webpackIgnore: true */ '../static_dependencies/proxies/https-proxy-agent/index.js');
7658
+ // we have to handle it with below nested way, because of dynamic
7659
+ // import issues (https://github.com/ccxt/ccxt/pull/20687)
7660
+ try {
7661
+ // todo: possible sync alternatives: https://stackoverflow.com/questions/51069002/convert-import-to-synchronous
7662
+ this.httpProxyAgentModule = await import(/* webpackIgnore: true */ '../static_dependencies/proxies/http-proxy-agent/index.js');
7663
+ this.httpsProxyAgentModule = await import(/* webpackIgnore: true */ '../static_dependencies/proxies/https-proxy-agent/index.js');
7664
+ }
7665
+ catch (e) {
7666
+ // if several users are using those frameworks which cause exceptions,
7667
+ // let them to be able to load modules still, by installing them
7668
+ try {
7669
+ // @ts-ignore
7670
+ this.httpProxyAgentModule = await import(/* webpackIgnore: true */ 'http-proxy-agent');
7671
+ // @ts-ignore
7672
+ this.httpProxyAgentModule = await import(/* webpackIgnore: true */ 'https-proxy-agent');
7673
+ }
7674
+ catch { }
7675
+ }
7656
7676
  if (this.socksProxyAgentModuleChecked === false) {
7657
7677
  this.socksProxyAgentModuleChecked = true;
7658
7678
  try {
@@ -7744,11 +7764,10 @@ class Exchange {
7744
7764
  // proxy agents
7745
7765
  const [httpProxy, httpsProxy, socksProxy] = this.checkProxySettings(url, method, headers, body);
7746
7766
  this.checkConflictingProxies(httpProxy || httpsProxy || socksProxy, proxyUrl);
7767
+ // skip proxies on the browser
7747
7768
  if (isNode) {
7748
- // skip this on the browser
7749
- if (!this.proxyModulesLoaded) {
7750
- 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)
7751
- }
7769
+ // 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)
7770
+ await this.loadProxyModules();
7752
7771
  }
7753
7772
  const chosenAgent = this.setProxyAgents(httpProxy, httpsProxy, socksProxy);
7754
7773
  // user-agent
@@ -7770,13 +7789,29 @@ class Exchange {
7770
7789
  // end of proxies & headers
7771
7790
  if (this.fetchImplementation === undefined) {
7772
7791
  if (isNode) {
7773
- const module = await import(/* webpackIgnore: true */ '../static_dependencies/node-fetch/index.js');
7774
7792
  if (this.agent === undefined) {
7775
7793
  this.agent = this.httpsAgent;
7776
7794
  }
7777
- this.AbortError = module.AbortError;
7778
- this.fetchImplementation = module.default;
7779
- this.FetchError = module.FetchError;
7795
+ try {
7796
+ const module = await import(/* webpackIgnore: true */ '../static_dependencies/node-fetch/index.js');
7797
+ this.AbortError = module.AbortError;
7798
+ this.fetchImplementation = module.default;
7799
+ this.FetchError = module.FetchError;
7800
+ }
7801
+ catch (e) {
7802
+ // some users having issues with dynamic imports (https://github.com/ccxt/ccxt/pull/20687)
7803
+ // so let them to fallback to node's native fetch
7804
+ if (typeof fetch === 'function') {
7805
+ this.fetchImplementation = fetch;
7806
+ // as it's browser-compatible implementation ( https://nodejs.org/dist/latest-v20.x/docs/api/globals.html#fetch )
7807
+ // it throws same error types
7808
+ this.AbortError = DOMException;
7809
+ this.FetchError = TypeError;
7810
+ }
7811
+ else {
7812
+ throw new Error('Seems, "fetch" function is not available in your node-js version, please use latest node-js version');
7813
+ }
7814
+ }
7780
7815
  }
7781
7816
  else {
7782
7817
  this.fetchImplementation = self.fetch;
@@ -8284,6 +8319,17 @@ class Exchange {
8284
8319
  axolotl(payload, hexKey, ed25519) {
8285
8320
  return (0,_functions_crypto_js__WEBPACK_IMPORTED_MODULE_7__/* .axolotl */ .gC)(payload, hexKey, ed25519);
8286
8321
  }
8322
+ fixStringifiedJsonMembers(content) {
8323
+ // used for instance in bingx
8324
+ // when stringified json has members with their values also stringified, like:
8325
+ // '{"code":0, "data":{"order":{"orderId":1742968678528512345,"symbol":"BTC-USDT", "takeProfit":"{\"type\":\"TAKE_PROFIT\",\"stopPrice\":43320.1}","reduceOnly":false}}}'
8326
+ // we can fix with below manipulations
8327
+ // @ts-ignore
8328
+ let modifiedContent = content.replaceAll('\\', '');
8329
+ modifiedContent = modifiedContent.replaceAll('"{', '{');
8330
+ modifiedContent = modifiedContent.replaceAll('}"', '}');
8331
+ return modifiedContent;
8332
+ }
8287
8333
  /* eslint-enable */
8288
8334
  // ------------------------------------------------------------------------
8289
8335
  // ########################################################################
@@ -10720,6 +10766,60 @@ class Exchange {
10720
10766
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
10721
10767
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' createOrder() is not supported yet');
10722
10768
  }
10769
+ async createTrailingAmountOrder(symbol, type, side, amount, price = undefined, trailingAmount = undefined, trailingTriggerPrice = undefined, params = {}) {
10770
+ /**
10771
+ * @method
10772
+ * @name createTrailingAmountOrder
10773
+ * @description create a trailing order by providing the symbol, type, side, amount, price and trailingAmount
10774
+ * @param {string} symbol unified symbol of the market to create an order in
10775
+ * @param {string} type 'market' or 'limit'
10776
+ * @param {string} side 'buy' or 'sell'
10777
+ * @param {float} amount how much you want to trade in units of the base currency, or number of contracts
10778
+ * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders
10779
+ * @param {float} trailingAmount the quote amount to trail away from the current market price
10780
+ * @param {float} [trailingTriggerPrice] the price to activate a trailing order, default uses the price argument
10781
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
10782
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
10783
+ */
10784
+ if (trailingAmount === undefined) {
10785
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ArgumentsRequired(this.id + ' createTrailingAmountOrder() requires a trailingAmount argument');
10786
+ }
10787
+ params['trailingAmount'] = trailingAmount;
10788
+ if (trailingTriggerPrice !== undefined) {
10789
+ params['trailingTriggerPrice'] = trailingTriggerPrice;
10790
+ }
10791
+ if (this.has['createTrailingAmountOrder']) {
10792
+ return await this.createOrder(symbol, type, side, amount, price, params);
10793
+ }
10794
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' createTrailingAmountOrder() is not supported yet');
10795
+ }
10796
+ async createTrailingPercentOrder(symbol, type, side, amount, price = undefined, trailingPercent = undefined, trailingTriggerPrice = undefined, params = {}) {
10797
+ /**
10798
+ * @method
10799
+ * @name createTrailingPercentOrder
10800
+ * @description create a trailing order by providing the symbol, type, side, amount, price and trailingPercent
10801
+ * @param {string} symbol unified symbol of the market to create an order in
10802
+ * @param {string} type 'market' or 'limit'
10803
+ * @param {string} side 'buy' or 'sell'
10804
+ * @param {float} amount how much you want to trade in units of the base currency, or number of contracts
10805
+ * @param {float} [price] the price for the order to be filled at, in units of the quote currency, ignored in market orders
10806
+ * @param {float} trailingPercent the percent to trail away from the current market price
10807
+ * @param {float} [trailingTriggerPrice] the price to activate a trailing order, default uses the price argument
10808
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
10809
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
10810
+ */
10811
+ if (trailingPercent === undefined) {
10812
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.ArgumentsRequired(this.id + ' createTrailingPercentOrder() requires a trailingPercent argument');
10813
+ }
10814
+ params['trailingPercent'] = trailingPercent;
10815
+ if (trailingTriggerPrice !== undefined) {
10816
+ params['trailingTriggerPrice'] = trailingTriggerPrice;
10817
+ }
10818
+ if (this.has['createTrailingPercentOrder']) {
10819
+ return await this.createOrder(symbol, type, side, amount, price, params);
10820
+ }
10821
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' createTrailingPercentOrder() is not supported yet');
10822
+ }
10723
10823
  async createMarketOrderWithCost(symbol, side, cost, params = {}) {
10724
10824
  /**
10725
10825
  * @method
@@ -10880,7 +10980,7 @@ class Exchange {
10880
10980
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchFundingHistory() is not supported yet');
10881
10981
  }
10882
10982
  async closePosition(symbol, side = undefined, params = {}) {
10883
- throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' closePositions() is not supported yet');
10983
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' closePosition() is not supported yet');
10884
10984
  }
10885
10985
  async closeAllPositions(params = {}) {
10886
10986
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' closeAllPositions() is not supported yet');
@@ -15253,10 +15353,10 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15253
15353
  'has': {
15254
15354
  'CORS': undefined,
15255
15355
  'spot': true,
15256
- 'margin': undefined,
15356
+ 'margin': false,
15257
15357
  'swap': undefined,
15258
15358
  'future': undefined,
15259
- 'option': undefined,
15359
+ 'option': false,
15260
15360
  'cancelAllOrders': true,
15261
15361
  'cancelOrder': true,
15262
15362
  'createMarketBuyOrderWithCost': true,
@@ -15310,6 +15410,8 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15310
15410
  'api': {
15311
15411
  'public': 'https://{hostname}/api/v3',
15312
15412
  'private': 'https://{hostname}/api/v3/viewer',
15413
+ 'contractPublic': 'https://{hostname}/api/contract/v2',
15414
+ 'contractPrivate': 'https://{hostname}/api/contract/v2',
15313
15415
  'webExchange': 'https://{hostname}/api/',
15314
15416
  },
15315
15417
  'www': 'https://big.one',
@@ -15349,6 +15451,38 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15349
15451
  'transfer',
15350
15452
  ],
15351
15453
  },
15454
+ 'contractPublic': {
15455
+ 'get': [
15456
+ 'instruments',
15457
+ 'depth@{symbol}/snapshot',
15458
+ 'instruments/difference',
15459
+ 'instruments/prices',
15460
+ ],
15461
+ },
15462
+ 'contractPrivate': {
15463
+ 'get': [
15464
+ 'accounts',
15465
+ 'orders/{id}',
15466
+ 'orders',
15467
+ 'orders/opening',
15468
+ 'orders/count',
15469
+ 'orders/opening/count',
15470
+ 'trades',
15471
+ 'trades/count',
15472
+ ],
15473
+ 'post': [
15474
+ 'orders',
15475
+ 'orders/batch',
15476
+ ],
15477
+ 'put': [
15478
+ 'positions/{symbol}/margin',
15479
+ 'positions/{symbol}/risk-limit',
15480
+ ],
15481
+ 'delete': [
15482
+ 'orders/{id}',
15483
+ 'orders/batch',
15484
+ ],
15485
+ },
15352
15486
  'webExchange': {
15353
15487
  'get': [
15354
15488
  'uc/v2/assets',
@@ -15740,93 +15874,214 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15740
15874
  // ]
15741
15875
  // }
15742
15876
  //
15877
+ const contractResponse = await this.contractPublicGetInstruments(params);
15878
+ //
15879
+ // [
15880
+ // {
15881
+ // "usdtPrice": 1.00031998,
15882
+ // "symbol": "BTCUSD",
15883
+ // "btcPrice": 34700.4,
15884
+ // "ethPrice": 1787.83,
15885
+ // "nextFundingRate": 0.00010,
15886
+ // "fundingRate": 0.00010,
15887
+ // "latestPrice": 34708.5,
15888
+ // "last24hPriceChange": 0.0321,
15889
+ // "indexPrice": 34700.4,
15890
+ // "volume24h": 261319063,
15891
+ // "turnover24h": 8204.129380685496,
15892
+ // "nextFundingTime": 1698285600000,
15893
+ // "markPrice": 34702.4646738,
15894
+ // "last24hMaxPrice": 35127.5,
15895
+ // "volume24hInUsd": 0.0,
15896
+ // "openValue": 32.88054722085945,
15897
+ // "last24hMinPrice": 33552.0,
15898
+ // "openInterest": 1141372.0
15899
+ // }
15900
+ // ...
15901
+ // ]
15902
+ //
15743
15903
  const markets = this.safeValue(response, 'data', []);
15744
- return this.parseMarkets(markets);
15745
- }
15746
- parseMarket(market) {
15747
- const id = this.safeString(market, 'name');
15748
- const baseAsset = this.safeValue(market, 'base_asset', {});
15749
- const quoteAsset = this.safeValue(market, 'quote_asset', {});
15750
- const baseId = this.safeString(baseAsset, 'symbol');
15751
- const quoteId = this.safeString(quoteAsset, 'symbol');
15752
- const base = this.safeCurrencyCode(baseId);
15753
- const quote = this.safeCurrencyCode(quoteId);
15754
- return {
15755
- 'id': id,
15756
- 'symbol': base + '/' + quote,
15757
- 'base': base,
15758
- 'quote': quote,
15759
- 'settle': undefined,
15760
- 'baseId': baseId,
15761
- 'quoteId': quoteId,
15762
- 'settleId': undefined,
15763
- 'type': 'spot',
15764
- 'spot': true,
15765
- 'margin': false,
15766
- 'swap': false,
15767
- 'future': false,
15768
- 'option': false,
15769
- 'active': true,
15770
- 'contract': false,
15771
- 'linear': undefined,
15772
- 'inverse': undefined,
15773
- 'contractSize': undefined,
15774
- 'expiry': undefined,
15775
- 'expiryDatetime': undefined,
15776
- 'strike': undefined,
15777
- 'optionType': undefined,
15778
- 'precision': {
15779
- 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'base_scale'))),
15780
- 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'quote_scale'))),
15781
- },
15782
- 'limits': {
15783
- 'leverage': {
15784
- 'min': undefined,
15785
- 'max': undefined,
15904
+ const result = [];
15905
+ for (let i = 0; i < markets.length; i++) {
15906
+ const market = markets[i];
15907
+ const baseAsset = this.safeValue(market, 'base_asset', {});
15908
+ const quoteAsset = this.safeValue(market, 'quote_asset', {});
15909
+ const baseId = this.safeString(baseAsset, 'symbol');
15910
+ const quoteId = this.safeString(quoteAsset, 'symbol');
15911
+ const base = this.safeCurrencyCode(baseId);
15912
+ const quote = this.safeCurrencyCode(quoteId);
15913
+ result.push(this.safeMarketStructure({
15914
+ 'id': this.safeString(market, 'name'),
15915
+ 'uuid': this.safeString(market, 'id'),
15916
+ 'symbol': base + '/' + quote,
15917
+ 'base': base,
15918
+ 'quote': quote,
15919
+ 'settle': undefined,
15920
+ 'baseId': baseId,
15921
+ 'quoteId': quoteId,
15922
+ 'settleId': undefined,
15923
+ 'type': 'spot',
15924
+ 'spot': true,
15925
+ 'margin': false,
15926
+ 'swap': false,
15927
+ 'future': false,
15928
+ 'option': false,
15929
+ 'active': true,
15930
+ 'contract': false,
15931
+ 'linear': undefined,
15932
+ 'inverse': undefined,
15933
+ 'contractSize': undefined,
15934
+ 'expiry': undefined,
15935
+ 'expiryDatetime': undefined,
15936
+ 'strike': undefined,
15937
+ 'optionType': undefined,
15938
+ 'precision': {
15939
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'base_scale'))),
15940
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'quote_scale'))),
15786
15941
  },
15787
- 'amount': {
15788
- 'min': undefined,
15789
- 'max': undefined,
15942
+ 'limits': {
15943
+ 'leverage': {
15944
+ 'min': undefined,
15945
+ 'max': undefined,
15946
+ },
15947
+ 'amount': {
15948
+ 'min': undefined,
15949
+ 'max': undefined,
15950
+ },
15951
+ 'price': {
15952
+ 'min': undefined,
15953
+ 'max': undefined,
15954
+ },
15955
+ 'cost': {
15956
+ 'min': this.safeNumber(market, 'min_quote_value'),
15957
+ 'max': this.safeNumber(market, 'max_quote_value'),
15958
+ },
15790
15959
  },
15791
- 'price': {
15792
- 'min': undefined,
15793
- 'max': undefined,
15960
+ 'created': undefined,
15961
+ 'info': market,
15962
+ }));
15963
+ }
15964
+ for (let i = 0; i < contractResponse.length; i++) {
15965
+ const market = contractResponse[i];
15966
+ const marketId = this.safeString(market, 'symbol');
15967
+ const index = marketId.indexOf('USD');
15968
+ const baseId = marketId.slice(0, index);
15969
+ const quoteId = marketId.slice(index);
15970
+ const inverse = (quoteId === 'USD');
15971
+ const settleId = inverse ? baseId : quoteId;
15972
+ const base = this.safeCurrencyCode(baseId);
15973
+ const quote = this.safeCurrencyCode(quoteId);
15974
+ const settle = this.safeCurrencyCode(settleId);
15975
+ result.push(this.safeMarketStructure({
15976
+ 'id': marketId,
15977
+ 'symbol': base + '/' + quote + ':' + settle,
15978
+ 'base': base,
15979
+ 'quote': quote,
15980
+ 'settle': settle,
15981
+ 'baseId': baseId,
15982
+ 'quoteId': quoteId,
15983
+ 'settleId': settleId,
15984
+ 'type': 'swap',
15985
+ 'spot': false,
15986
+ 'margin': false,
15987
+ 'swap': true,
15988
+ 'future': false,
15989
+ 'option': false,
15990
+ 'active': true,
15991
+ 'contract': true,
15992
+ 'linear': !inverse,
15993
+ 'inverse': inverse,
15994
+ 'contractSize': 1,
15995
+ 'expiry': undefined,
15996
+ 'expiryDatetime': undefined,
15997
+ 'strike': undefined,
15998
+ 'optionType': undefined,
15999
+ 'precision': {
16000
+ 'amount': undefined,
16001
+ 'price': undefined,
15794
16002
  },
15795
- 'cost': {
15796
- 'min': this.safeNumber(market, 'min_quote_value'),
15797
- 'max': this.safeNumber(market, 'max_quote_value'),
16003
+ 'limits': {
16004
+ 'leverage': {
16005
+ 'min': undefined,
16006
+ 'max': undefined,
16007
+ },
16008
+ 'amount': {
16009
+ 'min': undefined,
16010
+ 'max': undefined,
16011
+ },
16012
+ 'price': {
16013
+ 'min': undefined,
16014
+ 'max': undefined,
16015
+ },
16016
+ 'cost': {
16017
+ 'min': undefined,
16018
+ 'max': undefined,
16019
+ },
15798
16020
  },
15799
- },
15800
- 'created': undefined,
15801
- 'info': market,
15802
- };
16021
+ 'info': market,
16022
+ }));
16023
+ }
16024
+ return result;
15803
16025
  }
15804
16026
  parseTicker(ticker, market = undefined) {
15805
16027
  //
15806
- // {
15807
- // "asset_pair_name":"ETH-BTC",
15808
- // "bid":{"price":"0.021593","order_count":1,"quantity":"0.20936"},
15809
- // "ask":{"price":"0.021613","order_count":1,"quantity":"2.87064"},
15810
- // "open":"0.021795",
15811
- // "high":"0.021795",
15812
- // "low":"0.021471",
15813
- // "close":"0.021613",
15814
- // "volume":"117078.90431",
15815
- // "daily_change":"-0.000182"
15816
- // }
16028
+ // spot
15817
16029
  //
15818
- const marketId = this.safeString(ticker, 'asset_pair_name');
15819
- const symbol = this.safeSymbol(marketId, market, '-');
15820
- const timestamp = undefined;
15821
- const close = this.safeString(ticker, 'close');
16030
+ // {
16031
+ // "asset_pair_name": "ETH-BTC",
16032
+ // "bid": {
16033
+ // "price": "0.021593",
16034
+ // "order_count": 1,
16035
+ // "quantity": "0.20936"
16036
+ // },
16037
+ // "ask": {
16038
+ // "price": "0.021613",
16039
+ // "order_count": 1,
16040
+ // "quantity": "2.87064"
16041
+ // },
16042
+ // "open": "0.021795",
16043
+ // "high": "0.021795",
16044
+ // "low": "0.021471",
16045
+ // "close": "0.021613",
16046
+ // "volume": "117078.90431",
16047
+ // "daily_change": "-0.000182"
16048
+ // }
16049
+ //
16050
+ // contract
16051
+ //
16052
+ // {
16053
+ // "usdtPrice": 1.00031998,
16054
+ // "symbol": "BTCUSD",
16055
+ // "btcPrice": 34700.4,
16056
+ // "ethPrice": 1787.83,
16057
+ // "nextFundingRate": 0.00010,
16058
+ // "fundingRate": 0.00010,
16059
+ // "latestPrice": 34708.5,
16060
+ // "last24hPriceChange": 0.0321,
16061
+ // "indexPrice": 34700.4,
16062
+ // "volume24h": 261319063,
16063
+ // "turnover24h": 8204.129380685496,
16064
+ // "nextFundingTime": 1698285600000,
16065
+ // "markPrice": 34702.4646738,
16066
+ // "last24hMaxPrice": 35127.5,
16067
+ // "volume24hInUsd": 0.0,
16068
+ // "openValue": 32.88054722085945,
16069
+ // "last24hMinPrice": 33552.0,
16070
+ // "openInterest": 1141372.0
16071
+ // }
16072
+ //
16073
+ const marketType = ('asset_pair_name' in ticker) ? 'spot' : 'swap';
16074
+ const marketId = this.safeString2(ticker, 'asset_pair_name', 'symbol');
16075
+ const symbol = this.safeSymbol(marketId, market, '-', marketType);
16076
+ const close = this.safeString2(ticker, 'close', 'latestPrice');
15822
16077
  const bid = this.safeValue(ticker, 'bid', {});
15823
16078
  const ask = this.safeValue(ticker, 'ask', {});
15824
16079
  return this.safeTicker({
15825
16080
  'symbol': symbol,
15826
- 'timestamp': timestamp,
15827
- 'datetime': this.iso8601(timestamp),
15828
- 'high': this.safeString(ticker, 'high'),
15829
- 'low': this.safeString(ticker, 'low'),
16081
+ 'timestamp': undefined,
16082
+ 'datetime': undefined,
16083
+ 'high': this.safeString2(ticker, 'high', 'last24hMaxPrice'),
16084
+ 'low': this.safeString2(ticker, 'low', 'last24hMinPrice'),
15830
16085
  'bid': this.safeString(bid, 'price'),
15831
16086
  'bidVolume': this.safeString(bid, 'quantity'),
15832
16087
  'ask': this.safeString(ask, 'price'),
@@ -15836,11 +16091,11 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15836
16091
  'close': close,
15837
16092
  'last': close,
15838
16093
  'previousClose': undefined,
15839
- 'change': this.safeString(ticker, 'daily_change'),
16094
+ 'change': this.safeString2(ticker, 'daily_change', 'last24hPriceChange'),
15840
16095
  'percentage': undefined,
15841
16096
  'average': undefined,
15842
- 'baseVolume': this.safeString(ticker, 'volume'),
15843
- 'quoteVolume': undefined,
16097
+ 'baseVolume': this.safeString2(ticker, 'volume', 'volume24h'),
16098
+ 'quoteVolume': this.safeString(ticker, 'volume24hInUsd'),
15844
16099
  'info': ticker,
15845
16100
  }, market);
15846
16101
  }
@@ -15855,83 +16110,123 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15855
16110
  */
15856
16111
  await this.loadMarkets();
15857
16112
  const market = this.market(symbol);
15858
- const request = {
15859
- 'asset_pair_name': market['id'],
15860
- };
15861
- const response = await this.publicGetAssetPairsAssetPairNameTicker(this.extend(request, params));
15862
- //
15863
- // {
15864
- // "code":0,
15865
- // "data":{
15866
- // "asset_pair_name":"ETH-BTC",
15867
- // "bid":{"price":"0.021593","order_count":1,"quantity":"0.20936"},
15868
- // "ask":{"price":"0.021613","order_count":1,"quantity":"2.87064"},
15869
- // "open":"0.021795",
15870
- // "high":"0.021795",
15871
- // "low":"0.021471",
15872
- // "close":"0.021613",
15873
- // "volume":"117078.90431",
15874
- // "daily_change":"-0.000182"
15875
- // }
15876
- // }
15877
- //
15878
- const ticker = this.safeValue(response, 'data', {});
15879
- return this.parseTicker(ticker, market);
16113
+ let type = undefined;
16114
+ [type, params] = this.handleMarketTypeAndParams('fetchTicker', market, params);
16115
+ if (type === 'spot') {
16116
+ const request = {
16117
+ 'asset_pair_name': market['id'],
16118
+ };
16119
+ const response = await this.publicGetAssetPairsAssetPairNameTicker(this.extend(request, params));
16120
+ //
16121
+ // {
16122
+ // "code":0,
16123
+ // "data":{
16124
+ // "asset_pair_name":"ETH-BTC",
16125
+ // "bid":{"price":"0.021593","order_count":1,"quantity":"0.20936"},
16126
+ // "ask":{"price":"0.021613","order_count":1,"quantity":"2.87064"},
16127
+ // "open":"0.021795",
16128
+ // "high":"0.021795",
16129
+ // "low":"0.021471",
16130
+ // "close":"0.021613",
16131
+ // "volume":"117078.90431",
16132
+ // "daily_change":"-0.000182"
16133
+ // }
16134
+ // }
16135
+ //
16136
+ const ticker = this.safeValue(response, 'data', {});
16137
+ return this.parseTicker(ticker, market);
16138
+ }
16139
+ else {
16140
+ const tickers = await this.fetchTickers([symbol], params);
16141
+ return this.safeValue(tickers, symbol);
16142
+ }
15880
16143
  }
15881
16144
  async fetchTickers(symbols = undefined, params = {}) {
15882
16145
  /**
15883
16146
  * @method
15884
16147
  * @name bigone#fetchTickers
15885
16148
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
15886
- * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
16149
+ * @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
15887
16150
  * @param {object} [params] extra parameters specific to the exchange API endpoint
15888
16151
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
15889
16152
  */
15890
16153
  await this.loadMarkets();
16154
+ let market = undefined;
16155
+ const symbol = this.safeString(symbols, 0);
16156
+ if (symbol !== undefined) {
16157
+ market = this.market(symbol);
16158
+ }
16159
+ let type = undefined;
16160
+ [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
16161
+ const isSpot = type === 'spot';
15891
16162
  const request = {};
15892
16163
  symbols = this.marketSymbols(symbols);
15893
- if (symbols !== undefined) {
15894
- const ids = this.marketIds(symbols);
15895
- request['pair_names'] = ids.join(',');
16164
+ let data = undefined;
16165
+ if (isSpot) {
16166
+ if (symbols !== undefined) {
16167
+ const ids = this.marketIds(symbols);
16168
+ request['pair_names'] = ids.join(',');
16169
+ }
16170
+ const response = await this.publicGetAssetPairsTickers(this.extend(request, params));
16171
+ //
16172
+ // {
16173
+ // "code": 0,
16174
+ // "data": [
16175
+ // {
16176
+ // "asset_pair_name": "PCX-BTC",
16177
+ // "bid": {
16178
+ // "price": "0.000234",
16179
+ // "order_count": 1,
16180
+ // "quantity": "0.518"
16181
+ // },
16182
+ // "ask": {
16183
+ // "price": "0.0002348",
16184
+ // "order_count": 1,
16185
+ // "quantity": "2.348"
16186
+ // },
16187
+ // "open": "0.0002343",
16188
+ // "high": "0.0002348",
16189
+ // "low": "0.0002162",
16190
+ // "close": "0.0002348",
16191
+ // "volume": "12887.016",
16192
+ // "daily_change": "0.0000005"
16193
+ // },
16194
+ // ...
16195
+ // ]
16196
+ // }
16197
+ //
16198
+ data = this.safeValue(response, 'data', []);
15896
16199
  }
15897
- const response = await this.publicGetAssetPairsTickers(this.extend(request, params));
15898
- //
15899
- // {
15900
- // "code":0,
15901
- // "data":[
15902
- // {
15903
- // "asset_pair_name":"PCX-BTC",
15904
- // "bid":{"price":"0.000234","order_count":1,"quantity":"0.518"},
15905
- // "ask":{"price":"0.0002348","order_count":1,"quantity":"2.348"},
15906
- // "open":"0.0002343",
15907
- // "high":"0.0002348",
15908
- // "low":"0.0002162",
15909
- // "close":"0.0002348",
15910
- // "volume":"12887.016",
15911
- // "daily_change":"0.0000005"
15912
- // },
15913
- // {
15914
- // "asset_pair_name":"GXC-USDT",
15915
- // "bid":{"price":"0.5054","order_count":1,"quantity":"40.53"},
15916
- // "ask":{"price":"0.5055","order_count":1,"quantity":"38.53"},
15917
- // "open":"0.5262",
15918
- // "high":"0.5323",
15919
- // "low":"0.5055",
15920
- // "close":"0.5055",
15921
- // "volume":"603963.05",
15922
- // "daily_change":"-0.0207"
15923
- // }
15924
- // ]
15925
- // }
15926
- //
15927
- const tickers = this.safeValue(response, 'data', []);
15928
- const result = {};
15929
- for (let i = 0; i < tickers.length; i++) {
15930
- const ticker = this.parseTicker(tickers[i]);
15931
- const symbol = ticker['symbol'];
15932
- result[symbol] = ticker;
16200
+ else {
16201
+ data = await this.contractPublicGetInstruments(params);
16202
+ //
16203
+ // [
16204
+ // {
16205
+ // "usdtPrice": 1.00031998,
16206
+ // "symbol": "BTCUSD",
16207
+ // "btcPrice": 34700.4,
16208
+ // "ethPrice": 1787.83,
16209
+ // "nextFundingRate": 0.00010,
16210
+ // "fundingRate": 0.00010,
16211
+ // "latestPrice": 34708.5,
16212
+ // "last24hPriceChange": 0.0321,
16213
+ // "indexPrice": 34700.4,
16214
+ // "volume24h": 261319063,
16215
+ // "turnover24h": 8204.129380685496,
16216
+ // "nextFundingTime": 1698285600000,
16217
+ // "markPrice": 34702.4646738,
16218
+ // "last24hMaxPrice": 35127.5,
16219
+ // "volume24hInUsd": 0.0,
16220
+ // "openValue": 32.88054722085945,
16221
+ // "last24hMinPrice": 33552.0,
16222
+ // "openInterest": 1141372.0
16223
+ // }
16224
+ // ...
16225
+ // ]
16226
+ //
15933
16227
  }
15934
- return this.filterByArrayTickers(result, 'symbol', symbols);
16228
+ const tickers = this.parseTickers(data, symbols);
16229
+ return this.filterByArrayTickers(tickers, 'symbol', symbols);
15935
16230
  }
15936
16231
  async fetchTime(params = {}) {
15937
16232
  /**
@@ -16745,7 +17040,7 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
16745
17040
  const baseUrl = this.implodeHostname(this.urls['api'][api]);
16746
17041
  let url = baseUrl + '/' + this.implodeParams(path, params);
16747
17042
  headers = {};
16748
- if (api === 'public' || api === 'webExchange') {
17043
+ if (api === 'public' || api === 'webExchange' || api === 'contractPublic') {
16749
17044
  if (Object.keys(query).length) {
16750
17045
  url += '?' + this.urlencode(query);
16751
17046
  }
@@ -16768,7 +17063,7 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
16768
17063
  }
16769
17064
  else if (method === 'POST') {
16770
17065
  headers['Content-Type'] = 'application/json';
16771
- body = this.json(query);
17066
+ body = query;
16772
17067
  }
16773
17068
  }
16774
17069
  headers['User-Agent'] = 'ccxt/' + this.id + '-' + this.version;
@@ -17162,7 +17457,7 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
17162
17457
  //
17163
17458
  const code = this.safeString(response, 'code');
17164
17459
  const message = this.safeString(response, 'message');
17165
- if (code !== '0') {
17460
+ if ((code !== '0') && (code !== undefined)) {
17166
17461
  const feedback = this.id + ' ' + body;
17167
17462
  this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
17168
17463
  this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
@@ -17233,6 +17528,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
17233
17528
  'createMarketBuyOrderWithCost': true,
17234
17529
  'createMarketOrderWithCost': true,
17235
17530
  'createMarketSellOrderWithCost': true,
17531
+ 'createTrailingPercentOrder': true,
17236
17532
  'createOrder': true,
17237
17533
  'createOrders': true,
17238
17534
  'createPostOnlyOrder': true,
@@ -17415,6 +17711,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
17415
17711
  'asset/convert-transfer/queryByPage': 0.033335,
17416
17712
  'asset/wallet/balance': 6,
17417
17713
  'asset/custody/transfer-history': 6,
17714
+ 'margin/borrow-repay': 1,
17418
17715
  'margin/loan': 1,
17419
17716
  'margin/repay': 1,
17420
17717
  'margin/account': 1,
@@ -17666,6 +17963,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
17666
17963
  'capital/withdraw/apply': 4.0002,
17667
17964
  'capital/contract/convertible-coins': 4.0002,
17668
17965
  'capital/deposit/credit-apply': 0.1,
17966
+ 'margin/borrow-repay': 20.001,
17669
17967
  'margin/transfer': 4.0002,
17670
17968
  'margin/loan': 20.001,
17671
17969
  'margin/repay': 20.001,
@@ -26314,7 +26612,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26314
26612
  * @method
26315
26613
  * @name binance#repayCrossMargin
26316
26614
  * @description repay borrowed margin and interest
26317
- * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-repay-margin
26615
+ * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-borrow-repay-margin
26318
26616
  * @param {string} code unified currency code of the currency to repay
26319
26617
  * @param {float} amount the amount to repay
26320
26618
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -26326,8 +26624,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26326
26624
  'asset': currency['id'],
26327
26625
  'amount': this.currencyToPrecision(code, amount),
26328
26626
  'isIsolated': 'FALSE',
26627
+ 'type': 'REPAY',
26329
26628
  };
26330
- const response = await this.sapiPostMarginRepay(this.extend(request, params));
26629
+ const response = await this.sapiPostMarginBorrowRepay(this.extend(request, params));
26331
26630
  //
26332
26631
  // {
26333
26632
  // "tranId": 108988250265,
@@ -26341,7 +26640,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26341
26640
  * @method
26342
26641
  * @name binance#repayIsolatedMargin
26343
26642
  * @description repay borrowed margin and interest
26344
- * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-repay-margin
26643
+ * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-borrow-repay-margin
26345
26644
  * @param {string} symbol unified market symbol, required for isolated margin
26346
26645
  * @param {string} code unified currency code of the currency to repay
26347
26646
  * @param {float} amount the amount to repay
@@ -26356,8 +26655,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26356
26655
  'amount': this.currencyToPrecision(code, amount),
26357
26656
  'symbol': market['id'],
26358
26657
  'isIsolated': 'TRUE',
26658
+ 'type': 'REPAY',
26359
26659
  };
26360
- const response = await this.sapiPostMarginRepay(this.extend(request, params));
26660
+ const response = await this.sapiPostMarginBorrowRepay(this.extend(request, params));
26361
26661
  //
26362
26662
  // {
26363
26663
  // "tranId": 108988250265,
@@ -26371,7 +26671,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26371
26671
  * @method
26372
26672
  * @name binance#borrowCrossMargin
26373
26673
  * @description create a loan to borrow margin
26374
- * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-borrow-margin
26674
+ * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-borrow-repay-margin
26375
26675
  * @param {string} code unified currency code of the currency to borrow
26376
26676
  * @param {float} amount the amount to borrow
26377
26677
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -26383,8 +26683,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26383
26683
  'asset': currency['id'],
26384
26684
  'amount': this.currencyToPrecision(code, amount),
26385
26685
  'isIsolated': 'FALSE',
26686
+ 'type': 'BORROW',
26386
26687
  };
26387
- const response = await this.sapiPostMarginLoan(this.extend(request, params));
26688
+ const response = await this.sapiPostMarginBorrowRepay(this.extend(request, params));
26388
26689
  //
26389
26690
  // {
26390
26691
  // "tranId": 108988250265,
@@ -26398,7 +26699,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26398
26699
  * @method
26399
26700
  * @name binance#borrowIsolatedMargin
26400
26701
  * @description create a loan to borrow margin
26401
- * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-borrow-margin
26702
+ * @see https://binance-docs.github.io/apidocs/spot/en/#margin-account-borrow-repay-margin
26402
26703
  * @param {string} symbol unified market symbol, required for isolated margin
26403
26704
  * @param {string} code unified currency code of the currency to borrow
26404
26705
  * @param {float} amount the amount to borrow
@@ -26413,8 +26714,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26413
26714
  'amount': this.currencyToPrecision(code, amount),
26414
26715
  'symbol': market['id'],
26415
26716
  'isIsolated': 'TRUE',
26717
+ 'type': 'BORROW',
26416
26718
  };
26417
- const response = await this.sapiPostMarginLoan(this.extend(request, params));
26719
+ const response = await this.sapiPostMarginBorrowRepay(this.extend(request, params));
26418
26720
  //
26419
26721
  // {
26420
26722
  // "tranId": 108988250265,
@@ -27163,6 +27465,8 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27163
27465
  'createMarketSellOrderWithCost': true,
27164
27466
  'createOrder': true,
27165
27467
  'createOrders': true,
27468
+ 'createTrailingAmountOrder': true,
27469
+ 'createTrailingPercentOrder': true,
27166
27470
  'fetchBalance': true,
27167
27471
  'fetchClosedOrders': true,
27168
27472
  'fetchCurrencies': true,
@@ -29033,16 +29337,6 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29033
29337
  const order = this.safeValue(data, 'order', data);
29034
29338
  return this.parseOrder(order, market);
29035
29339
  }
29036
- fixStringifiedJsonMembers(content) {
29037
- // when stringified json has members with their values also stringified, like:
29038
- // '{"code":0, "data":{"order":{"orderId":1742968678528512345,"symbol":"BTC-USDT", "takeProfit":"{\"type\":\"TAKE_PROFIT\",\"stopPrice\":43320.1}","reduceOnly":false}}}'
29039
- // we can fix with below manipulations
29040
- // @ts-ignore
29041
- let modifiedContent = content.replaceAll('\\', '');
29042
- modifiedContent = modifiedContent.replaceAll('"{', '{');
29043
- modifiedContent = modifiedContent.replaceAll('}"', '}');
29044
- return modifiedContent;
29045
- }
29046
29340
  async createOrders(orders, params = {}) {
29047
29341
  /**
29048
29342
  * @method
@@ -29554,6 +29848,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29554
29848
  'symbol': market['id'],
29555
29849
  };
29556
29850
  const clientOrderIds = this.safeValue(params, 'clientOrderIds');
29851
+ params = this.omit(params, 'clientOrderIds');
29557
29852
  let idsToParse = ids;
29558
29853
  const areClientOrderIds = (clientOrderIds !== undefined);
29559
29854
  if (areClientOrderIds) {
@@ -29572,8 +29867,12 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29572
29867
  response = await this.spotV1PrivatePostTradeCancelOrders(this.extend(request, params));
29573
29868
  }
29574
29869
  else {
29575
- const swapReqKey = areClientOrderIds ? 'ClientOrderIDList' : 'orderIdList';
29576
- request[swapReqKey] = parsedIds;
29870
+ if (areClientOrderIds) {
29871
+ request['clientOrderIDList'] = this.json(parsedIds);
29872
+ }
29873
+ else {
29874
+ request['orderIdList'] = parsedIds;
29875
+ }
29577
29876
  response = await this.swapV2PrivateDeleteTradeBatchOrders(this.extend(request, params));
29578
29877
  }
29579
29878
  //
@@ -34877,12 +35176,11 @@ class bitfinex extends _abstract_bitfinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
34877
35176
  // "message": "0.0001 Bitcoin transfered from Margin to Exchange"
34878
35177
  // }
34879
35178
  //
34880
- const timestamp = this.milliseconds();
34881
35179
  return {
34882
35180
  'info': transfer,
34883
35181
  'id': undefined,
34884
- 'timestamp': timestamp,
34885
- 'datetime': this.iso8601(timestamp),
35182
+ 'timestamp': undefined,
35183
+ 'datetime': undefined,
34886
35184
  'currency': this.safeCurrencyCode(undefined, currency),
34887
35185
  'amount': undefined,
34888
35186
  'fromAccount': undefined,
@@ -40725,6 +41023,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
40725
41023
  'createMarketBuyOrderWithCost': true,
40726
41024
  'createMarketOrderWithCost': false,
40727
41025
  'createMarketSellOrderWithCost': false,
41026
+ 'createTrailingPercentOrder': true,
40728
41027
  'createOrder': true,
40729
41028
  'createOrders': true,
40730
41029
  'createReduceOnlyOrder': false,
@@ -43958,26 +44257,38 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
43958
44257
  'granularity': selectedTimeframe,
43959
44258
  };
43960
44259
  [request, params] = this.handleUntilOption('endTime', request, params);
43961
- if (since !== undefined) {
43962
- request['startTime'] = limit;
43963
- }
43964
44260
  if (limit !== undefined) {
43965
44261
  request['limit'] = limit;
43966
44262
  }
43967
44263
  const options = this.safeValue(this.options, 'fetchOHLCV', {});
44264
+ const spotOptions = this.safeValue(options, 'spot', {});
44265
+ const defaultSpotMethod = this.safeString(spotOptions, 'method', 'publicSpotGetV2SpotMarketCandles');
44266
+ const method = this.safeString(params, 'method', defaultSpotMethod);
44267
+ params = this.omit(params, 'method');
44268
+ if (method !== 'publicSpotGetV2SpotMarketHistoryCandles') {
44269
+ if (since !== undefined) {
44270
+ request['startTime'] = since;
44271
+ }
44272
+ }
43968
44273
  let response = undefined;
43969
44274
  if (market['spot']) {
43970
- const spotOptions = this.safeValue(options, 'spot', {});
43971
- const defaultSpotMethod = this.safeString(spotOptions, 'method', 'publicSpotGetV2SpotMarketCandles');
43972
- const method = this.safeString(params, 'method', defaultSpotMethod);
43973
- params = this.omit(params, 'method');
43974
44275
  if (method === 'publicSpotGetV2SpotMarketCandles') {
43975
44276
  response = await this.publicSpotGetV2SpotMarketCandles(this.extend(request, params));
43976
44277
  }
43977
44278
  else if (method === 'publicSpotGetV2SpotMarketHistoryCandles') {
43978
44279
  const until = this.safeInteger2(params, 'until', 'till');
43979
44280
  params = this.omit(params, ['until', 'till']);
43980
- if (until === undefined) {
44281
+ if (since !== undefined) {
44282
+ if (limit === undefined) {
44283
+ limit = 100; // exchange default
44284
+ }
44285
+ const duration = this.parseTimeframe(timeframe) * 1000;
44286
+ request['endTime'] = this.sum(since, duration * limit);
44287
+ }
44288
+ else if (until !== undefined) {
44289
+ request['endTime'] = until;
44290
+ }
44291
+ else {
43981
44292
  request['endTime'] = this.milliseconds();
43982
44293
  }
43983
44294
  response = await this.publicSpotGetV2SpotMarketHistoryCandles(this.extend(request, params));
@@ -44693,6 +45004,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
44693
45004
  * @param {string} [params.trailingPercent] *swap and future only* the percent to trail away from the current market price, rate can not be greater than 10
44694
45005
  * @param {string} [params.trailingTriggerPrice] *swap and future only* the price to trigger a trailing stop order, default uses the price argument
44695
45006
  * @param {string} [params.triggerType] *swap and future only* 'fill_price', 'mark_price' or 'index_price'
45007
+ * @param {boolean} [params.oneWayMode] *swap and future only* required to set this to true in one_way_mode and you can leave this as undefined in hedge_mode, can adjust the mode using the setPositionMode() method
44696
45008
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
44697
45009
  */
44698
45010
  await this.loadMarkets();
@@ -44886,15 +45198,23 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
44886
45198
  }
44887
45199
  const marginModeRequest = (marginMode === 'cross') ? 'crossed' : 'isolated';
44888
45200
  request['marginMode'] = marginModeRequest;
45201
+ const oneWayMode = this.safeValue(params, 'oneWayMode', false);
45202
+ params = this.omit(params, 'oneWayMode');
44889
45203
  let requestSide = side;
44890
45204
  if (reduceOnly) {
44891
- request['reduceOnly'] = 'YES';
44892
- request['tradeSide'] = 'Close';
44893
- // on bitget if the position is long the side is always buy, and if the position is short the side is always sell
44894
- requestSide = (side === 'buy') ? 'sell' : 'buy';
45205
+ if (oneWayMode) {
45206
+ request['reduceOnly'] = 'YES';
45207
+ }
45208
+ else {
45209
+ // on bitget hedge mode if the position is long the side is always buy, and if the position is short the side is always sell
45210
+ requestSide = (side === 'buy') ? 'sell' : 'buy';
45211
+ request['tradeSide'] = 'Close';
45212
+ }
44895
45213
  }
44896
45214
  else {
44897
- request['tradeSide'] = 'Open';
45215
+ if (!oneWayMode) {
45216
+ request['tradeSide'] = 'Open';
45217
+ }
44898
45218
  }
44899
45219
  request['side'] = requestSide;
44900
45220
  }
@@ -50096,6 +50416,7 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
50096
50416
  'createMarketBuyOrderWithCost': true,
50097
50417
  'createMarketOrderWithCost': false,
50098
50418
  'createMarketSellOrderWithCost': false,
50419
+ 'createTrailingPercentOrder': true,
50099
50420
  'createOrder': true,
50100
50421
  'createPostOnlyOrder': true,
50101
50422
  'createStopLimitOrder': false,
@@ -53569,14 +53890,13 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
53569
53890
  // "repay_id": "2afcc16d99bd4707818c5a355dc89bed",
53570
53891
  // }
53571
53892
  //
53572
- const timestamp = this.milliseconds();
53573
53893
  return {
53574
53894
  'id': this.safeString2(info, 'borrow_id', 'repay_id'),
53575
53895
  'currency': this.safeCurrencyCode(undefined, currency),
53576
53896
  'amount': undefined,
53577
53897
  'symbol': undefined,
53578
- 'timestamp': timestamp,
53579
- 'datetime': this.iso8601(timestamp),
53898
+ 'timestamp': undefined,
53899
+ 'datetime': undefined,
53580
53900
  'info': info,
53581
53901
  };
53582
53902
  }
@@ -54563,6 +54883,7 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
54563
54883
  'closePosition': true,
54564
54884
  'createOrder': true,
54565
54885
  'createReduceOnlyOrder': true,
54886
+ 'createTrailingAmountOrder': true,
54566
54887
  'editOrder': true,
54567
54888
  'fetchBalance': true,
54568
54889
  'fetchClosedOrders': true,
@@ -78044,6 +78365,7 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
78044
78365
  'closePosition': false,
78045
78366
  'createMarketBuyOrderWithCost': true,
78046
78367
  'createMarketSellOrderWithCost': false,
78368
+ 'createTrailingAmountOrder': true,
78047
78369
  'createOrder': true,
78048
78370
  'createOrders': true,
78049
78371
  'createPostOnlyOrder': true,
@@ -78297,6 +78619,7 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
78297
78619
  'v5/account/wallet-balance': 1,
78298
78620
  'v5/account/borrow-history': 1,
78299
78621
  'v5/account/set-collateral-switch': 5,
78622
+ 'v5/account/set-collateral-switch-batch': 5,
78300
78623
  'v5/account/collateral-info': 1,
78301
78624
  'v5/asset/coin-greeks': 1,
78302
78625
  'v5/account/fee-rate': 10,
@@ -78321,7 +78644,7 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
78321
78644
  'v5/asset/deposit/query-internal-record': 5,
78322
78645
  'v5/asset/deposit/query-address': 10,
78323
78646
  'v5/asset/deposit/query-sub-member-address': 10,
78324
- 'v5/asset/coin/query-info': 25,
78647
+ 'v5/asset/coin/query-info': 28,
78325
78648
  'v5/asset/withdraw/query-record': 10,
78326
78649
  'v5/asset/withdraw/withdrawable-amount': 5,
78327
78650
  // user
@@ -99912,11 +100235,10 @@ class coinlist extends _abstract_coinlist_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
99912
100235
  // "net_liquidation_value_usd": "string"
99913
100236
  // }
99914
100237
  //
99915
- const timestamp = this.milliseconds();
99916
100238
  const result = {
99917
100239
  'info': response,
99918
- 'timestamp': timestamp,
99919
- 'datetime': this.iso8601(timestamp),
100240
+ 'timestamp': undefined,
100241
+ 'datetime': undefined,
99920
100242
  };
99921
100243
  const totalBalances = this.safeValue(response, 'asset_balances', {});
99922
100244
  const usedBalances = this.safeValue(response, 'asset_holds', {});
@@ -104398,11 +104720,10 @@ class coinsph extends _abstract_coinsph_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
104398
104720
  }
104399
104721
  parseBalance(response) {
104400
104722
  const balances = this.safeValue(response, 'balances', []);
104401
- const timestamp = this.milliseconds();
104402
104723
  const result = {
104403
104724
  'info': response,
104404
- 'timestamp': timestamp,
104405
- 'datetime': this.iso8601(timestamp),
104725
+ 'timestamp': undefined,
104726
+ 'datetime': undefined,
104406
104727
  };
104407
104728
  for (let i = 0; i < balances.length; i++) {
104408
104729
  const balance = balances[i];
@@ -114184,6 +114505,7 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
114184
114505
  'cancelOrder': true,
114185
114506
  'cancelOrders': false,
114186
114507
  'createDepositAddress': true,
114508
+ 'createTrailingAmountOrder': true,
114187
114509
  'createOrder': true,
114188
114510
  'createStopLimitOrder': true,
114189
114511
  'createStopMarketOrder': true,
@@ -124929,6 +125251,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
124929
125251
  '{settle}/orders': 0.4,
124930
125252
  '{settle}/batch_orders': 0.4,
124931
125253
  '{settle}/countdown_cancel_all': 0.4,
125254
+ '{settle}/batch_cancel_orders': 0.4,
124932
125255
  '{settle}/price_orders': 0.4,
124933
125256
  },
124934
125257
  'put': {
@@ -125019,11 +125342,21 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
125019
125342
  'collateral/total_amount': 20 / 15,
125020
125343
  'collateral/ltv': 20 / 15,
125021
125344
  'collateral/currencies': 20 / 15,
125345
+ 'multi_collateral/orders': 20 / 15,
125346
+ 'multi_collateral/orders/{order_id}': 20 / 15,
125347
+ 'multi_collateral/repay': 20 / 15,
125348
+ 'multi_collateral/mortgage': 20 / 15,
125349
+ 'multi_collateral/currency_quota': 20 / 15,
125350
+ 'multi_collateral/currencies': 20 / 15,
125351
+ 'multi_collateral/ltv': 20 / 15,
125022
125352
  },
125023
125353
  'post': {
125024
125354
  'collateral/orders': 20 / 15,
125025
125355
  'collateral/repay': 20 / 15,
125026
125356
  'collateral/collaterals': 20 / 15,
125357
+ 'multi_collateral/orders': 20 / 15,
125358
+ 'multi_collateral/repay': 20 / 15,
125359
+ 'multi_collateral/mortgage': 20 / 15,
125027
125360
  },
125028
125361
  },
125029
125362
  'account': {
@@ -129649,11 +129982,19 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
129649
129982
  return this.parseTransfer(response, currency);
129650
129983
  }
129651
129984
  parseTransfer(transfer, currency = undefined) {
129652
- const timestamp = this.milliseconds();
129985
+ //
129986
+ // {
129987
+ // "currency": "BTC",
129988
+ // "from": "spot",
129989
+ // "to": "margin",
129990
+ // "amount": "1",
129991
+ // "currency_pair": "BTC_USDT"
129992
+ // }
129993
+ //
129653
129994
  return {
129654
129995
  'id': this.safeString(transfer, 'tx_id'),
129655
- 'timestamp': timestamp,
129656
- 'datetime': this.iso8601(timestamp),
129996
+ 'timestamp': undefined,
129997
+ 'datetime': undefined,
129657
129998
  'currency': this.safeCurrencyCode(undefined, currency),
129658
129999
  'amount': undefined,
129659
130000
  'fromAccount': undefined,
@@ -136010,11 +136351,10 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
136010
136351
  // "2db6ebab-fb26-4537-9ef8-1a689472d236"
136011
136352
  // ]
136012
136353
  //
136013
- const timestamp = this.milliseconds();
136014
136354
  return {
136015
136355
  'id': this.safeString(transfer, 0),
136016
- 'timestamp': timestamp,
136017
- 'datetime': this.iso8601(timestamp),
136356
+ 'timestamp': undefined,
136357
+ 'datetime': undefined,
136018
136358
  'currency': this.safeCurrencyCode(undefined, currency),
136019
136359
  'amount': undefined,
136020
136360
  'fromAccount': undefined,
@@ -139009,6 +139349,7 @@ class htx extends _abstract_htx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
139009
139349
  'createMarketBuyOrderWithCost': true,
139010
139350
  'createMarketOrderWithCost': false,
139011
139351
  'createMarketSellOrderWithCost': false,
139352
+ 'createTrailingPercentOrder': true,
139012
139353
  'createOrder': true,
139013
139354
  'createOrders': true,
139014
139355
  'createReduceOnlyOrder': false,
@@ -144148,15 +144489,11 @@ class htx extends _abstract_htx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
144148
144489
  }
144149
144490
  }
144150
144491
  if (!isStopLossTriggerOrder && !isTakeProfitTriggerOrder) {
144151
- const leverRate = this.safeIntegerN(params, ['leverRate', 'lever_rate', 'leverage'], 1);
144152
144492
  const reduceOnly = this.safeValue2(params, 'reduceOnly', 'reduce_only', false);
144153
- const openOrClose = (reduceOnly) ? 'close' : 'open';
144154
- const offset = this.safeString(params, 'offset', openOrClose);
144155
- request['offset'] = offset;
144156
144493
  if (reduceOnly) {
144157
144494
  request['reduce_only'] = 1;
144158
144495
  }
144159
- request['lever_rate'] = leverRate;
144496
+ request['lever_rate'] = this.safeIntegerN(params, ['leverRate', 'lever_rate', 'leverage'], 1);
144160
144497
  if (!isTrailingPercentOrder) {
144161
144498
  request['order_price_type'] = type;
144162
144499
  }
@@ -144220,10 +144557,10 @@ class htx extends _abstract_htx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
144220
144557
  response = await this.spotPrivatePostV1OrderOrdersPlace(spotRequest);
144221
144558
  }
144222
144559
  else {
144223
- const contractRequest = this.createContractOrderRequest(symbol, type, side, amount, price, params);
144560
+ let contractRequest = this.createContractOrderRequest(symbol, type, side, amount, price, params);
144224
144561
  if (market['linear']) {
144225
144562
  let marginMode = undefined;
144226
- [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
144563
+ [marginMode, contractRequest] = this.handleMarginModeAndParams('createOrder', contractRequest);
144227
144564
  marginMode = (marginMode === undefined) ? 'cross' : marginMode;
144228
144565
  if (marginMode === 'isolated') {
144229
144566
  if (isStop) {
@@ -149475,13 +149812,12 @@ class huobijp extends _abstract_huobijp_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
149475
149812
  }
149476
149813
  const method = this.options['createOrderMethod'];
149477
149814
  const response = await this[method](this.extend(request, params));
149478
- const timestamp = this.milliseconds();
149479
149815
  const id = this.safeString(response, 'data');
149480
149816
  return this.safeOrder({
149481
149817
  'info': response,
149482
149818
  'id': id,
149483
- 'timestamp': timestamp,
149484
- 'datetime': this.iso8601(timestamp),
149819
+ 'timestamp': undefined,
149820
+ 'datetime': undefined,
149485
149821
  'lastTradeTimestamp': undefined,
149486
149822
  'status': undefined,
149487
149823
  'symbol': symbol,
@@ -153624,6 +153960,7 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
153624
153960
  'createOrder': true,
153625
153961
  'createStopLimitOrder': true,
153626
153962
  'createStopMarketOrder': true,
153963
+ 'createTrailingAmountOrder': true,
153627
153964
  'createStopOrder': true,
153628
153965
  'editOrder': true,
153629
153966
  'fetchBalance': true,
@@ -162319,10 +162656,12 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
162319
162656
  * @name kucoin#fetchBalance
162320
162657
  * @description query for balance and get the amount of funds available for trading or funds locked in orders
162321
162658
  * @see https://docs.kucoin.com/#list-accounts
162659
+ * @see https://www.kucoin.com/docs/rest/account/basic-info/get-account-list-spot-margin-trade_hf
162322
162660
  * @see https://docs.kucoin.com/#query-isolated-margin-account-info
162323
162661
  * @param {object} [params] extra parameters specific to the exchange API endpoint
162324
162662
  * @param {object} [params.marginMode] 'cross' or 'isolated', margin type for fetching margin balance
162325
162663
  * @param {object} [params.type] extra parameters specific to the exchange API endpoint
162664
+ * @param {object} [params.hf] *default if false* if true, the result includes the balance of the high frequency account
162326
162665
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
162327
162666
  */
162328
162667
  await this.loadMarkets();
@@ -162334,8 +162673,13 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
162334
162673
  const defaultType = this.safeString2(this.options, 'fetchBalance', 'defaultType', 'spot');
162335
162674
  const requestedType = this.safeString(params, 'type', defaultType);
162336
162675
  const accountsByType = this.safeValue(this.options, 'accountsByType');
162337
- const type = this.safeString(accountsByType, requestedType, requestedType);
162676
+ let type = this.safeString(accountsByType, requestedType, requestedType);
162338
162677
  params = this.omit(params, 'type');
162678
+ const isHf = this.safeValue(params, 'hf', false);
162679
+ if (isHf) {
162680
+ type = 'trade_hf';
162681
+ }
162682
+ params = this.omit(params, 'hf');
162339
162683
  const [marginMode, query] = this.handleMarginModeAndParams('fetchBalance', params);
162340
162684
  let response = undefined;
162341
162685
  const request = {};
@@ -162417,7 +162761,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
162417
162761
  'datetime': undefined,
162418
162762
  };
162419
162763
  if (isolated) {
162420
- const assets = this.safeValue(data, 'assets', []);
162764
+ const assets = this.safeValue(data, 'assets', data);
162421
162765
  for (let i = 0; i < assets.length; i++) {
162422
162766
  const entry = assets[i];
162423
162767
  const marketId = this.safeString(entry, 'symbol');
@@ -162748,12 +163092,14 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
162748
163092
  * @method
162749
163093
  * @name kucoin#fetchLedger
162750
163094
  * @see https://docs.kucoin.com/#get-account-ledgers
163095
+ * @see https://www.kucoin.com/docs/rest/account/basic-info/get-account-ledgers-trade_hf
163096
+ * @see https://www.kucoin.com/docs/rest/account/basic-info/get-account-ledgers-margin_hf
162751
163097
  * @description fetch the history of changes, actions done by the user or operations that altered balance of the user
162752
- * @see https://docs.kucoin.com/#get-account-ledgers
162753
163098
  * @param {string} code unified currency code, default is undefined
162754
163099
  * @param {int} [since] timestamp in ms of the earliest ledger entry, default is undefined
162755
163100
  * @param {int} [limit] max number of ledger entrys to return, default is undefined
162756
163101
  * @param {object} [params] extra parameters specific to the exchange API endpoint
163102
+ * @param {boolean} [params.hf] default false, when true will fetch ledger entries for the high frequency trading account
162757
163103
  * @param {int} [params.until] the latest time in ms to fetch entries for
162758
163104
  * @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
162759
163105
  * @returns {object} a [ledger structure]{@link https://docs.ccxt.com/#/?id=ledger-structure}
@@ -162762,6 +163108,8 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
162762
163108
  await this.loadAccounts();
162763
163109
  let paginate = false;
162764
163110
  [paginate, params] = this.handleOptionAndParams(params, 'fetchLedger', 'paginate');
163111
+ const isHf = this.safeValue(params, 'hf');
163112
+ params = this.omit(params, 'hf');
162765
163113
  if (paginate) {
162766
163114
  return await this.fetchPaginatedCallDynamic('fetchLedger', code, since, limit, params);
162767
163115
  }
@@ -162782,7 +163130,20 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
162782
163130
  request['currency'] = currency['id'];
162783
163131
  }
162784
163132
  [request, params] = this.handleUntilOption('endAt', request, params);
162785
- const response = await this.privateGetAccountsLedgers(this.extend(request, params));
163133
+ let marginMode = undefined;
163134
+ [marginMode, params] = this.handleMarginModeAndParams('fetchLedger', params);
163135
+ let response = undefined;
163136
+ if (isHf) {
163137
+ if (marginMode !== undefined) {
163138
+ response = await this.privateGetHfMarginAccountLedgers(this.extend(request, params));
163139
+ }
163140
+ else {
163141
+ response = await this.privateGetHfAccountsLedgers(this.extend(request, params));
163142
+ }
163143
+ }
163144
+ else {
163145
+ response = await this.privateGetAccountsLedgers(this.extend(request, params));
163146
+ }
162786
163147
  //
162787
163148
  // {
162788
163149
  // "code":"200000",
@@ -162821,7 +163182,7 @@ class kucoin extends _abstract_kucoin_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
162821
163182
  // }
162822
163183
  //
162823
163184
  const data = this.safeValue(response, 'data');
162824
- const items = this.safeValue(data, 'items');
163185
+ const items = this.safeValue(data, 'items', data);
162825
163186
  return this.parseLedger(items, currency, since, limit);
162826
163187
  }
162827
163188
  calculateRateLimiterCost(api, method, path, params, config = {}) {
@@ -176964,7 +177325,8 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
176964
177325
  // ]
176965
177326
  // }
176966
177327
  //
176967
- orderbook = this.parseOrderBook(response, symbol);
177328
+ const spotTimestamp = this.safeInteger(response, 'timestamp');
177329
+ orderbook = this.parseOrderBook(response, symbol, spotTimestamp);
176968
177330
  orderbook['nonce'] = this.safeInteger(response, 'lastUpdateId');
176969
177331
  }
176970
177332
  else if (market['swap']) {
@@ -189221,6 +189583,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
189221
189583
  'createDepositAddress': false,
189222
189584
  'createMarketBuyOrderWithCost': true,
189223
189585
  'createMarketSellOrderWithCost': true,
189586
+ 'createTrailingPercentOrder': true,
189224
189587
  'createOrder': true,
189225
189588
  'createOrders': true,
189226
189589
  'createPostOnlyOrder': true,
@@ -189340,8 +189703,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
189340
189703
  'referral': {
189341
189704
  // old reflink 0% discount https://www.okx.com/join/1888677
189342
189705
  // new reflink 20% discount https://www.okx.com/join/CCXT2023
189343
- // okx + ccxt campaign reflink with 20% discount https://www.okx.com/activities/ccxt-trade-and-earn?channelid=CCXT2023
189344
- 'url': 'https://www.okx.com/activities/ccxt-trade-and-earn?channelid=CCXT2023',
189706
+ 'url': 'https://www.okx.com/join/CCXT2023',
189345
189707
  'discount': 0.2,
189346
189708
  },
189347
189709
  'test': {
@@ -190398,10 +190760,20 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
190398
190760
  for (let i = 0; i < data.length; i++) {
190399
190761
  const event = data[i];
190400
190762
  const state = this.safeString(event, 'state');
190763
+ update['eta'] = this.safeInteger(event, 'end');
190764
+ update['url'] = this.safeString(event, 'href');
190401
190765
  if (state === 'ongoing') {
190402
- update['eta'] = this.safeInteger(event, 'end');
190403
190766
  update['status'] = 'maintenance';
190404
190767
  }
190768
+ else if (state === 'scheduled') {
190769
+ update['status'] = 'ok';
190770
+ }
190771
+ else if (state === 'completed') {
190772
+ update['status'] = 'ok';
190773
+ }
190774
+ else if (state === 'canceled') {
190775
+ update['status'] = 'ok';
190776
+ }
190405
190777
  }
190406
190778
  return update;
190407
190779
  }
@@ -209066,6 +209438,12 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209066
209438
  'future': 50,
209067
209439
  'delivery': 50, // max 200
209068
209440
  },
209441
+ 'subscriptionLimitByStream': {
209442
+ 'spot': 200,
209443
+ 'margin': 200,
209444
+ 'future': 200,
209445
+ 'delivery': 200,
209446
+ },
209069
209447
  'streamBySubscriptionsHash': {},
209070
209448
  'streamIndex': -1,
209071
209449
  // get updates every 1000ms or 100ms
@@ -209114,7 +209492,7 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209114
209492
  this.options['requestId'][url] = newValue;
209115
209493
  return newValue;
209116
209494
  }
209117
- stream(type, subscriptionHash) {
209495
+ stream(type, subscriptionHash, numSubscriptions = 1) {
209118
209496
  const streamBySubscriptionsHash = this.safeValue(this.options, 'streamBySubscriptionsHash', {});
209119
209497
  let stream = this.safeString(streamBySubscriptionsHash, subscriptionHash);
209120
209498
  if (stream === undefined) {
@@ -209126,6 +209504,17 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209126
209504
  this.options['streamIndex'] = streamIndex;
209127
209505
  stream = this.numberToString(normalizedIndex);
209128
209506
  this.options['streamBySubscriptionsHash'][subscriptionHash] = stream;
209507
+ const subscriptionsByStreams = this.safeValue(this.options, 'numSubscriptionsByStream');
209508
+ if (subscriptionsByStreams === undefined) {
209509
+ this.options['numSubscriptionsByStream'] = {};
209510
+ }
209511
+ const subscriptionsByStream = this.safeInteger(this.options['numSubscriptionsByStream'], stream, 0);
209512
+ const newNumSubscriptions = subscriptionsByStream + numSubscriptions;
209513
+ const subscriptionLimitByStream = this.safeInteger(this.options, 'subscriptionLimitByStream', 200);
209514
+ if (newNumSubscriptions > subscriptionLimitByStream) {
209515
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' reached the limit of subscriptions by stream. Increase the number of streams, or increase the stream limit or subscription limit by stream if the exchange allows.');
209516
+ }
209517
+ this.options['numSubscriptionsByStream'][stream] = subscriptionsByStream + numSubscriptions;
209129
209518
  }
209130
209519
  return stream;
209131
209520
  }
@@ -209196,8 +209585,14 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209196
209585
  type = firstMarket['linear'] ? 'future' : 'delivery';
209197
209586
  }
209198
209587
  const name = 'depth';
209199
- const url = this.urls['api']['ws'][type] + '/' + this.stream(type, 'multipleOrderbook');
209200
- const requestId = this.requestId(url);
209588
+ let streamHash = 'multipleOrderbook';
209589
+ if (symbols !== undefined) {
209590
+ const symbolsLength = symbols.length;
209591
+ if (symbolsLength > 200) {
209592
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' watchOrderBookForSymbols() accepts 200 symbols at most. To watch more symbols call watchOrderBookForSymbols() multiple times');
209593
+ }
209594
+ streamHash += '::' + symbols.join(',');
209595
+ }
209201
209596
  const watchOrderBookRate = this.safeString(this.options, 'watchOrderBookRate', '100');
209202
209597
  const subParams = [];
209203
209598
  const messageHashes = [];
@@ -209209,6 +209604,9 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209209
209604
  const symbolHash = messageHash + '@' + watchOrderBookRate + 'ms';
209210
209605
  subParams.push(symbolHash);
209211
209606
  }
209607
+ const messageHashesLength = messageHashes.length;
209608
+ const url = this.urls['api']['ws'][type] + '/' + this.stream(type, streamHash, messageHashesLength);
209609
+ const requestId = this.requestId(url);
209212
209610
  const request = {
209213
209611
  'method': 'SUBSCRIBE',
209214
209612
  'params': subParams,
@@ -209452,6 +209850,14 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209452
209850
  */
209453
209851
  await this.loadMarkets();
209454
209852
  symbols = this.marketSymbols(symbols, undefined, false, true, true);
209853
+ let streamHash = 'multipleTrades';
209854
+ if (symbols !== undefined) {
209855
+ const symbolsLength = symbols.length;
209856
+ if (symbolsLength > 200) {
209857
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.BadRequest(this.id + ' watchTradesForSymbols() accepts 200 symbols at most. To watch more symbols call watchTradesForSymbols() multiple times');
209858
+ }
209859
+ streamHash += '::' + symbols.join(',');
209860
+ }
209455
209861
  const options = this.safeValue(this.options, 'watchTradesForSymbols', {});
209456
209862
  const name = this.safeString(options, 'name', 'trade');
209457
209863
  const firstMarket = this.market(symbols[0]);
@@ -209467,7 +209873,8 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209467
209873
  subParams.push(currentMessageHash);
209468
209874
  }
209469
209875
  const query = this.omit(params, 'type');
209470
- const url = this.urls['api']['ws'][type] + '/' + this.stream(type, 'multipleTrades');
209876
+ const subParamsLength = subParams.length;
209877
+ const url = this.urls['api']['ws'][type] + '/' + this.stream(type, streamHash, subParamsLength);
209471
209878
  const requestId = this.requestId(url);
209472
209879
  const request = {
209473
209880
  'method': 'SUBSCRIBE',
@@ -209951,30 +210358,30 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209951
210358
  }
209952
210359
  const marketId = this.safeString(message, 's');
209953
210360
  const symbol = this.safeSymbol(marketId, undefined, undefined, marketType);
209954
- const last = this.safeFloat(message, 'c');
209955
- const ticker = {
210361
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
210362
+ const last = this.safeString(message, 'c');
210363
+ return this.safeTicker({
209956
210364
  'symbol': symbol,
209957
210365
  'timestamp': timestamp,
209958
210366
  'datetime': this.iso8601(timestamp),
209959
- 'high': this.safeFloat(message, 'h'),
209960
- 'low': this.safeFloat(message, 'l'),
209961
- 'bid': this.safeFloat(message, 'b'),
209962
- 'bidVolume': this.safeFloat(message, 'B'),
209963
- 'ask': this.safeFloat(message, 'a'),
209964
- 'askVolume': this.safeFloat(message, 'A'),
209965
- 'vwap': this.safeFloat(message, 'w'),
209966
- 'open': this.safeFloat(message, 'o'),
210367
+ 'high': this.safeString(message, 'h'),
210368
+ 'low': this.safeString(message, 'l'),
210369
+ 'bid': this.safeString(message, 'b'),
210370
+ 'bidVolume': this.safeString(message, 'B'),
210371
+ 'ask': this.safeString(message, 'a'),
210372
+ 'askVolume': this.safeString(message, 'A'),
210373
+ 'vwap': this.safeString(message, 'w'),
210374
+ 'open': this.safeString(message, 'o'),
209967
210375
  'close': last,
209968
210376
  'last': last,
209969
- 'previousClose': this.safeFloat(message, 'x'),
209970
- 'change': this.safeFloat(message, 'p'),
209971
- 'percentage': this.safeFloat(message, 'P'),
210377
+ 'previousClose': this.safeString(message, 'x'),
210378
+ 'change': this.safeString(message, 'p'),
210379
+ 'percentage': this.safeString(message, 'P'),
209972
210380
  'average': undefined,
209973
- 'baseVolume': this.safeFloat(message, 'v'),
209974
- 'quoteVolume': this.safeFloat(message, 'q'),
210381
+ 'baseVolume': this.safeString(message, 'v'),
210382
+ 'quoteVolume': this.safeString(message, 'q'),
209975
210383
  'info': message,
209976
- };
209977
- return ticker;
210384
+ }, market);
209978
210385
  }
209979
210386
  handleTicker(client, message) {
209980
210387
  //
@@ -211239,7 +211646,8 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
211239
211646
  market = this.getMarketFromSymbols(symbols);
211240
211647
  messageHash = '::' + symbols.join(',');
211241
211648
  }
211242
- let type = this.handleMarketTypeAndParams('watchPositions', market, params);
211649
+ let type = undefined;
211650
+ [type, params] = this.handleMarketTypeAndParams('watchPositions', market, params);
211243
211651
  if (type === 'spot' || type === 'margin') {
211244
211652
  type = 'future';
211245
211653
  }
@@ -227263,7 +227671,10 @@ class coinbase extends _coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
227263
227671
  }
227264
227672
  const name = 'ticker_batch';
227265
227673
  const tickers = await this.subscribe(name, symbols, params);
227266
- return tickers;
227674
+ if (this.newUpdates) {
227675
+ return tickers;
227676
+ }
227677
+ return this.tickers;
227267
227678
  }
227268
227679
  handleTickers(client, message) {
227269
227680
  //
@@ -272520,11 +272931,11 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272520
272931
  else if ((locked !== undefined) && locked) {
272521
272932
  active = false;
272522
272933
  }
272523
- const maxOnetimeWithdrawal = this.safeNumber(withdrawLimits, 'onetime');
272524
- const maxDailyWithdrawal = this.safeNumber(withdrawLimits, 'daily', maxOnetimeWithdrawal);
272525
- const remainingDailyWithdrawal = this.safeNumber(withdrawLimits, 'remaining_daily', maxDailyWithdrawal);
272934
+ const maxOnetimeWithdrawal = this.safeString(withdrawLimits, 'onetime');
272935
+ const maxDailyWithdrawal = this.safeString(withdrawLimits, 'daily', maxOnetimeWithdrawal);
272936
+ const remainingDailyWithdrawal = this.safeString(withdrawLimits, 'remaining_daily', maxDailyWithdrawal);
272526
272937
  let maxWithdrawLimit = undefined;
272527
- if (remainingDailyWithdrawal > 0) {
272938
+ if (_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringGt(remainingDailyWithdrawal, '0')) {
272528
272939
  maxWithdrawLimit = remainingDailyWithdrawal;
272529
272940
  }
272530
272941
  else {
@@ -272543,7 +272954,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272543
272954
  'limits': {
272544
272955
  'withdraw': {
272545
272956
  'min': this.safeNumber(withdrawLimits, 'minimum'),
272546
- 'max': maxWithdrawLimit,
272957
+ 'max': this.parseNumber(maxWithdrawLimit),
272547
272958
  },
272548
272959
  },
272549
272960
  };
@@ -272603,10 +273014,10 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272603
273014
  const base = this.safeCurrencyCode(baseId);
272604
273015
  const quote = this.safeCurrencyCode(quoteId);
272605
273016
  const state = this.safeString(marketInfo, 'state');
272606
- const bidFee = this.safeNumber(response, 'bid_fee');
272607
- const askFee = this.safeNumber(response, 'ask_fee');
272608
- const fee = Math.max(bidFee, askFee);
272609
- return {
273017
+ const bidFee = this.safeString(response, 'bid_fee');
273018
+ const askFee = this.safeString(response, 'ask_fee');
273019
+ const fee = this.parseNumber(_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringMax(bidFee, askFee));
273020
+ return this.safeMarketStructure({
272610
273021
  'id': marketId,
272611
273022
  'symbol': base + '/' + quote,
272612
273023
  'base': base,
@@ -272655,7 +273066,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272655
273066
  },
272656
273067
  'info': response,
272657
273068
  },
272658
- };
273069
+ });
272659
273070
  }
272660
273071
  async fetchMarkets(params = {}) {
272661
273072
  /**
@@ -272684,7 +273095,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272684
273095
  const [quoteId, baseId] = id.split('-');
272685
273096
  const base = this.safeCurrencyCode(baseId);
272686
273097
  const quote = this.safeCurrencyCode(quoteId);
272687
- return {
273098
+ return this.safeMarketStructure({
272688
273099
  'id': id,
272689
273100
  'symbol': base + '/' + quote,
272690
273101
  'base': base,
@@ -272734,7 +273145,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272734
273145
  },
272735
273146
  'created': undefined,
272736
273147
  'info': market,
272737
- };
273148
+ });
272738
273149
  }
272739
273150
  parseBalance(response) {
272740
273151
  const result = {
@@ -280053,6 +280464,8 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
280053
280464
  'createMarketOrder': false,
280054
280465
  'createMarketOrderWithCost': false,
280055
280466
  'createMarketSellOrderWithCost': false,
280467
+ 'createTrailingAmountOrder': true,
280468
+ 'createTrailingPercentOrder': true,
280056
280469
  'createOrder': true,
280057
280470
  'createReduceOnlyOrder': true,
280058
280471
  'createStopLimitOrder': false,
@@ -292241,7 +292654,7 @@ SOFTWARE.
292241
292654
 
292242
292655
  //-----------------------------------------------------------------------------
292243
292656
  // this is updated by vss.js when building
292244
- const version = '4.2.10';
292657
+ const version = '4.2.12';
292245
292658
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
292246
292659
  //-----------------------------------------------------------------------------
292247
292660