ccxt 4.2.11 → 4.2.13

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 (392) hide show
  1. package/README.md +5 -5
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +1347 -490
  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 +2209 -0
  125. package/dist/cjs/js/src/binance.js +9736 -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 +3807 -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 +8291 -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 +3424 -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 +7072 -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 +9049 -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 +761 -0
  185. package/dist/cjs/js/src/indodax.js +1069 -0
  186. package/dist/cjs/js/src/kraken.js +2857 -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 +2851 -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 +7330 -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 +4722 -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 +1608 -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 +1867 -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 +2765 -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/bingx.d.ts +2 -0
  336. package/js/src/abstract/bybit.d.ts +1 -0
  337. package/js/src/abstract/gate.d.ts +11 -0
  338. package/js/src/abstract/gateio.d.ts +11 -0
  339. package/js/src/abstract/okx.d.ts +1 -0
  340. package/js/src/alpaca.js +18 -18
  341. package/js/src/base/Exchange.d.ts +5 -1
  342. package/js/src/base/Exchange.js +101 -12
  343. package/js/src/bigone.d.ts +3 -2
  344. package/js/src/bigone.js +429 -167
  345. package/js/src/binance.js +48 -34
  346. package/js/src/bingx.js +115 -38
  347. package/js/src/bitfinex.d.ts +2 -2
  348. package/js/src/bitfinex.js +2 -3
  349. package/js/src/bitget.js +33 -13
  350. package/js/src/bitmart.d.ts +2 -2
  351. package/js/src/bitmart.js +5 -5
  352. package/js/src/bitmex.js +1 -0
  353. package/js/src/bybit.js +2 -0
  354. package/js/src/coinbase.d.ts +26 -3
  355. package/js/src/coinbase.js +176 -26
  356. package/js/src/coinlist.js +3 -4
  357. package/js/src/coinone.js +1 -1
  358. package/js/src/coinsph.js +2 -3
  359. package/js/src/deribit.js +1 -0
  360. package/js/src/gate.d.ts +4 -4
  361. package/js/src/gate.js +96 -59
  362. package/js/src/gemini.js +1 -1
  363. package/js/src/hitbtc.d.ts +4 -4
  364. package/js/src/hitbtc.js +2 -3
  365. package/js/src/htx.d.ts +1 -0
  366. package/js/src/htx.js +29 -7
  367. package/js/src/huobijp.js +2 -3
  368. package/js/src/independentreserve.js +7 -5
  369. package/js/src/kraken.js +3 -6
  370. package/js/src/lbank.js +59 -33
  371. package/js/src/mexc.js +2 -1
  372. package/js/src/oceanex.js +1 -1
  373. package/js/src/okx.js +14 -3
  374. package/js/src/phemex.js +9 -2
  375. package/js/src/pro/binance.d.ts +2 -23
  376. package/js/src/pro/binance.js +58 -22
  377. package/js/src/pro/coinbase.d.ts +2 -2
  378. package/js/src/pro/coinbase.js +4 -1
  379. package/js/src/pro/coinbasepro.d.ts +2 -2
  380. package/js/src/pro/hitbtc.d.ts +2 -2
  381. package/js/src/pro/kraken.js +1 -1
  382. package/js/src/pro/okx.d.ts +1 -0
  383. package/js/src/pro/okx.js +52 -2
  384. package/js/src/pro/poloniex.d.ts +2 -2
  385. package/js/src/probit.js +4 -2
  386. package/js/src/upbit.d.ts +3 -101
  387. package/js/src/upbit.js +12 -12
  388. package/js/src/wavesexchange.js +1 -1
  389. package/js/src/woo.d.ts +2 -0
  390. package/js/src/woo.js +52 -0
  391. package/package.json +1 -1
  392. package/skip-tests.json +5 -0
@@ -0,0 +1,547 @@
1
+ 'use strict';
2
+
3
+ var bitstamp$1 = require('../bitstamp.js');
4
+ var errors = require('../base/errors.js');
5
+ var Cache = require('../base/ws/Cache.js');
6
+
7
+ // ---------------------------------------------------------------------------
8
+ // ---------------------------------------------------------------------------
9
+ class bitstamp extends bitstamp$1 {
10
+ describe() {
11
+ return this.deepExtend(super.describe(), {
12
+ 'has': {
13
+ 'ws': true,
14
+ 'watchOrderBook': true,
15
+ 'watchOrders': true,
16
+ 'watchTrades': true,
17
+ 'watchOHLCV': false,
18
+ 'watchTicker': false,
19
+ 'watchTickers': false,
20
+ },
21
+ 'urls': {
22
+ 'api': {
23
+ 'ws': 'wss://ws.bitstamp.net',
24
+ },
25
+ },
26
+ 'options': {
27
+ 'expiresIn': '',
28
+ 'userId': '',
29
+ 'wsSessionToken': '',
30
+ 'watchOrderBook': {
31
+ 'snapshotDelay': 6,
32
+ 'snapshotMaxRetries': 3,
33
+ },
34
+ 'tradesLimit': 1000,
35
+ 'OHLCVLimit': 1000,
36
+ },
37
+ 'exceptions': {
38
+ 'exact': {
39
+ '4009': errors.AuthenticationError,
40
+ },
41
+ },
42
+ });
43
+ }
44
+ async watchOrderBook(symbol, limit = undefined, params = {}) {
45
+ /**
46
+ * @method
47
+ * @name bitstamp#watchOrderBook
48
+ * @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
49
+ * @param {string} symbol unified symbol of the market to fetch the order book for
50
+ * @param {int} [limit] the maximum amount of order book entries to return
51
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
52
+ * @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
53
+ */
54
+ await this.loadMarkets();
55
+ const market = this.market(symbol);
56
+ symbol = market['symbol'];
57
+ const messageHash = 'orderbook:' + symbol;
58
+ const channel = 'diff_order_book_' + market['id'];
59
+ const url = this.urls['api']['ws'];
60
+ const request = {
61
+ 'event': 'bts:subscribe',
62
+ 'data': {
63
+ 'channel': channel,
64
+ },
65
+ };
66
+ const message = this.extend(request, params);
67
+ const orderbook = await this.watch(url, messageHash, message, messageHash);
68
+ return orderbook.limit();
69
+ }
70
+ handleOrderBook(client, message) {
71
+ //
72
+ // initial snapshot is fetched with ccxt's fetchOrderBook
73
+ // the feed does not include a snapshot, just the deltas
74
+ //
75
+ // {
76
+ // "data": {
77
+ // "timestamp": "1583656800",
78
+ // "microtimestamp": "1583656800237527",
79
+ // "bids": [
80
+ // ["8732.02", "0.00002478", "1207590500704256"],
81
+ // ["8729.62", "0.01600000", "1207590502350849"],
82
+ // ["8727.22", "0.01800000", "1207590504296448"],
83
+ // ],
84
+ // "asks": [
85
+ // ["8735.67", "2.00000000", "1207590693249024"],
86
+ // ["8735.67", "0.01700000", "1207590693634048"],
87
+ // ["8735.68", "1.53294500", "1207590692048896"],
88
+ // ],
89
+ // },
90
+ // "event": "data",
91
+ // "channel": "diff_order_book_btcusd"
92
+ // }
93
+ //
94
+ const channel = this.safeString(message, 'channel');
95
+ const parts = channel.split('_');
96
+ const marketId = this.safeString(parts, 3);
97
+ const symbol = this.safeSymbol(marketId);
98
+ const storedOrderBook = this.safeValue(this.orderbooks, symbol);
99
+ const nonce = this.safeValue(storedOrderBook, 'nonce');
100
+ const delta = this.safeValue(message, 'data');
101
+ const deltaNonce = this.safeInteger(delta, 'microtimestamp');
102
+ const messageHash = 'orderbook:' + symbol;
103
+ if (nonce === undefined) {
104
+ const cacheLength = storedOrderBook.cache.length;
105
+ // the rest API is very delayed
106
+ // usually it takes at least 4-5 deltas to resolve
107
+ const snapshotDelay = this.handleOption('watchOrderBook', 'snapshotDelay', 6);
108
+ if (cacheLength === snapshotDelay) {
109
+ this.spawn(this.loadOrderBook, client, messageHash, symbol);
110
+ }
111
+ storedOrderBook.cache.push(delta);
112
+ return;
113
+ }
114
+ else if (nonce >= deltaNonce) {
115
+ return;
116
+ }
117
+ this.handleDelta(storedOrderBook, delta);
118
+ client.resolve(storedOrderBook, messageHash);
119
+ }
120
+ handleDelta(orderbook, delta) {
121
+ const timestamp = this.safeTimestamp(delta, 'timestamp');
122
+ orderbook['timestamp'] = timestamp;
123
+ orderbook['datetime'] = this.iso8601(timestamp);
124
+ orderbook['nonce'] = this.safeInteger(delta, 'microtimestamp');
125
+ const bids = this.safeValue(delta, 'bids', []);
126
+ const asks = this.safeValue(delta, 'asks', []);
127
+ const storedBids = orderbook['bids'];
128
+ const storedAsks = orderbook['asks'];
129
+ this.handleBidAsks(storedBids, bids);
130
+ this.handleBidAsks(storedAsks, asks);
131
+ }
132
+ handleBidAsks(bookSide, bidAsks) {
133
+ for (let i = 0; i < bidAsks.length; i++) {
134
+ const bidAsk = this.parseBidAsk(bidAsks[i]);
135
+ bookSide.storeArray(bidAsk);
136
+ }
137
+ }
138
+ getCacheIndex(orderbook, deltas) {
139
+ // we will consider it a fail
140
+ const firstElement = deltas[0];
141
+ const firstElementNonce = this.safeInteger(firstElement, 'microtimestamp');
142
+ const nonce = this.safeInteger(orderbook, 'nonce');
143
+ if (nonce < firstElementNonce) {
144
+ return -1;
145
+ }
146
+ for (let i = 0; i < deltas.length; i++) {
147
+ const delta = deltas[i];
148
+ const deltaNonce = this.safeInteger(delta, 'microtimestamp');
149
+ if (deltaNonce === nonce) {
150
+ return i + 1;
151
+ }
152
+ }
153
+ return deltas.length;
154
+ }
155
+ async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
156
+ /**
157
+ * @method
158
+ * @name bitstamp#watchTrades
159
+ * @description get the list of most recent trades for a particular symbol
160
+ * @param {string} symbol unified symbol of the market to fetch trades for
161
+ * @param {int} [since] timestamp in ms of the earliest trade to fetch
162
+ * @param {int} [limit] the maximum amount of trades to fetch
163
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
164
+ * @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
165
+ */
166
+ await this.loadMarkets();
167
+ const market = this.market(symbol);
168
+ symbol = market['symbol'];
169
+ const messageHash = 'trades:' + symbol;
170
+ const url = this.urls['api']['ws'];
171
+ const channel = 'live_trades_' + market['id'];
172
+ const request = {
173
+ 'event': 'bts:subscribe',
174
+ 'data': {
175
+ 'channel': channel,
176
+ },
177
+ };
178
+ const message = this.extend(request, params);
179
+ const trades = await this.watch(url, messageHash, message, messageHash);
180
+ if (this.newUpdates) {
181
+ limit = trades.getLimit(symbol, limit);
182
+ }
183
+ return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
184
+ }
185
+ parseWsTrade(trade, market = undefined) {
186
+ //
187
+ // {
188
+ // "buy_order_id": 1211625836466176,
189
+ // "amount_str": "1.08000000",
190
+ // "timestamp": "1584642064",
191
+ // "microtimestamp": "1584642064685000",
192
+ // "id": 108637852,
193
+ // "amount": 1.08,
194
+ // "sell_order_id": 1211625840754689,
195
+ // "price_str": "6294.77",
196
+ // "type": 1,
197
+ // "price": 6294.77
198
+ // }
199
+ //
200
+ const microtimestamp = this.safeInteger(trade, 'microtimestamp');
201
+ const id = this.safeString(trade, 'id');
202
+ const timestamp = this.parseToInt(microtimestamp / 1000);
203
+ const price = this.safeString(trade, 'price');
204
+ const amount = this.safeString(trade, 'amount');
205
+ const symbol = market['symbol'];
206
+ const sideRaw = this.safeInteger(trade, 'type');
207
+ const side = (sideRaw === 0) ? 'buy' : 'sell';
208
+ return this.safeTrade({
209
+ 'info': trade,
210
+ 'timestamp': timestamp,
211
+ 'datetime': this.iso8601(timestamp),
212
+ 'symbol': symbol,
213
+ 'id': id,
214
+ 'order': undefined,
215
+ 'type': undefined,
216
+ 'takerOrMaker': undefined,
217
+ 'side': side,
218
+ 'price': price,
219
+ 'amount': amount,
220
+ 'cost': undefined,
221
+ 'fee': undefined,
222
+ }, market);
223
+ }
224
+ handleTrade(client, message) {
225
+ //
226
+ // {
227
+ // "data": {
228
+ // "buy_order_id": 1207733769326592,
229
+ // "amount_str": "0.14406384",
230
+ // "timestamp": "1583691851",
231
+ // "microtimestamp": "1583691851934000",
232
+ // "id": 106833903,
233
+ // "amount": 0.14406384,
234
+ // "sell_order_id": 1207733765476352,
235
+ // "price_str": "8302.92",
236
+ // "type": 0,
237
+ // "price": 8302.92
238
+ // },
239
+ // "event": "trade",
240
+ // "channel": "live_trades_btcusd"
241
+ // }
242
+ //
243
+ // the trade streams push raw trade information in real-time
244
+ // each trade has a unique buyer and seller
245
+ const channel = this.safeString(message, 'channel');
246
+ const parts = channel.split('_');
247
+ const marketId = this.safeString(parts, 2);
248
+ const market = this.safeMarket(marketId);
249
+ const symbol = market['symbol'];
250
+ const messageHash = 'trades:' + symbol;
251
+ const data = this.safeValue(message, 'data');
252
+ const trade = this.parseWsTrade(data, market);
253
+ let tradesArray = this.safeValue(this.trades, symbol);
254
+ if (tradesArray === undefined) {
255
+ const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
256
+ tradesArray = new Cache.ArrayCache(limit);
257
+ this.trades[symbol] = tradesArray;
258
+ }
259
+ tradesArray.append(trade);
260
+ client.resolve(tradesArray, messageHash);
261
+ }
262
+ async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
263
+ /**
264
+ * @method
265
+ * @name bitstamp#watchOrders
266
+ * @description watches information on multiple orders made by the user
267
+ * @param {string} symbol unified market symbol of the market orders were made in
268
+ * @param {int} [since] the earliest time in ms to fetch orders for
269
+ * @param {int} [limit] the maximum number of order structures to retrieve
270
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
271
+ * @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
272
+ */
273
+ if (symbol === undefined) {
274
+ throw new errors.ArgumentsRequired(this.id + ' watchOrders() requires a symbol argument');
275
+ }
276
+ await this.loadMarkets();
277
+ const market = this.market(symbol);
278
+ symbol = market['symbol'];
279
+ const channel = 'private-my_orders';
280
+ const messageHash = channel + '_' + market['id'];
281
+ const subscription = {
282
+ 'symbol': symbol,
283
+ 'limit': limit,
284
+ 'type': channel,
285
+ 'params': params,
286
+ };
287
+ const orders = await this.subscribePrivate(subscription, messageHash, params);
288
+ if (this.newUpdates) {
289
+ limit = orders.getLimit(symbol, limit);
290
+ }
291
+ return this.filterBySinceLimit(orders, since, limit, 'timestamp', true);
292
+ }
293
+ handleOrders(client, message) {
294
+ //
295
+ // {
296
+ // "data":{
297
+ // "id":"1463471322288128",
298
+ // "id_str":"1463471322288128",
299
+ // "order_type":1,
300
+ // "datetime":"1646127778",
301
+ // "microtimestamp":"1646127777950000",
302
+ // "amount":0.05,
303
+ // "amount_str":"0.05000000",
304
+ // "price":1000,
305
+ // "price_str":"1000.00"
306
+ // },
307
+ // "channel":"private-my_orders_ltcusd-4848701",
308
+ // }
309
+ //
310
+ const channel = this.safeString(message, 'channel');
311
+ const order = this.safeValue(message, 'data', {});
312
+ const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
313
+ if (this.orders === undefined) {
314
+ this.orders = new Cache.ArrayCacheBySymbolById(limit);
315
+ }
316
+ const stored = this.orders;
317
+ const subscription = this.safeValue(client.subscriptions, channel);
318
+ const symbol = this.safeString(subscription, 'symbol');
319
+ const market = this.market(symbol);
320
+ const parsed = this.parseWsOrder(order, market);
321
+ stored.append(parsed);
322
+ client.resolve(this.orders, channel);
323
+ }
324
+ parseWsOrder(order, market = undefined) {
325
+ //
326
+ // {
327
+ // "id":"1463471322288128",
328
+ // "id_str":"1463471322288128",
329
+ // "order_type":1,
330
+ // "datetime":"1646127778",
331
+ // "microtimestamp":"1646127777950000",
332
+ // "amount":0.05,
333
+ // "amount_str":"0.05000000",
334
+ // "price":1000,
335
+ // "price_str":"1000.00"
336
+ // }
337
+ //
338
+ const id = this.safeString(order, 'id_str');
339
+ const orderType = this.safeStringLower(order, 'order_type');
340
+ const price = this.safeString(order, 'price_str');
341
+ const amount = this.safeString(order, 'amount_str');
342
+ const side = (orderType === '1') ? 'sell' : 'buy';
343
+ const timestamp = this.safeTimestamp(order, 'datetime');
344
+ market = this.safeMarket(undefined, market);
345
+ const symbol = market['symbol'];
346
+ return this.safeOrder({
347
+ 'info': order,
348
+ 'symbol': symbol,
349
+ 'id': id,
350
+ 'clientOrderId': undefined,
351
+ 'timestamp': timestamp,
352
+ 'datetime': this.iso8601(timestamp),
353
+ 'lastTradeTimestamp': undefined,
354
+ 'type': undefined,
355
+ 'timeInForce': undefined,
356
+ 'postOnly': undefined,
357
+ 'side': side,
358
+ 'price': price,
359
+ 'stopPrice': undefined,
360
+ 'triggerPrice': undefined,
361
+ 'amount': amount,
362
+ 'cost': undefined,
363
+ 'average': undefined,
364
+ 'filled': undefined,
365
+ 'remaining': undefined,
366
+ 'status': undefined,
367
+ 'fee': undefined,
368
+ 'trades': undefined,
369
+ }, market);
370
+ }
371
+ handleOrderBookSubscription(client, message) {
372
+ const channel = this.safeString(message, 'channel');
373
+ const parts = channel.split('_');
374
+ const marketId = this.safeString(parts, 3);
375
+ const symbol = this.safeSymbol(marketId);
376
+ this.orderbooks[symbol] = this.orderBook();
377
+ }
378
+ handleSubscriptionStatus(client, message) {
379
+ //
380
+ // {
381
+ // "event": "bts:subscription_succeeded",
382
+ // "channel": "detail_order_book_btcusd",
383
+ // "data": {},
384
+ // }
385
+ // {
386
+ // "event": "bts:subscription_succeeded",
387
+ // "channel": "private-my_orders_ltcusd-4848701",
388
+ // "data": {}
389
+ // }
390
+ //
391
+ const channel = this.safeString(message, 'channel');
392
+ if (channel.indexOf('order_book') > -1) {
393
+ this.handleOrderBookSubscription(client, message);
394
+ }
395
+ }
396
+ handleSubject(client, message) {
397
+ //
398
+ // {
399
+ // "data": {
400
+ // "timestamp": "1583656800",
401
+ // "microtimestamp": "1583656800237527",
402
+ // "bids": [
403
+ // ["8732.02", "0.00002478", "1207590500704256"],
404
+ // ["8729.62", "0.01600000", "1207590502350849"],
405
+ // ["8727.22", "0.01800000", "1207590504296448"],
406
+ // ],
407
+ // "asks": [
408
+ // ["8735.67", "2.00000000", "1207590693249024"],
409
+ // ["8735.67", "0.01700000", "1207590693634048"],
410
+ // ["8735.68", "1.53294500", "1207590692048896"],
411
+ // ],
412
+ // },
413
+ // "event": "data",
414
+ // "channel": "detail_order_book_btcusd"
415
+ // }
416
+ //
417
+ // private order
418
+ // {
419
+ // "data":{
420
+ // "id":"1463471322288128",
421
+ // "id_str":"1463471322288128",
422
+ // "order_type":1,
423
+ // "datetime":"1646127778",
424
+ // "microtimestamp":"1646127777950000",
425
+ // "amount":0.05,
426
+ // "amount_str":"0.05000000",
427
+ // "price":1000,
428
+ // "price_str":"1000.00"
429
+ // },
430
+ // "channel":"private-my_orders_ltcusd-4848701",
431
+ // }
432
+ //
433
+ const channel = this.safeString(message, 'channel');
434
+ const methods = {
435
+ 'live_trades': this.handleTrade,
436
+ 'diff_order_book': this.handleOrderBook,
437
+ 'private-my_orders': this.handleOrders,
438
+ };
439
+ const keys = Object.keys(methods);
440
+ for (let i = 0; i < keys.length; i++) {
441
+ const key = keys[i];
442
+ if (channel.indexOf(key) > -1) {
443
+ const method = methods[key];
444
+ method.call(this, client, message);
445
+ }
446
+ }
447
+ }
448
+ handleErrorMessage(client, message) {
449
+ // {
450
+ // "event": "bts:error",
451
+ // "channel": '',
452
+ // "data": { code: 4009, message: "Connection is unauthorized." }
453
+ // }
454
+ const event = this.safeString(message, 'event');
455
+ if (event === 'bts:error') {
456
+ const feedback = this.id + ' ' + this.json(message);
457
+ const data = this.safeValue(message, 'data', {});
458
+ const code = this.safeNumber(data, 'code');
459
+ this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
460
+ }
461
+ return message;
462
+ }
463
+ handleMessage(client, message) {
464
+ if (!this.handleErrorMessage(client, message)) {
465
+ return;
466
+ }
467
+ //
468
+ // {
469
+ // "event": "bts:subscription_succeeded",
470
+ // "channel": "detail_order_book_btcusd",
471
+ // "data": {},
472
+ // }
473
+ //
474
+ // {
475
+ // "data": {
476
+ // "timestamp": "1583656800",
477
+ // "microtimestamp": "1583656800237527",
478
+ // "bids": [
479
+ // ["8732.02", "0.00002478", "1207590500704256"],
480
+ // ["8729.62", "0.01600000", "1207590502350849"],
481
+ // ["8727.22", "0.01800000", "1207590504296448"],
482
+ // ],
483
+ // "asks": [
484
+ // ["8735.67", "2.00000000", "1207590693249024"],
485
+ // ["8735.67", "0.01700000", "1207590693634048"],
486
+ // ["8735.68", "1.53294500", "1207590692048896"],
487
+ // ],
488
+ // },
489
+ // "event": "data",
490
+ // "channel": "detail_order_book_btcusd"
491
+ // }
492
+ //
493
+ // {
494
+ // "event": "bts:subscription_succeeded",
495
+ // "channel": "private-my_orders_ltcusd-4848701",
496
+ // "data": {}
497
+ // }
498
+ //
499
+ const event = this.safeString(message, 'event');
500
+ if (event === 'bts:subscription_succeeded') {
501
+ return this.handleSubscriptionStatus(client, message);
502
+ }
503
+ else {
504
+ return this.handleSubject(client, message);
505
+ }
506
+ }
507
+ async authenticate(params = {}) {
508
+ this.checkRequiredCredentials();
509
+ const time = this.milliseconds();
510
+ const expiresIn = this.safeInteger(this.options, 'expiresIn');
511
+ if ((expiresIn === undefined) || (time > expiresIn)) {
512
+ const response = await this.privatePostWebsocketsToken(params);
513
+ //
514
+ // {
515
+ // "valid_sec":60,
516
+ // "token":"siPaT4m6VGQCdsDCVbLBemiphHQs552e",
517
+ // "user_id":4848701
518
+ // }
519
+ //
520
+ const sessionToken = this.safeString(response, 'token');
521
+ if (sessionToken !== undefined) {
522
+ const userId = this.safeNumber(response, 'user_id');
523
+ const validity = this.safeIntegerProduct(response, 'valid_sec', 1000);
524
+ this.options['expiresIn'] = this.sum(time, validity);
525
+ this.options['userId'] = userId;
526
+ this.options['wsSessionToken'] = sessionToken;
527
+ return response;
528
+ }
529
+ }
530
+ }
531
+ async subscribePrivate(subscription, messageHash, params = {}) {
532
+ const url = this.urls['api']['ws'];
533
+ await this.authenticate();
534
+ messageHash += '-' + this.options['userId'];
535
+ const request = {
536
+ 'event': 'bts:subscribe',
537
+ 'data': {
538
+ 'channel': messageHash,
539
+ 'auth': this.options['wsSessionToken'],
540
+ },
541
+ };
542
+ subscription['messageHash'] = messageHash;
543
+ return await this.watch(url, messageHash, this.extend(request, params), messageHash, subscription);
544
+ }
545
+ }
546
+
547
+ module.exports = bitstamp;