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
@@ -0,0 +1,2142 @@
1
+ 'use strict';
2
+
3
+ var bigone$1 = require('./abstract/bigone.js');
4
+ var errors = require('./base/errors.js');
5
+ var number = require('./base/functions/number.js');
6
+ var rsa = require('./base/functions/rsa.js');
7
+ var sha256 = require('./static_dependencies/noble-hashes/sha256.js');
8
+ var Precise = require('./base/Precise.js');
9
+
10
+ // ---------------------------------------------------------------------------
11
+ // ---------------------------------------------------------------------------
12
+ /**
13
+ * @class bigone
14
+ * @augments Exchange
15
+ */
16
+ class bigone extends bigone$1 {
17
+ describe() {
18
+ return this.deepExtend(super.describe(), {
19
+ 'id': 'bigone',
20
+ 'name': 'BigONE',
21
+ 'countries': ['CN'],
22
+ 'version': 'v3',
23
+ 'rateLimit': 1200,
24
+ 'has': {
25
+ 'CORS': undefined,
26
+ 'spot': true,
27
+ 'margin': false,
28
+ 'swap': undefined,
29
+ 'future': undefined,
30
+ 'option': false,
31
+ 'cancelAllOrders': true,
32
+ 'cancelOrder': true,
33
+ 'createMarketBuyOrderWithCost': true,
34
+ 'createMarketOrderWithCost': false,
35
+ 'createMarketSellOrderWithCost': false,
36
+ 'createOrder': true,
37
+ 'createPostOnlyOrder': true,
38
+ 'createStopLimitOrder': true,
39
+ 'createStopMarketOrder': true,
40
+ 'createStopOrder': true,
41
+ 'fetchBalance': true,
42
+ 'fetchClosedOrders': true,
43
+ 'fetchCurrencies': true,
44
+ 'fetchDepositAddress': true,
45
+ 'fetchDeposits': true,
46
+ 'fetchMarkets': true,
47
+ 'fetchMyTrades': true,
48
+ 'fetchOHLCV': true,
49
+ 'fetchOpenOrders': true,
50
+ 'fetchOrder': true,
51
+ 'fetchOrderBook': true,
52
+ 'fetchOrders': true,
53
+ 'fetchTicker': true,
54
+ 'fetchTickers': true,
55
+ 'fetchTime': true,
56
+ 'fetchTrades': true,
57
+ 'fetchTradingFee': false,
58
+ 'fetchTradingFees': false,
59
+ 'fetchTransactionFees': false,
60
+ 'fetchWithdrawals': true,
61
+ 'transfer': true,
62
+ 'withdraw': true,
63
+ },
64
+ 'timeframes': {
65
+ '1m': 'min1',
66
+ '5m': 'min5',
67
+ '15m': 'min15',
68
+ '30m': 'min30',
69
+ '1h': 'hour1',
70
+ '3h': 'hour3',
71
+ '4h': 'hour4',
72
+ '6h': 'hour6',
73
+ '12h': 'hour12',
74
+ '1d': 'day1',
75
+ '1w': 'week1',
76
+ '1M': 'month1',
77
+ },
78
+ 'hostname': 'big.one',
79
+ 'urls': {
80
+ 'logo': 'https://user-images.githubusercontent.com/1294454/69354403-1d532180-0c91-11ea-88ed-44c06cefdf87.jpg',
81
+ 'api': {
82
+ 'public': 'https://{hostname}/api/v3',
83
+ 'private': 'https://{hostname}/api/v3/viewer',
84
+ 'contractPublic': 'https://{hostname}/api/contract/v2',
85
+ 'contractPrivate': 'https://{hostname}/api/contract/v2',
86
+ 'webExchange': 'https://{hostname}/api/',
87
+ },
88
+ 'www': 'https://big.one',
89
+ 'doc': 'https://open.big.one/docs/api.html',
90
+ 'fees': 'https://bigone.zendesk.com/hc/en-us/articles/115001933374-BigONE-Fee-Policy',
91
+ 'referral': 'https://b1.run/users/new?code=D3LLBVFT',
92
+ },
93
+ 'api': {
94
+ 'public': {
95
+ 'get': [
96
+ 'ping',
97
+ 'asset_pairs',
98
+ 'asset_pairs/{asset_pair_name}/depth',
99
+ 'asset_pairs/{asset_pair_name}/trades',
100
+ 'asset_pairs/{asset_pair_name}/ticker',
101
+ 'asset_pairs/{asset_pair_name}/candles',
102
+ 'asset_pairs/tickers',
103
+ ],
104
+ },
105
+ 'private': {
106
+ 'get': [
107
+ 'accounts',
108
+ 'fund/accounts',
109
+ 'assets/{asset_symbol}/address',
110
+ 'orders',
111
+ 'orders/{id}',
112
+ 'orders/multi',
113
+ 'trades',
114
+ 'withdrawals',
115
+ 'deposits',
116
+ ],
117
+ 'post': [
118
+ 'orders',
119
+ 'orders/{id}/cancel',
120
+ 'orders/cancel',
121
+ 'withdrawals',
122
+ 'transfer',
123
+ ],
124
+ },
125
+ 'contractPublic': {
126
+ 'get': [
127
+ 'instruments',
128
+ 'depth@{symbol}/snapshot',
129
+ 'instruments/difference',
130
+ 'instruments/prices',
131
+ ],
132
+ },
133
+ 'contractPrivate': {
134
+ 'get': [
135
+ 'accounts',
136
+ 'orders/{id}',
137
+ 'orders',
138
+ 'orders/opening',
139
+ 'orders/count',
140
+ 'orders/opening/count',
141
+ 'trades',
142
+ 'trades/count',
143
+ ],
144
+ 'post': [
145
+ 'orders',
146
+ 'orders/batch',
147
+ ],
148
+ 'put': [
149
+ 'positions/{symbol}/margin',
150
+ 'positions/{symbol}/risk-limit',
151
+ ],
152
+ 'delete': [
153
+ 'orders/{id}',
154
+ 'orders/batch',
155
+ ],
156
+ },
157
+ 'webExchange': {
158
+ 'get': [
159
+ 'uc/v2/assets',
160
+ ],
161
+ },
162
+ },
163
+ 'fees': {
164
+ 'trading': {
165
+ 'maker': this.parseNumber('0.001'),
166
+ 'taker': this.parseNumber('0.001'),
167
+ },
168
+ 'funding': {
169
+ 'withdraw': {},
170
+ },
171
+ },
172
+ 'options': {
173
+ 'createMarketBuyOrderRequiresPrice': true,
174
+ 'accountsByType': {
175
+ 'spot': 'SPOT',
176
+ 'fund': 'FUND',
177
+ 'funding': 'FUND',
178
+ 'future': 'CONTRACT',
179
+ 'swap': 'CONTRACT',
180
+ },
181
+ 'transfer': {
182
+ 'fillResponseFromRequest': true,
183
+ },
184
+ 'exchangeMillisecondsCorrection': -100,
185
+ 'fetchCurrencies': {
186
+ 'webApiEnable': true,
187
+ 'webApiRetries': 5,
188
+ 'webApiMuteFailure': true,
189
+ },
190
+ 'defaultNetwork': 'ERC20',
191
+ 'defaultNetworks': {
192
+ 'USDT': 'TRC20',
193
+ },
194
+ 'networks': {
195
+ 'ABBC': 'ABBC',
196
+ 'ACA': 'Acala',
197
+ 'AE': 'Aeternity',
198
+ 'ALGO': 'Algorand',
199
+ 'APT': 'Aptos',
200
+ 'AR': 'Arweave',
201
+ 'ASTR': 'Astar',
202
+ 'AVAXC': 'Avax',
203
+ 'AVAXX': 'AvaxChain',
204
+ 'BEAM': 'Beam',
205
+ 'BEP20': 'BinanceSmartChain',
206
+ 'BITCI': 'BitciChain',
207
+ 'BTC': 'Bitcoin',
208
+ 'BCH': 'BitcoinCash',
209
+ 'BSV': 'BitcoinSV',
210
+ 'CELO': 'Celo',
211
+ 'CKKB': 'CKB',
212
+ 'ATOM': 'Cosmos',
213
+ 'CRC20': 'CRO',
214
+ 'DASH': 'Dash',
215
+ 'DOGE': 'Dogecoin',
216
+ 'XEC': 'ECash',
217
+ 'EOS': 'EOS',
218
+ 'ETH': 'Ethereum',
219
+ 'ETC': 'EthereumClassic',
220
+ 'ETHW': 'EthereumPow',
221
+ 'FTM': 'Fantom',
222
+ 'FIL': 'Filecoin',
223
+ 'FSN': 'Fusion',
224
+ 'GRIN': 'Grin',
225
+ 'ONE': 'Harmony',
226
+ 'HRC20': 'Hecochain',
227
+ 'HBAR': 'Hedera',
228
+ 'HNT': 'Helium',
229
+ 'ZEN': 'Horizen',
230
+ 'IOST': 'IOST',
231
+ 'IRIS': 'IRIS',
232
+ 'KLAY': 'Klaytn',
233
+ 'KSM': 'Kusama',
234
+ 'LTC': 'Litecoin',
235
+ 'XMR': 'Monero',
236
+ 'GLMR': 'Moonbeam',
237
+ 'NEAR': 'Near',
238
+ 'NEO': 'Neo',
239
+ 'NEON3': 'NeoN3',
240
+ 'OASIS': 'Oasis',
241
+ 'OKC': 'Okexchain',
242
+ 'ONT': 'Ontology',
243
+ 'OPTIMISM': 'Optimism',
244
+ 'DOT': 'Polkadot',
245
+ 'MATIC': 'Polygon',
246
+ 'QTUM': 'Qtum',
247
+ 'REI': 'REI',
248
+ 'XRP': 'Ripple',
249
+ 'SGB': 'SGB',
250
+ 'SDN': 'Shiden',
251
+ 'SOL': 'Solana',
252
+ 'XLM': 'Stellar',
253
+ 'TERA': 'Tera',
254
+ 'XTZ': 'Tezos',
255
+ 'TRC20': 'Tron',
256
+ 'VET': 'Vechain',
257
+ 'VSYS': 'VSystems',
258
+ 'WAX': 'WAX',
259
+ 'ZEC': 'Zcash',
260
+ // todo: uncomment after consensus
261
+ // 'BITSHARES_OLD': 'Bitshares',
262
+ // 'BITSHARES_NEW': 'NewBitshares',
263
+ // 'MOBILECOIN': 'Mobilecoin',
264
+ // 'LBRY': 'Lbry',
265
+ // 'ZEEPIN': 'Zeepin',
266
+ // 'WAYFCOIN': 'Wayfcoin',
267
+ // 'UCACOIN': 'Ucacoin',
268
+ // 'VANILLACASH': 'Vcash',
269
+ // 'LAMDEN': 'Lamden',
270
+ // 'GXSHARES': 'Gxshares',
271
+ // 'ICP': 'Dfinity',
272
+ // 'CLOVER': 'Clover',
273
+ // 'CLASSZZ': 'Classzz',
274
+ // 'CLASSZZ_V2': 'ClasszzV2',
275
+ // 'CHAINX_V2': 'ChainxV2',
276
+ // 'BITCOINDIAMON': 'BitcoinDiamond',
277
+ // 'BITCOINGOLD': 'BitcoinGold',
278
+ // 'BUTTRUSTSYSTEM': 'BitTrustSystem',
279
+ // 'BYTOM_V2': 'BytomV2',
280
+ // 'LIBONOMY': 'Libonomy',
281
+ // 'TERRACLASSIC': 'Terra',
282
+ // 'TERRA': 'Terra2',
283
+ // 'SUPERBITCOIN': 'SuperBitcoin',
284
+ // 'SIACLASSIC': 'Sia',
285
+ // 'SIACOIN': 'SiaCore',
286
+ // 'PARALLELFINANCE': 'Parallel',
287
+ // 'PLCULTIMA': 'Plcu',
288
+ // 'PLCULTIMA2': 'Plcu2',
289
+ // undetermined: XinFin, YAS, Ycash
290
+ },
291
+ },
292
+ 'precisionMode': number.TICK_SIZE,
293
+ 'exceptions': {
294
+ 'exact': {
295
+ '10001': errors.BadRequest,
296
+ '10005': errors.ExchangeError,
297
+ "Amount's scale must greater than AssetPair's base scale": errors.InvalidOrder,
298
+ "Price mulit with amount should larger than AssetPair's min_quote_value": errors.InvalidOrder,
299
+ '10007': errors.BadRequest,
300
+ '10011': errors.ExchangeError,
301
+ '10013': errors.BadSymbol,
302
+ '10014': errors.InsufficientFunds,
303
+ '10403': errors.PermissionDenied,
304
+ '10429': errors.RateLimitExceeded,
305
+ '40004': errors.AuthenticationError,
306
+ '40103': errors.AuthenticationError,
307
+ '40104': errors.AuthenticationError,
308
+ '40301': errors.PermissionDenied,
309
+ '40302': errors.ExchangeError,
310
+ '40601': errors.ExchangeError,
311
+ '40602': errors.ExchangeError,
312
+ '40603': errors.InsufficientFunds,
313
+ '40604': errors.InvalidOrder,
314
+ '40605': errors.InvalidOrder,
315
+ '40120': errors.InvalidOrder,
316
+ '40121': errors.InvalidOrder,
317
+ '60100': errors.BadSymbol, // {"code":60100,"message":"Asset pair is suspended"}
318
+ },
319
+ 'broad': {},
320
+ },
321
+ 'commonCurrencies': {
322
+ 'CRE': 'Cybereits',
323
+ 'FXT': 'FXTTOKEN',
324
+ 'FREE': 'FreeRossDAO',
325
+ 'MBN': 'Mobilian Coin',
326
+ 'ONE': 'BigONE Token',
327
+ },
328
+ });
329
+ }
330
+ async fetchCurrencies(params = {}) {
331
+ /**
332
+ * @method
333
+ * @name bigone#fetchCurrencies
334
+ * @description fetches all available currencies on an exchange
335
+ * @param {dict} [params] extra parameters specific to the exchange API endpoint
336
+ * @returns {dict} an associative dictionary of currencies
337
+ */
338
+ // we use undocumented link (possible, less informative alternative is : https://big.one/api/uc/v3/assets/accounts)
339
+ const data = await this.fetchWebEndpoint('fetchCurrencies', 'webExchangeGetUcV2Assets', true);
340
+ if (data === undefined) {
341
+ return undefined;
342
+ }
343
+ //
344
+ // {
345
+ // "code": "0",
346
+ // "message": "",
347
+ // "data": [
348
+ // {
349
+ // "name": "TetherUS",
350
+ // "symbol": "USDT",
351
+ // "contract_address": "31",
352
+ // "is_deposit_enabled": true,
353
+ // "is_withdrawal_enabled": true,
354
+ // "is_stub": false,
355
+ // "withdrawal_fee": "5.0",
356
+ // "is_fiat": false,
357
+ // "is_memo_required": false,
358
+ // "logo": {
359
+ // "default": "https://assets.peatio.com/assets/v1/color/normal/usdt.png",
360
+ // "white": "https://assets.peatio.com/assets/v1/white/normal/usdt.png",
361
+ // },
362
+ // "info_link": null,
363
+ // "scale": "12",
364
+ // "default_gateway": ..., // one object from "gateways"
365
+ // "gateways": [
366
+ // {
367
+ // "uuid": "f0fa5a85-7f65-428a-b7b7-13aad55c2837",
368
+ // "name": "Mixin",
369
+ // "kind": "CHAIN",
370
+ // "required_confirmations": "0",
371
+ // },
372
+ // {
373
+ // "uuid": "b75446c6-1446-4c8d-b3d1-39f385b0a926",
374
+ // "name": "Ethereum",
375
+ // "kind": "CHAIN",
376
+ // "required_confirmations": "18",
377
+ // },
378
+ // {
379
+ // "uuid": "fe9b1b0b-e55c-4017-b5ce-16f524df5fc0",
380
+ // "name": "Tron",
381
+ // "kind": "CHAIN",
382
+ // "required_confirmations": "1",
383
+ // },
384
+ // ...
385
+ // ],
386
+ // "payments": [],
387
+ // "uuid": "17082d1c-0195-4fb6-8779-2cdbcb9eeb3c",
388
+ // "binding_gateways": [
389
+ // {
390
+ // "guid": "07efc37f-d1ec-4bc9-8339-a745256ea2ba",
391
+ // "contract_address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
392
+ // "is_deposit_enabled": true,
393
+ // "display_name": "Ethereum(ERC20)",
394
+ // "gateway_name": "Ethereum",
395
+ // "min_withdrawal_amount": "0.000001",
396
+ // "min_internal_withdrawal_amount": "0.00000001",
397
+ // "withdrawal_fee": "14",
398
+ // "is_withdrawal_enabled": true,
399
+ // "min_deposit_amount": "0.000001",
400
+ // "is_memo_required": false,
401
+ // "withdrawal_scale": "2",
402
+ // "gateway": {
403
+ // "uuid": "b75446c6-1446-4c8d-b3d1-39f385b0a926",
404
+ // "name": "Ethereum",
405
+ // "kind": "CHAIN",
406
+ // "required_confirmations": "18",
407
+ // },
408
+ // "scale": "12",
409
+ // },
410
+ // {
411
+ // "guid": "b80a4d13-cac7-4319-842d-b33c3bfab8ec",
412
+ // "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
413
+ // "is_deposit_enabled": true,
414
+ // "display_name": "Tron(TRC20)",
415
+ // "gateway_name": "Tron",
416
+ // "min_withdrawal_amount": "0.000001",
417
+ // "min_internal_withdrawal_amount": "0.00000001",
418
+ // "withdrawal_fee": "1",
419
+ // "is_withdrawal_enabled": true,
420
+ // "min_deposit_amount": "0.000001",
421
+ // "is_memo_required": false,
422
+ // "withdrawal_scale": "6",
423
+ // "gateway": {
424
+ // "uuid": "fe9b1b0b-e55c-4017-b5ce-16f524df5fc0",
425
+ // "name": "Tron",
426
+ // "kind": "CHAIN",
427
+ // "required_confirmations": "1",
428
+ // },
429
+ // "scale": "12",
430
+ // },
431
+ // ...
432
+ // ],
433
+ // },
434
+ // ...
435
+ // ],
436
+ // }
437
+ //
438
+ const currenciesData = this.safeValue(data, 'data', []);
439
+ const result = {};
440
+ for (let i = 0; i < currenciesData.length; i++) {
441
+ const currency = currenciesData[i];
442
+ const id = this.safeString(currency, 'symbol');
443
+ const code = this.safeCurrencyCode(id);
444
+ const name = this.safeString(currency, 'name');
445
+ const type = this.safeValue(currency, 'is_fiat') ? 'fiat' : 'crypto';
446
+ const networks = {};
447
+ const chains = this.safeValue(currency, 'binding_gateways', []);
448
+ let currencyMaxPrecision = this.parsePrecision(this.safeString2(currency, 'withdrawal_scale', 'scale'));
449
+ let currencyDepositEnabled = undefined;
450
+ let currencyWithdrawEnabled = undefined;
451
+ for (let j = 0; j < chains.length; j++) {
452
+ const chain = chains[j];
453
+ const networkId = this.safeString(chain, 'gateway_name');
454
+ const networkCode = this.networkIdToCode(networkId);
455
+ const deposit = this.safeValue(chain, 'is_deposit_enabled');
456
+ const withdraw = this.safeValue(chain, 'is_withdrawal_enabled');
457
+ const isActive = (deposit && withdraw);
458
+ const minDepositAmount = this.safeString(chain, 'min_deposit_amount');
459
+ const minWithdrawalAmount = this.safeString(chain, 'min_withdrawal_amount');
460
+ const withdrawalFee = this.safeString(chain, 'withdrawal_fee');
461
+ const precision = this.parsePrecision(this.safeString2(chain, 'withdrawal_scale', 'scale'));
462
+ networks[networkCode] = {
463
+ 'id': networkId,
464
+ 'network': networkCode,
465
+ 'margin': undefined,
466
+ 'deposit': deposit,
467
+ 'withdraw': withdraw,
468
+ 'active': isActive,
469
+ 'fee': this.parseNumber(withdrawalFee),
470
+ 'precision': this.parseNumber(precision),
471
+ 'limits': {
472
+ 'deposit': {
473
+ 'min': minDepositAmount,
474
+ 'max': undefined,
475
+ },
476
+ 'withdraw': {
477
+ 'min': minWithdrawalAmount,
478
+ 'max': undefined,
479
+ },
480
+ },
481
+ 'info': chain,
482
+ };
483
+ // fill global values
484
+ currencyDepositEnabled = (currencyDepositEnabled === undefined) || deposit ? deposit : currencyDepositEnabled;
485
+ currencyWithdrawEnabled = (currencyWithdrawEnabled === undefined) || withdraw ? withdraw : currencyWithdrawEnabled;
486
+ currencyMaxPrecision = (currencyMaxPrecision === undefined) || Precise["default"].stringGt(currencyMaxPrecision, precision) ? precision : currencyMaxPrecision;
487
+ }
488
+ result[code] = {
489
+ 'id': id,
490
+ 'code': code,
491
+ 'info': currency,
492
+ 'name': name,
493
+ 'type': type,
494
+ 'active': undefined,
495
+ 'deposit': currencyDepositEnabled,
496
+ 'withdraw': currencyWithdrawEnabled,
497
+ 'fee': undefined,
498
+ 'precision': this.parseNumber(currencyMaxPrecision),
499
+ 'limits': {
500
+ 'amount': {
501
+ 'min': undefined,
502
+ 'max': undefined,
503
+ },
504
+ 'withdraw': {
505
+ 'min': undefined,
506
+ 'max': undefined,
507
+ },
508
+ },
509
+ 'networks': networks,
510
+ };
511
+ }
512
+ return result;
513
+ }
514
+ async fetchMarkets(params = {}) {
515
+ /**
516
+ * @method
517
+ * @name bigone#fetchMarkets
518
+ * @description retrieves data on all markets for bigone
519
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
520
+ * @returns {object[]} an array of objects representing market data
521
+ */
522
+ const response = await this.publicGetAssetPairs(params);
523
+ //
524
+ // {
525
+ // "code":0,
526
+ // "data":[
527
+ // {
528
+ // "id":"01e48809-b42f-4a38-96b1-c4c547365db1",
529
+ // "name":"PCX-BTC",
530
+ // "quote_scale":7,
531
+ // "quote_asset":{
532
+ // "id":"0df9c3c3-255a-46d7-ab82-dedae169fba9",
533
+ // "symbol":"BTC",
534
+ // "name":"Bitcoin",
535
+ // },
536
+ // "base_asset":{
537
+ // "id":"405484f7-4b03-4378-a9c1-2bd718ecab51",
538
+ // "symbol":"PCX",
539
+ // "name":"ChainX",
540
+ // },
541
+ // "base_scale":3,
542
+ // "min_quote_value":"0.0001",
543
+ // "max_quote_value":"35"
544
+ // },
545
+ // ]
546
+ // }
547
+ //
548
+ const contractResponse = await this.contractPublicGetInstruments(params);
549
+ //
550
+ // [
551
+ // {
552
+ // "usdtPrice": 1.00031998,
553
+ // "symbol": "BTCUSD",
554
+ // "btcPrice": 34700.4,
555
+ // "ethPrice": 1787.83,
556
+ // "nextFundingRate": 0.00010,
557
+ // "fundingRate": 0.00010,
558
+ // "latestPrice": 34708.5,
559
+ // "last24hPriceChange": 0.0321,
560
+ // "indexPrice": 34700.4,
561
+ // "volume24h": 261319063,
562
+ // "turnover24h": 8204.129380685496,
563
+ // "nextFundingTime": 1698285600000,
564
+ // "markPrice": 34702.4646738,
565
+ // "last24hMaxPrice": 35127.5,
566
+ // "volume24hInUsd": 0.0,
567
+ // "openValue": 32.88054722085945,
568
+ // "last24hMinPrice": 33552.0,
569
+ // "openInterest": 1141372.0
570
+ // }
571
+ // ...
572
+ // ]
573
+ //
574
+ const markets = this.safeValue(response, 'data', []);
575
+ const result = [];
576
+ for (let i = 0; i < markets.length; i++) {
577
+ const market = markets[i];
578
+ const baseAsset = this.safeValue(market, 'base_asset', {});
579
+ const quoteAsset = this.safeValue(market, 'quote_asset', {});
580
+ const baseId = this.safeString(baseAsset, 'symbol');
581
+ const quoteId = this.safeString(quoteAsset, 'symbol');
582
+ const base = this.safeCurrencyCode(baseId);
583
+ const quote = this.safeCurrencyCode(quoteId);
584
+ result.push(this.safeMarketStructure({
585
+ 'id': this.safeString(market, 'name'),
586
+ 'uuid': this.safeString(market, 'id'),
587
+ 'symbol': base + '/' + quote,
588
+ 'base': base,
589
+ 'quote': quote,
590
+ 'settle': undefined,
591
+ 'baseId': baseId,
592
+ 'quoteId': quoteId,
593
+ 'settleId': undefined,
594
+ 'type': 'spot',
595
+ 'spot': true,
596
+ 'margin': false,
597
+ 'swap': false,
598
+ 'future': false,
599
+ 'option': false,
600
+ 'active': true,
601
+ 'contract': false,
602
+ 'linear': undefined,
603
+ 'inverse': undefined,
604
+ 'contractSize': undefined,
605
+ 'expiry': undefined,
606
+ 'expiryDatetime': undefined,
607
+ 'strike': undefined,
608
+ 'optionType': undefined,
609
+ 'precision': {
610
+ 'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'base_scale'))),
611
+ 'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'quote_scale'))),
612
+ },
613
+ 'limits': {
614
+ 'leverage': {
615
+ 'min': undefined,
616
+ 'max': undefined,
617
+ },
618
+ 'amount': {
619
+ 'min': undefined,
620
+ 'max': undefined,
621
+ },
622
+ 'price': {
623
+ 'min': undefined,
624
+ 'max': undefined,
625
+ },
626
+ 'cost': {
627
+ 'min': this.safeNumber(market, 'min_quote_value'),
628
+ 'max': this.safeNumber(market, 'max_quote_value'),
629
+ },
630
+ },
631
+ 'created': undefined,
632
+ 'info': market,
633
+ }));
634
+ }
635
+ for (let i = 0; i < contractResponse.length; i++) {
636
+ const market = contractResponse[i];
637
+ const marketId = this.safeString(market, 'symbol');
638
+ const index = marketId.indexOf('USD');
639
+ const baseId = marketId.slice(0, index);
640
+ const quoteId = marketId.slice(index);
641
+ const inverse = (quoteId === 'USD');
642
+ const settleId = inverse ? baseId : quoteId;
643
+ const base = this.safeCurrencyCode(baseId);
644
+ const quote = this.safeCurrencyCode(quoteId);
645
+ const settle = this.safeCurrencyCode(settleId);
646
+ result.push(this.safeMarketStructure({
647
+ 'id': marketId,
648
+ 'symbol': base + '/' + quote + ':' + settle,
649
+ 'base': base,
650
+ 'quote': quote,
651
+ 'settle': settle,
652
+ 'baseId': baseId,
653
+ 'quoteId': quoteId,
654
+ 'settleId': settleId,
655
+ 'type': 'swap',
656
+ 'spot': false,
657
+ 'margin': false,
658
+ 'swap': true,
659
+ 'future': false,
660
+ 'option': false,
661
+ 'active': true,
662
+ 'contract': true,
663
+ 'linear': !inverse,
664
+ 'inverse': inverse,
665
+ 'contractSize': 1,
666
+ 'expiry': undefined,
667
+ 'expiryDatetime': undefined,
668
+ 'strike': undefined,
669
+ 'optionType': undefined,
670
+ 'precision': {
671
+ 'amount': undefined,
672
+ 'price': undefined,
673
+ },
674
+ 'limits': {
675
+ 'leverage': {
676
+ 'min': undefined,
677
+ 'max': undefined,
678
+ },
679
+ 'amount': {
680
+ 'min': undefined,
681
+ 'max': undefined,
682
+ },
683
+ 'price': {
684
+ 'min': undefined,
685
+ 'max': undefined,
686
+ },
687
+ 'cost': {
688
+ 'min': undefined,
689
+ 'max': undefined,
690
+ },
691
+ },
692
+ 'info': market,
693
+ }));
694
+ }
695
+ return result;
696
+ }
697
+ parseTicker(ticker, market = undefined) {
698
+ //
699
+ // spot
700
+ //
701
+ // {
702
+ // "asset_pair_name": "ETH-BTC",
703
+ // "bid": {
704
+ // "price": "0.021593",
705
+ // "order_count": 1,
706
+ // "quantity": "0.20936"
707
+ // },
708
+ // "ask": {
709
+ // "price": "0.021613",
710
+ // "order_count": 1,
711
+ // "quantity": "2.87064"
712
+ // },
713
+ // "open": "0.021795",
714
+ // "high": "0.021795",
715
+ // "low": "0.021471",
716
+ // "close": "0.021613",
717
+ // "volume": "117078.90431",
718
+ // "daily_change": "-0.000182"
719
+ // }
720
+ //
721
+ // contract
722
+ //
723
+ // {
724
+ // "usdtPrice": 1.00031998,
725
+ // "symbol": "BTCUSD",
726
+ // "btcPrice": 34700.4,
727
+ // "ethPrice": 1787.83,
728
+ // "nextFundingRate": 0.00010,
729
+ // "fundingRate": 0.00010,
730
+ // "latestPrice": 34708.5,
731
+ // "last24hPriceChange": 0.0321,
732
+ // "indexPrice": 34700.4,
733
+ // "volume24h": 261319063,
734
+ // "turnover24h": 8204.129380685496,
735
+ // "nextFundingTime": 1698285600000,
736
+ // "markPrice": 34702.4646738,
737
+ // "last24hMaxPrice": 35127.5,
738
+ // "volume24hInUsd": 0.0,
739
+ // "openValue": 32.88054722085945,
740
+ // "last24hMinPrice": 33552.0,
741
+ // "openInterest": 1141372.0
742
+ // }
743
+ //
744
+ const marketType = ('asset_pair_name' in ticker) ? 'spot' : 'swap';
745
+ const marketId = this.safeString2(ticker, 'asset_pair_name', 'symbol');
746
+ const symbol = this.safeSymbol(marketId, market, '-', marketType);
747
+ const close = this.safeString2(ticker, 'close', 'latestPrice');
748
+ const bid = this.safeValue(ticker, 'bid', {});
749
+ const ask = this.safeValue(ticker, 'ask', {});
750
+ return this.safeTicker({
751
+ 'symbol': symbol,
752
+ 'timestamp': undefined,
753
+ 'datetime': undefined,
754
+ 'high': this.safeString2(ticker, 'high', 'last24hMaxPrice'),
755
+ 'low': this.safeString2(ticker, 'low', 'last24hMinPrice'),
756
+ 'bid': this.safeString(bid, 'price'),
757
+ 'bidVolume': this.safeString(bid, 'quantity'),
758
+ 'ask': this.safeString(ask, 'price'),
759
+ 'askVolume': this.safeString(ask, 'quantity'),
760
+ 'vwap': undefined,
761
+ 'open': this.safeString(ticker, 'open'),
762
+ 'close': close,
763
+ 'last': close,
764
+ 'previousClose': undefined,
765
+ 'change': this.safeString2(ticker, 'daily_change', 'last24hPriceChange'),
766
+ 'percentage': undefined,
767
+ 'average': undefined,
768
+ 'baseVolume': this.safeString2(ticker, 'volume', 'volume24h'),
769
+ 'quoteVolume': this.safeString(ticker, 'volume24hInUsd'),
770
+ 'info': ticker,
771
+ }, market);
772
+ }
773
+ async fetchTicker(symbol, params = {}) {
774
+ /**
775
+ * @method
776
+ * @name bigone#fetchTicker
777
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
778
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
779
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
780
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
781
+ */
782
+ await this.loadMarkets();
783
+ const market = this.market(symbol);
784
+ let type = undefined;
785
+ [type, params] = this.handleMarketTypeAndParams('fetchTicker', market, params);
786
+ if (type === 'spot') {
787
+ const request = {
788
+ 'asset_pair_name': market['id'],
789
+ };
790
+ const response = await this.publicGetAssetPairsAssetPairNameTicker(this.extend(request, params));
791
+ //
792
+ // {
793
+ // "code":0,
794
+ // "data":{
795
+ // "asset_pair_name":"ETH-BTC",
796
+ // "bid":{"price":"0.021593","order_count":1,"quantity":"0.20936"},
797
+ // "ask":{"price":"0.021613","order_count":1,"quantity":"2.87064"},
798
+ // "open":"0.021795",
799
+ // "high":"0.021795",
800
+ // "low":"0.021471",
801
+ // "close":"0.021613",
802
+ // "volume":"117078.90431",
803
+ // "daily_change":"-0.000182"
804
+ // }
805
+ // }
806
+ //
807
+ const ticker = this.safeValue(response, 'data', {});
808
+ return this.parseTicker(ticker, market);
809
+ }
810
+ else {
811
+ const tickers = await this.fetchTickers([symbol], params);
812
+ return this.safeValue(tickers, symbol);
813
+ }
814
+ }
815
+ async fetchTickers(symbols = undefined, params = {}) {
816
+ /**
817
+ * @method
818
+ * @name bigone#fetchTickers
819
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
820
+ * @param {string[]} [symbols] unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
821
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
822
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
823
+ */
824
+ await this.loadMarkets();
825
+ let market = undefined;
826
+ const symbol = this.safeString(symbols, 0);
827
+ if (symbol !== undefined) {
828
+ market = this.market(symbol);
829
+ }
830
+ let type = undefined;
831
+ [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
832
+ const isSpot = type === 'spot';
833
+ const request = {};
834
+ symbols = this.marketSymbols(symbols);
835
+ let data = undefined;
836
+ if (isSpot) {
837
+ if (symbols !== undefined) {
838
+ const ids = this.marketIds(symbols);
839
+ request['pair_names'] = ids.join(',');
840
+ }
841
+ const response = await this.publicGetAssetPairsTickers(this.extend(request, params));
842
+ //
843
+ // {
844
+ // "code": 0,
845
+ // "data": [
846
+ // {
847
+ // "asset_pair_name": "PCX-BTC",
848
+ // "bid": {
849
+ // "price": "0.000234",
850
+ // "order_count": 1,
851
+ // "quantity": "0.518"
852
+ // },
853
+ // "ask": {
854
+ // "price": "0.0002348",
855
+ // "order_count": 1,
856
+ // "quantity": "2.348"
857
+ // },
858
+ // "open": "0.0002343",
859
+ // "high": "0.0002348",
860
+ // "low": "0.0002162",
861
+ // "close": "0.0002348",
862
+ // "volume": "12887.016",
863
+ // "daily_change": "0.0000005"
864
+ // },
865
+ // ...
866
+ // ]
867
+ // }
868
+ //
869
+ data = this.safeValue(response, 'data', []);
870
+ }
871
+ else {
872
+ data = await this.contractPublicGetInstruments(params);
873
+ //
874
+ // [
875
+ // {
876
+ // "usdtPrice": 1.00031998,
877
+ // "symbol": "BTCUSD",
878
+ // "btcPrice": 34700.4,
879
+ // "ethPrice": 1787.83,
880
+ // "nextFundingRate": 0.00010,
881
+ // "fundingRate": 0.00010,
882
+ // "latestPrice": 34708.5,
883
+ // "last24hPriceChange": 0.0321,
884
+ // "indexPrice": 34700.4,
885
+ // "volume24h": 261319063,
886
+ // "turnover24h": 8204.129380685496,
887
+ // "nextFundingTime": 1698285600000,
888
+ // "markPrice": 34702.4646738,
889
+ // "last24hMaxPrice": 35127.5,
890
+ // "volume24hInUsd": 0.0,
891
+ // "openValue": 32.88054722085945,
892
+ // "last24hMinPrice": 33552.0,
893
+ // "openInterest": 1141372.0
894
+ // }
895
+ // ...
896
+ // ]
897
+ //
898
+ }
899
+ const tickers = this.parseTickers(data, symbols);
900
+ return this.filterByArrayTickers(tickers, 'symbol', symbols);
901
+ }
902
+ async fetchTime(params = {}) {
903
+ /**
904
+ * @method
905
+ * @name bigone#fetchTime
906
+ * @description fetches the current integer timestamp in milliseconds from the exchange server
907
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
908
+ * @returns {int} the current integer timestamp in milliseconds from the exchange server
909
+ */
910
+ const response = await this.publicGetPing(params);
911
+ //
912
+ // {
913
+ // "data": {
914
+ // "timestamp": 1527665262168391000
915
+ // }
916
+ // }
917
+ //
918
+ const data = this.safeValue(response, 'data', {});
919
+ const timestamp = this.safeInteger(data, 'Timestamp');
920
+ return this.parseToInt(timestamp / 1000000);
921
+ }
922
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
923
+ /**
924
+ * @method
925
+ * @name bigone#fetchOrderBook
926
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
927
+ * @param {string} symbol unified symbol of the market to fetch the order book for
928
+ * @param {int} [limit] the maximum amount of order book entries to return
929
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
930
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
931
+ */
932
+ await this.loadMarkets();
933
+ const market = this.market(symbol);
934
+ const request = {
935
+ 'asset_pair_name': market['id'],
936
+ };
937
+ if (limit !== undefined) {
938
+ request['limit'] = limit; // default 50, max 200
939
+ }
940
+ const response = await this.publicGetAssetPairsAssetPairNameDepth(this.extend(request, params));
941
+ //
942
+ // {
943
+ // "code":0,
944
+ // "data": {
945
+ // "asset_pair_name": "EOS-BTC",
946
+ // "bids": [
947
+ // { "price": "42", "order_count": 4, "quantity": "23.33363711" }
948
+ // ],
949
+ // "asks": [
950
+ // { "price": "45", "order_count": 2, "quantity": "4193.3283464" }
951
+ // ]
952
+ // }
953
+ // }
954
+ //
955
+ const orderbook = this.safeValue(response, 'data', {});
956
+ return this.parseOrderBook(orderbook, market['symbol'], undefined, 'bids', 'asks', 'price', 'quantity');
957
+ }
958
+ parseTrade(trade, market = undefined) {
959
+ //
960
+ // fetchTrades (public)
961
+ //
962
+ // {
963
+ // "id": 38199941,
964
+ // "price": "3378.67",
965
+ // "amount": "0.019812",
966
+ // "taker_side": "ASK",
967
+ // "created_at": "2019-01-29T06:05:56Z"
968
+ // }
969
+ //
970
+ // fetchMyTrades (private)
971
+ //
972
+ // {
973
+ // "id": 10854280,
974
+ // "asset_pair_name": "XIN-USDT",
975
+ // "price": "70",
976
+ // "amount": "1",
977
+ // "taker_side": "ASK",
978
+ // "maker_order_id": 58284908,
979
+ // "taker_order_id": 58284909,
980
+ // "maker_fee": "0.0008",
981
+ // "taker_fee": "0.07",
982
+ // "side": "SELF_TRADING",
983
+ // "inserted_at": "2019-04-16T12:00:01Z"
984
+ // },
985
+ //
986
+ // {
987
+ // "id": 10854263,
988
+ // "asset_pair_name": "XIN-USDT",
989
+ // "price": "75.7",
990
+ // "amount": "12.743149",
991
+ // "taker_side": "BID",
992
+ // "maker_order_id": null,
993
+ // "taker_order_id": 58284888,
994
+ // "maker_fee": null,
995
+ // "taker_fee": "0.0025486298",
996
+ // "side": "BID",
997
+ // "inserted_at": "2019-04-15T06:20:57Z"
998
+ // }
999
+ //
1000
+ const timestamp = this.parse8601(this.safeString2(trade, 'created_at', 'inserted_at'));
1001
+ const priceString = this.safeString(trade, 'price');
1002
+ const amountString = this.safeString(trade, 'amount');
1003
+ const marketId = this.safeString(trade, 'asset_pair_name');
1004
+ market = this.safeMarket(marketId, market, '-');
1005
+ let side = this.safeString(trade, 'side');
1006
+ const takerSide = this.safeString(trade, 'taker_side');
1007
+ let takerOrMaker = undefined;
1008
+ if ((takerSide !== undefined) && (side !== undefined) && (side !== 'SELF_TRADING')) {
1009
+ takerOrMaker = (takerSide === side) ? 'taker' : 'maker';
1010
+ }
1011
+ if (side === undefined) {
1012
+ // taker side is not related to buy/sell side
1013
+ // the following code is probably a mistake
1014
+ side = (takerSide === 'ASK') ? 'sell' : 'buy';
1015
+ }
1016
+ else {
1017
+ if (side === 'BID') {
1018
+ side = 'buy';
1019
+ }
1020
+ else if (side === 'ASK') {
1021
+ side = 'sell';
1022
+ }
1023
+ }
1024
+ const makerOrderId = this.safeString(trade, 'maker_order_id');
1025
+ const takerOrderId = this.safeString(trade, 'taker_order_id');
1026
+ let orderId = undefined;
1027
+ if (makerOrderId !== undefined) {
1028
+ orderId = makerOrderId;
1029
+ }
1030
+ else if (takerOrderId !== undefined) {
1031
+ orderId = takerOrderId;
1032
+ }
1033
+ const id = this.safeString(trade, 'id');
1034
+ const result = {
1035
+ 'id': id,
1036
+ 'timestamp': timestamp,
1037
+ 'datetime': this.iso8601(timestamp),
1038
+ 'symbol': market['symbol'],
1039
+ 'order': orderId,
1040
+ 'type': 'limit',
1041
+ 'side': side,
1042
+ 'takerOrMaker': takerOrMaker,
1043
+ 'price': priceString,
1044
+ 'amount': amountString,
1045
+ 'cost': undefined,
1046
+ 'info': trade,
1047
+ };
1048
+ let makerCurrencyCode = undefined;
1049
+ let takerCurrencyCode = undefined;
1050
+ if (takerOrMaker !== undefined) {
1051
+ if (side === 'buy') {
1052
+ if (takerOrMaker === 'maker') {
1053
+ makerCurrencyCode = market['base'];
1054
+ takerCurrencyCode = market['quote'];
1055
+ }
1056
+ else {
1057
+ makerCurrencyCode = market['quote'];
1058
+ takerCurrencyCode = market['base'];
1059
+ }
1060
+ }
1061
+ else {
1062
+ if (takerOrMaker === 'maker') {
1063
+ makerCurrencyCode = market['quote'];
1064
+ takerCurrencyCode = market['base'];
1065
+ }
1066
+ else {
1067
+ makerCurrencyCode = market['base'];
1068
+ takerCurrencyCode = market['quote'];
1069
+ }
1070
+ }
1071
+ }
1072
+ else if (side === 'SELF_TRADING') {
1073
+ if (takerSide === 'BID') {
1074
+ makerCurrencyCode = market['quote'];
1075
+ takerCurrencyCode = market['base'];
1076
+ }
1077
+ else if (takerSide === 'ASK') {
1078
+ makerCurrencyCode = market['base'];
1079
+ takerCurrencyCode = market['quote'];
1080
+ }
1081
+ }
1082
+ const makerFeeCost = this.safeString(trade, 'maker_fee');
1083
+ const takerFeeCost = this.safeString(trade, 'taker_fee');
1084
+ if (makerFeeCost !== undefined) {
1085
+ if (takerFeeCost !== undefined) {
1086
+ result['fees'] = [
1087
+ { 'cost': makerFeeCost, 'currency': makerCurrencyCode },
1088
+ { 'cost': takerFeeCost, 'currency': takerCurrencyCode },
1089
+ ];
1090
+ }
1091
+ else {
1092
+ result['fee'] = { 'cost': makerFeeCost, 'currency': makerCurrencyCode };
1093
+ }
1094
+ }
1095
+ else if (takerFeeCost !== undefined) {
1096
+ result['fee'] = { 'cost': takerFeeCost, 'currency': takerCurrencyCode };
1097
+ }
1098
+ else {
1099
+ result['fee'] = undefined;
1100
+ }
1101
+ return this.safeTrade(result, market);
1102
+ }
1103
+ async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
1104
+ /**
1105
+ * @method
1106
+ * @name bigone#fetchTrades
1107
+ * @description get the list of most recent trades for a particular symbol
1108
+ * @param {string} symbol unified symbol of the market to fetch trades for
1109
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
1110
+ * @param {int} [limit] the maximum amount of trades to fetch
1111
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1112
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
1113
+ */
1114
+ await this.loadMarkets();
1115
+ const market = this.market(symbol);
1116
+ const request = {
1117
+ 'asset_pair_name': market['id'],
1118
+ };
1119
+ const response = await this.publicGetAssetPairsAssetPairNameTrades(this.extend(request, params));
1120
+ //
1121
+ // {
1122
+ // "code": 0,
1123
+ // "data": [
1124
+ // {
1125
+ // "id": 38199941,
1126
+ // "price": "3378.67",
1127
+ // "amount": "0.019812",
1128
+ // "taker_side": "ASK",
1129
+ // "created_at": "2019-01-29T06:05:56Z"
1130
+ // },
1131
+ // {
1132
+ // "id": 38199934,
1133
+ // "price": "3376.14",
1134
+ // "amount": "0.019384",
1135
+ // "taker_side": "ASK",
1136
+ // "created_at": "2019-01-29T06:05:40Z"
1137
+ // }
1138
+ // ]
1139
+ // }
1140
+ //
1141
+ const trades = this.safeValue(response, 'data', []);
1142
+ return this.parseTrades(trades, market, since, limit);
1143
+ }
1144
+ parseOHLCV(ohlcv, market = undefined) {
1145
+ //
1146
+ // {
1147
+ // "close": "0.021562",
1148
+ // "high": "0.021563",
1149
+ // "low": "0.02156",
1150
+ // "open": "0.021563",
1151
+ // "time": "2019-11-21T07:54:00Z",
1152
+ // "volume": "59.84376"
1153
+ // }
1154
+ //
1155
+ return [
1156
+ this.parse8601(this.safeString(ohlcv, 'time')),
1157
+ this.safeNumber(ohlcv, 'open'),
1158
+ this.safeNumber(ohlcv, 'high'),
1159
+ this.safeNumber(ohlcv, 'low'),
1160
+ this.safeNumber(ohlcv, 'close'),
1161
+ this.safeNumber(ohlcv, 'volume'),
1162
+ ];
1163
+ }
1164
+ async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
1165
+ /**
1166
+ * @method
1167
+ * @name bigone#fetchOHLCV
1168
+ * @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1169
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
1170
+ * @param {string} timeframe the length of time each candle represents
1171
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
1172
+ * @param {int} [limit] the maximum amount of candles to fetch
1173
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1174
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
1175
+ */
1176
+ await this.loadMarkets();
1177
+ const market = this.market(symbol);
1178
+ if (limit === undefined) {
1179
+ limit = 100; // default 100, max 500
1180
+ }
1181
+ const request = {
1182
+ 'asset_pair_name': market['id'],
1183
+ 'period': this.safeString(this.timeframes, timeframe, timeframe),
1184
+ 'limit': limit,
1185
+ };
1186
+ if (since !== undefined) {
1187
+ // const start = this.parseToInt (since / 1000);
1188
+ const duration = this.parseTimeframe(timeframe);
1189
+ const end = this.sum(since, limit * duration * 1000);
1190
+ request['time'] = this.iso8601(end);
1191
+ }
1192
+ const response = await this.publicGetAssetPairsAssetPairNameCandles(this.extend(request, params));
1193
+ //
1194
+ // {
1195
+ // "code": 0,
1196
+ // "data": [
1197
+ // {
1198
+ // "close": "0.021656",
1199
+ // "high": "0.021658",
1200
+ // "low": "0.021652",
1201
+ // "open": "0.021652",
1202
+ // "time": "2019-11-21T09:30:00Z",
1203
+ // "volume": "53.08664"
1204
+ // },
1205
+ // {
1206
+ // "close": "0.021652",
1207
+ // "high": "0.021656",
1208
+ // "low": "0.021652",
1209
+ // "open": "0.021656",
1210
+ // "time": "2019-11-21T09:29:00Z",
1211
+ // "volume": "88.39861"
1212
+ // },
1213
+ // ]
1214
+ // }
1215
+ //
1216
+ const data = this.safeValue(response, 'data', []);
1217
+ return this.parseOHLCVs(data, market, timeframe, since, limit);
1218
+ }
1219
+ parseBalance(response) {
1220
+ const result = {
1221
+ 'info': response,
1222
+ 'timestamp': undefined,
1223
+ 'datetime': undefined,
1224
+ };
1225
+ const balances = this.safeValue(response, 'data', []);
1226
+ for (let i = 0; i < balances.length; i++) {
1227
+ const balance = balances[i];
1228
+ const symbol = this.safeString(balance, 'asset_symbol');
1229
+ const code = this.safeCurrencyCode(symbol);
1230
+ const account = this.account();
1231
+ account['total'] = this.safeString(balance, 'balance');
1232
+ account['used'] = this.safeString(balance, 'locked_balance');
1233
+ result[code] = account;
1234
+ }
1235
+ return this.safeBalance(result);
1236
+ }
1237
+ async fetchBalance(params = {}) {
1238
+ /**
1239
+ * @method
1240
+ * @name bigone#fetchBalance
1241
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1242
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1243
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1244
+ */
1245
+ await this.loadMarkets();
1246
+ const type = this.safeString(params, 'type', '');
1247
+ params = this.omit(params, 'type');
1248
+ let response = undefined;
1249
+ if (type === 'funding' || type === 'fund') {
1250
+ response = await this.privateGetFundAccounts(params);
1251
+ }
1252
+ else {
1253
+ response = await this.privateGetAccounts(params);
1254
+ }
1255
+ //
1256
+ // {
1257
+ // "code":0,
1258
+ // "data":[
1259
+ // {"asset_symbol":"NKC","balance":"0","locked_balance":"0"},
1260
+ // {"asset_symbol":"UBTC","balance":"0","locked_balance":"0"},
1261
+ // {"asset_symbol":"READ","balance":"0","locked_balance":"0"},
1262
+ // ],
1263
+ // }
1264
+ //
1265
+ return this.parseBalance(response);
1266
+ }
1267
+ parseType(type) {
1268
+ const types = {
1269
+ 'STOP_LIMIT': 'limit',
1270
+ 'STOP_MARKET': 'market',
1271
+ 'LIMIT': 'limit',
1272
+ 'MARKET': 'market',
1273
+ };
1274
+ return this.safeString(types, type, type);
1275
+ }
1276
+ parseOrder(order, market = undefined) {
1277
+ //
1278
+ // {
1279
+ // "id": "42154072251",
1280
+ // "asset_pair_name": "SOL-USDT",
1281
+ // "price": "20",
1282
+ // "amount": "0.5",
1283
+ // "filled_amount": "0",
1284
+ // "avg_deal_price": "0",
1285
+ // "side": "ASK",
1286
+ // "state": "PENDING",
1287
+ // "created_at": "2023-09-13T03:42:00Z",
1288
+ // "updated_at": "2023-09-13T03:42:00Z",
1289
+ // "type": "LIMIT",
1290
+ // "stop_price": "0",
1291
+ // "immediate_or_cancel": false,
1292
+ // "post_only": false,
1293
+ // "client_order_id": ''
1294
+ // }
1295
+ //
1296
+ const id = this.safeString(order, 'id');
1297
+ const marketId = this.safeString(order, 'asset_pair_name');
1298
+ const symbol = this.safeSymbol(marketId, market, '-');
1299
+ const timestamp = this.parse8601(this.safeString(order, 'created_at'));
1300
+ let side = this.safeString(order, 'side');
1301
+ if (side === 'BID') {
1302
+ side = 'buy';
1303
+ }
1304
+ else {
1305
+ side = 'sell';
1306
+ }
1307
+ let triggerPrice = this.safeString(order, 'stop_price');
1308
+ if (Precise["default"].stringEq(triggerPrice, '0')) {
1309
+ triggerPrice = undefined;
1310
+ }
1311
+ const immediateOrCancel = this.safeValue(order, 'immediate_or_cancel');
1312
+ let timeInForce = undefined;
1313
+ if (immediateOrCancel) {
1314
+ timeInForce = 'IOC';
1315
+ }
1316
+ const type = this.parseType(this.safeString(order, 'type'));
1317
+ const price = this.safeString(order, 'price');
1318
+ let amount = undefined;
1319
+ let filled = undefined;
1320
+ let cost = undefined;
1321
+ if (type === 'market' && side === 'buy') {
1322
+ cost = this.safeString(order, 'filled_amount');
1323
+ }
1324
+ else {
1325
+ amount = this.safeString(order, 'amount');
1326
+ filled = this.safeString(order, 'filled_amount');
1327
+ }
1328
+ return this.safeOrder({
1329
+ 'info': order,
1330
+ 'id': id,
1331
+ 'clientOrderId': this.safeString(order, 'client_order_id'),
1332
+ 'timestamp': timestamp,
1333
+ 'datetime': this.iso8601(timestamp),
1334
+ 'lastTradeTimestamp': this.parse8601(this.safeString(order, 'updated_at')),
1335
+ 'symbol': symbol,
1336
+ 'type': type,
1337
+ 'timeInForce': timeInForce,
1338
+ 'postOnly': this.safeValue(order, 'post_only'),
1339
+ 'side': side,
1340
+ 'price': price,
1341
+ 'stopPrice': triggerPrice,
1342
+ 'triggerPrice': triggerPrice,
1343
+ 'amount': amount,
1344
+ 'cost': cost,
1345
+ 'average': this.safeString(order, 'avg_deal_price'),
1346
+ 'filled': filled,
1347
+ 'remaining': undefined,
1348
+ 'status': this.parseOrderStatus(this.safeString(order, 'state')),
1349
+ 'fee': undefined,
1350
+ 'trades': undefined,
1351
+ }, market);
1352
+ }
1353
+ async createMarketBuyOrderWithCost(symbol, cost, params = {}) {
1354
+ /**
1355
+ * @method
1356
+ * @name bigone#createMarketBuyOrderWithCost
1357
+ * @description create a market buy order by providing the symbol and cost
1358
+ * @see https://open.big.one/docs/spot_orders.html#create-order
1359
+ * @param {string} symbol unified symbol of the market to create an order in
1360
+ * @param {float} cost how much you want to trade in units of the quote currency
1361
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1362
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1363
+ */
1364
+ await this.loadMarkets();
1365
+ const market = this.market(symbol);
1366
+ if (!market['spot']) {
1367
+ throw new errors.NotSupported(this.id + ' createMarketBuyOrderWithCost() supports spot orders only');
1368
+ }
1369
+ params['createMarketBuyOrderRequiresPrice'] = false;
1370
+ return await this.createOrder(symbol, 'market', 'buy', cost, undefined, params);
1371
+ }
1372
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
1373
+ /**
1374
+ * @method
1375
+ * @name bigone#createOrder
1376
+ * @description create a trade order
1377
+ * @see https://open.big.one/docs/spot_orders.html#create-order
1378
+ * @param {string} symbol unified symbol of the market to create an order in
1379
+ * @param {string} type 'market' or 'limit'
1380
+ * @param {string} side 'buy' or 'sell'
1381
+ * @param {float} amount how much of currency you want to trade in units of base currency
1382
+ * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1383
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1384
+ * @param {float} [params.triggerPrice] the price at which a trigger order is triggered at
1385
+ * @param {bool} [params.postOnly] if true, the order will only be posted to the order book and not executed immediately
1386
+ * @param {string} [params.timeInForce] "GTC", "IOC", or "PO"
1387
+ * @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount
1388
+ *
1389
+ * EXCHANGE SPECIFIC PARAMETERS
1390
+ * @param {string} operator *stop order only* GTE or LTE (default)
1391
+ * @param {string} client_order_id must match ^[a-zA-Z0-9-_]{1,36}$ this regex. client_order_id is unique in 24 hours, If created 24 hours later and the order closed, it will be released and can be reused
1392
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1393
+ */
1394
+ await this.loadMarkets();
1395
+ const market = this.market(symbol);
1396
+ const isBuy = (side === 'buy');
1397
+ const requestSide = isBuy ? 'BID' : 'ASK';
1398
+ let uppercaseType = type.toUpperCase();
1399
+ const isLimit = uppercaseType === 'LIMIT';
1400
+ const exchangeSpecificParam = this.safeValue(params, 'post_only', false);
1401
+ let postOnly = undefined;
1402
+ [postOnly, params] = this.handlePostOnly((uppercaseType === 'MARKET'), exchangeSpecificParam, params);
1403
+ const triggerPrice = this.safeStringN(params, ['triggerPrice', 'stopPrice', 'stop_price']);
1404
+ const request = {
1405
+ 'asset_pair_name': market['id'],
1406
+ 'side': requestSide,
1407
+ 'amount': this.amountToPrecision(symbol, amount), // order amount, string, required
1408
+ // "price": this.priceToPrecision (symbol, price), // order price, string, required
1409
+ // "operator": "GTE", // stop orders only, GTE greater than and equal, LTE less than and equal
1410
+ // "immediate_or_cancel": false, // limit orders only, must be false when post_only is true
1411
+ // "post_only": false, // limit orders only, must be false when immediate_or_cancel is true
1412
+ };
1413
+ if (isLimit || (uppercaseType === 'STOP_LIMIT')) {
1414
+ request['price'] = this.priceToPrecision(symbol, price);
1415
+ if (isLimit) {
1416
+ const timeInForce = this.safeString(params, 'timeInForce');
1417
+ if (timeInForce === 'IOC') {
1418
+ request['immediate_or_cancel'] = true;
1419
+ }
1420
+ if (postOnly) {
1421
+ request['post_only'] = true;
1422
+ }
1423
+ }
1424
+ request['amount'] = this.amountToPrecision(symbol, amount);
1425
+ }
1426
+ else {
1427
+ if (isBuy) {
1428
+ let createMarketBuyOrderRequiresPrice = true;
1429
+ [createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
1430
+ const cost = this.safeNumber(params, 'cost');
1431
+ params = this.omit(params, 'cost');
1432
+ if (createMarketBuyOrderRequiresPrice) {
1433
+ if ((price === undefined) && (cost === undefined)) {
1434
+ throw new errors.InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend in the amount argument');
1435
+ }
1436
+ else {
1437
+ const amountString = this.numberToString(amount);
1438
+ const priceString = this.numberToString(price);
1439
+ const quoteAmount = this.parseToNumeric(Precise["default"].stringMul(amountString, priceString));
1440
+ const costRequest = (cost !== undefined) ? cost : quoteAmount;
1441
+ request['amount'] = this.costToPrecision(symbol, costRequest);
1442
+ }
1443
+ }
1444
+ else {
1445
+ request['amount'] = this.costToPrecision(symbol, amount);
1446
+ }
1447
+ }
1448
+ else {
1449
+ request['amount'] = this.amountToPrecision(symbol, amount);
1450
+ }
1451
+ }
1452
+ if (triggerPrice !== undefined) {
1453
+ request['stop_price'] = this.priceToPrecision(symbol, triggerPrice);
1454
+ request['operator'] = isBuy ? 'GTE' : 'LTE';
1455
+ if (isLimit) {
1456
+ uppercaseType = 'STOP_LIMIT';
1457
+ }
1458
+ else if (uppercaseType === 'MARKET') {
1459
+ uppercaseType = 'STOP_MARKET';
1460
+ }
1461
+ }
1462
+ request['type'] = uppercaseType;
1463
+ params = this.omit(params, ['stop_price', 'stopPrice', 'triggerPrice', 'timeInForce']);
1464
+ const response = await this.privatePostOrders(this.extend(request, params));
1465
+ //
1466
+ // {
1467
+ // "id": 10,
1468
+ // "asset_pair_name": "EOS-BTC",
1469
+ // "price": "10.00",
1470
+ // "amount": "10.00",
1471
+ // "filled_amount": "9.0",
1472
+ // "avg_deal_price": "12.0",
1473
+ // "side": "ASK",
1474
+ // "state": "FILLED",
1475
+ // "created_at":"2019-01-29T06:05:56Z",
1476
+ // "updated_at":"2019-01-29T06:05:56Z"
1477
+ // }
1478
+ //
1479
+ const order = this.safeValue(response, 'data');
1480
+ return this.parseOrder(order, market);
1481
+ }
1482
+ async cancelOrder(id, symbol = undefined, params = {}) {
1483
+ /**
1484
+ * @method
1485
+ * @name bigone#cancelOrder
1486
+ * @description cancels an open order
1487
+ * @param {string} id order id
1488
+ * @param {string} symbol Not used by bigone cancelOrder ()
1489
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1490
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1491
+ */
1492
+ await this.loadMarkets();
1493
+ const request = { 'id': id };
1494
+ const response = await this.privatePostOrdersIdCancel(this.extend(request, params));
1495
+ // {
1496
+ // "id": 10,
1497
+ // "asset_pair_name": "EOS-BTC",
1498
+ // "price": "10.00",
1499
+ // "amount": "10.00",
1500
+ // "filled_amount": "9.0",
1501
+ // "avg_deal_price": "12.0",
1502
+ // "side": "ASK",
1503
+ // "state": "CANCELLED",
1504
+ // "created_at":"2019-01-29T06:05:56Z",
1505
+ // "updated_at":"2019-01-29T06:05:56Z"
1506
+ // }
1507
+ const order = this.safeValue(response, 'data');
1508
+ return this.parseOrder(order);
1509
+ }
1510
+ async cancelAllOrders(symbol = undefined, params = {}) {
1511
+ /**
1512
+ * @method
1513
+ * @name bigone#cancelAllOrders
1514
+ * @description cancel all open orders
1515
+ * @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
1516
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1517
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1518
+ */
1519
+ await this.loadMarkets();
1520
+ const market = this.market(symbol);
1521
+ const request = {
1522
+ 'asset_pair_name': market['id'],
1523
+ };
1524
+ const response = await this.privatePostOrdersCancel(this.extend(request, params));
1525
+ //
1526
+ // {
1527
+ // "code":0,
1528
+ // "data": {
1529
+ // "cancelled":[
1530
+ // 58272370,
1531
+ // 58272377
1532
+ // ],
1533
+ // "failed": []
1534
+ // }
1535
+ // }
1536
+ //
1537
+ return response;
1538
+ }
1539
+ async fetchOrder(id, symbol = undefined, params = {}) {
1540
+ /**
1541
+ * @method
1542
+ * @name bigone#fetchOrder
1543
+ * @description fetches information on an order made by the user
1544
+ * @param {string} symbol not used by bigone fetchOrder
1545
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1546
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1547
+ */
1548
+ await this.loadMarkets();
1549
+ const request = { 'id': id };
1550
+ const response = await this.privateGetOrdersId(this.extend(request, params));
1551
+ const order = this.safeValue(response, 'data', {});
1552
+ return this.parseOrder(order);
1553
+ }
1554
+ async fetchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1555
+ /**
1556
+ * @method
1557
+ * @name bigone#fetchOrders
1558
+ * @description fetches information on multiple orders made by the user
1559
+ * @param {string} symbol unified market symbol of the market orders were made in
1560
+ * @param {int} [since] the earliest time in ms to fetch orders for
1561
+ * @param {int} [limit] the maximum number of order structures to retrieve
1562
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1563
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1564
+ */
1565
+ if (symbol === undefined) {
1566
+ throw new errors.ArgumentsRequired(this.id + ' fetchOrders() requires a symbol argument');
1567
+ }
1568
+ await this.loadMarkets();
1569
+ const market = this.market(symbol);
1570
+ const request = {
1571
+ 'asset_pair_name': market['id'],
1572
+ // 'page_token': 'dxzef', // request page after this page token
1573
+ // 'side': 'ASK', // 'ASK' or 'BID', optional
1574
+ // 'state': 'FILLED', // 'CANCELLED', 'FILLED', 'PENDING'
1575
+ // 'limit' 20, // default 20, max 200
1576
+ };
1577
+ if (limit !== undefined) {
1578
+ request['limit'] = limit; // default 20, max 200
1579
+ }
1580
+ const response = await this.privateGetOrders(this.extend(request, params));
1581
+ //
1582
+ // {
1583
+ // "code":0,
1584
+ // "data": [
1585
+ // {
1586
+ // "id": 10,
1587
+ // "asset_pair_name": "ETH-BTC",
1588
+ // "price": "10.00",
1589
+ // "amount": "10.00",
1590
+ // "filled_amount": "9.0",
1591
+ // "avg_deal_price": "12.0",
1592
+ // "side": "ASK",
1593
+ // "state": "FILLED",
1594
+ // "created_at":"2019-01-29T06:05:56Z",
1595
+ // "updated_at":"2019-01-29T06:05:56Z",
1596
+ // },
1597
+ // ],
1598
+ // "page_token":"dxzef",
1599
+ // }
1600
+ //
1601
+ const orders = this.safeValue(response, 'data', []);
1602
+ return this.parseOrders(orders, market, since, limit);
1603
+ }
1604
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1605
+ /**
1606
+ * @method
1607
+ * @name bigone#fetchMyTrades
1608
+ * @description fetch all trades made by the user
1609
+ * @param {string} symbol unified market symbol
1610
+ * @param {int} [since] the earliest time in ms to fetch trades for
1611
+ * @param {int} [limit] the maximum number of trades structures to retrieve
1612
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1613
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
1614
+ */
1615
+ if (symbol === undefined) {
1616
+ throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
1617
+ }
1618
+ await this.loadMarkets();
1619
+ const market = this.market(symbol);
1620
+ const request = {
1621
+ 'asset_pair_name': market['id'],
1622
+ // 'page_token': 'dxzef', // request page after this page token
1623
+ };
1624
+ if (limit !== undefined) {
1625
+ request['limit'] = limit; // default 20, max 200
1626
+ }
1627
+ const response = await this.privateGetTrades(this.extend(request, params));
1628
+ //
1629
+ // {
1630
+ // "code": 0,
1631
+ // "data": [
1632
+ // {
1633
+ // "id": 10854280,
1634
+ // "asset_pair_name": "XIN-USDT",
1635
+ // "price": "70",
1636
+ // "amount": "1",
1637
+ // "taker_side": "ASK",
1638
+ // "maker_order_id": 58284908,
1639
+ // "taker_order_id": 58284909,
1640
+ // "maker_fee": "0.0008",
1641
+ // "taker_fee": "0.07",
1642
+ // "side": "SELF_TRADING",
1643
+ // "inserted_at": "2019-04-16T12:00:01Z"
1644
+ // },
1645
+ // {
1646
+ // "id": 10854263,
1647
+ // "asset_pair_name": "XIN-USDT",
1648
+ // "price": "75.7",
1649
+ // "amount": "12.743149",
1650
+ // "taker_side": "BID",
1651
+ // "maker_order_id": null,
1652
+ // "taker_order_id": 58284888,
1653
+ // "maker_fee": null,
1654
+ // "taker_fee": "0.0025486298",
1655
+ // "side": "BID",
1656
+ // "inserted_at": "2019-04-15T06:20:57Z"
1657
+ // }
1658
+ // ],
1659
+ // "page_token":"dxfv"
1660
+ // }
1661
+ //
1662
+ const trades = this.safeValue(response, 'data', []);
1663
+ return this.parseTrades(trades, market, since, limit);
1664
+ }
1665
+ parseOrderStatus(status) {
1666
+ const statuses = {
1667
+ 'PENDING': 'open',
1668
+ 'FILLED': 'closed',
1669
+ 'CANCELLED': 'canceled',
1670
+ };
1671
+ return this.safeString(statuses, status);
1672
+ }
1673
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1674
+ /**
1675
+ * @method
1676
+ * @name bigone#fetchOpenOrders
1677
+ * @description fetch all unfilled currently open orders
1678
+ * @param {string} symbol unified market symbol
1679
+ * @param {int} [since] the earliest time in ms to fetch open orders for
1680
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
1681
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1682
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1683
+ */
1684
+ const request = {
1685
+ 'state': 'PENDING',
1686
+ };
1687
+ return await this.fetchOrders(symbol, since, limit, this.extend(request, params));
1688
+ }
1689
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
1690
+ /**
1691
+ * @method
1692
+ * @name bigone#fetchClosedOrders
1693
+ * @description fetches information on multiple closed orders made by the user
1694
+ * @param {string} symbol unified market symbol of the market orders were made in
1695
+ * @param {int} [since] the earliest time in ms to fetch orders for
1696
+ * @param {int} [limit] the maximum number of order structures to retrieve
1697
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1698
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
1699
+ */
1700
+ const request = {
1701
+ 'state': 'FILLED',
1702
+ };
1703
+ return await this.fetchOrders(symbol, since, limit, this.extend(request, params));
1704
+ }
1705
+ nonce() {
1706
+ const exchangeTimeCorrection = this.safeInteger(this.options, 'exchangeMillisecondsCorrection', 0) * 1000000;
1707
+ return this.sum(this.microseconds() * 1000, exchangeTimeCorrection);
1708
+ }
1709
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
1710
+ const query = this.omit(params, this.extractParams(path));
1711
+ const baseUrl = this.implodeHostname(this.urls['api'][api]);
1712
+ let url = baseUrl + '/' + this.implodeParams(path, params);
1713
+ headers = {};
1714
+ if (api === 'public' || api === 'webExchange' || api === 'contractPublic') {
1715
+ if (Object.keys(query).length) {
1716
+ url += '?' + this.urlencode(query);
1717
+ }
1718
+ }
1719
+ else {
1720
+ this.checkRequiredCredentials();
1721
+ const nonce = this.nonce().toString();
1722
+ const request = {
1723
+ 'type': 'OpenAPIV2',
1724
+ 'sub': this.apiKey,
1725
+ 'nonce': nonce,
1726
+ // 'recv_window': '30', // default 30
1727
+ };
1728
+ const token = rsa.jwt(request, this.encode(this.secret), sha256.sha256);
1729
+ headers['Authorization'] = 'Bearer ' + token;
1730
+ if (method === 'GET') {
1731
+ if (Object.keys(query).length) {
1732
+ url += '?' + this.urlencode(query);
1733
+ }
1734
+ }
1735
+ else if (method === 'POST') {
1736
+ headers['Content-Type'] = 'application/json';
1737
+ body = query;
1738
+ }
1739
+ }
1740
+ headers['User-Agent'] = 'ccxt/' + this.id + '-' + this.version;
1741
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
1742
+ }
1743
+ async fetchDepositAddress(code, params = {}) {
1744
+ /**
1745
+ * @method
1746
+ * @name bigone#fetchDepositAddress
1747
+ * @description fetch the deposit address for a currency associated with this account
1748
+ * @param {string} code unified currency code
1749
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1750
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
1751
+ */
1752
+ await this.loadMarkets();
1753
+ const currency = this.currency(code);
1754
+ const request = {
1755
+ 'asset_symbol': currency['id'],
1756
+ };
1757
+ const [networkCode, paramsOmitted] = this.handleNetworkCodeAndParams(params);
1758
+ const response = await this.privateGetAssetsAssetSymbolAddress(this.extend(request, paramsOmitted));
1759
+ //
1760
+ // the actual response format is not the same as the documented one
1761
+ // the data key contains an array in the actual response
1762
+ //
1763
+ // {
1764
+ // "code":0,
1765
+ // "message":"",
1766
+ // "data":[
1767
+ // {
1768
+ // "id":5521878,
1769
+ // "chain":"Bitcoin",
1770
+ // "value":"1GbmyKoikhpiQVZ1C9sbF17mTyvBjeobVe",
1771
+ // "memo":""
1772
+ // }
1773
+ // ]
1774
+ // }
1775
+ //
1776
+ const data = this.safeValue(response, 'data', []);
1777
+ const dataLength = data.length;
1778
+ if (dataLength < 1) {
1779
+ throw new errors.ExchangeError(this.id + ' fetchDepositAddress() returned empty address response');
1780
+ }
1781
+ const chainsIndexedById = this.indexBy(data, 'chain');
1782
+ const selectedNetworkId = this.selectNetworkIdFromRawNetworks(code, networkCode, chainsIndexedById);
1783
+ const addressObject = this.safeValue(chainsIndexedById, selectedNetworkId, {});
1784
+ const address = this.safeString(addressObject, 'value');
1785
+ const tag = this.safeString(addressObject, 'memo');
1786
+ this.checkAddress(address);
1787
+ return {
1788
+ 'currency': code,
1789
+ 'address': address,
1790
+ 'tag': tag,
1791
+ 'network': this.networkIdToCode(selectedNetworkId),
1792
+ 'info': response,
1793
+ };
1794
+ }
1795
+ parseTransactionStatus(status) {
1796
+ const statuses = {
1797
+ // what are other statuses here?
1798
+ 'WITHHOLD': 'ok',
1799
+ 'UNCONFIRMED': 'pending',
1800
+ 'CONFIRMED': 'ok',
1801
+ 'COMPLETED': 'ok',
1802
+ 'PENDING': 'pending',
1803
+ };
1804
+ return this.safeString(statuses, status, status);
1805
+ }
1806
+ parseTransaction(transaction, currency = undefined) {
1807
+ //
1808
+ // fetchDeposits
1809
+ //
1810
+ // {
1811
+ // "amount": "25.0",
1812
+ // "asset_symbol": "BTS"
1813
+ // "confirms": 100,
1814
+ // "id": 5,
1815
+ // "inserted_at": "2018-02-16T11:39:58.000Z",
1816
+ // "is_internal": false,
1817
+ // "kind": "default",
1818
+ // "memo": "",
1819
+ // "state": "WITHHOLD",
1820
+ // "txid": "72e03037d144dae3d32b68b5045462b1049a0755",
1821
+ // "updated_at": "2018-11-09T10:20:09.000Z",
1822
+ // }
1823
+ //
1824
+ // fetchWithdrawals
1825
+ //
1826
+ // {
1827
+ // "amount": "5",
1828
+ // "asset_symbol": "ETH",
1829
+ // "completed_at": "2018-03-15T16:13:45.610463Z",
1830
+ // "customer_id": "10",
1831
+ // "id": 10,
1832
+ // "inserted_at": "2018-03-15T16:13:45.610463Z",
1833
+ // "is_internal": true,
1834
+ // "note": "2018-03-15T16:13:45.610463Z",
1835
+ // "state": "CONFIRMED",
1836
+ // "target_address": "0x4643bb6b393ac20a6175c713175734a72517c63d6f7"
1837
+ // "txid": "0x4643bb6b393ac20a6175c713175734a72517c63d6f73a3ca90a15356f2e967da0",
1838
+ // }
1839
+ //
1840
+ // withdraw
1841
+ //
1842
+ // {
1843
+ // "id":1077391,
1844
+ // "customer_id":1082679,
1845
+ // "amount":"21.9000000000000000",
1846
+ // "txid":"",
1847
+ // "is_internal":false,
1848
+ // "kind":"on_chain",
1849
+ // "state":"PENDING",
1850
+ // "inserted_at":"2020-06-03T00:50:57+00:00",
1851
+ // "updated_at":"2020-06-03T00:50:57+00:00",
1852
+ // "memo":"",
1853
+ // "target_address":"rDYtYT3dBeuw376rvHqoZBKW3UmvguoBAf",
1854
+ // "fee":"0.1000000000000000",
1855
+ // "asset_symbol":"XRP"
1856
+ // }
1857
+ //
1858
+ const currencyId = this.safeString(transaction, 'asset_symbol');
1859
+ const code = this.safeCurrencyCode(currencyId);
1860
+ const id = this.safeString(transaction, 'id');
1861
+ const amount = this.safeNumber(transaction, 'amount');
1862
+ const status = this.parseTransactionStatus(this.safeString(transaction, 'state'));
1863
+ const timestamp = this.parse8601(this.safeString(transaction, 'inserted_at'));
1864
+ const updated = this.parse8601(this.safeString2(transaction, 'updated_at', 'completed_at'));
1865
+ const txid = this.safeString(transaction, 'txid');
1866
+ const address = this.safeString(transaction, 'target_address');
1867
+ const tag = this.safeString(transaction, 'memo');
1868
+ const type = ('customer_id' in transaction) ? 'withdrawal' : 'deposit';
1869
+ const internal = this.safeValue(transaction, 'is_internal');
1870
+ return {
1871
+ 'info': transaction,
1872
+ 'id': id,
1873
+ 'txid': txid,
1874
+ 'timestamp': timestamp,
1875
+ 'datetime': this.iso8601(timestamp),
1876
+ 'network': undefined,
1877
+ 'addressFrom': undefined,
1878
+ 'address': undefined,
1879
+ 'addressTo': address,
1880
+ 'tagFrom': undefined,
1881
+ 'tag': tag,
1882
+ 'tagTo': undefined,
1883
+ 'type': type,
1884
+ 'amount': amount,
1885
+ 'currency': code,
1886
+ 'status': status,
1887
+ 'updated': updated,
1888
+ 'fee': undefined,
1889
+ 'comment': undefined,
1890
+ 'internal': internal,
1891
+ };
1892
+ }
1893
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
1894
+ /**
1895
+ * @method
1896
+ * @name bigone#fetchDeposits
1897
+ * @description fetch all deposits made to an account
1898
+ * @param {string} code unified currency code
1899
+ * @param {int} [since] the earliest time in ms to fetch deposits for
1900
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
1901
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1902
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1903
+ */
1904
+ await this.loadMarkets();
1905
+ const request = {
1906
+ // 'page_token': 'dxzef', // request page after this page token
1907
+ // 'limit': 50, // optional, default 50
1908
+ // 'kind': 'string', // optional - air_drop, big_holder_dividend, default, eosc_to_eos, internal, equally_airdrop, referral_mining, one_holder_dividend, single_customer, snapshotted_airdrop, trade_mining
1909
+ // 'asset_symbol': 'BTC', // optional
1910
+ };
1911
+ let currency = undefined;
1912
+ if (code !== undefined) {
1913
+ currency = this.currency(code);
1914
+ request['asset_symbol'] = currency['id'];
1915
+ }
1916
+ if (limit !== undefined) {
1917
+ request['limit'] = limit; // default 50
1918
+ }
1919
+ const response = await this.privateGetDeposits(this.extend(request, params));
1920
+ //
1921
+ // {
1922
+ // "code": 0,
1923
+ // "page_token": "NQ==",
1924
+ // "data": [
1925
+ // {
1926
+ // "id": 5,
1927
+ // "amount": "25.0",
1928
+ // "confirms": 100,
1929
+ // "txid": "72e03037d144dae3d32b68b5045462b1049a0755",
1930
+ // "is_internal": false,
1931
+ // "inserted_at": "2018-02-16T11:39:58.000Z",
1932
+ // "updated_at": "2018-11-09T10:20:09.000Z",
1933
+ // "kind": "default",
1934
+ // "memo": "",
1935
+ // "state": "WITHHOLD",
1936
+ // "asset_symbol": "BTS"
1937
+ // }
1938
+ // ]
1939
+ // }
1940
+ //
1941
+ const deposits = this.safeValue(response, 'data', []);
1942
+ return this.parseTransactions(deposits, currency, since, limit);
1943
+ }
1944
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
1945
+ /**
1946
+ * @method
1947
+ * @name bigone#fetchWithdrawals
1948
+ * @description fetch all withdrawals made from an account
1949
+ * @param {string} code unified currency code
1950
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
1951
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
1952
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1953
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1954
+ */
1955
+ await this.loadMarkets();
1956
+ const request = {
1957
+ // 'page_token': 'dxzef', // request page after this page token
1958
+ // 'limit': 50, // optional, default 50
1959
+ // 'kind': 'string', // optional - air_drop, big_holder_dividend, default, eosc_to_eos, internal, equally_airdrop, referral_mining, one_holder_dividend, single_customer, snapshotted_airdrop, trade_mining
1960
+ // 'asset_symbol': 'BTC', // optional
1961
+ };
1962
+ let currency = undefined;
1963
+ if (code !== undefined) {
1964
+ currency = this.currency(code);
1965
+ request['asset_symbol'] = currency['id'];
1966
+ }
1967
+ if (limit !== undefined) {
1968
+ request['limit'] = limit; // default 50
1969
+ }
1970
+ const response = await this.privateGetWithdrawals(this.extend(request, params));
1971
+ //
1972
+ // {
1973
+ // "code": 0,
1974
+ // "data": [
1975
+ // {
1976
+ // "id": 10,
1977
+ // "customer_id": "10",
1978
+ // "asset_symbol": "ETH",
1979
+ // "amount": "5",
1980
+ // "state": "CONFIRMED",
1981
+ // "note": "2018-03-15T16:13:45.610463Z",
1982
+ // "txid": "0x4643bb6b393ac20a6175c713175734a72517c63d6f73a3ca90a15356f2e967da0",
1983
+ // "completed_at": "2018-03-15T16:13:45.610463Z",
1984
+ // "inserted_at": "2018-03-15T16:13:45.610463Z",
1985
+ // "is_internal": true,
1986
+ // "target_address": "0x4643bb6b393ac20a6175c713175734a72517c63d6f7"
1987
+ // }
1988
+ // ],
1989
+ // "page_token":"dxvf"
1990
+ // }
1991
+ //
1992
+ const withdrawals = this.safeValue(response, 'data', []);
1993
+ return this.parseTransactions(withdrawals, currency, since, limit);
1994
+ }
1995
+ async transfer(code, amount, fromAccount, toAccount, params = {}) {
1996
+ /**
1997
+ * @method
1998
+ * @name bigone#transfer
1999
+ * @description transfer currency internally between wallets on the same account
2000
+ * @see https://open.big.one/docs/spot_transfer.html#transfer-of-user
2001
+ * @param {string} code unified currency code
2002
+ * @param {float} amount amount to transfer
2003
+ * @param {string} fromAccount 'SPOT', 'FUND', or 'CONTRACT'
2004
+ * @param {string} toAccount 'SPOT', 'FUND', or 'CONTRACT'
2005
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2006
+ * @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
2007
+ */
2008
+ await this.loadMarkets();
2009
+ const currency = this.currency(code);
2010
+ const accountsByType = this.safeValue(this.options, 'accountsByType', {});
2011
+ const fromId = this.safeString(accountsByType, fromAccount, fromAccount);
2012
+ const toId = this.safeString(accountsByType, toAccount, toAccount);
2013
+ const guid = this.safeString(params, 'guid', this.uuid());
2014
+ const request = {
2015
+ 'symbol': currency['id'],
2016
+ 'amount': this.currencyToPrecision(code, amount),
2017
+ 'from': fromId,
2018
+ 'to': toId,
2019
+ 'guid': guid,
2020
+ // 'type': type, // NORMAL, MASTER_TO_SUB, SUB_TO_MASTER, SUB_INTERNAL, default is NORMAL
2021
+ // 'sub_acccunt': '', // when type is NORMAL, it should be empty, and when type is others it is required
2022
+ };
2023
+ const response = await this.privatePostTransfer(this.extend(request, params));
2024
+ //
2025
+ // {
2026
+ // "code": 0,
2027
+ // "data": null
2028
+ // }
2029
+ //
2030
+ const transfer = this.parseTransfer(response, currency);
2031
+ const transferOptions = this.safeValue(this.options, 'transfer', {});
2032
+ const fillResponseFromRequest = this.safeValue(transferOptions, 'fillResponseFromRequest', true);
2033
+ if (fillResponseFromRequest) {
2034
+ transfer['fromAccount'] = fromAccount;
2035
+ transfer['toAccount'] = toAccount;
2036
+ transfer['amount'] = amount;
2037
+ transfer['id'] = guid;
2038
+ }
2039
+ return transfer;
2040
+ }
2041
+ parseTransfer(transfer, currency = undefined) {
2042
+ //
2043
+ // {
2044
+ // "code": 0,
2045
+ // "data": null
2046
+ // }
2047
+ //
2048
+ const code = this.safeNumber(transfer, 'code');
2049
+ return {
2050
+ 'info': transfer,
2051
+ 'id': undefined,
2052
+ 'timestamp': undefined,
2053
+ 'datetime': undefined,
2054
+ 'currency': code,
2055
+ 'amount': undefined,
2056
+ 'fromAccount': undefined,
2057
+ 'toAccount': undefined,
2058
+ 'status': this.parseTransferStatus(code),
2059
+ };
2060
+ }
2061
+ parseTransferStatus(status) {
2062
+ const statuses = {
2063
+ '0': 'ok',
2064
+ };
2065
+ return this.safeString(statuses, status, 'failed');
2066
+ }
2067
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
2068
+ /**
2069
+ * @method
2070
+ * @name bigone#withdraw
2071
+ * @description make a withdrawal
2072
+ * @param {string} code unified currency code
2073
+ * @param {float} amount the amount to withdraw
2074
+ * @param {string} address the address to withdraw to
2075
+ * @param {string} tag
2076
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
2077
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
2078
+ */
2079
+ [tag, params] = this.handleWithdrawTagAndParams(tag, params);
2080
+ await this.loadMarkets();
2081
+ const currency = this.currency(code);
2082
+ const request = {
2083
+ 'symbol': currency['id'],
2084
+ 'target_address': address,
2085
+ 'amount': this.currencyToPrecision(code, amount),
2086
+ };
2087
+ if (tag !== undefined) {
2088
+ request['memo'] = tag;
2089
+ }
2090
+ let networkCode = undefined;
2091
+ [networkCode, params] = this.handleNetworkCodeAndParams(params);
2092
+ if (networkCode !== undefined) {
2093
+ request['gateway_name'] = this.networkCodeToId(networkCode);
2094
+ }
2095
+ // requires write permission on the wallet
2096
+ const response = await this.privatePostWithdrawals(this.extend(request, params));
2097
+ //
2098
+ // {
2099
+ // "code":0,
2100
+ // "message":"",
2101
+ // "data":{
2102
+ // "id":1077391,
2103
+ // "customer_id":1082679,
2104
+ // "amount":"21.9000000000000000",
2105
+ // "txid":"",
2106
+ // "is_internal":false,
2107
+ // "kind":"on_chain",
2108
+ // "state":"PENDING",
2109
+ // "inserted_at":"2020-06-03T00:50:57+00:00",
2110
+ // "updated_at":"2020-06-03T00:50:57+00:00",
2111
+ // "memo":"",
2112
+ // "target_address":"rDYtYT3dBeuw376rvHqoZBKW3UmvguoBAf",
2113
+ // "fee":"0.1000000000000000",
2114
+ // "asset_symbol":"XRP"
2115
+ // }
2116
+ // }
2117
+ //
2118
+ const data = this.safeValue(response, 'data', {});
2119
+ return this.parseTransaction(data, currency);
2120
+ }
2121
+ handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
2122
+ if (response === undefined) {
2123
+ return undefined; // fallback to default error handler
2124
+ }
2125
+ //
2126
+ // {"code":10013,"message":"Resource not found"}
2127
+ // {"code":40004,"message":"invalid jwt"}
2128
+ //
2129
+ const code = this.safeString(response, 'code');
2130
+ const message = this.safeString(response, 'message');
2131
+ if ((code !== '0') && (code !== undefined)) {
2132
+ const feedback = this.id + ' ' + body;
2133
+ this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
2134
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
2135
+ this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
2136
+ throw new errors.ExchangeError(feedback); // unknown message
2137
+ }
2138
+ return undefined;
2139
+ }
2140
+ }
2141
+
2142
+ module.exports = bigone;