ccxt 4.2.11 → 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 (375) hide show
  1. package/README.md +5 -5
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +640 -261
  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/js/ccxt.d.ts +1 -1
  329. package/js/ccxt.js +1 -1
  330. package/js/src/abstract/bigone.d.ts +18 -0
  331. package/js/src/abstract/binance.d.ts +2 -0
  332. package/js/src/abstract/binancecoinm.d.ts +2 -0
  333. package/js/src/abstract/binanceus.d.ts +2 -0
  334. package/js/src/abstract/binanceusdm.d.ts +2 -0
  335. package/js/src/abstract/bybit.d.ts +1 -0
  336. package/js/src/abstract/gate.d.ts +11 -0
  337. package/js/src/abstract/gateio.d.ts +11 -0
  338. package/js/src/alpaca.js +18 -18
  339. package/js/src/base/Exchange.d.ts +5 -1
  340. package/js/src/base/Exchange.js +101 -12
  341. package/js/src/bigone.d.ts +1 -2
  342. package/js/src/bigone.js +340 -145
  343. package/js/src/binance.js +15 -8
  344. package/js/src/bingx.js +9 -2
  345. package/js/src/bitfinex.d.ts +2 -2
  346. package/js/src/bitfinex.js +2 -3
  347. package/js/src/bitget.js +21 -8
  348. package/js/src/bitmart.d.ts +2 -2
  349. package/js/src/bitmart.js +3 -3
  350. package/js/src/bitmex.js +1 -0
  351. package/js/src/bybit.js +2 -0
  352. package/js/src/coinlist.js +2 -3
  353. package/js/src/coinsph.js +2 -3
  354. package/js/src/deribit.js +1 -0
  355. package/js/src/gate.d.ts +4 -4
  356. package/js/src/gate.js +22 -3
  357. package/js/src/hitbtc.d.ts +4 -4
  358. package/js/src/hitbtc.js +2 -3
  359. package/js/src/htx.js +4 -7
  360. package/js/src/huobijp.js +2 -3
  361. package/js/src/kraken.js +1 -0
  362. package/js/src/mexc.js +2 -1
  363. package/js/src/okx.js +13 -3
  364. package/js/src/pro/binance.d.ts +2 -23
  365. package/js/src/pro/binance.js +58 -22
  366. package/js/src/pro/coinbase.d.ts +2 -2
  367. package/js/src/pro/coinbase.js +4 -1
  368. package/js/src/pro/coinbasepro.d.ts +2 -2
  369. package/js/src/pro/hitbtc.d.ts +2 -2
  370. package/js/src/pro/poloniex.d.ts +2 -2
  371. package/js/src/upbit.d.ts +3 -101
  372. package/js/src/upbit.js +12 -12
  373. package/js/src/woo.js +2 -0
  374. package/package.json +1 -1
  375. package/skip-tests.json +5 -0
@@ -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;
@@ -10731,6 +10766,60 @@ class Exchange {
10731
10766
  async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
10732
10767
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' createOrder() is not supported yet');
10733
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
+ }
10734
10823
  async createMarketOrderWithCost(symbol, side, cost, params = {}) {
10735
10824
  /**
10736
10825
  * @method
@@ -10891,7 +10980,7 @@ class Exchange {
10891
10980
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchFundingHistory() is not supported yet');
10892
10981
  }
10893
10982
  async closePosition(symbol, side = undefined, params = {}) {
10894
- 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');
10895
10984
  }
10896
10985
  async closeAllPositions(params = {}) {
10897
10986
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' closeAllPositions() is not supported yet');
@@ -15264,10 +15353,10 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15264
15353
  'has': {
15265
15354
  'CORS': undefined,
15266
15355
  'spot': true,
15267
- 'margin': undefined,
15356
+ 'margin': false,
15268
15357
  'swap': undefined,
15269
15358
  'future': undefined,
15270
- 'option': undefined,
15359
+ 'option': false,
15271
15360
  'cancelAllOrders': true,
15272
15361
  'cancelOrder': true,
15273
15362
  'createMarketBuyOrderWithCost': true,
@@ -15321,6 +15410,8 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15321
15410
  'api': {
15322
15411
  'public': 'https://{hostname}/api/v3',
15323
15412
  'private': 'https://{hostname}/api/v3/viewer',
15413
+ 'contractPublic': 'https://{hostname}/api/contract/v2',
15414
+ 'contractPrivate': 'https://{hostname}/api/contract/v2',
15324
15415
  'webExchange': 'https://{hostname}/api/',
15325
15416
  },
15326
15417
  'www': 'https://big.one',
@@ -15360,6 +15451,38 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15360
15451
  'transfer',
15361
15452
  ],
15362
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
+ },
15363
15486
  'webExchange': {
15364
15487
  'get': [
15365
15488
  'uc/v2/assets',
@@ -15751,93 +15874,214 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15751
15874
  // ]
15752
15875
  // }
15753
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
+ //
15754
15903
  const markets = this.safeValue(response, 'data', []);
15755
- return this.parseMarkets(markets);
15756
- }
15757
- parseMarket(market) {
15758
- const id = this.safeString(market, 'name');
15759
- const baseAsset = this.safeValue(market, 'base_asset', {});
15760
- const quoteAsset = this.safeValue(market, 'quote_asset', {});
15761
- const baseId = this.safeString(baseAsset, 'symbol');
15762
- const quoteId = this.safeString(quoteAsset, 'symbol');
15763
- const base = this.safeCurrencyCode(baseId);
15764
- const quote = this.safeCurrencyCode(quoteId);
15765
- return {
15766
- 'id': id,
15767
- 'symbol': base + '/' + quote,
15768
- 'base': base,
15769
- 'quote': quote,
15770
- 'settle': undefined,
15771
- 'baseId': baseId,
15772
- 'quoteId': quoteId,
15773
- 'settleId': undefined,
15774
- 'type': 'spot',
15775
- 'spot': true,
15776
- 'margin': false,
15777
- 'swap': false,
15778
- 'future': false,
15779
- 'option': false,
15780
- 'active': true,
15781
- 'contract': false,
15782
- 'linear': undefined,
15783
- 'inverse': undefined,
15784
- 'contractSize': undefined,
15785
- 'expiry': undefined,
15786
- 'expiryDatetime': undefined,
15787
- 'strike': undefined,
15788
- 'optionType': undefined,
15789
- 'precision': {
15790
- 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'base_scale'))),
15791
- 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'quote_scale'))),
15792
- },
15793
- 'limits': {
15794
- 'leverage': {
15795
- 'min': undefined,
15796
- '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'))),
15797
15941
  },
15798
- 'amount': {
15799
- 'min': undefined,
15800
- '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
+ },
15801
15959
  },
15802
- 'price': {
15803
- 'min': undefined,
15804
- '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,
15805
16002
  },
15806
- 'cost': {
15807
- 'min': this.safeNumber(market, 'min_quote_value'),
15808
- '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
+ },
15809
16020
  },
15810
- },
15811
- 'created': undefined,
15812
- 'info': market,
15813
- };
16021
+ 'info': market,
16022
+ }));
16023
+ }
16024
+ return result;
15814
16025
  }
15815
16026
  parseTicker(ticker, market = undefined) {
15816
16027
  //
15817
- // {
15818
- // "asset_pair_name":"ETH-BTC",
15819
- // "bid":{"price":"0.021593","order_count":1,"quantity":"0.20936"},
15820
- // "ask":{"price":"0.021613","order_count":1,"quantity":"2.87064"},
15821
- // "open":"0.021795",
15822
- // "high":"0.021795",
15823
- // "low":"0.021471",
15824
- // "close":"0.021613",
15825
- // "volume":"117078.90431",
15826
- // "daily_change":"-0.000182"
15827
- // }
16028
+ // spot
15828
16029
  //
15829
- const marketId = this.safeString(ticker, 'asset_pair_name');
15830
- const symbol = this.safeSymbol(marketId, market, '-');
15831
- const timestamp = undefined;
15832
- 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');
15833
16077
  const bid = this.safeValue(ticker, 'bid', {});
15834
16078
  const ask = this.safeValue(ticker, 'ask', {});
15835
16079
  return this.safeTicker({
15836
16080
  'symbol': symbol,
15837
- 'timestamp': timestamp,
15838
- 'datetime': this.iso8601(timestamp),
15839
- 'high': this.safeString(ticker, 'high'),
15840
- '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'),
15841
16085
  'bid': this.safeString(bid, 'price'),
15842
16086
  'bidVolume': this.safeString(bid, 'quantity'),
15843
16087
  'ask': this.safeString(ask, 'price'),
@@ -15847,11 +16091,11 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15847
16091
  'close': close,
15848
16092
  'last': close,
15849
16093
  'previousClose': undefined,
15850
- 'change': this.safeString(ticker, 'daily_change'),
16094
+ 'change': this.safeString2(ticker, 'daily_change', 'last24hPriceChange'),
15851
16095
  'percentage': undefined,
15852
16096
  'average': undefined,
15853
- 'baseVolume': this.safeString(ticker, 'volume'),
15854
- 'quoteVolume': undefined,
16097
+ 'baseVolume': this.safeString2(ticker, 'volume', 'volume24h'),
16098
+ 'quoteVolume': this.safeString(ticker, 'volume24hInUsd'),
15855
16099
  'info': ticker,
15856
16100
  }, market);
15857
16101
  }
@@ -15866,83 +16110,123 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
15866
16110
  */
15867
16111
  await this.loadMarkets();
15868
16112
  const market = this.market(symbol);
15869
- const request = {
15870
- 'asset_pair_name': market['id'],
15871
- };
15872
- const response = await this.publicGetAssetPairsAssetPairNameTicker(this.extend(request, params));
15873
- //
15874
- // {
15875
- // "code":0,
15876
- // "data":{
15877
- // "asset_pair_name":"ETH-BTC",
15878
- // "bid":{"price":"0.021593","order_count":1,"quantity":"0.20936"},
15879
- // "ask":{"price":"0.021613","order_count":1,"quantity":"2.87064"},
15880
- // "open":"0.021795",
15881
- // "high":"0.021795",
15882
- // "low":"0.021471",
15883
- // "close":"0.021613",
15884
- // "volume":"117078.90431",
15885
- // "daily_change":"-0.000182"
15886
- // }
15887
- // }
15888
- //
15889
- const ticker = this.safeValue(response, 'data', {});
15890
- 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
+ }
15891
16143
  }
15892
16144
  async fetchTickers(symbols = undefined, params = {}) {
15893
16145
  /**
15894
16146
  * @method
15895
16147
  * @name bigone#fetchTickers
15896
16148
  * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
15897
- * @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
15898
16150
  * @param {object} [params] extra parameters specific to the exchange API endpoint
15899
16151
  * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
15900
16152
  */
15901
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';
15902
16162
  const request = {};
15903
16163
  symbols = this.marketSymbols(symbols);
15904
- if (symbols !== undefined) {
15905
- const ids = this.marketIds(symbols);
15906
- 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', []);
15907
16199
  }
15908
- const response = await this.publicGetAssetPairsTickers(this.extend(request, params));
15909
- //
15910
- // {
15911
- // "code":0,
15912
- // "data":[
15913
- // {
15914
- // "asset_pair_name":"PCX-BTC",
15915
- // "bid":{"price":"0.000234","order_count":1,"quantity":"0.518"},
15916
- // "ask":{"price":"0.0002348","order_count":1,"quantity":"2.348"},
15917
- // "open":"0.0002343",
15918
- // "high":"0.0002348",
15919
- // "low":"0.0002162",
15920
- // "close":"0.0002348",
15921
- // "volume":"12887.016",
15922
- // "daily_change":"0.0000005"
15923
- // },
15924
- // {
15925
- // "asset_pair_name":"GXC-USDT",
15926
- // "bid":{"price":"0.5054","order_count":1,"quantity":"40.53"},
15927
- // "ask":{"price":"0.5055","order_count":1,"quantity":"38.53"},
15928
- // "open":"0.5262",
15929
- // "high":"0.5323",
15930
- // "low":"0.5055",
15931
- // "close":"0.5055",
15932
- // "volume":"603963.05",
15933
- // "daily_change":"-0.0207"
15934
- // }
15935
- // ]
15936
- // }
15937
- //
15938
- const tickers = this.safeValue(response, 'data', []);
15939
- const result = {};
15940
- for (let i = 0; i < tickers.length; i++) {
15941
- const ticker = this.parseTicker(tickers[i]);
15942
- const symbol = ticker['symbol'];
15943
- 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
+ //
15944
16227
  }
15945
- return this.filterByArrayTickers(result, 'symbol', symbols);
16228
+ const tickers = this.parseTickers(data, symbols);
16229
+ return this.filterByArrayTickers(tickers, 'symbol', symbols);
15946
16230
  }
15947
16231
  async fetchTime(params = {}) {
15948
16232
  /**
@@ -16756,7 +17040,7 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
16756
17040
  const baseUrl = this.implodeHostname(this.urls['api'][api]);
16757
17041
  let url = baseUrl + '/' + this.implodeParams(path, params);
16758
17042
  headers = {};
16759
- if (api === 'public' || api === 'webExchange') {
17043
+ if (api === 'public' || api === 'webExchange' || api === 'contractPublic') {
16760
17044
  if (Object.keys(query).length) {
16761
17045
  url += '?' + this.urlencode(query);
16762
17046
  }
@@ -16779,7 +17063,7 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
16779
17063
  }
16780
17064
  else if (method === 'POST') {
16781
17065
  headers['Content-Type'] = 'application/json';
16782
- body = this.json(query);
17066
+ body = query;
16783
17067
  }
16784
17068
  }
16785
17069
  headers['User-Agent'] = 'ccxt/' + this.id + '-' + this.version;
@@ -17173,7 +17457,7 @@ class bigone extends _abstract_bigone_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
17173
17457
  //
17174
17458
  const code = this.safeString(response, 'code');
17175
17459
  const message = this.safeString(response, 'message');
17176
- if (code !== '0') {
17460
+ if ((code !== '0') && (code !== undefined)) {
17177
17461
  const feedback = this.id + ' ' + body;
17178
17462
  this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
17179
17463
  this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
@@ -17244,6 +17528,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
17244
17528
  'createMarketBuyOrderWithCost': true,
17245
17529
  'createMarketOrderWithCost': true,
17246
17530
  'createMarketSellOrderWithCost': true,
17531
+ 'createTrailingPercentOrder': true,
17247
17532
  'createOrder': true,
17248
17533
  'createOrders': true,
17249
17534
  'createPostOnlyOrder': true,
@@ -17426,6 +17711,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
17426
17711
  'asset/convert-transfer/queryByPage': 0.033335,
17427
17712
  'asset/wallet/balance': 6,
17428
17713
  'asset/custody/transfer-history': 6,
17714
+ 'margin/borrow-repay': 1,
17429
17715
  'margin/loan': 1,
17430
17716
  'margin/repay': 1,
17431
17717
  'margin/account': 1,
@@ -17677,6 +17963,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
17677
17963
  'capital/withdraw/apply': 4.0002,
17678
17964
  'capital/contract/convertible-coins': 4.0002,
17679
17965
  'capital/deposit/credit-apply': 0.1,
17966
+ 'margin/borrow-repay': 20.001,
17680
17967
  'margin/transfer': 4.0002,
17681
17968
  'margin/loan': 20.001,
17682
17969
  'margin/repay': 20.001,
@@ -26325,7 +26612,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26325
26612
  * @method
26326
26613
  * @name binance#repayCrossMargin
26327
26614
  * @description repay borrowed margin and interest
26328
- * @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
26329
26616
  * @param {string} code unified currency code of the currency to repay
26330
26617
  * @param {float} amount the amount to repay
26331
26618
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -26337,8 +26624,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26337
26624
  'asset': currency['id'],
26338
26625
  'amount': this.currencyToPrecision(code, amount),
26339
26626
  'isIsolated': 'FALSE',
26627
+ 'type': 'REPAY',
26340
26628
  };
26341
- const response = await this.sapiPostMarginRepay(this.extend(request, params));
26629
+ const response = await this.sapiPostMarginBorrowRepay(this.extend(request, params));
26342
26630
  //
26343
26631
  // {
26344
26632
  // "tranId": 108988250265,
@@ -26352,7 +26640,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26352
26640
  * @method
26353
26641
  * @name binance#repayIsolatedMargin
26354
26642
  * @description repay borrowed margin and interest
26355
- * @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
26356
26644
  * @param {string} symbol unified market symbol, required for isolated margin
26357
26645
  * @param {string} code unified currency code of the currency to repay
26358
26646
  * @param {float} amount the amount to repay
@@ -26367,8 +26655,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26367
26655
  'amount': this.currencyToPrecision(code, amount),
26368
26656
  'symbol': market['id'],
26369
26657
  'isIsolated': 'TRUE',
26658
+ 'type': 'REPAY',
26370
26659
  };
26371
- const response = await this.sapiPostMarginRepay(this.extend(request, params));
26660
+ const response = await this.sapiPostMarginBorrowRepay(this.extend(request, params));
26372
26661
  //
26373
26662
  // {
26374
26663
  // "tranId": 108988250265,
@@ -26382,7 +26671,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26382
26671
  * @method
26383
26672
  * @name binance#borrowCrossMargin
26384
26673
  * @description create a loan to borrow margin
26385
- * @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
26386
26675
  * @param {string} code unified currency code of the currency to borrow
26387
26676
  * @param {float} amount the amount to borrow
26388
26677
  * @param {object} [params] extra parameters specific to the exchange API endpoint
@@ -26394,8 +26683,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26394
26683
  'asset': currency['id'],
26395
26684
  'amount': this.currencyToPrecision(code, amount),
26396
26685
  'isIsolated': 'FALSE',
26686
+ 'type': 'BORROW',
26397
26687
  };
26398
- const response = await this.sapiPostMarginLoan(this.extend(request, params));
26688
+ const response = await this.sapiPostMarginBorrowRepay(this.extend(request, params));
26399
26689
  //
26400
26690
  // {
26401
26691
  // "tranId": 108988250265,
@@ -26409,7 +26699,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26409
26699
  * @method
26410
26700
  * @name binance#borrowIsolatedMargin
26411
26701
  * @description create a loan to borrow margin
26412
- * @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
26413
26703
  * @param {string} symbol unified market symbol, required for isolated margin
26414
26704
  * @param {string} code unified currency code of the currency to borrow
26415
26705
  * @param {float} amount the amount to borrow
@@ -26424,8 +26714,9 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
26424
26714
  'amount': this.currencyToPrecision(code, amount),
26425
26715
  'symbol': market['id'],
26426
26716
  'isIsolated': 'TRUE',
26717
+ 'type': 'BORROW',
26427
26718
  };
26428
- const response = await this.sapiPostMarginLoan(this.extend(request, params));
26719
+ const response = await this.sapiPostMarginBorrowRepay(this.extend(request, params));
26429
26720
  //
26430
26721
  // {
26431
26722
  // "tranId": 108988250265,
@@ -27174,6 +27465,8 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
27174
27465
  'createMarketSellOrderWithCost': true,
27175
27466
  'createOrder': true,
27176
27467
  'createOrders': true,
27468
+ 'createTrailingAmountOrder': true,
27469
+ 'createTrailingPercentOrder': true,
27177
27470
  'fetchBalance': true,
27178
27471
  'fetchClosedOrders': true,
27179
27472
  'fetchCurrencies': true,
@@ -29555,6 +29848,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29555
29848
  'symbol': market['id'],
29556
29849
  };
29557
29850
  const clientOrderIds = this.safeValue(params, 'clientOrderIds');
29851
+ params = this.omit(params, 'clientOrderIds');
29558
29852
  let idsToParse = ids;
29559
29853
  const areClientOrderIds = (clientOrderIds !== undefined);
29560
29854
  if (areClientOrderIds) {
@@ -29573,8 +29867,12 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
29573
29867
  response = await this.spotV1PrivatePostTradeCancelOrders(this.extend(request, params));
29574
29868
  }
29575
29869
  else {
29576
- const swapReqKey = areClientOrderIds ? 'ClientOrderIDList' : 'orderIdList';
29577
- request[swapReqKey] = parsedIds;
29870
+ if (areClientOrderIds) {
29871
+ request['clientOrderIDList'] = this.json(parsedIds);
29872
+ }
29873
+ else {
29874
+ request['orderIdList'] = parsedIds;
29875
+ }
29578
29876
  response = await this.swapV2PrivateDeleteTradeBatchOrders(this.extend(request, params));
29579
29877
  }
29580
29878
  //
@@ -34878,12 +35176,11 @@ class bitfinex extends _abstract_bitfinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
34878
35176
  // "message": "0.0001 Bitcoin transfered from Margin to Exchange"
34879
35177
  // }
34880
35178
  //
34881
- const timestamp = this.milliseconds();
34882
35179
  return {
34883
35180
  'info': transfer,
34884
35181
  'id': undefined,
34885
- 'timestamp': timestamp,
34886
- 'datetime': this.iso8601(timestamp),
35182
+ 'timestamp': undefined,
35183
+ 'datetime': undefined,
34887
35184
  'currency': this.safeCurrencyCode(undefined, currency),
34888
35185
  'amount': undefined,
34889
35186
  'fromAccount': undefined,
@@ -40726,6 +41023,7 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
40726
41023
  'createMarketBuyOrderWithCost': true,
40727
41024
  'createMarketOrderWithCost': false,
40728
41025
  'createMarketSellOrderWithCost': false,
41026
+ 'createTrailingPercentOrder': true,
40729
41027
  'createOrder': true,
40730
41028
  'createOrders': true,
40731
41029
  'createReduceOnlyOrder': false,
@@ -43959,26 +44257,38 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
43959
44257
  'granularity': selectedTimeframe,
43960
44258
  };
43961
44259
  [request, params] = this.handleUntilOption('endTime', request, params);
43962
- if (since !== undefined) {
43963
- request['startTime'] = limit;
43964
- }
43965
44260
  if (limit !== undefined) {
43966
44261
  request['limit'] = limit;
43967
44262
  }
43968
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
+ }
43969
44273
  let response = undefined;
43970
44274
  if (market['spot']) {
43971
- const spotOptions = this.safeValue(options, 'spot', {});
43972
- const defaultSpotMethod = this.safeString(spotOptions, 'method', 'publicSpotGetV2SpotMarketCandles');
43973
- const method = this.safeString(params, 'method', defaultSpotMethod);
43974
- params = this.omit(params, 'method');
43975
44275
  if (method === 'publicSpotGetV2SpotMarketCandles') {
43976
44276
  response = await this.publicSpotGetV2SpotMarketCandles(this.extend(request, params));
43977
44277
  }
43978
44278
  else if (method === 'publicSpotGetV2SpotMarketHistoryCandles') {
43979
44279
  const until = this.safeInteger2(params, 'until', 'till');
43980
44280
  params = this.omit(params, ['until', 'till']);
43981
- 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 {
43982
44292
  request['endTime'] = this.milliseconds();
43983
44293
  }
43984
44294
  response = await this.publicSpotGetV2SpotMarketHistoryCandles(this.extend(request, params));
@@ -50106,6 +50416,7 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
50106
50416
  'createMarketBuyOrderWithCost': true,
50107
50417
  'createMarketOrderWithCost': false,
50108
50418
  'createMarketSellOrderWithCost': false,
50419
+ 'createTrailingPercentOrder': true,
50109
50420
  'createOrder': true,
50110
50421
  'createPostOnlyOrder': true,
50111
50422
  'createStopLimitOrder': false,
@@ -53579,14 +53890,13 @@ class bitmart extends _abstract_bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
53579
53890
  // "repay_id": "2afcc16d99bd4707818c5a355dc89bed",
53580
53891
  // }
53581
53892
  //
53582
- const timestamp = this.milliseconds();
53583
53893
  return {
53584
53894
  'id': this.safeString2(info, 'borrow_id', 'repay_id'),
53585
53895
  'currency': this.safeCurrencyCode(undefined, currency),
53586
53896
  'amount': undefined,
53587
53897
  'symbol': undefined,
53588
- 'timestamp': timestamp,
53589
- 'datetime': this.iso8601(timestamp),
53898
+ 'timestamp': undefined,
53899
+ 'datetime': undefined,
53590
53900
  'info': info,
53591
53901
  };
53592
53902
  }
@@ -54573,6 +54883,7 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
54573
54883
  'closePosition': true,
54574
54884
  'createOrder': true,
54575
54885
  'createReduceOnlyOrder': true,
54886
+ 'createTrailingAmountOrder': true,
54576
54887
  'editOrder': true,
54577
54888
  'fetchBalance': true,
54578
54889
  'fetchClosedOrders': true,
@@ -78054,6 +78365,7 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
78054
78365
  'closePosition': false,
78055
78366
  'createMarketBuyOrderWithCost': true,
78056
78367
  'createMarketSellOrderWithCost': false,
78368
+ 'createTrailingAmountOrder': true,
78057
78369
  'createOrder': true,
78058
78370
  'createOrders': true,
78059
78371
  'createPostOnlyOrder': true,
@@ -78307,6 +78619,7 @@ class bybit extends _abstract_bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
78307
78619
  'v5/account/wallet-balance': 1,
78308
78620
  'v5/account/borrow-history': 1,
78309
78621
  'v5/account/set-collateral-switch': 5,
78622
+ 'v5/account/set-collateral-switch-batch': 5,
78310
78623
  'v5/account/collateral-info': 1,
78311
78624
  'v5/asset/coin-greeks': 1,
78312
78625
  'v5/account/fee-rate': 10,
@@ -99922,11 +100235,10 @@ class coinlist extends _abstract_coinlist_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
99922
100235
  // "net_liquidation_value_usd": "string"
99923
100236
  // }
99924
100237
  //
99925
- const timestamp = this.milliseconds();
99926
100238
  const result = {
99927
100239
  'info': response,
99928
- 'timestamp': timestamp,
99929
- 'datetime': this.iso8601(timestamp),
100240
+ 'timestamp': undefined,
100241
+ 'datetime': undefined,
99930
100242
  };
99931
100243
  const totalBalances = this.safeValue(response, 'asset_balances', {});
99932
100244
  const usedBalances = this.safeValue(response, 'asset_holds', {});
@@ -104408,11 +104720,10 @@ class coinsph extends _abstract_coinsph_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
104408
104720
  }
104409
104721
  parseBalance(response) {
104410
104722
  const balances = this.safeValue(response, 'balances', []);
104411
- const timestamp = this.milliseconds();
104412
104723
  const result = {
104413
104724
  'info': response,
104414
- 'timestamp': timestamp,
104415
- 'datetime': this.iso8601(timestamp),
104725
+ 'timestamp': undefined,
104726
+ 'datetime': undefined,
104416
104727
  };
104417
104728
  for (let i = 0; i < balances.length; i++) {
104418
104729
  const balance = balances[i];
@@ -114194,6 +114505,7 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
114194
114505
  'cancelOrder': true,
114195
114506
  'cancelOrders': false,
114196
114507
  'createDepositAddress': true,
114508
+ 'createTrailingAmountOrder': true,
114197
114509
  'createOrder': true,
114198
114510
  'createStopLimitOrder': true,
114199
114511
  'createStopMarketOrder': true,
@@ -124939,6 +125251,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
124939
125251
  '{settle}/orders': 0.4,
124940
125252
  '{settle}/batch_orders': 0.4,
124941
125253
  '{settle}/countdown_cancel_all': 0.4,
125254
+ '{settle}/batch_cancel_orders': 0.4,
124942
125255
  '{settle}/price_orders': 0.4,
124943
125256
  },
124944
125257
  'put': {
@@ -125029,11 +125342,21 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
125029
125342
  'collateral/total_amount': 20 / 15,
125030
125343
  'collateral/ltv': 20 / 15,
125031
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,
125032
125352
  },
125033
125353
  'post': {
125034
125354
  'collateral/orders': 20 / 15,
125035
125355
  'collateral/repay': 20 / 15,
125036
125356
  'collateral/collaterals': 20 / 15,
125357
+ 'multi_collateral/orders': 20 / 15,
125358
+ 'multi_collateral/repay': 20 / 15,
125359
+ 'multi_collateral/mortgage': 20 / 15,
125037
125360
  },
125038
125361
  },
125039
125362
  'account': {
@@ -129659,11 +129982,19 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
129659
129982
  return this.parseTransfer(response, currency);
129660
129983
  }
129661
129984
  parseTransfer(transfer, currency = undefined) {
129662
- 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
+ //
129663
129994
  return {
129664
129995
  'id': this.safeString(transfer, 'tx_id'),
129665
- 'timestamp': timestamp,
129666
- 'datetime': this.iso8601(timestamp),
129996
+ 'timestamp': undefined,
129997
+ 'datetime': undefined,
129667
129998
  'currency': this.safeCurrencyCode(undefined, currency),
129668
129999
  'amount': undefined,
129669
130000
  'fromAccount': undefined,
@@ -136020,11 +136351,10 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
136020
136351
  // "2db6ebab-fb26-4537-9ef8-1a689472d236"
136021
136352
  // ]
136022
136353
  //
136023
- const timestamp = this.milliseconds();
136024
136354
  return {
136025
136355
  'id': this.safeString(transfer, 0),
136026
- 'timestamp': timestamp,
136027
- 'datetime': this.iso8601(timestamp),
136356
+ 'timestamp': undefined,
136357
+ 'datetime': undefined,
136028
136358
  'currency': this.safeCurrencyCode(undefined, currency),
136029
136359
  'amount': undefined,
136030
136360
  'fromAccount': undefined,
@@ -139019,6 +139349,7 @@ class htx extends _abstract_htx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
139019
139349
  'createMarketBuyOrderWithCost': true,
139020
139350
  'createMarketOrderWithCost': false,
139021
139351
  'createMarketSellOrderWithCost': false,
139352
+ 'createTrailingPercentOrder': true,
139022
139353
  'createOrder': true,
139023
139354
  'createOrders': true,
139024
139355
  'createReduceOnlyOrder': false,
@@ -144158,15 +144489,11 @@ class htx extends _abstract_htx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
144158
144489
  }
144159
144490
  }
144160
144491
  if (!isStopLossTriggerOrder && !isTakeProfitTriggerOrder) {
144161
- const leverRate = this.safeIntegerN(params, ['leverRate', 'lever_rate', 'leverage'], 1);
144162
144492
  const reduceOnly = this.safeValue2(params, 'reduceOnly', 'reduce_only', false);
144163
- const openOrClose = (reduceOnly) ? 'close' : 'open';
144164
- const offset = this.safeString(params, 'offset', openOrClose);
144165
- request['offset'] = offset;
144166
144493
  if (reduceOnly) {
144167
144494
  request['reduce_only'] = 1;
144168
144495
  }
144169
- request['lever_rate'] = leverRate;
144496
+ request['lever_rate'] = this.safeIntegerN(params, ['leverRate', 'lever_rate', 'leverage'], 1);
144170
144497
  if (!isTrailingPercentOrder) {
144171
144498
  request['order_price_type'] = type;
144172
144499
  }
@@ -144230,10 +144557,10 @@ class htx extends _abstract_htx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
144230
144557
  response = await this.spotPrivatePostV1OrderOrdersPlace(spotRequest);
144231
144558
  }
144232
144559
  else {
144233
- const contractRequest = this.createContractOrderRequest(symbol, type, side, amount, price, params);
144560
+ let contractRequest = this.createContractOrderRequest(symbol, type, side, amount, price, params);
144234
144561
  if (market['linear']) {
144235
144562
  let marginMode = undefined;
144236
- [marginMode, params] = this.handleMarginModeAndParams('createOrder', params);
144563
+ [marginMode, contractRequest] = this.handleMarginModeAndParams('createOrder', contractRequest);
144237
144564
  marginMode = (marginMode === undefined) ? 'cross' : marginMode;
144238
144565
  if (marginMode === 'isolated') {
144239
144566
  if (isStop) {
@@ -149485,13 +149812,12 @@ class huobijp extends _abstract_huobijp_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
149485
149812
  }
149486
149813
  const method = this.options['createOrderMethod'];
149487
149814
  const response = await this[method](this.extend(request, params));
149488
- const timestamp = this.milliseconds();
149489
149815
  const id = this.safeString(response, 'data');
149490
149816
  return this.safeOrder({
149491
149817
  'info': response,
149492
149818
  'id': id,
149493
- 'timestamp': timestamp,
149494
- 'datetime': this.iso8601(timestamp),
149819
+ 'timestamp': undefined,
149820
+ 'datetime': undefined,
149495
149821
  'lastTradeTimestamp': undefined,
149496
149822
  'status': undefined,
149497
149823
  'symbol': symbol,
@@ -153634,6 +153960,7 @@ class kraken extends _abstract_kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
153634
153960
  'createOrder': true,
153635
153961
  'createStopLimitOrder': true,
153636
153962
  'createStopMarketOrder': true,
153963
+ 'createTrailingAmountOrder': true,
153637
153964
  'createStopOrder': true,
153638
153965
  'editOrder': true,
153639
153966
  'fetchBalance': true,
@@ -176998,7 +177325,8 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
176998
177325
  // ]
176999
177326
  // }
177000
177327
  //
177001
- orderbook = this.parseOrderBook(response, symbol);
177328
+ const spotTimestamp = this.safeInteger(response, 'timestamp');
177329
+ orderbook = this.parseOrderBook(response, symbol, spotTimestamp);
177002
177330
  orderbook['nonce'] = this.safeInteger(response, 'lastUpdateId');
177003
177331
  }
177004
177332
  else if (market['swap']) {
@@ -189255,6 +189583,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
189255
189583
  'createDepositAddress': false,
189256
189584
  'createMarketBuyOrderWithCost': true,
189257
189585
  'createMarketSellOrderWithCost': true,
189586
+ 'createTrailingPercentOrder': true,
189258
189587
  'createOrder': true,
189259
189588
  'createOrders': true,
189260
189589
  'createPostOnlyOrder': true,
@@ -189374,8 +189703,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
189374
189703
  'referral': {
189375
189704
  // old reflink 0% discount https://www.okx.com/join/1888677
189376
189705
  // new reflink 20% discount https://www.okx.com/join/CCXT2023
189377
- // okx + ccxt campaign reflink with 20% discount https://www.okx.com/activities/ccxt-trade-and-earn?channelid=CCXT2023
189378
- 'url': 'https://www.okx.com/activities/ccxt-trade-and-earn?channelid=CCXT2023',
189706
+ 'url': 'https://www.okx.com/join/CCXT2023',
189379
189707
  'discount': 0.2,
189380
189708
  },
189381
189709
  'test': {
@@ -190432,10 +190760,20 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
190432
190760
  for (let i = 0; i < data.length; i++) {
190433
190761
  const event = data[i];
190434
190762
  const state = this.safeString(event, 'state');
190763
+ update['eta'] = this.safeInteger(event, 'end');
190764
+ update['url'] = this.safeString(event, 'href');
190435
190765
  if (state === 'ongoing') {
190436
- update['eta'] = this.safeInteger(event, 'end');
190437
190766
  update['status'] = 'maintenance';
190438
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
+ }
190439
190777
  }
190440
190778
  return update;
190441
190779
  }
@@ -209100,6 +209438,12 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209100
209438
  'future': 50,
209101
209439
  'delivery': 50, // max 200
209102
209440
  },
209441
+ 'subscriptionLimitByStream': {
209442
+ 'spot': 200,
209443
+ 'margin': 200,
209444
+ 'future': 200,
209445
+ 'delivery': 200,
209446
+ },
209103
209447
  'streamBySubscriptionsHash': {},
209104
209448
  'streamIndex': -1,
209105
209449
  // get updates every 1000ms or 100ms
@@ -209148,7 +209492,7 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209148
209492
  this.options['requestId'][url] = newValue;
209149
209493
  return newValue;
209150
209494
  }
209151
- stream(type, subscriptionHash) {
209495
+ stream(type, subscriptionHash, numSubscriptions = 1) {
209152
209496
  const streamBySubscriptionsHash = this.safeValue(this.options, 'streamBySubscriptionsHash', {});
209153
209497
  let stream = this.safeString(streamBySubscriptionsHash, subscriptionHash);
209154
209498
  if (stream === undefined) {
@@ -209160,6 +209504,17 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209160
209504
  this.options['streamIndex'] = streamIndex;
209161
209505
  stream = this.numberToString(normalizedIndex);
209162
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;
209163
209518
  }
209164
209519
  return stream;
209165
209520
  }
@@ -209230,8 +209585,14 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209230
209585
  type = firstMarket['linear'] ? 'future' : 'delivery';
209231
209586
  }
209232
209587
  const name = 'depth';
209233
- const url = this.urls['api']['ws'][type] + '/' + this.stream(type, 'multipleOrderbook');
209234
- 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
+ }
209235
209596
  const watchOrderBookRate = this.safeString(this.options, 'watchOrderBookRate', '100');
209236
209597
  const subParams = [];
209237
209598
  const messageHashes = [];
@@ -209243,6 +209604,9 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209243
209604
  const symbolHash = messageHash + '@' + watchOrderBookRate + 'ms';
209244
209605
  subParams.push(symbolHash);
209245
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);
209246
209610
  const request = {
209247
209611
  'method': 'SUBSCRIBE',
209248
209612
  'params': subParams,
@@ -209486,6 +209850,14 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209486
209850
  */
209487
209851
  await this.loadMarkets();
209488
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
+ }
209489
209861
  const options = this.safeValue(this.options, 'watchTradesForSymbols', {});
209490
209862
  const name = this.safeString(options, 'name', 'trade');
209491
209863
  const firstMarket = this.market(symbols[0]);
@@ -209501,7 +209873,8 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209501
209873
  subParams.push(currentMessageHash);
209502
209874
  }
209503
209875
  const query = this.omit(params, 'type');
209504
- 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);
209505
209878
  const requestId = this.requestId(url);
209506
209879
  const request = {
209507
209880
  'method': 'SUBSCRIBE',
@@ -209985,30 +210358,30 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
209985
210358
  }
209986
210359
  const marketId = this.safeString(message, 's');
209987
210360
  const symbol = this.safeSymbol(marketId, undefined, undefined, marketType);
209988
- const last = this.safeFloat(message, 'c');
209989
- const ticker = {
210361
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
210362
+ const last = this.safeString(message, 'c');
210363
+ return this.safeTicker({
209990
210364
  'symbol': symbol,
209991
210365
  'timestamp': timestamp,
209992
210366
  'datetime': this.iso8601(timestamp),
209993
- 'high': this.safeFloat(message, 'h'),
209994
- 'low': this.safeFloat(message, 'l'),
209995
- 'bid': this.safeFloat(message, 'b'),
209996
- 'bidVolume': this.safeFloat(message, 'B'),
209997
- 'ask': this.safeFloat(message, 'a'),
209998
- 'askVolume': this.safeFloat(message, 'A'),
209999
- 'vwap': this.safeFloat(message, 'w'),
210000
- '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'),
210001
210375
  'close': last,
210002
210376
  'last': last,
210003
- 'previousClose': this.safeFloat(message, 'x'),
210004
- 'change': this.safeFloat(message, 'p'),
210005
- 'percentage': this.safeFloat(message, 'P'),
210377
+ 'previousClose': this.safeString(message, 'x'),
210378
+ 'change': this.safeString(message, 'p'),
210379
+ 'percentage': this.safeString(message, 'P'),
210006
210380
  'average': undefined,
210007
- 'baseVolume': this.safeFloat(message, 'v'),
210008
- 'quoteVolume': this.safeFloat(message, 'q'),
210381
+ 'baseVolume': this.safeString(message, 'v'),
210382
+ 'quoteVolume': this.safeString(message, 'q'),
210009
210383
  'info': message,
210010
- };
210011
- return ticker;
210384
+ }, market);
210012
210385
  }
210013
210386
  handleTicker(client, message) {
210014
210387
  //
@@ -211273,7 +211646,8 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
211273
211646
  market = this.getMarketFromSymbols(symbols);
211274
211647
  messageHash = '::' + symbols.join(',');
211275
211648
  }
211276
- let type = this.handleMarketTypeAndParams('watchPositions', market, params);
211649
+ let type = undefined;
211650
+ [type, params] = this.handleMarketTypeAndParams('watchPositions', market, params);
211277
211651
  if (type === 'spot' || type === 'margin') {
211278
211652
  type = 'future';
211279
211653
  }
@@ -227297,7 +227671,10 @@ class coinbase extends _coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
227297
227671
  }
227298
227672
  const name = 'ticker_batch';
227299
227673
  const tickers = await this.subscribe(name, symbols, params);
227300
- return tickers;
227674
+ if (this.newUpdates) {
227675
+ return tickers;
227676
+ }
227677
+ return this.tickers;
227301
227678
  }
227302
227679
  handleTickers(client, message) {
227303
227680
  //
@@ -272554,11 +272931,11 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272554
272931
  else if ((locked !== undefined) && locked) {
272555
272932
  active = false;
272556
272933
  }
272557
- const maxOnetimeWithdrawal = this.safeNumber(withdrawLimits, 'onetime');
272558
- const maxDailyWithdrawal = this.safeNumber(withdrawLimits, 'daily', maxOnetimeWithdrawal);
272559
- 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);
272560
272937
  let maxWithdrawLimit = undefined;
272561
- if (remainingDailyWithdrawal > 0) {
272938
+ if (_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringGt(remainingDailyWithdrawal, '0')) {
272562
272939
  maxWithdrawLimit = remainingDailyWithdrawal;
272563
272940
  }
272564
272941
  else {
@@ -272577,7 +272954,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272577
272954
  'limits': {
272578
272955
  'withdraw': {
272579
272956
  'min': this.safeNumber(withdrawLimits, 'minimum'),
272580
- 'max': maxWithdrawLimit,
272957
+ 'max': this.parseNumber(maxWithdrawLimit),
272581
272958
  },
272582
272959
  },
272583
272960
  };
@@ -272637,10 +273014,10 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272637
273014
  const base = this.safeCurrencyCode(baseId);
272638
273015
  const quote = this.safeCurrencyCode(quoteId);
272639
273016
  const state = this.safeString(marketInfo, 'state');
272640
- const bidFee = this.safeNumber(response, 'bid_fee');
272641
- const askFee = this.safeNumber(response, 'ask_fee');
272642
- const fee = Math.max(bidFee, askFee);
272643
- 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({
272644
273021
  'id': marketId,
272645
273022
  'symbol': base + '/' + quote,
272646
273023
  'base': base,
@@ -272689,7 +273066,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272689
273066
  },
272690
273067
  'info': response,
272691
273068
  },
272692
- };
273069
+ });
272693
273070
  }
272694
273071
  async fetchMarkets(params = {}) {
272695
273072
  /**
@@ -272718,7 +273095,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272718
273095
  const [quoteId, baseId] = id.split('-');
272719
273096
  const base = this.safeCurrencyCode(baseId);
272720
273097
  const quote = this.safeCurrencyCode(quoteId);
272721
- return {
273098
+ return this.safeMarketStructure({
272722
273099
  'id': id,
272723
273100
  'symbol': base + '/' + quote,
272724
273101
  'base': base,
@@ -272768,7 +273145,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
272768
273145
  },
272769
273146
  'created': undefined,
272770
273147
  'info': market,
272771
- };
273148
+ });
272772
273149
  }
272773
273150
  parseBalance(response) {
272774
273151
  const result = {
@@ -280087,6 +280464,8 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
280087
280464
  'createMarketOrder': false,
280088
280465
  'createMarketOrderWithCost': false,
280089
280466
  'createMarketSellOrderWithCost': false,
280467
+ 'createTrailingAmountOrder': true,
280468
+ 'createTrailingPercentOrder': true,
280090
280469
  'createOrder': true,
280091
280470
  'createReduceOnlyOrder': true,
280092
280471
  'createStopLimitOrder': false,
@@ -292275,7 +292654,7 @@ SOFTWARE.
292275
292654
 
292276
292655
  //-----------------------------------------------------------------------------
292277
292656
  // this is updated by vss.js when building
292278
- const version = '4.2.11';
292657
+ const version = '4.2.12';
292279
292658
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
292280
292659
  //-----------------------------------------------------------------------------
292281
292660