ccxt-ir 4.10.0 → 4.11.0
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 +4 -4
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +4 -1
- package/dist/cjs/src/abstract/bidarz.js +11 -0
- package/dist/cjs/src/bidarz.js +337 -0
- package/dist/cjs/src/bit24.js +4 -3
- package/js/ccxt.d.ts +5 -2
- package/js/ccxt.js +4 -2
- package/js/src/abstract/bidarz.d.ts +9 -0
- package/js/src/abstract/bidarz.js +11 -0
- package/js/src/bidarz.d.ts +22 -0
- package/js/src/bidarz.js +336 -0
- package/js/src/bit24.js +4 -3
- package/js/src/src/abantether.d.ts +21 -0
- package/js/src/src/abantether.js +353 -0
- package/js/src/src/abstract/abantether.d.ts +8 -0
- package/js/src/src/abstract/abantether.js +11 -0
- package/js/src/src/abstract/afratether.d.ts +9 -0
- package/js/src/src/abstract/afratether.js +11 -0
- package/js/src/src/abstract/alpaca.d.ts +77 -0
- package/js/src/src/abstract/alpaca.js +11 -0
- package/js/src/src/abstract/apex.d.ts +34 -0
- package/js/src/src/abstract/apex.js +11 -0
- package/js/src/src/abstract/arzinja.d.ts +8 -0
- package/js/src/src/abstract/arzinja.js +11 -0
- package/js/src/src/abstract/arzplus.d.ts +11 -0
- package/js/src/src/abstract/arzplus.js +11 -0
- package/js/src/src/abstract/ascendex.d.ts +80 -0
- package/js/src/src/abstract/ascendex.js +11 -0
- package/js/src/src/abstract/asretether.d.ts +8 -0
- package/js/src/src/abstract/asretether.js +11 -0
- package/js/src/src/abstract/bidarz.d.ts +9 -0
- package/js/src/src/abstract/bidarz.js +11 -0
- package/js/src/src/abstract/bigone.d.ts +48 -0
- package/js/src/src/abstract/bigone.js +11 -0
- package/js/src/src/abstract/binance.d.ts +773 -0
- package/js/src/src/abstract/binance.js +11 -0
- package/js/src/src/abstract/bingx.d.ts +165 -0
- package/js/src/src/abstract/bingx.js +11 -0
- package/js/src/src/abstract/bit24.d.ts +9 -0
- package/js/src/src/abstract/bit24.js +11 -0
- package/js/src/src/abstract/bit2c.d.ts +30 -0
- package/js/src/src/abstract/bit2c.js +11 -0
- package/js/src/src/abstract/bitbank.d.ts +35 -0
- package/js/src/src/abstract/bitbank.js +11 -0
- package/js/src/src/abstract/bitbarg.d.ts +8 -0
- package/js/src/src/abstract/bitbarg.js +11 -0
- package/js/src/src/abstract/bitbns.d.ts +43 -0
- package/js/src/src/abstract/bitbns.js +11 -0
- package/js/src/src/abstract/bitfinex.d.ts +143 -0
- package/js/src/src/abstract/bitfinex.js +11 -0
- package/js/src/src/abstract/bitflyer.d.ts +42 -0
- package/js/src/src/abstract/bitflyer.js +11 -0
- package/js/src/src/abstract/bitget.d.ts +578 -0
- package/js/src/src/abstract/bitget.js +11 -0
- package/js/src/src/abstract/bithumb.d.ts +35 -0
- package/js/src/src/abstract/bithumb.js +11 -0
- package/js/src/src/abstract/bitimen.d.ts +10 -0
- package/js/src/src/abstract/bitimen.js +11 -0
- package/js/src/src/abstract/bitir.d.ts +10 -0
- package/js/src/src/abstract/bitir.js +11 -0
- package/js/src/src/abstract/bitmart.d.ts +120 -0
- package/js/src/src/abstract/bitmart.js +11 -0
- package/js/src/src/abstract/bitmex.d.ts +100 -0
- package/js/src/src/abstract/bitmex.js +11 -0
- package/js/src/src/abstract/bitopro.d.ts +33 -0
- package/js/src/src/abstract/bitopro.js +11 -0
- package/js/src/src/abstract/bitpin.d.ts +11 -0
- package/js/src/src/abstract/bitpin.js +11 -0
- package/js/src/src/abstract/bitrue.d.ts +75 -0
- package/js/src/src/abstract/bitrue.js +11 -0
- package/js/src/src/abstract/bitso.d.ts +46 -0
- package/js/src/src/abstract/bitso.js +11 -0
- package/js/src/src/abstract/bitstamp.d.ts +262 -0
- package/js/src/src/abstract/bitstamp.js +11 -0
- package/js/src/src/abstract/bitteam.d.ts +32 -0
- package/js/src/src/abstract/bitteam.js +11 -0
- package/js/src/src/abstract/bittrade.d.ts +117 -0
- package/js/src/src/abstract/bittrade.js +11 -0
- package/js/src/src/abstract/bitunix.d.ts +9 -0
- package/js/src/src/abstract/bitunix.js +11 -0
- package/js/src/src/abstract/bitvavo.d.ts +30 -0
- package/js/src/src/abstract/bitvavo.js +11 -0
- package/js/src/src/abstract/blockchaincom.d.ts +31 -0
- package/js/src/src/abstract/blockchaincom.js +11 -0
- package/js/src/src/abstract/blofin.d.ts +70 -0
- package/js/src/src/abstract/blofin.js +11 -0
- package/js/src/src/abstract/btcalpha.d.ts +21 -0
- package/js/src/src/abstract/btcalpha.js +11 -0
- package/js/src/src/abstract/btcbox.d.ts +18 -0
- package/js/src/src/abstract/btcbox.js +11 -0
- package/js/src/src/abstract/btcmarkets.d.ts +42 -0
- package/js/src/src/abstract/btcmarkets.js +11 -0
- package/js/src/src/abstract/btcturk.d.ts +23 -0
- package/js/src/src/abstract/btcturk.js +11 -0
- package/js/src/src/abstract/bybit.d.ts +316 -0
- package/js/src/src/abstract/bybit.js +11 -0
- package/js/src/src/abstract/bydfi.d.ts +11 -0
- package/js/src/src/abstract/bydfi.js +11 -0
- package/js/src/src/abstract/cafearz.d.ts +8 -0
- package/js/src/src/abstract/cafearz.js +11 -0
- package/js/src/src/abstract/cex.d.ts +35 -0
- package/js/src/src/abstract/cex.js +11 -0
- package/js/src/src/abstract/coinbase.d.ts +97 -0
- package/js/src/src/abstract/coinbase.js +11 -0
- package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
- package/js/src/src/abstract/coinbaseexchange.js +11 -0
- package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
- package/js/src/src/abstract/coinbaseinternational.js +11 -0
- package/js/src/src/abstract/coincatch.d.ts +97 -0
- package/js/src/src/abstract/coincatch.js +11 -0
- package/js/src/src/abstract/coincheck.d.ts +36 -0
- package/js/src/src/abstract/coincheck.js +11 -0
- package/js/src/src/abstract/coinex.d.ts +240 -0
- package/js/src/src/abstract/coinex.js +11 -0
- package/js/src/src/abstract/coinmate.d.ts +65 -0
- package/js/src/src/abstract/coinmate.js +11 -0
- package/js/src/src/abstract/coinmetro.d.ts +37 -0
- package/js/src/src/abstract/coinmetro.js +11 -0
- package/js/src/src/abstract/coinone.d.ts +70 -0
- package/js/src/src/abstract/coinone.js +11 -0
- package/js/src/src/abstract/coinsph.d.ts +57 -0
- package/js/src/src/abstract/coinsph.js +11 -0
- package/js/src/src/abstract/coinspot.d.ts +31 -0
- package/js/src/src/abstract/coinspot.js +11 -0
- package/js/src/src/abstract/cryptocom.d.ts +126 -0
- package/js/src/src/abstract/cryptocom.js +11 -0
- package/js/src/src/abstract/cryptomus.d.ts +23 -0
- package/js/src/src/abstract/cryptomus.js +11 -0
- package/js/src/src/abstract/defx.d.ts +72 -0
- package/js/src/src/abstract/defx.js +11 -0
- package/js/src/src/abstract/delta.d.ts +53 -0
- package/js/src/src/abstract/delta.js +11 -0
- package/js/src/src/abstract/deribit.d.ts +129 -0
- package/js/src/src/abstract/deribit.js +11 -0
- package/js/src/src/abstract/derive.d.ts +120 -0
- package/js/src/src/abstract/derive.js +11 -0
- package/js/src/src/abstract/digifinex.d.ts +95 -0
- package/js/src/src/abstract/digifinex.js +11 -0
- package/js/src/src/abstract/ellipx.d.ts +28 -0
- package/js/src/src/abstract/ellipx.js +11 -0
- package/js/src/src/abstract/eterex.d.ts +8 -0
- package/js/src/src/abstract/eterex.js +11 -0
- package/js/src/src/abstract/excoino.d.ts +10 -0
- package/js/src/src/abstract/excoino.js +11 -0
- package/js/src/src/abstract/exir.d.ts +11 -0
- package/js/src/src/abstract/exir.js +11 -0
- package/js/src/src/abstract/exmo.d.ts +58 -0
- package/js/src/src/abstract/exmo.js +11 -0
- package/js/src/src/abstract/exnovin.d.ts +9 -0
- package/js/src/src/abstract/exnovin.js +11 -0
- package/js/src/src/abstract/farhadexchange.d.ts +8 -0
- package/js/src/src/abstract/farhadexchange.js +11 -0
- package/js/src/src/abstract/foxbit.d.ts +29 -0
- package/js/src/src/abstract/foxbit.js +11 -0
- package/js/src/src/abstract/gate.d.ts +287 -0
- package/js/src/src/abstract/gate.js +11 -0
- package/js/src/src/abstract/gemini.d.ts +62 -0
- package/js/src/src/abstract/gemini.js +11 -0
- package/js/src/src/abstract/hamtapay.d.ts +9 -0
- package/js/src/src/abstract/hamtapay.js +11 -0
- package/js/src/src/abstract/hashkey.d.ts +70 -0
- package/js/src/src/abstract/hashkey.js +11 -0
- package/js/src/src/abstract/hibachi.d.ts +29 -0
- package/js/src/src/abstract/hibachi.js +11 -0
- package/js/src/src/abstract/hitbtc.d.ts +118 -0
- package/js/src/src/abstract/hitbtc.js +11 -0
- package/js/src/src/abstract/hitobit.d.ts +11 -0
- package/js/src/src/abstract/hitobit.js +11 -0
- package/js/src/src/abstract/hollaex.d.ts +36 -0
- package/js/src/src/abstract/hollaex.js +11 -0
- package/js/src/src/abstract/htx.d.ts +551 -0
- package/js/src/src/abstract/htx.js +11 -0
- package/js/src/src/abstract/hyperliquid.d.ts +9 -0
- package/js/src/src/abstract/hyperliquid.js +11 -0
- package/js/src/src/abstract/independentreserve.d.ts +46 -0
- package/js/src/src/abstract/independentreserve.js +11 -0
- package/js/src/src/abstract/indodax.d.ts +29 -0
- package/js/src/src/abstract/indodax.js +11 -0
- package/js/src/src/abstract/iranexchange.d.ts +9 -0
- package/js/src/src/abstract/iranexchange.js +11 -0
- package/js/src/src/abstract/jibitex.d.ts +10 -0
- package/js/src/src/abstract/jibitex.js +11 -0
- package/js/src/src/abstract/kcex.d.ts +10 -0
- package/js/src/src/abstract/kcex.js +11 -0
- package/js/src/src/abstract/kifpoolme.d.ts +9 -0
- package/js/src/src/abstract/kifpoolme.js +11 -0
- package/js/src/src/abstract/kraken.d.ts +61 -0
- package/js/src/src/abstract/kraken.js +11 -0
- package/js/src/src/abstract/krakenfutures.d.ts +45 -0
- package/js/src/src/abstract/krakenfutures.js +11 -0
- package/js/src/src/abstract/kucoin.d.ts +227 -0
- package/js/src/src/abstract/kucoin.js +11 -0
- package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
- package/js/src/src/abstract/kucoinfutures.js +11 -0
- package/js/src/src/abstract/latoken.d.ts +59 -0
- package/js/src/src/abstract/latoken.js +11 -0
- package/js/src/src/abstract/lbank.d.ts +65 -0
- package/js/src/src/abstract/lbank.js +11 -0
- package/js/src/src/abstract/luno.d.ts +41 -0
- package/js/src/src/abstract/luno.js +11 -0
- package/js/src/src/abstract/mazdax.d.ts +11 -0
- package/js/src/src/abstract/mazdax.js +11 -0
- package/js/src/src/abstract/mercado.d.ts +28 -0
- package/js/src/src/abstract/mercado.js +11 -0
- package/js/src/src/abstract/mexc.d.ts +183 -0
- package/js/src/src/abstract/mexc.js +11 -0
- package/js/src/src/abstract/modetrade.d.ts +122 -0
- package/js/src/src/abstract/modetrade.js +11 -0
- package/js/src/src/abstract/ndax.d.ts +100 -0
- package/js/src/src/abstract/ndax.js +11 -0
- package/js/src/src/abstract/nobitex.d.ts +10 -0
- package/js/src/src/abstract/nobitex.js +11 -0
- package/js/src/src/abstract/novadax.d.ts +32 -0
- package/js/src/src/abstract/novadax.js +11 -0
- package/js/src/src/abstract/oceanex.d.ts +30 -0
- package/js/src/src/abstract/oceanex.js +11 -0
- package/js/src/src/abstract/okcoin.d.ts +77 -0
- package/js/src/src/abstract/okcoin.js +11 -0
- package/js/src/src/abstract/okexchange.d.ts +11 -0
- package/js/src/src/abstract/okexchange.js +11 -0
- package/js/src/src/abstract/okx.d.ts +352 -0
- package/js/src/src/abstract/okx.js +11 -0
- package/js/src/src/abstract/ompfinex.d.ts +10 -0
- package/js/src/src/abstract/ompfinex.js +11 -0
- package/js/src/src/abstract/onetrading.d.ts +26 -0
- package/js/src/src/abstract/onetrading.js +11 -0
- package/js/src/src/abstract/oxfun.d.ts +37 -0
- package/js/src/src/abstract/oxfun.js +11 -0
- package/js/src/src/abstract/p2b.d.ts +25 -0
- package/js/src/src/abstract/p2b.js +11 -0
- package/js/src/src/abstract/paradex.d.ts +66 -0
- package/js/src/src/abstract/paradex.js +11 -0
- package/js/src/src/abstract/paymium.d.ts +31 -0
- package/js/src/src/abstract/paymium.js +11 -0
- package/js/src/src/abstract/phemex.d.ts +120 -0
- package/js/src/src/abstract/phemex.js +11 -0
- package/js/src/src/abstract/pingi.d.ts +9 -0
- package/js/src/src/abstract/pingi.js +11 -0
- package/js/src/src/abstract/poloniex.d.ts +108 -0
- package/js/src/src/abstract/poloniex.js +11 -0
- package/js/src/src/abstract/pooleno.d.ts +8 -0
- package/js/src/src/abstract/pooleno.js +11 -0
- package/js/src/src/abstract/probit.d.ts +26 -0
- package/js/src/src/abstract/probit.js +11 -0
- package/js/src/src/abstract/raastin.d.ts +11 -0
- package/js/src/src/abstract/raastin.js +11 -0
- package/js/src/src/abstract/ramzinex.d.ts +10 -0
- package/js/src/src/abstract/ramzinex.js +11 -0
- package/js/src/src/abstract/sarmayex.d.ts +8 -0
- package/js/src/src/abstract/sarmayex.js +11 -0
- package/js/src/src/abstract/sarrafex.d.ts +10 -0
- package/js/src/src/abstract/sarrafex.js +11 -0
- package/js/src/src/abstract/tabdeal.d.ts +10 -0
- package/js/src/src/abstract/tabdeal.js +11 -0
- package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
- package/js/src/src/abstract/tehran_exchange.js +11 -0
- package/js/src/src/abstract/tetherland.d.ts +8 -0
- package/js/src/src/abstract/tetherland.js +11 -0
- package/js/src/src/abstract/timex.d.ts +65 -0
- package/js/src/src/abstract/timex.js +11 -0
- package/js/src/src/abstract/tokocrypto.d.ts +40 -0
- package/js/src/src/abstract/tokocrypto.js +11 -0
- package/js/src/src/abstract/toobit.d.ts +10 -0
- package/js/src/src/abstract/toobit.js +11 -0
- package/js/src/src/abstract/tradeogre.d.ts +21 -0
- package/js/src/src/abstract/tradeogre.js +11 -0
- package/js/src/src/abstract/twox.d.ts +8 -0
- package/js/src/src/abstract/twox.js +11 -0
- package/js/src/src/abstract/ubitex.d.ts +10 -0
- package/js/src/src/abstract/ubitex.js +11 -0
- package/js/src/src/abstract/upbit.d.ts +58 -0
- package/js/src/src/abstract/upbit.js +11 -0
- package/js/src/src/abstract/vertex.d.ts +22 -0
- package/js/src/src/abstract/vertex.js +11 -0
- package/js/src/src/abstract/wallex.d.ts +11 -0
- package/js/src/src/abstract/wallex.js +11 -0
- package/js/src/src/abstract/wavesexchange.d.ts +157 -0
- package/js/src/src/abstract/wavesexchange.js +11 -0
- package/js/src/src/abstract/whitebit.d.ts +117 -0
- package/js/src/src/abstract/whitebit.js +11 -0
- package/js/src/src/abstract/woo.d.ts +144 -0
- package/js/src/src/abstract/woo.js +11 -0
- package/js/src/src/abstract/woofipro.d.ts +122 -0
- package/js/src/src/abstract/woofipro.js +11 -0
- package/js/src/src/abstract/xt.d.ts +160 -0
- package/js/src/src/abstract/xt.js +11 -0
- package/js/src/src/abstract/yobit.d.ts +19 -0
- package/js/src/src/abstract/yobit.js +11 -0
- package/js/src/src/abstract/zaif.d.ts +41 -0
- package/js/src/src/abstract/zaif.js +11 -0
- package/js/src/src/abstract/zonda.d.ts +56 -0
- package/js/src/src/abstract/zonda.js +11 -0
- package/js/src/src/afratether.d.ts +21 -0
- package/js/src/src/afratether.js +356 -0
- package/js/src/src/alpaca.d.ts +332 -0
- package/js/src/src/alpaca.js +1908 -0
- package/js/src/src/apex.d.ts +333 -0
- package/js/src/src/apex.js +1942 -0
- package/js/src/src/arzinja.d.ts +21 -0
- package/js/src/src/arzinja.js +298 -0
- package/js/src/src/arzplus.d.ts +26 -0
- package/js/src/src/arzplus.js +581 -0
- package/js/src/src/ascendex.d.ts +424 -0
- package/js/src/src/ascendex.js +3699 -0
- package/js/src/src/asretether.d.ts +21 -0
- package/js/src/src/asretether.js +324 -0
- package/js/src/src/base/Exchange.d.ts +926 -0
- package/js/src/src/base/Exchange.js +7399 -0
- package/js/src/src/base/Precise.d.ts +42 -0
- package/js/src/src/base/Precise.js +275 -0
- package/js/src/src/base/errors.d.ts +168 -0
- package/js/src/src/base/errors.js +255 -0
- package/js/src/src/base/functions/crypto.d.ts +16 -0
- package/js/src/src/base/functions/crypto.js +131 -0
- package/js/src/src/base/functions/encode.d.ts +4 -0
- package/js/src/src/base/functions/encode.js +32 -0
- package/js/src/src/base/functions/generic.d.ts +29 -0
- package/js/src/src/base/functions/generic.js +203 -0
- package/js/src/src/base/functions/misc.d.ts +9 -0
- package/js/src/src/base/functions/misc.js +101 -0
- package/js/src/src/base/functions/number.d.ts +27 -0
- package/js/src/src/base/functions/number.js +313 -0
- package/js/src/src/base/functions/platform.d.ts +7 -0
- package/js/src/src/base/functions/platform.js +27 -0
- package/js/src/src/base/functions/rsa.d.ts +5 -0
- package/js/src/src/base/functions/rsa.js +49 -0
- package/js/src/src/base/functions/string.d.ts +7 -0
- package/js/src/src/base/functions/string.js +44 -0
- package/js/src/src/base/functions/throttle.d.ts +6 -0
- package/js/src/src/base/functions/throttle.js +67 -0
- package/js/src/src/base/functions/time.d.ts +21 -0
- package/js/src/src/base/functions/time.js +171 -0
- package/js/src/src/base/functions/totp.d.ts +3 -0
- package/js/src/src/base/functions/totp.js +25 -0
- package/js/src/src/base/functions/type.d.ts +37 -0
- package/js/src/src/base/functions/type.js +179 -0
- package/js/src/src/base/functions.d.ts +10 -0
- package/js/src/src/base/functions.js +18 -0
- package/js/src/src/base/types.d.ts +586 -0
- package/js/src/src/base/types.js +7 -0
- package/js/src/src/base/ws/Cache.d.ts +27 -0
- package/js/src/src/base/ws/Cache.js +260 -0
- package/js/src/src/base/ws/Client.d.ts +53 -0
- package/js/src/src/base/ws/Client.js +307 -0
- package/js/src/src/base/ws/Future.d.ts +8 -0
- package/js/src/src/base/ws/Future.js +35 -0
- package/js/src/src/base/ws/OrderBook.d.ts +25 -0
- package/js/src/src/base/ws/OrderBook.js +130 -0
- package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
- package/js/src/src/base/ws/OrderBookSide.js +286 -0
- package/js/src/src/base/ws/WsClient.d.ts +11 -0
- package/js/src/src/base/ws/WsClient.js +69 -0
- package/js/src/src/bequant.d.ts +4 -0
- package/js/src/src/bequant.js +35 -0
- package/js/src/src/bidarz.d.ts +16 -0
- package/js/src/src/bidarz.js +327 -0
- package/js/src/src/bigone.d.ts +296 -0
- package/js/src/src/bigone.js +2340 -0
- package/js/src/src/binance.d.ts +1667 -0
- package/js/src/src/binance.js +14400 -0
- package/js/src/src/binancecoinm.d.ts +6 -0
- package/js/src/src/binancecoinm.js +51 -0
- package/js/src/src/binanceus.d.ts +4 -0
- package/js/src/src/binanceus.js +225 -0
- package/js/src/src/binanceusdm.d.ts +6 -0
- package/js/src/src/binanceusdm.js +63 -0
- package/js/src/src/bingx.d.ts +778 -0
- package/js/src/src/bingx.js +6705 -0
- package/js/src/src/bit24.d.ts +24 -0
- package/js/src/src/bit24.js +520 -0
- package/js/src/src/bit2c.d.ts +146 -0
- package/js/src/src/bit2c.js +1029 -0
- package/js/src/src/bitbank.d.ts +181 -0
- package/js/src/src/bitbank.js +1146 -0
- package/js/src/src/bitbarg.d.ts +21 -0
- package/js/src/src/bitbarg.js +312 -0
- package/js/src/src/bitbns.d.ts +184 -0
- package/js/src/src/bitbns.js +1288 -0
- package/js/src/src/bitfinex.d.ts +516 -0
- package/js/src/src/bitfinex.js +3951 -0
- package/js/src/src/bitflyer.d.ts +229 -0
- package/js/src/src/bitflyer.js +1209 -0
- package/js/src/src/bitget.d.ts +1109 -0
- package/js/src/src/bitget.js +11033 -0
- package/js/src/src/bithumb.d.ts +165 -0
- package/js/src/src/bithumb.js +1257 -0
- package/js/src/src/bitimen.d.ts +23 -0
- package/js/src/src/bitimen.js +424 -0
- package/js/src/src/bitir.d.ts +23 -0
- package/js/src/src/bitir.js +521 -0
- package/js/src/src/bitmart.d.ts +736 -0
- package/js/src/src/bitmart.js +5639 -0
- package/js/src/src/bitmex.d.ts +395 -0
- package/js/src/src/bitmex.js +3088 -0
- package/js/src/src/bitopro.d.ts +295 -0
- package/js/src/src/bitopro.js +1892 -0
- package/js/src/src/bitpin.d.ts +23 -0
- package/js/src/src/bitpin.js +487 -0
- package/js/src/src/bitrue.d.ts +384 -0
- package/js/src/src/bitrue.js +3382 -0
- package/js/src/src/bitso.d.ts +270 -0
- package/js/src/src/bitso.js +1881 -0
- package/js/src/src/bitstamp.d.ts +355 -0
- package/js/src/src/bitstamp.js +2445 -0
- package/js/src/src/bitteam.d.ts +229 -0
- package/js/src/src/bitteam.js +2420 -0
- package/js/src/src/bittrade.d.ts +298 -0
- package/js/src/src/bittrade.js +2050 -0
- package/js/src/src/bitunix.d.ts +21 -0
- package/js/src/src/bitunix.js +326 -0
- package/js/src/src/bitvavo.d.ts +311 -0
- package/js/src/src/bitvavo.js +2204 -0
- package/js/src/src/blockchaincom.d.ts +256 -0
- package/js/src/src/blockchaincom.js +1259 -0
- package/js/src/src/blofin.d.ts +439 -0
- package/js/src/src/blofin.js +2576 -0
- package/js/src/src/btcalpha.d.ts +209 -0
- package/js/src/src/btcalpha.js +1056 -0
- package/js/src/src/btcbox.d.ts +144 -0
- package/js/src/src/btcbox.js +834 -0
- package/js/src/src/btcmarkets.d.ts +253 -0
- package/js/src/src/btcmarkets.js +1418 -0
- package/js/src/src/btcturk.d.ts +161 -0
- package/js/src/src/btcturk.js +1058 -0
- package/js/src/src/bybit.d.ts +1097 -0
- package/js/src/src/bybit.js +9382 -0
- package/js/src/src/bydfi.d.ts +23 -0
- package/js/src/src/bydfi.js +434 -0
- package/js/src/src/cafearz.d.ts +21 -0
- package/js/src/src/cafearz.js +346 -0
- package/js/src/src/cex.d.ts +286 -0
- package/js/src/src/cex.js +1799 -0
- package/js/src/src/coinbase.d.ts +623 -0
- package/js/src/src/coinbase.js +5220 -0
- package/js/src/src/coinbaseadvanced.d.ts +4 -0
- package/js/src/src/coinbaseadvanced.js +18 -0
- package/js/src/src/coinbaseexchange.d.ts +334 -0
- package/js/src/src/coinbaseexchange.js +2127 -0
- package/js/src/src/coinbaseinternational.d.ts +443 -0
- package/js/src/src/coinbaseinternational.js +2336 -0
- package/js/src/src/coincatch.d.ts +786 -0
- package/js/src/src/coincatch.js +5492 -0
- package/js/src/src/coincheck.d.ts +147 -0
- package/js/src/src/coincheck.js +962 -0
- package/js/src/src/coinex.d.ts +719 -0
- package/js/src/src/coinex.js +6166 -0
- package/js/src/src/coinmate.d.ts +202 -0
- package/js/src/src/coinmate.js +1215 -0
- package/js/src/src/coinmetro.d.ts +244 -0
- package/js/src/src/coinmetro.js +2024 -0
- package/js/src/src/coinone.d.ts +158 -0
- package/js/src/src/coinone.js +1278 -0
- package/js/src/src/coinsph.d.ts +310 -0
- package/js/src/src/coinsph.js +2203 -0
- package/js/src/src/coinspot.d.ts +108 -0
- package/js/src/src/coinspot.js +653 -0
- package/js/src/src/cryptocom.d.ts +463 -0
- package/js/src/src/cryptocom.js +3549 -0
- package/js/src/src/cryptomus.d.ts +158 -0
- package/js/src/src/cryptomus.js +1169 -0
- package/js/src/src/defx.d.ts +348 -0
- package/js/src/src/defx.js +2139 -0
- package/js/src/src/delta.d.ts +407 -0
- package/js/src/src/delta.js +3654 -0
- package/js/src/src/deribit.d.ts +516 -0
- package/js/src/src/deribit.js +3790 -0
- package/js/src/src/derive.d.ts +324 -0
- package/js/src/src/derive.js +2655 -0
- package/js/src/src/digifinex.d.ts +544 -0
- package/js/src/src/digifinex.js +4453 -0
- package/js/src/src/ellipx.d.ts +237 -0
- package/js/src/src/ellipx.js +2071 -0
- package/js/src/src/eterex.d.ts +21 -0
- package/js/src/src/eterex.js +299 -0
- package/js/src/src/excoino.d.ts +23 -0
- package/js/src/src/excoino.js +426 -0
- package/js/src/src/exir.d.ts +23 -0
- package/js/src/src/exir.js +403 -0
- package/js/src/src/exmo.d.ts +426 -0
- package/js/src/src/exmo.js +2825 -0
- package/js/src/src/exnovin.d.ts +22 -0
- package/js/src/src/exnovin.js +378 -0
- package/js/src/src/farhadexchange.d.ts +21 -0
- package/js/src/src/farhadexchange.js +280 -0
- package/js/src/src/fmfwio.d.ts +4 -0
- package/js/src/src/fmfwio.js +35 -0
- package/js/src/src/foxbit.d.ts +352 -0
- package/js/src/src/foxbit.js +2016 -0
- package/js/src/src/gate.d.ts +1071 -0
- package/js/src/src/gate.js +8282 -0
- package/js/src/src/gateio.d.ts +4 -0
- package/js/src/src/gateio.js +17 -0
- package/js/src/src/gemini.d.ts +257 -0
- package/js/src/src/gemini.js +2006 -0
- package/js/src/src/hamtapay.d.ts +21 -0
- package/js/src/src/hamtapay.js +303 -0
- package/js/src/src/hashkey.d.ts +628 -0
- package/js/src/src/hashkey.js +4363 -0
- package/js/src/src/hibachi.d.ts +346 -0
- package/js/src/src/hibachi.js +2137 -0
- package/js/src/src/hitbtc.d.ts +558 -0
- package/js/src/src/hitbtc.js +3847 -0
- package/js/src/src/hitobit.d.ts +23 -0
- package/js/src/src/hitobit.js +412 -0
- package/js/src/src/hollaex.d.ts +305 -0
- package/js/src/src/hollaex.js +2046 -0
- package/js/src/src/htx.d.ts +961 -0
- package/js/src/src/htx.js +9668 -0
- package/js/src/src/huobi.d.ts +4 -0
- package/js/src/src/huobi.js +17 -0
- package/js/src/src/hyperliquid.d.ts +651 -0
- package/js/src/src/hyperliquid.js +3937 -0
- package/js/src/src/independentreserve.d.ts +169 -0
- package/js/src/src/independentreserve.js +1115 -0
- package/js/src/src/indodax.d.ts +217 -0
- package/js/src/src/indodax.js +1454 -0
- package/js/src/src/iranexchange.d.ts +21 -0
- package/js/src/src/iranexchange.js +399 -0
- package/js/src/src/jibitex.d.ts +23 -0
- package/js/src/src/jibitex.js +416 -0
- package/js/src/src/kcex.d.ts +21 -0
- package/js/src/src/kcex.js +335 -0
- package/js/src/src/kifpoolme.d.ts +23 -0
- package/js/src/src/kifpoolme.js +410 -0
- package/js/src/src/kraken.d.ts +484 -0
- package/js/src/src/kraken.js +3518 -0
- package/js/src/src/krakenfutures.d.ts +362 -0
- package/js/src/src/krakenfutures.js +2885 -0
- package/js/src/src/kucoin.d.ts +759 -0
- package/js/src/src/kucoin.js +5153 -0
- package/js/src/src/kucoinfutures.d.ts +521 -0
- package/js/src/src/kucoinfutures.js +3381 -0
- package/js/src/src/latoken.d.ts +274 -0
- package/js/src/src/latoken.js +1824 -0
- package/js/src/src/lbank.d.ts +350 -0
- package/js/src/src/lbank.js +3146 -0
- package/js/src/src/luno.d.ts +252 -0
- package/js/src/src/luno.js +1479 -0
- package/js/src/src/mazdax.d.ts +23 -0
- package/js/src/src/mazdax.js +534 -0
- package/js/src/src/mercado.d.ts +160 -0
- package/js/src/src/mercado.js +1011 -0
- package/js/src/src/mexc.d.ts +768 -0
- package/js/src/src/mexc.js +6102 -0
- package/js/src/src/modetrade.d.ts +496 -0
- package/js/src/src/modetrade.js +2936 -0
- package/js/src/src/myokx.d.ts +4 -0
- package/js/src/src/myokx.js +54 -0
- package/js/src/src/ndax.d.ts +285 -0
- package/js/src/src/ndax.js +2598 -0
- package/js/src/src/nobitex.d.ts +23 -0
- package/js/src/src/nobitex.js +454 -0
- package/js/src/src/novadax.d.ts +279 -0
- package/js/src/src/novadax.js +1676 -0
- package/js/src/src/oceanex.d.ts +231 -0
- package/js/src/src/oceanex.js +1123 -0
- package/js/src/src/okcoin.d.ts +346 -0
- package/js/src/src/okcoin.js +3211 -0
- package/js/src/src/okexchange.d.ts +23 -0
- package/js/src/src/okexchange.js +373 -0
- package/js/src/src/okx.d.ts +1125 -0
- package/js/src/src/okx.js +9009 -0
- package/js/src/src/okxus.d.ts +4 -0
- package/js/src/src/okxus.js +54 -0
- package/js/src/src/ompfinex.d.ts +23 -0
- package/js/src/src/ompfinex.js +510 -0
- package/js/src/src/onetrading.d.ts +228 -0
- package/js/src/src/onetrading.js +1769 -0
- package/js/src/src/oxfun.d.ts +442 -0
- package/js/src/src/oxfun.js +2920 -0
- package/js/src/src/p2b.d.ts +189 -0
- package/js/src/src/p2b.js +1344 -0
- package/js/src/src/paradex.d.ts +389 -0
- package/js/src/src/paradex.js +2607 -0
- package/js/src/src/paymium.d.ts +133 -0
- package/js/src/src/paymium.js +644 -0
- package/js/src/src/phemex.d.ts +497 -0
- package/js/src/src/phemex.js +5333 -0
- package/js/src/src/pingi.d.ts +22 -0
- package/js/src/src/pingi.js +446 -0
- package/js/src/src/poloniex.d.ts +441 -0
- package/js/src/src/poloniex.js +3681 -0
- package/js/src/src/pooleno.d.ts +21 -0
- package/js/src/src/pooleno.js +347 -0
- package/js/src/src/pro/alpaca.d.ts +95 -0
- package/js/src/src/pro/alpaca.js +724 -0
- package/js/src/src/pro/apex.d.ts +160 -0
- package/js/src/src/pro/apex.js +1044 -0
- package/js/src/src/pro/ascendex.d.ts +99 -0
- package/js/src/src/pro/ascendex.js +1012 -0
- package/js/src/src/pro/bequant.d.ts +4 -0
- package/js/src/src/pro/bequant.js +42 -0
- package/js/src/src/pro/binance.d.ts +796 -0
- package/js/src/src/pro/binance.js +4373 -0
- package/js/src/src/pro/binancecoinm.d.ts +4 -0
- package/js/src/src/pro/binancecoinm.js +32 -0
- package/js/src/src/pro/binanceus.d.ts +4 -0
- package/js/src/src/pro/binanceus.js +52 -0
- package/js/src/src/pro/binanceusdm.d.ts +4 -0
- package/js/src/src/pro/binanceusdm.js +37 -0
- package/js/src/src/pro/bingx.d.ts +151 -0
- package/js/src/src/pro/bingx.js +1568 -0
- package/js/src/src/pro/bitfinex.d.ts +99 -0
- package/js/src/src/pro/bitfinex.js +1165 -0
- package/js/src/src/pro/bitget.d.ts +257 -0
- package/js/src/src/pro/bitget.js +2327 -0
- package/js/src/src/pro/bithumb.d.ts +59 -0
- package/js/src/src/pro/bithumb.js +395 -0
- package/js/src/src/pro/bitmart.d.ts +168 -0
- package/js/src/src/pro/bitmart.js +1686 -0
- package/js/src/src/pro/bitmex.d.ts +170 -0
- package/js/src/src/pro/bitmex.js +1760 -0
- package/js/src/src/pro/bitopro.d.ts +69 -0
- package/js/src/src/pro/bitopro.js +477 -0
- package/js/src/src/pro/bitrue.d.ts +40 -0
- package/js/src/src/pro/bitrue.js +461 -0
- package/js/src/src/pro/bitstamp.d.ts +53 -0
- package/js/src/src/pro/bitstamp.js +587 -0
- package/js/src/src/pro/bittrade.d.ts +66 -0
- package/js/src/src/pro/bittrade.js +606 -0
- package/js/src/src/pro/bitvavo.d.ts +321 -0
- package/js/src/src/pro/bitvavo.js +1451 -0
- package/js/src/src/pro/blockchaincom.d.ts +89 -0
- package/js/src/src/pro/blockchaincom.js +777 -0
- package/js/src/src/pro/blofin.d.ts +174 -0
- package/js/src/src/pro/blofin.js +743 -0
- package/js/src/src/pro/bybit.d.ts +397 -0
- package/js/src/src/pro/bybit.js +2519 -0
- package/js/src/src/pro/cex.d.ts +220 -0
- package/js/src/src/pro/cex.js +1535 -0
- package/js/src/src/pro/coinbase.d.ts +119 -0
- package/js/src/src/pro/coinbase.js +736 -0
- package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
- package/js/src/src/pro/coinbaseadvanced.js +18 -0
- package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
- package/js/src/src/pro/coinbaseexchange.js +969 -0
- package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
- package/js/src/src/pro/coinbaseinternational.js +804 -0
- package/js/src/src/pro/coincatch.d.ts +207 -0
- package/js/src/src/pro/coincatch.js +1562 -0
- package/js/src/src/pro/coincheck.d.ts +33 -0
- package/js/src/src/pro/coincheck.js +210 -0
- package/js/src/src/pro/coinex.d.ts +147 -0
- package/js/src/src/pro/coinex.js +1426 -0
- package/js/src/src/pro/coinone.d.ts +51 -0
- package/js/src/src/pro/coinone.js +413 -0
- package/js/src/src/pro/cryptocom.d.ts +300 -0
- package/js/src/src/pro/cryptocom.js +1414 -0
- package/js/src/src/pro/defx.d.ts +236 -0
- package/js/src/src/pro/defx.js +865 -0
- package/js/src/src/pro/deribit.d.ts +163 -0
- package/js/src/src/pro/deribit.js +1066 -0
- package/js/src/src/pro/derive.d.ts +100 -0
- package/js/src/src/pro/derive.js +753 -0
- package/js/src/src/pro/exmo.d.ts +97 -0
- package/js/src/src/pro/exmo.js +903 -0
- package/js/src/src/pro/gate.d.ts +360 -0
- package/js/src/src/pro/gate.js +2119 -0
- package/js/src/src/pro/gateio.d.ts +4 -0
- package/js/src/src/pro/gateio.js +17 -0
- package/js/src/src/pro/gemini.d.ts +106 -0
- package/js/src/src/pro/gemini.js +932 -0
- package/js/src/src/pro/hashkey.d.ts +121 -0
- package/js/src/src/pro/hashkey.js +843 -0
- package/js/src/src/pro/hitbtc.d.ts +235 -0
- package/js/src/src/pro/hitbtc.js +1400 -0
- package/js/src/src/pro/hollaex.d.ts +77 -0
- package/js/src/src/pro/hollaex.js +604 -0
- package/js/src/src/pro/htx.d.ts +141 -0
- package/js/src/src/pro/htx.js +2415 -0
- package/js/src/src/pro/huobi.d.ts +4 -0
- package/js/src/src/pro/huobi.js +17 -0
- package/js/src/src/pro/hyperliquid.d.ts +218 -0
- package/js/src/src/pro/hyperliquid.js +1126 -0
- package/js/src/src/pro/independentreserve.d.ts +36 -0
- package/js/src/src/pro/independentreserve.js +287 -0
- package/js/src/src/pro/kraken.d.ts +233 -0
- package/js/src/src/pro/kraken.js +1785 -0
- package/js/src/src/pro/krakenfutures.d.ts +178 -0
- package/js/src/src/pro/krakenfutures.js +1592 -0
- package/js/src/src/pro/kucoin.d.ts +221 -0
- package/js/src/src/pro/kucoin.js +1430 -0
- package/js/src/src/pro/kucoinfutures.d.ts +205 -0
- package/js/src/src/pro/kucoinfutures.js +1295 -0
- package/js/src/src/pro/lbank.d.ts +134 -0
- package/js/src/src/pro/lbank.js +950 -0
- package/js/src/src/pro/luno.d.ts +44 -0
- package/js/src/src/pro/luno.js +322 -0
- package/js/src/src/pro/mexc.d.ts +210 -0
- package/js/src/src/pro/mexc.js +2009 -0
- package/js/src/src/pro/modetrade.d.ts +155 -0
- package/js/src/src/pro/modetrade.js +1335 -0
- package/js/src/src/pro/myokx.d.ts +4 -0
- package/js/src/src/pro/myokx.js +39 -0
- package/js/src/src/pro/ndax.d.ts +60 -0
- package/js/src/src/pro/ndax.js +545 -0
- package/js/src/src/pro/okcoin.d.ts +91 -0
- package/js/src/src/pro/okcoin.js +763 -0
- package/js/src/src/pro/okx.d.ts +408 -0
- package/js/src/src/pro/okx.js +2479 -0
- package/js/src/src/pro/okxus.d.ts +4 -0
- package/js/src/src/pro/okxus.js +39 -0
- package/js/src/src/pro/onetrading.d.ts +107 -0
- package/js/src/src/pro/onetrading.js +1343 -0
- package/js/src/src/pro/oxfun.d.ts +234 -0
- package/js/src/src/pro/oxfun.js +1112 -0
- package/js/src/src/pro/p2b.d.ts +104 -0
- package/js/src/src/pro/p2b.js +506 -0
- package/js/src/src/pro/paradex.d.ts +54 -0
- package/js/src/src/pro/paradex.js +370 -0
- package/js/src/src/pro/phemex.d.ts +129 -0
- package/js/src/src/pro/phemex.js +1569 -0
- package/js/src/src/pro/poloniex.d.ts +214 -0
- package/js/src/src/pro/poloniex.js +1318 -0
- package/js/src/src/pro/probit.d.ts +91 -0
- package/js/src/src/pro/probit.js +593 -0
- package/js/src/src/pro/tradeogre.d.ts +49 -0
- package/js/src/src/pro/tradeogre.js +284 -0
- package/js/src/src/pro/upbit.d.ts +124 -0
- package/js/src/src/pro/upbit.js +689 -0
- package/js/src/src/pro/vertex.d.ts +104 -0
- package/js/src/src/pro/vertex.js +999 -0
- package/js/src/src/pro/whitebit.d.ts +123 -0
- package/js/src/src/pro/whitebit.js +971 -0
- package/js/src/src/pro/woo.d.ts +161 -0
- package/js/src/src/pro/woo.js +1351 -0
- package/js/src/src/pro/woofipro.d.ts +155 -0
- package/js/src/src/pro/woofipro.js +1335 -0
- package/js/src/src/pro/xt.d.ts +165 -0
- package/js/src/src/pro/xt.js +1230 -0
- package/js/src/src/probit.d.ts +283 -0
- package/js/src/src/probit.js +1935 -0
- package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
- package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
- package/js/src/src/raastin.d.ts +24 -0
- package/js/src/src/raastin.js +494 -0
- package/js/src/src/ramzinex.d.ts +23 -0
- package/js/src/src/ramzinex.js +510 -0
- package/js/src/src/sarmayex.d.ts +21 -0
- package/js/src/src/sarmayex.js +376 -0
- package/js/src/src/sarrafex.d.ts +23 -0
- package/js/src/src/sarrafex.js +501 -0
- package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
- package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
- package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
- package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
- package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
- package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
- package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
- package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
- package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
- package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
- package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
- package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
- package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
- package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
- package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
- package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
- package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
- package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
- package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
- package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
- package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
- package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
- package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
- package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
- package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
- package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
- package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
- package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
- package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
- package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
- package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
- package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
- package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
- package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
- package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
- package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
- package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
- package/js/src/src/static_dependencies/ethers/index.js +22 -0
- package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
- package/js/src/src/static_dependencies/ethers/interface.js +990 -0
- package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
- package/js/src/src/static_dependencies/ethers/typed.js +608 -0
- package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
- package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
- package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
- package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
- package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
- package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
- package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
- package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
- package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
- package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
- package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
- package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
- package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
- package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
- package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
- package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
- package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
- package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
- package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
- package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
- package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
- package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
- package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
- package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
- package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
- package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
- package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
- package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
- package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
- package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
- package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
- package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
- package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
- package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
- package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
- package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
- package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
- package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
- package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
- package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
- package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
- package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
- package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
- package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
- package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
- package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
- package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
- package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
- package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
- package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
- package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
- package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
- package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
- package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
- package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
- package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
- package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
- package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
- package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
- package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
- package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
- package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
- package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
- package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
- package/js/src/src/static_dependencies/qs/index.cjs +15 -0
- package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
- package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
- package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
- package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
- package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
- package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
- package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
- package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
- package/js/src/src/static_dependencies/scure-base/index.js +420 -0
- package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
- package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
- package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
- package/js/src/src/static_dependencies/starknet/constants.js +67 -0
- package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
- package/js/src/src/static_dependencies/starknet/index.js +9 -0
- package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
- package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
- package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
- package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
- package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
- package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
- package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
- package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
- package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
- package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
- package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
- package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
- package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
- package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
- package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
- package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
- package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
- package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
- package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
- package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
- package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
- package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
- package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
- package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
- package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
- package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
- package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
- package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
- package/js/src/src/tabdeal.d.ts +23 -0
- package/js/src/src/tabdeal.js +387 -0
- package/js/src/src/tehran_exchange.d.ts +21 -0
- package/js/src/src/tehran_exchange.js +333 -0
- package/js/src/src/tetherland.d.ts +21 -0
- package/js/src/src/tetherland.js +367 -0
- package/js/src/src/timex.d.ts +247 -0
- package/js/src/src/timex.js +1792 -0
- package/js/src/src/tokocrypto.d.ts +261 -0
- package/js/src/src/tokocrypto.js +2641 -0
- package/js/src/src/toobit.d.ts +22 -0
- package/js/src/src/toobit.js +445 -0
- package/js/src/src/tradeogre.d.ts +149 -0
- package/js/src/src/tradeogre.js +878 -0
- package/js/src/src/twox.d.ts +21 -0
- package/js/src/src/twox.js +371 -0
- package/js/src/src/ubitex.d.ts +23 -0
- package/js/src/src/ubitex.js +433 -0
- package/js/src/src/upbit.d.ts +377 -0
- package/js/src/src/upbit.js +2340 -0
- package/js/src/src/vertex.d.ts +346 -0
- package/js/src/src/vertex.js +3146 -0
- package/js/src/src/wallex.d.ts +23 -0
- package/js/src/src/wallex.js +467 -0
- package/js/src/src/wavesexchange.d.ts +244 -0
- package/js/src/src/wavesexchange.js +2747 -0
- package/js/src/src/whitebit.d.ts +571 -0
- package/js/src/src/whitebit.js +3437 -0
- package/js/src/src/woo.d.ts +727 -0
- package/js/src/src/woo.js +4183 -0
- package/js/src/src/woofipro.d.ts +497 -0
- package/js/src/src/woofipro.js +2941 -0
- package/js/src/src/xt.d.ts +568 -0
- package/js/src/src/xt.js +5184 -0
- package/js/src/src/yobit.d.ts +197 -0
- package/js/src/src/yobit.js +1453 -0
- package/js/src/src/zaif.d.ts +136 -0
- package/js/src/src/zaif.js +821 -0
- package/js/src/src/zonda.d.ts +214 -0
- package/js/src/src/zonda.js +1984 -0
- package/js/test.js +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,1785 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
|
|
3
|
+
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
+
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
+
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
import krakenRest from '../kraken.js';
|
|
9
|
+
import { ExchangeError, BadSymbol, PermissionDenied, AccountSuspended, BadRequest, InsufficientFunds, InvalidOrder, OrderNotFound, NotSupported, RateLimitExceeded, ExchangeNotAvailable, ChecksumError, AuthenticationError, ArgumentsRequired } from '../base/errors.js';
|
|
10
|
+
import { ArrayCache, ArrayCacheByTimestamp, ArrayCacheBySymbolById } from '../base/ws/Cache.js';
|
|
11
|
+
import { Precise } from '../base/Precise.js';
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
export default class kraken extends krakenRest {
|
|
14
|
+
describe() {
|
|
15
|
+
return this.deepExtend(super.describe(), {
|
|
16
|
+
'has': {
|
|
17
|
+
'ws': true,
|
|
18
|
+
'watchBalance': true,
|
|
19
|
+
'watchMyTrades': true,
|
|
20
|
+
'watchOHLCV': true,
|
|
21
|
+
'watchOrderBook': true,
|
|
22
|
+
'watchOrderBookForSymbols': true,
|
|
23
|
+
'watchOrders': true,
|
|
24
|
+
'watchTicker': true,
|
|
25
|
+
'watchTickers': true,
|
|
26
|
+
'watchBidsAsks': true,
|
|
27
|
+
'watchTrades': true,
|
|
28
|
+
'watchTradesForSymbols': true,
|
|
29
|
+
'createOrderWs': true,
|
|
30
|
+
'editOrderWs': true,
|
|
31
|
+
'cancelOrderWs': true,
|
|
32
|
+
'cancelOrdersWs': true,
|
|
33
|
+
'cancelAllOrdersWs': true,
|
|
34
|
+
// 'watchHeartbeat': true,
|
|
35
|
+
// 'watchStatus': true,
|
|
36
|
+
},
|
|
37
|
+
'urls': {
|
|
38
|
+
'api': {
|
|
39
|
+
'ws': {
|
|
40
|
+
'public': 'wss://ws.kraken.com',
|
|
41
|
+
'private': 'wss://ws-auth.kraken.com',
|
|
42
|
+
'privateV2': 'wss://ws-auth.kraken.com/v2',
|
|
43
|
+
'publicV2': 'wss://ws.kraken.com/v2',
|
|
44
|
+
'beta': 'wss://beta-ws.kraken.com',
|
|
45
|
+
'beta-private': 'wss://beta-ws-auth.kraken.com',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
// 'versions': {
|
|
50
|
+
// 'ws': '0.2.0',
|
|
51
|
+
// },
|
|
52
|
+
'options': {
|
|
53
|
+
'tradesLimit': 1000,
|
|
54
|
+
'OHLCVLimit': 1000,
|
|
55
|
+
'ordersLimit': 1000,
|
|
56
|
+
'symbolsByOrderId': {},
|
|
57
|
+
'watchOrderBook': {
|
|
58
|
+
'checksum': false,
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
'streaming': {
|
|
62
|
+
'ping': this.ping,
|
|
63
|
+
'keepAlive': 6000,
|
|
64
|
+
},
|
|
65
|
+
'exceptions': {
|
|
66
|
+
'ws': {
|
|
67
|
+
'exact': {
|
|
68
|
+
'Event(s) not found': BadRequest,
|
|
69
|
+
},
|
|
70
|
+
'broad': {
|
|
71
|
+
'Already subscribed': BadRequest,
|
|
72
|
+
'Currency pair not in ISO 4217-A3 format': BadSymbol,
|
|
73
|
+
'Currency pair not supported': BadSymbol,
|
|
74
|
+
'Malformed request': BadRequest,
|
|
75
|
+
'Pair field must be an array': BadRequest,
|
|
76
|
+
'Pair field unsupported for this subscription type': BadRequest,
|
|
77
|
+
'Pair(s) not found': BadSymbol,
|
|
78
|
+
'Subscription book depth must be an integer': BadRequest,
|
|
79
|
+
'Subscription depth not supported': BadRequest,
|
|
80
|
+
'Subscription field must be an object': BadRequest,
|
|
81
|
+
'Subscription name invalid': BadRequest,
|
|
82
|
+
'Subscription object unsupported field': BadRequest,
|
|
83
|
+
'Subscription ohlc interval must be an integer': BadRequest,
|
|
84
|
+
'Subscription ohlc interval not supported': BadRequest,
|
|
85
|
+
'Subscription ohlc requires interval': BadRequest,
|
|
86
|
+
'EAccount:Invalid permissions': PermissionDenied,
|
|
87
|
+
'EAuth:Account temporary disabled': AccountSuspended,
|
|
88
|
+
'EAuth:Account unconfirmed': AuthenticationError,
|
|
89
|
+
'EAuth:Rate limit exceeded': RateLimitExceeded,
|
|
90
|
+
'EAuth:Too many requests': RateLimitExceeded,
|
|
91
|
+
'EDatabase: Internal error (to be deprecated)': ExchangeError,
|
|
92
|
+
'EGeneral:Internal error[:<code>]': ExchangeError,
|
|
93
|
+
'EGeneral:Invalid arguments': BadRequest,
|
|
94
|
+
'EOrder:Cannot open opposing position': InvalidOrder,
|
|
95
|
+
'EOrder:Cannot open position': InvalidOrder,
|
|
96
|
+
'EOrder:Insufficient funds (insufficient user funds)': InsufficientFunds,
|
|
97
|
+
'EOrder:Insufficient margin (exchange does not have sufficient funds to allow margin trading)': InsufficientFunds,
|
|
98
|
+
'EOrder:Invalid price': InvalidOrder,
|
|
99
|
+
'EOrder:Margin allowance exceeded': InvalidOrder,
|
|
100
|
+
'EOrder:Margin level too low': InvalidOrder,
|
|
101
|
+
'EOrder:Margin position size exceeded (client would exceed the maximum position size for this pair)': InvalidOrder,
|
|
102
|
+
'EOrder:Order minimum not met (volume too low)': InvalidOrder,
|
|
103
|
+
'EOrder:Orders limit exceeded': InvalidOrder,
|
|
104
|
+
'EOrder:Positions limit exceeded': InvalidOrder,
|
|
105
|
+
'EOrder:Rate limit exceeded': RateLimitExceeded,
|
|
106
|
+
'EOrder:Scheduled orders limit exceeded': InvalidOrder,
|
|
107
|
+
'EOrder:Unknown position': OrderNotFound,
|
|
108
|
+
'EOrder:Unknown order': OrderNotFound,
|
|
109
|
+
'EOrder:Invalid order': InvalidOrder,
|
|
110
|
+
'EService:Deadline elapsed': ExchangeNotAvailable,
|
|
111
|
+
'EService:Market in cancel_only mode': NotSupported,
|
|
112
|
+
'EService:Market in limit_only mode': NotSupported,
|
|
113
|
+
'EService:Market in post_only mode': NotSupported,
|
|
114
|
+
'EService:Unavailable': ExchangeNotAvailable,
|
|
115
|
+
'ETrade:Invalid request': BadRequest,
|
|
116
|
+
'ESession:Invalid session': AuthenticationError,
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
orderRequestWs(method, symbol, type, request, amount, price = undefined, params = {}) {
|
|
123
|
+
const isLimitOrder = type.endsWith('limit'); // supporting limit, stop-loss-limit, take-profit-limit, etc
|
|
124
|
+
if (isLimitOrder) {
|
|
125
|
+
if (price === undefined) {
|
|
126
|
+
throw new ArgumentsRequired(this.id + ' limit orders require a price argument');
|
|
127
|
+
}
|
|
128
|
+
request['params']['limit_price'] = this.parseToNumeric(this.priceToPrecision(symbol, price));
|
|
129
|
+
}
|
|
130
|
+
const isMarket = (type === 'market');
|
|
131
|
+
let postOnly = undefined;
|
|
132
|
+
[postOnly, params] = this.handlePostOnly(isMarket, false, params);
|
|
133
|
+
if (postOnly) {
|
|
134
|
+
request['params']['post_only'] = true;
|
|
135
|
+
}
|
|
136
|
+
const clientOrderId = this.safeString(params, 'clientOrderId');
|
|
137
|
+
if (clientOrderId !== undefined) {
|
|
138
|
+
request['params']['cl_ord_id'] = clientOrderId;
|
|
139
|
+
}
|
|
140
|
+
const cost = this.safeString(params, 'cost');
|
|
141
|
+
if (cost !== undefined) {
|
|
142
|
+
request['params']['order_qty'] = this.parseToNumeric(this.costToPrecision(symbol, cost));
|
|
143
|
+
}
|
|
144
|
+
const stopLoss = this.safeDict(params, 'stopLoss', {});
|
|
145
|
+
const takeProfit = this.safeDict(params, 'takeProfit', {});
|
|
146
|
+
const presetStopLoss = this.safeString(stopLoss, 'triggerPrice');
|
|
147
|
+
const presetTakeProfit = this.safeString(takeProfit, 'triggerPrice');
|
|
148
|
+
const presetStopLossLimit = this.safeString(stopLoss, 'price');
|
|
149
|
+
const presetTakeProfitLimit = this.safeString(takeProfit, 'price');
|
|
150
|
+
const isPresetStopLoss = presetStopLoss !== undefined;
|
|
151
|
+
const isPresetTakeProfit = presetTakeProfit !== undefined;
|
|
152
|
+
const stopLossPrice = this.safeString(params, 'stopLossPrice');
|
|
153
|
+
const takeProfitPrice = this.safeString(params, 'takeProfitPrice');
|
|
154
|
+
const isStopLossPriceOrder = stopLossPrice !== undefined;
|
|
155
|
+
const isTakeProfitPriceOrder = takeProfitPrice !== undefined;
|
|
156
|
+
const trailingAmount = this.safeString(params, 'trailingAmount');
|
|
157
|
+
const trailingPercent = this.safeString(params, 'trailingPercent');
|
|
158
|
+
const trailingLimitAmount = this.safeString(params, 'trailingLimitAmount');
|
|
159
|
+
const trailingLimitPercent = this.safeString(params, 'trailingLimitPercent');
|
|
160
|
+
const isTrailingAmountOrder = trailingAmount !== undefined;
|
|
161
|
+
const isTrailingPercentOrder = trailingPercent !== undefined;
|
|
162
|
+
const isTrailingLimitAmountOrder = trailingLimitAmount !== undefined;
|
|
163
|
+
const isTrailingLimitPercentOrder = trailingLimitPercent !== undefined;
|
|
164
|
+
const offset = this.safeString(params, 'offset', ''); // can set this to - for minus
|
|
165
|
+
const trailingAmountString = (trailingAmount !== undefined) ? offset + this.numberToString(trailingAmount) : undefined;
|
|
166
|
+
const trailingPercentString = (trailingPercent !== undefined) ? offset + this.numberToString(trailingPercent) : undefined;
|
|
167
|
+
const trailingLimitAmountString = (trailingLimitAmount !== undefined) ? offset + this.numberToString(trailingLimitAmount) : undefined;
|
|
168
|
+
const trailingLimitPercentString = (trailingLimitPercent !== undefined) ? offset + this.numberToString(trailingLimitPercent) : undefined;
|
|
169
|
+
const priceType = (isTrailingPercentOrder || isTrailingLimitPercentOrder) ? 'pct' : 'quote';
|
|
170
|
+
if (method === 'createOrderWs') {
|
|
171
|
+
const reduceOnly = this.safeBool(params, 'reduceOnly');
|
|
172
|
+
if (reduceOnly) {
|
|
173
|
+
request['params']['reduce_only'] = true;
|
|
174
|
+
}
|
|
175
|
+
const timeInForce = this.safeStringLower(params, 'timeInForce');
|
|
176
|
+
if (timeInForce !== undefined) {
|
|
177
|
+
request['params']['time_in_force'] = timeInForce;
|
|
178
|
+
}
|
|
179
|
+
params = this.omit(params, ['reduceOnly', 'timeInForce']);
|
|
180
|
+
if (isStopLossPriceOrder || isTakeProfitPriceOrder || isTrailingAmountOrder || isTrailingPercentOrder || isTrailingLimitAmountOrder || isTrailingLimitPercentOrder) {
|
|
181
|
+
request['params']['triggers'] = {};
|
|
182
|
+
}
|
|
183
|
+
if (isPresetStopLoss || isPresetTakeProfit) {
|
|
184
|
+
request['params']['conditional'] = {};
|
|
185
|
+
if (isPresetStopLoss) {
|
|
186
|
+
request['params']['conditional']['order_type'] = 'stop-loss';
|
|
187
|
+
request['params']['conditional']['trigger_price'] = this.parseToNumeric(this.priceToPrecision(symbol, presetStopLoss));
|
|
188
|
+
}
|
|
189
|
+
else if (isPresetTakeProfit) {
|
|
190
|
+
request['params']['conditional']['order_type'] = 'take-profit';
|
|
191
|
+
request['params']['conditional']['trigger_price'] = this.parseToNumeric(this.priceToPrecision(symbol, presetTakeProfit));
|
|
192
|
+
}
|
|
193
|
+
if (presetStopLossLimit !== undefined) {
|
|
194
|
+
request['params']['conditional']['order_type'] = 'stop-loss-limit';
|
|
195
|
+
request['params']['conditional']['limit_price'] = this.parseToNumeric(this.priceToPrecision(symbol, presetStopLossLimit));
|
|
196
|
+
}
|
|
197
|
+
else if (presetTakeProfitLimit !== undefined) {
|
|
198
|
+
request['params']['conditional']['order_type'] = 'take-profit-limit';
|
|
199
|
+
request['params']['conditional']['limit_price'] = this.parseToNumeric(this.priceToPrecision(symbol, presetTakeProfitLimit));
|
|
200
|
+
}
|
|
201
|
+
params = this.omit(params, ['stopLoss', 'takeProfit']);
|
|
202
|
+
}
|
|
203
|
+
else if (isStopLossPriceOrder || isTakeProfitPriceOrder) {
|
|
204
|
+
if (isStopLossPriceOrder) {
|
|
205
|
+
request['params']['triggers']['price'] = this.parseToNumeric(this.priceToPrecision(symbol, stopLossPrice));
|
|
206
|
+
if (isLimitOrder) {
|
|
207
|
+
request['params']['order_type'] = 'stop-loss-limit';
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
request['params']['order_type'] = 'stop-loss';
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
request['params']['triggers']['price'] = this.parseToNumeric(this.priceToPrecision(symbol, takeProfitPrice));
|
|
215
|
+
if (isLimitOrder) {
|
|
216
|
+
request['params']['order_type'] = 'take-profit-limit';
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
request['params']['order_type'] = 'take-profit';
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else if (isTrailingAmountOrder || isTrailingPercentOrder || isTrailingLimitAmountOrder || isTrailingLimitPercentOrder) {
|
|
224
|
+
request['params']['triggers']['price_type'] = priceType;
|
|
225
|
+
if (!isLimitOrder && (isTrailingAmountOrder || isTrailingPercentOrder)) {
|
|
226
|
+
request['params']['order_type'] = 'trailing-stop';
|
|
227
|
+
if (isTrailingAmountOrder) {
|
|
228
|
+
request['params']['triggers']['price'] = this.parseToNumeric(trailingAmountString);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
request['params']['triggers']['price'] = this.parseToNumeric(trailingPercentString);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
// trailing limit orders are not conventionally supported because the static limit_price_type param is not available for trailing-stop-limit orders
|
|
236
|
+
request['params']['limit_price_type'] = priceType;
|
|
237
|
+
request['params']['order_type'] = 'trailing-stop-limit';
|
|
238
|
+
if (isTrailingLimitAmountOrder) {
|
|
239
|
+
request['params']['triggers']['price'] = this.parseToNumeric(trailingLimitAmountString);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
request['params']['triggers']['price'] = this.parseToNumeric(trailingLimitPercentString);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
else if (method === 'editOrderWs') {
|
|
248
|
+
if (isPresetStopLoss || isPresetTakeProfit) {
|
|
249
|
+
throw new NotSupported(this.id + ' editing the stopLoss and takeProfit on existing orders is currently not supported');
|
|
250
|
+
}
|
|
251
|
+
if (isStopLossPriceOrder || isTakeProfitPriceOrder) {
|
|
252
|
+
if (isStopLossPriceOrder) {
|
|
253
|
+
request['params']['trigger_price'] = this.parseToNumeric(this.priceToPrecision(symbol, stopLossPrice));
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
request['params']['trigger_price'] = this.parseToNumeric(this.priceToPrecision(symbol, takeProfitPrice));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else if (isTrailingAmountOrder || isTrailingPercentOrder || isTrailingLimitAmountOrder || isTrailingLimitPercentOrder) {
|
|
260
|
+
request['params']['trigger_price_type'] = priceType;
|
|
261
|
+
if (!isLimitOrder && (isTrailingAmountOrder || isTrailingPercentOrder)) {
|
|
262
|
+
if (isTrailingAmountOrder) {
|
|
263
|
+
request['params']['trigger_price'] = this.parseToNumeric(trailingAmountString);
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
request['params']['trigger_price'] = this.parseToNumeric(trailingPercentString);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
request['params']['limit_price_type'] = priceType;
|
|
271
|
+
if (isTrailingLimitAmountOrder) {
|
|
272
|
+
request['params']['trigger_price'] = this.parseToNumeric(trailingLimitAmountString);
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
request['params']['trigger_price'] = this.parseToNumeric(trailingLimitPercentString);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
params = this.omit(params, ['clientOrderId', 'cost', 'offset', 'stopLossPrice', 'takeProfitPrice', 'trailingAmount', 'trailingPercent', 'trailingLimitAmount', 'trailingLimitPercent']);
|
|
281
|
+
return [request, params];
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* @method
|
|
285
|
+
* @name kraken#createOrderWs
|
|
286
|
+
* @description create a trade order
|
|
287
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/add_order
|
|
288
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
289
|
+
* @param {string} type 'market' or 'limit'
|
|
290
|
+
* @param {string} side 'buy' or 'sell'
|
|
291
|
+
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
292
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
293
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
294
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
295
|
+
*/
|
|
296
|
+
async createOrderWs(symbol, type, side, amount, price = undefined, params = {}) {
|
|
297
|
+
await this.loadMarkets();
|
|
298
|
+
const token = await this.authenticate();
|
|
299
|
+
const market = this.market(symbol);
|
|
300
|
+
const url = this.urls['api']['ws']['privateV2'];
|
|
301
|
+
const requestId = this.requestId();
|
|
302
|
+
const messageHash = requestId;
|
|
303
|
+
let request = {
|
|
304
|
+
'method': 'add_order',
|
|
305
|
+
'params': {
|
|
306
|
+
'order_type': type,
|
|
307
|
+
'side': side,
|
|
308
|
+
'order_qty': this.parseToNumeric(this.amountToPrecision(symbol, amount)),
|
|
309
|
+
'symbol': market['symbol'],
|
|
310
|
+
'token': token,
|
|
311
|
+
},
|
|
312
|
+
'req_id': requestId,
|
|
313
|
+
};
|
|
314
|
+
[request, params] = this.orderRequestWs('createOrderWs', symbol, type, request, amount, price, params);
|
|
315
|
+
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
316
|
+
}
|
|
317
|
+
handleCreateEditOrder(client, message) {
|
|
318
|
+
//
|
|
319
|
+
// createOrder
|
|
320
|
+
// {
|
|
321
|
+
// "method": "add_order",
|
|
322
|
+
// "req_id": 1,
|
|
323
|
+
// "result": {
|
|
324
|
+
// "order_id": "OXM2QD-EALR2-YBAVEU"
|
|
325
|
+
// },
|
|
326
|
+
// "success": true,
|
|
327
|
+
// "time_in": "2025-05-13T10:12:13.876173Z",
|
|
328
|
+
// "time_out": "2025-05-13T10:12:13.890137Z"
|
|
329
|
+
// }
|
|
330
|
+
//
|
|
331
|
+
// editOrder
|
|
332
|
+
// {
|
|
333
|
+
// "method": "amend_order",
|
|
334
|
+
// "req_id": 1,
|
|
335
|
+
// "result": {
|
|
336
|
+
// "amend_id": "TYDLSQ-OYNYU-3MNRER",
|
|
337
|
+
// "order_id": "OGL7HR-SWFO4-NRQTHO"
|
|
338
|
+
// },
|
|
339
|
+
// "success": true,
|
|
340
|
+
// "time_in": "2025-05-14T13:54:10.840342Z",
|
|
341
|
+
// "time_out": "2025-05-14T13:54:10.855046Z"
|
|
342
|
+
// }
|
|
343
|
+
//
|
|
344
|
+
const result = this.safeDict(message, 'result', {});
|
|
345
|
+
const order = this.parseOrder(result);
|
|
346
|
+
const messageHash = this.safeValue2(message, 'reqid', 'req_id');
|
|
347
|
+
client.resolve(order, messageHash);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* @method
|
|
351
|
+
* @name kraken#editOrderWs
|
|
352
|
+
* @description edit a trade order
|
|
353
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/amend_order
|
|
354
|
+
* @param {string} id order id
|
|
355
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
356
|
+
* @param {string} type 'market' or 'limit'
|
|
357
|
+
* @param {string} side 'buy' or 'sell'
|
|
358
|
+
* @param {float} amount how much of the currency you want to trade in units of the base currency
|
|
359
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
360
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
361
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
362
|
+
*/
|
|
363
|
+
async editOrderWs(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
364
|
+
await this.loadMarkets();
|
|
365
|
+
const token = await this.authenticate();
|
|
366
|
+
const url = this.urls['api']['ws']['privateV2'];
|
|
367
|
+
const requestId = this.requestId();
|
|
368
|
+
const messageHash = requestId;
|
|
369
|
+
let request = {
|
|
370
|
+
'method': 'amend_order',
|
|
371
|
+
'params': {
|
|
372
|
+
'order_id': id,
|
|
373
|
+
'order_qty': this.parseToNumeric(this.amountToPrecision(symbol, amount)),
|
|
374
|
+
'token': token,
|
|
375
|
+
},
|
|
376
|
+
'req_id': requestId,
|
|
377
|
+
};
|
|
378
|
+
[request, params] = this.orderRequestWs('editOrderWs', symbol, type, request, amount, price, params);
|
|
379
|
+
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* @method
|
|
383
|
+
* @name kraken#cancelOrdersWs
|
|
384
|
+
* @description cancel multiple orders
|
|
385
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/cancel_order
|
|
386
|
+
* @param {string[]} ids order ids
|
|
387
|
+
* @param {string} [symbol] unified market symbol, default is undefined
|
|
388
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
389
|
+
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
390
|
+
*/
|
|
391
|
+
async cancelOrdersWs(ids, symbol = undefined, params = {}) {
|
|
392
|
+
if (symbol !== undefined) {
|
|
393
|
+
throw new NotSupported(this.id + ' cancelOrdersWs () does not support cancelling orders for a specific symbol.');
|
|
394
|
+
}
|
|
395
|
+
await this.loadMarkets();
|
|
396
|
+
const token = await this.authenticate();
|
|
397
|
+
const url = this.urls['api']['ws']['privateV2'];
|
|
398
|
+
const requestId = this.requestId();
|
|
399
|
+
const messageHash = requestId;
|
|
400
|
+
const request = {
|
|
401
|
+
'method': 'cancel_order',
|
|
402
|
+
'params': {
|
|
403
|
+
'order_id': ids,
|
|
404
|
+
'token': token,
|
|
405
|
+
},
|
|
406
|
+
'req_id': requestId,
|
|
407
|
+
};
|
|
408
|
+
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* @method
|
|
412
|
+
* @name kraken#cancelOrderWs
|
|
413
|
+
* @description cancels an open order
|
|
414
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/cancel_order
|
|
415
|
+
* @param {string} id order id
|
|
416
|
+
* @param {string} [symbol] unified symbol of the market the order was made in
|
|
417
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
418
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
419
|
+
*/
|
|
420
|
+
async cancelOrderWs(id, symbol = undefined, params = {}) {
|
|
421
|
+
if (symbol !== undefined) {
|
|
422
|
+
throw new NotSupported(this.id + ' cancelOrderWs () does not support cancelling orders for a specific symbol.');
|
|
423
|
+
}
|
|
424
|
+
await this.loadMarkets();
|
|
425
|
+
const token = await this.authenticate();
|
|
426
|
+
const url = this.urls['api']['ws']['privateV2'];
|
|
427
|
+
const requestId = this.requestId();
|
|
428
|
+
const messageHash = requestId;
|
|
429
|
+
const request = {
|
|
430
|
+
'method': 'cancel_order',
|
|
431
|
+
'params': {
|
|
432
|
+
'order_id': [id],
|
|
433
|
+
'token': token,
|
|
434
|
+
},
|
|
435
|
+
'req_id': requestId,
|
|
436
|
+
};
|
|
437
|
+
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
438
|
+
}
|
|
439
|
+
handleCancelOrder(client, message) {
|
|
440
|
+
//
|
|
441
|
+
// {
|
|
442
|
+
// "method": "cancel_order",
|
|
443
|
+
// "req_id": 123456789,
|
|
444
|
+
// "result": {
|
|
445
|
+
// "order_id": "OKAGJC-YHIWK-WIOZWG"
|
|
446
|
+
// },
|
|
447
|
+
// "success": true,
|
|
448
|
+
// "time_in": "2023-09-21T14:36:57.428972Z",
|
|
449
|
+
// "time_out": "2023-09-21T14:36:57.437952Z"
|
|
450
|
+
// }
|
|
451
|
+
//
|
|
452
|
+
const reqId = this.safeValue(message, 'req_id');
|
|
453
|
+
client.resolve(message, reqId);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* @method
|
|
457
|
+
* @name kraken#cancelAllOrdersWs
|
|
458
|
+
* @description cancel all open orders
|
|
459
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/cancel_all
|
|
460
|
+
* @param {string} [symbol] unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
|
|
461
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
462
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
463
|
+
*/
|
|
464
|
+
async cancelAllOrdersWs(symbol = undefined, params = {}) {
|
|
465
|
+
if (symbol !== undefined) {
|
|
466
|
+
throw new NotSupported(this.id + ' cancelAllOrdersWs () does not support cancelling orders in a specific market.');
|
|
467
|
+
}
|
|
468
|
+
await this.loadMarkets();
|
|
469
|
+
const token = await this.authenticate();
|
|
470
|
+
const url = this.urls['api']['ws']['privateV2'];
|
|
471
|
+
const requestId = this.requestId();
|
|
472
|
+
const messageHash = requestId;
|
|
473
|
+
const request = {
|
|
474
|
+
'method': 'cancel_all',
|
|
475
|
+
'params': {
|
|
476
|
+
'token': token,
|
|
477
|
+
},
|
|
478
|
+
'req_id': requestId,
|
|
479
|
+
};
|
|
480
|
+
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
481
|
+
}
|
|
482
|
+
handleCancelAllOrders(client, message) {
|
|
483
|
+
//
|
|
484
|
+
// {
|
|
485
|
+
// "method": "cancel_all",
|
|
486
|
+
// "req_id": 123456789,
|
|
487
|
+
// "result": {
|
|
488
|
+
// "count": 1
|
|
489
|
+
// },
|
|
490
|
+
// "success": true,
|
|
491
|
+
// "time_in": "2023-09-21T14:36:57.428972Z",
|
|
492
|
+
// "time_out": "2023-09-21T14:36:57.437952Z"
|
|
493
|
+
// }
|
|
494
|
+
//
|
|
495
|
+
const reqId = this.safeValue(message, 'req_id');
|
|
496
|
+
client.resolve(message, reqId);
|
|
497
|
+
}
|
|
498
|
+
handleTicker(client, message) {
|
|
499
|
+
//
|
|
500
|
+
// {
|
|
501
|
+
// "channel": "ticker",
|
|
502
|
+
// "type": "snapshot",
|
|
503
|
+
// "data": [
|
|
504
|
+
// {
|
|
505
|
+
// "symbol": "BTC/USD",
|
|
506
|
+
// "bid": 108359.8,
|
|
507
|
+
// "bid_qty": 0.01362603,
|
|
508
|
+
// "ask": 108359.9,
|
|
509
|
+
// "ask_qty": 17.17988863,
|
|
510
|
+
// "last": 108359.8,
|
|
511
|
+
// "volume": 2158.32346723,
|
|
512
|
+
// "vwap": 108894.5,
|
|
513
|
+
// "low": 106824,
|
|
514
|
+
// "high": 111300,
|
|
515
|
+
// "change": -2679.9,
|
|
516
|
+
// "change_pct": -2.41
|
|
517
|
+
// }
|
|
518
|
+
// ]
|
|
519
|
+
// }
|
|
520
|
+
//
|
|
521
|
+
const data = this.safeList(message, 'data', []);
|
|
522
|
+
const ticker = data[0];
|
|
523
|
+
const symbol = this.safeString(ticker, 'symbol');
|
|
524
|
+
const messageHash = this.getMessageHash('ticker', undefined, symbol);
|
|
525
|
+
const vwap = this.safeString(ticker, 'vwap');
|
|
526
|
+
let quoteVolume = undefined;
|
|
527
|
+
const baseVolume = this.safeString(ticker, 'volume');
|
|
528
|
+
if (baseVolume !== undefined && vwap !== undefined) {
|
|
529
|
+
quoteVolume = Precise.stringMul(baseVolume, vwap);
|
|
530
|
+
}
|
|
531
|
+
const last = this.safeString(ticker, 'last');
|
|
532
|
+
const result = this.safeTicker({
|
|
533
|
+
'symbol': symbol,
|
|
534
|
+
'timestamp': undefined,
|
|
535
|
+
'datetime': undefined,
|
|
536
|
+
'high': this.safeString(ticker, 'high'),
|
|
537
|
+
'low': this.safeString(ticker, 'low'),
|
|
538
|
+
'bid': this.safeString(ticker, 'bid'),
|
|
539
|
+
'bidVolume': this.safeString(ticker, 'bid_qty'),
|
|
540
|
+
'ask': this.safeString(ticker, 'ask'),
|
|
541
|
+
'askVolume': this.safeString(ticker, 'ask_qty'),
|
|
542
|
+
'vwap': vwap,
|
|
543
|
+
'open': undefined,
|
|
544
|
+
'close': last,
|
|
545
|
+
'last': last,
|
|
546
|
+
'previousClose': undefined,
|
|
547
|
+
'change': this.safeString(ticker, 'change'),
|
|
548
|
+
'percentage': this.safeString(ticker, 'change_pct'),
|
|
549
|
+
'average': undefined,
|
|
550
|
+
'baseVolume': baseVolume,
|
|
551
|
+
'quoteVolume': quoteVolume,
|
|
552
|
+
'info': ticker,
|
|
553
|
+
});
|
|
554
|
+
this.tickers[symbol] = result;
|
|
555
|
+
client.resolve(result, messageHash);
|
|
556
|
+
}
|
|
557
|
+
handleTrades(client, message) {
|
|
558
|
+
//
|
|
559
|
+
// {
|
|
560
|
+
// "channel": "trade",
|
|
561
|
+
// "type": "update",
|
|
562
|
+
// "data": [
|
|
563
|
+
// {
|
|
564
|
+
// "symbol": "MATIC/USD",
|
|
565
|
+
// "side": "sell",
|
|
566
|
+
// "price": 0.5117,
|
|
567
|
+
// "qty": 40.0,
|
|
568
|
+
// "ord_type": "market",
|
|
569
|
+
// "trade_id": 4665906,
|
|
570
|
+
// "timestamp": "2023-09-25T07:49:37.708706Z"
|
|
571
|
+
// }
|
|
572
|
+
// ]
|
|
573
|
+
// }
|
|
574
|
+
//
|
|
575
|
+
const data = this.safeList(message, 'data', []);
|
|
576
|
+
const trade = data[0];
|
|
577
|
+
const symbol = this.safeString(trade, 'symbol');
|
|
578
|
+
const messageHash = this.getMessageHash('trade', undefined, symbol);
|
|
579
|
+
let stored = this.safeValue(this.trades, symbol);
|
|
580
|
+
if (stored === undefined) {
|
|
581
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
582
|
+
stored = new ArrayCache(limit);
|
|
583
|
+
this.trades[symbol] = stored;
|
|
584
|
+
}
|
|
585
|
+
const market = this.market(symbol);
|
|
586
|
+
const parsed = this.parseTrades(data, market);
|
|
587
|
+
for (let i = 0; i < parsed.length; i++) {
|
|
588
|
+
stored.append(parsed[i]);
|
|
589
|
+
}
|
|
590
|
+
client.resolve(stored, messageHash);
|
|
591
|
+
}
|
|
592
|
+
handleOHLCV(client, message, subscription) {
|
|
593
|
+
//
|
|
594
|
+
// [
|
|
595
|
+
// 216, // channelID
|
|
596
|
+
// [
|
|
597
|
+
// "1574454214.962096", // Time, seconds since epoch
|
|
598
|
+
// "1574454240.000000", // End timestamp of the interval
|
|
599
|
+
// "0.020970", // Open price at midnight UTC
|
|
600
|
+
// "0.020970", // Intraday high price
|
|
601
|
+
// "0.020970", // Intraday low price
|
|
602
|
+
// "0.020970", // Closing price at midnight UTC
|
|
603
|
+
// "0.020970", // Volume weighted average price
|
|
604
|
+
// "0.08636138", // Accumulated volume today
|
|
605
|
+
// 1, // Number of trades today
|
|
606
|
+
// ],
|
|
607
|
+
// "ohlc-1", // Channel Name of subscription
|
|
608
|
+
// "ETH/XBT", // Asset pair
|
|
609
|
+
// ]
|
|
610
|
+
//
|
|
611
|
+
const info = this.safeValue(subscription, 'subscription', {});
|
|
612
|
+
const interval = this.safeInteger(info, 'interval');
|
|
613
|
+
const name = this.safeString(info, 'name');
|
|
614
|
+
const wsName = this.safeString(message, 3);
|
|
615
|
+
const market = this.safeValue(this.options['marketsByWsName'], wsName);
|
|
616
|
+
const symbol = market['symbol'];
|
|
617
|
+
const timeframe = this.findTimeframe(interval);
|
|
618
|
+
const duration = this.parseTimeframe(timeframe);
|
|
619
|
+
if (timeframe !== undefined) {
|
|
620
|
+
const candle = this.safeValue(message, 1);
|
|
621
|
+
const messageHash = name + ':' + timeframe + ':' + wsName;
|
|
622
|
+
let timestamp = this.safeFloat(candle, 1);
|
|
623
|
+
timestamp -= duration;
|
|
624
|
+
const ts = this.parseToInt(timestamp * 1000);
|
|
625
|
+
const result = [
|
|
626
|
+
ts,
|
|
627
|
+
this.safeFloat(candle, 2),
|
|
628
|
+
this.safeFloat(candle, 3),
|
|
629
|
+
this.safeFloat(candle, 4),
|
|
630
|
+
this.safeFloat(candle, 5),
|
|
631
|
+
this.safeFloat(candle, 7),
|
|
632
|
+
];
|
|
633
|
+
this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol, {});
|
|
634
|
+
let stored = this.safeValue(this.ohlcvs[symbol], timeframe);
|
|
635
|
+
if (stored === undefined) {
|
|
636
|
+
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
637
|
+
stored = new ArrayCacheByTimestamp(limit);
|
|
638
|
+
this.ohlcvs[symbol][timeframe] = stored;
|
|
639
|
+
}
|
|
640
|
+
stored.append(result);
|
|
641
|
+
client.resolve(stored, messageHash);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
requestId() {
|
|
645
|
+
// their support said that reqid must be an int32, not documented
|
|
646
|
+
const reqid = this.sum(this.safeInteger(this.options, 'reqid', 0), 1);
|
|
647
|
+
this.options['reqid'] = reqid;
|
|
648
|
+
return reqid;
|
|
649
|
+
}
|
|
650
|
+
async watchPublic(name, symbol, params = {}) {
|
|
651
|
+
await this.loadMarkets();
|
|
652
|
+
const market = this.market(symbol);
|
|
653
|
+
const wsName = this.safeValue(market['info'], 'wsname');
|
|
654
|
+
const messageHash = name + ':' + wsName;
|
|
655
|
+
const url = this.urls['api']['ws']['public'];
|
|
656
|
+
const requestId = this.requestId();
|
|
657
|
+
const subscribe = {
|
|
658
|
+
'event': 'subscribe',
|
|
659
|
+
'reqid': requestId,
|
|
660
|
+
'pair': [
|
|
661
|
+
wsName,
|
|
662
|
+
],
|
|
663
|
+
'subscription': {
|
|
664
|
+
'name': name,
|
|
665
|
+
},
|
|
666
|
+
};
|
|
667
|
+
const request = this.deepExtend(subscribe, params);
|
|
668
|
+
return await this.watch(url, messageHash, request, messageHash);
|
|
669
|
+
}
|
|
670
|
+
/**
|
|
671
|
+
* @method
|
|
672
|
+
* @name kraken#watchTicker
|
|
673
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
674
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/ticker
|
|
675
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
676
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
677
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
678
|
+
*/
|
|
679
|
+
async watchTicker(symbol, params = {}) {
|
|
680
|
+
await this.loadMarkets();
|
|
681
|
+
symbol = this.symbol(symbol);
|
|
682
|
+
const tickers = await this.watchTickers([symbol], params);
|
|
683
|
+
return tickers[symbol];
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* @method
|
|
687
|
+
* @name kraken#watchTickers
|
|
688
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
689
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/ticker
|
|
690
|
+
* @param {string[]} symbols
|
|
691
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
692
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
693
|
+
*/
|
|
694
|
+
async watchTickers(symbols = undefined, params = {}) {
|
|
695
|
+
await this.loadMarkets();
|
|
696
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
697
|
+
const ticker = await this.watchMultiHelper('ticker', 'ticker', symbols, undefined, params);
|
|
698
|
+
if (this.newUpdates) {
|
|
699
|
+
const result = {};
|
|
700
|
+
result[ticker['symbol']] = ticker;
|
|
701
|
+
return result;
|
|
702
|
+
}
|
|
703
|
+
return this.filterByArray(this.tickers, 'symbol', symbols);
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* @method
|
|
707
|
+
* @name kraken#watchBidsAsks
|
|
708
|
+
* @description watches best bid & ask for symbols
|
|
709
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/ticker
|
|
710
|
+
* @param {string[]} symbols unified symbol of the market to fetch the ticker for
|
|
711
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
712
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
713
|
+
*/
|
|
714
|
+
async watchBidsAsks(symbols = undefined, params = {}) {
|
|
715
|
+
await this.loadMarkets();
|
|
716
|
+
symbols = this.marketSymbols(symbols, undefined, false);
|
|
717
|
+
params['event_trigger'] = 'bbo';
|
|
718
|
+
const ticker = await this.watchMultiHelper('bidask', 'ticker', symbols, undefined, params);
|
|
719
|
+
if (this.newUpdates) {
|
|
720
|
+
const result = {};
|
|
721
|
+
result[ticker['symbol']] = ticker;
|
|
722
|
+
return result;
|
|
723
|
+
}
|
|
724
|
+
return this.filterByArray(this.bidsasks, 'symbol', symbols);
|
|
725
|
+
}
|
|
726
|
+
/**
|
|
727
|
+
* @method
|
|
728
|
+
* @name kraken#watchTrades
|
|
729
|
+
* @description get the list of most recent trades for a particular symbol
|
|
730
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/trade
|
|
731
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
732
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
733
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
734
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
735
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
736
|
+
*/
|
|
737
|
+
async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
738
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
739
|
+
}
|
|
740
|
+
/**
|
|
741
|
+
* @method
|
|
742
|
+
* @name kraken#watchTradesForSymbols
|
|
743
|
+
* @description get the list of most recent trades for a list of symbols
|
|
744
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/trade
|
|
745
|
+
* @param {string[]} symbols unified symbol of the market to fetch trades for
|
|
746
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
747
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
748
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
749
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
750
|
+
*/
|
|
751
|
+
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
752
|
+
const trades = await this.watchMultiHelper('trade', 'trade', symbols, undefined, params);
|
|
753
|
+
if (this.newUpdates) {
|
|
754
|
+
const first = this.safeList(trades, 0);
|
|
755
|
+
const tradeSymbol = this.safeString(first, 'symbol');
|
|
756
|
+
limit = trades.getLimit(tradeSymbol, limit);
|
|
757
|
+
}
|
|
758
|
+
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
759
|
+
}
|
|
760
|
+
/**
|
|
761
|
+
* @method
|
|
762
|
+
* @name kraken#watchOrderBook
|
|
763
|
+
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
764
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/book
|
|
765
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
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
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
769
|
+
*/
|
|
770
|
+
async watchOrderBook(symbol, limit = undefined, params = {}) {
|
|
771
|
+
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
772
|
+
}
|
|
773
|
+
/**
|
|
774
|
+
* @method
|
|
775
|
+
* @name kraken#watchOrderBookForSymbols
|
|
776
|
+
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
777
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/book
|
|
778
|
+
* @param {string[]} symbols unified array of symbols
|
|
779
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
780
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
781
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
782
|
+
*/
|
|
783
|
+
async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
|
|
784
|
+
const requiredParams = {};
|
|
785
|
+
if (limit !== undefined) {
|
|
786
|
+
if (this.inArray(limit, [10, 25, 100, 500, 1000])) {
|
|
787
|
+
requiredParams['depth'] = limit; // default 10, valid options 10, 25, 100, 500, 1000
|
|
788
|
+
}
|
|
789
|
+
else {
|
|
790
|
+
throw new NotSupported(this.id + ' watchOrderBook accepts limit values of 10, 25, 100, 500 and 1000 only');
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
const orderbook = await this.watchMultiHelper('orderbook', 'book', symbols, { 'limit': limit }, this.extend(requiredParams, params));
|
|
794
|
+
return orderbook.limit();
|
|
795
|
+
}
|
|
796
|
+
/**
|
|
797
|
+
* @method
|
|
798
|
+
* @name kraken#watchOHLCV
|
|
799
|
+
* @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
800
|
+
* @see https://docs.kraken.com/api/docs/websocket-v1/ohlc
|
|
801
|
+
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
802
|
+
* @param {string} timeframe the length of time each candle represents
|
|
803
|
+
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
804
|
+
* @param {int} [limit] the maximum amount of candles to fetch
|
|
805
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
806
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
807
|
+
*/
|
|
808
|
+
async watchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
809
|
+
await this.loadMarkets();
|
|
810
|
+
const name = 'ohlc';
|
|
811
|
+
const market = this.market(symbol);
|
|
812
|
+
symbol = market['symbol'];
|
|
813
|
+
const wsName = this.safeValue(market['info'], 'wsname');
|
|
814
|
+
const messageHash = name + ':' + timeframe + ':' + wsName;
|
|
815
|
+
const url = this.urls['api']['ws']['public'];
|
|
816
|
+
const requestId = this.requestId();
|
|
817
|
+
const subscribe = {
|
|
818
|
+
'event': 'subscribe',
|
|
819
|
+
'reqid': requestId,
|
|
820
|
+
'pair': [
|
|
821
|
+
wsName,
|
|
822
|
+
],
|
|
823
|
+
'subscription': {
|
|
824
|
+
'name': name,
|
|
825
|
+
'interval': this.safeValue(this.timeframes, timeframe, timeframe),
|
|
826
|
+
},
|
|
827
|
+
};
|
|
828
|
+
const request = this.deepExtend(subscribe, params);
|
|
829
|
+
const ohlcv = await this.watch(url, messageHash, request, messageHash);
|
|
830
|
+
if (this.newUpdates) {
|
|
831
|
+
limit = ohlcv.getLimit(symbol, limit);
|
|
832
|
+
}
|
|
833
|
+
return this.filterBySinceLimit(ohlcv, since, limit, 0, true);
|
|
834
|
+
}
|
|
835
|
+
async loadMarkets(reload = false, params = {}) {
|
|
836
|
+
const markets = await super.loadMarkets(reload, params);
|
|
837
|
+
let marketsByWsName = this.safeValue(this.options, 'marketsByWsName');
|
|
838
|
+
if ((marketsByWsName === undefined) || reload) {
|
|
839
|
+
marketsByWsName = {};
|
|
840
|
+
for (let i = 0; i < this.symbols.length; i++) {
|
|
841
|
+
const symbol = this.symbols[i];
|
|
842
|
+
const market = this.markets[symbol];
|
|
843
|
+
const info = this.safeValue(market, 'info', {});
|
|
844
|
+
const wsName = this.safeString(info, 'wsname');
|
|
845
|
+
marketsByWsName[wsName] = market;
|
|
846
|
+
}
|
|
847
|
+
this.options['marketsByWsName'] = marketsByWsName;
|
|
848
|
+
}
|
|
849
|
+
return markets;
|
|
850
|
+
}
|
|
851
|
+
ping(client) {
|
|
852
|
+
const url = client.url;
|
|
853
|
+
const request = {};
|
|
854
|
+
if (url.indexOf('v2') >= 0) {
|
|
855
|
+
request['method'] = 'ping';
|
|
856
|
+
}
|
|
857
|
+
else {
|
|
858
|
+
request['event'] = 'ping';
|
|
859
|
+
}
|
|
860
|
+
return request;
|
|
861
|
+
}
|
|
862
|
+
handlePong(client, message) {
|
|
863
|
+
client.lastPong = this.milliseconds();
|
|
864
|
+
return message;
|
|
865
|
+
}
|
|
866
|
+
async watchHeartbeat(params = {}) {
|
|
867
|
+
await this.loadMarkets();
|
|
868
|
+
const event = 'heartbeat';
|
|
869
|
+
const url = this.urls['api']['ws']['public'];
|
|
870
|
+
return await this.watch(url, event);
|
|
871
|
+
}
|
|
872
|
+
handleHeartbeat(client, message) {
|
|
873
|
+
//
|
|
874
|
+
// every second (approx) if no other updates are sent
|
|
875
|
+
//
|
|
876
|
+
// { "event": "heartbeat" }
|
|
877
|
+
//
|
|
878
|
+
const event = this.safeString(message, 'event');
|
|
879
|
+
client.resolve(message, event);
|
|
880
|
+
}
|
|
881
|
+
handleOrderBook(client, message) {
|
|
882
|
+
//
|
|
883
|
+
// first message (snapshot)
|
|
884
|
+
//
|
|
885
|
+
// {
|
|
886
|
+
// "channel": "book",
|
|
887
|
+
// "type": "snapshot",
|
|
888
|
+
// "data": [
|
|
889
|
+
// {
|
|
890
|
+
// "symbol": "MATIC/USD",
|
|
891
|
+
// "bids": [
|
|
892
|
+
// {
|
|
893
|
+
// "price": 0.5666,
|
|
894
|
+
// "qty": 4831.75496356
|
|
895
|
+
// },
|
|
896
|
+
// {
|
|
897
|
+
// "price": 0.5665,
|
|
898
|
+
// "qty": 6658.22734739
|
|
899
|
+
// }
|
|
900
|
+
// ],
|
|
901
|
+
// "asks": [
|
|
902
|
+
// {
|
|
903
|
+
// "price": 0.5668,
|
|
904
|
+
// "qty": 4410.79769741
|
|
905
|
+
// },
|
|
906
|
+
// {
|
|
907
|
+
// "price": 0.5669,
|
|
908
|
+
// "qty": 4655.40412487
|
|
909
|
+
// }
|
|
910
|
+
// ],
|
|
911
|
+
// "checksum": 2439117997
|
|
912
|
+
// }
|
|
913
|
+
// ]
|
|
914
|
+
// }
|
|
915
|
+
//
|
|
916
|
+
// subsequent updates
|
|
917
|
+
//
|
|
918
|
+
// {
|
|
919
|
+
// "channel": "book",
|
|
920
|
+
// "type": "update",
|
|
921
|
+
// "data": [
|
|
922
|
+
// {
|
|
923
|
+
// "symbol": "MATIC/USD",
|
|
924
|
+
// "bids": [
|
|
925
|
+
// {
|
|
926
|
+
// "price": 0.5657,
|
|
927
|
+
// "qty": 1098.3947558
|
|
928
|
+
// }
|
|
929
|
+
// ],
|
|
930
|
+
// "asks": [],
|
|
931
|
+
// "checksum": 2114181697,
|
|
932
|
+
// "timestamp": "2023-10-06T17:35:55.440295Z"
|
|
933
|
+
// }
|
|
934
|
+
// ]
|
|
935
|
+
// }
|
|
936
|
+
//
|
|
937
|
+
const type = this.safeString(message, 'type');
|
|
938
|
+
const data = this.safeList(message, 'data', []);
|
|
939
|
+
const first = this.safeDict(data, 0, {});
|
|
940
|
+
const symbol = this.safeString(first, 'symbol');
|
|
941
|
+
const a = this.safeValue(first, 'asks', []);
|
|
942
|
+
const b = this.safeValue(first, 'bids', []);
|
|
943
|
+
const c = this.safeInteger(first, 'checksum');
|
|
944
|
+
const messageHash = this.getMessageHash('orderbook', undefined, symbol);
|
|
945
|
+
let orderbook = undefined;
|
|
946
|
+
if (type === 'update') {
|
|
947
|
+
orderbook = this.orderbooks[symbol];
|
|
948
|
+
const storedAsks = orderbook['asks'];
|
|
949
|
+
const storedBids = orderbook['bids'];
|
|
950
|
+
if (a !== undefined) {
|
|
951
|
+
this.customHandleDeltas(storedAsks, a);
|
|
952
|
+
}
|
|
953
|
+
if (b !== undefined) {
|
|
954
|
+
this.customHandleDeltas(storedBids, b);
|
|
955
|
+
}
|
|
956
|
+
const datetime = this.safeString(first, 'timestamp');
|
|
957
|
+
orderbook['symbol'] = symbol;
|
|
958
|
+
orderbook['timestamp'] = this.parse8601(datetime);
|
|
959
|
+
orderbook['datetime'] = datetime;
|
|
960
|
+
}
|
|
961
|
+
else {
|
|
962
|
+
// snapshot
|
|
963
|
+
const depth = a.length;
|
|
964
|
+
this.orderbooks[symbol] = this.orderBook({}, depth);
|
|
965
|
+
orderbook = this.orderbooks[symbol];
|
|
966
|
+
const keys = ['asks', 'bids'];
|
|
967
|
+
for (let i = 0; i < keys.length; i++) {
|
|
968
|
+
const key = keys[i];
|
|
969
|
+
const bookside = orderbook[key];
|
|
970
|
+
const deltas = this.safeValue(first, key, []);
|
|
971
|
+
if (deltas.length > 0) {
|
|
972
|
+
this.customHandleDeltas(bookside, deltas);
|
|
973
|
+
}
|
|
974
|
+
}
|
|
975
|
+
orderbook['symbol'] = symbol;
|
|
976
|
+
}
|
|
977
|
+
orderbook.limit();
|
|
978
|
+
// checksum temporarily disabled because the exchange checksum was not reliable
|
|
979
|
+
const checksum = this.handleOption('watchOrderBook', 'checksum', false);
|
|
980
|
+
if (checksum) {
|
|
981
|
+
const payloadArray = [];
|
|
982
|
+
if (c !== undefined) {
|
|
983
|
+
const checkAsks = orderbook['asks'];
|
|
984
|
+
const checkBids = orderbook['bids'];
|
|
985
|
+
// const checkAsks = asks.map ((elem) => [ elem['price'], elem['qty'] ]);
|
|
986
|
+
// const checkBids = bids.map ((elem) => [ elem['price'], elem['qty'] ]);
|
|
987
|
+
for (let i = 0; i < 10; i++) {
|
|
988
|
+
const currentAsk = this.safeValue(checkAsks, i, {});
|
|
989
|
+
const formattedAsk = this.formatNumber(currentAsk[0]) + this.formatNumber(currentAsk[1]);
|
|
990
|
+
payloadArray.push(formattedAsk);
|
|
991
|
+
}
|
|
992
|
+
for (let i = 0; i < 10; i++) {
|
|
993
|
+
const currentBid = this.safeValue(checkBids, i, {});
|
|
994
|
+
const formattedBid = this.formatNumber(currentBid[0]) + this.formatNumber(currentBid[1]);
|
|
995
|
+
payloadArray.push(formattedBid);
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
const payload = payloadArray.join('');
|
|
999
|
+
const localChecksum = this.crc32(payload, false);
|
|
1000
|
+
if (localChecksum !== c) {
|
|
1001
|
+
const error = new ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
|
|
1002
|
+
delete client.subscriptions[messageHash];
|
|
1003
|
+
delete this.orderbooks[symbol];
|
|
1004
|
+
client.reject(error, messageHash);
|
|
1005
|
+
return;
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
client.resolve(orderbook, messageHash);
|
|
1009
|
+
}
|
|
1010
|
+
customHandleDeltas(bookside, deltas) {
|
|
1011
|
+
// const sortOrder = (key === 'bids') ? true : false;
|
|
1012
|
+
for (let j = 0; j < deltas.length; j++) {
|
|
1013
|
+
const delta = deltas[j];
|
|
1014
|
+
const price = this.safeNumber(delta, 'price');
|
|
1015
|
+
const amount = this.safeNumber(delta, 'qty');
|
|
1016
|
+
bookside.store(price, amount);
|
|
1017
|
+
// if (amount === 0) {
|
|
1018
|
+
// const index = bookside.findIndex ((x: Int) => x[0] === price);
|
|
1019
|
+
// bookside.splice (index, 1);
|
|
1020
|
+
// } else {
|
|
1021
|
+
// bookside.store (price, amount);
|
|
1022
|
+
// }
|
|
1023
|
+
// bookside = this.sortBy (bookside, 0, sortOrder);
|
|
1024
|
+
// bookside.slice (0, 9);
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
formatNumber(data) {
|
|
1028
|
+
const parts = data.split('.');
|
|
1029
|
+
const integer = this.safeString(parts, 0);
|
|
1030
|
+
const decimals = this.safeString(parts, 1, '');
|
|
1031
|
+
let joinedResult = integer + decimals;
|
|
1032
|
+
let i = 0;
|
|
1033
|
+
while (joinedResult[i] === '0') {
|
|
1034
|
+
i += 1;
|
|
1035
|
+
}
|
|
1036
|
+
if (i > 0) {
|
|
1037
|
+
joinedResult = joinedResult.slice(i);
|
|
1038
|
+
}
|
|
1039
|
+
return joinedResult;
|
|
1040
|
+
}
|
|
1041
|
+
handleSystemStatus(client, message) {
|
|
1042
|
+
//
|
|
1043
|
+
// todo: answer the question whether handleSystemStatus should be renamed
|
|
1044
|
+
// and unified as handleStatus for any usage pattern that
|
|
1045
|
+
// involves system status and maintenance updates
|
|
1046
|
+
//
|
|
1047
|
+
// {
|
|
1048
|
+
// "connectionID": 15527282728335292000,
|
|
1049
|
+
// "event": "systemStatus",
|
|
1050
|
+
// "status": "online", // online|maintenance|(custom status tbd)
|
|
1051
|
+
// "version": "0.2.0"
|
|
1052
|
+
// }
|
|
1053
|
+
//
|
|
1054
|
+
// v2
|
|
1055
|
+
// {
|
|
1056
|
+
// channel: 'status',
|
|
1057
|
+
// type: 'update',
|
|
1058
|
+
// data: [
|
|
1059
|
+
// {
|
|
1060
|
+
// version: '2.0.10',
|
|
1061
|
+
// system: 'online',
|
|
1062
|
+
// api_version: 'v2',
|
|
1063
|
+
// connection_id: 6447481662169813000
|
|
1064
|
+
// }
|
|
1065
|
+
// ]
|
|
1066
|
+
// }
|
|
1067
|
+
//
|
|
1068
|
+
return message;
|
|
1069
|
+
}
|
|
1070
|
+
async authenticate(params = {}) {
|
|
1071
|
+
const url = this.urls['api']['ws']['private'];
|
|
1072
|
+
const client = this.client(url);
|
|
1073
|
+
const authenticated = 'authenticated';
|
|
1074
|
+
let subscription = this.safeValue(client.subscriptions, authenticated);
|
|
1075
|
+
const now = this.seconds();
|
|
1076
|
+
const start = this.safeInteger(subscription, 'start');
|
|
1077
|
+
const expires = this.safeInteger(subscription, 'expires');
|
|
1078
|
+
if ((subscription === undefined) || ((subscription !== undefined) && (start + expires) <= now)) {
|
|
1079
|
+
// https://docs.kraken.com/api/docs/rest-api/get-websockets-token
|
|
1080
|
+
const response = await this.privatePostGetWebSocketsToken(params);
|
|
1081
|
+
//
|
|
1082
|
+
// {
|
|
1083
|
+
// "error":[],
|
|
1084
|
+
// "result":{
|
|
1085
|
+
// "token":"xeAQ\/RCChBYNVh53sTv1yZ5H4wIbwDF20PiHtTF+4UI",
|
|
1086
|
+
// "expires":900
|
|
1087
|
+
// }
|
|
1088
|
+
// }
|
|
1089
|
+
//
|
|
1090
|
+
subscription = this.safeDict(response, 'result');
|
|
1091
|
+
subscription['start'] = now;
|
|
1092
|
+
client.subscriptions[authenticated] = subscription;
|
|
1093
|
+
}
|
|
1094
|
+
return this.safeString(subscription, 'token');
|
|
1095
|
+
}
|
|
1096
|
+
async watchPrivate(name, symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1097
|
+
await this.loadMarkets();
|
|
1098
|
+
const token = await this.authenticate();
|
|
1099
|
+
const subscriptionHash = name;
|
|
1100
|
+
let messageHash = name;
|
|
1101
|
+
if (symbol !== undefined) {
|
|
1102
|
+
symbol = this.symbol(symbol);
|
|
1103
|
+
messageHash += ':' + symbol;
|
|
1104
|
+
}
|
|
1105
|
+
const url = this.urls['api']['ws']['private'];
|
|
1106
|
+
const requestId = this.requestId();
|
|
1107
|
+
const subscribe = {
|
|
1108
|
+
'event': 'subscribe',
|
|
1109
|
+
'reqid': requestId,
|
|
1110
|
+
'subscription': {
|
|
1111
|
+
'name': name,
|
|
1112
|
+
'token': token,
|
|
1113
|
+
},
|
|
1114
|
+
};
|
|
1115
|
+
const request = this.deepExtend(subscribe, params);
|
|
1116
|
+
const result = await this.watch(url, messageHash, request, subscriptionHash);
|
|
1117
|
+
if (this.newUpdates) {
|
|
1118
|
+
limit = result.getLimit(symbol, limit);
|
|
1119
|
+
}
|
|
1120
|
+
return this.filterBySymbolSinceLimit(result, symbol, since, limit);
|
|
1121
|
+
}
|
|
1122
|
+
/**
|
|
1123
|
+
* @method
|
|
1124
|
+
* @name kraken#watchMyTrades
|
|
1125
|
+
* @description watches information on multiple trades made by the user
|
|
1126
|
+
* @see https://docs.kraken.com/api/docs/websocket-v1/owntrades
|
|
1127
|
+
* @param {string} symbol unified market symbol of the market trades were made in
|
|
1128
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1129
|
+
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
1130
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1131
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
1132
|
+
*/
|
|
1133
|
+
async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1134
|
+
return await this.watchPrivate('ownTrades', symbol, since, limit, params);
|
|
1135
|
+
}
|
|
1136
|
+
handleMyTrades(client, message, subscription = undefined) {
|
|
1137
|
+
//
|
|
1138
|
+
// [
|
|
1139
|
+
// [
|
|
1140
|
+
// {
|
|
1141
|
+
// "TT5UC3-GOIRW-6AZZ6R": {
|
|
1142
|
+
// "cost": "1493.90107",
|
|
1143
|
+
// "fee": "3.88415",
|
|
1144
|
+
// "margin": "0.00000",
|
|
1145
|
+
// "ordertxid": "OTLAS3-RRHUF-NDWH5A",
|
|
1146
|
+
// "ordertype": "market",
|
|
1147
|
+
// "pair": "XBT/USDT",
|
|
1148
|
+
// "postxid": "TKH2SE-M7IF5-CFI7LT",
|
|
1149
|
+
// "price": "6851.50005",
|
|
1150
|
+
// "time": "1586822919.335498",
|
|
1151
|
+
// "type": "sell",
|
|
1152
|
+
// "vol": "0.21804000"
|
|
1153
|
+
// }
|
|
1154
|
+
// },
|
|
1155
|
+
// {
|
|
1156
|
+
// "TIY6G4-LKLAI-Y3GD4A": {
|
|
1157
|
+
// "cost": "22.17134",
|
|
1158
|
+
// "fee": "0.05765",
|
|
1159
|
+
// "margin": "0.00000",
|
|
1160
|
+
// "ordertxid": "ODQXS7-MOLK6-ICXKAA",
|
|
1161
|
+
// "ordertype": "market",
|
|
1162
|
+
// "pair": "ETH/USD",
|
|
1163
|
+
// "postxid": "TKH2SE-M7IF5-CFI7LT",
|
|
1164
|
+
// "price": "169.97999",
|
|
1165
|
+
// "time": "1586340530.895739",
|
|
1166
|
+
// "type": "buy",
|
|
1167
|
+
// "vol": "0.13043500"
|
|
1168
|
+
// }
|
|
1169
|
+
// },
|
|
1170
|
+
// ],
|
|
1171
|
+
// "ownTrades",
|
|
1172
|
+
// { sequence: 1 }
|
|
1173
|
+
// ]
|
|
1174
|
+
//
|
|
1175
|
+
const allTrades = this.safeValue(message, 0, []);
|
|
1176
|
+
const allTradesLength = allTrades.length;
|
|
1177
|
+
if (allTradesLength > 0) {
|
|
1178
|
+
if (this.myTrades === undefined) {
|
|
1179
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
1180
|
+
this.myTrades = new ArrayCache(limit);
|
|
1181
|
+
}
|
|
1182
|
+
const stored = this.myTrades;
|
|
1183
|
+
const symbols = {};
|
|
1184
|
+
for (let i = 0; i < allTrades.length; i++) {
|
|
1185
|
+
const trades = this.safeValue(allTrades, i, {});
|
|
1186
|
+
const ids = Object.keys(trades);
|
|
1187
|
+
for (let j = 0; j < ids.length; j++) {
|
|
1188
|
+
const id = ids[j];
|
|
1189
|
+
const trade = trades[id];
|
|
1190
|
+
const parsed = this.parseWsTrade(this.extend({ 'id': id }, trade));
|
|
1191
|
+
stored.append(parsed);
|
|
1192
|
+
const symbol = parsed['symbol'];
|
|
1193
|
+
symbols[symbol] = true;
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
const name = 'ownTrades';
|
|
1197
|
+
client.resolve(this.myTrades, name);
|
|
1198
|
+
const keys = Object.keys(symbols);
|
|
1199
|
+
for (let i = 0; i < keys.length; i++) {
|
|
1200
|
+
const messageHash = name + ':' + keys[i];
|
|
1201
|
+
client.resolve(this.myTrades, messageHash);
|
|
1202
|
+
}
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
parseWsTrade(trade, market = undefined) {
|
|
1206
|
+
//
|
|
1207
|
+
// {
|
|
1208
|
+
// "id": "TIMIRG-WUNNE-RRJ6GT", // injected from outside
|
|
1209
|
+
// "ordertxid": "OQRPN2-LRHFY-HIFA7D",
|
|
1210
|
+
// "postxid": "TKH2SE-M7IF5-CFI7LT",
|
|
1211
|
+
// "pair": "USDCUSDT",
|
|
1212
|
+
// "time": 1586340086.457,
|
|
1213
|
+
// "type": "sell",
|
|
1214
|
+
// "ordertype": "market",
|
|
1215
|
+
// "price": "0.99860000",
|
|
1216
|
+
// "cost": "22.16892001",
|
|
1217
|
+
// "fee": "0.04433784",
|
|
1218
|
+
// "vol": "22.20000000",
|
|
1219
|
+
// "margin": "0.00000000",
|
|
1220
|
+
// "misc": ''
|
|
1221
|
+
// }
|
|
1222
|
+
//
|
|
1223
|
+
// {
|
|
1224
|
+
// "id": "TIY6G4-LKLAI-Y3GD4A",
|
|
1225
|
+
// "cost": "22.17134",
|
|
1226
|
+
// "fee": "0.05765",
|
|
1227
|
+
// "margin": "0.00000",
|
|
1228
|
+
// "ordertxid": "ODQXS7-MOLK6-ICXKAA",
|
|
1229
|
+
// "ordertype": "market",
|
|
1230
|
+
// "pair": "ETH/USD",
|
|
1231
|
+
// "postxid": "TKH2SE-M7IF5-CFI7LT",
|
|
1232
|
+
// "price": "169.97999",
|
|
1233
|
+
// "time": "1586340530.895739",
|
|
1234
|
+
// "type": "buy",
|
|
1235
|
+
// "vol": "0.13043500"
|
|
1236
|
+
// }
|
|
1237
|
+
//
|
|
1238
|
+
const wsName = this.safeString(trade, 'pair');
|
|
1239
|
+
market = this.safeValue(this.options['marketsByWsName'], wsName, market);
|
|
1240
|
+
let symbol = undefined;
|
|
1241
|
+
const orderId = this.safeString(trade, 'ordertxid');
|
|
1242
|
+
const id = this.safeString2(trade, 'id', 'postxid');
|
|
1243
|
+
const timestamp = this.safeTimestamp(trade, 'time');
|
|
1244
|
+
const side = this.safeString(trade, 'type');
|
|
1245
|
+
const type = this.safeString(trade, 'ordertype');
|
|
1246
|
+
const price = this.safeFloat(trade, 'price');
|
|
1247
|
+
const amount = this.safeFloat(trade, 'vol');
|
|
1248
|
+
let cost = undefined;
|
|
1249
|
+
let fee = undefined;
|
|
1250
|
+
if ('fee' in trade) {
|
|
1251
|
+
let currency = undefined;
|
|
1252
|
+
if (market !== undefined) {
|
|
1253
|
+
currency = market['quote'];
|
|
1254
|
+
}
|
|
1255
|
+
fee = {
|
|
1256
|
+
'cost': this.safeFloat(trade, 'fee'),
|
|
1257
|
+
'currency': currency,
|
|
1258
|
+
};
|
|
1259
|
+
}
|
|
1260
|
+
if (market !== undefined) {
|
|
1261
|
+
symbol = market['symbol'];
|
|
1262
|
+
}
|
|
1263
|
+
if (price !== undefined) {
|
|
1264
|
+
if (amount !== undefined) {
|
|
1265
|
+
cost = price * amount;
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
return {
|
|
1269
|
+
'id': id,
|
|
1270
|
+
'order': orderId,
|
|
1271
|
+
'info': trade,
|
|
1272
|
+
'timestamp': timestamp,
|
|
1273
|
+
'datetime': this.iso8601(timestamp),
|
|
1274
|
+
'symbol': symbol,
|
|
1275
|
+
'type': type,
|
|
1276
|
+
'side': side,
|
|
1277
|
+
'takerOrMaker': undefined,
|
|
1278
|
+
'price': price,
|
|
1279
|
+
'amount': amount,
|
|
1280
|
+
'cost': cost,
|
|
1281
|
+
'fee': fee,
|
|
1282
|
+
};
|
|
1283
|
+
}
|
|
1284
|
+
/**
|
|
1285
|
+
* @method
|
|
1286
|
+
* @name kraken#watchOrders
|
|
1287
|
+
* @see https://docs.kraken.com/api/docs/websocket-v1/openorders
|
|
1288
|
+
* @description watches information on multiple orders made by the user
|
|
1289
|
+
* @param {string} symbol unified market symbol of the market orders were made in
|
|
1290
|
+
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
1291
|
+
* @param {int} [limit] the maximum number of orde structures to retrieve
|
|
1292
|
+
* @param {object} [params] maximum number of orderic to the exchange API endpoint
|
|
1293
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1294
|
+
*/
|
|
1295
|
+
async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1296
|
+
return await this.watchPrivate('openOrders', symbol, since, limit, params);
|
|
1297
|
+
}
|
|
1298
|
+
handleOrders(client, message, subscription = undefined) {
|
|
1299
|
+
//
|
|
1300
|
+
// [
|
|
1301
|
+
// [
|
|
1302
|
+
// {
|
|
1303
|
+
// "OGTT3Y-C6I3P-XRI6HX": {
|
|
1304
|
+
// "cost": "0.00000",
|
|
1305
|
+
// "descr": {
|
|
1306
|
+
// "close": "",
|
|
1307
|
+
// "leverage": "0:1",
|
|
1308
|
+
// "order": "sell 10.00345345 XBT/EUR @ limit 34.50000 with 0:1 leverage",
|
|
1309
|
+
// "ordertype": "limit",
|
|
1310
|
+
// "pair": "XBT/EUR",
|
|
1311
|
+
// "price": "34.50000",
|
|
1312
|
+
// "price2": "0.00000",
|
|
1313
|
+
// "type": "sell"
|
|
1314
|
+
// },
|
|
1315
|
+
// "expiretm": "0.000000",
|
|
1316
|
+
// "fee": "0.00000",
|
|
1317
|
+
// "limitprice": "34.50000",
|
|
1318
|
+
// "misc": "",
|
|
1319
|
+
// "oflags": "fcib",
|
|
1320
|
+
// "opentm": "0.000000",
|
|
1321
|
+
// "price": "34.50000",
|
|
1322
|
+
// "refid": "OKIVMP-5GVZN-Z2D2UA",
|
|
1323
|
+
// "starttm": "0.000000",
|
|
1324
|
+
// "status": "open",
|
|
1325
|
+
// "stopprice": "0.000000",
|
|
1326
|
+
// "userref": 0,
|
|
1327
|
+
// "vol": "10.00345345",
|
|
1328
|
+
// "vol_exec": "0.00000000"
|
|
1329
|
+
// }
|
|
1330
|
+
// },
|
|
1331
|
+
// {
|
|
1332
|
+
// "OGTT3Y-C6I3P-XRI6HX": {
|
|
1333
|
+
// "cost": "0.00000",
|
|
1334
|
+
// "descr": {
|
|
1335
|
+
// "close": "",
|
|
1336
|
+
// "leverage": "0:1",
|
|
1337
|
+
// "order": "sell 0.00000010 XBT/EUR @ limit 5334.60000 with 0:1 leverage",
|
|
1338
|
+
// "ordertype": "limit",
|
|
1339
|
+
// "pair": "XBT/EUR",
|
|
1340
|
+
// "price": "5334.60000",
|
|
1341
|
+
// "price2": "0.00000",
|
|
1342
|
+
// "type": "sell"
|
|
1343
|
+
// },
|
|
1344
|
+
// "expiretm": "0.000000",
|
|
1345
|
+
// "fee": "0.00000",
|
|
1346
|
+
// "limitprice": "5334.60000",
|
|
1347
|
+
// "misc": "",
|
|
1348
|
+
// "oflags": "fcib",
|
|
1349
|
+
// "opentm": "0.000000",
|
|
1350
|
+
// "price": "5334.60000",
|
|
1351
|
+
// "refid": "OKIVMP-5GVZN-Z2D2UA",
|
|
1352
|
+
// "starttm": "0.000000",
|
|
1353
|
+
// "status": "open",
|
|
1354
|
+
// "stopprice": "0.000000",
|
|
1355
|
+
// "userref": 0,
|
|
1356
|
+
// "vol": "0.00000010",
|
|
1357
|
+
// "vol_exec": "0.00000000"
|
|
1358
|
+
// }
|
|
1359
|
+
// },
|
|
1360
|
+
// ],
|
|
1361
|
+
// "openOrders",
|
|
1362
|
+
// { "sequence": 234 }
|
|
1363
|
+
// ]
|
|
1364
|
+
//
|
|
1365
|
+
// status-change
|
|
1366
|
+
//
|
|
1367
|
+
// [
|
|
1368
|
+
// [
|
|
1369
|
+
// { "OGTT3Y-C6I3P-XRI6HX": { "status": "closed" }},
|
|
1370
|
+
// { "OGTT3Y-C6I3P-XRI6HX": { "status": "closed" }},
|
|
1371
|
+
// ],
|
|
1372
|
+
// "openOrders",
|
|
1373
|
+
// { "sequence": 59342 }
|
|
1374
|
+
// ]
|
|
1375
|
+
//
|
|
1376
|
+
const allOrders = this.safeValue(message, 0, []);
|
|
1377
|
+
const allOrdersLength = allOrders.length;
|
|
1378
|
+
if (allOrdersLength > 0) {
|
|
1379
|
+
const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
|
|
1380
|
+
if (this.orders === undefined) {
|
|
1381
|
+
this.orders = new ArrayCacheBySymbolById(limit);
|
|
1382
|
+
}
|
|
1383
|
+
const stored = this.orders;
|
|
1384
|
+
const symbols = {};
|
|
1385
|
+
for (let i = 0; i < allOrders.length; i++) {
|
|
1386
|
+
const orders = this.safeValue(allOrders, i, {});
|
|
1387
|
+
const ids = Object.keys(orders);
|
|
1388
|
+
for (let j = 0; j < ids.length; j++) {
|
|
1389
|
+
const id = ids[j];
|
|
1390
|
+
const order = orders[id];
|
|
1391
|
+
const parsed = this.parseWsOrder(order);
|
|
1392
|
+
parsed['id'] = id;
|
|
1393
|
+
let symbol = undefined;
|
|
1394
|
+
const symbolsByOrderId = this.safeValue(this.options, 'symbolsByOrderId', {});
|
|
1395
|
+
if (parsed['symbol'] !== undefined) {
|
|
1396
|
+
symbol = parsed['symbol'];
|
|
1397
|
+
symbolsByOrderId[id] = symbol;
|
|
1398
|
+
this.options['symbolsByOrderId'] = symbolsByOrderId;
|
|
1399
|
+
}
|
|
1400
|
+
else {
|
|
1401
|
+
symbol = this.safeString(symbolsByOrderId, id);
|
|
1402
|
+
}
|
|
1403
|
+
const previousOrders = this.safeValue(stored.hashmap, symbol);
|
|
1404
|
+
const previousOrder = this.safeValue(previousOrders, id);
|
|
1405
|
+
let newOrder = parsed;
|
|
1406
|
+
if (previousOrder !== undefined) {
|
|
1407
|
+
const newRawOrder = this.extend(previousOrder['info'], newOrder['info']);
|
|
1408
|
+
newOrder = this.parseWsOrder(newRawOrder);
|
|
1409
|
+
newOrder['id'] = id;
|
|
1410
|
+
}
|
|
1411
|
+
const length = stored.length;
|
|
1412
|
+
if (length === limit && (previousOrder === undefined)) {
|
|
1413
|
+
const first = stored[0];
|
|
1414
|
+
if (first['id'] in symbolsByOrderId) {
|
|
1415
|
+
delete symbolsByOrderId[first['id']];
|
|
1416
|
+
}
|
|
1417
|
+
}
|
|
1418
|
+
stored.append(newOrder);
|
|
1419
|
+
symbols[symbol] = true;
|
|
1420
|
+
}
|
|
1421
|
+
}
|
|
1422
|
+
const name = 'openOrders';
|
|
1423
|
+
client.resolve(this.orders, name);
|
|
1424
|
+
const keys = Object.keys(symbols);
|
|
1425
|
+
for (let i = 0; i < keys.length; i++) {
|
|
1426
|
+
const messageHash = name + ':' + keys[i];
|
|
1427
|
+
client.resolve(this.orders, messageHash);
|
|
1428
|
+
}
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
parseWsOrder(order, market = undefined) {
|
|
1432
|
+
//
|
|
1433
|
+
// createOrder
|
|
1434
|
+
// {
|
|
1435
|
+
// "avg_price": "0.00000",
|
|
1436
|
+
// "cost": "0.00000",
|
|
1437
|
+
// "descr": {
|
|
1438
|
+
// "close": null,
|
|
1439
|
+
// "leverage": null,
|
|
1440
|
+
// "order": "sell 0.01000000 ETH/USDT @ limit 1900.00000",
|
|
1441
|
+
// "ordertype": "limit",
|
|
1442
|
+
// "pair": "ETH/USDT",
|
|
1443
|
+
// "price": "1900.00000",
|
|
1444
|
+
// "price2": "0.00000",
|
|
1445
|
+
// "type": "sell"
|
|
1446
|
+
// },
|
|
1447
|
+
// "expiretm": null,
|
|
1448
|
+
// "fee": "0.00000",
|
|
1449
|
+
// "limitprice": "0.00000",
|
|
1450
|
+
// "misc": '',
|
|
1451
|
+
// "oflags": "fciq",
|
|
1452
|
+
// "opentm": "1667522705.757622",
|
|
1453
|
+
// "refid": null,
|
|
1454
|
+
// "starttm": null,
|
|
1455
|
+
// "status": "open",
|
|
1456
|
+
// "stopprice": "0.00000",
|
|
1457
|
+
// "timeinforce": "GTC",
|
|
1458
|
+
// "userref": 0,
|
|
1459
|
+
// "vol": "0.01000000",
|
|
1460
|
+
// "vol_exec": "0.00000000"
|
|
1461
|
+
// }
|
|
1462
|
+
//
|
|
1463
|
+
const description = this.safeValue(order, 'descr', {});
|
|
1464
|
+
const orderDescription = this.safeString(description, 'order');
|
|
1465
|
+
let side = undefined;
|
|
1466
|
+
let type = undefined;
|
|
1467
|
+
let wsName = undefined;
|
|
1468
|
+
let price = undefined;
|
|
1469
|
+
let amount = undefined;
|
|
1470
|
+
if (orderDescription !== undefined) {
|
|
1471
|
+
const parts = orderDescription.split(' ');
|
|
1472
|
+
side = this.safeString(parts, 0);
|
|
1473
|
+
amount = this.safeString(parts, 1);
|
|
1474
|
+
wsName = this.safeString(parts, 2);
|
|
1475
|
+
type = this.safeString(parts, 4);
|
|
1476
|
+
price = this.safeString(parts, 5);
|
|
1477
|
+
}
|
|
1478
|
+
side = this.safeString(description, 'type', side);
|
|
1479
|
+
type = this.safeString(description, 'ordertype', type);
|
|
1480
|
+
wsName = this.safeString(description, 'pair', wsName);
|
|
1481
|
+
market = this.safeValue(this.options['marketsByWsName'], wsName, market);
|
|
1482
|
+
let symbol = undefined;
|
|
1483
|
+
const timestamp = this.safeTimestamp(order, 'opentm');
|
|
1484
|
+
amount = this.safeString(order, 'vol', amount);
|
|
1485
|
+
const filled = this.safeString(order, 'vol_exec');
|
|
1486
|
+
let fee = undefined;
|
|
1487
|
+
const cost = this.safeString(order, 'cost');
|
|
1488
|
+
price = this.safeString(description, 'price', price);
|
|
1489
|
+
if ((price === undefined) || (Precise.stringEq(price, '0.0'))) {
|
|
1490
|
+
price = this.safeString(description, 'price2');
|
|
1491
|
+
}
|
|
1492
|
+
if ((price === undefined) || (Precise.stringEq(price, '0.0'))) {
|
|
1493
|
+
price = this.safeString(order, 'price', price);
|
|
1494
|
+
}
|
|
1495
|
+
const average = this.safeString2(order, 'avg_price', 'price');
|
|
1496
|
+
if (market !== undefined) {
|
|
1497
|
+
symbol = market['symbol'];
|
|
1498
|
+
if ('fee' in order) {
|
|
1499
|
+
const flags = order['oflags'];
|
|
1500
|
+
const feeCost = this.safeString(order, 'fee');
|
|
1501
|
+
fee = {
|
|
1502
|
+
'cost': feeCost,
|
|
1503
|
+
'rate': undefined,
|
|
1504
|
+
};
|
|
1505
|
+
if (flags.indexOf('fciq') >= 0) {
|
|
1506
|
+
fee['currency'] = market['quote'];
|
|
1507
|
+
}
|
|
1508
|
+
else if (flags.indexOf('fcib') >= 0) {
|
|
1509
|
+
fee['currency'] = market['base'];
|
|
1510
|
+
}
|
|
1511
|
+
}
|
|
1512
|
+
}
|
|
1513
|
+
const status = this.parseOrderStatus(this.safeString(order, 'status'));
|
|
1514
|
+
let id = this.safeString(order, 'id');
|
|
1515
|
+
if (id === undefined) {
|
|
1516
|
+
const txid = this.safeValue(order, 'txid');
|
|
1517
|
+
id = this.safeString(txid, 0);
|
|
1518
|
+
}
|
|
1519
|
+
const clientOrderId = this.safeString(order, 'userref');
|
|
1520
|
+
const rawTrades = this.safeValue(order, 'trades');
|
|
1521
|
+
let trades = undefined;
|
|
1522
|
+
if (rawTrades !== undefined) {
|
|
1523
|
+
trades = this.parseTrades(rawTrades, market, undefined, undefined, { 'order': id });
|
|
1524
|
+
}
|
|
1525
|
+
const stopPrice = this.safeNumber(order, 'stopprice');
|
|
1526
|
+
return this.safeOrder({
|
|
1527
|
+
'id': id,
|
|
1528
|
+
'clientOrderId': clientOrderId,
|
|
1529
|
+
'info': order,
|
|
1530
|
+
'timestamp': timestamp,
|
|
1531
|
+
'datetime': this.iso8601(timestamp),
|
|
1532
|
+
'lastTradeTimestamp': undefined,
|
|
1533
|
+
'status': status,
|
|
1534
|
+
'symbol': symbol,
|
|
1535
|
+
'type': type,
|
|
1536
|
+
'timeInForce': undefined,
|
|
1537
|
+
'postOnly': undefined,
|
|
1538
|
+
'side': side,
|
|
1539
|
+
'price': price,
|
|
1540
|
+
'stopPrice': stopPrice,
|
|
1541
|
+
'triggerPrice': stopPrice,
|
|
1542
|
+
'cost': cost,
|
|
1543
|
+
'amount': amount,
|
|
1544
|
+
'filled': filled,
|
|
1545
|
+
'average': average,
|
|
1546
|
+
'remaining': undefined,
|
|
1547
|
+
'fee': fee,
|
|
1548
|
+
'trades': trades,
|
|
1549
|
+
});
|
|
1550
|
+
}
|
|
1551
|
+
async watchMultiHelper(unifiedName, channelName, symbols = undefined, subscriptionArgs = undefined, params = {}) {
|
|
1552
|
+
await this.loadMarkets();
|
|
1553
|
+
// symbols are required
|
|
1554
|
+
symbols = this.marketSymbols(symbols, undefined, false, true, false);
|
|
1555
|
+
const messageHashes = [];
|
|
1556
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
1557
|
+
const eventTrigger = this.safeString(params, 'event_trigger');
|
|
1558
|
+
if (eventTrigger !== undefined) {
|
|
1559
|
+
messageHashes.push(this.getMessageHash(channelName, undefined, this.symbol(symbols[i])));
|
|
1560
|
+
}
|
|
1561
|
+
else {
|
|
1562
|
+
messageHashes.push(this.getMessageHash(unifiedName, undefined, this.symbol(symbols[i])));
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
const request = {
|
|
1566
|
+
'method': 'subscribe',
|
|
1567
|
+
'params': {
|
|
1568
|
+
'channel': channelName,
|
|
1569
|
+
'symbol': symbols,
|
|
1570
|
+
},
|
|
1571
|
+
'req_id': this.requestId(),
|
|
1572
|
+
};
|
|
1573
|
+
request['params'] = this.deepExtend(request['params'], params);
|
|
1574
|
+
const url = this.urls['api']['ws']['publicV2'];
|
|
1575
|
+
return await this.watchMultiple(url, messageHashes, request, messageHashes, subscriptionArgs);
|
|
1576
|
+
}
|
|
1577
|
+
/**
|
|
1578
|
+
* @method
|
|
1579
|
+
* @name kraken#watchBalance
|
|
1580
|
+
* @description watch balance and get the amount of funds available for trading or funds locked in orders
|
|
1581
|
+
* @see https://docs.kraken.com/api/docs/websocket-v2/balances
|
|
1582
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1583
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
1584
|
+
*/
|
|
1585
|
+
async watchBalance(params = {}) {
|
|
1586
|
+
await this.loadMarkets();
|
|
1587
|
+
const token = await this.authenticate();
|
|
1588
|
+
const messageHash = 'balances';
|
|
1589
|
+
const url = this.urls['api']['ws']['privateV2'];
|
|
1590
|
+
const requestId = this.requestId();
|
|
1591
|
+
const subscribe = {
|
|
1592
|
+
'method': 'subscribe',
|
|
1593
|
+
'req_id': requestId,
|
|
1594
|
+
'params': {
|
|
1595
|
+
'channel': 'balances',
|
|
1596
|
+
'token': token,
|
|
1597
|
+
},
|
|
1598
|
+
};
|
|
1599
|
+
const request = this.deepExtend(subscribe, params);
|
|
1600
|
+
return await this.watch(url, messageHash, request, messageHash);
|
|
1601
|
+
}
|
|
1602
|
+
handleBalance(client, message) {
|
|
1603
|
+
//
|
|
1604
|
+
// {
|
|
1605
|
+
// "channel": "balances",
|
|
1606
|
+
// "data": [
|
|
1607
|
+
// {
|
|
1608
|
+
// "asset": "BTC",
|
|
1609
|
+
// "asset_class": "currency",
|
|
1610
|
+
// "balance": 1.2,
|
|
1611
|
+
// "wallets": [
|
|
1612
|
+
// {
|
|
1613
|
+
// "type": "spot",
|
|
1614
|
+
// "id": "main",
|
|
1615
|
+
// "balance": 1.2
|
|
1616
|
+
// }
|
|
1617
|
+
// ]
|
|
1618
|
+
// }
|
|
1619
|
+
// ],
|
|
1620
|
+
// "type": "snapshot",
|
|
1621
|
+
// "sequence": 1
|
|
1622
|
+
// }
|
|
1623
|
+
//
|
|
1624
|
+
const data = this.safeList(message, 'data', []);
|
|
1625
|
+
const result = { 'info': message };
|
|
1626
|
+
for (let i = 0; i < data.length; i++) {
|
|
1627
|
+
const currencyId = this.safeString(data[i], 'asset');
|
|
1628
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
1629
|
+
const account = this.account();
|
|
1630
|
+
const eq = this.safeString(data[i], 'balance');
|
|
1631
|
+
account['total'] = eq;
|
|
1632
|
+
result[code] = account;
|
|
1633
|
+
}
|
|
1634
|
+
const type = 'spot';
|
|
1635
|
+
const balance = this.safeBalance(result);
|
|
1636
|
+
const oldBalance = this.safeValue(this.balance, type, {});
|
|
1637
|
+
const newBalance = this.deepExtend(oldBalance, balance);
|
|
1638
|
+
this.balance[type] = this.safeBalance(newBalance);
|
|
1639
|
+
const channel = this.safeString(message, 'channel');
|
|
1640
|
+
client.resolve(this.balance[type], channel);
|
|
1641
|
+
}
|
|
1642
|
+
getMessageHash(unifiedElementName, subChannelName = undefined, symbol = undefined) {
|
|
1643
|
+
// unifiedElementName can be : orderbook, trade, ticker, bidask ...
|
|
1644
|
+
// subChannelName only applies to channel that needs specific variation (i.e. depth_50, depth_100..) to be selected
|
|
1645
|
+
const withSymbol = symbol !== undefined;
|
|
1646
|
+
let messageHash = unifiedElementName;
|
|
1647
|
+
if (!withSymbol) {
|
|
1648
|
+
messageHash += 's';
|
|
1649
|
+
}
|
|
1650
|
+
else {
|
|
1651
|
+
messageHash += '@' + symbol;
|
|
1652
|
+
}
|
|
1653
|
+
if (subChannelName !== undefined) {
|
|
1654
|
+
messageHash += '#' + subChannelName;
|
|
1655
|
+
}
|
|
1656
|
+
return messageHash;
|
|
1657
|
+
}
|
|
1658
|
+
handleSubscriptionStatus(client, message) {
|
|
1659
|
+
//
|
|
1660
|
+
// public
|
|
1661
|
+
//
|
|
1662
|
+
// {
|
|
1663
|
+
// "channelID": 210,
|
|
1664
|
+
// "channelName": "book-10",
|
|
1665
|
+
// "event": "subscriptionStatus",
|
|
1666
|
+
// "reqid": 1574146735269,
|
|
1667
|
+
// "pair": "ETH/XBT",
|
|
1668
|
+
// "status": "subscribed",
|
|
1669
|
+
// "subscription": { depth: 10, name: "book" }
|
|
1670
|
+
// }
|
|
1671
|
+
//
|
|
1672
|
+
// private
|
|
1673
|
+
//
|
|
1674
|
+
// {
|
|
1675
|
+
// "channelName": "openOrders",
|
|
1676
|
+
// "event": "subscriptionStatus",
|
|
1677
|
+
// "reqid": 1,
|
|
1678
|
+
// "status": "subscribed",
|
|
1679
|
+
// "subscription": { maxratecount: 125, name: "openOrders" }
|
|
1680
|
+
// }
|
|
1681
|
+
//
|
|
1682
|
+
const channelId = this.safeString(message, 'channelID');
|
|
1683
|
+
if (channelId !== undefined) {
|
|
1684
|
+
client.subscriptions[channelId] = message;
|
|
1685
|
+
}
|
|
1686
|
+
// const requestId = this.safeString (message, "reqid");
|
|
1687
|
+
// if (requestId in client.futures) {
|
|
1688
|
+
// delete client.futures[requestId];
|
|
1689
|
+
// }
|
|
1690
|
+
}
|
|
1691
|
+
handleErrorMessage(client, message) {
|
|
1692
|
+
//
|
|
1693
|
+
// {
|
|
1694
|
+
// "errorMessage": "Currency pair not in ISO 4217-A3 format foobar",
|
|
1695
|
+
// "event": "subscriptionStatus",
|
|
1696
|
+
// "pair": "foobar",
|
|
1697
|
+
// "reqid": 1574146735269,
|
|
1698
|
+
// "status": "error",
|
|
1699
|
+
// "subscription": { name: "ticker" }
|
|
1700
|
+
// }
|
|
1701
|
+
//
|
|
1702
|
+
// v2
|
|
1703
|
+
// {
|
|
1704
|
+
// "error": "Unsupported field: 'price' for the given msg type: add order",
|
|
1705
|
+
// "method": "add_order",
|
|
1706
|
+
// "success": false,
|
|
1707
|
+
// "time_in": "2025-05-13T08:59:44.803511Z",
|
|
1708
|
+
// "time_out": "2025-05-13T08:59:44.803542Z'
|
|
1709
|
+
// }
|
|
1710
|
+
//
|
|
1711
|
+
const errorMessage = this.safeString2(message, 'errorMessage', 'error');
|
|
1712
|
+
if (errorMessage !== undefined) {
|
|
1713
|
+
// const requestId = this.safeValue2 (message, 'reqid', 'req_id');
|
|
1714
|
+
const broad = this.exceptions['ws']['broad'];
|
|
1715
|
+
const broadKey = this.findBroadlyMatchedKey(broad, errorMessage);
|
|
1716
|
+
let exception = undefined;
|
|
1717
|
+
if (broadKey === undefined) {
|
|
1718
|
+
exception = new ExchangeError(errorMessage); // c# requirement to convert the errorMessage to string
|
|
1719
|
+
}
|
|
1720
|
+
else {
|
|
1721
|
+
exception = new broad[broadKey](errorMessage);
|
|
1722
|
+
}
|
|
1723
|
+
// if (requestId !== undefined) {
|
|
1724
|
+
// client.reject (exception, requestId);
|
|
1725
|
+
// } else {
|
|
1726
|
+
client.reject(exception);
|
|
1727
|
+
// }
|
|
1728
|
+
return false;
|
|
1729
|
+
}
|
|
1730
|
+
return true;
|
|
1731
|
+
}
|
|
1732
|
+
handleMessage(client, message) {
|
|
1733
|
+
if (Array.isArray(message)) {
|
|
1734
|
+
const channelId = this.safeString(message, 0);
|
|
1735
|
+
const subscription = this.safeValue(client.subscriptions, channelId, {});
|
|
1736
|
+
const info = this.safeValue(subscription, 'subscription', {});
|
|
1737
|
+
const messageLength = message.length;
|
|
1738
|
+
const channelName = this.safeString(message, messageLength - 2);
|
|
1739
|
+
const name = this.safeString(info, 'name');
|
|
1740
|
+
const methods = {
|
|
1741
|
+
// public
|
|
1742
|
+
'ohlc': this.handleOHLCV,
|
|
1743
|
+
// private
|
|
1744
|
+
'openOrders': this.handleOrders,
|
|
1745
|
+
'ownTrades': this.handleMyTrades,
|
|
1746
|
+
};
|
|
1747
|
+
const method = this.safeValue2(methods, name, channelName);
|
|
1748
|
+
if (method !== undefined) {
|
|
1749
|
+
method.call(this, client, message, subscription);
|
|
1750
|
+
}
|
|
1751
|
+
}
|
|
1752
|
+
else {
|
|
1753
|
+
const channel = this.safeString(message, 'channel');
|
|
1754
|
+
if (channel !== undefined) {
|
|
1755
|
+
const methods = {
|
|
1756
|
+
'balances': this.handleBalance,
|
|
1757
|
+
'book': this.handleOrderBook,
|
|
1758
|
+
'ticker': this.handleTicker,
|
|
1759
|
+
'trade': this.handleTrades,
|
|
1760
|
+
};
|
|
1761
|
+
const method = this.safeValue(methods, channel);
|
|
1762
|
+
if (method !== undefined) {
|
|
1763
|
+
method.call(this, client, message);
|
|
1764
|
+
}
|
|
1765
|
+
}
|
|
1766
|
+
if (this.handleErrorMessage(client, message)) {
|
|
1767
|
+
const event = this.safeString2(message, 'event', 'method');
|
|
1768
|
+
const methods = {
|
|
1769
|
+
'heartbeat': this.handleHeartbeat,
|
|
1770
|
+
'systemStatus': this.handleSystemStatus,
|
|
1771
|
+
'subscriptionStatus': this.handleSubscriptionStatus,
|
|
1772
|
+
'add_order': this.handleCreateEditOrder,
|
|
1773
|
+
'amend_order': this.handleCreateEditOrder,
|
|
1774
|
+
'cancel_order': this.handleCancelOrder,
|
|
1775
|
+
'cancel_all': this.handleCancelAllOrders,
|
|
1776
|
+
'pong': this.handlePong,
|
|
1777
|
+
};
|
|
1778
|
+
const method = this.safeValue(methods, event);
|
|
1779
|
+
if (method !== undefined) {
|
|
1780
|
+
method.call(this, client, message);
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1784
|
+
}
|
|
1785
|
+
}
|