ccxt 4.2.10 → 4.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/README.md +5 -5
  2. package/build.sh +4 -4
  3. package/dist/ccxt.browser.js +695 -282
  4. package/dist/ccxt.browser.min.js +3 -3
  5. package/dist/cjs/_virtual/agent.js +7 -0
  6. package/dist/cjs/_virtual/parse-proxy-response.js +7 -0
  7. package/dist/cjs/_virtual/promisify.js +7 -0
  8. package/dist/cjs/ccxt.js +1 -1
  9. package/dist/cjs/js/ccxt.js +474 -0
  10. package/dist/cjs/js/src/abstract/ace.js +9 -0
  11. package/dist/cjs/js/src/abstract/alpaca.js +9 -0
  12. package/dist/cjs/js/src/abstract/ascendex.js +9 -0
  13. package/dist/cjs/js/src/abstract/bigone.js +9 -0
  14. package/dist/cjs/js/src/abstract/binance.js +9 -0
  15. package/dist/cjs/js/src/abstract/bingx.js +9 -0
  16. package/dist/cjs/js/src/abstract/bit2c.js +9 -0
  17. package/dist/cjs/js/src/abstract/bitbank.js +9 -0
  18. package/dist/cjs/js/src/abstract/bitbns.js +9 -0
  19. package/dist/cjs/js/src/abstract/bitfinex.js +9 -0
  20. package/dist/cjs/js/src/abstract/bitfinex2.js +9 -0
  21. package/dist/cjs/js/src/abstract/bitflyer.js +9 -0
  22. package/dist/cjs/js/src/abstract/bitforex.js +9 -0
  23. package/dist/cjs/js/src/abstract/bitget.js +9 -0
  24. package/dist/cjs/js/src/abstract/bithumb.js +9 -0
  25. package/dist/cjs/js/src/abstract/bitmart.js +9 -0
  26. package/dist/cjs/js/src/abstract/bitmex.js +9 -0
  27. package/dist/cjs/js/src/abstract/bitopro.js +9 -0
  28. package/dist/cjs/js/src/abstract/bitpanda.js +9 -0
  29. package/dist/cjs/js/src/abstract/bitrue.js +9 -0
  30. package/dist/cjs/js/src/abstract/bitso.js +9 -0
  31. package/dist/cjs/js/src/abstract/bitstamp.js +9 -0
  32. package/dist/cjs/js/src/abstract/bitteam.js +9 -0
  33. package/dist/cjs/js/src/abstract/bitvavo.js +9 -0
  34. package/dist/cjs/js/src/abstract/bl3p.js +9 -0
  35. package/dist/cjs/js/src/abstract/blockchaincom.js +9 -0
  36. package/dist/cjs/js/src/abstract/btcalpha.js +9 -0
  37. package/dist/cjs/js/src/abstract/btcbox.js +9 -0
  38. package/dist/cjs/js/src/abstract/btcmarkets.js +9 -0
  39. package/dist/cjs/js/src/abstract/btcturk.js +9 -0
  40. package/dist/cjs/js/src/abstract/bybit.js +9 -0
  41. package/dist/cjs/js/src/abstract/cex.js +9 -0
  42. package/dist/cjs/js/src/abstract/coinbase.js +9 -0
  43. package/dist/cjs/js/src/abstract/coinbasepro.js +9 -0
  44. package/dist/cjs/js/src/abstract/coincheck.js +9 -0
  45. package/dist/cjs/js/src/abstract/coinex.js +9 -0
  46. package/dist/cjs/js/src/abstract/coinlist.js +9 -0
  47. package/dist/cjs/js/src/abstract/coinmate.js +9 -0
  48. package/dist/cjs/js/src/abstract/coinone.js +9 -0
  49. package/dist/cjs/js/src/abstract/coinsph.js +9 -0
  50. package/dist/cjs/js/src/abstract/coinspot.js +9 -0
  51. package/dist/cjs/js/src/abstract/cryptocom.js +9 -0
  52. package/dist/cjs/js/src/abstract/currencycom.js +9 -0
  53. package/dist/cjs/js/src/abstract/delta.js +9 -0
  54. package/dist/cjs/js/src/abstract/deribit.js +9 -0
  55. package/dist/cjs/js/src/abstract/digifinex.js +9 -0
  56. package/dist/cjs/js/src/abstract/exmo.js +9 -0
  57. package/dist/cjs/js/src/abstract/gate.js +9 -0
  58. package/dist/cjs/js/src/abstract/gemini.js +9 -0
  59. package/dist/cjs/js/src/abstract/hitbtc.js +9 -0
  60. package/dist/cjs/js/src/abstract/hollaex.js +9 -0
  61. package/dist/cjs/js/src/abstract/htx.js +9 -0
  62. package/dist/cjs/js/src/abstract/huobijp.js +9 -0
  63. package/dist/cjs/js/src/abstract/idex.js +9 -0
  64. package/dist/cjs/js/src/abstract/independentreserve.js +9 -0
  65. package/dist/cjs/js/src/abstract/indodax.js +9 -0
  66. package/dist/cjs/js/src/abstract/kraken.js +9 -0
  67. package/dist/cjs/js/src/abstract/krakenfutures.js +9 -0
  68. package/dist/cjs/js/src/abstract/kucoin.js +9 -0
  69. package/dist/cjs/js/src/abstract/kucoinfutures.js +9 -0
  70. package/dist/cjs/js/src/abstract/kuna.js +9 -0
  71. package/dist/cjs/js/src/abstract/latoken.js +9 -0
  72. package/dist/cjs/js/src/abstract/lbank.js +9 -0
  73. package/dist/cjs/js/src/abstract/luno.js +9 -0
  74. package/dist/cjs/js/src/abstract/lykke.js +9 -0
  75. package/dist/cjs/js/src/abstract/mercado.js +9 -0
  76. package/dist/cjs/js/src/abstract/mexc.js +9 -0
  77. package/dist/cjs/js/src/abstract/ndax.js +9 -0
  78. package/dist/cjs/js/src/abstract/novadax.js +9 -0
  79. package/dist/cjs/js/src/abstract/oceanex.js +9 -0
  80. package/dist/cjs/js/src/abstract/okcoin.js +9 -0
  81. package/dist/cjs/js/src/abstract/okx.js +9 -0
  82. package/dist/cjs/js/src/abstract/p2b.js +9 -0
  83. package/dist/cjs/js/src/abstract/paymium.js +9 -0
  84. package/dist/cjs/js/src/abstract/phemex.js +9 -0
  85. package/dist/cjs/js/src/abstract/poloniex.js +9 -0
  86. package/dist/cjs/js/src/abstract/poloniexfutures.js +9 -0
  87. package/dist/cjs/js/src/abstract/probit.js +9 -0
  88. package/dist/cjs/js/src/abstract/timex.js +9 -0
  89. package/dist/cjs/js/src/abstract/tokocrypto.js +9 -0
  90. package/dist/cjs/js/src/abstract/upbit.js +9 -0
  91. package/dist/cjs/js/src/abstract/wavesexchange.js +9 -0
  92. package/dist/cjs/js/src/abstract/wazirx.js +9 -0
  93. package/dist/cjs/js/src/abstract/whitebit.js +9 -0
  94. package/dist/cjs/js/src/abstract/woo.js +9 -0
  95. package/dist/cjs/js/src/abstract/yobit.js +9 -0
  96. package/dist/cjs/js/src/abstract/zaif.js +9 -0
  97. package/dist/cjs/js/src/abstract/zonda.js +9 -0
  98. package/dist/cjs/js/src/ace.js +1058 -0
  99. package/dist/cjs/js/src/alpaca.js +1125 -0
  100. package/dist/cjs/js/src/ascendex.js +3360 -0
  101. package/dist/cjs/js/src/base/Exchange.js +5110 -0
  102. package/dist/cjs/js/src/base/Precise.js +263 -0
  103. package/dist/cjs/js/src/base/errors.js +299 -0
  104. package/dist/cjs/js/src/base/functions/crypto.js +78 -0
  105. package/dist/cjs/js/src/base/functions/encode.js +44 -0
  106. package/dist/cjs/js/src/base/functions/generic.js +193 -0
  107. package/dist/cjs/js/src/base/functions/misc.js +96 -0
  108. package/dist/cjs/js/src/base/functions/number.js +297 -0
  109. package/dist/cjs/js/src/base/functions/platform.js +28 -0
  110. package/dist/cjs/js/src/base/functions/rsa.js +34 -0
  111. package/dist/cjs/js/src/base/functions/string.js +48 -0
  112. package/dist/cjs/js/src/base/functions/throttle.js +66 -0
  113. package/dist/cjs/js/src/base/functions/time.js +187 -0
  114. package/dist/cjs/js/src/base/functions/totp.js +24 -0
  115. package/dist/cjs/js/src/base/functions/type.js +162 -0
  116. package/dist/cjs/js/src/base/functions.js +157 -0
  117. package/dist/cjs/js/src/base/ws/Cache.js +254 -0
  118. package/dist/cjs/js/src/base/ws/Client.js +299 -0
  119. package/dist/cjs/js/src/base/ws/Future.js +34 -0
  120. package/dist/cjs/js/src/base/ws/OrderBook.js +107 -0
  121. package/dist/cjs/js/src/base/ws/OrderBookSide.js +281 -0
  122. package/dist/cjs/js/src/base/ws/WsClient.js +69 -0
  123. package/dist/cjs/js/src/bequant.js +33 -0
  124. package/dist/cjs/js/src/bigone.js +2142 -0
  125. package/dist/cjs/js/src/binance.js +9729 -0
  126. package/dist/cjs/js/src/binancecoinm.js +45 -0
  127. package/dist/cjs/js/src/binanceus.js +84 -0
  128. package/dist/cjs/js/src/binanceusdm.js +58 -0
  129. package/dist/cjs/js/src/bingx.js +3737 -0
  130. package/dist/cjs/js/src/bit2c.js +916 -0
  131. package/dist/cjs/js/src/bitbank.js +1000 -0
  132. package/dist/cjs/js/src/bitbay.js +17 -0
  133. package/dist/cjs/js/src/bitbns.js +1220 -0
  134. package/dist/cjs/js/src/bitcoincom.js +17 -0
  135. package/dist/cjs/js/src/bitfinex.js +1670 -0
  136. package/dist/cjs/js/src/bitfinex2.js +2990 -0
  137. package/dist/cjs/js/src/bitflyer.js +1045 -0
  138. package/dist/cjs/js/src/bitforex.js +852 -0
  139. package/dist/cjs/js/src/bitget.js +8284 -0
  140. package/dist/cjs/js/src/bithumb.js +1090 -0
  141. package/dist/cjs/js/src/bitmart.js +4454 -0
  142. package/dist/cjs/js/src/bitmex.js +2884 -0
  143. package/dist/cjs/js/src/bitopro.js +1724 -0
  144. package/dist/cjs/js/src/bitpanda.js +2002 -0
  145. package/dist/cjs/js/src/bitrue.js +3253 -0
  146. package/dist/cjs/js/src/bitso.js +1753 -0
  147. package/dist/cjs/js/src/bitstamp.js +2188 -0
  148. package/dist/cjs/js/src/bitteam.js +2309 -0
  149. package/dist/cjs/js/src/bitvavo.js +1968 -0
  150. package/dist/cjs/js/src/bl3p.js +447 -0
  151. package/dist/cjs/js/src/blockchaincom.js +1160 -0
  152. package/dist/cjs/js/src/btcalpha.js +929 -0
  153. package/dist/cjs/js/src/btcbox.js +565 -0
  154. package/dist/cjs/js/src/btcmarkets.js +1237 -0
  155. package/dist/cjs/js/src/btcturk.js +929 -0
  156. package/dist/cjs/js/src/bybit.js +7646 -0
  157. package/dist/cjs/js/src/cex.js +1693 -0
  158. package/dist/cjs/js/src/coinbase.js +3274 -0
  159. package/dist/cjs/js/src/coinbasepro.js +1866 -0
  160. package/dist/cjs/js/src/coincheck.js +843 -0
  161. package/dist/cjs/js/src/coinex.js +5414 -0
  162. package/dist/cjs/js/src/coinlist.js +2329 -0
  163. package/dist/cjs/js/src/coinmate.js +989 -0
  164. package/dist/cjs/js/src/coinone.js +1185 -0
  165. package/dist/cjs/js/src/coinsph.js +1933 -0
  166. package/dist/cjs/js/src/coinspot.js +548 -0
  167. package/dist/cjs/js/src/cryptocom.js +3007 -0
  168. package/dist/cjs/js/src/currencycom.js +2015 -0
  169. package/dist/cjs/js/src/delta.js +3256 -0
  170. package/dist/cjs/js/src/deribit.js +3306 -0
  171. package/dist/cjs/js/src/digifinex.js +4307 -0
  172. package/dist/cjs/js/src/exmo.js +2645 -0
  173. package/dist/cjs/js/src/fmfwio.js +34 -0
  174. package/dist/cjs/js/src/gate.js +7054 -0
  175. package/dist/cjs/js/src/gateio.js +16 -0
  176. package/dist/cjs/js/src/gemini.js +1801 -0
  177. package/dist/cjs/js/src/hitbtc.js +3660 -0
  178. package/dist/cjs/js/src/hitbtc3.js +19 -0
  179. package/dist/cjs/js/src/hollaex.js +1882 -0
  180. package/dist/cjs/js/src/htx.js +9024 -0
  181. package/dist/cjs/js/src/huobi.js +16 -0
  182. package/dist/cjs/js/src/huobijp.js +1918 -0
  183. package/dist/cjs/js/src/idex.js +1770 -0
  184. package/dist/cjs/js/src/independentreserve.js +759 -0
  185. package/dist/cjs/js/src/indodax.js +1069 -0
  186. package/dist/cjs/js/src/kraken.js +2861 -0
  187. package/dist/cjs/js/src/krakenfutures.js +2407 -0
  188. package/dist/cjs/js/src/kucoin.js +4489 -0
  189. package/dist/cjs/js/src/kucoinfutures.js +2475 -0
  190. package/dist/cjs/js/src/kuna.js +1949 -0
  191. package/dist/cjs/js/src/latoken.js +1729 -0
  192. package/dist/cjs/js/src/lbank.js +2825 -0
  193. package/dist/cjs/js/src/luno.js +1044 -0
  194. package/dist/cjs/js/src/lykke.js +1303 -0
  195. package/dist/cjs/js/src/mercado.js +897 -0
  196. package/dist/cjs/js/src/mexc.js +5407 -0
  197. package/dist/cjs/js/src/ndax.js +2450 -0
  198. package/dist/cjs/js/src/novadax.js +1556 -0
  199. package/dist/cjs/js/src/oceanex.js +964 -0
  200. package/dist/cjs/js/src/okcoin.js +3115 -0
  201. package/dist/cjs/js/src/okx.js +7329 -0
  202. package/dist/cjs/js/src/p2b.js +1243 -0
  203. package/dist/cjs/js/src/paymium.js +597 -0
  204. package/dist/cjs/js/src/phemex.js +4715 -0
  205. package/dist/cjs/js/src/poloniex.js +2356 -0
  206. package/dist/cjs/js/src/poloniexfutures.js +1794 -0
  207. package/dist/cjs/js/src/pro/alpaca.js +714 -0
  208. package/dist/cjs/js/src/pro/ascendex.js +957 -0
  209. package/dist/cjs/js/src/pro/bequant.js +33 -0
  210. package/dist/cjs/js/src/pro/binance.js +2796 -0
  211. package/dist/cjs/js/src/pro/binancecoinm.js +23 -0
  212. package/dist/cjs/js/src/pro/binanceus.js +51 -0
  213. package/dist/cjs/js/src/pro/binanceusdm.js +32 -0
  214. package/dist/cjs/js/src/pro/bingx.js +944 -0
  215. package/dist/cjs/js/src/pro/bitcoincom.js +29 -0
  216. package/dist/cjs/js/src/pro/bitfinex.js +672 -0
  217. package/dist/cjs/js/src/pro/bitfinex2.js +1159 -0
  218. package/dist/cjs/js/src/pro/bitget.js +1733 -0
  219. package/dist/cjs/js/src/pro/bitmart.js +1486 -0
  220. package/dist/cjs/js/src/pro/bitmex.js +1576 -0
  221. package/dist/cjs/js/src/pro/bitopro.js +327 -0
  222. package/dist/cjs/js/src/pro/bitpanda.js +1341 -0
  223. package/dist/cjs/js/src/pro/bitrue.js +462 -0
  224. package/dist/cjs/js/src/pro/bitstamp.js +547 -0
  225. package/dist/cjs/js/src/pro/bitvavo.js +704 -0
  226. package/dist/cjs/js/src/pro/blockchaincom.js +794 -0
  227. package/dist/cjs/js/src/pro/bybit.js +1843 -0
  228. package/dist/cjs/js/src/pro/cex.js +1510 -0
  229. package/dist/cjs/js/src/pro/coinbase.js +561 -0
  230. package/dist/cjs/js/src/pro/coinbasepro.js +968 -0
  231. package/dist/cjs/js/src/pro/coinex.js +1095 -0
  232. package/dist/cjs/js/src/pro/cryptocom.js +1020 -0
  233. package/dist/cjs/js/src/pro/currencycom.js +563 -0
  234. package/dist/cjs/js/src/pro/deribit.js +825 -0
  235. package/dist/cjs/js/src/pro/exmo.js +658 -0
  236. package/dist/cjs/js/src/pro/gate.js +1316 -0
  237. package/dist/cjs/js/src/pro/gateio.js +16 -0
  238. package/dist/cjs/js/src/pro/gemini.js +649 -0
  239. package/dist/cjs/js/src/pro/hitbtc.js +1293 -0
  240. package/dist/cjs/js/src/pro/hollaex.js +597 -0
  241. package/dist/cjs/js/src/pro/htx.js +2383 -0
  242. package/dist/cjs/js/src/pro/huobi.js +16 -0
  243. package/dist/cjs/js/src/pro/huobijp.js +606 -0
  244. package/dist/cjs/js/src/pro/idex.js +714 -0
  245. package/dist/cjs/js/src/pro/independentreserve.js +280 -0
  246. package/dist/cjs/js/src/pro/kraken.js +1364 -0
  247. package/dist/cjs/js/src/pro/krakenfutures.js +1500 -0
  248. package/dist/cjs/js/src/pro/kucoin.js +1052 -0
  249. package/dist/cjs/js/src/pro/kucoinfutures.js +981 -0
  250. package/dist/cjs/js/src/pro/luno.js +322 -0
  251. package/dist/cjs/js/src/pro/mexc.js +1170 -0
  252. package/dist/cjs/js/src/pro/ndax.js +545 -0
  253. package/dist/cjs/js/src/pro/okcoin.js +760 -0
  254. package/dist/cjs/js/src/pro/okx.js +1558 -0
  255. package/dist/cjs/js/src/pro/phemex.js +1511 -0
  256. package/dist/cjs/js/src/pro/poloniex.js +1253 -0
  257. package/dist/cjs/js/src/pro/poloniexfutures.js +1014 -0
  258. package/dist/cjs/js/src/pro/probit.js +586 -0
  259. package/dist/cjs/js/src/pro/upbit.js +234 -0
  260. package/dist/cjs/js/src/pro/wazirx.js +776 -0
  261. package/dist/cjs/js/src/pro/whitebit.js +927 -0
  262. package/dist/cjs/js/src/pro/woo.js +769 -0
  263. package/dist/cjs/js/src/probit.js +1865 -0
  264. package/dist/cjs/js/src/static_dependencies/fflake/browser.js +401 -0
  265. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +195 -0
  266. package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +308 -0
  267. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +554 -0
  268. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
  269. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
  270. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
  271. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +16 -0
  272. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1760 -0
  273. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +52 -0
  274. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +81 -0
  275. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +376 -0
  276. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +70 -0
  277. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1580 -0
  278. package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +74 -0
  279. package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +24 -0
  280. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +158 -0
  281. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +429 -0
  282. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +176 -0
  283. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +324 -0
  284. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +163 -0
  285. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +245 -0
  286. package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +1018 -0
  287. package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +383 -0
  288. package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +258 -0
  289. package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +53 -0
  290. package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +120 -0
  291. package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +69 -0
  292. package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +7 -0
  293. package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +83 -0
  294. package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +240 -0
  295. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +91 -0
  296. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +130 -0
  297. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +214 -0
  298. package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +239 -0
  299. package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +93 -0
  300. package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +354 -0
  301. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +16 -0
  302. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +20 -0
  303. package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +30 -0
  304. package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +239 -0
  305. package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +372 -0
  306. package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +273 -0
  307. package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +139 -0
  308. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +14 -0
  309. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +16 -0
  310. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +81 -0
  311. package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +292 -0
  312. package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +103 -0
  313. package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +140 -0
  314. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +175 -0
  315. package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
  316. package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +7 -0
  317. package/dist/cjs/js/src/static_dependencies/scure-base/index.js +383 -0
  318. package/dist/cjs/js/src/timex.js +1562 -0
  319. package/dist/cjs/js/src/tokocrypto.js +2542 -0
  320. package/dist/cjs/js/src/upbit.js +1844 -0
  321. package/dist/cjs/js/src/wavesexchange.js +2607 -0
  322. package/dist/cjs/js/src/wazirx.js +953 -0
  323. package/dist/cjs/js/src/whitebit.js +2309 -0
  324. package/dist/cjs/js/src/woo.js +2715 -0
  325. package/dist/cjs/js/src/yobit.js +1314 -0
  326. package/dist/cjs/js/src/zaif.js +736 -0
  327. package/dist/cjs/js/src/zonda.js +1883 -0
  328. package/dist/cjs/src/base/Exchange.js +11 -0
  329. package/dist/cjs/src/bingx.js +0 -10
  330. package/dist/cjs/src/bitget.js +14 -5
  331. package/dist/cjs/src/bybit.js +1 -1
  332. package/dist/cjs/src/kucoin.js +29 -5
  333. package/js/ccxt.d.ts +1 -1
  334. package/js/ccxt.js +1 -1
  335. package/js/src/abstract/bigone.d.ts +18 -0
  336. package/js/src/abstract/binance.d.ts +2 -0
  337. package/js/src/abstract/binancecoinm.d.ts +2 -0
  338. package/js/src/abstract/binanceus.d.ts +2 -0
  339. package/js/src/abstract/binanceusdm.d.ts +2 -0
  340. package/js/src/abstract/bybit.d.ts +1 -0
  341. package/js/src/abstract/gate.d.ts +11 -0
  342. package/js/src/abstract/gateio.d.ts +11 -0
  343. package/js/src/alpaca.js +18 -18
  344. package/js/src/base/Exchange.d.ts +6 -1
  345. package/js/src/base/Exchange.js +112 -12
  346. package/js/src/bigone.d.ts +1 -2
  347. package/js/src/bigone.js +340 -145
  348. package/js/src/binance.js +15 -8
  349. package/js/src/bingx.d.ts +0 -1
  350. package/js/src/bingx.js +9 -12
  351. package/js/src/bitfinex.d.ts +2 -2
  352. package/js/src/bitfinex.js +2 -3
  353. package/js/src/bitget.js +35 -13
  354. package/js/src/bitmart.d.ts +2 -2
  355. package/js/src/bitmart.js +3 -3
  356. package/js/src/bitmex.js +1 -0
  357. package/js/src/bybit.js +3 -1
  358. package/js/src/coinlist.js +2 -3
  359. package/js/src/coinsph.js +2 -3
  360. package/js/src/deribit.js +1 -0
  361. package/js/src/gate.d.ts +4 -4
  362. package/js/src/gate.js +22 -3
  363. package/js/src/hitbtc.d.ts +4 -4
  364. package/js/src/hitbtc.js +2 -3
  365. package/js/src/htx.js +4 -7
  366. package/js/src/huobijp.js +2 -3
  367. package/js/src/kraken.js +1 -0
  368. package/js/src/kucoin.js +29 -5
  369. package/js/src/mexc.js +2 -1
  370. package/js/src/okx.js +13 -3
  371. package/js/src/pro/binance.d.ts +2 -23
  372. package/js/src/pro/binance.js +58 -22
  373. package/js/src/pro/coinbase.d.ts +2 -2
  374. package/js/src/pro/coinbase.js +4 -1
  375. package/js/src/pro/coinbasepro.d.ts +2 -2
  376. package/js/src/pro/hitbtc.d.ts +2 -2
  377. package/js/src/pro/poloniex.d.ts +2 -2
  378. package/js/src/upbit.d.ts +3 -101
  379. package/js/src/upbit.js +12 -12
  380. package/js/src/woo.js +2 -0
  381. package/package.json +11 -11
  382. package/skip-tests.json +5 -0
  383. package/tests-manager.sh +2 -2
@@ -0,0 +1,561 @@
1
+ 'use strict';
2
+
3
+ var coinbase$1 = require('../coinbase.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 coinbase extends coinbase$1 {
11
+ describe() {
12
+ return this.deepExtend(super.describe(), {
13
+ 'has': {
14
+ 'ws': true,
15
+ 'cancelAllOrdersWs': false,
16
+ 'cancelOrdersWs': false,
17
+ 'cancelOrderWs': false,
18
+ 'createOrderWs': false,
19
+ 'editOrderWs': false,
20
+ 'fetchBalanceWs': false,
21
+ 'fetchOpenOrdersWs': false,
22
+ 'fetchOrderWs': false,
23
+ 'fetchTradesWs': false,
24
+ 'watchBalance': false,
25
+ 'watchMyTrades': false,
26
+ 'watchOHLCV': false,
27
+ 'watchOrderBook': true,
28
+ 'watchOrders': true,
29
+ 'watchTicker': true,
30
+ 'watchTickers': true,
31
+ 'watchTrades': true,
32
+ },
33
+ 'urls': {
34
+ 'api': {
35
+ 'ws': 'wss://advanced-trade-ws.coinbase.com',
36
+ },
37
+ },
38
+ 'options': {
39
+ 'tradesLimit': 1000,
40
+ 'ordersLimit': 1000,
41
+ 'myTradesLimit': 1000,
42
+ 'sides': {
43
+ 'bid': 'bids',
44
+ 'offer': 'asks',
45
+ },
46
+ },
47
+ });
48
+ }
49
+ async subscribe(name, symbol = undefined, params = {}) {
50
+ /**
51
+ * @ignore
52
+ * @method
53
+ * @description subscribes to a websocket channel
54
+ * @see https://docs.cloud.coinbase.com/advanced-trade-api/docs/ws-overview#subscribe
55
+ * @param {string} name the name of the channel
56
+ * @param {string|string[]} [symbol] unified market symbol
57
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
58
+ * @returns {object} subscription to a websocket channel
59
+ */
60
+ await this.loadMarkets();
61
+ this.checkRequiredCredentials();
62
+ let market = undefined;
63
+ let messageHash = name;
64
+ let productIds = [];
65
+ if (Array.isArray(symbol)) {
66
+ const symbols = this.marketSymbols(symbol);
67
+ const marketIds = this.marketIds(symbols);
68
+ productIds = marketIds;
69
+ messageHash = messageHash + '::' + symbol.join(',');
70
+ }
71
+ else if (symbol !== undefined) {
72
+ market = this.market(symbol);
73
+ messageHash = name + '::' + market['id'];
74
+ productIds = [market['id']];
75
+ }
76
+ const url = this.urls['api']['ws'];
77
+ const timestamp = this.numberToString(this.seconds());
78
+ const auth = timestamp + name + productIds.join(',');
79
+ const subscribe = {
80
+ 'type': 'subscribe',
81
+ 'product_ids': productIds,
82
+ 'channel': name,
83
+ 'api_key': this.apiKey,
84
+ 'timestamp': timestamp,
85
+ 'signature': this.hmac(this.encode(auth), this.encode(this.secret), sha256.sha256),
86
+ };
87
+ return await this.watch(url, messageHash, subscribe, messageHash);
88
+ }
89
+ async watchTicker(symbol, params = {}) {
90
+ /**
91
+ * @method
92
+ * @name coinbasepro#watchTicker
93
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
94
+ * @see https://docs.cloud.coinbase.com/advanced-trade-api/docs/ws-channels#ticker-channel
95
+ * @param {string} [symbol] unified symbol of the market to fetch the ticker for
96
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
97
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
98
+ */
99
+ const name = 'ticker';
100
+ return await this.subscribe(name, symbol, params);
101
+ }
102
+ async watchTickers(symbols = undefined, params = {}) {
103
+ /**
104
+ * @method
105
+ * @name coinbasepro#watchTickers
106
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
107
+ * @see https://docs.cloud.coinbase.com/advanced-trade-api/docs/ws-channels#ticker-batch-channel
108
+ * @param {string[]} [symbols] unified symbol of the market to fetch the ticker for
109
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
110
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
111
+ */
112
+ if (symbols === undefined) {
113
+ throw new errors.ArgumentsRequired(this.id + ' watchTickers requires a symbols argument');
114
+ }
115
+ const name = 'ticker_batch';
116
+ const tickers = await this.subscribe(name, symbols, params);
117
+ if (this.newUpdates) {
118
+ return tickers;
119
+ }
120
+ return this.tickers;
121
+ }
122
+ handleTickers(client, message) {
123
+ //
124
+ // {
125
+ // "channel": "ticker",
126
+ // "client_id": "",
127
+ // "timestamp": "2023-02-09T20:30:37.167359596Z",
128
+ // "sequence_num": 0,
129
+ // "events": [
130
+ // {
131
+ // "type": "snapshot",
132
+ // "tickers": [
133
+ // {
134
+ // "type": "ticker",
135
+ // "product_id": "BTC-USD",
136
+ // "price": "21932.98",
137
+ // "volume_24_h": "16038.28770938",
138
+ // "low_24_h": "21835.29",
139
+ // "high_24_h": "23011.18",
140
+ // "low_52_w": "15460",
141
+ // "high_52_w": "48240",
142
+ // "price_percent_chg_24_h": "-4.15775596190603"
143
+ // }
144
+ // ]
145
+ // }
146
+ // ]
147
+ // }
148
+ //
149
+ // {
150
+ // "channel": "ticker_batch",
151
+ // "client_id": "",
152
+ // "timestamp": "2023-03-01T12:15:18.382173051Z",
153
+ // "sequence_num": 0,
154
+ // "events": [
155
+ // {
156
+ // "type": "snapshot",
157
+ // "tickers": [
158
+ // {
159
+ // "type": "ticker",
160
+ // "product_id": "DOGE-USD",
161
+ // "price": "0.08212",
162
+ // "volume_24_h": "242556423.3",
163
+ // "low_24_h": "0.07989",
164
+ // "high_24_h": "0.08308",
165
+ // "low_52_w": "0.04908",
166
+ // "high_52_w": "0.1801",
167
+ // "price_percent_chg_24_h": "0.50177456859626"
168
+ // }
169
+ // ]
170
+ // }
171
+ // ]
172
+ // }
173
+ //
174
+ const channel = this.safeString(message, 'channel');
175
+ const events = this.safeValue(message, 'events', []);
176
+ const newTickers = [];
177
+ for (let i = 0; i < events.length; i++) {
178
+ const tickersObj = events[i];
179
+ const tickers = this.safeValue(tickersObj, 'tickers', []);
180
+ for (let j = 0; j < tickers.length; j++) {
181
+ const ticker = tickers[j];
182
+ const result = this.parseWsTicker(ticker);
183
+ const symbol = result['symbol'];
184
+ this.tickers[symbol] = result;
185
+ const wsMarketId = this.safeString(ticker, 'product_id');
186
+ const messageHash = channel + '::' + wsMarketId;
187
+ newTickers.push(result);
188
+ client.resolve(result, messageHash);
189
+ }
190
+ }
191
+ const messageHashes = this.findMessageHashes(client, 'ticker_batch::');
192
+ for (let i = 0; i < messageHashes.length; i++) {
193
+ const messageHash = messageHashes[i];
194
+ const parts = messageHash.split('::');
195
+ const symbolsString = parts[1];
196
+ const symbols = symbolsString.split(',');
197
+ const tickers = this.filterByArray(newTickers, 'symbol', symbols);
198
+ if (!this.isEmpty(tickers)) {
199
+ client.resolve(tickers, messageHash);
200
+ }
201
+ }
202
+ return message;
203
+ }
204
+ parseWsTicker(ticker, market = undefined) {
205
+ //
206
+ // {
207
+ // "type": "ticker",
208
+ // "product_id": "DOGE-USD",
209
+ // "price": "0.08212",
210
+ // "volume_24_h": "242556423.3",
211
+ // "low_24_h": "0.07989",
212
+ // "high_24_h": "0.08308",
213
+ // "low_52_w": "0.04908",
214
+ // "high_52_w": "0.1801",
215
+ // "price_percent_chg_24_h": "0.50177456859626"
216
+ // }
217
+ //
218
+ const marketId = this.safeString(ticker, 'product_id');
219
+ const timestamp = undefined;
220
+ const last = this.safeNumber(ticker, 'price');
221
+ return this.safeTicker({
222
+ 'info': ticker,
223
+ 'symbol': this.safeSymbol(marketId, market, '-'),
224
+ 'timestamp': timestamp,
225
+ 'datetime': this.iso8601(timestamp),
226
+ 'high': this.safeString(ticker, 'high_24_h'),
227
+ 'low': this.safeString(ticker, 'low_24_h'),
228
+ 'bid': undefined,
229
+ 'bidVolume': undefined,
230
+ 'ask': undefined,
231
+ 'askVolume': undefined,
232
+ 'vwap': undefined,
233
+ 'open': undefined,
234
+ 'close': last,
235
+ 'last': last,
236
+ 'previousClose': undefined,
237
+ 'change': undefined,
238
+ 'percentage': this.safeString(ticker, 'price_percent_chg_24_h'),
239
+ 'average': undefined,
240
+ 'baseVolume': this.safeString(ticker, 'volume_24_h'),
241
+ 'quoteVolume': undefined,
242
+ });
243
+ }
244
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
245
+ /**
246
+ * @method
247
+ * @name coinbasepro#watchTrades
248
+ * @description get the list of most recent trades for a particular symbol
249
+ * @see https://docs.cloud.coinbase.com/advanced-trade-api/docs/ws-channels#market-trades-channel
250
+ * @param {string} symbol unified symbol of the market to fetch trades for
251
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
252
+ * @param {int} [limit] the maximum amount of trades to fetch
253
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
254
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
255
+ */
256
+ await this.loadMarkets();
257
+ symbol = this.symbol(symbol);
258
+ const name = 'market_trades';
259
+ const trades = await this.subscribe(name, symbol, params);
260
+ if (this.newUpdates) {
261
+ limit = trades.getLimit(symbol, limit);
262
+ }
263
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
264
+ }
265
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
266
+ /**
267
+ * @method
268
+ * @name coinbasepro#watchOrders
269
+ * @description watches information on multiple orders made by the user
270
+ * @see https://docs.cloud.coinbase.com/advanced-trade-api/docs/ws-channels#user-channel
271
+ * @param {string} [symbol] unified market symbol of the market orders were made in
272
+ * @param {int} [since] the earliest time in ms to fetch orders for
273
+ * @param {int} [limit] the maximum number of order structures to retrieve
274
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
275
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
276
+ */
277
+ await this.loadMarkets();
278
+ const name = 'user';
279
+ const orders = await this.subscribe(name, symbol, params);
280
+ if (this.newUpdates) {
281
+ limit = orders.getLimit(symbol, limit);
282
+ }
283
+ return this.filterBySinceLimit(orders, since, limit, 'timestamp', true);
284
+ }
285
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
286
+ /**
287
+ * @method
288
+ * @name coinbasepro#watchOrderBook
289
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
290
+ * @see https://docs.cloud.coinbase.com/advanced-trade-api/docs/ws-channels#level2-channel
291
+ * @param {string} symbol unified symbol of the market to fetch the order book for
292
+ * @param {int} [limit] the maximum amount of order book entries to return
293
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
294
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
295
+ */
296
+ await this.loadMarkets();
297
+ const name = 'level2';
298
+ const market = this.market(symbol);
299
+ symbol = market['symbol'];
300
+ const orderbook = await this.subscribe(name, symbol, params);
301
+ return orderbook.limit();
302
+ }
303
+ handleTrade(client, message) {
304
+ //
305
+ // {
306
+ // "channel": "market_trades",
307
+ // "client_id": "",
308
+ // "timestamp": "2023-02-09T20:19:35.39625135Z",
309
+ // "sequence_num": 0,
310
+ // "events": [
311
+ // {
312
+ // "type": "snapshot",
313
+ // "trades": [
314
+ // {
315
+ // "trade_id": "000000000",
316
+ // "product_id": "ETH-USD",
317
+ // "price": "1260.01",
318
+ // "size": "0.3",
319
+ // "side": "BUY",
320
+ // "time": "2019-08-14T20:42:27.265Z",
321
+ // }
322
+ // ]
323
+ // }
324
+ // ]
325
+ // }
326
+ //
327
+ const events = this.safeValue(message, 'events');
328
+ const event = this.safeValue(events, 0);
329
+ const trades = this.safeValue(event, 'trades');
330
+ const trade = this.safeValue(trades, 0);
331
+ const marketId = this.safeString(trade, 'product_id');
332
+ const messageHash = 'market_trades::' + marketId;
333
+ const symbol = this.safeSymbol(marketId);
334
+ let tradesArray = this.safeValue(this.trades, symbol);
335
+ if (tradesArray === undefined) {
336
+ const tradesLimit = this.safeInteger(this.options, 'tradesLimit', 1000);
337
+ tradesArray = new Cache.ArrayCacheBySymbolById(tradesLimit);
338
+ this.trades[symbol] = tradesArray;
339
+ }
340
+ for (let i = 0; i < events.length; i++) {
341
+ const currentEvent = events[i];
342
+ const currentTrades = this.safeValue(currentEvent, 'trades');
343
+ for (let j = 0; j < currentTrades.length; j++) {
344
+ const item = currentTrades[i];
345
+ tradesArray.append(this.parseTrade(item));
346
+ }
347
+ }
348
+ client.resolve(tradesArray, messageHash);
349
+ return message;
350
+ }
351
+ handleOrder(client, message) {
352
+ //
353
+ // {
354
+ // "channel": "user",
355
+ // "client_id": "",
356
+ // "timestamp": "2023-02-09T20:33:57.609931463Z",
357
+ // "sequence_num": 0,
358
+ // "events": [
359
+ // {
360
+ // "type": "snapshot",
361
+ // "orders": [
362
+ // {
363
+ // "order_id": "XXX",
364
+ // "client_order_id": "YYY",
365
+ // "cumulative_quantity": "0",
366
+ // "leaves_quantity": "0.000994",
367
+ // "avg_price": "0",
368
+ // "total_fees": "0",
369
+ // "status": "OPEN",
370
+ // "product_id": "BTC-USD",
371
+ // "creation_time": "2022-12-07T19:42:18.719312Z",
372
+ // "order_side": "BUY",
373
+ // "order_type": "Limit"
374
+ // },
375
+ // ]
376
+ // }
377
+ // ]
378
+ // }
379
+ //
380
+ const events = this.safeValue(message, 'events');
381
+ const marketIds = [];
382
+ if (this.orders === undefined) {
383
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
384
+ this.orders = new Cache.ArrayCacheBySymbolById(limit);
385
+ }
386
+ for (let i = 0; i < events.length; i++) {
387
+ const event = events[i];
388
+ const responseOrders = this.safeValue(event, 'orders');
389
+ for (let j = 0; j < responseOrders.length; j++) {
390
+ const responseOrder = responseOrders[j];
391
+ const parsed = this.parseWsOrder(responseOrder);
392
+ const cachedOrders = this.orders;
393
+ const marketId = this.safeString(responseOrder, 'product_id');
394
+ if (!(marketId in marketIds)) {
395
+ marketIds.push(marketId);
396
+ }
397
+ cachedOrders.append(parsed);
398
+ }
399
+ }
400
+ for (let i = 0; i < marketIds.length; i++) {
401
+ const marketId = marketIds[i];
402
+ const messageHash = 'user::' + marketId;
403
+ client.resolve(this.orders, messageHash);
404
+ }
405
+ client.resolve(this.orders, 'user');
406
+ return message;
407
+ }
408
+ parseWsOrder(order, market = undefined) {
409
+ //
410
+ // {
411
+ // "order_id": "XXX",
412
+ // "client_order_id": "YYY",
413
+ // "cumulative_quantity": "0",
414
+ // "leaves_quantity": "0.000994",
415
+ // "avg_price": "0",
416
+ // "total_fees": "0",
417
+ // "status": "OPEN",
418
+ // "product_id": "BTC-USD",
419
+ // "creation_time": "2022-12-07T19:42:18.719312Z",
420
+ // "order_side": "BUY",
421
+ // "order_type": "Limit"
422
+ // }
423
+ //
424
+ const id = this.safeString(order, 'order_id');
425
+ const clientOrderId = this.safeString(order, 'client_order_id');
426
+ const marketId = this.safeString(order, 'product_id');
427
+ const datetime = this.safeString(order, 'time');
428
+ market = this.safeMarket(marketId, market);
429
+ return this.safeOrder({
430
+ 'info': order,
431
+ 'symbol': this.safeString(market, 'symbol'),
432
+ 'id': id,
433
+ 'clientOrderId': clientOrderId,
434
+ 'timestamp': this.parse8601(datetime),
435
+ 'datetime': datetime,
436
+ 'lastTradeTimestamp': undefined,
437
+ 'type': this.safeString(order, 'order_type'),
438
+ 'timeInForce': undefined,
439
+ 'postOnly': undefined,
440
+ 'side': this.safeString(order, 'side'),
441
+ 'price': undefined,
442
+ 'stopPrice': undefined,
443
+ 'triggerPrice': undefined,
444
+ 'amount': undefined,
445
+ 'cost': undefined,
446
+ 'average': this.safeString(order, 'avg_price'),
447
+ 'filled': this.safeString(order, 'cumulative_quantity'),
448
+ 'remaining': this.safeString(order, 'leaves_quantity'),
449
+ 'status': this.safeStringLower(order, 'status'),
450
+ 'fee': {
451
+ 'amount': this.safeString(order, 'total_fees'),
452
+ 'currency': this.safeString(market, 'quote'),
453
+ },
454
+ 'trades': undefined,
455
+ });
456
+ }
457
+ handleOrderBookHelper(orderbook, updates) {
458
+ for (let i = 0; i < updates.length; i++) {
459
+ const trade = updates[i];
460
+ const sideId = this.safeString(trade, 'side');
461
+ const side = this.safeString(this.options['sides'], sideId);
462
+ const price = this.safeNumber(trade, 'price_level');
463
+ const amount = this.safeNumber(trade, 'new_quantity');
464
+ orderbook[side].store(price, amount);
465
+ }
466
+ }
467
+ handleOrderBook(client, message) {
468
+ //
469
+ // {
470
+ // "channel": "l2_data",
471
+ // "client_id": "",
472
+ // "timestamp": "2023-02-09T20:32:50.714964855Z",
473
+ // "sequence_num": 0,
474
+ // "events": [
475
+ // {
476
+ // "type": "snapshot",
477
+ // "product_id": "BTC-USD",
478
+ // "updates": [
479
+ // {
480
+ // "side": "bid",
481
+ // "event_time": "1970-01-01T00:00:00Z",
482
+ // "price_level": "21921.73",
483
+ // "new_quantity": "0.06317902"
484
+ // },
485
+ // {
486
+ // "side": "bid",
487
+ // "event_time": "1970-01-01T00:00:00Z",
488
+ // "price_level": "21921.3",
489
+ // "new_quantity": "0.02"
490
+ // },
491
+ // ]
492
+ // }
493
+ // ]
494
+ // }
495
+ //
496
+ const events = this.safeValue(message, 'events');
497
+ const datetime = this.safeString(message, 'timestamp');
498
+ for (let i = 0; i < events.length; i++) {
499
+ const event = events[i];
500
+ const updates = this.safeValue(event, 'updates', []);
501
+ const marketId = this.safeString(event, 'product_id');
502
+ const messageHash = 'level2::' + marketId;
503
+ const subscription = this.safeValue(client.subscriptions, messageHash, {});
504
+ const limit = this.safeInteger(subscription, 'limit');
505
+ const symbol = this.safeSymbol(marketId);
506
+ const type = this.safeString(event, 'type');
507
+ if (type === 'snapshot') {
508
+ this.orderbooks[symbol] = this.orderBook({}, limit);
509
+ const orderbook = this.orderbooks[symbol];
510
+ this.handleOrderBookHelper(orderbook, updates);
511
+ orderbook['timestamp'] = undefined;
512
+ orderbook['datetime'] = undefined;
513
+ orderbook['symbol'] = symbol;
514
+ client.resolve(orderbook, messageHash);
515
+ }
516
+ else if (type === 'update') {
517
+ const orderbook = this.orderbooks[symbol];
518
+ this.handleOrderBookHelper(orderbook, updates);
519
+ orderbook['datetime'] = datetime;
520
+ orderbook['timestamp'] = this.parse8601(datetime);
521
+ orderbook['symbol'] = symbol;
522
+ client.resolve(orderbook, messageHash);
523
+ }
524
+ }
525
+ return message;
526
+ }
527
+ handleSubscriptionStatus(client, message) {
528
+ //
529
+ // {
530
+ // "type": "subscriptions",
531
+ // "channels": [
532
+ // {
533
+ // "name": "level2",
534
+ // "product_ids": [ "ETH-BTC" ]
535
+ // }
536
+ // ]
537
+ // }
538
+ //
539
+ return message;
540
+ }
541
+ handleMessage(client, message) {
542
+ const channel = this.safeString(message, 'channel');
543
+ const methods = {
544
+ 'subscriptions': this.handleSubscriptionStatus,
545
+ 'ticker': this.handleTickers,
546
+ 'ticker_batch': this.handleTickers,
547
+ 'market_trades': this.handleTrade,
548
+ 'user': this.handleOrder,
549
+ 'l2_data': this.handleOrderBook,
550
+ };
551
+ const type = this.safeString(message, 'type');
552
+ if (type === 'error') {
553
+ const errorMessage = this.safeString(message, 'message');
554
+ throw new errors.ExchangeError(errorMessage);
555
+ }
556
+ const method = this.safeValue(methods, channel);
557
+ return method.call(this, client, message);
558
+ }
559
+ }
560
+
561
+ module.exports = coinbase;