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,704 @@
1
+ 'use strict';
2
+
3
+ var bitvavo$1 = require('../bitvavo.js');
4
+ var errors = require('../base/errors.js');
5
+ var Cache = require('../base/ws/Cache.js');
6
+ var sha256 = require('../static_dependencies/noble-hashes/sha256.js');
7
+
8
+ // ---------------------------------------------------------------------------
9
+ // ---------------------------------------------------------------------------
10
+ class bitvavo extends bitvavo$1 {
11
+ describe() {
12
+ return this.deepExtend(super.describe(), {
13
+ 'has': {
14
+ 'ws': true,
15
+ 'createOrderWs': false,
16
+ 'editOrderWs': false,
17
+ 'fetchOpenOrdersWs': false,
18
+ 'fetchOrderWs': false,
19
+ 'cancelOrderWs': false,
20
+ 'cancelOrdersWs': false,
21
+ 'cancelAllOrdersWs': false,
22
+ 'fetchTradesWs': false,
23
+ 'fetchBalanceWs': false,
24
+ 'watchOrderBook': true,
25
+ 'watchTrades': true,
26
+ 'watchTicker': true,
27
+ 'watchOHLCV': true,
28
+ 'watchOrders': true,
29
+ 'watchMyTrades': true,
30
+ },
31
+ 'urls': {
32
+ 'api': {
33
+ 'ws': 'wss://ws.bitvavo.com/v2',
34
+ },
35
+ },
36
+ 'options': {
37
+ 'tradesLimit': 1000,
38
+ 'ordersLimit': 1000,
39
+ 'OHLCVLimit': 1000,
40
+ },
41
+ });
42
+ }
43
+ async watchPublic(name, symbol, params = {}) {
44
+ await this.loadMarkets();
45
+ const market = this.market(symbol);
46
+ const messageHash = name + '@' + market['id'];
47
+ const url = this.urls['api']['ws'];
48
+ const request = {
49
+ 'action': 'subscribe',
50
+ 'channels': [
51
+ {
52
+ 'name': name,
53
+ 'markets': [
54
+ market['id'],
55
+ ],
56
+ },
57
+ ],
58
+ };
59
+ const message = this.extend(request, params);
60
+ return await this.watch(url, messageHash, message, messageHash);
61
+ }
62
+ async watchTicker(symbol, params = {}) {
63
+ /**
64
+ * @method
65
+ * @name bitvavo#watchTicker
66
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
67
+ * @param {string} symbol unified symbol of the market to fetch the ticker for
68
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
69
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
70
+ */
71
+ return await this.watchPublic('ticker24h', symbol, params);
72
+ }
73
+ handleTicker(client, message) {
74
+ //
75
+ // {
76
+ // "event": "ticker24h",
77
+ // "data": [
78
+ // {
79
+ // "market": "ETH-EUR",
80
+ // "open": "193.5",
81
+ // "high": "202.72",
82
+ // "low": "192.46",
83
+ // "last": "199.01",
84
+ // "volume": "3587.05020246",
85
+ // "volumeQuote": "708030.17",
86
+ // "bid": "199.56",
87
+ // "bidSize": "4.14730803",
88
+ // "ask": "199.57",
89
+ // "askSize": "6.13642074",
90
+ // "timestamp": 1590770885217
91
+ // }
92
+ // ]
93
+ // }
94
+ //
95
+ const event = this.safeString(message, 'event');
96
+ const tickers = this.safeValue(message, 'data', []);
97
+ for (let i = 0; i < tickers.length; i++) {
98
+ const data = tickers[i];
99
+ const marketId = this.safeString(data, 'market');
100
+ const market = this.safeMarket(marketId, undefined, '-');
101
+ const messageHash = event + '@' + marketId;
102
+ const ticker = this.parseTicker(data, market);
103
+ const symbol = ticker['symbol'];
104
+ this.tickers[symbol] = ticker;
105
+ client.resolve(ticker, messageHash);
106
+ }
107
+ return message;
108
+ }
109
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
110
+ /**
111
+ * @method
112
+ * @name bitvavo#watchTrades
113
+ * @description get the list of most recent trades for a particular symbol
114
+ * @param {string} symbol unified symbol of the market to fetch trades for
115
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
116
+ * @param {int} [limit] the maximum amount of trades to fetch
117
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
118
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
119
+ */
120
+ await this.loadMarkets();
121
+ symbol = this.symbol(symbol);
122
+ const trades = await this.watchPublic('trades', symbol, params);
123
+ if (this.newUpdates) {
124
+ limit = trades.getLimit(symbol, limit);
125
+ }
126
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
127
+ }
128
+ handleTrade(client, message) {
129
+ //
130
+ // {
131
+ // "event": "trade",
132
+ // "timestamp": 1590779594547,
133
+ // "market": "ETH-EUR",
134
+ // "id": "450c3298-f082-4461-9e2c-a0262cc7cc2e",
135
+ // "amount": "0.05026233",
136
+ // "price": "198.46",
137
+ // "side": "buy"
138
+ // }
139
+ //
140
+ const marketId = this.safeString(message, 'market');
141
+ const market = this.safeMarket(marketId, undefined, '-');
142
+ const symbol = market['symbol'];
143
+ const name = 'trades';
144
+ const messageHash = name + '@' + marketId;
145
+ const trade = this.parseTrade(message, market);
146
+ let tradesArray = this.safeValue(this.trades, symbol);
147
+ if (tradesArray === undefined) {
148
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
149
+ tradesArray = new Cache.ArrayCache(limit);
150
+ }
151
+ tradesArray.append(trade);
152
+ this.trades[symbol] = tradesArray;
153
+ client.resolve(tradesArray, messageHash);
154
+ }
155
+ async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
156
+ /**
157
+ * @method
158
+ * @name bitvavo#watchOHLCV
159
+ * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
160
+ * @param {string} symbol unified symbol of the market to fetch OHLCV data for
161
+ * @param {string} timeframe the length of time each candle represents
162
+ * @param {int} [since] timestamp in ms of the earliest candle to fetch
163
+ * @param {int} [limit] the maximum amount of candles to fetch
164
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
165
+ * @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
166
+ */
167
+ await this.loadMarkets();
168
+ const market = this.market(symbol);
169
+ symbol = market['symbol'];
170
+ const name = 'candles';
171
+ const marketId = market['id'];
172
+ const interval = this.safeString(this.timeframes, timeframe, timeframe);
173
+ const messageHash = name + '@' + marketId + '_' + interval;
174
+ const url = this.urls['api']['ws'];
175
+ const request = {
176
+ 'action': 'subscribe',
177
+ 'channels': [
178
+ {
179
+ 'name': 'candles',
180
+ 'interval': [interval],
181
+ 'markets': [marketId],
182
+ },
183
+ ],
184
+ };
185
+ const message = this.extend(request, params);
186
+ const ohlcv = await this.watch(url, messageHash, message, messageHash);
187
+ if (this.newUpdates) {
188
+ limit = ohlcv.getLimit(symbol, limit);
189
+ }
190
+ return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
191
+ }
192
+ handleOHLCV(client, message) {
193
+ //
194
+ // {
195
+ // "event": "candle",
196
+ // "market": "BTC-EUR",
197
+ // "interval": "1m",
198
+ // "candle": [
199
+ // [
200
+ // 1590797160000,
201
+ // "8480.9",
202
+ // "8480.9",
203
+ // "8480.9",
204
+ // "8480.9",
205
+ // "0.01038628"
206
+ // ]
207
+ // ]
208
+ // }
209
+ //
210
+ const name = 'candles';
211
+ const marketId = this.safeString(message, 'market');
212
+ const market = this.safeMarket(marketId, undefined, '-');
213
+ const symbol = market['symbol'];
214
+ const interval = this.safeString(message, 'interval');
215
+ // use a reverse lookup in a static map instead
216
+ const timeframe = this.findTimeframe(interval);
217
+ const messageHash = name + '@' + marketId + '_' + interval;
218
+ const candles = this.safeValue(message, 'candle');
219
+ this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
220
+ let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
221
+ if (stored === undefined) {
222
+ const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
223
+ stored = new Cache.ArrayCacheByTimestamp(limit);
224
+ this.ohlcvs[symbol][timeframe] = stored;
225
+ }
226
+ for (let i = 0; i < candles.length; i++) {
227
+ const candle = candles[i];
228
+ const parsed = this.parseOHLCV(candle, market);
229
+ stored.append(parsed);
230
+ }
231
+ client.resolve(stored, messageHash);
232
+ }
233
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
234
+ /**
235
+ * @method
236
+ * @name bitvavo#watchOrderBook
237
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
238
+ * @param {string} symbol unified symbol of the market to fetch the order book for
239
+ * @param {int} [limit] the maximum amount of order book entries to return
240
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
241
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
242
+ */
243
+ await this.loadMarkets();
244
+ const market = this.market(symbol);
245
+ symbol = market['symbol'];
246
+ const name = 'book';
247
+ const messageHash = name + '@' + market['id'];
248
+ const url = this.urls['api']['ws'];
249
+ const request = {
250
+ 'action': 'subscribe',
251
+ 'channels': [
252
+ {
253
+ 'name': name,
254
+ 'markets': [
255
+ market['id'],
256
+ ],
257
+ },
258
+ ],
259
+ };
260
+ const subscription = {
261
+ 'messageHash': messageHash,
262
+ 'name': name,
263
+ 'symbol': symbol,
264
+ 'marketId': market['id'],
265
+ 'method': this.handleOrderBookSubscription,
266
+ 'limit': limit,
267
+ 'params': params,
268
+ };
269
+ const message = this.extend(request, params);
270
+ const orderbook = await this.watch(url, messageHash, message, messageHash, subscription);
271
+ return orderbook.limit();
272
+ }
273
+ handleDelta(bookside, delta) {
274
+ const price = this.safeFloat(delta, 0);
275
+ const amount = this.safeFloat(delta, 1);
276
+ bookside.store(price, amount);
277
+ }
278
+ handleDeltas(bookside, deltas) {
279
+ for (let i = 0; i < deltas.length; i++) {
280
+ this.handleDelta(bookside, deltas[i]);
281
+ }
282
+ }
283
+ handleOrderBookMessage(client, message, orderbook) {
284
+ //
285
+ // {
286
+ // "event": "book",
287
+ // "market": "BTC-EUR",
288
+ // "nonce": 36947383,
289
+ // "bids": [
290
+ // [ "8477.8", "0" ]
291
+ // ],
292
+ // "asks": [
293
+ // [ "8550.9", "0" ]
294
+ // ]
295
+ // }
296
+ //
297
+ const nonce = this.safeInteger(message, 'nonce');
298
+ if (nonce > orderbook['nonce']) {
299
+ this.handleDeltas(orderbook['asks'], this.safeValue(message, 'asks', []));
300
+ this.handleDeltas(orderbook['bids'], this.safeValue(message, 'bids', []));
301
+ orderbook['nonce'] = nonce;
302
+ }
303
+ return orderbook;
304
+ }
305
+ handleOrderBook(client, message) {
306
+ //
307
+ // {
308
+ // "event": "book",
309
+ // "market": "BTC-EUR",
310
+ // "nonce": 36729561,
311
+ // "bids": [
312
+ // [ "8513.3", "0" ],
313
+ // [ '8518.8', "0.64236203" ],
314
+ // [ '8513.6', "0.32435481" ],
315
+ // ],
316
+ // "asks": []
317
+ // }
318
+ //
319
+ const event = this.safeString(message, 'event');
320
+ const marketId = this.safeString(message, 'market');
321
+ const market = this.safeMarket(marketId, undefined, '-');
322
+ const symbol = market['symbol'];
323
+ const messageHash = event + '@' + market['id'];
324
+ const orderbook = this.safeValue(this.orderbooks, symbol);
325
+ if (orderbook === undefined) {
326
+ return;
327
+ }
328
+ if (orderbook['nonce'] === undefined) {
329
+ const subscription = this.safeValue(client.subscriptions, messageHash, {});
330
+ const watchingOrderBookSnapshot = this.safeValue(subscription, 'watchingOrderBookSnapshot');
331
+ if (watchingOrderBookSnapshot === undefined) {
332
+ subscription['watchingOrderBookSnapshot'] = true;
333
+ client.subscriptions[messageHash] = subscription;
334
+ const options = this.safeValue(this.options, 'watchOrderBookSnapshot', {});
335
+ const delay = this.safeInteger(options, 'delay', this.rateLimit);
336
+ // fetch the snapshot in a separate async call after a warmup delay
337
+ this.delay(delay, this.watchOrderBookSnapshot, client, message, subscription);
338
+ }
339
+ orderbook.cache.push(message);
340
+ }
341
+ else {
342
+ this.handleOrderBookMessage(client, message, orderbook);
343
+ client.resolve(orderbook, messageHash);
344
+ }
345
+ }
346
+ async watchOrderBookSnapshot(client, message, subscription) {
347
+ const params = this.safeValue(subscription, 'params');
348
+ const marketId = this.safeString(subscription, 'marketId');
349
+ const name = 'getBook';
350
+ const messageHash = name + '@' + marketId;
351
+ const url = this.urls['api']['ws'];
352
+ const request = {
353
+ 'action': name,
354
+ 'market': marketId,
355
+ };
356
+ const orderbook = await this.watch(url, messageHash, this.extend(request, params), messageHash, subscription);
357
+ return orderbook.limit();
358
+ }
359
+ handleOrderBookSnapshot(client, message) {
360
+ //
361
+ // {
362
+ // "action": "getBook",
363
+ // "response": {
364
+ // "market": "BTC-EUR",
365
+ // "nonce": 36946120,
366
+ // "bids": [
367
+ // [ '8494.9', "0.24399521" ],
368
+ // [ '8494.8', "0.34884085" ],
369
+ // [ '8493.9', "0.14535128" ],
370
+ // ],
371
+ // "asks": [
372
+ // [ "8495", "0.46982463" ],
373
+ // [ '8495.1', "0.12178267" ],
374
+ // [ '8496.2', "0.21924143" ],
375
+ // ]
376
+ // }
377
+ // }
378
+ //
379
+ const response = this.safeValue(message, 'response');
380
+ if (response === undefined) {
381
+ return message;
382
+ }
383
+ const marketId = this.safeString(response, 'market');
384
+ const symbol = this.safeSymbol(marketId, undefined, '-');
385
+ const name = 'book';
386
+ const messageHash = name + '@' + marketId;
387
+ const orderbook = this.orderbooks[symbol];
388
+ const snapshot = this.parseOrderBook(response, symbol);
389
+ snapshot['nonce'] = this.safeInteger(response, 'nonce');
390
+ orderbook.reset(snapshot);
391
+ // unroll the accumulated deltas
392
+ const messages = orderbook.cache;
393
+ for (let i = 0; i < messages.length; i++) {
394
+ const messageItem = messages[i];
395
+ this.handleOrderBookMessage(client, messageItem, orderbook);
396
+ }
397
+ this.orderbooks[symbol] = orderbook;
398
+ client.resolve(orderbook, messageHash);
399
+ }
400
+ handleOrderBookSubscription(client, message, subscription) {
401
+ const symbol = this.safeString(subscription, 'symbol');
402
+ const limit = this.safeInteger(subscription, 'limit');
403
+ if (symbol in this.orderbooks) {
404
+ delete this.orderbooks[symbol];
405
+ }
406
+ this.orderbooks[symbol] = this.orderBook({}, limit);
407
+ }
408
+ handleOrderBookSubscriptions(client, message, marketIds) {
409
+ const name = 'book';
410
+ for (let i = 0; i < marketIds.length; i++) {
411
+ const marketId = this.safeString(marketIds, i);
412
+ const symbol = this.safeSymbol(marketId, undefined, '-');
413
+ const messageHash = name + '@' + marketId;
414
+ if (!(symbol in this.orderbooks)) {
415
+ const subscription = this.safeValue(client.subscriptions, messageHash);
416
+ const method = this.safeValue(subscription, 'method');
417
+ if (method !== undefined) {
418
+ method.call(this, client, message, subscription);
419
+ }
420
+ }
421
+ }
422
+ }
423
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
424
+ /**
425
+ * @method
426
+ * @name bitvavo#watchOrders
427
+ * @description watches information on multiple orders made by the user
428
+ * @param {string} symbol unified market symbol of the market orders were made in
429
+ * @param {int} [since] the earliest time in ms to fetch orders for
430
+ * @param {int} [limit] the maximum number of order structures to retrieve
431
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
432
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
433
+ */
434
+ if (symbol === undefined) {
435
+ throw new errors.ArgumentsRequired(this.id + ' watchOrders() requires a symbol argument');
436
+ }
437
+ await this.loadMarkets();
438
+ await this.authenticate();
439
+ const market = this.market(symbol);
440
+ symbol = market['symbol'];
441
+ const marketId = market['id'];
442
+ const url = this.urls['api']['ws'];
443
+ const name = 'account';
444
+ const messageHash = 'order:' + symbol;
445
+ const request = {
446
+ 'action': 'subscribe',
447
+ 'channels': [
448
+ {
449
+ 'name': name,
450
+ 'markets': [marketId],
451
+ },
452
+ ],
453
+ };
454
+ const orders = await this.watch(url, messageHash, request, messageHash);
455
+ if (this.newUpdates) {
456
+ limit = orders.getLimit(symbol, limit);
457
+ }
458
+ return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
459
+ }
460
+ async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
461
+ /**
462
+ * @method
463
+ * @name bitvavo#watchMyTrades
464
+ * @description watches information on multiple trades made by the user
465
+ * @param {string} symbol unified market symbol of the market trades were made in
466
+ * @param {int} [since] the earliest time in ms to fetch trades for
467
+ * @param {int} [limit] the maximum number of trade structures to retrieve
468
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
469
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=ortradeder-structure
470
+ */
471
+ if (symbol === undefined) {
472
+ throw new errors.ArgumentsRequired(this.id + ' watchMyTrades() requires a symbol argument');
473
+ }
474
+ await this.loadMarkets();
475
+ await this.authenticate();
476
+ const market = this.market(symbol);
477
+ symbol = market['symbol'];
478
+ const marketId = market['id'];
479
+ const url = this.urls['api']['ws'];
480
+ const name = 'account';
481
+ const messageHash = 'myTrades:' + symbol;
482
+ const request = {
483
+ 'action': 'subscribe',
484
+ 'channels': [
485
+ {
486
+ 'name': name,
487
+ 'markets': [marketId],
488
+ },
489
+ ],
490
+ };
491
+ const trades = await this.watch(url, messageHash, request, messageHash);
492
+ if (this.newUpdates) {
493
+ limit = trades.getLimit(symbol, limit);
494
+ }
495
+ return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
496
+ }
497
+ handleOrder(client, message) {
498
+ //
499
+ // {
500
+ // "event": "order",
501
+ // "orderId": "f0e5180f-9497-4d05-9dc2-7056e8a2de9b",
502
+ // "market": "ETH-EUR",
503
+ // "created": 1590948500319,
504
+ // "updated": 1590948500319,
505
+ // "status": "new",
506
+ // "side": "sell",
507
+ // "orderType": "limit",
508
+ // "amount": "0.1",
509
+ // "amountRemaining": "0.1",
510
+ // "price": "300",
511
+ // "onHold": "0.1",
512
+ // "onHoldCurrency": "ETH",
513
+ // "selfTradePrevention": "decrementAndCancel",
514
+ // "visible": true,
515
+ // "timeInForce": "GTC",
516
+ // "postOnly": false
517
+ // }
518
+ //
519
+ const marketId = this.safeString(message, 'market');
520
+ const market = this.safeMarket(marketId, undefined, '-');
521
+ const symbol = market['symbol'];
522
+ const messageHash = 'order:' + symbol;
523
+ const order = this.parseOrder(message, market);
524
+ if (this.orders === undefined) {
525
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
526
+ this.orders = new Cache.ArrayCacheBySymbolById(limit);
527
+ }
528
+ const orders = this.orders;
529
+ orders.append(order);
530
+ client.resolve(this.orders, messageHash);
531
+ }
532
+ handleMyTrade(client, message) {
533
+ //
534
+ // {
535
+ // "event": "fill",
536
+ // "timestamp": 1590964470132,
537
+ // "market": "ETH-EUR",
538
+ // "orderId": "85d082e1-eda4-4209-9580-248281a29a9a",
539
+ // "fillId": "861d2da5-aa93-475c-8d9a-dce431bd4211",
540
+ // "side": "sell",
541
+ // "amount": "0.1",
542
+ // "price": "211.46",
543
+ // "taker": true,
544
+ // "fee": "0.056",
545
+ // "feeCurrency": "EUR"
546
+ // }
547
+ //
548
+ const marketId = this.safeString(message, 'market');
549
+ const market = this.safeMarket(marketId, undefined, '-');
550
+ const symbol = market['symbol'];
551
+ const messageHash = 'myTrades:' + symbol;
552
+ const trade = this.parseTrade(message, market);
553
+ if (this.myTrades === undefined) {
554
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
555
+ this.myTrades = new Cache.ArrayCache(limit);
556
+ }
557
+ const tradesArray = this.myTrades;
558
+ tradesArray.append(trade);
559
+ client.resolve(tradesArray, messageHash);
560
+ }
561
+ handleSubscriptionStatus(client, message) {
562
+ //
563
+ // {
564
+ // "event": "subscribed",
565
+ // "subscriptions": {
566
+ // "book": [ "BTC-EUR" ]
567
+ // }
568
+ // }
569
+ //
570
+ const subscriptions = this.safeValue(message, 'subscriptions', {});
571
+ const methods = {
572
+ 'book': this.handleOrderBookSubscriptions,
573
+ };
574
+ const names = Object.keys(subscriptions);
575
+ for (let i = 0; i < names.length; i++) {
576
+ const name = names[i];
577
+ const method = this.safeValue(methods, name);
578
+ if (method !== undefined) {
579
+ const subscription = this.safeValue(subscriptions, name);
580
+ method.call(this, client, message, subscription);
581
+ }
582
+ }
583
+ return message;
584
+ }
585
+ authenticate(params = {}) {
586
+ const url = this.urls['api']['ws'];
587
+ const client = this.client(url);
588
+ const messageHash = 'authenticated';
589
+ let future = this.safeValue(client.subscriptions, messageHash);
590
+ if (future === undefined) {
591
+ const timestamp = this.milliseconds();
592
+ const stringTimestamp = timestamp.toString();
593
+ const auth = stringTimestamp + 'GET/' + this.version + '/websocket';
594
+ const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256.sha256);
595
+ const action = 'authenticate';
596
+ const request = {
597
+ 'action': action,
598
+ 'key': this.apiKey,
599
+ 'signature': signature,
600
+ 'timestamp': timestamp,
601
+ };
602
+ const message = this.extend(request, params);
603
+ future = this.watch(url, messageHash, message);
604
+ client.subscriptions[messageHash] = future;
605
+ }
606
+ return future;
607
+ }
608
+ handleAuthenticationMessage(client, message) {
609
+ //
610
+ // {
611
+ // "event": "authenticate",
612
+ // "authenticated": true
613
+ // }
614
+ //
615
+ const messageHash = 'authenticated';
616
+ const authenticated = this.safeValue(message, 'authenticated', false);
617
+ if (authenticated) {
618
+ // we resolve the future here permanently so authentication only happens once
619
+ client.resolve(message, messageHash);
620
+ }
621
+ else {
622
+ const error = new errors.AuthenticationError(this.json(message));
623
+ client.reject(error, messageHash);
624
+ // allows further authentication attempts
625
+ if (messageHash in client.subscriptions) {
626
+ delete client.subscriptions[messageHash];
627
+ }
628
+ }
629
+ }
630
+ handleMessage(client, message) {
631
+ //
632
+ // {
633
+ // "event": "subscribed",
634
+ // "subscriptions": {
635
+ // "book": [ "BTC-EUR" ]
636
+ // }
637
+ // }
638
+ //
639
+ //
640
+ // {
641
+ // "event": "book",
642
+ // "market": "BTC-EUR",
643
+ // "nonce": 36729561,
644
+ // "bids": [
645
+ // [ "8513.3", "0" ],
646
+ // [ '8518.8', "0.64236203" ],
647
+ // [ '8513.6', "0.32435481" ],
648
+ // ],
649
+ // "asks": []
650
+ // }
651
+ //
652
+ // {
653
+ // "action": "getBook",
654
+ // "response": {
655
+ // "market": "BTC-EUR",
656
+ // "nonce": 36946120,
657
+ // "bids": [
658
+ // [ '8494.9', "0.24399521" ],
659
+ // [ '8494.8', "0.34884085" ],
660
+ // [ '8493.9', "0.14535128" ],
661
+ // ],
662
+ // "asks": [
663
+ // [ "8495", "0.46982463" ],
664
+ // [ '8495.1', "0.12178267" ],
665
+ // [ '8496.2', "0.21924143" ],
666
+ // ]
667
+ // }
668
+ // }
669
+ //
670
+ // {
671
+ // "event": "authenticate",
672
+ // "authenticated": true
673
+ // }
674
+ //
675
+ const methods = {
676
+ 'subscribed': this.handleSubscriptionStatus,
677
+ 'book': this.handleOrderBook,
678
+ 'getBook': this.handleOrderBookSnapshot,
679
+ 'trade': this.handleTrade,
680
+ 'candle': this.handleOHLCV,
681
+ 'ticker24h': this.handleTicker,
682
+ 'authenticate': this.handleAuthenticationMessage,
683
+ 'order': this.handleOrder,
684
+ 'fill': this.handleMyTrade,
685
+ };
686
+ const event = this.safeString(message, 'event');
687
+ let method = this.safeValue(methods, event);
688
+ if (method === undefined) {
689
+ const action = this.safeString(message, 'action');
690
+ method = this.safeValue(methods, action);
691
+ if (method === undefined) {
692
+ return message;
693
+ }
694
+ else {
695
+ return method.call(this, client, message);
696
+ }
697
+ }
698
+ else {
699
+ return method.call(this, client, message);
700
+ }
701
+ }
702
+ }
703
+
704
+ module.exports = bitvavo;