ccxt 4.5.3 → 4.5.5
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 +7 -6
- package/dist/ccxt.browser.min.js +6 -6
- package/dist/cjs/ccxt.js +6 -1
- package/dist/cjs/src/abstract/alpaca.js +1 -1
- package/dist/cjs/src/abstract/apex.js +1 -1
- package/dist/cjs/src/abstract/ascendex.js +1 -1
- package/dist/cjs/src/abstract/backpack.js +11 -0
- package/dist/cjs/src/abstract/bigone.js +1 -1
- package/dist/cjs/src/abstract/binance.js +1 -1
- package/dist/cjs/src/abstract/bingx.js +1 -1
- package/dist/cjs/src/abstract/bit2c.js +1 -1
- package/dist/cjs/src/abstract/bitbank.js +1 -1
- package/dist/cjs/src/abstract/bitbns.js +1 -1
- package/dist/cjs/src/abstract/bitfinex.js +1 -1
- package/dist/cjs/src/abstract/bitflyer.js +1 -1
- package/dist/cjs/src/abstract/bitget.js +1 -1
- package/dist/cjs/src/abstract/bithumb.js +1 -1
- package/dist/cjs/src/abstract/bitmart.js +1 -1
- package/dist/cjs/src/abstract/bitmex.js +1 -1
- package/dist/cjs/src/abstract/bitopro.js +1 -1
- package/dist/cjs/src/abstract/bitrue.js +1 -1
- package/dist/cjs/src/abstract/bitso.js +1 -1
- package/dist/cjs/src/abstract/bitstamp.js +1 -1
- package/dist/cjs/src/abstract/bitteam.js +1 -1
- package/dist/cjs/src/abstract/bittrade.js +1 -1
- package/dist/cjs/src/abstract/bitvavo.js +1 -1
- package/dist/cjs/src/abstract/blockchaincom.js +1 -1
- package/dist/cjs/src/abstract/blofin.js +1 -1
- package/dist/cjs/src/abstract/btcalpha.js +1 -1
- package/dist/cjs/src/abstract/btcbox.js +1 -1
- package/dist/cjs/src/abstract/btcmarkets.js +1 -1
- package/dist/cjs/src/abstract/btcturk.js +1 -1
- package/dist/cjs/src/abstract/bybit.js +1 -1
- package/dist/cjs/src/abstract/cex.js +1 -1
- package/dist/cjs/src/abstract/coinbase.js +1 -1
- package/dist/cjs/src/abstract/coinbaseexchange.js +1 -1
- package/dist/cjs/src/abstract/coinbaseinternational.js +1 -1
- package/dist/cjs/src/abstract/coincatch.js +1 -1
- package/dist/cjs/src/abstract/coincheck.js +1 -1
- package/dist/cjs/src/abstract/coinex.js +1 -1
- package/dist/cjs/src/abstract/coinmate.js +1 -1
- package/dist/cjs/src/abstract/coinmetro.js +1 -1
- package/dist/cjs/src/abstract/coinone.js +1 -1
- package/dist/cjs/src/abstract/coinsph.js +1 -1
- package/dist/cjs/src/abstract/coinspot.js +1 -1
- package/dist/cjs/src/abstract/cryptocom.js +1 -1
- package/dist/cjs/src/abstract/cryptomus.js +1 -1
- package/dist/cjs/src/abstract/defx.js +1 -1
- package/dist/cjs/src/abstract/delta.js +1 -1
- package/dist/cjs/src/abstract/deribit.js +1 -1
- package/dist/cjs/src/abstract/derive.js +1 -1
- package/dist/cjs/src/abstract/digifinex.js +1 -1
- package/dist/cjs/src/abstract/exmo.js +1 -1
- package/dist/cjs/src/abstract/foxbit.js +1 -1
- package/dist/cjs/src/abstract/gate.js +1 -1
- package/dist/cjs/src/abstract/gemini.js +1 -1
- package/dist/cjs/src/abstract/hashkey.js +1 -1
- package/dist/cjs/src/abstract/hibachi.js +1 -1
- package/dist/cjs/src/abstract/hitbtc.js +1 -1
- package/dist/cjs/src/abstract/hollaex.js +1 -1
- package/dist/cjs/src/abstract/htx.js +1 -1
- package/dist/cjs/src/abstract/hyperliquid.js +1 -1
- package/dist/cjs/src/abstract/independentreserve.js +1 -1
- package/dist/cjs/src/abstract/indodax.js +1 -1
- package/dist/cjs/src/abstract/kraken.js +1 -1
- package/dist/cjs/src/abstract/krakenfutures.js +1 -1
- package/dist/cjs/src/abstract/kucoin.js +1 -1
- package/dist/cjs/src/abstract/kucoinfutures.js +1 -1
- package/dist/cjs/src/abstract/latoken.js +1 -1
- package/dist/cjs/src/abstract/lbank.js +1 -1
- package/dist/cjs/src/abstract/luno.js +1 -1
- package/dist/cjs/src/abstract/mercado.js +1 -1
- package/dist/cjs/src/abstract/mexc.js +1 -1
- package/dist/cjs/src/abstract/modetrade.js +1 -1
- package/dist/cjs/src/abstract/ndax.js +1 -1
- package/dist/cjs/src/abstract/novadax.js +1 -1
- package/dist/cjs/src/abstract/oceanex.js +1 -1
- package/dist/cjs/src/abstract/okcoin.js +1 -1
- package/dist/cjs/src/abstract/okx.js +1 -1
- package/dist/cjs/src/abstract/onetrading.js +1 -1
- package/dist/cjs/src/abstract/oxfun.js +1 -1
- package/dist/cjs/src/abstract/p2b.js +1 -1
- package/dist/cjs/src/abstract/paradex.js +1 -1
- package/dist/cjs/src/abstract/paymium.js +1 -1
- package/dist/cjs/src/abstract/phemex.js +1 -1
- package/dist/cjs/src/abstract/poloniex.js +1 -1
- package/dist/cjs/src/abstract/probit.js +1 -1
- package/dist/cjs/src/abstract/timex.js +1 -1
- package/dist/cjs/src/abstract/tokocrypto.js +1 -1
- package/dist/cjs/src/abstract/tradeogre.js +1 -1
- package/dist/cjs/src/abstract/upbit.js +1 -1
- package/dist/cjs/src/abstract/wavesexchange.js +1 -1
- package/dist/cjs/src/abstract/whitebit.js +1 -1
- package/dist/cjs/src/abstract/woo.js +1 -1
- package/dist/cjs/src/abstract/woofipro.js +1 -1
- package/dist/cjs/src/abstract/xt.js +1 -1
- package/dist/cjs/src/abstract/yobit.js +1 -1
- package/dist/cjs/src/abstract/zaif.js +1 -1
- package/dist/cjs/src/abstract/zonda.js +1 -1
- package/dist/cjs/src/alpaca.js +1 -1
- package/dist/cjs/src/apex.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/backpack.js +2280 -0
- package/dist/cjs/src/base/Exchange.js +164 -65
- package/dist/cjs/src/base/Precise.js +0 -6
- package/dist/cjs/src/base/errors.js +0 -6
- package/dist/cjs/src/base/functions/crypto.js +1 -1
- package/dist/cjs/src/base/functions/encode.js +9 -1
- package/dist/cjs/src/base/functions/misc.js +0 -1
- package/dist/cjs/src/base/functions/number.js +0 -6
- package/dist/cjs/src/base/functions/platform.js +0 -6
- package/dist/cjs/src/base/functions/rsa.js +14 -2
- package/dist/cjs/src/base/functions/string.js +0 -6
- package/dist/cjs/src/base/functions/throttle.js +1 -1
- package/dist/cjs/src/base/functions/time.js +0 -6
- package/dist/cjs/src/base/functions/totp.js +0 -1
- package/dist/cjs/src/base/functions/type.js +0 -6
- package/dist/cjs/src/base/functions.js +2 -1
- package/dist/cjs/src/base/ws/Cache.js +0 -6
- package/dist/cjs/src/base/ws/Client.js +0 -1
- package/dist/cjs/src/base/ws/Future.js +1 -1
- package/dist/cjs/src/base/ws/OrderBook.js +1 -1
- package/dist/cjs/src/base/ws/OrderBookSide.js +0 -6
- package/dist/cjs/src/base/ws/WsClient.js +1 -1
- package/dist/cjs/src/bequant.js +1 -1
- package/dist/cjs/src/bigone.js +1 -1
- package/dist/cjs/src/binance.js +8 -5
- package/dist/cjs/src/binancecoinm.js +1 -1
- package/dist/cjs/src/binanceus.js +1 -1
- package/dist/cjs/src/binanceusdm.js +1 -1
- package/dist/cjs/src/bingx.js +1 -1
- package/dist/cjs/src/bit2c.js +1 -1
- package/dist/cjs/src/bitbank.js +2 -2
- package/dist/cjs/src/bitbns.js +1 -1
- package/dist/cjs/src/bitfinex.js +1 -1
- package/dist/cjs/src/bitflyer.js +1 -1
- package/dist/cjs/src/bitget.js +57 -10
- package/dist/cjs/src/bithumb.js +1 -1
- package/dist/cjs/src/bitmart.js +1 -1
- package/dist/cjs/src/bitmex.js +1 -1
- package/dist/cjs/src/bitopro.js +1 -1
- package/dist/cjs/src/bitrue.js +1 -1
- package/dist/cjs/src/bitso.js +1 -1
- package/dist/cjs/src/bitstamp.js +1 -1
- package/dist/cjs/src/bitteam.js +1 -1
- package/dist/cjs/src/bittrade.js +1 -1
- package/dist/cjs/src/bitvavo.js +8 -0
- package/dist/cjs/src/blockchaincom.js +1 -1
- package/dist/cjs/src/blofin.js +1 -1
- package/dist/cjs/src/btcalpha.js +1 -1
- package/dist/cjs/src/btcbox.js +1 -1
- package/dist/cjs/src/btcmarkets.js +1 -1
- package/dist/cjs/src/btcturk.js +1 -1
- package/dist/cjs/src/bybit.js +21 -7
- package/dist/cjs/src/cex.js +1 -1
- package/dist/cjs/src/coinbase.js +28 -10
- package/dist/cjs/src/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/coincatch.js +34 -21
- package/dist/cjs/src/coincheck.js +1 -1
- package/dist/cjs/src/coinex.js +1 -1
- package/dist/cjs/src/coinmate.js +1 -1
- package/dist/cjs/src/coinmetro.js +12 -1
- package/dist/cjs/src/coinone.js +1 -1
- package/dist/cjs/src/coinsph.js +0 -1
- package/dist/cjs/src/coinspot.js +1 -1
- package/dist/cjs/src/cryptocom.js +1 -1
- package/dist/cjs/src/cryptomus.js +1 -1
- package/dist/cjs/src/defx.js +1 -1
- package/dist/cjs/src/delta.js +2 -1
- package/dist/cjs/src/deribit.js +1 -1
- package/dist/cjs/src/derive.js +1 -1
- package/dist/cjs/src/digifinex.js +1 -1
- package/dist/cjs/src/exmo.js +1 -1
- package/dist/cjs/src/fmfwio.js +1 -1
- package/dist/cjs/src/foxbit.js +1 -1
- package/dist/cjs/src/gate.js +8 -2
- package/dist/cjs/src/gateio.js +1 -1
- package/dist/cjs/src/gemini.js +11 -6
- package/dist/cjs/src/hashkey.js +1 -1
- package/dist/cjs/src/hibachi.js +1 -1
- package/dist/cjs/src/hitbtc.js +0 -1
- package/dist/cjs/src/hollaex.js +1 -1
- package/dist/cjs/src/htx.js +1 -1
- package/dist/cjs/src/huobi.js +1 -1
- package/dist/cjs/src/hyperliquid.js +1 -1
- package/dist/cjs/src/independentreserve.js +1 -1
- package/dist/cjs/src/indodax.js +1 -1
- package/dist/cjs/src/kraken.js +1 -1
- package/dist/cjs/src/krakenfutures.js +2 -2
- package/dist/cjs/src/kucoin.js +1 -1
- package/dist/cjs/src/kucoinfutures.js +55 -6
- package/dist/cjs/src/latoken.js +1 -1
- package/dist/cjs/src/lbank.js +1 -1
- package/dist/cjs/src/luno.js +1 -1
- package/dist/cjs/src/mercado.js +1 -1
- package/dist/cjs/src/mexc.js +1 -1
- package/dist/cjs/src/modetrade.js +1 -1
- package/dist/cjs/src/myokx.js +1 -1
- package/dist/cjs/src/ndax.js +1 -1
- package/dist/cjs/src/novadax.js +1 -1
- package/dist/cjs/src/oceanex.js +1 -1
- package/dist/cjs/src/okcoin.js +1 -1
- package/dist/cjs/src/okx.js +27 -16
- package/dist/cjs/src/okxus.js +1 -1
- package/dist/cjs/src/onetrading.js +161 -66
- package/dist/cjs/src/oxfun.js +1 -1
- package/dist/cjs/src/p2b.js +1 -1
- package/dist/cjs/src/paradex.js +1 -1
- package/dist/cjs/src/paymium.js +1 -1
- package/dist/cjs/src/phemex.js +15 -9
- package/dist/cjs/src/poloniex.js +1 -1
- package/dist/cjs/src/pro/alpaca.js +1 -1
- package/dist/cjs/src/pro/apex.js +1 -1
- package/dist/cjs/src/pro/ascendex.js +1 -1
- package/dist/cjs/src/pro/backpack.js +1325 -0
- package/dist/cjs/src/pro/bequant.js +1 -1
- package/dist/cjs/src/pro/binance.js +9 -0
- package/dist/cjs/src/pro/binancecoinm.js +1 -1
- package/dist/cjs/src/pro/binanceus.js +1 -1
- package/dist/cjs/src/pro/binanceusdm.js +1 -1
- package/dist/cjs/src/pro/bingx.js +1 -1
- package/dist/cjs/src/pro/bitfinex.js +1 -1
- package/dist/cjs/src/pro/bitget.js +152 -26
- package/dist/cjs/src/pro/bithumb.js +1 -1
- package/dist/cjs/src/pro/bitmart.js +1 -1
- package/dist/cjs/src/pro/bitmex.js +1 -1
- package/dist/cjs/src/pro/bitrue.js +1 -1
- package/dist/cjs/src/pro/bitstamp.js +1 -1
- package/dist/cjs/src/pro/bitvavo.js +1 -1
- package/dist/cjs/src/pro/blockchaincom.js +1 -1
- package/dist/cjs/src/pro/blofin.js +1 -1
- package/dist/cjs/src/pro/bybit.js +68 -9
- package/dist/cjs/src/pro/cex.js +1 -1
- package/dist/cjs/src/pro/coinbase.js +227 -1
- package/dist/cjs/src/pro/coinbaseadvanced.js +1 -1
- package/dist/cjs/src/pro/coinbaseexchange.js +1 -1
- package/dist/cjs/src/pro/coinbaseinternational.js +1 -1
- package/dist/cjs/src/pro/coincatch.js +1 -1
- package/dist/cjs/src/pro/coincheck.js +1 -1
- package/dist/cjs/src/pro/coinex.js +11 -12
- package/dist/cjs/src/pro/coinone.js +1 -1
- package/dist/cjs/src/pro/cryptocom.js +1 -1
- package/dist/cjs/src/pro/defx.js +1 -1
- package/dist/cjs/src/pro/deribit.js +1 -1
- package/dist/cjs/src/pro/exmo.js +1 -1
- package/dist/cjs/src/pro/gate.js +1 -1
- package/dist/cjs/src/pro/gateio.js +1 -1
- package/dist/cjs/src/pro/gemini.js +1 -1
- package/dist/cjs/src/pro/hashkey.js +1 -1
- package/dist/cjs/src/pro/hitbtc.js +1 -1
- package/dist/cjs/src/pro/hollaex.js +1 -1
- package/dist/cjs/src/pro/htx.js +1 -1
- package/dist/cjs/src/pro/huobi.js +1 -1
- package/dist/cjs/src/pro/hyperliquid.js +1 -1
- package/dist/cjs/src/pro/independentreserve.js +1 -1
- package/dist/cjs/src/pro/kraken.js +1 -1
- package/dist/cjs/src/pro/krakenfutures.js +1 -1
- package/dist/cjs/src/pro/kucoin.js +1 -1
- package/dist/cjs/src/pro/kucoinfutures.js +1 -1
- package/dist/cjs/src/pro/lbank.js +0 -1
- package/dist/cjs/src/pro/luno.js +1 -1
- package/dist/cjs/src/pro/mexc.js +1 -1
- package/dist/cjs/src/pro/myokx.js +1 -1
- package/dist/cjs/src/pro/ndax.js +1 -1
- package/dist/cjs/src/pro/okcoin.js +1 -1
- package/dist/cjs/src/pro/okx.js +1 -1
- package/dist/cjs/src/pro/okxus.js +1 -1
- package/dist/cjs/src/pro/onetrading.js +1 -1
- package/dist/cjs/src/pro/oxfun.js +1 -1
- package/dist/cjs/src/pro/p2b.js +1 -1
- package/dist/cjs/src/pro/paradex.js +1 -1
- package/dist/cjs/src/pro/phemex.js +1 -1
- package/dist/cjs/src/pro/poloniex.js +1 -1
- package/dist/cjs/src/pro/probit.js +1 -1
- package/dist/cjs/src/pro/tradeogre.js +1 -1
- package/dist/cjs/src/pro/upbit.js +1 -1
- package/dist/cjs/src/pro/whitebit.js +1 -1
- package/dist/cjs/src/pro/xt.js +1 -1
- package/dist/cjs/src/probit.js +1 -1
- package/dist/cjs/src/protobuf/mexc/compiled.cjs.js +1 -0
- package/dist/cjs/src/static_dependencies/ethers/abi-coder.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/address/address.js +1 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/coders/address.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/anonymous.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/array.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/boolean.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/bytes.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/null.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/number.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/string.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/coders/tuple.js +0 -1
- package/dist/cjs/src/static_dependencies/ethers/fragments.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/hash/typed-data.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/index.js +10 -1
- package/dist/cjs/src/static_dependencies/ethers/interface.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/typed.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/base58.js +13 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/data.js +6 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/errors.js +9 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/events.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/index.js +7 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/maths.js +5 -1
- package/dist/cjs/src/static_dependencies/ethers/utils/properties.js +0 -6
- package/dist/cjs/src/static_dependencies/ethers/utils/utf8.js +8 -1
- package/dist/cjs/src/static_dependencies/fflake/browser.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1 -1
- package/dist/cjs/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
- package/dist/cjs/src/static_dependencies/messagepack/msgpack.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-curves/_shortw_utils.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/curve.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/edwards.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/modular.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/montgomery.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/poseidon.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-curves/abstract/weierstrass.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/ed25519.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/p256.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-curves/secp256k1.js +1 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/_assert.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/_sha2.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/_u64.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/crypto.js +0 -6
- package/dist/cjs/src/static_dependencies/noble-hashes/hmac.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/md5.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha1.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha256.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha3.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/sha512.js +0 -1
- package/dist/cjs/src/static_dependencies/noble-hashes/utils.js +1 -1
- package/dist/cjs/src/static_dependencies/node-fetch/body.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/errors/abort-error.js +0 -1
- package/dist/cjs/src/static_dependencies/node-fetch/errors/base.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -1
- package/dist/cjs/src/static_dependencies/node-fetch/headers.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/index.js +7 -1
- package/dist/cjs/src/static_dependencies/node-fetch/request.js +7 -1
- package/dist/cjs/src/static_dependencies/node-fetch/response.js +5 -1
- package/dist/cjs/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/is.js +0 -6
- package/dist/cjs/src/static_dependencies/node-fetch/utils/referrer.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/agent-base/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -1
- package/dist/cjs/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
- package/dist/cjs/src/static_dependencies/scure-base/index.js +0 -6
- package/dist/cjs/src/static_dependencies/scure-starknet/index.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/constants.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/types/calldata.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/lib/index.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/types/typedData.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/assert.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/index.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/tuple.js +1 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/calldata/validate.js +4 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/encode.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/hash/classHash.js +3 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/merkle.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/num.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/selector.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/shortString.js +0 -1
- package/dist/cjs/src/static_dependencies/starknet/utils/typedData.js +1 -1
- package/dist/cjs/src/static_dependencies/watchable/src/unpromise.js +0 -6
- package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
- package/dist/cjs/src/timex.js +0 -1
- package/dist/cjs/src/tokocrypto.js +1 -1
- package/dist/cjs/src/tradeogre.js +1 -1
- package/dist/cjs/src/upbit.js +1 -1
- package/dist/cjs/src/wavesexchange.js +1 -1
- package/dist/cjs/src/whitebit.js +1 -1
- package/dist/cjs/src/woo.js +1 -1
- package/dist/cjs/src/woofipro.js +1 -1
- package/dist/cjs/src/xt.js +10 -1
- package/dist/cjs/src/yobit.js +10 -1
- package/dist/cjs/src/zaif.js +1 -1
- package/dist/cjs/src/zonda.js +1 -1
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -8
- package/js/src/abstract/alpaca.js +0 -6
- package/js/src/abstract/apex.js +0 -6
- package/js/src/abstract/ascendex.js +0 -6
- package/js/src/abstract/backpack.d.ts +63 -0
- package/js/src/abstract/backpack.js +5 -0
- package/js/src/abstract/bequant.js +0 -6
- package/js/src/abstract/bigone.js +0 -6
- package/js/src/abstract/binance.js +0 -6
- package/js/src/abstract/binancecoinm.js +0 -6
- package/js/src/abstract/binanceus.js +0 -6
- package/js/src/abstract/binanceusdm.js +0 -6
- package/js/src/abstract/bingx.js +0 -6
- package/js/src/abstract/bit2c.js +0 -6
- package/js/src/abstract/bitbank.js +0 -6
- package/js/src/abstract/bitbns.js +0 -6
- package/js/src/abstract/bitfinex.js +0 -6
- package/js/src/abstract/bitflyer.js +0 -6
- package/js/src/abstract/bitget.js +0 -6
- package/js/src/abstract/bithumb.js +0 -6
- package/js/src/abstract/bitmart.js +0 -6
- package/js/src/abstract/bitmex.js +0 -6
- package/js/src/abstract/bitopro.js +0 -6
- package/js/src/abstract/bitrue.js +0 -6
- package/js/src/abstract/bitso.js +0 -6
- package/js/src/abstract/bitstamp.js +0 -6
- package/js/src/abstract/bitteam.js +0 -6
- package/js/src/abstract/bittrade.js +0 -6
- package/js/src/abstract/bitvavo.js +0 -6
- package/js/src/abstract/blockchaincom.js +0 -6
- package/js/src/abstract/blofin.js +0 -6
- package/js/src/abstract/btcalpha.js +0 -6
- package/js/src/abstract/btcbox.js +0 -6
- package/js/src/abstract/btcmarkets.js +0 -6
- package/js/src/abstract/btcturk.js +0 -6
- package/js/src/abstract/bybit.js +0 -6
- package/js/src/abstract/cex.js +0 -6
- package/js/src/abstract/coinbase.js +0 -6
- package/js/src/abstract/coinbaseadvanced.js +0 -6
- package/js/src/abstract/coinbaseexchange.js +0 -6
- package/js/src/abstract/coinbaseinternational.js +0 -6
- package/js/src/abstract/coincatch.js +0 -6
- package/js/src/abstract/coincheck.js +0 -6
- package/js/src/abstract/coinex.js +0 -6
- package/js/src/abstract/coinmate.js +0 -6
- package/js/src/abstract/coinmetro.js +0 -6
- package/js/src/abstract/coinone.js +0 -6
- package/js/src/abstract/coinsph.js +0 -6
- package/js/src/abstract/coinspot.js +0 -6
- package/js/src/abstract/cryptocom.js +0 -6
- package/js/src/abstract/cryptomus.js +0 -6
- package/js/src/abstract/defx.js +0 -6
- package/js/src/abstract/delta.js +0 -6
- package/js/src/abstract/deribit.js +0 -6
- package/js/src/abstract/derive.js +0 -6
- package/js/src/abstract/digifinex.js +0 -6
- package/js/src/abstract/exmo.js +0 -6
- package/js/src/abstract/fmfwio.js +0 -6
- package/js/src/abstract/foxbit.js +0 -6
- package/js/src/abstract/gate.js +0 -6
- package/js/src/abstract/gateio.js +0 -6
- package/js/src/abstract/gemini.js +0 -6
- package/js/src/abstract/hashkey.js +0 -6
- package/js/src/abstract/hibachi.js +0 -6
- package/js/src/abstract/hitbtc.js +0 -6
- package/js/src/abstract/hollaex.js +0 -6
- package/js/src/abstract/htx.js +0 -6
- package/js/src/abstract/huobi.js +0 -6
- package/js/src/abstract/hyperliquid.js +0 -6
- package/js/src/abstract/independentreserve.js +0 -6
- package/js/src/abstract/indodax.js +0 -6
- package/js/src/abstract/kraken.js +0 -6
- package/js/src/abstract/krakenfutures.js +0 -6
- package/js/src/abstract/kucoin.js +0 -6
- package/js/src/abstract/kucoinfutures.d.ts +1 -0
- package/js/src/abstract/kucoinfutures.js +0 -6
- package/js/src/abstract/latoken.js +0 -6
- package/js/src/abstract/lbank.js +0 -6
- package/js/src/abstract/luno.js +0 -6
- package/js/src/abstract/mercado.js +0 -6
- package/js/src/abstract/mexc.js +0 -6
- package/js/src/abstract/modetrade.js +0 -6
- package/js/src/abstract/myokx.d.ts +1 -0
- package/js/src/abstract/myokx.js +0 -6
- package/js/src/abstract/ndax.js +0 -6
- package/js/src/abstract/novadax.js +0 -6
- package/js/src/abstract/oceanex.js +0 -6
- package/js/src/abstract/okcoin.js +0 -6
- package/js/src/abstract/okx.d.ts +1 -0
- package/js/src/abstract/okx.js +0 -6
- package/js/src/abstract/okxus.d.ts +1 -0
- package/js/src/abstract/okxus.js +0 -6
- package/js/src/abstract/onetrading.js +0 -6
- package/js/src/abstract/oxfun.js +0 -6
- package/js/src/abstract/p2b.js +0 -6
- package/js/src/abstract/paradex.js +0 -6
- package/js/src/abstract/paymium.js +0 -6
- package/js/src/abstract/phemex.d.ts +1 -1
- package/js/src/abstract/phemex.js +0 -6
- package/js/src/abstract/poloniex.js +0 -6
- package/js/src/abstract/probit.js +0 -6
- package/js/src/abstract/timex.js +0 -6
- package/js/src/abstract/tokocrypto.js +0 -6
- package/js/src/abstract/tradeogre.js +0 -6
- package/js/src/abstract/upbit.js +0 -6
- package/js/src/abstract/wavesexchange.js +0 -6
- package/js/src/abstract/whitebit.js +0 -6
- package/js/src/abstract/woo.js +0 -6
- package/js/src/abstract/woofipro.js +0 -6
- package/js/src/abstract/xt.js +0 -6
- package/js/src/abstract/yobit.js +0 -6
- package/js/src/abstract/zaif.js +0 -6
- package/js/src/abstract/zonda.js +0 -6
- package/js/src/alpaca.js +0 -6
- package/js/src/apex.js +0 -6
- package/js/src/ascendex.js +0 -6
- package/js/src/backpack.d.ts +371 -0
- package/js/src/backpack.js +2273 -0
- package/js/src/base/Exchange.d.ts +43 -40
- package/js/src/base/Exchange.js +169 -75
- package/js/src/base/Precise.js +0 -6
- package/js/src/base/errorHierarchy.js +0 -6
- package/js/src/base/errors.js +0 -6
- package/js/src/base/functions/crypto.js +0 -6
- package/js/src/base/functions/encode.d.ts +2 -1
- package/js/src/base/functions/encode.js +8 -7
- package/js/src/base/functions/generic.js +0 -6
- package/js/src/base/functions/misc.js +0 -6
- package/js/src/base/functions/number.js +0 -6
- package/js/src/base/functions/platform.js +0 -6
- package/js/src/base/functions/rsa.js +16 -9
- package/js/src/base/functions/string.js +0 -6
- package/js/src/base/functions/throttle.js +0 -6
- package/js/src/base/functions/time.js +0 -6
- package/js/src/base/functions/totp.js +0 -6
- package/js/src/base/functions/type.js +0 -6
- package/js/src/base/functions.js +0 -6
- package/js/src/base/types.d.ts +1 -3
- package/js/src/base/types.js +0 -6
- package/js/src/base/ws/Cache.js +0 -6
- package/js/src/base/ws/Client.js +0 -6
- package/js/src/base/ws/Future.js +0 -6
- package/js/src/base/ws/OrderBook.js +0 -6
- package/js/src/base/ws/OrderBookSide.js +0 -6
- package/js/src/base/ws/WsClient.js +0 -6
- package/js/src/base/ws/functions.js +0 -6
- package/js/src/bequant.js +0 -6
- package/js/src/bigone.js +0 -6
- package/js/src/binance.d.ts +1 -1
- package/js/src/binance.js +7 -10
- package/js/src/binancecoinm.js +0 -6
- package/js/src/binanceus.js +0 -6
- package/js/src/binanceusdm.js +0 -6
- package/js/src/bingx.js +0 -6
- package/js/src/bit2c.js +0 -6
- package/js/src/bitbank.js +1 -7
- package/js/src/bitbns.js +0 -6
- package/js/src/bitfinex.js +0 -6
- package/js/src/bitflyer.js +0 -6
- package/js/src/bitget.d.ts +3 -1
- package/js/src/bitget.js +56 -15
- package/js/src/bithumb.js +0 -6
- package/js/src/bitmart.js +0 -6
- package/js/src/bitmex.js +0 -6
- package/js/src/bitopro.js +0 -6
- package/js/src/bitrue.js +0 -6
- package/js/src/bitso.js +0 -6
- package/js/src/bitstamp.js +0 -6
- package/js/src/bitteam.js +0 -6
- package/js/src/bittrade.js +0 -6
- package/js/src/bitvavo.js +8 -6
- package/js/src/blockchaincom.js +0 -6
- package/js/src/blofin.js +0 -6
- package/js/src/btcalpha.js +0 -6
- package/js/src/btcbox.js +0 -6
- package/js/src/btcmarkets.js +0 -6
- package/js/src/btcturk.js +0 -6
- package/js/src/bybit.js +20 -12
- package/js/src/cex.js +0 -6
- package/js/src/coinbase.d.ts +2 -2
- package/js/src/coinbase.js +28 -16
- package/js/src/coinbaseadvanced.js +0 -6
- package/js/src/coinbaseexchange.js +0 -6
- package/js/src/coinbaseinternational.js +0 -6
- package/js/src/coincatch.d.ts +2 -0
- package/js/src/coincatch.js +33 -26
- package/js/src/coincheck.js +0 -6
- package/js/src/coinex.js +0 -6
- package/js/src/coinmate.js +0 -6
- package/js/src/coinmetro.js +11 -6
- package/js/src/coinone.js +0 -6
- package/js/src/coinsph.js +0 -6
- package/js/src/coinspot.js +0 -6
- package/js/src/cryptocom.js +0 -6
- package/js/src/cryptomus.js +0 -6
- package/js/src/defx.js +0 -6
- package/js/src/delta.js +1 -6
- package/js/src/deribit.js +0 -6
- package/js/src/derive.js +0 -6
- package/js/src/digifinex.js +0 -6
- package/js/src/exmo.js +0 -6
- package/js/src/fmfwio.js +0 -6
- package/js/src/foxbit.js +0 -6
- package/js/src/gate.d.ts +6 -0
- package/js/src/gate.js +7 -7
- package/js/src/gateio.js +0 -6
- package/js/src/gemini.js +10 -11
- package/js/src/hashkey.js +0 -6
- package/js/src/hibachi.js +0 -6
- package/js/src/hitbtc.js +0 -6
- package/js/src/hollaex.js +0 -6
- package/js/src/htx.js +0 -6
- package/js/src/huobi.js +0 -6
- package/js/src/hyperliquid.js +0 -6
- package/js/src/independentreserve.js +0 -6
- package/js/src/indodax.js +0 -6
- package/js/src/kraken.js +0 -6
- package/js/src/krakenfutures.js +1 -7
- package/js/src/kucoin.js +0 -6
- package/js/src/kucoinfutures.d.ts +14 -1
- package/js/src/kucoinfutures.js +54 -11
- package/js/src/latoken.js +0 -6
- package/js/src/lbank.js +0 -6
- package/js/src/luno.js +0 -6
- package/js/src/mercado.js +0 -6
- package/js/src/mexc.js +0 -6
- package/js/src/modetrade.js +0 -6
- package/js/src/myokx.js +0 -6
- package/js/src/ndax.js +0 -6
- package/js/src/novadax.js +0 -6
- package/js/src/oceanex.js +0 -6
- package/js/src/okcoin.js +0 -6
- package/js/src/okx.js +26 -21
- package/js/src/okxus.js +0 -6
- package/js/src/onetrading.d.ts +1 -0
- package/js/src/onetrading.js +160 -71
- package/js/src/oxfun.js +0 -6
- package/js/src/p2b.js +0 -6
- package/js/src/paradex.js +0 -6
- package/js/src/paymium.js +0 -6
- package/js/src/phemex.d.ts +3 -3
- package/js/src/phemex.js +15 -15
- package/js/src/poloniex.js +0 -6
- package/js/src/pro/alpaca.js +0 -6
- package/js/src/pro/apex.js +0 -6
- package/js/src/pro/ascendex.js +0 -6
- package/js/src/pro/backpack.d.ts +264 -0
- package/js/src/pro/backpack.js +1318 -0
- package/js/src/pro/bequant.js +0 -6
- package/js/src/pro/binance.js +9 -6
- package/js/src/pro/binancecoinm.js +0 -6
- package/js/src/pro/binanceus.js +0 -6
- package/js/src/pro/binanceusdm.js +0 -6
- package/js/src/pro/bingx.js +0 -6
- package/js/src/pro/bitfinex.js +0 -6
- package/js/src/pro/bitget.d.ts +9 -1
- package/js/src/pro/bitget.js +151 -31
- package/js/src/pro/bithumb.js +0 -6
- package/js/src/pro/bitmart.js +0 -6
- package/js/src/pro/bitmex.js +0 -6
- package/js/src/pro/bitopro.js +0 -6
- package/js/src/pro/bitrue.js +0 -6
- package/js/src/pro/bitstamp.js +0 -6
- package/js/src/pro/bittrade.js +0 -6
- package/js/src/pro/bitvavo.js +0 -6
- package/js/src/pro/blockchaincom.js +0 -6
- package/js/src/pro/blofin.js +0 -6
- package/js/src/pro/bybit.d.ts +4 -0
- package/js/src/pro/bybit.js +67 -14
- package/js/src/pro/cex.js +0 -6
- package/js/src/pro/coinbase.d.ts +85 -0
- package/js/src/pro/coinbase.js +226 -6
- package/js/src/pro/coinbaseadvanced.js +0 -6
- package/js/src/pro/coinbaseexchange.js +0 -6
- package/js/src/pro/coinbaseinternational.js +0 -6
- package/js/src/pro/coincatch.js +0 -6
- package/js/src/pro/coincheck.js +0 -6
- package/js/src/pro/coinex.js +11 -18
- package/js/src/pro/coinone.js +0 -6
- package/js/src/pro/cryptocom.js +0 -6
- package/js/src/pro/defx.js +0 -6
- package/js/src/pro/deribit.js +0 -6
- package/js/src/pro/derive.js +0 -6
- package/js/src/pro/exmo.js +0 -6
- package/js/src/pro/gate.js +0 -6
- package/js/src/pro/gateio.js +0 -6
- package/js/src/pro/gemini.js +0 -6
- package/js/src/pro/hashkey.js +0 -6
- package/js/src/pro/hitbtc.js +0 -6
- package/js/src/pro/hollaex.js +0 -6
- package/js/src/pro/htx.js +0 -6
- package/js/src/pro/huobi.js +0 -6
- package/js/src/pro/hyperliquid.js +0 -6
- package/js/src/pro/independentreserve.js +0 -6
- package/js/src/pro/kraken.js +0 -6
- package/js/src/pro/krakenfutures.js +0 -6
- package/js/src/pro/kucoin.js +0 -6
- package/js/src/pro/kucoinfutures.js +0 -6
- package/js/src/pro/lbank.js +0 -6
- package/js/src/pro/luno.js +0 -6
- package/js/src/pro/mexc.js +0 -6
- package/js/src/pro/modetrade.js +0 -6
- package/js/src/pro/myokx.js +0 -6
- package/js/src/pro/ndax.js +0 -6
- package/js/src/pro/okcoin.js +0 -6
- package/js/src/pro/okx.js +0 -6
- package/js/src/pro/okxus.js +0 -6
- package/js/src/pro/onetrading.js +0 -6
- package/js/src/pro/oxfun.js +0 -6
- package/js/src/pro/p2b.js +0 -6
- package/js/src/pro/paradex.js +0 -6
- package/js/src/pro/phemex.js +0 -6
- package/js/src/pro/poloniex.js +0 -6
- package/js/src/pro/probit.js +0 -6
- package/js/src/pro/tradeogre.js +0 -6
- package/js/src/pro/upbit.js +0 -6
- package/js/src/pro/whitebit.js +0 -6
- package/js/src/pro/woo.js +0 -6
- package/js/src/pro/woofipro.js +0 -6
- package/js/src/pro/xt.js +0 -6
- package/js/src/probit.js +0 -6
- package/js/src/protobuf/mexc/compiled.cjs +0 -6
- package/js/src/static_dependencies/ethers/abi-coder.js +0 -6
- package/js/src/static_dependencies/ethers/address/address.js +0 -6
- package/js/src/static_dependencies/ethers/address/checks.js +0 -6
- package/js/src/static_dependencies/ethers/address/contract-address.js +0 -6
- package/js/src/static_dependencies/ethers/address/index.js +0 -6
- package/js/src/static_dependencies/ethers/bytes32.js +0 -6
- package/js/src/static_dependencies/ethers/coders/abstract-coder.js +0 -6
- package/js/src/static_dependencies/ethers/coders/address.js +0 -6
- package/js/src/static_dependencies/ethers/coders/anonymous.js +0 -6
- package/js/src/static_dependencies/ethers/coders/array.js +0 -6
- package/js/src/static_dependencies/ethers/coders/boolean.js +0 -6
- package/js/src/static_dependencies/ethers/coders/bytes.js +0 -6
- package/js/src/static_dependencies/ethers/coders/fixed-bytes.js +0 -6
- package/js/src/static_dependencies/ethers/coders/null.js +0 -6
- package/js/src/static_dependencies/ethers/coders/number.js +0 -6
- package/js/src/static_dependencies/ethers/coders/string.js +0 -6
- package/js/src/static_dependencies/ethers/coders/tuple.js +0 -6
- package/js/src/static_dependencies/ethers/fragments.js +0 -6
- package/js/src/static_dependencies/ethers/hash/index.js +0 -6
- package/js/src/static_dependencies/ethers/hash/solidity.js +0 -6
- package/js/src/static_dependencies/ethers/hash/typed-data.js +0 -6
- package/js/src/static_dependencies/ethers/index.js +0 -6
- package/js/src/static_dependencies/ethers/interface.js +0 -6
- package/js/src/static_dependencies/ethers/typed.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base58.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base64-browser.js +0 -6
- package/js/src/static_dependencies/ethers/utils/base64.js +0 -6
- package/js/src/static_dependencies/ethers/utils/data.js +0 -6
- package/js/src/static_dependencies/ethers/utils/errors.js +0 -6
- package/js/src/static_dependencies/ethers/utils/events.js +0 -6
- package/js/src/static_dependencies/ethers/utils/fixednumber.js +0 -6
- package/js/src/static_dependencies/ethers/utils/index.js +0 -6
- package/js/src/static_dependencies/ethers/utils/maths.js +0 -6
- package/js/src/static_dependencies/ethers/utils/properties.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp-decode.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp-encode.js +0 -6
- package/js/src/static_dependencies/ethers/utils/rlp.js +0 -6
- package/js/src/static_dependencies/ethers/utils/units.js +0 -6
- package/js/src/static_dependencies/ethers/utils/utf8.js +0 -6
- package/js/src/static_dependencies/ethers/utils/uuid.js +0 -6
- package/js/src/static_dependencies/fflake/browser.js +0 -6
- package/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -6
- package/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -6
- package/js/src/static_dependencies/jsencrypt/index.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/asn1js/oids.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -6
- package/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -6
- package/js/src/static_dependencies/messagepack/msgpack.js +0 -6
- package/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/poseidon.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -6
- package/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -6
- package/js/src/static_dependencies/noble-curves/bn.js +0 -6
- package/js/src/static_dependencies/noble-curves/ed25519.js +0 -6
- package/js/src/static_dependencies/noble-curves/ed448.js +0 -6
- package/js/src/static_dependencies/noble-curves/index.js +0 -6
- package/js/src/static_dependencies/noble-curves/jubjub.js +0 -6
- package/js/src/static_dependencies/noble-curves/p256.js +0 -6
- package/js/src/static_dependencies/noble-curves/p384.js +0 -6
- package/js/src/static_dependencies/noble-curves/p521.js +0 -6
- package/js/src/static_dependencies/noble-curves/pasta.js +0 -6
- package/js/src/static_dependencies/noble-curves/secp256k1.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_assert.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_blake2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_sha2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/_u64.js +0 -6
- package/js/src/static_dependencies/noble-hashes/argon2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake2b.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake2s.js +0 -6
- package/js/src/static_dependencies/noble-hashes/blake3.js +0 -6
- package/js/src/static_dependencies/noble-hashes/crypto.js +0 -6
- package/js/src/static_dependencies/noble-hashes/cryptoNode.js +0 -6
- package/js/src/static_dependencies/noble-hashes/eskdf.js +0 -6
- package/js/src/static_dependencies/noble-hashes/hkdf.js +0 -6
- package/js/src/static_dependencies/noble-hashes/hmac.js +0 -6
- package/js/src/static_dependencies/noble-hashes/index.js +0 -6
- package/js/src/static_dependencies/noble-hashes/md5.js +0 -6
- package/js/src/static_dependencies/noble-hashes/pbkdf2.js +0 -6
- package/js/src/static_dependencies/noble-hashes/ripemd160.js +0 -6
- package/js/src/static_dependencies/noble-hashes/scrypt.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha1.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha256.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha3-addons.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha3.js +0 -6
- package/js/src/static_dependencies/noble-hashes/sha512.js +0 -6
- package/js/src/static_dependencies/noble-hashes/utils.js +0 -6
- package/js/src/static_dependencies/node-fetch/body.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/base.js +0 -6
- package/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -6
- package/js/src/static_dependencies/node-fetch/headers.js +0 -6
- package/js/src/static_dependencies/node-fetch/index.js +0 -6
- package/js/src/static_dependencies/node-fetch/request.js +0 -6
- package/js/src/static_dependencies/node-fetch/response.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/is.js +0 -6
- package/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -6
- package/js/src/static_dependencies/proxies/agent-base/helpers.js +0 -6
- package/js/src/static_dependencies/proxies/agent-base/index.js +0 -6
- package/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -6
- package/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -6
- package/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -6
- package/js/src/static_dependencies/qs/formats.cjs +0 -6
- package/js/src/static_dependencies/qs/index.cjs +0 -6
- package/js/src/static_dependencies/qs/parse.cjs +0 -6
- package/js/src/static_dependencies/qs/stringify.cjs +0 -6
- package/js/src/static_dependencies/qs/utils.cjs +0 -6
- package/js/src/static_dependencies/scure-base/index.js +0 -6
- package/js/src/static_dependencies/scure-starknet/index.js +0 -6
- package/js/src/static_dependencies/starknet/constants.js +0 -6
- package/js/src/static_dependencies/starknet/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/cairoEnum.js +0 -6
- package/js/src/static_dependencies/starknet/types/calldata.js +0 -6
- package/js/src/static_dependencies/starknet/types/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/abi.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/legacy.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/contract/sierra.js +0 -6
- package/js/src/static_dependencies/starknet/types/lib/index.js +0 -6
- package/js/src/static_dependencies/starknet/types/typedData.js +0 -6
- package/js/src/static_dependencies/starknet/utils/address.js +0 -6
- package/js/src/static_dependencies/starknet/utils/assert.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +0 -6
- package/js/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/byteArray.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/cairo.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/enum/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/formatter.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/interface.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/requestParser.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/responseParser.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/tuple.js +0 -6
- package/js/src/static_dependencies/starknet/utils/calldata/validate.js +0 -6
- package/js/src/static_dependencies/starknet/utils/encode.js +0 -6
- package/js/src/static_dependencies/starknet/utils/hash/classHash.js +0 -6
- package/js/src/static_dependencies/starknet/utils/hash/index.js +0 -6
- package/js/src/static_dependencies/starknet/utils/merkle.js +0 -6
- package/js/src/static_dependencies/starknet/utils/num.js +0 -6
- package/js/src/static_dependencies/starknet/utils/selector.js +0 -6
- package/js/src/static_dependencies/starknet/utils/shortString.js +0 -6
- package/js/src/static_dependencies/starknet/utils/starknetId.js +0 -6
- package/js/src/static_dependencies/starknet/utils/typedData.js +0 -6
- package/js/src/static_dependencies/starknet/utils/uint256.js +0 -6
- package/js/src/static_dependencies/starknet/utils/url.js +0 -6
- package/js/src/static_dependencies/watchable/src/index.js +0 -6
- package/js/src/static_dependencies/watchable/src/types.js +0 -6
- package/js/src/static_dependencies/watchable/src/unpromise.js +0 -6
- package/js/src/static_dependencies/zklink/zklink-sdk-web.js +0 -6
- package/js/src/timex.js +0 -6
- package/js/src/tokocrypto.js +0 -6
- package/js/src/tradeogre.js +0 -6
- package/js/src/upbit.js +0 -6
- package/js/src/wavesexchange.js +0 -6
- package/js/src/whitebit.js +0 -6
- package/js/src/woo.js +0 -6
- package/js/src/woofipro.js +0 -6
- package/js/src/xt.d.ts +1 -0
- package/js/src/xt.js +9 -6
- package/js/src/yobit.js +9 -6
- package/js/src/zaif.js +0 -6
- package/js/src/zonda.js +0 -6
- package/package.json +3 -3
|
@@ -0,0 +1,1318 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
import backpackRest from '../backpack.js';
|
|
3
|
+
import { ArgumentsRequired, ExchangeError } from '../base/errors.js';
|
|
4
|
+
import { ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp } from '../base/ws/Cache.js';
|
|
5
|
+
import { eddsa } from '../base/functions/crypto.js';
|
|
6
|
+
import { ed25519 } from '../static_dependencies/noble-curves/ed25519.js';
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
export default class backpack extends backpackRest {
|
|
9
|
+
describe() {
|
|
10
|
+
return this.deepExtend(super.describe(), {
|
|
11
|
+
'has': {
|
|
12
|
+
'ws': true,
|
|
13
|
+
'watchBalance': false,
|
|
14
|
+
'watchBidsAsks': true,
|
|
15
|
+
'watchMyTrades': false,
|
|
16
|
+
'watchOHLCV': true,
|
|
17
|
+
'watchOHLCVForSymbols': true,
|
|
18
|
+
'watchOrderBook': true,
|
|
19
|
+
'watchOrderBookForSymbols': true,
|
|
20
|
+
'watchOrders': true,
|
|
21
|
+
'watchPositions': true,
|
|
22
|
+
'watchTicker': true,
|
|
23
|
+
'watchTickers': true,
|
|
24
|
+
'watchTrades': true,
|
|
25
|
+
'watchTradesForSymbols': true,
|
|
26
|
+
'unwatchBidsAsks': true,
|
|
27
|
+
'unwatchOHLCV': true,
|
|
28
|
+
'unwatchOHLCVForSymbols': true,
|
|
29
|
+
'unwatchOrderBook': true,
|
|
30
|
+
'unwatchOrderBookForSymbols': true,
|
|
31
|
+
'unwatchTicker': true,
|
|
32
|
+
'unwatchTickers': true,
|
|
33
|
+
'unWatchTrades': true,
|
|
34
|
+
'unWatchTradesForSymbols': true,
|
|
35
|
+
'unWatchOrders': true,
|
|
36
|
+
'unWatchPositions': true,
|
|
37
|
+
},
|
|
38
|
+
'urls': {
|
|
39
|
+
'api': {
|
|
40
|
+
'ws': {
|
|
41
|
+
'public': 'wss://ws.backpack.exchange',
|
|
42
|
+
'private': 'wss://ws.backpack.exchange',
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
'options': {
|
|
47
|
+
'timeframes': {},
|
|
48
|
+
},
|
|
49
|
+
'streaming': {
|
|
50
|
+
'ping': this.ping,
|
|
51
|
+
'keepAlive': 119000,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
async watchPublic(topics, messageHashes, params = {}, unwatch = false) {
|
|
56
|
+
await this.loadMarkets();
|
|
57
|
+
const url = this.urls['api']['ws']['public'];
|
|
58
|
+
const method = unwatch ? 'UNSUBSCRIBE' : 'SUBSCRIBE';
|
|
59
|
+
const request = {
|
|
60
|
+
'method': method,
|
|
61
|
+
'params': topics,
|
|
62
|
+
};
|
|
63
|
+
const message = this.deepExtend(request, params);
|
|
64
|
+
if (unwatch) {
|
|
65
|
+
this.handleUnsubscriptions(url, messageHashes, message);
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
return await this.watchMultiple(url, messageHashes, message, messageHashes);
|
|
69
|
+
}
|
|
70
|
+
async watchPrivate(topics, messageHashes, params = {}, unwatch = false) {
|
|
71
|
+
this.checkRequiredCredentials();
|
|
72
|
+
const url = this.urls['api']['ws']['private'];
|
|
73
|
+
const instruction = 'subscribe';
|
|
74
|
+
const ts = this.nonce().toString();
|
|
75
|
+
const method = unwatch ? 'UNSUBSCRIBE' : 'SUBSCRIBE';
|
|
76
|
+
const recvWindow = this.safeString2(this.options, 'recvWindow', 'X-Window', '5000');
|
|
77
|
+
const payload = 'instruction=' + instruction + '&' + 'timestamp=' + ts + '&window=' + recvWindow;
|
|
78
|
+
const secretBytes = this.base64ToBinary(this.secret);
|
|
79
|
+
const seed = this.arraySlice(secretBytes, 0, 32);
|
|
80
|
+
const signature = eddsa(this.encode(payload), seed, ed25519);
|
|
81
|
+
const request = {
|
|
82
|
+
'method': method,
|
|
83
|
+
'params': topics,
|
|
84
|
+
'signature': [this.apiKey, signature, ts, recvWindow],
|
|
85
|
+
};
|
|
86
|
+
const message = this.deepExtend(request, params);
|
|
87
|
+
if (unwatch) {
|
|
88
|
+
this.handleUnsubscriptions(url, messageHashes, message);
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
return await this.watchMultiple(url, messageHashes, message, messageHashes);
|
|
92
|
+
}
|
|
93
|
+
handleUnsubscriptions(url, messageHashes, message) {
|
|
94
|
+
const client = this.client(url);
|
|
95
|
+
this.watchMultiple(url, messageHashes, message, messageHashes);
|
|
96
|
+
for (let i = 0; i < messageHashes.length; i++) {
|
|
97
|
+
const messageHash = messageHashes[i];
|
|
98
|
+
const subMessageHash = messageHash.replace('unsubscribe:', '');
|
|
99
|
+
this.cleanUnsubscription(client, subMessageHash, messageHash);
|
|
100
|
+
if (messageHash.indexOf('ticker') >= 0) {
|
|
101
|
+
const symbol = messageHash.replace('unsubscribe:ticker:', '');
|
|
102
|
+
if (symbol in this.tickers) {
|
|
103
|
+
delete this.tickers[symbol];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else if (messageHash.indexOf('bidask') >= 0) {
|
|
107
|
+
const symbol = messageHash.replace('unsubscribe:bidask:', '');
|
|
108
|
+
if (symbol in this.bidsasks) {
|
|
109
|
+
delete this.bidsasks[symbol];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else if (messageHash.indexOf('candles') >= 0) {
|
|
113
|
+
const splitHashes = messageHash.split(':');
|
|
114
|
+
const symbol = this.safeString(splitHashes, 2);
|
|
115
|
+
const timeframe = this.safeString(splitHashes, 3);
|
|
116
|
+
if (symbol in this.ohlcvs) {
|
|
117
|
+
if (timeframe in this.ohlcvs[symbol]) {
|
|
118
|
+
delete this.ohlcvs[symbol][timeframe];
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
else if (messageHash.indexOf('orderbook') >= 0) {
|
|
123
|
+
const symbol = messageHash.replace('unsubscribe:orderbook:', '');
|
|
124
|
+
if (symbol in this.orderbooks) {
|
|
125
|
+
delete this.orderbooks[symbol];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else if (messageHash.indexOf('trades') >= 0) {
|
|
129
|
+
const symbol = messageHash.replace('unsubscribe:trades:', '');
|
|
130
|
+
if (symbol in this.trades) {
|
|
131
|
+
delete this.trades[symbol];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (messageHash.indexOf('orders') >= 0) {
|
|
135
|
+
if (messageHash === 'unsubscribe:orders') {
|
|
136
|
+
const cache = this.orders;
|
|
137
|
+
const keys = Object.keys(cache);
|
|
138
|
+
for (let j = 0; j < keys.length; j++) {
|
|
139
|
+
const symbol = keys[j];
|
|
140
|
+
delete this.orders[symbol];
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
const symbol = messageHash.replace('unsubscribe:orders:', '');
|
|
145
|
+
if (symbol in this.orders) {
|
|
146
|
+
delete this.orders[symbol];
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else if (messageHash.indexOf('positions') >= 0) {
|
|
151
|
+
if (messageHash === 'unsubscribe:positions') {
|
|
152
|
+
const cache = this.positions;
|
|
153
|
+
const keys = Object.keys(cache);
|
|
154
|
+
for (let j = 0; j < keys.length; j++) {
|
|
155
|
+
const symbol = keys[j];
|
|
156
|
+
delete this.positions[symbol];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const symbol = messageHash.replace('unsubscribe:positions:', '');
|
|
161
|
+
if (symbol in this.positions) {
|
|
162
|
+
delete this.positions[symbol];
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* @method
|
|
170
|
+
* @name backpack#watchTicker
|
|
171
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
172
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Ticker
|
|
173
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
174
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
175
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
176
|
+
*/
|
|
177
|
+
async watchTicker(symbol, params = {}) {
|
|
178
|
+
await this.loadMarkets();
|
|
179
|
+
const market = this.market(symbol);
|
|
180
|
+
symbol = market['symbol'];
|
|
181
|
+
const topic = 'ticker' + '.' + market['id'];
|
|
182
|
+
const messageHash = 'ticker' + ':' + symbol;
|
|
183
|
+
return await this.watchPublic([topic], [messageHash], params);
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* @method
|
|
187
|
+
* @name backpack#unWatchTicker
|
|
188
|
+
* @description unWatches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
189
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Ticker
|
|
190
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
191
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
192
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
193
|
+
*/
|
|
194
|
+
async unWatchTicker(symbol, params = {}) {
|
|
195
|
+
return await this.unWatchTickers([symbol], params);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* @method
|
|
199
|
+
* @name backpack#watchTickers
|
|
200
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
201
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Ticker
|
|
202
|
+
* @param {string[]} symbols unified symbol of the market to fetch the ticker for
|
|
203
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
204
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
205
|
+
*/
|
|
206
|
+
async watchTickers(symbols = undefined, params = {}) {
|
|
207
|
+
await this.loadMarkets();
|
|
208
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
209
|
+
const messageHashes = [];
|
|
210
|
+
const topics = [];
|
|
211
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
212
|
+
const symbol = symbols[i];
|
|
213
|
+
const marketId = this.marketId(symbol);
|
|
214
|
+
messageHashes.push('ticker:' + symbol);
|
|
215
|
+
topics.push('ticker.' + marketId);
|
|
216
|
+
}
|
|
217
|
+
await this.watchPublic(topics, messageHashes, params);
|
|
218
|
+
return this.filterByArray(this.tickers, 'symbol', symbols);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* @method
|
|
222
|
+
* @name backpack#unWatchTickers
|
|
223
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
224
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Ticker
|
|
225
|
+
* @param {string[]} symbols unified symbol of the market to fetch the ticker for
|
|
226
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
227
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
228
|
+
*/
|
|
229
|
+
async unWatchTickers(symbols = undefined, params = {}) {
|
|
230
|
+
await this.loadMarkets();
|
|
231
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
232
|
+
const topics = [];
|
|
233
|
+
const messageHashes = [];
|
|
234
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
235
|
+
const symbol = symbols[i];
|
|
236
|
+
const marketId = this.marketId(symbol);
|
|
237
|
+
topics.push('ticker.' + marketId);
|
|
238
|
+
messageHashes.push('unsubscribe:ticker:' + symbol);
|
|
239
|
+
}
|
|
240
|
+
return await this.watchPublic(topics, messageHashes, params, true);
|
|
241
|
+
}
|
|
242
|
+
handleTicker(client, message) {
|
|
243
|
+
//
|
|
244
|
+
// {
|
|
245
|
+
// data: {
|
|
246
|
+
// E: '1754176123312507',
|
|
247
|
+
// V: '19419526.742584',
|
|
248
|
+
// c: '3398.57',
|
|
249
|
+
// e: 'ticker',
|
|
250
|
+
// h: '3536.65',
|
|
251
|
+
// l: '3371.8',
|
|
252
|
+
// n: 17152,
|
|
253
|
+
// o: '3475.45',
|
|
254
|
+
// s: 'ETH_USDC',
|
|
255
|
+
// v: '5573.5827'
|
|
256
|
+
// },
|
|
257
|
+
// stream: 'bookTicker.ETH_USDC'
|
|
258
|
+
// }
|
|
259
|
+
//
|
|
260
|
+
const ticker = this.safeDict(message, 'data', {});
|
|
261
|
+
const marketId = this.safeString(ticker, 's');
|
|
262
|
+
const market = this.safeMarket(marketId);
|
|
263
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
264
|
+
const parsedTicker = this.parseWsTicker(ticker, market);
|
|
265
|
+
const messageHash = 'ticker' + ':' + symbol;
|
|
266
|
+
this.tickers[symbol] = parsedTicker;
|
|
267
|
+
client.resolve(parsedTicker, messageHash);
|
|
268
|
+
}
|
|
269
|
+
parseWsTicker(ticker, market = undefined) {
|
|
270
|
+
//
|
|
271
|
+
// {
|
|
272
|
+
// E: '1754178406415232',
|
|
273
|
+
// V: '19303818.6923',
|
|
274
|
+
// c: '3407.54',
|
|
275
|
+
// e: 'ticker',
|
|
276
|
+
// h: '3536.65',
|
|
277
|
+
// l: '3369.18',
|
|
278
|
+
// n: 17272,
|
|
279
|
+
// o: '3481.71',
|
|
280
|
+
// s: 'ETH_USDC',
|
|
281
|
+
// v: '5542.3911'
|
|
282
|
+
// }
|
|
283
|
+
//
|
|
284
|
+
const microseconds = this.safeInteger(ticker, 'E');
|
|
285
|
+
const timestamp = this.parseToInt(microseconds / 1000);
|
|
286
|
+
const marketId = this.safeString(ticker, 's');
|
|
287
|
+
market = this.safeMarket(marketId, market);
|
|
288
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
289
|
+
const last = this.safeString(ticker, 'c');
|
|
290
|
+
const open = this.safeString(ticker, 'o');
|
|
291
|
+
return this.safeTicker({
|
|
292
|
+
'symbol': symbol,
|
|
293
|
+
'timestamp': timestamp,
|
|
294
|
+
'datetime': this.iso8601(timestamp),
|
|
295
|
+
'high': this.safeNumber(ticker, 'h'),
|
|
296
|
+
'low': this.safeNumber(ticker, 'l'),
|
|
297
|
+
'bid': undefined,
|
|
298
|
+
'bidVolume': undefined,
|
|
299
|
+
'ask': undefined,
|
|
300
|
+
'askVolume': undefined,
|
|
301
|
+
'vwap': undefined,
|
|
302
|
+
'open': open,
|
|
303
|
+
'close': last,
|
|
304
|
+
'last': last,
|
|
305
|
+
'previousClose': undefined,
|
|
306
|
+
'change': undefined,
|
|
307
|
+
'percentage': undefined,
|
|
308
|
+
'average': undefined,
|
|
309
|
+
'baseVolume': this.safeString(ticker, 'v'),
|
|
310
|
+
'quoteVolume': this.safeString(ticker, 'V'),
|
|
311
|
+
'info': ticker,
|
|
312
|
+
}, market);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* @method
|
|
316
|
+
* @name backpack#watchBidsAsks
|
|
317
|
+
* @description watches best bid & ask for symbols
|
|
318
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Book-ticker
|
|
319
|
+
* @param {string[]} symbols unified symbol of the market to fetch the ticker for
|
|
320
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
321
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
322
|
+
*/
|
|
323
|
+
async watchBidsAsks(symbols = undefined, params = {}) {
|
|
324
|
+
await this.loadMarkets();
|
|
325
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
326
|
+
const topics = [];
|
|
327
|
+
const messageHashes = [];
|
|
328
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
329
|
+
const symbol = symbols[i];
|
|
330
|
+
const marketId = this.marketId(symbol);
|
|
331
|
+
topics.push('bookTicker.' + marketId);
|
|
332
|
+
messageHashes.push('bidask:' + symbol);
|
|
333
|
+
}
|
|
334
|
+
await this.watchPublic(topics, messageHashes, params);
|
|
335
|
+
return this.filterByArray(this.bidsasks, 'symbol', symbols);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* @method
|
|
339
|
+
* @name backpack#unWatchBidsAsks
|
|
340
|
+
* @description unWatches best bid & ask for symbols
|
|
341
|
+
* @param {string[]} symbols unified symbol of the market to fetch the ticker for
|
|
342
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
343
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
344
|
+
*/
|
|
345
|
+
async unWatchBidsAsks(symbols = undefined, params = {}) {
|
|
346
|
+
await this.loadMarkets();
|
|
347
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
348
|
+
const topics = [];
|
|
349
|
+
const messageHashes = [];
|
|
350
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
351
|
+
const symbol = symbols[i];
|
|
352
|
+
const marketId = this.marketId(symbol);
|
|
353
|
+
topics.push('bookTicker.' + marketId);
|
|
354
|
+
messageHashes.push('unsubscribe:bidask:' + symbol);
|
|
355
|
+
}
|
|
356
|
+
return await this.watchPublic(topics, messageHashes, params, true);
|
|
357
|
+
}
|
|
358
|
+
handleBidAsk(client, message) {
|
|
359
|
+
//
|
|
360
|
+
// {
|
|
361
|
+
// data: {
|
|
362
|
+
// A: '0.4087',
|
|
363
|
+
// B: '0.0020',
|
|
364
|
+
// E: '1754517402450016',
|
|
365
|
+
// T: '1754517402449064',
|
|
366
|
+
// a: '3667.50',
|
|
367
|
+
// b: '3667.49',
|
|
368
|
+
// e: 'bookTicker',
|
|
369
|
+
// s: 'ETH_USDC',
|
|
370
|
+
// u: 1328288557
|
|
371
|
+
// },
|
|
372
|
+
// stream: 'bookTicker.ETH_USDC'
|
|
373
|
+
// }
|
|
374
|
+
const data = this.safeDict(message, 'data', {});
|
|
375
|
+
const marketId = this.safeString(data, 's');
|
|
376
|
+
const market = this.safeMarket(marketId);
|
|
377
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
378
|
+
const parsedBidAsk = this.parseWsBidAsk(data, market);
|
|
379
|
+
const messageHash = 'bidask' + ':' + symbol;
|
|
380
|
+
this.bidsasks[symbol] = parsedBidAsk;
|
|
381
|
+
client.resolve(parsedBidAsk, messageHash);
|
|
382
|
+
}
|
|
383
|
+
parseWsBidAsk(ticker, market = undefined) {
|
|
384
|
+
//
|
|
385
|
+
// {
|
|
386
|
+
// A: '0.4087',
|
|
387
|
+
// B: '0.0020',
|
|
388
|
+
// E: '1754517402450016',
|
|
389
|
+
// T: '1754517402449064',
|
|
390
|
+
// a: '3667.50',
|
|
391
|
+
// b: '3667.49',
|
|
392
|
+
// e: 'bookTicker',
|
|
393
|
+
// s: 'ETH_USDC',
|
|
394
|
+
// u: 1328288557
|
|
395
|
+
// }
|
|
396
|
+
//
|
|
397
|
+
const marketId = this.safeString(ticker, 's');
|
|
398
|
+
market = this.safeMarket(marketId, market);
|
|
399
|
+
const symbol = this.safeString(market, 'symbol');
|
|
400
|
+
const microseconds = this.safeInteger(ticker, 'E');
|
|
401
|
+
const timestamp = this.parseToInt(microseconds / 1000);
|
|
402
|
+
const ask = this.safeString(ticker, 'a');
|
|
403
|
+
const askVolume = this.safeString(ticker, 'A');
|
|
404
|
+
const bid = this.safeString(ticker, 'b');
|
|
405
|
+
const bidVolume = this.safeString(ticker, 'B');
|
|
406
|
+
return this.safeTicker({
|
|
407
|
+
'symbol': symbol,
|
|
408
|
+
'timestamp': timestamp,
|
|
409
|
+
'datetime': this.iso8601(timestamp),
|
|
410
|
+
'ask': ask,
|
|
411
|
+
'askVolume': askVolume,
|
|
412
|
+
'bid': bid,
|
|
413
|
+
'bidVolume': bidVolume,
|
|
414
|
+
'info': ticker,
|
|
415
|
+
}, market);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* @method
|
|
419
|
+
* @name backpack#watchOHLCV
|
|
420
|
+
* @description watches historical candlestick data containing the open, high, low, close price, and the volume of a market
|
|
421
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/K-Line
|
|
422
|
+
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
423
|
+
* @param {string} timeframe the length of time each candle represents
|
|
424
|
+
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
425
|
+
* @param {int} [limit] the maximum amount of candles to fetch
|
|
426
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
427
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
428
|
+
*/
|
|
429
|
+
async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
430
|
+
const result = await this.watchOHLCVForSymbols([[symbol, timeframe]], since, limit, params);
|
|
431
|
+
return result[symbol][timeframe];
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* @method
|
|
435
|
+
* @name backpack#unWatchOHLCV
|
|
436
|
+
* @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
437
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/K-Line
|
|
438
|
+
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
439
|
+
* @param {string} timeframe the length of time each candle represents
|
|
440
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
441
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
442
|
+
*/
|
|
443
|
+
async unWatchOHLCV(symbol, timeframe = '1m', params = {}) {
|
|
444
|
+
return await this.unWatchOHLCVForSymbols([[symbol, timeframe]], params);
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* @method
|
|
448
|
+
* @name backpack#watchOHLCVForSymbols
|
|
449
|
+
* @description watches historical candlestick data containing the open, high, low, close price, and the volume of a market
|
|
450
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/K-Line
|
|
451
|
+
* @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
|
|
452
|
+
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
453
|
+
* @param {int} [limit] the maximum amount of candles to fetch
|
|
454
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
455
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
456
|
+
*/
|
|
457
|
+
async watchOHLCVForSymbols(symbolsAndTimeframes, since = undefined, limit = undefined, params = {}) {
|
|
458
|
+
const symbolsLength = symbolsAndTimeframes.length;
|
|
459
|
+
if (symbolsLength === 0 || !Array.isArray(symbolsAndTimeframes[0])) {
|
|
460
|
+
throw new ArgumentsRequired(this.id + " watchOHLCVForSymbols() requires a an array of symbols and timeframes, like ['ETH/USDC', '1m']");
|
|
461
|
+
}
|
|
462
|
+
await this.loadMarkets();
|
|
463
|
+
const topics = [];
|
|
464
|
+
const messageHashes = [];
|
|
465
|
+
for (let i = 0; i < symbolsAndTimeframes.length; i++) {
|
|
466
|
+
const symbolAndTimeframe = symbolsAndTimeframes[i];
|
|
467
|
+
const marketId = this.safeString(symbolAndTimeframe, 0);
|
|
468
|
+
const market = this.market(marketId);
|
|
469
|
+
const tf = this.safeString(symbolAndTimeframe, 1);
|
|
470
|
+
const interval = this.safeString(this.timeframes, tf, tf);
|
|
471
|
+
topics.push('kline.' + interval + '.' + market['id']);
|
|
472
|
+
messageHashes.push('candles:' + market['symbol'] + ':' + interval);
|
|
473
|
+
}
|
|
474
|
+
const [symbol, timeframe, candles] = await this.watchPublic(topics, messageHashes, params);
|
|
475
|
+
if (this.newUpdates) {
|
|
476
|
+
limit = candles.getLimit(symbol, limit);
|
|
477
|
+
}
|
|
478
|
+
const filtered = this.filterBySinceLimit(candles, since, limit, 0, true);
|
|
479
|
+
return this.createOHLCVObject(symbol, timeframe, filtered);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* @method
|
|
483
|
+
* @name backpack#unWatchOHLCVForSymbols
|
|
484
|
+
* @description unWatches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
485
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/K-Line
|
|
486
|
+
* @param {string[][]} symbolsAndTimeframes array of arrays containing unified symbols and timeframes to fetch OHLCV data for, example [['BTC/USDT', '1m'], ['LTC/USDT', '5m']]
|
|
487
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
488
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
489
|
+
*/
|
|
490
|
+
async unWatchOHLCVForSymbols(symbolsAndTimeframes, params = {}) {
|
|
491
|
+
const symbolsLength = symbolsAndTimeframes.length;
|
|
492
|
+
if (symbolsLength === 0 || !Array.isArray(symbolsAndTimeframes[0])) {
|
|
493
|
+
throw new ArgumentsRequired(this.id + " unWatchOHLCVForSymbols() requires a an array of symbols and timeframes, like ['ETH/USDC', '1m']");
|
|
494
|
+
}
|
|
495
|
+
await this.loadMarkets();
|
|
496
|
+
const topics = [];
|
|
497
|
+
const messageHashes = [];
|
|
498
|
+
for (let i = 0; i < symbolsAndTimeframes.length; i++) {
|
|
499
|
+
const symbolAndTimeframe = symbolsAndTimeframes[i];
|
|
500
|
+
const marketId = this.safeString(symbolAndTimeframe, 0);
|
|
501
|
+
const market = this.market(marketId);
|
|
502
|
+
const tf = this.safeString(symbolAndTimeframe, 1);
|
|
503
|
+
const interval = this.safeString(this.timeframes, tf, tf);
|
|
504
|
+
topics.push('kline.' + interval + '.' + market['id']);
|
|
505
|
+
messageHashes.push('unsubscribe:candles:' + market['symbol'] + ':' + interval);
|
|
506
|
+
}
|
|
507
|
+
return await this.watchPublic(topics, messageHashes, params, true);
|
|
508
|
+
}
|
|
509
|
+
handleOHLCV(client, message) {
|
|
510
|
+
//
|
|
511
|
+
// {
|
|
512
|
+
// data: {
|
|
513
|
+
// E: '1754519557526056',
|
|
514
|
+
// T: '2025-08-07T00:00:00',
|
|
515
|
+
// X: false,
|
|
516
|
+
// c: '3680.520000000',
|
|
517
|
+
// e: 'kline',
|
|
518
|
+
// h: '3681.370000000',
|
|
519
|
+
// l: '3667.650000000',
|
|
520
|
+
// n: 255,
|
|
521
|
+
// o: '3670.150000000',
|
|
522
|
+
// s: 'ETH_USDC',
|
|
523
|
+
// t: '2025-08-06T22:00:00',
|
|
524
|
+
// v: '62.2621000'
|
|
525
|
+
// },
|
|
526
|
+
// stream: 'kline.2h.ETH_USDC'
|
|
527
|
+
// }
|
|
528
|
+
//
|
|
529
|
+
const data = this.safeDict(message, 'data', {});
|
|
530
|
+
const marketId = this.safeString(data, 's');
|
|
531
|
+
const market = this.market(marketId);
|
|
532
|
+
const symbol = market['symbol'];
|
|
533
|
+
const stream = this.safeString(message, 'stream');
|
|
534
|
+
const parts = stream.split('.');
|
|
535
|
+
const timeframe = this.safeString(parts, 1);
|
|
536
|
+
if (!(symbol in this.ohlcvs)) {
|
|
537
|
+
this.ohlcvs[symbol] = {};
|
|
538
|
+
}
|
|
539
|
+
if (!(timeframe in this.ohlcvs[symbol])) {
|
|
540
|
+
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
541
|
+
const stored = new ArrayCacheByTimestamp(limit);
|
|
542
|
+
this.ohlcvs[symbol][timeframe] = stored;
|
|
543
|
+
}
|
|
544
|
+
const ohlcv = this.ohlcvs[symbol][timeframe];
|
|
545
|
+
const parsed = this.parseWsOHLCV(data);
|
|
546
|
+
ohlcv.append(parsed);
|
|
547
|
+
const messageHash = 'candles:' + symbol + ':' + timeframe;
|
|
548
|
+
client.resolve([symbol, timeframe, ohlcv], messageHash);
|
|
549
|
+
}
|
|
550
|
+
parseWsOHLCV(ohlcv, market = undefined) {
|
|
551
|
+
//
|
|
552
|
+
// {
|
|
553
|
+
// E: '1754519557526056',
|
|
554
|
+
// T: '2025-08-07T00:00:00',
|
|
555
|
+
// X: false,
|
|
556
|
+
// c: '3680.520000000',
|
|
557
|
+
// e: 'kline',
|
|
558
|
+
// h: '3681.370000000',
|
|
559
|
+
// l: '3667.650000000',
|
|
560
|
+
// n: 255,
|
|
561
|
+
// o: '3670.150000000',
|
|
562
|
+
// s: 'ETH_USDC',
|
|
563
|
+
// t: '2025-08-06T22:00:00',
|
|
564
|
+
// v: '62.2621000'
|
|
565
|
+
// },
|
|
566
|
+
//
|
|
567
|
+
return [
|
|
568
|
+
this.parse8601(this.safeString(ohlcv, 'T')),
|
|
569
|
+
this.safeNumber(ohlcv, 'o'),
|
|
570
|
+
this.safeNumber(ohlcv, 'h'),
|
|
571
|
+
this.safeNumber(ohlcv, 'l'),
|
|
572
|
+
this.safeNumber(ohlcv, 'c'),
|
|
573
|
+
this.safeNumber(ohlcv, 'v'),
|
|
574
|
+
];
|
|
575
|
+
}
|
|
576
|
+
/**
|
|
577
|
+
* @method
|
|
578
|
+
* @name backpack#watchTrades
|
|
579
|
+
* @description watches information on multiple trades made in a market
|
|
580
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Trade
|
|
581
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
582
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
583
|
+
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
584
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
585
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
586
|
+
*/
|
|
587
|
+
async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
588
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
589
|
+
}
|
|
590
|
+
/**
|
|
591
|
+
* @method
|
|
592
|
+
* @name backpack#unWatchTrades
|
|
593
|
+
* @description unWatches from the stream channel
|
|
594
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Trade
|
|
595
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
596
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
597
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
598
|
+
*/
|
|
599
|
+
async unWatchTrades(symbol, params = {}) {
|
|
600
|
+
return await this.unWatchTradesForSymbols([symbol], params);
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* @method
|
|
604
|
+
* @name backpack#watchTradesForSymbols
|
|
605
|
+
* @description watches information on multiple trades made in a market
|
|
606
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Trade
|
|
607
|
+
* @param {string[]} symbols unified symbol of the market to fetch trades for
|
|
608
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
609
|
+
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
610
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
611
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
612
|
+
*/
|
|
613
|
+
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
614
|
+
await this.loadMarkets();
|
|
615
|
+
symbols = this.marketSymbols(symbols);
|
|
616
|
+
const symbolsLength = symbols.length;
|
|
617
|
+
if (symbolsLength === 0) {
|
|
618
|
+
throw new ArgumentsRequired(this.id + ' watchTradesForSymbols() requires a non-empty array of symbols');
|
|
619
|
+
}
|
|
620
|
+
const topics = [];
|
|
621
|
+
const messageHashes = [];
|
|
622
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
623
|
+
const symbol = symbols[i];
|
|
624
|
+
const marketId = this.marketId(symbol);
|
|
625
|
+
topics.push('trade.' + marketId);
|
|
626
|
+
messageHashes.push('trades:' + symbol);
|
|
627
|
+
}
|
|
628
|
+
const trades = await this.watchPublic(topics, messageHashes, params);
|
|
629
|
+
if (this.newUpdates) {
|
|
630
|
+
const first = this.safeValue(trades, 0);
|
|
631
|
+
const tradeSymbol = this.safeString(first, 'symbol');
|
|
632
|
+
limit = trades.getLimit(tradeSymbol, limit);
|
|
633
|
+
}
|
|
634
|
+
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
635
|
+
}
|
|
636
|
+
/**
|
|
637
|
+
* @method
|
|
638
|
+
* @name backpack#unWatchTradesForSymbols
|
|
639
|
+
* @description unWatches from the stream channel
|
|
640
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Trade
|
|
641
|
+
* @param {string[]} symbols unified symbol of the market to fetch trades for
|
|
642
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
643
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
644
|
+
*/
|
|
645
|
+
async unWatchTradesForSymbols(symbols, params = {}) {
|
|
646
|
+
await this.loadMarkets();
|
|
647
|
+
symbols = this.marketSymbols(symbols);
|
|
648
|
+
const symbolsLength = symbols.length;
|
|
649
|
+
if (symbolsLength === 0) {
|
|
650
|
+
throw new ArgumentsRequired(this.id + ' unWatchTradesForSymbols() requires a non-empty array of symbols');
|
|
651
|
+
}
|
|
652
|
+
const topics = [];
|
|
653
|
+
const messageHashes = [];
|
|
654
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
655
|
+
const symbol = symbols[i];
|
|
656
|
+
const marketId = this.marketId(symbol);
|
|
657
|
+
topics.push('trade.' + marketId);
|
|
658
|
+
messageHashes.push('unsubscribe:trades:' + symbol);
|
|
659
|
+
}
|
|
660
|
+
return await this.watchPublic(topics, messageHashes, params, true);
|
|
661
|
+
}
|
|
662
|
+
handleTrades(client, message) {
|
|
663
|
+
//
|
|
664
|
+
// {
|
|
665
|
+
// data: {
|
|
666
|
+
// E: '1754601477746429',
|
|
667
|
+
// T: '1754601477744000',
|
|
668
|
+
// a: '5121860761',
|
|
669
|
+
// b: '5121861755',
|
|
670
|
+
// e: 'trade',
|
|
671
|
+
// m: false,
|
|
672
|
+
// p: '3870.25',
|
|
673
|
+
// q: '0.0008',
|
|
674
|
+
// s: 'ETH_USDC_PERP',
|
|
675
|
+
// t: 10782547
|
|
676
|
+
// },
|
|
677
|
+
// stream: 'trade.ETH_USDC_PERP'
|
|
678
|
+
// }
|
|
679
|
+
//
|
|
680
|
+
const data = this.safeDict(message, 'data', {});
|
|
681
|
+
const marketId = this.safeString(data, 's');
|
|
682
|
+
const market = this.market(marketId);
|
|
683
|
+
const symbol = market['symbol'];
|
|
684
|
+
if (!(symbol in this.trades)) {
|
|
685
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
686
|
+
const stored = new ArrayCache(limit);
|
|
687
|
+
this.trades[symbol] = stored;
|
|
688
|
+
}
|
|
689
|
+
const cache = this.trades[symbol];
|
|
690
|
+
const trade = this.parseWsTrade(data, market);
|
|
691
|
+
cache.append(trade);
|
|
692
|
+
const messageHash = 'trades:' + symbol;
|
|
693
|
+
client.resolve(cache, messageHash);
|
|
694
|
+
client.resolve(cache, 'trades');
|
|
695
|
+
}
|
|
696
|
+
parseWsTrade(trade, market = undefined) {
|
|
697
|
+
//
|
|
698
|
+
// {
|
|
699
|
+
// E: '1754601477746429',
|
|
700
|
+
// T: '1754601477744000',
|
|
701
|
+
// a: '5121860761',
|
|
702
|
+
// b: '5121861755',
|
|
703
|
+
// e: 'trade',
|
|
704
|
+
// m: false,
|
|
705
|
+
// p: '3870.25',
|
|
706
|
+
// q: '0.0008',
|
|
707
|
+
// s: 'ETH_USDC_PERP',
|
|
708
|
+
// t: 10782547
|
|
709
|
+
// }
|
|
710
|
+
//
|
|
711
|
+
const microseconds = this.safeInteger(trade, 'E');
|
|
712
|
+
const timestamp = this.parseToInt(microseconds / 1000);
|
|
713
|
+
const id = this.safeString(trade, 't');
|
|
714
|
+
const marketId = this.safeString(trade, 's');
|
|
715
|
+
market = this.safeMarket(marketId, market);
|
|
716
|
+
const isMaker = this.safeBool(trade, 'm');
|
|
717
|
+
const side = isMaker ? 'sell' : 'buy';
|
|
718
|
+
const takerOrMaker = isMaker ? 'maker' : 'taker';
|
|
719
|
+
const price = this.safeString(trade, 'p');
|
|
720
|
+
const amount = this.safeString(trade, 'q');
|
|
721
|
+
let orderId = undefined;
|
|
722
|
+
if (side === 'buy') {
|
|
723
|
+
orderId = this.safeString(trade, 'b');
|
|
724
|
+
}
|
|
725
|
+
else {
|
|
726
|
+
orderId = this.safeString(trade, 'a');
|
|
727
|
+
}
|
|
728
|
+
return this.safeTrade({
|
|
729
|
+
'info': trade,
|
|
730
|
+
'id': id,
|
|
731
|
+
'timestamp': timestamp,
|
|
732
|
+
'datetime': this.iso8601(timestamp),
|
|
733
|
+
'symbol': market['symbol'],
|
|
734
|
+
'order': orderId,
|
|
735
|
+
'type': undefined,
|
|
736
|
+
'side': side,
|
|
737
|
+
'takerOrMaker': takerOrMaker,
|
|
738
|
+
'price': price,
|
|
739
|
+
'amount': amount,
|
|
740
|
+
'cost': undefined,
|
|
741
|
+
'fee': {
|
|
742
|
+
'currency': undefined,
|
|
743
|
+
'cost': undefined,
|
|
744
|
+
},
|
|
745
|
+
}, market);
|
|
746
|
+
}
|
|
747
|
+
/**
|
|
748
|
+
* @method
|
|
749
|
+
* @name backpack#watchOrderBook
|
|
750
|
+
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
751
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Depth
|
|
752
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
753
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
754
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
755
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
756
|
+
*/
|
|
757
|
+
async watchOrderBook(symbol, limit = undefined, params = {}) {
|
|
758
|
+
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
759
|
+
}
|
|
760
|
+
/**
|
|
761
|
+
* @method
|
|
762
|
+
* @name backpack#watchOrderBookForSymbols
|
|
763
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Public/Depth
|
|
764
|
+
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
765
|
+
* @param {string[]} symbols unified array of symbols
|
|
766
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
767
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
768
|
+
* @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
|
|
769
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
770
|
+
*/
|
|
771
|
+
async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
|
|
772
|
+
await this.loadMarkets();
|
|
773
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
774
|
+
const marketIds = this.marketIds(symbols);
|
|
775
|
+
const messageHashes = [];
|
|
776
|
+
const topics = [];
|
|
777
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
778
|
+
const symbol = symbols[i];
|
|
779
|
+
messageHashes.push('orderbook:' + symbol);
|
|
780
|
+
const marketId = marketIds[i];
|
|
781
|
+
const topic = 'depth.' + marketId;
|
|
782
|
+
topics.push(topic);
|
|
783
|
+
}
|
|
784
|
+
const orderbook = await this.watchPublic(topics, messageHashes, params);
|
|
785
|
+
return orderbook.limit(); // todo check if limit is needed
|
|
786
|
+
}
|
|
787
|
+
/**
|
|
788
|
+
* @method
|
|
789
|
+
* @name backpack#unWatchOrderBook
|
|
790
|
+
* @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
791
|
+
* @param {string} symbol unified array of symbols
|
|
792
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
793
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
794
|
+
*/
|
|
795
|
+
async unWatchOrderBook(symbol, params = {}) {
|
|
796
|
+
return await this.unWatchOrderBookForSymbols([symbol], params);
|
|
797
|
+
}
|
|
798
|
+
/**
|
|
799
|
+
* @method
|
|
800
|
+
* @name kucoin#unWatchOrderBookForSymbols
|
|
801
|
+
* @description unWatches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
802
|
+
* @param {string[]} symbols unified array of symbols
|
|
803
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
804
|
+
* @param {string} [params.method] either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
|
|
805
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
806
|
+
*/
|
|
807
|
+
async unWatchOrderBookForSymbols(symbols, params = {}) {
|
|
808
|
+
await this.loadMarkets();
|
|
809
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
810
|
+
const marketIds = this.marketIds(symbols);
|
|
811
|
+
const messageHashes = [];
|
|
812
|
+
const topics = [];
|
|
813
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
814
|
+
const symbol = symbols[i];
|
|
815
|
+
messageHashes.push('unsubscribe:orderbook:' + symbol);
|
|
816
|
+
const marketId = marketIds[i];
|
|
817
|
+
const topic = 'depth.' + marketId;
|
|
818
|
+
topics.push(topic);
|
|
819
|
+
}
|
|
820
|
+
return await this.watchPublic(topics, messageHashes, params, true);
|
|
821
|
+
}
|
|
822
|
+
handleOrderBook(client, message) {
|
|
823
|
+
//
|
|
824
|
+
// initial snapshot is fetched with ccxt's fetchOrderBook
|
|
825
|
+
// the feed does not include a snapshot, just the deltas
|
|
826
|
+
//
|
|
827
|
+
// {
|
|
828
|
+
// "data": {
|
|
829
|
+
// "E": "1754903057555305",
|
|
830
|
+
// "T": "1754903057554352",
|
|
831
|
+
// "U": 1345937436,
|
|
832
|
+
// "a": [],
|
|
833
|
+
// "b": [],
|
|
834
|
+
// "e": "depth",
|
|
835
|
+
// "s": "ETH_USDC",
|
|
836
|
+
// "u": 1345937436
|
|
837
|
+
// },
|
|
838
|
+
// "stream": "depth.ETH_USDC"
|
|
839
|
+
// }
|
|
840
|
+
//
|
|
841
|
+
const data = this.safeDict(message, 'data', {});
|
|
842
|
+
const marketId = this.safeString(data, 's');
|
|
843
|
+
const symbol = this.safeSymbol(marketId);
|
|
844
|
+
if (!(symbol in this.orderbooks)) {
|
|
845
|
+
this.orderbooks[symbol] = this.orderBook();
|
|
846
|
+
}
|
|
847
|
+
const storedOrderBook = this.orderbooks[symbol];
|
|
848
|
+
const nonce = this.safeInteger(storedOrderBook, 'nonce');
|
|
849
|
+
const deltaNonce = this.safeInteger(data, 'u');
|
|
850
|
+
const messageHash = 'orderbook:' + symbol;
|
|
851
|
+
if (nonce === undefined) {
|
|
852
|
+
const cacheLength = storedOrderBook.cache.length;
|
|
853
|
+
// the rest API is very delayed
|
|
854
|
+
// usually it takes at least 9 deltas to resolve
|
|
855
|
+
const snapshotDelay = this.handleOption('watchOrderBook', 'snapshotDelay', 10);
|
|
856
|
+
if (cacheLength === snapshotDelay) {
|
|
857
|
+
this.spawn(this.loadOrderBook, client, messageHash, symbol, null, {});
|
|
858
|
+
}
|
|
859
|
+
storedOrderBook.cache.push(data);
|
|
860
|
+
return;
|
|
861
|
+
}
|
|
862
|
+
else if (nonce >= deltaNonce) {
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
this.handleDelta(storedOrderBook, data);
|
|
866
|
+
client.resolve(storedOrderBook, messageHash);
|
|
867
|
+
}
|
|
868
|
+
handleDelta(orderbook, delta) {
|
|
869
|
+
const timestamp = this.parseToInt(this.safeInteger(delta, 'T') / 1000);
|
|
870
|
+
orderbook['timestamp'] = timestamp;
|
|
871
|
+
orderbook['datetime'] = this.iso8601(timestamp);
|
|
872
|
+
orderbook['nonce'] = this.safeInteger(delta, 'u');
|
|
873
|
+
const bids = this.safeDict(delta, 'b', []);
|
|
874
|
+
const asks = this.safeDict(delta, 'a', []);
|
|
875
|
+
const storedBids = orderbook['bids'];
|
|
876
|
+
const storedAsks = orderbook['asks'];
|
|
877
|
+
this.handleBidAsks(storedBids, bids);
|
|
878
|
+
this.handleBidAsks(storedAsks, asks);
|
|
879
|
+
}
|
|
880
|
+
handleBidAsks(bookSide, bidAsks) {
|
|
881
|
+
for (let i = 0; i < bidAsks.length; i++) {
|
|
882
|
+
const bidAsk = this.parseBidAsk(bidAsks[i]);
|
|
883
|
+
bookSide.storeArray(bidAsk);
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
getCacheIndex(orderbook, cache) {
|
|
887
|
+
const firstDelta = this.safeDict(cache, 0);
|
|
888
|
+
const nonce = this.safeInteger(orderbook, 'nonce');
|
|
889
|
+
const firstDeltaStart = this.safeInteger(firstDelta, 'sequenceStart');
|
|
890
|
+
if (nonce < firstDeltaStart - 1) {
|
|
891
|
+
return -1;
|
|
892
|
+
}
|
|
893
|
+
for (let i = 0; i < cache.length; i++) {
|
|
894
|
+
const delta = cache[i];
|
|
895
|
+
const deltaStart = this.safeInteger(delta, 'sequenceStart');
|
|
896
|
+
const deltaEnd = this.safeInteger(delta, 'sequenceEnd');
|
|
897
|
+
if ((nonce >= deltaStart - 1) && (nonce < deltaEnd)) {
|
|
898
|
+
return i;
|
|
899
|
+
}
|
|
900
|
+
}
|
|
901
|
+
return cache.length;
|
|
902
|
+
}
|
|
903
|
+
/**
|
|
904
|
+
* @method
|
|
905
|
+
* @name backpack#watchOrders
|
|
906
|
+
* @description watches information on multiple orders made by the user
|
|
907
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Private/Order-update
|
|
908
|
+
* @param {string} [symbol] unified market symbol of the market orders were made in
|
|
909
|
+
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
910
|
+
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
911
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
912
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
913
|
+
*/
|
|
914
|
+
async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
915
|
+
await this.loadMarkets();
|
|
916
|
+
let market = undefined;
|
|
917
|
+
if (symbol !== undefined) {
|
|
918
|
+
market = this.market(symbol);
|
|
919
|
+
symbol = market['symbol'];
|
|
920
|
+
}
|
|
921
|
+
let topic = 'account.orderUpdate';
|
|
922
|
+
let messageHash = 'orders';
|
|
923
|
+
if (market !== undefined) {
|
|
924
|
+
topic = 'account.orderUpdate.' + market['id'];
|
|
925
|
+
messageHash = 'orders:' + symbol;
|
|
926
|
+
}
|
|
927
|
+
const orders = await this.watchPrivate([topic], [messageHash], params);
|
|
928
|
+
if (this.newUpdates) {
|
|
929
|
+
limit = orders.getLimit(symbol, limit);
|
|
930
|
+
}
|
|
931
|
+
return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
|
|
932
|
+
}
|
|
933
|
+
/**
|
|
934
|
+
* @method
|
|
935
|
+
* @name backpack#unWatchOrders
|
|
936
|
+
* @description unWatches information on multiple orders made by the user
|
|
937
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Private/Order-update
|
|
938
|
+
* @param {string} [symbol] unified market symbol of the market orders were made in
|
|
939
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
940
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
941
|
+
*/
|
|
942
|
+
async unWatchOrders(symbol = undefined, params = {}) {
|
|
943
|
+
await this.loadMarkets();
|
|
944
|
+
let market = undefined;
|
|
945
|
+
if (symbol !== undefined) {
|
|
946
|
+
market = this.market(symbol);
|
|
947
|
+
symbol = market['symbol'];
|
|
948
|
+
}
|
|
949
|
+
let topic = 'account.orderUpdate';
|
|
950
|
+
let messageHash = 'unsubscribe:orders';
|
|
951
|
+
if (market !== undefined) {
|
|
952
|
+
topic = 'account.orderUpdate.' + market['id'];
|
|
953
|
+
messageHash = 'unsubscribe:orders:' + symbol;
|
|
954
|
+
}
|
|
955
|
+
return await this.watchPrivate([topic], [messageHash], params, true);
|
|
956
|
+
}
|
|
957
|
+
handleOrder(client, message) {
|
|
958
|
+
//
|
|
959
|
+
// {
|
|
960
|
+
// data: {
|
|
961
|
+
// E: '1754939110175843',
|
|
962
|
+
// O: 'USER',
|
|
963
|
+
// Q: '4.30',
|
|
964
|
+
// S: 'Bid',
|
|
965
|
+
// T: '1754939110174703',
|
|
966
|
+
// V: 'RejectTaker',
|
|
967
|
+
// X: 'New',
|
|
968
|
+
// Z: '0',
|
|
969
|
+
// e: 'orderAccepted',
|
|
970
|
+
// f: 'GTC',
|
|
971
|
+
// i: '5406825793',
|
|
972
|
+
// o: 'MARKET',
|
|
973
|
+
// q: '0.0010',
|
|
974
|
+
// r: false,
|
|
975
|
+
// s: 'ETH_USDC',
|
|
976
|
+
// t: null,
|
|
977
|
+
// z: '0'
|
|
978
|
+
// },
|
|
979
|
+
// stream: 'account.orderUpdate.ETH_USDC'
|
|
980
|
+
// }
|
|
981
|
+
//
|
|
982
|
+
const messageHash = 'orders';
|
|
983
|
+
const data = this.safeDict(message, 'data', {});
|
|
984
|
+
const marketId = this.safeString(data, 's');
|
|
985
|
+
const market = this.safeMarket(marketId);
|
|
986
|
+
const symbol = market['symbol'];
|
|
987
|
+
const parsed = this.parseWsOrder(data, market);
|
|
988
|
+
let orders = this.orders;
|
|
989
|
+
if (orders === undefined) {
|
|
990
|
+
const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
|
|
991
|
+
orders = new ArrayCacheBySymbolById(limit);
|
|
992
|
+
this.orders = orders;
|
|
993
|
+
}
|
|
994
|
+
orders.append(parsed);
|
|
995
|
+
client.resolve(orders, messageHash);
|
|
996
|
+
const symbolSpecificMessageHash = messageHash + ':' + symbol;
|
|
997
|
+
client.resolve(orders, symbolSpecificMessageHash);
|
|
998
|
+
}
|
|
999
|
+
parseWsOrder(order, market = undefined) {
|
|
1000
|
+
//
|
|
1001
|
+
// {
|
|
1002
|
+
// E: '1754939110175879',
|
|
1003
|
+
// L: '4299.16',
|
|
1004
|
+
// N: 'ETH',
|
|
1005
|
+
// O: 'USER',
|
|
1006
|
+
// Q: '4.30',
|
|
1007
|
+
// S: 'Bid',
|
|
1008
|
+
// T: '1754939110174705',
|
|
1009
|
+
// V: 'RejectTaker',
|
|
1010
|
+
// X: 'Filled',
|
|
1011
|
+
// Z: '4.299160',
|
|
1012
|
+
// e: 'orderFill',
|
|
1013
|
+
// f: 'GTC',
|
|
1014
|
+
// i: '5406825793',
|
|
1015
|
+
// l: '0.0010',
|
|
1016
|
+
// m: false,
|
|
1017
|
+
// n: '0.000001',
|
|
1018
|
+
// o: 'MARKET',
|
|
1019
|
+
// q: '0.0010',
|
|
1020
|
+
// r: false,
|
|
1021
|
+
// s: 'ETH_USDC',
|
|
1022
|
+
// t: 2888471,
|
|
1023
|
+
// z: '0.0010'
|
|
1024
|
+
// },
|
|
1025
|
+
//
|
|
1026
|
+
const id = this.safeString(order, 'i');
|
|
1027
|
+
const clientOrderId = this.safeString(order, 'c');
|
|
1028
|
+
const microseconds = this.safeInteger(order, 'E');
|
|
1029
|
+
const timestamp = this.parseToInt(microseconds / 1000);
|
|
1030
|
+
const status = this.parseWsOrderStatus(this.safeString(order, 'X'), market);
|
|
1031
|
+
const marketId = this.safeString(order, 's');
|
|
1032
|
+
market = this.safeMarket(marketId, market);
|
|
1033
|
+
const symbol = market['symbol'];
|
|
1034
|
+
const type = this.safeStringLower(order, 'o');
|
|
1035
|
+
const timeInForce = this.safeString(order, 'f');
|
|
1036
|
+
const side = this.parseWsOrderSide(this.safeString(order, 'S'));
|
|
1037
|
+
const price = this.safeString(order, 'p');
|
|
1038
|
+
const triggerPrice = this.safeNumber(order, 'P');
|
|
1039
|
+
const amount = this.safeString(order, 'q');
|
|
1040
|
+
const cost = this.safeString(order, 'Z');
|
|
1041
|
+
const filled = this.safeString(order, 'l');
|
|
1042
|
+
let fee = undefined;
|
|
1043
|
+
const feeCurrency = this.safeString(order, 'N');
|
|
1044
|
+
if (feeCurrency !== undefined) {
|
|
1045
|
+
fee = {
|
|
1046
|
+
'currency': feeCurrency,
|
|
1047
|
+
'cost': undefined,
|
|
1048
|
+
};
|
|
1049
|
+
}
|
|
1050
|
+
return this.safeOrder({
|
|
1051
|
+
'id': id,
|
|
1052
|
+
'clientOrderId': clientOrderId,
|
|
1053
|
+
'timestamp': timestamp,
|
|
1054
|
+
'datetime': this.iso8601(timestamp),
|
|
1055
|
+
'lastTradeTimestamp': undefined,
|
|
1056
|
+
'status': status,
|
|
1057
|
+
'symbol': symbol,
|
|
1058
|
+
'type': type,
|
|
1059
|
+
'timeInForce': timeInForce,
|
|
1060
|
+
'side': side,
|
|
1061
|
+
'price': price,
|
|
1062
|
+
'stopPrice': undefined,
|
|
1063
|
+
'triggerPrice': triggerPrice,
|
|
1064
|
+
'average': undefined,
|
|
1065
|
+
'amount': amount,
|
|
1066
|
+
'cost': cost,
|
|
1067
|
+
'filled': filled,
|
|
1068
|
+
'remaining': undefined,
|
|
1069
|
+
'fee': fee,
|
|
1070
|
+
'trades': undefined,
|
|
1071
|
+
'info': order,
|
|
1072
|
+
}, market);
|
|
1073
|
+
}
|
|
1074
|
+
parseWsOrderStatus(status, market = undefined) {
|
|
1075
|
+
const statuses = {
|
|
1076
|
+
'New': 'open',
|
|
1077
|
+
'Filled': 'closed',
|
|
1078
|
+
'Cancelled': 'canceled',
|
|
1079
|
+
'Expired': 'canceled',
|
|
1080
|
+
'PartiallyFilled': 'open',
|
|
1081
|
+
'TriggerPending': 'open',
|
|
1082
|
+
'TriggerFailed': 'rejected',
|
|
1083
|
+
};
|
|
1084
|
+
return this.safeString(statuses, status, status);
|
|
1085
|
+
}
|
|
1086
|
+
parseWsOrderSide(side) {
|
|
1087
|
+
const sides = {
|
|
1088
|
+
'Bid': 'buy',
|
|
1089
|
+
'Ask': 'sell',
|
|
1090
|
+
};
|
|
1091
|
+
return this.safeString(sides, side, side);
|
|
1092
|
+
}
|
|
1093
|
+
/**
|
|
1094
|
+
* @method
|
|
1095
|
+
* @name backpack#watchPositions
|
|
1096
|
+
* @description watch all open positions
|
|
1097
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Private/Position-update
|
|
1098
|
+
* @param {string[]} [symbols] list of unified market symbols to watch positions for
|
|
1099
|
+
* @param {int} [since] the earliest time in ms to fetch positions for
|
|
1100
|
+
* @param {int} [limit] the maximum number of positions to retrieve
|
|
1101
|
+
* @param {object} params extra parameters specific to the exchange API endpoint
|
|
1102
|
+
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
|
|
1103
|
+
*/
|
|
1104
|
+
async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1105
|
+
await this.loadMarkets();
|
|
1106
|
+
symbols = this.marketSymbols(symbols);
|
|
1107
|
+
const messageHashes = [];
|
|
1108
|
+
const topics = [];
|
|
1109
|
+
if (symbols !== undefined) {
|
|
1110
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
1111
|
+
const symbol = symbols[i];
|
|
1112
|
+
messageHashes.push('positions' + ':' + symbol);
|
|
1113
|
+
topics.push('account.positionUpdate.' + this.marketId(symbol));
|
|
1114
|
+
}
|
|
1115
|
+
}
|
|
1116
|
+
else {
|
|
1117
|
+
messageHashes.push('positions');
|
|
1118
|
+
topics.push('account.positionUpdate');
|
|
1119
|
+
}
|
|
1120
|
+
const positions = await this.watchPrivate(topics, messageHashes, params);
|
|
1121
|
+
if (this.newUpdates) {
|
|
1122
|
+
return positions;
|
|
1123
|
+
}
|
|
1124
|
+
return this.filterBySymbolsSinceLimit(this.positions, symbols, since, limit, true);
|
|
1125
|
+
}
|
|
1126
|
+
/**
|
|
1127
|
+
* @method
|
|
1128
|
+
* @name backpack#unWatchPositions
|
|
1129
|
+
* @description unWatches from the stream channel
|
|
1130
|
+
* @see https://docs.backpack.exchange/#tag/Streams/Private/Position-update
|
|
1131
|
+
* @param {string[]} [symbols] list of unified market symbols to watch positions for
|
|
1132
|
+
* @param {object} params extra parameters specific to the exchange API endpoint
|
|
1133
|
+
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/en/latest/manual.html#position-structure}
|
|
1134
|
+
*/
|
|
1135
|
+
async unWatchPositions(symbols = undefined, params = {}) {
|
|
1136
|
+
await this.loadMarkets();
|
|
1137
|
+
symbols = this.marketSymbols(symbols);
|
|
1138
|
+
const messageHashes = [];
|
|
1139
|
+
const topics = [];
|
|
1140
|
+
if (symbols !== undefined) {
|
|
1141
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
1142
|
+
const symbol = symbols[i];
|
|
1143
|
+
messageHashes.push('unsubscribe:positions' + ':' + symbol);
|
|
1144
|
+
topics.push('account.positionUpdate.' + this.marketId(symbol));
|
|
1145
|
+
}
|
|
1146
|
+
}
|
|
1147
|
+
else {
|
|
1148
|
+
messageHashes.push('unsubscribe:positions');
|
|
1149
|
+
topics.push('account.positionUpdate');
|
|
1150
|
+
}
|
|
1151
|
+
return await this.watchPrivate(topics, messageHashes, params, true);
|
|
1152
|
+
}
|
|
1153
|
+
handlePositions(client, message) {
|
|
1154
|
+
//
|
|
1155
|
+
// {
|
|
1156
|
+
// data: {
|
|
1157
|
+
// B: '4236.36',
|
|
1158
|
+
// E: '1754943862040486',
|
|
1159
|
+
// M: '4235.88650933',
|
|
1160
|
+
// P: '-0.000473',
|
|
1161
|
+
// Q: '0.0010',
|
|
1162
|
+
// T: '1754943862040487',
|
|
1163
|
+
// b: '4238.479',
|
|
1164
|
+
// e: 'positionOpened',
|
|
1165
|
+
// f: '0.02',
|
|
1166
|
+
// i: 5411399049,
|
|
1167
|
+
// l: '0',
|
|
1168
|
+
// m: '0.0125',
|
|
1169
|
+
// n: '4.23588650933',
|
|
1170
|
+
// p: '0',
|
|
1171
|
+
// q: '0.0010',
|
|
1172
|
+
// s: 'ETH_USDC_PERP'
|
|
1173
|
+
// },
|
|
1174
|
+
// stream: 'account.positionUpdate'
|
|
1175
|
+
// }
|
|
1176
|
+
//
|
|
1177
|
+
const messageHash = 'positions';
|
|
1178
|
+
const data = this.safeDict(message, 'data', {});
|
|
1179
|
+
if (this.positions === undefined) {
|
|
1180
|
+
this.positions = new ArrayCacheBySymbolById();
|
|
1181
|
+
}
|
|
1182
|
+
const cache = this.positions;
|
|
1183
|
+
const parsedPosition = this.parseWsPosition(data);
|
|
1184
|
+
const microseconds = this.safeInteger(data, 'E');
|
|
1185
|
+
const timestamp = this.parseToInt(microseconds / 1000);
|
|
1186
|
+
parsedPosition['timestamp'] = timestamp;
|
|
1187
|
+
parsedPosition['datetime'] = this.iso8601(timestamp);
|
|
1188
|
+
cache.append(parsedPosition);
|
|
1189
|
+
const symbolSpecificMessageHash = messageHash + ':' + parsedPosition['symbol'];
|
|
1190
|
+
client.resolve([parsedPosition], messageHash);
|
|
1191
|
+
client.resolve([parsedPosition], symbolSpecificMessageHash);
|
|
1192
|
+
}
|
|
1193
|
+
parseWsPosition(position, market = undefined) {
|
|
1194
|
+
//
|
|
1195
|
+
// {
|
|
1196
|
+
// B: '4236.36',
|
|
1197
|
+
// E: '1754943862040486',
|
|
1198
|
+
// M: '4235.88650933',
|
|
1199
|
+
// P: '-0.000473',
|
|
1200
|
+
// Q: '0.0010',
|
|
1201
|
+
// T: '1754943862040487',
|
|
1202
|
+
// b: '4238.479',
|
|
1203
|
+
// e: 'positionOpened',
|
|
1204
|
+
// f: '0.02',
|
|
1205
|
+
// i: 5411399049,
|
|
1206
|
+
// l: '0',
|
|
1207
|
+
// m: '0.0125',
|
|
1208
|
+
// n: '4.23588650933',
|
|
1209
|
+
// p: '0',
|
|
1210
|
+
// q: '0.0010',
|
|
1211
|
+
// s: 'ETH_USDC_PERP'
|
|
1212
|
+
// }
|
|
1213
|
+
//
|
|
1214
|
+
const id = this.safeString(position, 'i');
|
|
1215
|
+
const marketId = this.safeString(position, 's');
|
|
1216
|
+
market = this.safeMarket(marketId, market);
|
|
1217
|
+
const symbol = market['symbol'];
|
|
1218
|
+
const notional = this.safeString(position, 'n');
|
|
1219
|
+
const liquidationPrice = this.safeString(position, 'l');
|
|
1220
|
+
const entryPrice = this.safeString(position, 'b');
|
|
1221
|
+
const realizedPnl = this.safeString(position, 'p');
|
|
1222
|
+
const unrealisedPnl = this.safeString(position, 'P');
|
|
1223
|
+
const contracts = this.safeString(position, 'Q');
|
|
1224
|
+
const markPrice = this.safeString(position, 'M');
|
|
1225
|
+
const netQuantity = this.safeNumber(position, 'q');
|
|
1226
|
+
let hedged = false;
|
|
1227
|
+
let side = 'long';
|
|
1228
|
+
if (netQuantity < 0) {
|
|
1229
|
+
side = 'short';
|
|
1230
|
+
}
|
|
1231
|
+
if (netQuantity === undefined) {
|
|
1232
|
+
hedged = undefined;
|
|
1233
|
+
side = undefined;
|
|
1234
|
+
}
|
|
1235
|
+
const microseconds = this.safeInteger(position, 'E');
|
|
1236
|
+
const timestamp = this.parseToInt(microseconds / 1000);
|
|
1237
|
+
const maintenanceMarginPercentage = this.safeNumber(position, 'm');
|
|
1238
|
+
const initialMarginPercentage = this.safeNumber(position, 'f');
|
|
1239
|
+
return this.safePosition({
|
|
1240
|
+
'info': position,
|
|
1241
|
+
'id': id,
|
|
1242
|
+
'symbol': symbol,
|
|
1243
|
+
'notional': notional,
|
|
1244
|
+
'marginMode': undefined,
|
|
1245
|
+
'liquidationPrice': liquidationPrice,
|
|
1246
|
+
'entryPrice': entryPrice,
|
|
1247
|
+
'realizedPnl': realizedPnl,
|
|
1248
|
+
'unrealizedPnl': unrealisedPnl,
|
|
1249
|
+
'percentage': undefined,
|
|
1250
|
+
'contracts': contracts,
|
|
1251
|
+
'contractSize': undefined,
|
|
1252
|
+
'markPrice': markPrice,
|
|
1253
|
+
'side': side,
|
|
1254
|
+
'hedged': hedged,
|
|
1255
|
+
'timestamp': timestamp,
|
|
1256
|
+
'datetime': this.iso8601(timestamp),
|
|
1257
|
+
'maintenanceMargin': undefined,
|
|
1258
|
+
'maintenanceMarginPercentage': maintenanceMarginPercentage,
|
|
1259
|
+
'collateral': undefined,
|
|
1260
|
+
'initialMargin': undefined,
|
|
1261
|
+
'initialMarginPercentage': initialMarginPercentage,
|
|
1262
|
+
'leverage': undefined,
|
|
1263
|
+
'marginRatio': undefined,
|
|
1264
|
+
});
|
|
1265
|
+
}
|
|
1266
|
+
handleMessage(client, message) {
|
|
1267
|
+
if (!this.handleErrorMessage(client, message)) {
|
|
1268
|
+
return;
|
|
1269
|
+
}
|
|
1270
|
+
const data = this.safeDict(message, 'data');
|
|
1271
|
+
const event = this.safeString(data, 'e');
|
|
1272
|
+
if (event === 'ticker') {
|
|
1273
|
+
this.handleTicker(client, message);
|
|
1274
|
+
}
|
|
1275
|
+
else if (event === 'bookTicker') {
|
|
1276
|
+
this.handleBidAsk(client, message);
|
|
1277
|
+
}
|
|
1278
|
+
else if (event === 'kline') {
|
|
1279
|
+
this.handleOHLCV(client, message);
|
|
1280
|
+
}
|
|
1281
|
+
else if (event === 'trade') {
|
|
1282
|
+
this.handleTrades(client, message);
|
|
1283
|
+
}
|
|
1284
|
+
else if (event === 'depth') {
|
|
1285
|
+
this.handleOrderBook(client, message);
|
|
1286
|
+
}
|
|
1287
|
+
else if (event === 'orderAccepted' || event === 'orderUpdate' || event === 'orderFill' || event === 'orderCancelled' || event === 'orderExpired' || event === 'orderModified' || event === 'triggerPlaced' || event === 'triggerFailed') {
|
|
1288
|
+
this.handleOrder(client, message);
|
|
1289
|
+
}
|
|
1290
|
+
else if (event === 'positionAdjusted' || event === 'positionOpened' || event === 'positionClosed' || event === 'positionUpdated') {
|
|
1291
|
+
this.handlePositions(client, message);
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
handleErrorMessage(client, message) {
|
|
1295
|
+
//
|
|
1296
|
+
// {
|
|
1297
|
+
// id: null,
|
|
1298
|
+
// error: {
|
|
1299
|
+
// code: 4006,
|
|
1300
|
+
// message: 'Invalid stream'
|
|
1301
|
+
// }
|
|
1302
|
+
// }
|
|
1303
|
+
//
|
|
1304
|
+
const error = this.safeDict(message, 'error', {});
|
|
1305
|
+
const code = this.safeInteger(error, 'code');
|
|
1306
|
+
try {
|
|
1307
|
+
if (code !== undefined) {
|
|
1308
|
+
const msg = this.safeString(error, 'message');
|
|
1309
|
+
throw new ExchangeError(this.id + ' ' + msg);
|
|
1310
|
+
}
|
|
1311
|
+
return true;
|
|
1312
|
+
}
|
|
1313
|
+
catch (e) {
|
|
1314
|
+
client.reject(e);
|
|
1315
|
+
}
|
|
1316
|
+
return true;
|
|
1317
|
+
}
|
|
1318
|
+
}
|