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,1160 @@
1
+ 'use strict';
2
+
3
+ var blockchaincom$1 = require('./abstract/blockchaincom.js');
4
+ var errors = require('./base/errors.js');
5
+ var Precise = require('./base/Precise.js');
6
+ var number = require('./base/functions/number.js');
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // ---------------------------------------------------------------------------
10
+ /**
11
+ * @class blockchaincom
12
+ * @augments Exchange
13
+ */
14
+ class blockchaincom extends blockchaincom$1 {
15
+ describe() {
16
+ return this.deepExtend(super.describe(), {
17
+ 'id': 'blockchaincom',
18
+ 'secret': undefined,
19
+ 'name': 'Blockchain.com',
20
+ 'countries': ['LX'],
21
+ 'rateLimit': 500,
22
+ 'version': 'v3',
23
+ 'pro': true,
24
+ 'has': {
25
+ 'CORS': false,
26
+ 'spot': true,
27
+ 'margin': undefined,
28
+ 'swap': false,
29
+ 'future': false,
30
+ 'option': false,
31
+ 'cancelAllOrders': true,
32
+ 'cancelOrder': true,
33
+ 'createOrder': true,
34
+ 'createStopLimitOrder': true,
35
+ 'createStopMarketOrder': true,
36
+ 'createStopOrder': true,
37
+ 'fetchBalance': true,
38
+ 'fetchCanceledOrders': true,
39
+ 'fetchClosedOrders': true,
40
+ 'fetchDeposit': true,
41
+ 'fetchDepositAddress': true,
42
+ 'fetchDeposits': true,
43
+ 'fetchFundingHistory': false,
44
+ 'fetchFundingRate': false,
45
+ 'fetchFundingRateHistory': false,
46
+ 'fetchFundingRates': false,
47
+ 'fetchIndexOHLCV': false,
48
+ 'fetchL2OrderBook': true,
49
+ 'fetchL3OrderBook': true,
50
+ 'fetchLedger': false,
51
+ 'fetchMarginMode': false,
52
+ 'fetchMarkets': true,
53
+ 'fetchMarkOHLCV': false,
54
+ 'fetchMyTrades': true,
55
+ 'fetchOHLCV': false,
56
+ 'fetchOpenInterestHistory': false,
57
+ 'fetchOpenOrders': true,
58
+ 'fetchOrder': true,
59
+ 'fetchOrderBook': true,
60
+ 'fetchPositionMode': false,
61
+ 'fetchPremiumIndexOHLCV': false,
62
+ 'fetchTicker': true,
63
+ 'fetchTickers': true,
64
+ 'fetchTrades': false,
65
+ 'fetchTradingFee': false,
66
+ 'fetchTradingFees': true,
67
+ 'fetchTransfer': false,
68
+ 'fetchTransfers': false,
69
+ 'fetchWithdrawal': true,
70
+ 'fetchWithdrawals': true,
71
+ 'fetchWithdrawalWhitelist': true,
72
+ 'transfer': false,
73
+ 'withdraw': true,
74
+ },
75
+ 'timeframes': undefined,
76
+ 'urls': {
77
+ 'logo': 'https://user-images.githubusercontent.com/1294454/147515585-1296e91b-7398-45e5-9d32-f6121538533f.jpeg',
78
+ 'test': {
79
+ 'public': 'https://testnet-api.delta.exchange',
80
+ 'private': 'https://testnet-api.delta.exchange',
81
+ },
82
+ 'api': {
83
+ 'public': 'https://api.blockchain.com/v3/exchange',
84
+ 'private': 'https://api.blockchain.com/v3/exchange',
85
+ },
86
+ 'www': 'https://blockchain.com',
87
+ 'doc': [
88
+ 'https://api.blockchain.com/v3',
89
+ ],
90
+ 'fees': 'https://exchange.blockchain.com/fees',
91
+ },
92
+ 'api': {
93
+ 'public': {
94
+ 'get': {
95
+ 'tickers': 1,
96
+ 'tickers/{symbol}': 1,
97
+ 'symbols': 1,
98
+ 'symbols/{symbol}': 1,
99
+ 'l2/{symbol}': 1,
100
+ 'l3/{symbol}': 1, // fetchL3OrderBook
101
+ },
102
+ },
103
+ 'private': {
104
+ 'get': {
105
+ 'fees': 1,
106
+ 'orders': 1,
107
+ 'orders/{orderId}': 1,
108
+ 'trades': 1,
109
+ 'fills': 1,
110
+ 'deposits': 1,
111
+ 'deposits/{depositId}': 1,
112
+ 'accounts': 1,
113
+ 'accounts/{account}/{currency}': 1,
114
+ 'whitelist': 1,
115
+ 'whitelist/{currency}': 1,
116
+ 'withdrawals': 1,
117
+ 'withdrawals/{withdrawalId}': 1, // fetchWithdrawalById
118
+ },
119
+ 'post': {
120
+ 'orders': 1,
121
+ 'deposits/{currency}': 1,
122
+ 'withdrawals': 1, // withdraw
123
+ },
124
+ 'delete': {
125
+ 'orders': 1,
126
+ 'orders/{orderId}': 1, // cancelOrder
127
+ },
128
+ },
129
+ },
130
+ 'fees': {
131
+ 'trading': {
132
+ 'feeSide': 'get',
133
+ 'tierBased': true,
134
+ 'percentage': true,
135
+ 'tiers': {
136
+ 'taker': [
137
+ [this.parseNumber('0'), this.parseNumber('0.004')],
138
+ [this.parseNumber('10000'), this.parseNumber('0.0022')],
139
+ [this.parseNumber('50000'), this.parseNumber('0.002')],
140
+ [this.parseNumber('100000'), this.parseNumber('0.0018')],
141
+ [this.parseNumber('500000'), this.parseNumber('0.0018')],
142
+ [this.parseNumber('1000000'), this.parseNumber('0.0018')],
143
+ [this.parseNumber('2500000'), this.parseNumber('0.0018')],
144
+ [this.parseNumber('5000000'), this.parseNumber('0.0016')],
145
+ [this.parseNumber('25000000'), this.parseNumber('0.0014')],
146
+ [this.parseNumber('100000000'), this.parseNumber('0.0011')],
147
+ [this.parseNumber('500000000'), this.parseNumber('0.0008')],
148
+ [this.parseNumber('1000000000'), this.parseNumber('0.0006')],
149
+ ],
150
+ 'maker': [
151
+ [this.parseNumber('0'), this.parseNumber('0.002')],
152
+ [this.parseNumber('10000'), this.parseNumber('0.0012')],
153
+ [this.parseNumber('50000'), this.parseNumber('0.001')],
154
+ [this.parseNumber('100000'), this.parseNumber('0.0008')],
155
+ [this.parseNumber('500000'), this.parseNumber('0.0007000000000000001')],
156
+ [this.parseNumber('1000000'), this.parseNumber('0.0006')],
157
+ [this.parseNumber('2500000'), this.parseNumber('0.0005')],
158
+ [this.parseNumber('5000000'), this.parseNumber('0.0004')],
159
+ [this.parseNumber('25000000'), this.parseNumber('0.0003')],
160
+ [this.parseNumber('100000000'), this.parseNumber('0.0002')],
161
+ [this.parseNumber('500000000'), this.parseNumber('0.0001')],
162
+ [this.parseNumber('1000000000'), this.parseNumber('0')],
163
+ ],
164
+ },
165
+ },
166
+ },
167
+ 'requiredCredentials': {
168
+ 'apiKey': false,
169
+ 'secret': true,
170
+ },
171
+ 'options': {
172
+ 'networks': {
173
+ 'ERC20': 'ETH',
174
+ 'TRC20': 'TRX',
175
+ 'ALGO': 'ALGO',
176
+ 'ADA': 'ADA',
177
+ 'AR': 'AR',
178
+ 'ATOM': 'ATOM',
179
+ 'AVAXC': 'AVAX',
180
+ 'BCH': 'BCH',
181
+ 'BSV': 'BSV',
182
+ 'BTC': 'BTC',
183
+ // 'BEP20': 'BNB', // todo
184
+ 'DCR': 'DCR',
185
+ 'DESO': 'DESO',
186
+ 'DASH': 'DASH',
187
+ 'CELO': 'CELO',
188
+ 'CHZ': 'CHZ',
189
+ 'MATIC': 'MATIC',
190
+ 'SOL': 'SOL',
191
+ 'DOGE': 'DOGE',
192
+ 'DOT': 'DOT',
193
+ 'EOS': 'EOS',
194
+ 'ETC': 'ETC',
195
+ 'FIL': 'FIL',
196
+ 'KAVA': 'KAVA',
197
+ 'LTC': 'LTC',
198
+ 'IOTA': 'MIOTA',
199
+ 'NEAR': 'NEAR',
200
+ 'STX': 'STX',
201
+ 'XLM': 'XLM',
202
+ 'XMR': 'XMR',
203
+ 'XRP': 'XRP',
204
+ 'XTZ': 'XTZ',
205
+ 'ZEC': 'ZEC',
206
+ 'ZIL': 'ZIL',
207
+ // 'THETA': 'THETA', // todo: possible TFUEL THETA FUEL is also same, but API might have a mistake
208
+ // todo: uncomment below after consensus
209
+ // 'MOBILECOIN': 'MOB',
210
+ // 'KIN': 'KIN',
211
+ // 'DIGITALGOLD': 'DGLD',
212
+ },
213
+ },
214
+ 'precisionMode': number.TICK_SIZE,
215
+ 'exceptions': {
216
+ 'exact': {
217
+ '401': errors.AuthenticationError,
218
+ '404': errors.OrderNotFound,
219
+ },
220
+ 'broad': {},
221
+ },
222
+ });
223
+ }
224
+ async fetchMarkets(params = {}) {
225
+ /**
226
+ * @method
227
+ * @name blockchaincom#fetchMarkets
228
+ * @description retrieves data on all markets for blockchaincom
229
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
230
+ * @returns {object[]} an array of objects representing market data
231
+ */
232
+ //
233
+ // "USDC-GBP": {
234
+ // "base_currency": "USDC",
235
+ // "base_currency_scale": 6,
236
+ // "counter_currency": "GBP",
237
+ // "counter_currency_scale": 2,
238
+ // "min_price_increment": 10000,
239
+ // "min_price_increment_scale": 8,
240
+ // "min_order_size": 500000000,
241
+ // "min_order_size_scale": 8,
242
+ // "max_order_size": 0,
243
+ // "max_order_size_scale": 8,
244
+ // "lot_size": 10000,
245
+ // "lot_size_scale": 8,
246
+ // "status": "open",
247
+ // "id": 68,
248
+ // "auction_price": 0,
249
+ // "auction_size": 0,
250
+ // "auction_time": "",
251
+ // "imbalance": 0
252
+ // }
253
+ //
254
+ const markets = await this.publicGetSymbols(params);
255
+ const marketIds = Object.keys(markets);
256
+ const result = [];
257
+ for (let i = 0; i < marketIds.length; i++) {
258
+ const marketId = marketIds[i];
259
+ const market = this.safeValue(markets, marketId);
260
+ const baseId = this.safeString(market, 'base_currency');
261
+ const quoteId = this.safeString(market, 'counter_currency');
262
+ const base = this.safeCurrencyCode(baseId);
263
+ const quote = this.safeCurrencyCode(quoteId);
264
+ const numericId = this.safeNumber(market, 'id');
265
+ let active = undefined;
266
+ const marketState = this.safeString(market, 'status');
267
+ if (marketState === 'open') {
268
+ active = true;
269
+ }
270
+ else {
271
+ active = false;
272
+ }
273
+ // price precision
274
+ const minPriceIncrementString = this.safeString(market, 'min_price_increment');
275
+ const minPriceIncrementScaleString = this.safeString(market, 'min_price_increment_scale');
276
+ const minPriceScalePrecisionString = this.parsePrecision(minPriceIncrementScaleString);
277
+ const pricePrecisionString = Precise["default"].stringMul(minPriceIncrementString, minPriceScalePrecisionString);
278
+ // amount precision
279
+ const lotSizeString = this.safeString(market, 'lot_size');
280
+ const lotSizeScaleString = this.safeString(market, 'lot_size_scale');
281
+ const lotSizeScalePrecisionString = this.parsePrecision(lotSizeScaleString);
282
+ const amountPrecisionString = Precise["default"].stringMul(lotSizeString, lotSizeScalePrecisionString);
283
+ // minimum order size
284
+ const minOrderSizeString = this.safeString(market, 'min_order_size');
285
+ const minOrderSizeScaleString = this.safeString(market, 'min_order_size_scale');
286
+ const minOrderSizeScalePrecisionString = this.parsePrecision(minOrderSizeScaleString);
287
+ const minOrderSizePreciseString = Precise["default"].stringMul(minOrderSizeString, minOrderSizeScalePrecisionString);
288
+ const minOrderSize = this.parseNumber(minOrderSizePreciseString);
289
+ // maximum order size
290
+ let maxOrderSize = undefined;
291
+ maxOrderSize = this.safeString(market, 'max_order_size');
292
+ if (maxOrderSize !== '0') {
293
+ const maxOrderSizeScaleString = this.safeString(market, 'max_order_size_scale');
294
+ const maxOrderSizeScalePrecisionString = this.parsePrecision(maxOrderSizeScaleString);
295
+ const maxOrderSizeString = Precise["default"].stringMul(maxOrderSize, maxOrderSizeScalePrecisionString);
296
+ maxOrderSize = this.parseNumber(maxOrderSizeString);
297
+ }
298
+ else {
299
+ maxOrderSize = undefined;
300
+ }
301
+ result.push({
302
+ 'info': market,
303
+ 'id': marketId,
304
+ 'numericId': numericId,
305
+ 'symbol': base + '/' + quote,
306
+ 'base': base,
307
+ 'quote': quote,
308
+ 'settle': undefined,
309
+ 'baseId': baseId,
310
+ 'quoteId': quoteId,
311
+ 'settleId': undefined,
312
+ 'type': 'spot',
313
+ 'spot': true,
314
+ 'margin': false,
315
+ 'swap': false,
316
+ 'future': false,
317
+ 'option': false,
318
+ 'active': active,
319
+ 'contract': false,
320
+ 'linear': undefined,
321
+ 'inverse': undefined,
322
+ 'contractSize': undefined,
323
+ 'expiry': undefined,
324
+ 'expiryDatetime': undefined,
325
+ 'strike': undefined,
326
+ 'optionType': undefined,
327
+ 'precision': {
328
+ 'amount': this.parseNumber(amountPrecisionString),
329
+ 'price': this.parseNumber(pricePrecisionString),
330
+ },
331
+ 'limits': {
332
+ 'leverage': {
333
+ 'min': undefined,
334
+ 'max': undefined,
335
+ },
336
+ 'amount': {
337
+ 'min': minOrderSize,
338
+ 'max': maxOrderSize,
339
+ },
340
+ 'price': {
341
+ 'min': undefined,
342
+ 'max': undefined,
343
+ },
344
+ 'cost': {
345
+ 'min': undefined,
346
+ 'max': undefined,
347
+ },
348
+ },
349
+ 'created': undefined,
350
+ });
351
+ }
352
+ return result;
353
+ }
354
+ async fetchOrderBook(symbol, limit = undefined, params = {}) {
355
+ /**
356
+ * @method
357
+ * @name blockchaincom#fetchOrderBook
358
+ * @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
359
+ * @param {string} symbol unified symbol of the market to fetch the order book for
360
+ * @param {int} [limit] the maximum amount of order book entries to return
361
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
362
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
363
+ */
364
+ return await this.fetchL3OrderBook(symbol, limit, params);
365
+ }
366
+ async fetchL3OrderBook(symbol, limit = undefined, params = {}) {
367
+ /**
368
+ * @method
369
+ * @name blockchaincom#fetchL3OrderBook
370
+ * @description fetches level 3 information on open orders with bid (buy) and ask (sell) prices, volumes and other data
371
+ * @param {string} symbol unified market symbol
372
+ * @param {int} [limit] max number of orders to return, default is undefined
373
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
374
+ * @returns {object} an [order book structure]{@link https://docs.ccxt.com/#/?id=order-book-structure}
375
+ */
376
+ await this.loadMarkets();
377
+ const market = this.market(symbol);
378
+ const request = {
379
+ 'symbol': market['id'],
380
+ };
381
+ if (limit !== undefined) {
382
+ request['depth'] = limit;
383
+ }
384
+ const response = await this.publicGetL3Symbol(this.extend(request, params));
385
+ return this.parseOrderBook(response, market['symbol'], undefined, 'bids', 'asks', 'px', 'qty');
386
+ }
387
+ async fetchL2OrderBook(symbol, limit = undefined, params = {}) {
388
+ await this.loadMarkets();
389
+ const market = this.market(symbol);
390
+ const request = {
391
+ 'symbol': market['id'],
392
+ };
393
+ if (limit !== undefined) {
394
+ request['depth'] = limit;
395
+ }
396
+ const response = await this.publicGetL2Symbol(this.extend(request, params));
397
+ return this.parseOrderBook(response, market['symbol'], undefined, 'bids', 'asks', 'px', 'qty');
398
+ }
399
+ parseTicker(ticker, market = undefined) {
400
+ //
401
+ // {
402
+ // "symbol": "BTC-USD",
403
+ // "price_24h": 47791.86,
404
+ // "volume_24h": 362.88635738,
405
+ // "last_trade_price": 47587.75
406
+ // }
407
+ //
408
+ const marketId = this.safeString(ticker, 'symbol');
409
+ const symbol = this.safeSymbol(marketId, market, '-');
410
+ const last = this.safeString(ticker, 'last_trade_price');
411
+ const baseVolume = this.safeString(ticker, 'volume_24h');
412
+ const open = this.safeString(ticker, 'price_24h');
413
+ return this.safeTicker({
414
+ 'symbol': symbol,
415
+ 'timestamp': undefined,
416
+ 'datetime': undefined,
417
+ 'high': undefined,
418
+ 'low': undefined,
419
+ 'bid': undefined,
420
+ 'bidVolume': undefined,
421
+ 'ask': undefined,
422
+ 'askVolume': undefined,
423
+ 'vwap': undefined,
424
+ 'open': open,
425
+ 'close': undefined,
426
+ 'last': last,
427
+ 'previousClose': undefined,
428
+ 'change': undefined,
429
+ 'percentage': undefined,
430
+ 'average': undefined,
431
+ 'baseVolume': baseVolume,
432
+ 'quoteVolume': undefined,
433
+ 'info': ticker,
434
+ }, market);
435
+ }
436
+ async fetchTicker(symbol, params = {}) {
437
+ /**
438
+ * @method
439
+ * @name blockchaincom#fetchTicker
440
+ * @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
441
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
442
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
443
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
444
+ */
445
+ await this.loadMarkets();
446
+ const market = this.market(symbol);
447
+ const request = {
448
+ 'symbol': market['id'],
449
+ };
450
+ const response = await this.publicGetTickersSymbol(this.extend(request, params));
451
+ return this.parseTicker(response, market);
452
+ }
453
+ async fetchTickers(symbols = undefined, params = {}) {
454
+ /**
455
+ * @method
456
+ * @name blockchaincom#fetchTickers
457
+ * @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
458
+ * @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
459
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
460
+ * @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
461
+ */
462
+ await this.loadMarkets();
463
+ const tickers = await this.publicGetTickers(params);
464
+ return this.parseTickers(tickers, symbols);
465
+ }
466
+ parseOrderState(state) {
467
+ const states = {
468
+ 'OPEN': 'open',
469
+ 'REJECTED': 'rejected',
470
+ 'FILLED': 'closed',
471
+ 'CANCELED': 'canceled',
472
+ 'PART_FILLED': 'open',
473
+ 'EXPIRED': 'expired',
474
+ };
475
+ return this.safeString(states, state, state);
476
+ }
477
+ parseOrder(order, market = undefined) {
478
+ //
479
+ // {
480
+ // "clOrdId": "00001",
481
+ // "ordType": "MARKET",
482
+ // "ordStatus": "FILLED",
483
+ // "side": "BUY",
484
+ // "symbol": "USDC-USDT",
485
+ // "exOrdId": "281775861306290",
486
+ // "price": null,
487
+ // "text": "Fill",
488
+ // "lastShares": "30.0",
489
+ // "lastPx": "0.9999",
490
+ // "leavesQty": "0.0",
491
+ // "cumQty": "30.0",
492
+ // "avgPx": "0.9999",
493
+ // "timestamp": "1633940339619"
494
+ // }
495
+ //
496
+ const clientOrderId = this.safeString(order, 'clOrdId');
497
+ const type = this.safeStringLower(order, 'ordType');
498
+ const statusId = this.safeString(order, 'ordStatus');
499
+ const state = this.parseOrderState(statusId);
500
+ const side = this.safeStringLower(order, 'side');
501
+ const marketId = this.safeString(order, 'symbol');
502
+ const symbol = this.safeSymbol(marketId, market, '-');
503
+ const exchangeOrderId = this.safeString(order, 'exOrdId');
504
+ const price = (type !== 'market') ? this.safeString(order, 'price') : undefined;
505
+ const average = this.safeNumber(order, 'avgPx');
506
+ const timestamp = this.safeInteger(order, 'timestamp');
507
+ const datetime = this.iso8601(timestamp);
508
+ const filled = this.safeString(order, 'cumQty');
509
+ const remaining = this.safeString(order, 'leavesQty');
510
+ const result = this.safeOrder({
511
+ 'id': exchangeOrderId,
512
+ 'clientOrderId': clientOrderId,
513
+ 'datetime': datetime,
514
+ 'timestamp': timestamp,
515
+ 'lastTradeTimestamp': undefined,
516
+ 'status': state,
517
+ 'symbol': symbol,
518
+ 'type': type,
519
+ 'timeInForce': undefined,
520
+ 'side': side,
521
+ 'price': price,
522
+ 'average': average,
523
+ 'amount': undefined,
524
+ 'filled': filled,
525
+ 'remaining': remaining,
526
+ 'cost': undefined,
527
+ 'trades': [],
528
+ 'fees': {},
529
+ 'info': order,
530
+ });
531
+ return result;
532
+ }
533
+ async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
534
+ /**
535
+ * @method
536
+ * @name blockchaincom#createOrder
537
+ * @description create a trade order
538
+ * @param {string} symbol unified symbol of the market to create an order in
539
+ * @param {string} type 'market' or 'limit'
540
+ * @param {string} side 'buy' or 'sell'
541
+ * @param {float} amount how much of currency you want to trade in units of base currency
542
+ * @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
543
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
544
+ * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
545
+ */
546
+ await this.loadMarkets();
547
+ const market = this.market(symbol);
548
+ const orderType = this.safeString(params, 'ordType', type);
549
+ const uppercaseOrderType = orderType.toUpperCase();
550
+ const clientOrderId = this.safeString2(params, 'clientOrderId', 'clOrdId', this.uuid16());
551
+ params = this.omit(params, ['ordType', 'clientOrderId', 'clOrdId']);
552
+ const request = {
553
+ // 'stopPx' : limit price
554
+ // 'timeInForce' : "GTC" for Good Till Cancel, "IOC" for Immediate or Cancel, "FOK" for Fill or Kill, "GTD" Good Till Date
555
+ // 'expireDate' : expiry date in the format YYYYMMDD
556
+ // 'minQty' : The minimum quantity required for an IOC fill
557
+ 'ordType': uppercaseOrderType,
558
+ 'symbol': market['id'],
559
+ 'side': side.toUpperCase(),
560
+ 'orderQty': this.amountToPrecision(symbol, amount),
561
+ 'clOrdId': clientOrderId,
562
+ };
563
+ const stopPrice = this.safeValue2(params, 'stopPx', 'stopPrice');
564
+ params = this.omit(params, ['stopPx', 'stopPrice']);
565
+ if (uppercaseOrderType === 'STOP' || uppercaseOrderType === 'STOPLIMIT') {
566
+ if (stopPrice === undefined) {
567
+ throw new errors.ArgumentsRequired(this.id + ' createOrder() requires a stopPx or stopPrice param for a ' + uppercaseOrderType + ' order');
568
+ }
569
+ }
570
+ if (stopPrice !== undefined) {
571
+ if (uppercaseOrderType === 'MARKET') {
572
+ request['ordType'] = 'STOP';
573
+ }
574
+ else if (uppercaseOrderType === 'LIMIT') {
575
+ request['ordType'] = 'STOPLIMIT';
576
+ }
577
+ }
578
+ let priceRequired = false;
579
+ let stopPriceRequired = false;
580
+ if (request['ordType'] === 'LIMIT' || request['ordType'] === 'STOPLIMIT') {
581
+ priceRequired = true;
582
+ }
583
+ if (request['ordType'] === 'STOP' || request['ordType'] === 'STOPLIMIT') {
584
+ stopPriceRequired = true;
585
+ }
586
+ if (priceRequired) {
587
+ request['price'] = this.priceToPrecision(symbol, price);
588
+ }
589
+ if (stopPriceRequired) {
590
+ request['stopPx'] = this.priceToPrecision(symbol, stopPrice);
591
+ }
592
+ const response = await this.privatePostOrders(this.extend(request, params));
593
+ return this.parseOrder(response, market);
594
+ }
595
+ async cancelOrder(id, symbol = undefined, params = {}) {
596
+ /**
597
+ * @method
598
+ * @name blockchaincom#cancelOrder
599
+ * @description cancels an open order
600
+ * @param {string} id order id
601
+ * @param {string} symbol unified symbol of the market the order was made in
602
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
603
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
604
+ */
605
+ const request = {
606
+ 'orderId': id,
607
+ };
608
+ const response = await this.privateDeleteOrdersOrderId(this.extend(request, params));
609
+ return {
610
+ 'id': id,
611
+ 'info': response,
612
+ };
613
+ }
614
+ async cancelAllOrders(symbol = undefined, params = {}) {
615
+ /**
616
+ * @method
617
+ * @name blockchaincom#cancelAllOrders
618
+ * @description cancel all open orders
619
+ * @param {string} symbol unified market symbol of the market to cancel orders in, all markets are used if undefined, default is undefined
620
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
621
+ * @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
622
+ */
623
+ // cancels all open orders if no symbol specified
624
+ // cancels all open orders of specified symbol, if symbol is specified
625
+ await this.loadMarkets();
626
+ const request = {
627
+ // 'symbol': marketId,
628
+ };
629
+ if (symbol !== undefined) {
630
+ const marketId = this.marketId(symbol);
631
+ request['symbol'] = marketId;
632
+ }
633
+ const response = await this.privateDeleteOrders(this.extend(request, params));
634
+ return {
635
+ 'symbol': symbol,
636
+ 'info': response,
637
+ };
638
+ }
639
+ async fetchTradingFees(params = {}) {
640
+ /**
641
+ * @method
642
+ * @name blockchaincom#fetchTradingFees
643
+ * @description fetch the trading fees for multiple markets
644
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
645
+ * @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
646
+ */
647
+ await this.loadMarkets();
648
+ const response = await this.privateGetFees(params);
649
+ //
650
+ // {
651
+ // "makerRate": "0.002",
652
+ // "takerRate": "0.004",
653
+ // "volumeInUSD": "0.0"
654
+ // }
655
+ //
656
+ const makerFee = this.safeNumber(response, 'makerRate');
657
+ const takerFee = this.safeNumber(response, 'takerRate');
658
+ const result = {};
659
+ for (let i = 0; i < this.symbols.length; i++) {
660
+ const symbol = this.symbols[i];
661
+ result[symbol] = {
662
+ 'info': response,
663
+ 'symbol': symbol,
664
+ 'maker': makerFee,
665
+ 'taker': takerFee,
666
+ };
667
+ }
668
+ return result;
669
+ }
670
+ async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
671
+ /**
672
+ * @method
673
+ * @name blockchaincom#fetchCanceledOrders
674
+ * @description fetches information on multiple canceled orders made by the user
675
+ * @param {string} symbol unified market symbol of the market orders were made in
676
+ * @param {int} [since] timestamp in ms of the earliest order, default is undefined
677
+ * @param {int} [limit] max number of orders to return, default is undefined
678
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
679
+ * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
680
+ */
681
+ const state = 'CANCELED';
682
+ return await this.fetchOrdersByState(state, symbol, since, limit, params);
683
+ }
684
+ async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
685
+ /**
686
+ * @method
687
+ * @name blockchaincom#fetchClosedOrders
688
+ * @description fetches information on multiple closed orders made by the user
689
+ * @param {string} symbol unified market symbol of the market orders were made in
690
+ * @param {int} [since] the earliest time in ms to fetch orders for
691
+ * @param {int} [limit] the maximum number of order structures to retrieve
692
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
693
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
694
+ */
695
+ const state = 'FILLED';
696
+ return await this.fetchOrdersByState(state, symbol, since, limit, params);
697
+ }
698
+ async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
699
+ /**
700
+ * @method
701
+ * @name blockchaincom#fetchOpenOrders
702
+ * @description fetch all unfilled currently open orders
703
+ * @param {string} symbol unified market symbol
704
+ * @param {int} [since] the earliest time in ms to fetch open orders for
705
+ * @param {int} [limit] the maximum number of open orders structures to retrieve
706
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
707
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
708
+ */
709
+ const state = 'OPEN';
710
+ return await this.fetchOrdersByState(state, symbol, since, limit, params);
711
+ }
712
+ async fetchOrdersByState(state, symbol = undefined, since = undefined, limit = undefined, params = {}) {
713
+ await this.loadMarkets();
714
+ const request = {
715
+ // 'to': unix epoch ms
716
+ // 'from': unix epoch ms
717
+ 'status': state,
718
+ 'limit': 100,
719
+ };
720
+ let market = undefined;
721
+ if (symbol !== undefined) {
722
+ market = this.market(symbol);
723
+ request['symbol'] = market['id'];
724
+ }
725
+ const response = await this.privateGetOrders(this.extend(request, params));
726
+ return this.parseOrders(response, market, since, limit);
727
+ }
728
+ parseTrade(trade, market = undefined) {
729
+ //
730
+ // {
731
+ // "exOrdId":281685751028507,
732
+ // "tradeId":281685434947633,
733
+ // "execId":8847494003,
734
+ // "side":"BUY",
735
+ // "symbol":"AAVE-USDT",
736
+ // "price":405.34,
737
+ // "qty":0.1,
738
+ // "fee":0.162136,
739
+ // "timestamp":1634559249687
740
+ // }
741
+ //
742
+ const orderId = this.safeString(trade, 'exOrdId');
743
+ const tradeId = this.safeString(trade, 'tradeId');
744
+ const side = this.safeString(trade, 'side').toLowerCase();
745
+ const marketId = this.safeString(trade, 'symbol');
746
+ const priceString = this.safeString(trade, 'price');
747
+ const amountString = this.safeString(trade, 'qty');
748
+ const timestamp = this.safeInteger(trade, 'timestamp');
749
+ const datetime = this.iso8601(timestamp);
750
+ market = this.safeMarket(marketId, market, '-');
751
+ const symbol = market['symbol'];
752
+ let fee = undefined;
753
+ const feeCostString = this.safeString(trade, 'fee');
754
+ if (feeCostString !== undefined) {
755
+ const feeCurrency = market['quote'];
756
+ fee = { 'cost': feeCostString, 'currency': feeCurrency };
757
+ }
758
+ return this.safeTrade({
759
+ 'id': tradeId,
760
+ 'timestamp': timestamp,
761
+ 'datetime': datetime,
762
+ 'symbol': symbol,
763
+ 'order': orderId,
764
+ 'type': undefined,
765
+ 'side': side,
766
+ 'takerOrMaker': undefined,
767
+ 'price': priceString,
768
+ 'amount': amountString,
769
+ 'cost': undefined,
770
+ 'fee': fee,
771
+ 'info': trade,
772
+ }, market);
773
+ }
774
+ async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
775
+ /**
776
+ * @method
777
+ * @name blockchaincom#fetchMyTrades
778
+ * @description fetch all trades made by the user
779
+ * @param {string} symbol unified market symbol
780
+ * @param {int} [since] the earliest time in ms to fetch trades for
781
+ * @param {int} [limit] the maximum number of trades structures to retrieve
782
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
783
+ * @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
784
+ */
785
+ await this.loadMarkets();
786
+ const request = {};
787
+ if (limit !== undefined) {
788
+ request['limit'] = limit;
789
+ }
790
+ let market = undefined;
791
+ if (symbol !== undefined) {
792
+ request['symbol'] = this.marketId(symbol);
793
+ market = this.market(symbol);
794
+ }
795
+ const trades = await this.privateGetFills(this.extend(request, params));
796
+ return this.parseTrades(trades, market, since, limit, params); // need to define
797
+ }
798
+ async fetchDepositAddress(code, params = {}) {
799
+ /**
800
+ * @method
801
+ * @name blockchaincom#fetchDepositAddress
802
+ * @description fetch the deposit address for a currency associated with this account
803
+ * @param {string} code unified currency code
804
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
805
+ * @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
806
+ */
807
+ await this.loadMarkets();
808
+ const currency = this.currency(code);
809
+ const request = {
810
+ 'currency': currency['id'],
811
+ };
812
+ const response = await this.privatePostDepositsCurrency(this.extend(request, params));
813
+ const rawAddress = this.safeString(response, 'address');
814
+ let tag = undefined;
815
+ let address = undefined;
816
+ if (rawAddress !== undefined) {
817
+ // if a tag or memo is used it is separated by a colon in the 'address' value
818
+ [address, tag] = rawAddress.split(':');
819
+ }
820
+ const result = { 'info': response };
821
+ result['currency'] = currency['code'];
822
+ result['address'] = address;
823
+ if (tag !== undefined) {
824
+ result['tag'] = tag;
825
+ }
826
+ return result;
827
+ }
828
+ parseTransactionState(state) {
829
+ const states = {
830
+ 'COMPLETED': 'ok',
831
+ 'REJECTED': 'failed',
832
+ 'PENDING': 'pending',
833
+ 'FAILED': 'failed',
834
+ 'REFUNDED': 'refunded',
835
+ };
836
+ return this.safeString(states, state, state);
837
+ }
838
+ parseTransaction(transaction, currency = undefined) {
839
+ //
840
+ // deposit
841
+ //
842
+ // {
843
+ // "depositId":"748e9180-be0d-4a80-e175-0156150efc95",
844
+ // "amount":0.009,
845
+ // "currency":"ETH",
846
+ // "address":"0xEC6B5929D454C8D9546d4221ace969E1810Fa92c",
847
+ // "state":"COMPLETED",
848
+ // "txHash":"582114562140e51a80b481c2dfebaf62b4ab9769b8ff54820bb67e34d4a3ab0c",
849
+ // "timestamp":1633697196241
850
+ // }
851
+ //
852
+ // withdrawal
853
+ //
854
+ // {
855
+ // "amount":30.0,
856
+ // "currency":"USDT",
857
+ // "beneficiary":"cab00d11-6e7f-46b7-b453-2e8ef6f101fa", // blockchain specific id
858
+ // "withdrawalId":"99df5ef7-eab6-4033-be49-312930fbd1ea",
859
+ // "fee":34.005078,
860
+ // "state":"COMPLETED",
861
+ // "timestamp":1634218452549
862
+ // }
863
+ //
864
+ let type = undefined;
865
+ let id = undefined;
866
+ const amount = this.safeNumber(transaction, 'amount');
867
+ const timestamp = this.safeInteger(transaction, 'timestamp');
868
+ const currencyId = this.safeString(transaction, 'currency');
869
+ const code = this.safeCurrencyCode(currencyId, currency);
870
+ const state = this.safeString(transaction, 'state');
871
+ if ('depositId' in transaction) {
872
+ type = 'deposit';
873
+ id = this.safeString(transaction, 'depositId');
874
+ }
875
+ else if ('withdrawalId' in transaction) {
876
+ type = 'withdrawal';
877
+ id = this.safeString(transaction, 'withdrawalId');
878
+ }
879
+ const feeCost = (type === 'withdrawal') ? this.safeNumber(transaction, 'fee') : undefined;
880
+ let fee = undefined;
881
+ if (feeCost !== undefined) {
882
+ fee = { 'currency': code, 'cost': feeCost };
883
+ }
884
+ const address = this.safeString(transaction, 'address');
885
+ const txid = this.safeString(transaction, 'txhash');
886
+ return {
887
+ 'info': transaction,
888
+ 'id': id,
889
+ 'txid': txid,
890
+ 'timestamp': timestamp,
891
+ 'datetime': this.iso8601(timestamp),
892
+ 'network': undefined,
893
+ 'addressFrom': undefined,
894
+ 'address': address,
895
+ 'addressTo': address,
896
+ 'tagFrom': undefined,
897
+ 'tag': undefined,
898
+ 'tagTo': undefined,
899
+ 'type': type,
900
+ 'amount': amount,
901
+ 'currency': code,
902
+ 'status': this.parseTransactionState(state),
903
+ 'updated': undefined,
904
+ 'comment': undefined,
905
+ 'internal': undefined,
906
+ 'fee': fee,
907
+ };
908
+ }
909
+ async withdraw(code, amount, address, tag = undefined, params = {}) {
910
+ /**
911
+ * @method
912
+ * @name blockchaincom#withdraw
913
+ * @description make a withdrawal
914
+ * @param {string} code unified currency code
915
+ * @param {float} amount the amount to withdraw
916
+ * @param {string} address the address to withdraw to
917
+ * @param {string} tag
918
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
919
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
920
+ */
921
+ await this.loadMarkets();
922
+ const currency = this.currency(code);
923
+ const request = {
924
+ 'amount': amount,
925
+ 'currency': currency['id'],
926
+ 'beneficiary': address,
927
+ 'sendMax': false,
928
+ };
929
+ const response = await this.privatePostWithdrawals(this.extend(request, params));
930
+ //
931
+ // {
932
+ // "amount": "30.0",
933
+ // "currency": "USDT",
934
+ // "beneficiary": "adcd43fb-9ba6-41f7-8c0d-7013482cb88f",
935
+ // "withdrawalId": "99df5ef7-eab6-4033-be49-312930fbd1ea",
936
+ // "fee": "34.005078",
937
+ // "state": "PENDING",
938
+ // "timestamp": "1634218452595"
939
+ // },
940
+ //
941
+ return this.parseTransaction(response, currency);
942
+ }
943
+ async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
944
+ /**
945
+ * @method
946
+ * @name blockchaincom#fetchWithdrawals
947
+ * @description fetch all withdrawals made from an account
948
+ * @param {string} code unified currency code
949
+ * @param {int} [since] the earliest time in ms to fetch withdrawals for
950
+ * @param {int} [limit] the maximum number of withdrawals structures to retrieve
951
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
952
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
953
+ */
954
+ await this.loadMarkets();
955
+ const request = {
956
+ // 'from' : integer timestamp in ms
957
+ // 'to' : integer timestamp in ms
958
+ };
959
+ if (since !== undefined) {
960
+ request['from'] = since;
961
+ }
962
+ let currency = undefined;
963
+ if (code !== undefined) {
964
+ currency = this.currency(code);
965
+ }
966
+ const response = await this.privateGetWithdrawals(this.extend(request, params));
967
+ return this.parseTransactions(response, currency, since, limit);
968
+ }
969
+ async fetchWithdrawal(id, code = undefined, params = {}) {
970
+ /**
971
+ * @method
972
+ * @name blockchaincom#fetchWithdrawal
973
+ * @description fetch data on a currency withdrawal via the withdrawal id
974
+ * @param {string} id withdrawal id
975
+ * @param {string} code not used by blockchaincom.fetchWithdrawal
976
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
977
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
978
+ */
979
+ await this.loadMarkets();
980
+ const request = {
981
+ 'withdrawalId': id,
982
+ };
983
+ const response = await this.privateGetWithdrawalsWithdrawalId(this.extend(request, params));
984
+ return this.parseTransaction(response);
985
+ }
986
+ async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
987
+ /**
988
+ * @method
989
+ * @name blockchaincom#fetchDeposits
990
+ * @description fetch all deposits made to an account
991
+ * @param {string} code unified currency code
992
+ * @param {int} [since] the earliest time in ms to fetch deposits for
993
+ * @param {int} [limit] the maximum number of deposits structures to retrieve
994
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
995
+ * @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
996
+ */
997
+ await this.loadMarkets();
998
+ const request = {
999
+ // 'from' : integer timestamp in ms
1000
+ // 'to' : integer timestap in ms
1001
+ };
1002
+ if (since !== undefined) {
1003
+ request['from'] = since;
1004
+ }
1005
+ let currency = undefined;
1006
+ if (code !== undefined) {
1007
+ currency = this.currency(code);
1008
+ }
1009
+ const response = await this.privateGetDeposits(this.extend(request, params));
1010
+ return this.parseTransactions(response, currency, since, limit);
1011
+ }
1012
+ async fetchDeposit(id, code = undefined, params = {}) {
1013
+ /**
1014
+ * @method
1015
+ * @name blockchaincom#fetchDeposit
1016
+ * @description fetch information on a deposit
1017
+ * @param {string} id deposit id
1018
+ * @param {string} code not used by blockchaincom fetchDeposit ()
1019
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1020
+ * @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
1021
+ */
1022
+ await this.loadMarkets();
1023
+ const depositId = this.safeString(params, 'depositId', id);
1024
+ const request = {
1025
+ 'depositId': depositId,
1026
+ };
1027
+ const deposit = await this.privateGetDepositsDepositId(this.extend(request, params));
1028
+ return this.parseTransaction(deposit);
1029
+ }
1030
+ async fetchBalance(params = {}) {
1031
+ /**
1032
+ * @method
1033
+ * @name blockchaincom#fetchBalance
1034
+ * @description query for balance and get the amount of funds available for trading or funds locked in orders
1035
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1036
+ * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1037
+ */
1038
+ await this.loadMarkets();
1039
+ const accountName = this.safeString(params, 'account', 'primary');
1040
+ params = this.omit(params, 'account');
1041
+ const request = {
1042
+ 'account': accountName,
1043
+ };
1044
+ const response = await this.privateGetAccounts(this.extend(request, params));
1045
+ //
1046
+ // {
1047
+ // "primary": [
1048
+ // {
1049
+ // "currency":"ETH",
1050
+ // "balance":0.009,
1051
+ // "available":0.009,
1052
+ // "balance_local":30.82869,
1053
+ // "available_local":30.82869,
1054
+ // "rate":3425.41
1055
+ // },
1056
+ // ...
1057
+ // ]
1058
+ // }
1059
+ //
1060
+ const balances = this.safeValue(response, accountName);
1061
+ if (balances === undefined) {
1062
+ throw new errors.ExchangeError(this.id + ' fetchBalance() could not find the "' + accountName + '" account');
1063
+ }
1064
+ const result = { 'info': response };
1065
+ for (let i = 0; i < balances.length; i++) {
1066
+ const entry = balances[i];
1067
+ const currencyId = this.safeString(entry, 'currency');
1068
+ const code = this.safeCurrencyCode(currencyId);
1069
+ const account = this.account();
1070
+ account['free'] = this.safeString(entry, 'available');
1071
+ account['total'] = this.safeString(entry, 'balance');
1072
+ result[code] = account;
1073
+ }
1074
+ return this.safeBalance(result);
1075
+ }
1076
+ async fetchOrder(id, symbol = undefined, params = {}) {
1077
+ /**
1078
+ * @method
1079
+ * @name blockchaincom#fetchOrder
1080
+ * @description fetches information on an order made by the user
1081
+ * @param {string} symbol not used by blockchaincom fetchOrder
1082
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
1083
+ * @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
1084
+ */
1085
+ // note: only works with exchange-order-id
1086
+ // does not work with clientOrderId
1087
+ await this.loadMarkets();
1088
+ const request = {
1089
+ 'orderId': id,
1090
+ };
1091
+ const response = await this.privateGetOrdersOrderId(this.extend(request, params));
1092
+ //
1093
+ // {
1094
+ // "exOrdId": 11111111,
1095
+ // "clOrdId": "ABC",
1096
+ // "ordType": "MARKET",
1097
+ // "ordStatus": "FILLED",
1098
+ // "side": "BUY",
1099
+ // "price": 0.12345,
1100
+ // "text": "string",
1101
+ // "symbol": "BTC-USD",
1102
+ // "lastShares": 0.5678,
1103
+ // "lastPx": 3500.12,
1104
+ // "leavesQty": 10,
1105
+ // "cumQty": 0.123345,
1106
+ // "avgPx": 345.33,
1107
+ // "timestamp": 1592830770594
1108
+ // }
1109
+ //
1110
+ return this.parseOrder(response);
1111
+ }
1112
+ sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
1113
+ const requestPath = '/' + this.implodeParams(path, params);
1114
+ let url = this.urls['api'][api] + requestPath;
1115
+ const query = this.omit(params, this.extractParams(path));
1116
+ if (api === 'public') {
1117
+ if (Object.keys(query).length) {
1118
+ url += '?' + this.urlencode(query);
1119
+ }
1120
+ }
1121
+ else if (api === 'private') {
1122
+ this.checkRequiredCredentials();
1123
+ headers = {
1124
+ 'X-API-Token': this.secret,
1125
+ };
1126
+ if ((method === 'GET')) {
1127
+ if (Object.keys(query).length) {
1128
+ url += '?' + this.urlencode(query);
1129
+ }
1130
+ }
1131
+ else {
1132
+ body = this.json(query);
1133
+ headers['Content-Type'] = 'application/json';
1134
+ }
1135
+ }
1136
+ return { 'url': url, 'method': method, 'body': body, 'headers': headers };
1137
+ }
1138
+ handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
1139
+ // {"timestamp":"2021-10-21T15:13:58.837+00:00","status":404,"error":"Not Found","message":"","path":"/orders/505050"
1140
+ if (response === undefined) {
1141
+ return undefined;
1142
+ }
1143
+ const text = this.safeString(response, 'text');
1144
+ if (text !== undefined) { // if trade currency account is empty returns 200 with rejected order
1145
+ if (text === 'Insufficient Balance') {
1146
+ throw new errors.InsufficientFunds(this.id + ' ' + body);
1147
+ }
1148
+ }
1149
+ const errorCode = this.safeString(response, 'status');
1150
+ const errorMessage = this.safeString(response, 'error');
1151
+ if (code !== undefined) {
1152
+ const feedback = this.id + ' ' + this.json(response);
1153
+ this.throwExactlyMatchedException(this.exceptions['exact'], errorCode, feedback);
1154
+ this.throwBroadlyMatchedException(this.exceptions['broad'], errorMessage, feedback);
1155
+ }
1156
+ return undefined;
1157
+ }
1158
+ }
1159
+
1160
+ module.exports = blockchaincom;