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.
- package/README.md +5 -5
- package/build.sh +2 -2
- package/dist/ccxt.browser.js +1347 -490
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/_virtual/agent.js +7 -0
- package/dist/cjs/_virtual/parse-proxy-response.js +7 -0
- package/dist/cjs/_virtual/promisify.js +7 -0
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/js/ccxt.js +474 -0
- package/dist/cjs/js/src/abstract/ace.js +9 -0
- package/dist/cjs/js/src/abstract/alpaca.js +9 -0
- package/dist/cjs/js/src/abstract/ascendex.js +9 -0
- package/dist/cjs/js/src/abstract/bigone.js +9 -0
- package/dist/cjs/js/src/abstract/binance.js +9 -0
- package/dist/cjs/js/src/abstract/bingx.js +9 -0
- package/dist/cjs/js/src/abstract/bit2c.js +9 -0
- package/dist/cjs/js/src/abstract/bitbank.js +9 -0
- package/dist/cjs/js/src/abstract/bitbns.js +9 -0
- package/dist/cjs/js/src/abstract/bitfinex.js +9 -0
- package/dist/cjs/js/src/abstract/bitfinex2.js +9 -0
- package/dist/cjs/js/src/abstract/bitflyer.js +9 -0
- package/dist/cjs/js/src/abstract/bitforex.js +9 -0
- package/dist/cjs/js/src/abstract/bitget.js +9 -0
- package/dist/cjs/js/src/abstract/bithumb.js +9 -0
- package/dist/cjs/js/src/abstract/bitmart.js +9 -0
- package/dist/cjs/js/src/abstract/bitmex.js +9 -0
- package/dist/cjs/js/src/abstract/bitopro.js +9 -0
- package/dist/cjs/js/src/abstract/bitpanda.js +9 -0
- package/dist/cjs/js/src/abstract/bitrue.js +9 -0
- package/dist/cjs/js/src/abstract/bitso.js +9 -0
- package/dist/cjs/js/src/abstract/bitstamp.js +9 -0
- package/dist/cjs/js/src/abstract/bitteam.js +9 -0
- package/dist/cjs/js/src/abstract/bitvavo.js +9 -0
- package/dist/cjs/js/src/abstract/bl3p.js +9 -0
- package/dist/cjs/js/src/abstract/blockchaincom.js +9 -0
- package/dist/cjs/js/src/abstract/btcalpha.js +9 -0
- package/dist/cjs/js/src/abstract/btcbox.js +9 -0
- package/dist/cjs/js/src/abstract/btcmarkets.js +9 -0
- package/dist/cjs/js/src/abstract/btcturk.js +9 -0
- package/dist/cjs/js/src/abstract/bybit.js +9 -0
- package/dist/cjs/js/src/abstract/cex.js +9 -0
- package/dist/cjs/js/src/abstract/coinbase.js +9 -0
- package/dist/cjs/js/src/abstract/coinbasepro.js +9 -0
- package/dist/cjs/js/src/abstract/coincheck.js +9 -0
- package/dist/cjs/js/src/abstract/coinex.js +9 -0
- package/dist/cjs/js/src/abstract/coinlist.js +9 -0
- package/dist/cjs/js/src/abstract/coinmate.js +9 -0
- package/dist/cjs/js/src/abstract/coinone.js +9 -0
- package/dist/cjs/js/src/abstract/coinsph.js +9 -0
- package/dist/cjs/js/src/abstract/coinspot.js +9 -0
- package/dist/cjs/js/src/abstract/cryptocom.js +9 -0
- package/dist/cjs/js/src/abstract/currencycom.js +9 -0
- package/dist/cjs/js/src/abstract/delta.js +9 -0
- package/dist/cjs/js/src/abstract/deribit.js +9 -0
- package/dist/cjs/js/src/abstract/digifinex.js +9 -0
- package/dist/cjs/js/src/abstract/exmo.js +9 -0
- package/dist/cjs/js/src/abstract/gate.js +9 -0
- package/dist/cjs/js/src/abstract/gemini.js +9 -0
- package/dist/cjs/js/src/abstract/hitbtc.js +9 -0
- package/dist/cjs/js/src/abstract/hollaex.js +9 -0
- package/dist/cjs/js/src/abstract/htx.js +9 -0
- package/dist/cjs/js/src/abstract/huobijp.js +9 -0
- package/dist/cjs/js/src/abstract/idex.js +9 -0
- package/dist/cjs/js/src/abstract/independentreserve.js +9 -0
- package/dist/cjs/js/src/abstract/indodax.js +9 -0
- package/dist/cjs/js/src/abstract/kraken.js +9 -0
- package/dist/cjs/js/src/abstract/krakenfutures.js +9 -0
- package/dist/cjs/js/src/abstract/kucoin.js +9 -0
- package/dist/cjs/js/src/abstract/kucoinfutures.js +9 -0
- package/dist/cjs/js/src/abstract/kuna.js +9 -0
- package/dist/cjs/js/src/abstract/latoken.js +9 -0
- package/dist/cjs/js/src/abstract/lbank.js +9 -0
- package/dist/cjs/js/src/abstract/luno.js +9 -0
- package/dist/cjs/js/src/abstract/lykke.js +9 -0
- package/dist/cjs/js/src/abstract/mercado.js +9 -0
- package/dist/cjs/js/src/abstract/mexc.js +9 -0
- package/dist/cjs/js/src/abstract/ndax.js +9 -0
- package/dist/cjs/js/src/abstract/novadax.js +9 -0
- package/dist/cjs/js/src/abstract/oceanex.js +9 -0
- package/dist/cjs/js/src/abstract/okcoin.js +9 -0
- package/dist/cjs/js/src/abstract/okx.js +9 -0
- package/dist/cjs/js/src/abstract/p2b.js +9 -0
- package/dist/cjs/js/src/abstract/paymium.js +9 -0
- package/dist/cjs/js/src/abstract/phemex.js +9 -0
- package/dist/cjs/js/src/abstract/poloniex.js +9 -0
- package/dist/cjs/js/src/abstract/poloniexfutures.js +9 -0
- package/dist/cjs/js/src/abstract/probit.js +9 -0
- package/dist/cjs/js/src/abstract/timex.js +9 -0
- package/dist/cjs/js/src/abstract/tokocrypto.js +9 -0
- package/dist/cjs/js/src/abstract/upbit.js +9 -0
- package/dist/cjs/js/src/abstract/wavesexchange.js +9 -0
- package/dist/cjs/js/src/abstract/wazirx.js +9 -0
- package/dist/cjs/js/src/abstract/whitebit.js +9 -0
- package/dist/cjs/js/src/abstract/woo.js +9 -0
- package/dist/cjs/js/src/abstract/yobit.js +9 -0
- package/dist/cjs/js/src/abstract/zaif.js +9 -0
- package/dist/cjs/js/src/abstract/zonda.js +9 -0
- package/dist/cjs/js/src/ace.js +1058 -0
- package/dist/cjs/js/src/alpaca.js +1125 -0
- package/dist/cjs/js/src/ascendex.js +3360 -0
- package/dist/cjs/js/src/base/Exchange.js +5110 -0
- package/dist/cjs/js/src/base/Precise.js +263 -0
- package/dist/cjs/js/src/base/errors.js +299 -0
- package/dist/cjs/js/src/base/functions/crypto.js +78 -0
- package/dist/cjs/js/src/base/functions/encode.js +44 -0
- package/dist/cjs/js/src/base/functions/generic.js +193 -0
- package/dist/cjs/js/src/base/functions/misc.js +96 -0
- package/dist/cjs/js/src/base/functions/number.js +297 -0
- package/dist/cjs/js/src/base/functions/platform.js +28 -0
- package/dist/cjs/js/src/base/functions/rsa.js +34 -0
- package/dist/cjs/js/src/base/functions/string.js +48 -0
- package/dist/cjs/js/src/base/functions/throttle.js +66 -0
- package/dist/cjs/js/src/base/functions/time.js +187 -0
- package/dist/cjs/js/src/base/functions/totp.js +24 -0
- package/dist/cjs/js/src/base/functions/type.js +162 -0
- package/dist/cjs/js/src/base/functions.js +157 -0
- package/dist/cjs/js/src/base/ws/Cache.js +254 -0
- package/dist/cjs/js/src/base/ws/Client.js +299 -0
- package/dist/cjs/js/src/base/ws/Future.js +34 -0
- package/dist/cjs/js/src/base/ws/OrderBook.js +107 -0
- package/dist/cjs/js/src/base/ws/OrderBookSide.js +281 -0
- package/dist/cjs/js/src/base/ws/WsClient.js +69 -0
- package/dist/cjs/js/src/bequant.js +33 -0
- package/dist/cjs/js/src/bigone.js +2209 -0
- package/dist/cjs/js/src/binance.js +9736 -0
- package/dist/cjs/js/src/binancecoinm.js +45 -0
- package/dist/cjs/js/src/binanceus.js +84 -0
- package/dist/cjs/js/src/binanceusdm.js +58 -0
- package/dist/cjs/js/src/bingx.js +3807 -0
- package/dist/cjs/js/src/bit2c.js +916 -0
- package/dist/cjs/js/src/bitbank.js +1000 -0
- package/dist/cjs/js/src/bitbay.js +17 -0
- package/dist/cjs/js/src/bitbns.js +1220 -0
- package/dist/cjs/js/src/bitcoincom.js +17 -0
- package/dist/cjs/js/src/bitfinex.js +1670 -0
- package/dist/cjs/js/src/bitfinex2.js +2990 -0
- package/dist/cjs/js/src/bitflyer.js +1045 -0
- package/dist/cjs/js/src/bitforex.js +852 -0
- package/dist/cjs/js/src/bitget.js +8291 -0
- package/dist/cjs/js/src/bithumb.js +1090 -0
- package/dist/cjs/js/src/bitmart.js +4454 -0
- package/dist/cjs/js/src/bitmex.js +2884 -0
- package/dist/cjs/js/src/bitopro.js +1724 -0
- package/dist/cjs/js/src/bitpanda.js +2002 -0
- package/dist/cjs/js/src/bitrue.js +3253 -0
- package/dist/cjs/js/src/bitso.js +1753 -0
- package/dist/cjs/js/src/bitstamp.js +2188 -0
- package/dist/cjs/js/src/bitteam.js +2309 -0
- package/dist/cjs/js/src/bitvavo.js +1968 -0
- package/dist/cjs/js/src/bl3p.js +447 -0
- package/dist/cjs/js/src/blockchaincom.js +1160 -0
- package/dist/cjs/js/src/btcalpha.js +929 -0
- package/dist/cjs/js/src/btcbox.js +565 -0
- package/dist/cjs/js/src/btcmarkets.js +1237 -0
- package/dist/cjs/js/src/btcturk.js +929 -0
- package/dist/cjs/js/src/bybit.js +7646 -0
- package/dist/cjs/js/src/cex.js +1693 -0
- package/dist/cjs/js/src/coinbase.js +3424 -0
- package/dist/cjs/js/src/coinbasepro.js +1866 -0
- package/dist/cjs/js/src/coincheck.js +843 -0
- package/dist/cjs/js/src/coinex.js +5414 -0
- package/dist/cjs/js/src/coinlist.js +2329 -0
- package/dist/cjs/js/src/coinmate.js +989 -0
- package/dist/cjs/js/src/coinone.js +1185 -0
- package/dist/cjs/js/src/coinsph.js +1933 -0
- package/dist/cjs/js/src/coinspot.js +548 -0
- package/dist/cjs/js/src/cryptocom.js +3007 -0
- package/dist/cjs/js/src/currencycom.js +2015 -0
- package/dist/cjs/js/src/delta.js +3256 -0
- package/dist/cjs/js/src/deribit.js +3306 -0
- package/dist/cjs/js/src/digifinex.js +4307 -0
- package/dist/cjs/js/src/exmo.js +2645 -0
- package/dist/cjs/js/src/fmfwio.js +34 -0
- package/dist/cjs/js/src/gate.js +7072 -0
- package/dist/cjs/js/src/gateio.js +16 -0
- package/dist/cjs/js/src/gemini.js +1801 -0
- package/dist/cjs/js/src/hitbtc.js +3660 -0
- package/dist/cjs/js/src/hitbtc3.js +19 -0
- package/dist/cjs/js/src/hollaex.js +1882 -0
- package/dist/cjs/js/src/htx.js +9049 -0
- package/dist/cjs/js/src/huobi.js +16 -0
- package/dist/cjs/js/src/huobijp.js +1918 -0
- package/dist/cjs/js/src/idex.js +1770 -0
- package/dist/cjs/js/src/independentreserve.js +761 -0
- package/dist/cjs/js/src/indodax.js +1069 -0
- package/dist/cjs/js/src/kraken.js +2857 -0
- package/dist/cjs/js/src/krakenfutures.js +2407 -0
- package/dist/cjs/js/src/kucoin.js +4489 -0
- package/dist/cjs/js/src/kucoinfutures.js +2475 -0
- package/dist/cjs/js/src/kuna.js +1949 -0
- package/dist/cjs/js/src/latoken.js +1729 -0
- package/dist/cjs/js/src/lbank.js +2851 -0
- package/dist/cjs/js/src/luno.js +1044 -0
- package/dist/cjs/js/src/lykke.js +1303 -0
- package/dist/cjs/js/src/mercado.js +897 -0
- package/dist/cjs/js/src/mexc.js +5407 -0
- package/dist/cjs/js/src/ndax.js +2450 -0
- package/dist/cjs/js/src/novadax.js +1556 -0
- package/dist/cjs/js/src/oceanex.js +964 -0
- package/dist/cjs/js/src/okcoin.js +3115 -0
- package/dist/cjs/js/src/okx.js +7330 -0
- package/dist/cjs/js/src/p2b.js +1243 -0
- package/dist/cjs/js/src/paymium.js +597 -0
- package/dist/cjs/js/src/phemex.js +4722 -0
- package/dist/cjs/js/src/poloniex.js +2356 -0
- package/dist/cjs/js/src/poloniexfutures.js +1794 -0
- package/dist/cjs/js/src/pro/alpaca.js +714 -0
- package/dist/cjs/js/src/pro/ascendex.js +957 -0
- package/dist/cjs/js/src/pro/bequant.js +33 -0
- package/dist/cjs/js/src/pro/binance.js +2796 -0
- package/dist/cjs/js/src/pro/binancecoinm.js +23 -0
- package/dist/cjs/js/src/pro/binanceus.js +51 -0
- package/dist/cjs/js/src/pro/binanceusdm.js +32 -0
- package/dist/cjs/js/src/pro/bingx.js +944 -0
- package/dist/cjs/js/src/pro/bitcoincom.js +29 -0
- package/dist/cjs/js/src/pro/bitfinex.js +672 -0
- package/dist/cjs/js/src/pro/bitfinex2.js +1159 -0
- package/dist/cjs/js/src/pro/bitget.js +1733 -0
- package/dist/cjs/js/src/pro/bitmart.js +1486 -0
- package/dist/cjs/js/src/pro/bitmex.js +1576 -0
- package/dist/cjs/js/src/pro/bitopro.js +327 -0
- package/dist/cjs/js/src/pro/bitpanda.js +1341 -0
- package/dist/cjs/js/src/pro/bitrue.js +462 -0
- package/dist/cjs/js/src/pro/bitstamp.js +547 -0
- package/dist/cjs/js/src/pro/bitvavo.js +704 -0
- package/dist/cjs/js/src/pro/blockchaincom.js +794 -0
- package/dist/cjs/js/src/pro/bybit.js +1843 -0
- package/dist/cjs/js/src/pro/cex.js +1510 -0
- package/dist/cjs/js/src/pro/coinbase.js +561 -0
- package/dist/cjs/js/src/pro/coinbasepro.js +968 -0
- package/dist/cjs/js/src/pro/coinex.js +1095 -0
- package/dist/cjs/js/src/pro/cryptocom.js +1020 -0
- package/dist/cjs/js/src/pro/currencycom.js +563 -0
- package/dist/cjs/js/src/pro/deribit.js +825 -0
- package/dist/cjs/js/src/pro/exmo.js +658 -0
- package/dist/cjs/js/src/pro/gate.js +1316 -0
- package/dist/cjs/js/src/pro/gateio.js +16 -0
- package/dist/cjs/js/src/pro/gemini.js +649 -0
- package/dist/cjs/js/src/pro/hitbtc.js +1293 -0
- package/dist/cjs/js/src/pro/hollaex.js +597 -0
- package/dist/cjs/js/src/pro/htx.js +2383 -0
- package/dist/cjs/js/src/pro/huobi.js +16 -0
- package/dist/cjs/js/src/pro/huobijp.js +606 -0
- package/dist/cjs/js/src/pro/idex.js +714 -0
- package/dist/cjs/js/src/pro/independentreserve.js +280 -0
- package/dist/cjs/js/src/pro/kraken.js +1364 -0
- package/dist/cjs/js/src/pro/krakenfutures.js +1500 -0
- package/dist/cjs/js/src/pro/kucoin.js +1052 -0
- package/dist/cjs/js/src/pro/kucoinfutures.js +981 -0
- package/dist/cjs/js/src/pro/luno.js +322 -0
- package/dist/cjs/js/src/pro/mexc.js +1170 -0
- package/dist/cjs/js/src/pro/ndax.js +545 -0
- package/dist/cjs/js/src/pro/okcoin.js +760 -0
- package/dist/cjs/js/src/pro/okx.js +1608 -0
- package/dist/cjs/js/src/pro/phemex.js +1511 -0
- package/dist/cjs/js/src/pro/poloniex.js +1253 -0
- package/dist/cjs/js/src/pro/poloniexfutures.js +1014 -0
- package/dist/cjs/js/src/pro/probit.js +586 -0
- package/dist/cjs/js/src/pro/upbit.js +234 -0
- package/dist/cjs/js/src/pro/wazirx.js +776 -0
- package/dist/cjs/js/src/pro/whitebit.js +927 -0
- package/dist/cjs/js/src/pro/woo.js +769 -0
- package/dist/cjs/js/src/probit.js +1867 -0
- package/dist/cjs/js/src/static_dependencies/fflake/browser.js +401 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +195 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +308 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +554 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +16 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1760 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +52 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +81 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +376 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +70 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1580 -0
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +74 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +24 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +158 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +429 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +176 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +324 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +163 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +245 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +1018 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +383 -0
- package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +258 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +53 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +120 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +69 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +7 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +83 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +240 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +91 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +130 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +214 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +239 -0
- package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +93 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +354 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +16 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +20 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +30 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +239 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +372 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +273 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +139 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +14 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +16 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +81 -0
- package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +292 -0
- package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +103 -0
- package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +140 -0
- package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +175 -0
- package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
- package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +7 -0
- package/dist/cjs/js/src/static_dependencies/scure-base/index.js +383 -0
- package/dist/cjs/js/src/timex.js +1562 -0
- package/dist/cjs/js/src/tokocrypto.js +2542 -0
- package/dist/cjs/js/src/upbit.js +1844 -0
- package/dist/cjs/js/src/wavesexchange.js +2607 -0
- package/dist/cjs/js/src/wazirx.js +953 -0
- package/dist/cjs/js/src/whitebit.js +2309 -0
- package/dist/cjs/js/src/woo.js +2765 -0
- package/dist/cjs/js/src/yobit.js +1314 -0
- package/dist/cjs/js/src/zaif.js +736 -0
- package/dist/cjs/js/src/zonda.js +1883 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bigone.d.ts +18 -0
- package/js/src/abstract/binance.d.ts +2 -0
- package/js/src/abstract/binancecoinm.d.ts +2 -0
- package/js/src/abstract/binanceus.d.ts +2 -0
- package/js/src/abstract/binanceusdm.d.ts +2 -0
- package/js/src/abstract/bingx.d.ts +2 -0
- package/js/src/abstract/bybit.d.ts +1 -0
- package/js/src/abstract/gate.d.ts +11 -0
- package/js/src/abstract/gateio.d.ts +11 -0
- package/js/src/abstract/okx.d.ts +1 -0
- package/js/src/alpaca.js +18 -18
- package/js/src/base/Exchange.d.ts +5 -1
- package/js/src/base/Exchange.js +101 -12
- package/js/src/bigone.d.ts +3 -2
- package/js/src/bigone.js +429 -167
- package/js/src/binance.js +48 -34
- package/js/src/bingx.js +115 -38
- package/js/src/bitfinex.d.ts +2 -2
- package/js/src/bitfinex.js +2 -3
- package/js/src/bitget.js +33 -13
- package/js/src/bitmart.d.ts +2 -2
- package/js/src/bitmart.js +5 -5
- package/js/src/bitmex.js +1 -0
- package/js/src/bybit.js +2 -0
- package/js/src/coinbase.d.ts +26 -3
- package/js/src/coinbase.js +176 -26
- package/js/src/coinlist.js +3 -4
- package/js/src/coinone.js +1 -1
- package/js/src/coinsph.js +2 -3
- package/js/src/deribit.js +1 -0
- package/js/src/gate.d.ts +4 -4
- package/js/src/gate.js +96 -59
- package/js/src/gemini.js +1 -1
- package/js/src/hitbtc.d.ts +4 -4
- package/js/src/hitbtc.js +2 -3
- package/js/src/htx.d.ts +1 -0
- package/js/src/htx.js +29 -7
- package/js/src/huobijp.js +2 -3
- package/js/src/independentreserve.js +7 -5
- package/js/src/kraken.js +3 -6
- package/js/src/lbank.js +59 -33
- package/js/src/mexc.js +2 -1
- package/js/src/oceanex.js +1 -1
- package/js/src/okx.js +14 -3
- package/js/src/phemex.js +9 -2
- package/js/src/pro/binance.d.ts +2 -23
- package/js/src/pro/binance.js +58 -22
- package/js/src/pro/coinbase.d.ts +2 -2
- package/js/src/pro/coinbase.js +4 -1
- package/js/src/pro/coinbasepro.d.ts +2 -2
- package/js/src/pro/hitbtc.d.ts +2 -2
- package/js/src/pro/kraken.js +1 -1
- package/js/src/pro/okx.d.ts +1 -0
- package/js/src/pro/okx.js +52 -2
- package/js/src/pro/poloniex.d.ts +2 -2
- package/js/src/probit.js +4 -2
- package/js/src/upbit.d.ts +3 -101
- package/js/src/upbit.js +12 -12
- package/js/src/wavesexchange.js +1 -1
- package/js/src/woo.d.ts +2 -0
- package/js/src/woo.js +52 -0
- package/package.json +1 -1
- package/skip-tests.json +5 -0
|
@@ -0,0 +1,586 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var probit$1 = require('../probit.js');
|
|
4
|
+
var errors = require('../base/errors.js');
|
|
5
|
+
var Cache = require('../base/ws/Cache.js');
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
class probit extends probit$1 {
|
|
9
|
+
describe() {
|
|
10
|
+
return this.deepExtend(super.describe(), {
|
|
11
|
+
'has': {
|
|
12
|
+
'ws': true,
|
|
13
|
+
'watchBalance': true,
|
|
14
|
+
'watchTicker': true,
|
|
15
|
+
'watchTickers': false,
|
|
16
|
+
'watchTrades': true,
|
|
17
|
+
'watchMyTrades': true,
|
|
18
|
+
'watchOrders': true,
|
|
19
|
+
'watchOrderBook': true,
|
|
20
|
+
'watchOHLCV': false,
|
|
21
|
+
},
|
|
22
|
+
'urls': {
|
|
23
|
+
'api': {
|
|
24
|
+
'ws': 'wss://api.probit.com/api/exchange/v1/ws',
|
|
25
|
+
},
|
|
26
|
+
'test': {
|
|
27
|
+
'ws': 'wss://demo-api.probit.com/api/exchange/v1/ws',
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
'options': {
|
|
31
|
+
'watchOrderBook': {
|
|
32
|
+
'filter': 'order_books_l2',
|
|
33
|
+
'interval': 100, // or 500
|
|
34
|
+
},
|
|
35
|
+
'watchTrades': {
|
|
36
|
+
'filter': 'recent_trades',
|
|
37
|
+
},
|
|
38
|
+
'watchTicker': {
|
|
39
|
+
'filter': 'ticker',
|
|
40
|
+
},
|
|
41
|
+
'watchOrders': {
|
|
42
|
+
'channel': 'open_order',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
'streaming': {},
|
|
46
|
+
'exceptions': {},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
async watchBalance(params = {}) {
|
|
50
|
+
/**
|
|
51
|
+
* @method
|
|
52
|
+
* @name probit#watchBalance
|
|
53
|
+
* @description watch balance and get the amount of funds available for trading or funds locked in orders
|
|
54
|
+
* @see https://docs-en.probit.com/reference/balance-1
|
|
55
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
56
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
57
|
+
*/
|
|
58
|
+
await this.authenticate(params);
|
|
59
|
+
const messageHash = 'balance';
|
|
60
|
+
const url = this.urls['api']['ws'];
|
|
61
|
+
const subscribe = {
|
|
62
|
+
'type': 'subscribe',
|
|
63
|
+
'channel': 'balance',
|
|
64
|
+
};
|
|
65
|
+
const request = this.extend(subscribe, params);
|
|
66
|
+
return await this.watch(url, messageHash, request, messageHash);
|
|
67
|
+
}
|
|
68
|
+
handleBalance(client, message) {
|
|
69
|
+
//
|
|
70
|
+
// {
|
|
71
|
+
// "channel": "balance",
|
|
72
|
+
// "reset": false,
|
|
73
|
+
// "data": {
|
|
74
|
+
// "USDT": {
|
|
75
|
+
// "available": "15",
|
|
76
|
+
// "total": "15"
|
|
77
|
+
// }
|
|
78
|
+
// }
|
|
79
|
+
// }
|
|
80
|
+
//
|
|
81
|
+
const messageHash = 'balance';
|
|
82
|
+
this.parseWSBalance(message);
|
|
83
|
+
client.resolve(this.balance, messageHash);
|
|
84
|
+
}
|
|
85
|
+
parseWSBalance(message) {
|
|
86
|
+
//
|
|
87
|
+
// {
|
|
88
|
+
// "channel": "balance",
|
|
89
|
+
// "reset": false,
|
|
90
|
+
// "data": {
|
|
91
|
+
// "USDT": {
|
|
92
|
+
// "available": "15",
|
|
93
|
+
// "total": "15"
|
|
94
|
+
// }
|
|
95
|
+
// }
|
|
96
|
+
// }
|
|
97
|
+
//
|
|
98
|
+
const reset = this.safeValue(message, 'reset', false);
|
|
99
|
+
const data = this.safeValue(message, 'data', {});
|
|
100
|
+
const currencyIds = Object.keys(data);
|
|
101
|
+
if (reset) {
|
|
102
|
+
this.balance = {};
|
|
103
|
+
}
|
|
104
|
+
for (let i = 0; i < currencyIds.length; i++) {
|
|
105
|
+
const currencyId = currencyIds[i];
|
|
106
|
+
const entry = data[currencyId];
|
|
107
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
108
|
+
const account = this.account();
|
|
109
|
+
account['free'] = this.safeString(entry, 'available');
|
|
110
|
+
account['total'] = this.safeString(entry, 'total');
|
|
111
|
+
this.balance[code] = account;
|
|
112
|
+
}
|
|
113
|
+
this.balance = this.safeBalance(this.balance);
|
|
114
|
+
}
|
|
115
|
+
async watchTicker(symbol, params = {}) {
|
|
116
|
+
/**
|
|
117
|
+
* @method
|
|
118
|
+
* @name probit#watchTicker
|
|
119
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
120
|
+
* @see https://docs-en.probit.com/reference/marketdata
|
|
121
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
122
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
123
|
+
* @param {int} [params.interval] Unit time to synchronize market information (ms). Available units: 100, 500
|
|
124
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
125
|
+
*/
|
|
126
|
+
let filter = undefined;
|
|
127
|
+
[filter, params] = this.handleOptionAndParams(params, 'watchTicker', 'filter', 'ticker');
|
|
128
|
+
return await this.subscribeOrderBook(symbol, 'ticker', filter, params);
|
|
129
|
+
}
|
|
130
|
+
handleTicker(client, message) {
|
|
131
|
+
//
|
|
132
|
+
// {
|
|
133
|
+
// "channel": "marketdata",
|
|
134
|
+
// "market_id": "BTC-USDT",
|
|
135
|
+
// "status": "ok",
|
|
136
|
+
// "lag": 0,
|
|
137
|
+
// "ticker": {
|
|
138
|
+
// "time": "2022-07-21T14:18:04.000Z",
|
|
139
|
+
// "last": "22591.3",
|
|
140
|
+
// "low": "22500.1",
|
|
141
|
+
// "high": "39790.7",
|
|
142
|
+
// "change": "-1224",
|
|
143
|
+
// "base_volume": "1002.32005445",
|
|
144
|
+
// "quote_volume": "23304489.385351021"
|
|
145
|
+
// },
|
|
146
|
+
// "reset": true
|
|
147
|
+
// }
|
|
148
|
+
//
|
|
149
|
+
const marketId = this.safeString(message, 'market_id');
|
|
150
|
+
const symbol = this.safeSymbol(marketId);
|
|
151
|
+
const ticker = this.safeValue(message, 'ticker', {});
|
|
152
|
+
const market = this.safeMarket(marketId);
|
|
153
|
+
const parsedTicker = this.parseTicker(ticker, market);
|
|
154
|
+
const messageHash = 'ticker:' + symbol;
|
|
155
|
+
this.tickers[symbol] = parsedTicker;
|
|
156
|
+
client.resolve(parsedTicker, messageHash);
|
|
157
|
+
}
|
|
158
|
+
async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
159
|
+
/**
|
|
160
|
+
* @method
|
|
161
|
+
* @name probit#watchTrades
|
|
162
|
+
* @description get the list of most recent trades for a particular symbol
|
|
163
|
+
* @see https://docs-en.probit.com/reference/trade_history
|
|
164
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
165
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
166
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
167
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
168
|
+
* @param {int} [params.interval] Unit time to synchronize market information (ms). Available units: 100, 500
|
|
169
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
170
|
+
*/
|
|
171
|
+
let filter = undefined;
|
|
172
|
+
[filter, params] = this.handleOptionAndParams(params, 'watchTrades', 'filter', 'recent_trades');
|
|
173
|
+
const trades = await this.subscribeOrderBook(symbol, 'trades', filter, params);
|
|
174
|
+
if (this.newUpdates) {
|
|
175
|
+
limit = trades.getLimit(symbol, limit);
|
|
176
|
+
}
|
|
177
|
+
return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
|
|
178
|
+
}
|
|
179
|
+
handleTrades(client, message) {
|
|
180
|
+
//
|
|
181
|
+
// {
|
|
182
|
+
// "channel": "marketdata",
|
|
183
|
+
// "market_id": "BTC-USDT",
|
|
184
|
+
// "status": "ok",
|
|
185
|
+
// "lag": 0,
|
|
186
|
+
// "recent_trades": [
|
|
187
|
+
// {
|
|
188
|
+
// "id": "BTC-USDT:8010233",
|
|
189
|
+
// "price": "22701.4",
|
|
190
|
+
// "quantity": "0.011011",
|
|
191
|
+
// "time": "2022-07-21T13:40:40.983Z",
|
|
192
|
+
// "side": "buy",
|
|
193
|
+
// "tick_direction": "up"
|
|
194
|
+
// }
|
|
195
|
+
// ...
|
|
196
|
+
// ]
|
|
197
|
+
// "reset": true
|
|
198
|
+
// }
|
|
199
|
+
//
|
|
200
|
+
const marketId = this.safeString(message, 'market_id');
|
|
201
|
+
const symbol = this.safeSymbol(marketId);
|
|
202
|
+
const market = this.safeMarket(marketId);
|
|
203
|
+
const trades = this.safeValue(message, 'recent_trades', []);
|
|
204
|
+
const reset = this.safeValue(message, 'reset', false);
|
|
205
|
+
const messageHash = 'trades:' + symbol;
|
|
206
|
+
let stored = this.safeValue(this.trades, symbol);
|
|
207
|
+
if (stored === undefined || reset) {
|
|
208
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
209
|
+
stored = new Cache.ArrayCache(limit);
|
|
210
|
+
this.trades[symbol] = stored;
|
|
211
|
+
}
|
|
212
|
+
for (let i = 0; i < trades.length; i++) {
|
|
213
|
+
const trade = trades[i];
|
|
214
|
+
const parsed = this.parseTrade(trade, market);
|
|
215
|
+
stored.append(parsed);
|
|
216
|
+
}
|
|
217
|
+
this.trades[symbol] = stored;
|
|
218
|
+
client.resolve(this.trades[symbol], messageHash);
|
|
219
|
+
}
|
|
220
|
+
async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
221
|
+
/**
|
|
222
|
+
* @method
|
|
223
|
+
* @name probit#watchMyTrades
|
|
224
|
+
* @description get the list of trades associated with the user
|
|
225
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
226
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
227
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
228
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
229
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
230
|
+
*/
|
|
231
|
+
await this.loadMarkets();
|
|
232
|
+
await this.authenticate(params);
|
|
233
|
+
let messageHash = 'myTrades';
|
|
234
|
+
if (symbol !== undefined) {
|
|
235
|
+
const market = this.market(symbol);
|
|
236
|
+
symbol = market['symbol'];
|
|
237
|
+
messageHash = messageHash + ':' + symbol;
|
|
238
|
+
}
|
|
239
|
+
const url = this.urls['api']['ws'];
|
|
240
|
+
const channel = 'trade_history';
|
|
241
|
+
const message = {
|
|
242
|
+
'type': 'subscribe',
|
|
243
|
+
'channel': channel,
|
|
244
|
+
};
|
|
245
|
+
const request = this.extend(message, params);
|
|
246
|
+
const trades = await this.watch(url, messageHash, request, channel);
|
|
247
|
+
if (this.newUpdates) {
|
|
248
|
+
limit = trades.getLimit(symbol, limit);
|
|
249
|
+
}
|
|
250
|
+
return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
|
|
251
|
+
}
|
|
252
|
+
handleMyTrades(client, message) {
|
|
253
|
+
//
|
|
254
|
+
// {
|
|
255
|
+
// "channel": "trade_history",
|
|
256
|
+
// "reset": false,
|
|
257
|
+
// "data": [{
|
|
258
|
+
// "id": "BTC-USDT:8010722",
|
|
259
|
+
// "order_id": "4124999207",
|
|
260
|
+
// "side": "buy",
|
|
261
|
+
// "fee_amount": "0.0134999868096",
|
|
262
|
+
// "fee_currency_id": "USDT",
|
|
263
|
+
// "status": "settled",
|
|
264
|
+
// "price": "23136.7",
|
|
265
|
+
// "quantity": "0.00032416",
|
|
266
|
+
// "cost": "7.499992672",
|
|
267
|
+
// "time": "2022-07-21T17:09:33.056Z",
|
|
268
|
+
// "market_id": "BTC-USDT"
|
|
269
|
+
// }]
|
|
270
|
+
// }
|
|
271
|
+
//
|
|
272
|
+
const rawTrades = this.safeValue(message, 'data', []);
|
|
273
|
+
const length = rawTrades.length;
|
|
274
|
+
if (length === 0) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const reset = this.safeValue(message, 'reset', false);
|
|
278
|
+
const messageHash = 'myTrades';
|
|
279
|
+
let stored = this.myTrades;
|
|
280
|
+
if ((stored === undefined) || reset) {
|
|
281
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
282
|
+
stored = new Cache.ArrayCacheBySymbolById(limit);
|
|
283
|
+
this.myTrades = stored;
|
|
284
|
+
}
|
|
285
|
+
const trades = this.parseTrades(rawTrades);
|
|
286
|
+
const tradeSymbols = {};
|
|
287
|
+
for (let j = 0; j < trades.length; j++) {
|
|
288
|
+
const trade = trades[j];
|
|
289
|
+
tradeSymbols[trade['symbol']] = true;
|
|
290
|
+
stored.append(trade);
|
|
291
|
+
}
|
|
292
|
+
const unique = Object.keys(tradeSymbols);
|
|
293
|
+
for (let i = 0; i < unique.length; i++) {
|
|
294
|
+
const symbol = unique[i];
|
|
295
|
+
const symbolSpecificMessageHash = messageHash + ':' + symbol;
|
|
296
|
+
client.resolve(stored, symbolSpecificMessageHash);
|
|
297
|
+
}
|
|
298
|
+
client.resolve(stored, messageHash);
|
|
299
|
+
}
|
|
300
|
+
async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
301
|
+
/**
|
|
302
|
+
* @method
|
|
303
|
+
* @name probit#watchOrders
|
|
304
|
+
* @description watches information on an order made by the user
|
|
305
|
+
* @see https://docs-en.probit.com/reference/open_order
|
|
306
|
+
* @param {string} symbol unified symbol of the market the order was made in
|
|
307
|
+
* @param {int} [since] timestamp in ms of the earliest order to watch
|
|
308
|
+
* @param {int} [limit] the maximum amount of orders to watch
|
|
309
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
310
|
+
* @param {string} [params.channel] choose what channel to use. Can open_order or order_history.
|
|
311
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
312
|
+
*/
|
|
313
|
+
await this.authenticate(params);
|
|
314
|
+
const url = this.urls['api']['ws'];
|
|
315
|
+
let messageHash = 'orders';
|
|
316
|
+
if (symbol !== undefined) {
|
|
317
|
+
const market = this.market(symbol);
|
|
318
|
+
symbol = market['symbol'];
|
|
319
|
+
messageHash = messageHash + ':' + symbol;
|
|
320
|
+
}
|
|
321
|
+
let channel = undefined;
|
|
322
|
+
[channel, params] = this.handleOptionAndParams(params, 'watchOrders', 'channel', 'open_order');
|
|
323
|
+
const subscribe = {
|
|
324
|
+
'type': 'subscribe',
|
|
325
|
+
'channel': channel,
|
|
326
|
+
};
|
|
327
|
+
const request = this.extend(subscribe, params);
|
|
328
|
+
const orders = await this.watch(url, messageHash, request, channel);
|
|
329
|
+
if (this.newUpdates) {
|
|
330
|
+
limit = orders.getLimit(symbol, limit);
|
|
331
|
+
}
|
|
332
|
+
return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
|
|
333
|
+
}
|
|
334
|
+
handleOrders(client, message) {
|
|
335
|
+
//
|
|
336
|
+
// {
|
|
337
|
+
// "channel": "order_history",
|
|
338
|
+
// "reset": true,
|
|
339
|
+
// "data": [{
|
|
340
|
+
// "id": "4124999207",
|
|
341
|
+
// "user_id": "633dc56a-621b-4680-8a4e-85a823499b6d",
|
|
342
|
+
// "market_id": "BTC-USDT",
|
|
343
|
+
// "type": "market",
|
|
344
|
+
// "side": "buy",
|
|
345
|
+
// "limit_price": "0",
|
|
346
|
+
// "time_in_force": "ioc",
|
|
347
|
+
// "filled_cost": "7.499992672",
|
|
348
|
+
// "filled_quantity": "0.00032416",
|
|
349
|
+
// "open_quantity": "0",
|
|
350
|
+
// "status": "filled",
|
|
351
|
+
// "time": "2022-07-21T17:09:33.056Z",
|
|
352
|
+
// "client_order_id": '',
|
|
353
|
+
// "cost": "7.5"
|
|
354
|
+
// },
|
|
355
|
+
// ...
|
|
356
|
+
// ]
|
|
357
|
+
// }
|
|
358
|
+
//
|
|
359
|
+
const rawOrders = this.safeValue(message, 'data', []);
|
|
360
|
+
const length = rawOrders.length;
|
|
361
|
+
if (length === 0) {
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
const messageHash = 'orders';
|
|
365
|
+
const reset = this.safeValue(message, 'reset', false);
|
|
366
|
+
let stored = this.orders;
|
|
367
|
+
if (stored === undefined || reset) {
|
|
368
|
+
const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
|
|
369
|
+
stored = new Cache.ArrayCacheBySymbolById(limit);
|
|
370
|
+
this.orders = stored;
|
|
371
|
+
}
|
|
372
|
+
const orderSymbols = {};
|
|
373
|
+
for (let i = 0; i < rawOrders.length; i++) {
|
|
374
|
+
const rawOrder = rawOrders[i];
|
|
375
|
+
const order = this.parseOrder(rawOrder);
|
|
376
|
+
orderSymbols[order['symbol']] = true;
|
|
377
|
+
stored.append(order);
|
|
378
|
+
}
|
|
379
|
+
const unique = Object.keys(orderSymbols);
|
|
380
|
+
for (let i = 0; i < unique.length; i++) {
|
|
381
|
+
const symbol = unique[i];
|
|
382
|
+
const symbolSpecificMessageHash = messageHash + ':' + symbol;
|
|
383
|
+
client.resolve(stored, symbolSpecificMessageHash);
|
|
384
|
+
}
|
|
385
|
+
client.resolve(stored, messageHash);
|
|
386
|
+
}
|
|
387
|
+
async watchOrderBook(symbol, limit = undefined, params = {}) {
|
|
388
|
+
/**
|
|
389
|
+
* @method
|
|
390
|
+
* @name probit#watchOrderBook
|
|
391
|
+
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
392
|
+
* @see https://docs-en.probit.com/reference/marketdata
|
|
393
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
394
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
395
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
396
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
397
|
+
*/
|
|
398
|
+
let filter = undefined;
|
|
399
|
+
[filter, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'filter', 'order_books');
|
|
400
|
+
const orderbook = await this.subscribeOrderBook(symbol, 'orderbook', filter, params);
|
|
401
|
+
return orderbook.limit();
|
|
402
|
+
}
|
|
403
|
+
async subscribeOrderBook(symbol, messageHash, filter, params = {}) {
|
|
404
|
+
await this.loadMarkets();
|
|
405
|
+
const market = this.market(symbol);
|
|
406
|
+
symbol = market['symbol'];
|
|
407
|
+
const url = this.urls['api']['ws'];
|
|
408
|
+
const client = this.client(url);
|
|
409
|
+
let interval = undefined;
|
|
410
|
+
[interval, params] = this.handleOptionAndParams(params, 'watchOrderBook', 'interval', 100);
|
|
411
|
+
const subscriptionHash = 'marketdata:' + symbol;
|
|
412
|
+
messageHash = messageHash + ':' + symbol;
|
|
413
|
+
let filters = {};
|
|
414
|
+
if (subscriptionHash in client.subscriptions) {
|
|
415
|
+
// already subscribed
|
|
416
|
+
filters = client.subscriptions[subscriptionHash];
|
|
417
|
+
if (!(filter in filters)) {
|
|
418
|
+
// resubscribe
|
|
419
|
+
delete client.subscriptions[subscriptionHash];
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
filters[filter] = true;
|
|
423
|
+
const keys = Object.keys(filters);
|
|
424
|
+
const message = {
|
|
425
|
+
'channel': 'marketdata',
|
|
426
|
+
'interval': interval,
|
|
427
|
+
'market_id': market['id'],
|
|
428
|
+
'type': 'subscribe',
|
|
429
|
+
'filter': keys,
|
|
430
|
+
};
|
|
431
|
+
const request = this.extend(message, params);
|
|
432
|
+
return await this.watch(url, messageHash, request, messageHash, filters);
|
|
433
|
+
}
|
|
434
|
+
handleOrderBook(client, message, orderBook) {
|
|
435
|
+
//
|
|
436
|
+
// {
|
|
437
|
+
// "channel": "marketdata",
|
|
438
|
+
// "market_id": "BTC-USDT",
|
|
439
|
+
// "status": "ok",
|
|
440
|
+
// "lag": 0,
|
|
441
|
+
// "order_books": [
|
|
442
|
+
// { side: "buy", price: '1420.7', quantity: "0.057" },
|
|
443
|
+
// ...
|
|
444
|
+
// ],
|
|
445
|
+
// "reset": true
|
|
446
|
+
// }
|
|
447
|
+
//
|
|
448
|
+
const marketId = this.safeString(message, 'market_id');
|
|
449
|
+
const symbol = this.safeSymbol(marketId);
|
|
450
|
+
const dataBySide = this.groupBy(orderBook, 'side');
|
|
451
|
+
const messageHash = 'orderbook:' + symbol;
|
|
452
|
+
let storedOrderBook = this.safeValue(this.orderbooks, symbol);
|
|
453
|
+
if (storedOrderBook === undefined) {
|
|
454
|
+
storedOrderBook = this.orderBook({});
|
|
455
|
+
this.orderbooks[symbol] = storedOrderBook;
|
|
456
|
+
}
|
|
457
|
+
const reset = this.safeValue(message, 'reset', false);
|
|
458
|
+
if (reset) {
|
|
459
|
+
const snapshot = this.parseOrderBook(dataBySide, symbol, undefined, 'buy', 'sell', 'price', 'quantity');
|
|
460
|
+
storedOrderBook.reset(snapshot);
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
this.handleDelta(storedOrderBook, dataBySide);
|
|
464
|
+
}
|
|
465
|
+
client.resolve(storedOrderBook, messageHash);
|
|
466
|
+
}
|
|
467
|
+
handleBidAsks(bookSide, bidAsks) {
|
|
468
|
+
for (let i = 0; i < bidAsks.length; i++) {
|
|
469
|
+
const bidAsk = bidAsks[i];
|
|
470
|
+
const parsed = this.parseBidAsk(bidAsk, 'price', 'quantity');
|
|
471
|
+
bookSide.storeArray(parsed);
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
handleDelta(orderbook, delta) {
|
|
475
|
+
const storedBids = orderbook['bids'];
|
|
476
|
+
const storedAsks = orderbook['asks'];
|
|
477
|
+
const asks = this.safeValue(delta, 'sell', []);
|
|
478
|
+
const bids = this.safeValue(delta, 'buy', []);
|
|
479
|
+
this.handleBidAsks(storedBids, bids);
|
|
480
|
+
this.handleBidAsks(storedAsks, asks);
|
|
481
|
+
}
|
|
482
|
+
handleErrorMessage(client, message) {
|
|
483
|
+
//
|
|
484
|
+
// {
|
|
485
|
+
// "errorCode": "INVALID_ARGUMENT",
|
|
486
|
+
// "message": '',
|
|
487
|
+
// "details": {
|
|
488
|
+
// "interval": "invalid"
|
|
489
|
+
// }
|
|
490
|
+
// }
|
|
491
|
+
//
|
|
492
|
+
const code = this.safeString(message, 'errorCode');
|
|
493
|
+
const errMessage = this.safeString(message, 'message', '');
|
|
494
|
+
const details = this.safeValue(message, 'details');
|
|
495
|
+
// todo - throw properly here
|
|
496
|
+
throw new errors.ExchangeError(this.id + ' ' + code + ' ' + errMessage + ' ' + this.json(details));
|
|
497
|
+
}
|
|
498
|
+
handleAuthenticate(client, message) {
|
|
499
|
+
//
|
|
500
|
+
// { type: "authorization", result: "ok" }
|
|
501
|
+
//
|
|
502
|
+
const result = this.safeString(message, 'result');
|
|
503
|
+
const future = client.subscriptions['authenticated'];
|
|
504
|
+
if (result === 'ok') {
|
|
505
|
+
future.resolve(true);
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
future.reject(message);
|
|
509
|
+
delete client.subscriptions['authenticated'];
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
handleMarketData(client, message) {
|
|
513
|
+
const ticker = this.safeValue(message, 'ticker');
|
|
514
|
+
if (ticker !== undefined) {
|
|
515
|
+
this.handleTicker(client, message);
|
|
516
|
+
}
|
|
517
|
+
const trades = this.safeValue(message, 'recent_trades', []);
|
|
518
|
+
if (trades.length) {
|
|
519
|
+
this.handleTrades(client, message);
|
|
520
|
+
}
|
|
521
|
+
const orderBook = this.safeValueN(message, ['order_books', 'order_books_l1', 'order_books_l2', 'order_books_l3', 'order_books_l4'], []);
|
|
522
|
+
if (orderBook.length) {
|
|
523
|
+
this.handleOrderBook(client, message, orderBook);
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
handleMessage(client, message) {
|
|
527
|
+
//
|
|
528
|
+
// {
|
|
529
|
+
// "errorCode": "INVALID_ARGUMENT",
|
|
530
|
+
// "message": '',
|
|
531
|
+
// "details": {
|
|
532
|
+
// "interval": "invalid"
|
|
533
|
+
// }
|
|
534
|
+
// }
|
|
535
|
+
//
|
|
536
|
+
const errorCode = this.safeString(message, 'errorCode');
|
|
537
|
+
if (errorCode !== undefined) {
|
|
538
|
+
return this.handleErrorMessage(client, message);
|
|
539
|
+
}
|
|
540
|
+
const type = this.safeString(message, 'type');
|
|
541
|
+
if (type === 'authorization') {
|
|
542
|
+
return this.handleAuthenticate(client, message);
|
|
543
|
+
}
|
|
544
|
+
const handlers = {
|
|
545
|
+
'marketdata': this.handleMarketData,
|
|
546
|
+
'balance': this.handleBalance,
|
|
547
|
+
'trade_history': this.handleMyTrades,
|
|
548
|
+
'open_order': this.handleOrders,
|
|
549
|
+
'order_history': this.handleOrders,
|
|
550
|
+
};
|
|
551
|
+
const channel = this.safeString(message, 'channel');
|
|
552
|
+
const handler = this.safeValue(handlers, channel);
|
|
553
|
+
if (handler !== undefined) {
|
|
554
|
+
return handler.call(this, client, message);
|
|
555
|
+
}
|
|
556
|
+
const error = new errors.NotSupported(this.id + ' handleMessage: unknown message: ' + this.json(message));
|
|
557
|
+
client.reject(error);
|
|
558
|
+
}
|
|
559
|
+
async authenticate(params = {}) {
|
|
560
|
+
const url = this.urls['api']['ws'];
|
|
561
|
+
const client = this.client(url);
|
|
562
|
+
const messageHash = 'authenticated';
|
|
563
|
+
const expires = this.safeInteger(this.options, 'expires', 0);
|
|
564
|
+
let future = this.safeValue(client.subscriptions, messageHash);
|
|
565
|
+
if ((future === undefined) || (this.milliseconds() > expires)) {
|
|
566
|
+
const response = await this.signIn();
|
|
567
|
+
//
|
|
568
|
+
// {
|
|
569
|
+
// "access_token": "0ttDv/2hTTn3bLi8GP1gKaneiEQ6+0hOBenPrxNQt2s=",
|
|
570
|
+
// "token_type": "bearer",
|
|
571
|
+
// "expires_in": 900
|
|
572
|
+
// }
|
|
573
|
+
//
|
|
574
|
+
const accessToken = this.safeString(response, 'access_token');
|
|
575
|
+
const request = {
|
|
576
|
+
'type': 'authorization',
|
|
577
|
+
'token': accessToken,
|
|
578
|
+
};
|
|
579
|
+
future = this.watch(url, messageHash, this.extend(request, params));
|
|
580
|
+
client.subscriptions[messageHash] = future;
|
|
581
|
+
}
|
|
582
|
+
return await future;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
module.exports = probit;
|