ccxt 4.2.17 → 4.2.19
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 +9 -9
- package/dist/ccxt.browser.js +48992 -47725
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +12 -1
- package/dist/cjs/src/alpaca.js +18 -18
- package/dist/cjs/src/ascendex.js +13 -6
- package/dist/cjs/src/base/Exchange.js +266 -27
- package/dist/cjs/src/bigone.js +434 -168
- package/dist/cjs/src/binance.js +163 -34
- package/dist/cjs/src/binanceus.js +8 -0
- package/dist/cjs/src/bingx.js +183 -41
- package/dist/cjs/src/bitfinex.js +2 -3
- package/dist/cjs/src/bitget.js +59 -16
- package/dist/cjs/src/bitmart.js +5 -5
- package/dist/cjs/src/bitmex.js +4 -6
- package/dist/cjs/src/bitpanda.js +5 -1991
- package/dist/cjs/src/bitstamp.js +8 -0
- package/dist/cjs/src/bybit.js +27 -47
- package/dist/cjs/src/coinbase.js +176 -26
- package/dist/cjs/src/coincheck.js +1 -0
- package/dist/cjs/src/coinex.js +3 -0
- package/dist/cjs/src/coinlist.js +13 -6
- package/dist/cjs/src/coinone.js +2 -2
- package/dist/cjs/src/coinsph.js +4 -5
- package/dist/cjs/src/delta.js +7 -1
- package/dist/cjs/src/deribit.js +17 -4
- package/dist/cjs/src/gate.js +151 -169
- package/dist/cjs/src/gemini.js +1 -1
- package/dist/cjs/src/hitbtc.js +2 -3
- package/dist/cjs/src/htx.js +157 -7
- package/dist/cjs/src/huobijp.js +2 -3
- package/dist/cjs/src/independentreserve.js +7 -5
- package/dist/cjs/src/kraken.js +86 -54
- package/dist/cjs/src/kucoin.js +5 -0
- package/dist/cjs/src/kucoinfutures.js +131 -77
- package/dist/cjs/src/lbank.js +60 -33
- package/dist/cjs/src/luno.js +84 -2
- package/dist/cjs/src/mexc.js +3 -3
- package/dist/cjs/src/oceanex.js +1 -1
- package/dist/cjs/src/okx.js +23 -11
- package/dist/cjs/{js/src/bitpanda.js → src/onetrading.js} +39 -39
- package/dist/cjs/src/phemex.js +37 -27
- package/dist/cjs/src/poloniexfutures.js +1 -0
- package/dist/cjs/src/pro/binance.js +66 -25
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/bitpanda.js +5 -1330
- package/dist/cjs/src/pro/coinbase.js +4 -1
- package/dist/cjs/src/pro/coincheck.js +208 -0
- package/dist/cjs/src/pro/hitbtc.js +5 -4
- package/dist/cjs/src/pro/htx.js +6 -1
- package/dist/cjs/src/pro/kraken.js +1 -1
- package/dist/cjs/src/pro/krakenfutures.js +7 -1
- package/dist/cjs/src/pro/kucoin.js +46 -36
- package/dist/cjs/src/pro/kucoinfutures.js +45 -37
- package/dist/cjs/src/pro/lbank.js +881 -0
- package/dist/cjs/src/pro/okx.js +52 -2
- package/dist/cjs/{js/src/pro/bitpanda.js → src/pro/onetrading.js} +4 -7
- package/dist/cjs/src/pro/poloniex.js +2 -2
- package/dist/cjs/src/pro/poloniexfutures.js +43 -35
- package/dist/cjs/src/pro/woo.js +126 -0
- package/dist/cjs/src/probit.js +4 -2
- package/dist/cjs/src/upbit.js +12 -12
- package/dist/cjs/src/wavesexchange.js +1 -1
- package/dist/cjs/src/whitebit.js +1 -0
- package/dist/cjs/src/woo.js +56 -0
- package/js/ccxt.d.ts +14 -2
- package/js/ccxt.js +10 -2
- package/js/src/abstract/bitpanda.d.ts +4 -4
- package/js/src/abstract/bitstamp.d.ts +8 -0
- package/js/src/abstract/gate.d.ts +1 -0
- package/js/src/abstract/gateio.d.ts +1 -0
- package/js/src/abstract/htx.d.ts +3 -0
- package/js/src/abstract/huobi.d.ts +3 -0
- package/js/src/abstract/luno.d.ts +1 -0
- package/js/src/abstract/onetrading.d.ts +38 -0
- package/js/src/ascendex.js +2 -0
- package/js/src/base/Exchange.d.ts +2 -3
- package/js/src/base/Exchange.js +5 -2
- package/js/src/binance.js +7 -1
- package/js/src/bingx.d.ts +1 -0
- package/js/src/bingx.js +26 -0
- package/js/src/bitget.js +22 -3
- package/js/src/bitpanda.d.ts +2 -72
- package/js/src/bitpanda.js +5 -1991
- package/js/src/bitstamp.js +8 -0
- package/js/src/bybit.js +21 -47
- package/js/src/coincheck.js +1 -0
- package/js/src/deribit.js +16 -4
- package/js/src/gate.d.ts +1 -0
- package/js/src/gate.js +50 -110
- package/js/src/htx.js +3 -0
- package/js/src/kraken.d.ts +1 -0
- package/js/src/kraken.js +40 -39
- package/js/src/lbank.js +1 -0
- package/js/src/luno.d.ts +3 -1
- package/js/src/luno.js +84 -2
- package/js/src/mexc.js +1 -2
- package/js/src/onetrading.d.ts +74 -0
- package/js/src/onetrading.js +2003 -0
- package/js/src/poloniexfutures.js +1 -0
- package/js/src/pro/binance.js +7 -2
- package/js/src/pro/bitget.js +1 -1
- package/js/src/pro/bitpanda.d.ts +2 -34
- package/js/src/pro/bitpanda.js +5 -1330
- package/js/src/pro/coincheck.d.ts +12 -0
- package/js/src/pro/coincheck.js +209 -0
- package/js/src/pro/kucoin.js +43 -35
- package/js/src/pro/kucoinfutures.js +45 -37
- package/js/src/pro/lbank.d.ts +29 -0
- package/js/src/pro/lbank.js +882 -0
- package/js/src/pro/onetrading.d.ts +36 -0
- package/js/src/pro/onetrading.js +1339 -0
- package/js/src/pro/poloniexfutures.js +43 -35
- package/js/src/whitebit.js +1 -0
- package/package.json +2 -2
- package/rollup.config.js +2 -0
- package/skip-tests.json +14 -2
- package/test-commonjs.cjs +25 -1
- package/dist/cjs/js/ccxt.js +0 -476
- package/dist/cjs/js/src/abstract/alpaca.js +0 -9
- package/dist/cjs/js/src/abstract/ascendex.js +0 -9
- package/dist/cjs/js/src/abstract/bigone.js +0 -9
- package/dist/cjs/js/src/abstract/binance.js +0 -9
- package/dist/cjs/js/src/abstract/bingx.js +0 -9
- package/dist/cjs/js/src/abstract/bit2c.js +0 -9
- package/dist/cjs/js/src/abstract/bitbank.js +0 -9
- package/dist/cjs/js/src/abstract/bitbns.js +0 -9
- package/dist/cjs/js/src/abstract/bitfinex.js +0 -9
- package/dist/cjs/js/src/abstract/bitfinex2.js +0 -9
- package/dist/cjs/js/src/abstract/bitflyer.js +0 -9
- package/dist/cjs/js/src/abstract/bitforex.js +0 -9
- package/dist/cjs/js/src/abstract/bitget.js +0 -9
- package/dist/cjs/js/src/abstract/bithumb.js +0 -9
- package/dist/cjs/js/src/abstract/bitmart.js +0 -9
- package/dist/cjs/js/src/abstract/bitmex.js +0 -9
- package/dist/cjs/js/src/abstract/bitopro.js +0 -9
- package/dist/cjs/js/src/abstract/bitpanda.js +0 -9
- package/dist/cjs/js/src/abstract/bitrue.js +0 -9
- package/dist/cjs/js/src/abstract/bitso.js +0 -9
- package/dist/cjs/js/src/abstract/bitstamp.js +0 -9
- package/dist/cjs/js/src/abstract/bitteam.js +0 -9
- package/dist/cjs/js/src/abstract/bitvavo.js +0 -9
- package/dist/cjs/js/src/abstract/bl3p.js +0 -9
- package/dist/cjs/js/src/abstract/blockchaincom.js +0 -9
- package/dist/cjs/js/src/abstract/btcalpha.js +0 -9
- package/dist/cjs/js/src/abstract/btcbox.js +0 -9
- package/dist/cjs/js/src/abstract/btcmarkets.js +0 -9
- package/dist/cjs/js/src/abstract/btcturk.js +0 -9
- package/dist/cjs/js/src/abstract/bybit.js +0 -9
- package/dist/cjs/js/src/abstract/cex.js +0 -9
- package/dist/cjs/js/src/abstract/coinbase.js +0 -9
- package/dist/cjs/js/src/abstract/coinbasepro.js +0 -9
- package/dist/cjs/js/src/abstract/coincheck.js +0 -9
- package/dist/cjs/js/src/abstract/coinex.js +0 -9
- package/dist/cjs/js/src/abstract/coinlist.js +0 -9
- package/dist/cjs/js/src/abstract/coinmate.js +0 -9
- package/dist/cjs/js/src/abstract/coinone.js +0 -9
- package/dist/cjs/js/src/abstract/coinsph.js +0 -9
- package/dist/cjs/js/src/abstract/coinspot.js +0 -9
- package/dist/cjs/js/src/abstract/cryptocom.js +0 -9
- package/dist/cjs/js/src/abstract/currencycom.js +0 -9
- package/dist/cjs/js/src/abstract/delta.js +0 -9
- package/dist/cjs/js/src/abstract/deribit.js +0 -9
- package/dist/cjs/js/src/abstract/digifinex.js +0 -9
- package/dist/cjs/js/src/abstract/exmo.js +0 -9
- package/dist/cjs/js/src/abstract/gate.js +0 -9
- package/dist/cjs/js/src/abstract/gemini.js +0 -9
- package/dist/cjs/js/src/abstract/hitbtc.js +0 -9
- package/dist/cjs/js/src/abstract/hollaex.js +0 -9
- package/dist/cjs/js/src/abstract/htx.js +0 -9
- package/dist/cjs/js/src/abstract/huobijp.js +0 -9
- package/dist/cjs/js/src/abstract/idex.js +0 -9
- package/dist/cjs/js/src/abstract/independentreserve.js +0 -9
- package/dist/cjs/js/src/abstract/indodax.js +0 -9
- package/dist/cjs/js/src/abstract/kraken.js +0 -9
- package/dist/cjs/js/src/abstract/krakenfutures.js +0 -9
- package/dist/cjs/js/src/abstract/kucoin.js +0 -9
- package/dist/cjs/js/src/abstract/kucoinfutures.js +0 -9
- package/dist/cjs/js/src/abstract/kuna.js +0 -9
- package/dist/cjs/js/src/abstract/latoken.js +0 -9
- package/dist/cjs/js/src/abstract/lbank.js +0 -9
- package/dist/cjs/js/src/abstract/luno.js +0 -9
- package/dist/cjs/js/src/abstract/lykke.js +0 -9
- package/dist/cjs/js/src/abstract/mercado.js +0 -9
- package/dist/cjs/js/src/abstract/mexc.js +0 -9
- package/dist/cjs/js/src/abstract/ndax.js +0 -9
- package/dist/cjs/js/src/abstract/novadax.js +0 -9
- package/dist/cjs/js/src/abstract/oceanex.js +0 -9
- package/dist/cjs/js/src/abstract/okcoin.js +0 -9
- package/dist/cjs/js/src/abstract/okx.js +0 -9
- package/dist/cjs/js/src/abstract/p2b.js +0 -9
- package/dist/cjs/js/src/abstract/paymium.js +0 -9
- package/dist/cjs/js/src/abstract/phemex.js +0 -9
- package/dist/cjs/js/src/abstract/poloniex.js +0 -9
- package/dist/cjs/js/src/abstract/poloniexfutures.js +0 -9
- package/dist/cjs/js/src/abstract/probit.js +0 -9
- package/dist/cjs/js/src/abstract/timex.js +0 -9
- package/dist/cjs/js/src/abstract/tokocrypto.js +0 -9
- package/dist/cjs/js/src/abstract/upbit.js +0 -9
- package/dist/cjs/js/src/abstract/wavesexchange.js +0 -9
- package/dist/cjs/js/src/abstract/wazirx.js +0 -9
- package/dist/cjs/js/src/abstract/whitebit.js +0 -9
- package/dist/cjs/js/src/abstract/woo.js +0 -9
- package/dist/cjs/js/src/abstract/yobit.js +0 -9
- package/dist/cjs/js/src/abstract/zaif.js +0 -9
- package/dist/cjs/js/src/abstract/zonda.js +0 -9
- package/dist/cjs/js/src/ace.js +0 -1058
- package/dist/cjs/js/src/alpaca.js +0 -1125
- package/dist/cjs/js/src/ascendex.js +0 -3365
- package/dist/cjs/js/src/base/Exchange.js +0 -5257
- package/dist/cjs/js/src/base/Precise.js +0 -263
- package/dist/cjs/js/src/base/errors.js +0 -299
- package/dist/cjs/js/src/base/functions/crypto.js +0 -78
- package/dist/cjs/js/src/base/functions/encode.js +0 -44
- package/dist/cjs/js/src/base/functions/generic.js +0 -193
- package/dist/cjs/js/src/base/functions/misc.js +0 -96
- package/dist/cjs/js/src/base/functions/number.js +0 -297
- package/dist/cjs/js/src/base/functions/platform.js +0 -28
- package/dist/cjs/js/src/base/functions/rsa.js +0 -34
- package/dist/cjs/js/src/base/functions/string.js +0 -48
- package/dist/cjs/js/src/base/functions/throttle.js +0 -66
- package/dist/cjs/js/src/base/functions/time.js +0 -187
- package/dist/cjs/js/src/base/functions/totp.js +0 -24
- package/dist/cjs/js/src/base/functions/type.js +0 -162
- package/dist/cjs/js/src/base/functions.js +0 -157
- package/dist/cjs/js/src/base/ws/Cache.js +0 -254
- package/dist/cjs/js/src/base/ws/Client.js +0 -299
- package/dist/cjs/js/src/base/ws/Future.js +0 -34
- package/dist/cjs/js/src/base/ws/OrderBook.js +0 -107
- package/dist/cjs/js/src/base/ws/OrderBookSide.js +0 -281
- package/dist/cjs/js/src/base/ws/WsClient.js +0 -69
- package/dist/cjs/js/src/bequant.js +0 -33
- package/dist/cjs/js/src/bigone.js +0 -2213
- package/dist/cjs/js/src/binance.js +0 -9845
- package/dist/cjs/js/src/binancecoinm.js +0 -45
- package/dist/cjs/js/src/binanceus.js +0 -92
- package/dist/cjs/js/src/binanceusdm.js +0 -58
- package/dist/cjs/js/src/bingx.js +0 -3846
- package/dist/cjs/js/src/bit2c.js +0 -916
- package/dist/cjs/js/src/bitbank.js +0 -1000
- package/dist/cjs/js/src/bitbay.js +0 -17
- package/dist/cjs/js/src/bitbns.js +0 -1220
- package/dist/cjs/js/src/bitcoincom.js +0 -17
- package/dist/cjs/js/src/bitfinex.js +0 -1670
- package/dist/cjs/js/src/bitfinex2.js +0 -2990
- package/dist/cjs/js/src/bitflyer.js +0 -1045
- package/dist/cjs/js/src/bitforex.js +0 -852
- package/dist/cjs/js/src/bitget.js +0 -8295
- package/dist/cjs/js/src/bithumb.js +0 -1090
- package/dist/cjs/js/src/bitmart.js +0 -4454
- package/dist/cjs/js/src/bitmex.js +0 -2881
- package/dist/cjs/js/src/bitopro.js +0 -1724
- package/dist/cjs/js/src/bitrue.js +0 -3253
- package/dist/cjs/js/src/bitso.js +0 -1753
- package/dist/cjs/js/src/bitstamp.js +0 -2188
- package/dist/cjs/js/src/bitteam.js +0 -2309
- package/dist/cjs/js/src/bitvavo.js +0 -1968
- package/dist/cjs/js/src/bl3p.js +0 -447
- package/dist/cjs/js/src/blockchaincom.js +0 -1160
- package/dist/cjs/js/src/btcalpha.js +0 -929
- package/dist/cjs/js/src/btcbox.js +0 -565
- package/dist/cjs/js/src/btcmarkets.js +0 -1237
- package/dist/cjs/js/src/btcturk.js +0 -929
- package/dist/cjs/js/src/bybit.js +0 -7650
- package/dist/cjs/js/src/cex.js +0 -1693
- package/dist/cjs/js/src/coinbase.js +0 -3424
- package/dist/cjs/js/src/coinbasepro.js +0 -1866
- package/dist/cjs/js/src/coincheck.js +0 -843
- package/dist/cjs/js/src/coinex.js +0 -5417
- package/dist/cjs/js/src/coinlist.js +0 -2337
- package/dist/cjs/js/src/coinmate.js +0 -989
- package/dist/cjs/js/src/coinone.js +0 -1185
- package/dist/cjs/js/src/coinsph.js +0 -1933
- package/dist/cjs/js/src/coinspot.js +0 -548
- package/dist/cjs/js/src/cryptocom.js +0 -3007
- package/dist/cjs/js/src/currencycom.js +0 -2015
- package/dist/cjs/js/src/delta.js +0 -3262
- package/dist/cjs/js/src/deribit.js +0 -3306
- package/dist/cjs/js/src/digifinex.js +0 -4307
- package/dist/cjs/js/src/exmo.js +0 -2645
- package/dist/cjs/js/src/fmfwio.js +0 -34
- package/dist/cjs/js/src/gate.js +0 -7077
- package/dist/cjs/js/src/gateio.js +0 -16
- package/dist/cjs/js/src/gemini.js +0 -1801
- package/dist/cjs/js/src/hitbtc.js +0 -3660
- package/dist/cjs/js/src/hitbtc3.js +0 -19
- package/dist/cjs/js/src/hollaex.js +0 -1882
- package/dist/cjs/js/src/htx.js +0 -9174
- package/dist/cjs/js/src/huobi.js +0 -16
- package/dist/cjs/js/src/huobijp.js +0 -1918
- package/dist/cjs/js/src/idex.js +0 -1770
- package/dist/cjs/js/src/independentreserve.js +0 -761
- package/dist/cjs/js/src/indodax.js +0 -1069
- package/dist/cjs/js/src/kraken.js +0 -2891
- package/dist/cjs/js/src/krakenfutures.js +0 -2407
- package/dist/cjs/js/src/kucoin.js +0 -4494
- package/dist/cjs/js/src/kucoinfutures.js +0 -2529
- package/dist/cjs/js/src/kuna.js +0 -1949
- package/dist/cjs/js/src/latoken.js +0 -1729
- package/dist/cjs/js/src/lbank.js +0 -2851
- package/dist/cjs/js/src/luno.js +0 -1044
- package/dist/cjs/js/src/lykke.js +0 -1303
- package/dist/cjs/js/src/mercado.js +0 -897
- package/dist/cjs/js/src/mexc.js +0 -5407
- package/dist/cjs/js/src/ndax.js +0 -2450
- package/dist/cjs/js/src/novadax.js +0 -1556
- package/dist/cjs/js/src/oceanex.js +0 -964
- package/dist/cjs/js/src/okcoin.js +0 -3115
- package/dist/cjs/js/src/okx.js +0 -7331
- package/dist/cjs/js/src/p2b.js +0 -1243
- package/dist/cjs/js/src/paymium.js +0 -597
- package/dist/cjs/js/src/phemex.js +0 -4725
- package/dist/cjs/js/src/poloniex.js +0 -2356
- package/dist/cjs/js/src/poloniexfutures.js +0 -1794
- package/dist/cjs/js/src/pro/alpaca.js +0 -714
- package/dist/cjs/js/src/pro/ascendex.js +0 -957
- package/dist/cjs/js/src/pro/bequant.js +0 -33
- package/dist/cjs/js/src/pro/binance.js +0 -2796
- package/dist/cjs/js/src/pro/binancecoinm.js +0 -23
- package/dist/cjs/js/src/pro/binanceus.js +0 -51
- package/dist/cjs/js/src/pro/binanceusdm.js +0 -32
- package/dist/cjs/js/src/pro/bingx.js +0 -944
- package/dist/cjs/js/src/pro/bitcoincom.js +0 -29
- package/dist/cjs/js/src/pro/bitfinex.js +0 -672
- package/dist/cjs/js/src/pro/bitfinex2.js +0 -1159
- package/dist/cjs/js/src/pro/bitget.js +0 -1733
- package/dist/cjs/js/src/pro/bitmart.js +0 -1486
- package/dist/cjs/js/src/pro/bitmex.js +0 -1576
- package/dist/cjs/js/src/pro/bitopro.js +0 -327
- package/dist/cjs/js/src/pro/bitrue.js +0 -462
- package/dist/cjs/js/src/pro/bitstamp.js +0 -547
- package/dist/cjs/js/src/pro/bitvavo.js +0 -704
- package/dist/cjs/js/src/pro/blockchaincom.js +0 -794
- package/dist/cjs/js/src/pro/bybit.js +0 -1843
- package/dist/cjs/js/src/pro/cex.js +0 -1510
- package/dist/cjs/js/src/pro/coinbase.js +0 -561
- package/dist/cjs/js/src/pro/coinbasepro.js +0 -968
- package/dist/cjs/js/src/pro/coinex.js +0 -1095
- package/dist/cjs/js/src/pro/cryptocom.js +0 -1020
- package/dist/cjs/js/src/pro/currencycom.js +0 -563
- package/dist/cjs/js/src/pro/deribit.js +0 -825
- package/dist/cjs/js/src/pro/exmo.js +0 -658
- package/dist/cjs/js/src/pro/gate.js +0 -1316
- package/dist/cjs/js/src/pro/gateio.js +0 -16
- package/dist/cjs/js/src/pro/gemini.js +0 -649
- package/dist/cjs/js/src/pro/hitbtc.js +0 -1294
- package/dist/cjs/js/src/pro/hollaex.js +0 -597
- package/dist/cjs/js/src/pro/htx.js +0 -2388
- package/dist/cjs/js/src/pro/huobi.js +0 -16
- package/dist/cjs/js/src/pro/huobijp.js +0 -606
- package/dist/cjs/js/src/pro/idex.js +0 -714
- package/dist/cjs/js/src/pro/independentreserve.js +0 -280
- package/dist/cjs/js/src/pro/kraken.js +0 -1364
- package/dist/cjs/js/src/pro/krakenfutures.js +0 -1506
- package/dist/cjs/js/src/pro/kucoin.js +0 -1054
- package/dist/cjs/js/src/pro/kucoinfutures.js +0 -981
- package/dist/cjs/js/src/pro/luno.js +0 -322
- package/dist/cjs/js/src/pro/mexc.js +0 -1170
- package/dist/cjs/js/src/pro/ndax.js +0 -545
- package/dist/cjs/js/src/pro/okcoin.js +0 -760
- package/dist/cjs/js/src/pro/okx.js +0 -1608
- package/dist/cjs/js/src/pro/phemex.js +0 -1511
- package/dist/cjs/js/src/pro/poloniex.js +0 -1253
- package/dist/cjs/js/src/pro/poloniexfutures.js +0 -1014
- package/dist/cjs/js/src/pro/probit.js +0 -586
- package/dist/cjs/js/src/pro/upbit.js +0 -234
- package/dist/cjs/js/src/pro/wazirx.js +0 -776
- package/dist/cjs/js/src/pro/whitebit.js +0 -927
- package/dist/cjs/js/src/pro/woo.js +0 -895
- package/dist/cjs/js/src/probit.js +0 -1867
- package/dist/cjs/js/src/static_dependencies/fflake/browser.js +0 -401
- package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncrypt.js +0 -195
- package/dist/cjs/js/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +0 -308
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +0 -554
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +0 -94
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +0 -70
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +0 -91
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +0 -16
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +0 -1760
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +0 -52
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +0 -81
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +0 -376
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsbn/util.js +0 -70
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +0 -1580
- package/dist/cjs/js/src/static_dependencies/jsencrypt/lib/jsrsasign/yahoo.js +0 -74
- package/dist/cjs/js/src/static_dependencies/noble-curves/_shortw_utils.js +0 -24
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/curve.js +0 -158
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/edwards.js +0 -429
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +0 -176
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/modular.js +0 -324
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/montgomery.js +0 -163
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/utils.js +0 -245
- package/dist/cjs/js/src/static_dependencies/noble-curves/abstract/weierstrass.js +0 -1018
- package/dist/cjs/js/src/static_dependencies/noble-curves/ed25519.js +0 -383
- package/dist/cjs/js/src/static_dependencies/noble-curves/secp256k1.js +0 -258
- package/dist/cjs/js/src/static_dependencies/noble-hashes/_assert.js +0 -53
- package/dist/cjs/js/src/static_dependencies/noble-hashes/_sha2.js +0 -120
- package/dist/cjs/js/src/static_dependencies/noble-hashes/_u64.js +0 -69
- package/dist/cjs/js/src/static_dependencies/noble-hashes/crypto.js +0 -7
- package/dist/cjs/js/src/static_dependencies/noble-hashes/hmac.js +0 -83
- package/dist/cjs/js/src/static_dependencies/noble-hashes/md5.js +0 -240
- package/dist/cjs/js/src/static_dependencies/noble-hashes/sha1.js +0 -91
- package/dist/cjs/js/src/static_dependencies/noble-hashes/sha256.js +0 -130
- package/dist/cjs/js/src/static_dependencies/noble-hashes/sha3.js +0 -214
- package/dist/cjs/js/src/static_dependencies/noble-hashes/sha512.js +0 -239
- package/dist/cjs/js/src/static_dependencies/noble-hashes/utils.js +0 -93
- package/dist/cjs/js/src/static_dependencies/node-fetch/body.js +0 -354
- package/dist/cjs/js/src/static_dependencies/node-fetch/errors/abort-error.js +0 -16
- package/dist/cjs/js/src/static_dependencies/node-fetch/errors/base.js +0 -20
- package/dist/cjs/js/src/static_dependencies/node-fetch/errors/fetch-error.js +0 -30
- package/dist/cjs/js/src/static_dependencies/node-fetch/headers.js +0 -239
- package/dist/cjs/js/src/static_dependencies/node-fetch/index.js +0 -372
- package/dist/cjs/js/src/static_dependencies/node-fetch/request.js +0 -273
- package/dist/cjs/js/src/static_dependencies/node-fetch/response.js +0 -139
- package/dist/cjs/js/src/static_dependencies/node-fetch/utils/get-search.js +0 -14
- package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is-redirect.js +0 -16
- package/dist/cjs/js/src/static_dependencies/node-fetch/utils/is.js +0 -81
- package/dist/cjs/js/src/static_dependencies/node-fetch/utils/referrer.js +0 -292
- package/dist/cjs/js/src/static_dependencies/proxies/agent-base/index.js +0 -103
- package/dist/cjs/js/src/static_dependencies/proxies/http-proxy-agent/index.js +0 -140
- package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/index.js +0 -175
- package/dist/cjs/js/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +0 -95
- package/dist/cjs/js/src/static_dependencies/qs/index.cjs.js +0 -7
- package/dist/cjs/js/src/static_dependencies/scure-base/index.js +0 -383
- package/dist/cjs/js/src/timex.js +0 -1562
- package/dist/cjs/js/src/tokocrypto.js +0 -2542
- package/dist/cjs/js/src/upbit.js +0 -1844
- package/dist/cjs/js/src/wavesexchange.js +0 -2607
- package/dist/cjs/js/src/wazirx.js +0 -953
- package/dist/cjs/js/src/whitebit.js +0 -2309
- package/dist/cjs/js/src/woo.js +0 -2769
- package/dist/cjs/js/src/yobit.js +0 -1314
- package/dist/cjs/js/src/zaif.js +0 -736
- package/dist/cjs/js/src/zonda.js +0 -1883
- package/dist/cjs/src/abstract/bitpanda.js +0 -9
- package/test.ts +0 -0
- /package/dist/cjs/{js/src/abstract/ace.js → src/abstract/onetrading.js} +0 -0
- /package/dist/cjs/{js/src → src}/pro/coinone.js +0 -0
- /package/js/src/abstract/{bitpanda.js → onetrading.js} +0 -0
package/dist/cjs/js/src/yobit.js
DELETED
|
@@ -1,1314 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var yobit$1 = require('./abstract/yobit.js');
|
|
4
|
-
var errors = require('./base/errors.js');
|
|
5
|
-
var Precise = require('./base/Precise.js');
|
|
6
|
-
var number = require('./base/functions/number.js');
|
|
7
|
-
var sha512 = require('./static_dependencies/noble-hashes/sha512.js');
|
|
8
|
-
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
// ---------------------------------------------------------------------------
|
|
11
|
-
/**
|
|
12
|
-
* @class yobit
|
|
13
|
-
* @augments Exchange
|
|
14
|
-
*/
|
|
15
|
-
class yobit extends yobit$1 {
|
|
16
|
-
describe() {
|
|
17
|
-
return this.deepExtend(super.describe(), {
|
|
18
|
-
'id': 'yobit',
|
|
19
|
-
'name': 'YoBit',
|
|
20
|
-
'countries': ['RU'],
|
|
21
|
-
'rateLimit': 2000,
|
|
22
|
-
'version': '3',
|
|
23
|
-
'pro': false,
|
|
24
|
-
'has': {
|
|
25
|
-
'CORS': undefined,
|
|
26
|
-
'spot': true,
|
|
27
|
-
'margin': false,
|
|
28
|
-
'swap': false,
|
|
29
|
-
'future': false,
|
|
30
|
-
'option': false,
|
|
31
|
-
'addMargin': false,
|
|
32
|
-
'cancelOrder': true,
|
|
33
|
-
'closeAllPositions': false,
|
|
34
|
-
'closePosition': false,
|
|
35
|
-
'createDepositAddress': true,
|
|
36
|
-
'createMarketOrder': false,
|
|
37
|
-
'createOrder': true,
|
|
38
|
-
'createReduceOnlyOrder': false,
|
|
39
|
-
'createStopLimitOrder': false,
|
|
40
|
-
'createStopMarketOrder': false,
|
|
41
|
-
'createStopOrder': false,
|
|
42
|
-
'fetchBalance': true,
|
|
43
|
-
'fetchBorrowRateHistories': false,
|
|
44
|
-
'fetchBorrowRateHistory': false,
|
|
45
|
-
'fetchCrossBorrowRate': false,
|
|
46
|
-
'fetchCrossBorrowRates': false,
|
|
47
|
-
'fetchDepositAddress': true,
|
|
48
|
-
'fetchDeposits': false,
|
|
49
|
-
'fetchFundingHistory': false,
|
|
50
|
-
'fetchFundingRate': false,
|
|
51
|
-
'fetchFundingRateHistory': false,
|
|
52
|
-
'fetchFundingRates': false,
|
|
53
|
-
'fetchIndexOHLCV': false,
|
|
54
|
-
'fetchIsolatedBorrowRate': false,
|
|
55
|
-
'fetchIsolatedBorrowRates': false,
|
|
56
|
-
'fetchLeverage': false,
|
|
57
|
-
'fetchLeverageTiers': false,
|
|
58
|
-
'fetchMarginMode': false,
|
|
59
|
-
'fetchMarkets': true,
|
|
60
|
-
'fetchMarkOHLCV': false,
|
|
61
|
-
'fetchMyTrades': true,
|
|
62
|
-
'fetchOpenInterestHistory': false,
|
|
63
|
-
'fetchOpenOrders': true,
|
|
64
|
-
'fetchOrder': true,
|
|
65
|
-
'fetchOrderBook': true,
|
|
66
|
-
'fetchOrderBooks': true,
|
|
67
|
-
'fetchPosition': false,
|
|
68
|
-
'fetchPositionMode': false,
|
|
69
|
-
'fetchPositions': false,
|
|
70
|
-
'fetchPositionsRisk': false,
|
|
71
|
-
'fetchPremiumIndexOHLCV': false,
|
|
72
|
-
'fetchTicker': true,
|
|
73
|
-
'fetchTickers': true,
|
|
74
|
-
'fetchTrades': true,
|
|
75
|
-
'fetchTradingFee': false,
|
|
76
|
-
'fetchTradingFees': true,
|
|
77
|
-
'fetchTransactions': false,
|
|
78
|
-
'fetchTransfer': false,
|
|
79
|
-
'fetchTransfers': false,
|
|
80
|
-
'fetchWithdrawals': false,
|
|
81
|
-
'reduceMargin': false,
|
|
82
|
-
'setLeverage': false,
|
|
83
|
-
'setMarginMode': false,
|
|
84
|
-
'setPositionMode': false,
|
|
85
|
-
'transfer': false,
|
|
86
|
-
'withdraw': true,
|
|
87
|
-
'ws': false,
|
|
88
|
-
},
|
|
89
|
-
'urls': {
|
|
90
|
-
'logo': 'https://user-images.githubusercontent.com/1294454/27766910-cdcbfdae-5eea-11e7-9859-03fea873272d.jpg',
|
|
91
|
-
'api': {
|
|
92
|
-
'public': 'https://yobit.net/api',
|
|
93
|
-
'private': 'https://yobit.net/tapi',
|
|
94
|
-
},
|
|
95
|
-
'www': 'https://www.yobit.net',
|
|
96
|
-
'doc': 'https://www.yobit.net/en/api/',
|
|
97
|
-
'fees': 'https://www.yobit.net/en/fees/',
|
|
98
|
-
},
|
|
99
|
-
'api': {
|
|
100
|
-
'public': {
|
|
101
|
-
'get': {
|
|
102
|
-
'depth/{pair}': 1,
|
|
103
|
-
'info': 1,
|
|
104
|
-
'ticker/{pair}': 1,
|
|
105
|
-
'trades/{pair}': 1,
|
|
106
|
-
},
|
|
107
|
-
},
|
|
108
|
-
'private': {
|
|
109
|
-
'post': {
|
|
110
|
-
'ActiveOrders': 1,
|
|
111
|
-
'CancelOrder': 1,
|
|
112
|
-
'GetDepositAddress': 1,
|
|
113
|
-
'getInfo': 1,
|
|
114
|
-
'OrderInfo': 1,
|
|
115
|
-
'Trade': 1,
|
|
116
|
-
'TradeHistory': 1,
|
|
117
|
-
'WithdrawCoinsToAddress': 1,
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
'fees': {
|
|
122
|
-
'trading': {
|
|
123
|
-
'maker': 0.002,
|
|
124
|
-
'taker': 0.002,
|
|
125
|
-
},
|
|
126
|
-
'funding': {
|
|
127
|
-
'withdraw': {},
|
|
128
|
-
},
|
|
129
|
-
},
|
|
130
|
-
'commonCurrencies': {
|
|
131
|
-
'AIR': 'AirCoin',
|
|
132
|
-
'ANI': 'ANICoin',
|
|
133
|
-
'ANT': 'AntsCoin',
|
|
134
|
-
'ATMCHA': 'ATM',
|
|
135
|
-
'ASN': 'Ascension',
|
|
136
|
-
'AST': 'Astral',
|
|
137
|
-
'ATM': 'Autumncoin',
|
|
138
|
-
'AUR': 'AuroraCoin',
|
|
139
|
-
'BAB': 'Babel',
|
|
140
|
-
'BAN': 'BANcoin',
|
|
141
|
-
'BCC': 'BCH',
|
|
142
|
-
'BCS': 'BitcoinStake',
|
|
143
|
-
'BITS': 'Bitstar',
|
|
144
|
-
'BLN': 'Bulleon',
|
|
145
|
-
'BNS': 'Benefit Bonus Coin',
|
|
146
|
-
'BOT': 'BOTcoin',
|
|
147
|
-
'BON': 'BONES',
|
|
148
|
-
'BPC': 'BitcoinPremium',
|
|
149
|
-
'BST': 'BitStone',
|
|
150
|
-
'BTS': 'Bitshares2',
|
|
151
|
-
'CAT': 'BitClave',
|
|
152
|
-
'CBC': 'CryptoBossCoin',
|
|
153
|
-
'CMT': 'CometCoin',
|
|
154
|
-
'COIN': 'Coin.com',
|
|
155
|
-
'COV': 'Coven Coin',
|
|
156
|
-
'COVX': 'COV',
|
|
157
|
-
'CPC': 'Capricoin',
|
|
158
|
-
'CREDIT': 'Creditbit',
|
|
159
|
-
'CS': 'CryptoSpots',
|
|
160
|
-
'DCT': 'Discount',
|
|
161
|
-
'DFT': 'DraftCoin',
|
|
162
|
-
'DGD': 'DarkGoldCoin',
|
|
163
|
-
'DIRT': 'DIRTY',
|
|
164
|
-
'DROP': 'FaucetCoin',
|
|
165
|
-
'DSH': 'DASH',
|
|
166
|
-
'EGC': 'EverGreenCoin',
|
|
167
|
-
'EGG': 'EggCoin',
|
|
168
|
-
'EKO': 'EkoCoin',
|
|
169
|
-
'ENTER': 'ENTRC',
|
|
170
|
-
'EPC': 'ExperienceCoin',
|
|
171
|
-
'ESC': 'EdwardSnowden',
|
|
172
|
-
'EUROPE': 'EUROP',
|
|
173
|
-
'EXT': 'LifeExtension',
|
|
174
|
-
'FUND': 'FUNDChains',
|
|
175
|
-
'FUNK': 'FUNKCoin',
|
|
176
|
-
'FX': 'FCoin',
|
|
177
|
-
'GCC': 'GlobalCryptocurrency',
|
|
178
|
-
'GEN': 'Genstake',
|
|
179
|
-
'GENE': 'Genesiscoin',
|
|
180
|
-
'GMR': 'Gimmer',
|
|
181
|
-
'GOLD': 'GoldMint',
|
|
182
|
-
'GOT': 'Giotto Coin',
|
|
183
|
-
'GSX': 'GlowShares',
|
|
184
|
-
'GT': 'GTcoin',
|
|
185
|
-
'HTML5': 'HTML',
|
|
186
|
-
'HYPERX': 'HYPER',
|
|
187
|
-
'ICN': 'iCoin',
|
|
188
|
-
'INSANE': 'INSN',
|
|
189
|
-
'JNT': 'JointCoin',
|
|
190
|
-
'JPC': 'JupiterCoin',
|
|
191
|
-
'JWL': 'Jewels',
|
|
192
|
-
'KNC': 'KingN Coin',
|
|
193
|
-
'LBTCX': 'LiteBitcoin',
|
|
194
|
-
'LIZI': 'LiZi',
|
|
195
|
-
'LOC': 'LocoCoin',
|
|
196
|
-
'LOCX': 'LOC',
|
|
197
|
-
'LUNYR': 'LUN',
|
|
198
|
-
'LUN': 'LunarCoin',
|
|
199
|
-
'LUNA': 'Luna Coin',
|
|
200
|
-
'MASK': 'Yobit MASK',
|
|
201
|
-
'MDT': 'Midnight',
|
|
202
|
-
'MEME': 'Memez Token',
|
|
203
|
-
'MIS': 'MIScoin',
|
|
204
|
-
'MM': 'MasterMint',
|
|
205
|
-
'NAV': 'NavajoCoin',
|
|
206
|
-
'NBT': 'NiceBytes',
|
|
207
|
-
'OMG': 'OMGame',
|
|
208
|
-
'ONX': 'Onix',
|
|
209
|
-
'PAC': '$PAC',
|
|
210
|
-
'PLAY': 'PlayCoin',
|
|
211
|
-
'PIVX': 'Darknet',
|
|
212
|
-
'PURE': 'PurePOS',
|
|
213
|
-
'PUTIN': 'PutinCoin',
|
|
214
|
-
'SPACE': 'Spacecoin',
|
|
215
|
-
'STK': 'StakeCoin',
|
|
216
|
-
'SUB': 'Subscriptio',
|
|
217
|
-
'PAY': 'EPAY',
|
|
218
|
-
'PLC': 'Platin Coin',
|
|
219
|
-
'RAI': 'RaiderCoin',
|
|
220
|
-
'RCN': 'RCoin',
|
|
221
|
-
'REP': 'Republicoin',
|
|
222
|
-
'RUR': 'RUB',
|
|
223
|
-
'SBTC': 'Super Bitcoin',
|
|
224
|
-
'SMC': 'SmartCoin',
|
|
225
|
-
'SOLO': 'SoloCoin',
|
|
226
|
-
'SOUL': 'SoulCoin',
|
|
227
|
-
'STAR': 'StarCoin',
|
|
228
|
-
'SUPER': 'SuperCoin',
|
|
229
|
-
'TNS': 'Transcodium',
|
|
230
|
-
'TTC': 'TittieCoin',
|
|
231
|
-
'UNI': 'Universe',
|
|
232
|
-
'UST': 'Uservice',
|
|
233
|
-
'VOL': 'VolumeCoin',
|
|
234
|
-
'XIN': 'XINCoin',
|
|
235
|
-
'XMT': 'SummitCoin',
|
|
236
|
-
'XRA': 'Ratecoin',
|
|
237
|
-
},
|
|
238
|
-
'options': {
|
|
239
|
-
'maxUrlLength': 2048,
|
|
240
|
-
'fetchOrdersRequiresSymbol': true,
|
|
241
|
-
'networks': {
|
|
242
|
-
'ETH': 'ERC20',
|
|
243
|
-
'TRX': 'TRC20',
|
|
244
|
-
'BSC': 'BEP20',
|
|
245
|
-
},
|
|
246
|
-
},
|
|
247
|
-
'precisionMode': number.TICK_SIZE,
|
|
248
|
-
'exceptions': {
|
|
249
|
-
'exact': {
|
|
250
|
-
'803': errors.InvalidOrder,
|
|
251
|
-
'804': errors.InvalidOrder,
|
|
252
|
-
'805': errors.InvalidOrder,
|
|
253
|
-
'806': errors.InvalidOrder,
|
|
254
|
-
'807': errors.InvalidOrder,
|
|
255
|
-
'831': errors.InsufficientFunds,
|
|
256
|
-
'832': errors.InsufficientFunds,
|
|
257
|
-
'833': errors.OrderNotFound, // "Order with id X was not found." (cancelling non-existent, closed and cancelled order)
|
|
258
|
-
},
|
|
259
|
-
'broad': {
|
|
260
|
-
'Invalid pair name': errors.ExchangeError,
|
|
261
|
-
'invalid api key': errors.AuthenticationError,
|
|
262
|
-
'invalid sign': errors.AuthenticationError,
|
|
263
|
-
'api key dont have trade permission': errors.AuthenticationError,
|
|
264
|
-
'invalid parameter': errors.InvalidOrder,
|
|
265
|
-
'invalid order': errors.InvalidOrder,
|
|
266
|
-
'The given order has already been cancelled': errors.InvalidOrder,
|
|
267
|
-
'Requests too often': errors.DDoSProtection,
|
|
268
|
-
'not available': errors.ExchangeNotAvailable,
|
|
269
|
-
'data unavailable': errors.ExchangeNotAvailable,
|
|
270
|
-
'external service unavailable': errors.ExchangeNotAvailable,
|
|
271
|
-
'Total transaction amount': errors.InvalidOrder,
|
|
272
|
-
'The given order has already been closed and cannot be cancelled': errors.InvalidOrder,
|
|
273
|
-
'Insufficient funds': errors.InsufficientFunds,
|
|
274
|
-
'invalid key': errors.AuthenticationError,
|
|
275
|
-
'invalid nonce': errors.InvalidNonce,
|
|
276
|
-
'Total order amount is less than minimal amount': errors.InvalidOrder,
|
|
277
|
-
'Rate Limited': errors.RateLimitExceeded,
|
|
278
|
-
},
|
|
279
|
-
},
|
|
280
|
-
'orders': {}, // orders cache / emulation
|
|
281
|
-
});
|
|
282
|
-
}
|
|
283
|
-
parseBalance(response) {
|
|
284
|
-
const balances = this.safeValue(response, 'return', {});
|
|
285
|
-
const timestamp = this.safeInteger(balances, 'server_time');
|
|
286
|
-
const result = {
|
|
287
|
-
'info': response,
|
|
288
|
-
'timestamp': timestamp,
|
|
289
|
-
'datetime': this.iso8601(timestamp),
|
|
290
|
-
};
|
|
291
|
-
const free = this.safeValue(balances, 'funds', {});
|
|
292
|
-
const total = this.safeValue(balances, 'funds_incl_orders', {});
|
|
293
|
-
const currencyIds = Object.keys(this.extend(free, total));
|
|
294
|
-
for (let i = 0; i < currencyIds.length; i++) {
|
|
295
|
-
const currencyId = currencyIds[i];
|
|
296
|
-
const code = this.safeCurrencyCode(currencyId);
|
|
297
|
-
const account = this.account();
|
|
298
|
-
account['free'] = this.safeString(free, currencyId);
|
|
299
|
-
account['total'] = this.safeString(total, currencyId);
|
|
300
|
-
result[code] = account;
|
|
301
|
-
}
|
|
302
|
-
return this.safeBalance(result);
|
|
303
|
-
}
|
|
304
|
-
async fetchBalance(params = {}) {
|
|
305
|
-
/**
|
|
306
|
-
* @method
|
|
307
|
-
* @name yobit#fetchBalance
|
|
308
|
-
* @see https://yobit.net/en/api
|
|
309
|
-
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
310
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
311
|
-
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
312
|
-
*/
|
|
313
|
-
await this.loadMarkets();
|
|
314
|
-
const response = await this.privatePostGetInfo(params);
|
|
315
|
-
//
|
|
316
|
-
// {
|
|
317
|
-
// "success":1,
|
|
318
|
-
// "return":{
|
|
319
|
-
// "funds":{
|
|
320
|
-
// "ltc":22,
|
|
321
|
-
// "nvc":423.998,
|
|
322
|
-
// "ppc":10,
|
|
323
|
-
// },
|
|
324
|
-
// "funds_incl_orders":{
|
|
325
|
-
// "ltc":32,
|
|
326
|
-
// "nvc":523.998,
|
|
327
|
-
// "ppc":20,
|
|
328
|
-
// },
|
|
329
|
-
// "rights":{
|
|
330
|
-
// "info":1,
|
|
331
|
-
// "trade":0,
|
|
332
|
-
// "withdraw":0
|
|
333
|
-
// },
|
|
334
|
-
// "transaction_count":0,
|
|
335
|
-
// "open_orders":1,
|
|
336
|
-
// "server_time":1418654530
|
|
337
|
-
// }
|
|
338
|
-
// }
|
|
339
|
-
//
|
|
340
|
-
return this.parseBalance(response);
|
|
341
|
-
}
|
|
342
|
-
async fetchMarkets(params = {}) {
|
|
343
|
-
/**
|
|
344
|
-
* @method
|
|
345
|
-
* @name yobit#fetchMarkets
|
|
346
|
-
* @see https://yobit.net/en/api
|
|
347
|
-
* @description retrieves data on all markets for yobit
|
|
348
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
349
|
-
* @returns {object[]} an array of objects representing market data
|
|
350
|
-
*/
|
|
351
|
-
const response = await this.publicGetInfo(params);
|
|
352
|
-
//
|
|
353
|
-
// {
|
|
354
|
-
// "server_time":1615856752,
|
|
355
|
-
// "pairs":{
|
|
356
|
-
// "ltc_btc":{
|
|
357
|
-
// "decimal_places":8,
|
|
358
|
-
// "min_price":0.00000001,
|
|
359
|
-
// "max_price":10000,
|
|
360
|
-
// "min_amount":0.0001,
|
|
361
|
-
// "min_total":0.0001,
|
|
362
|
-
// "hidden":0,
|
|
363
|
-
// "fee":0.2,
|
|
364
|
-
// "fee_buyer":0.2,
|
|
365
|
-
// "fee_seller":0.2
|
|
366
|
-
// },
|
|
367
|
-
// },
|
|
368
|
-
// }
|
|
369
|
-
//
|
|
370
|
-
const markets = this.safeValue(response, 'pairs', {});
|
|
371
|
-
const keys = Object.keys(markets);
|
|
372
|
-
const result = [];
|
|
373
|
-
for (let i = 0; i < keys.length; i++) {
|
|
374
|
-
const id = keys[i];
|
|
375
|
-
const market = markets[id];
|
|
376
|
-
const [baseId, quoteId] = id.split('_');
|
|
377
|
-
let base = baseId.toUpperCase();
|
|
378
|
-
let quote = quoteId.toUpperCase();
|
|
379
|
-
base = this.safeCurrencyCode(base);
|
|
380
|
-
quote = this.safeCurrencyCode(quote);
|
|
381
|
-
const hidden = this.safeInteger(market, 'hidden');
|
|
382
|
-
let feeString = this.safeString(market, 'fee');
|
|
383
|
-
feeString = Precise["default"].stringDiv(feeString, '100');
|
|
384
|
-
// yobit maker = taker
|
|
385
|
-
result.push({
|
|
386
|
-
'id': id,
|
|
387
|
-
'symbol': base + '/' + quote,
|
|
388
|
-
'base': base,
|
|
389
|
-
'quote': quote,
|
|
390
|
-
'settle': undefined,
|
|
391
|
-
'baseId': baseId,
|
|
392
|
-
'quoteId': quoteId,
|
|
393
|
-
'settleId': undefined,
|
|
394
|
-
'type': 'spot',
|
|
395
|
-
'spot': true,
|
|
396
|
-
'margin': false,
|
|
397
|
-
'swap': false,
|
|
398
|
-
'future': false,
|
|
399
|
-
'option': false,
|
|
400
|
-
'active': (hidden === 0),
|
|
401
|
-
'contract': false,
|
|
402
|
-
'linear': undefined,
|
|
403
|
-
'inverse': undefined,
|
|
404
|
-
'taker': this.parseNumber(feeString),
|
|
405
|
-
'maker': this.parseNumber(feeString),
|
|
406
|
-
'contractSize': undefined,
|
|
407
|
-
'expiry': undefined,
|
|
408
|
-
'expiryDatetime': undefined,
|
|
409
|
-
'strike': undefined,
|
|
410
|
-
'optionType': undefined,
|
|
411
|
-
'precision': {
|
|
412
|
-
'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'decimal_places'))),
|
|
413
|
-
'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'decimal_places'))),
|
|
414
|
-
},
|
|
415
|
-
'limits': {
|
|
416
|
-
'leverage': {
|
|
417
|
-
'min': undefined,
|
|
418
|
-
'max': undefined,
|
|
419
|
-
},
|
|
420
|
-
'amount': {
|
|
421
|
-
'min': this.safeNumber(market, 'min_amount'),
|
|
422
|
-
'max': this.safeNumber(market, 'max_amount'),
|
|
423
|
-
},
|
|
424
|
-
'price': {
|
|
425
|
-
'min': this.safeNumber(market, 'min_price'),
|
|
426
|
-
'max': this.safeNumber(market, 'max_price'),
|
|
427
|
-
},
|
|
428
|
-
'cost': {
|
|
429
|
-
'min': this.safeNumber(market, 'min_total'),
|
|
430
|
-
'max': undefined,
|
|
431
|
-
},
|
|
432
|
-
},
|
|
433
|
-
'created': undefined,
|
|
434
|
-
'info': market,
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
return result;
|
|
438
|
-
}
|
|
439
|
-
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
440
|
-
/**
|
|
441
|
-
* @method
|
|
442
|
-
* @name yobit#fetchOrderBook
|
|
443
|
-
* @see https://yobit.net/en/api
|
|
444
|
-
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
445
|
-
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
446
|
-
* @param {int} [limit] the maximum amount of order book entries to return
|
|
447
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
448
|
-
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
449
|
-
*/
|
|
450
|
-
await this.loadMarkets();
|
|
451
|
-
const market = this.market(symbol);
|
|
452
|
-
const request = {
|
|
453
|
-
'pair': market['id'],
|
|
454
|
-
};
|
|
455
|
-
if (limit !== undefined) {
|
|
456
|
-
request['limit'] = limit; // default = 150, max = 2000
|
|
457
|
-
}
|
|
458
|
-
const response = await this.publicGetDepthPair(this.extend(request, params));
|
|
459
|
-
const market_id_in_reponse = (market['id'] in response);
|
|
460
|
-
if (!market_id_in_reponse) {
|
|
461
|
-
throw new errors.ExchangeError(this.id + ' ' + market['symbol'] + ' order book is empty or not available');
|
|
462
|
-
}
|
|
463
|
-
const orderbook = response[market['id']];
|
|
464
|
-
return this.parseOrderBook(orderbook, symbol);
|
|
465
|
-
}
|
|
466
|
-
async fetchOrderBooks(symbols = undefined, limit = undefined, params = {}) {
|
|
467
|
-
/**
|
|
468
|
-
* @method
|
|
469
|
-
* @name yobit#fetchOrderBooks
|
|
470
|
-
* @see https://yobit.net/en/api
|
|
471
|
-
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data for multiple markets
|
|
472
|
-
* @param {string[]|undefined} symbols list of unified market symbols, all symbols fetched if undefined, default is undefined
|
|
473
|
-
* @param {int} [limit] max number of entries per orderbook to return, default is undefined
|
|
474
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
475
|
-
* @returns {object} a dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbol
|
|
476
|
-
*/
|
|
477
|
-
await this.loadMarkets();
|
|
478
|
-
let ids = undefined;
|
|
479
|
-
if (symbols === undefined) {
|
|
480
|
-
ids = this.ids.join('-');
|
|
481
|
-
// max URL length is 2083 symbols, including http schema, hostname, tld, etc...
|
|
482
|
-
if (ids.length > 2048) {
|
|
483
|
-
const numIds = this.ids.length;
|
|
484
|
-
throw new errors.ExchangeError(this.id + ' fetchOrderBooks() has ' + numIds.toString() + ' symbols exceeding max URL length, you are required to specify a list of symbols in the first argument to fetchOrderBooks');
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
else {
|
|
488
|
-
ids = this.marketIds(symbols);
|
|
489
|
-
ids = ids.join('-');
|
|
490
|
-
}
|
|
491
|
-
const request = {
|
|
492
|
-
'pair': ids,
|
|
493
|
-
// 'ignore_invalid': true,
|
|
494
|
-
};
|
|
495
|
-
if (limit !== undefined) {
|
|
496
|
-
request['limit'] = limit;
|
|
497
|
-
}
|
|
498
|
-
const response = await this.publicGetDepthPair(this.extend(request, params));
|
|
499
|
-
const result = {};
|
|
500
|
-
ids = Object.keys(response);
|
|
501
|
-
for (let i = 0; i < ids.length; i++) {
|
|
502
|
-
const id = ids[i];
|
|
503
|
-
const symbol = this.safeSymbol(id);
|
|
504
|
-
result[symbol] = this.parseOrderBook(response[id], symbol);
|
|
505
|
-
}
|
|
506
|
-
return result;
|
|
507
|
-
}
|
|
508
|
-
parseTicker(ticker, market = undefined) {
|
|
509
|
-
//
|
|
510
|
-
// {
|
|
511
|
-
// "high": 0.03497582,
|
|
512
|
-
// "low": 0.03248474,
|
|
513
|
-
// "avg": 0.03373028,
|
|
514
|
-
// "vol": 120.11485715062999,
|
|
515
|
-
// "vol_cur": 3572.24914074,
|
|
516
|
-
// "last": 0.0337611,
|
|
517
|
-
// "buy": 0.0337442,
|
|
518
|
-
// "sell": 0.03377798,
|
|
519
|
-
// "updated": 1537522009
|
|
520
|
-
// }
|
|
521
|
-
//
|
|
522
|
-
const timestamp = this.safeTimestamp(ticker, 'updated');
|
|
523
|
-
const last = this.safeString(ticker, 'last');
|
|
524
|
-
return this.safeTicker({
|
|
525
|
-
'symbol': this.safeSymbol(undefined, market),
|
|
526
|
-
'timestamp': timestamp,
|
|
527
|
-
'datetime': this.iso8601(timestamp),
|
|
528
|
-
'high': this.safeString(ticker, 'high'),
|
|
529
|
-
'low': this.safeString(ticker, 'low'),
|
|
530
|
-
'bid': this.safeString(ticker, 'buy'),
|
|
531
|
-
'bidVolume': undefined,
|
|
532
|
-
'ask': this.safeString(ticker, 'sell'),
|
|
533
|
-
'askVolume': undefined,
|
|
534
|
-
'vwap': undefined,
|
|
535
|
-
'open': undefined,
|
|
536
|
-
'close': last,
|
|
537
|
-
'last': last,
|
|
538
|
-
'previousClose': undefined,
|
|
539
|
-
'change': undefined,
|
|
540
|
-
'percentage': undefined,
|
|
541
|
-
'average': this.safeString(ticker, 'avg'),
|
|
542
|
-
'baseVolume': this.safeString(ticker, 'vol_cur'),
|
|
543
|
-
'quoteVolume': this.safeString(ticker, 'vol'),
|
|
544
|
-
'info': ticker,
|
|
545
|
-
}, market);
|
|
546
|
-
}
|
|
547
|
-
async fetchTickers(symbols = undefined, params = {}) {
|
|
548
|
-
/**
|
|
549
|
-
* @method
|
|
550
|
-
* @name yobit#fetchTickers
|
|
551
|
-
* @see https://yobit.net/en/api
|
|
552
|
-
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
553
|
-
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
554
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
555
|
-
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
556
|
-
*/
|
|
557
|
-
if (symbols === undefined) {
|
|
558
|
-
throw new errors.ArgumentsRequired(this.id + ' fetchTickers() requires "symbols" argument');
|
|
559
|
-
}
|
|
560
|
-
await this.loadMarkets();
|
|
561
|
-
symbols = this.marketSymbols(symbols);
|
|
562
|
-
let ids = undefined;
|
|
563
|
-
if (symbols === undefined) {
|
|
564
|
-
ids = this.ids;
|
|
565
|
-
}
|
|
566
|
-
else {
|
|
567
|
-
ids = this.marketIds(symbols);
|
|
568
|
-
}
|
|
569
|
-
const idsLength = ids.length;
|
|
570
|
-
const idsString = ids.join('-');
|
|
571
|
-
const maxLength = this.safeInteger(this.options, 'maxUrlLength', 2048);
|
|
572
|
-
// max URL length is 2048 symbols, including http schema, hostname, tld, etc...
|
|
573
|
-
const lenghtOfBaseUrl = 30; // the url including api-base and endpoint dir is 30 chars
|
|
574
|
-
const actualLength = idsString.length + lenghtOfBaseUrl;
|
|
575
|
-
if (actualLength > maxLength) {
|
|
576
|
-
throw new errors.ArgumentsRequired(this.id + ' fetchTickers() is being requested for ' + idsLength.toString() + ' markets (which has an URL length of ' + actualLength.toString() + ' characters), but it exceedes max URL length (' + maxLength.toString() + '), please pass limisted symbols array to fetchTickers to fit in one request');
|
|
577
|
-
}
|
|
578
|
-
const request = {
|
|
579
|
-
'pair': idsString,
|
|
580
|
-
};
|
|
581
|
-
const tickers = await this.publicGetTickerPair(this.extend(request, params));
|
|
582
|
-
const result = {};
|
|
583
|
-
const keys = Object.keys(tickers);
|
|
584
|
-
for (let k = 0; k < keys.length; k++) {
|
|
585
|
-
const id = keys[k];
|
|
586
|
-
const ticker = tickers[id];
|
|
587
|
-
const market = this.safeMarket(id);
|
|
588
|
-
const symbol = market['symbol'];
|
|
589
|
-
result[symbol] = this.parseTicker(ticker, market);
|
|
590
|
-
}
|
|
591
|
-
return this.filterByArrayTickers(result, 'symbol', symbols);
|
|
592
|
-
}
|
|
593
|
-
async fetchTicker(symbol, params = {}) {
|
|
594
|
-
/**
|
|
595
|
-
* @method
|
|
596
|
-
* @name yobit#fetchTicker
|
|
597
|
-
* @see https://yobit.net/en/api
|
|
598
|
-
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
599
|
-
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
600
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
601
|
-
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
602
|
-
*/
|
|
603
|
-
const tickers = await this.fetchTickers([symbol], params);
|
|
604
|
-
return tickers[symbol];
|
|
605
|
-
}
|
|
606
|
-
parseTrade(trade, market = undefined) {
|
|
607
|
-
//
|
|
608
|
-
// fetchTrades (public)
|
|
609
|
-
//
|
|
610
|
-
// {
|
|
611
|
-
// "type":"bid",
|
|
612
|
-
// "price":0.14046179,
|
|
613
|
-
// "amount":0.001,
|
|
614
|
-
// "tid":200256901,
|
|
615
|
-
// "timestamp":1649861004
|
|
616
|
-
// }
|
|
617
|
-
//
|
|
618
|
-
// fetchMyTrades (private)
|
|
619
|
-
//
|
|
620
|
-
// {
|
|
621
|
-
// "pair":"doge_usdt",
|
|
622
|
-
// "type":"sell",
|
|
623
|
-
// "amount":139,
|
|
624
|
-
// "rate":0.139,
|
|
625
|
-
// "order_id":"2101103631773172",
|
|
626
|
-
// "is_your_order":1,
|
|
627
|
-
// "timestamp":"1649861561"
|
|
628
|
-
// }
|
|
629
|
-
//
|
|
630
|
-
const timestamp = this.safeTimestamp(trade, 'timestamp');
|
|
631
|
-
let side = this.safeString(trade, 'type');
|
|
632
|
-
if (side === 'ask') {
|
|
633
|
-
side = 'sell';
|
|
634
|
-
}
|
|
635
|
-
else if (side === 'bid') {
|
|
636
|
-
side = 'buy';
|
|
637
|
-
}
|
|
638
|
-
const priceString = this.safeString2(trade, 'rate', 'price');
|
|
639
|
-
const id = this.safeString2(trade, 'trade_id', 'tid');
|
|
640
|
-
const order = this.safeString(trade, 'order_id');
|
|
641
|
-
const marketId = this.safeString(trade, 'pair');
|
|
642
|
-
const symbol = this.safeSymbol(marketId, market);
|
|
643
|
-
const amountString = this.safeString(trade, 'amount');
|
|
644
|
-
// arguments for calculateFee (need to be numbers)
|
|
645
|
-
const price = this.parseNumber(priceString);
|
|
646
|
-
const amount = this.parseNumber(amountString);
|
|
647
|
-
const type = 'limit'; // all trades are still limit trades
|
|
648
|
-
let fee = undefined;
|
|
649
|
-
const feeCostString = this.safeNumber(trade, 'commission');
|
|
650
|
-
if (feeCostString !== undefined) {
|
|
651
|
-
const feeCurrencyId = this.safeString(trade, 'commissionCurrency');
|
|
652
|
-
const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
|
|
653
|
-
fee = {
|
|
654
|
-
'cost': feeCostString,
|
|
655
|
-
'currency': feeCurrencyCode,
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
const isYourOrder = this.safeValue(trade, 'is_your_order');
|
|
659
|
-
if (isYourOrder !== undefined) {
|
|
660
|
-
if (fee === undefined) {
|
|
661
|
-
const feeInNumbers = this.calculateFee(symbol, type, side, amount, price, 'taker');
|
|
662
|
-
fee = {
|
|
663
|
-
'currency': this.safeString(feeInNumbers, 'currency'),
|
|
664
|
-
'cost': this.safeString(feeInNumbers, 'cost'),
|
|
665
|
-
'rate': this.safeString(feeInNumbers, 'rate'),
|
|
666
|
-
};
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
return this.safeTrade({
|
|
670
|
-
'id': id,
|
|
671
|
-
'order': order,
|
|
672
|
-
'timestamp': timestamp,
|
|
673
|
-
'datetime': this.iso8601(timestamp),
|
|
674
|
-
'symbol': symbol,
|
|
675
|
-
'type': type,
|
|
676
|
-
'side': side,
|
|
677
|
-
'takerOrMaker': undefined,
|
|
678
|
-
'price': priceString,
|
|
679
|
-
'amount': amountString,
|
|
680
|
-
'cost': undefined,
|
|
681
|
-
'fee': fee,
|
|
682
|
-
'info': trade,
|
|
683
|
-
}, market);
|
|
684
|
-
}
|
|
685
|
-
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
686
|
-
/**
|
|
687
|
-
* @method
|
|
688
|
-
* @name yobit#fetchTrades
|
|
689
|
-
* @see https://yobit.net/en/api
|
|
690
|
-
* @description get the list of most recent trades for a particular symbol
|
|
691
|
-
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
692
|
-
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
693
|
-
* @param {int} [limit] the maximum amount of trades to fetch
|
|
694
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
695
|
-
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
696
|
-
*/
|
|
697
|
-
await this.loadMarkets();
|
|
698
|
-
const market = this.market(symbol);
|
|
699
|
-
const request = {
|
|
700
|
-
'pair': market['id'],
|
|
701
|
-
};
|
|
702
|
-
if (limit !== undefined) {
|
|
703
|
-
request['limit'] = limit;
|
|
704
|
-
}
|
|
705
|
-
const response = await this.publicGetTradesPair(this.extend(request, params));
|
|
706
|
-
//
|
|
707
|
-
// {
|
|
708
|
-
// "doge_usdt": [
|
|
709
|
-
// {
|
|
710
|
-
// "type":"ask",
|
|
711
|
-
// "price":0.13956743,
|
|
712
|
-
// "amount":0.0008,
|
|
713
|
-
// "tid":200256900,
|
|
714
|
-
// "timestamp":1649860521
|
|
715
|
-
// },
|
|
716
|
-
// ]
|
|
717
|
-
// }
|
|
718
|
-
//
|
|
719
|
-
if (Array.isArray(response)) {
|
|
720
|
-
const numElements = response.length;
|
|
721
|
-
if (numElements === 0) {
|
|
722
|
-
return [];
|
|
723
|
-
}
|
|
724
|
-
}
|
|
725
|
-
const result = this.safeValue(response, market['id'], []);
|
|
726
|
-
return this.parseTrades(result, market, since, limit);
|
|
727
|
-
}
|
|
728
|
-
async fetchTradingFees(params = {}) {
|
|
729
|
-
/**
|
|
730
|
-
* @method
|
|
731
|
-
* @name yobit#fetchTradingFees
|
|
732
|
-
* @see https://yobit.net/en/api
|
|
733
|
-
* @description fetch the trading fees for multiple markets
|
|
734
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
735
|
-
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
736
|
-
*/
|
|
737
|
-
await this.loadMarkets();
|
|
738
|
-
const response = await this.publicGetInfo(params);
|
|
739
|
-
//
|
|
740
|
-
// {
|
|
741
|
-
// "server_time":1615856752,
|
|
742
|
-
// "pairs":{
|
|
743
|
-
// "ltc_btc":{
|
|
744
|
-
// "decimal_places":8,
|
|
745
|
-
// "min_price":0.00000001,
|
|
746
|
-
// "max_price":10000,
|
|
747
|
-
// "min_amount":0.0001,
|
|
748
|
-
// "min_total":0.0001,
|
|
749
|
-
// "hidden":0,
|
|
750
|
-
// "fee":0.2,
|
|
751
|
-
// "fee_buyer":0.2,
|
|
752
|
-
// "fee_seller":0.2
|
|
753
|
-
// },
|
|
754
|
-
// ...
|
|
755
|
-
// },
|
|
756
|
-
// }
|
|
757
|
-
//
|
|
758
|
-
const pairs = this.safeValue(response, 'pairs', {});
|
|
759
|
-
const marketIds = Object.keys(pairs);
|
|
760
|
-
const result = {};
|
|
761
|
-
for (let i = 0; i < marketIds.length; i++) {
|
|
762
|
-
const marketId = marketIds[i];
|
|
763
|
-
const pair = this.safeValue(pairs, marketId, {});
|
|
764
|
-
const symbol = this.safeSymbol(marketId, undefined, '_');
|
|
765
|
-
const takerString = this.safeString(pair, 'fee_buyer');
|
|
766
|
-
const makerString = this.safeString(pair, 'fee_seller');
|
|
767
|
-
const taker = this.parseNumber(Precise["default"].stringDiv(takerString, '100'));
|
|
768
|
-
const maker = this.parseNumber(Precise["default"].stringDiv(makerString, '100'));
|
|
769
|
-
result[symbol] = {
|
|
770
|
-
'info': pair,
|
|
771
|
-
'symbol': symbol,
|
|
772
|
-
'taker': taker,
|
|
773
|
-
'maker': maker,
|
|
774
|
-
'percentage': true,
|
|
775
|
-
'tierBased': false,
|
|
776
|
-
};
|
|
777
|
-
}
|
|
778
|
-
return result;
|
|
779
|
-
}
|
|
780
|
-
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
781
|
-
/**
|
|
782
|
-
* @method
|
|
783
|
-
* @name yobit#createOrder
|
|
784
|
-
* @see https://yobit.net/en/api
|
|
785
|
-
* @description create a trade order
|
|
786
|
-
* @param {string} symbol unified symbol of the market to create an order in
|
|
787
|
-
* @param {string} type must be 'limit'
|
|
788
|
-
* @param {string} side 'buy' or 'sell'
|
|
789
|
-
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
790
|
-
* @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
|
|
791
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
792
|
-
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
793
|
-
*/
|
|
794
|
-
if (type === 'market') {
|
|
795
|
-
throw new errors.ExchangeError(this.id + ' createOrder() allows limit orders only');
|
|
796
|
-
}
|
|
797
|
-
await this.loadMarkets();
|
|
798
|
-
const market = this.market(symbol);
|
|
799
|
-
const request = {
|
|
800
|
-
'pair': market['id'],
|
|
801
|
-
'type': side,
|
|
802
|
-
'amount': this.amountToPrecision(symbol, amount),
|
|
803
|
-
'rate': this.priceToPrecision(symbol, price),
|
|
804
|
-
};
|
|
805
|
-
const response = await this.privatePostTrade(this.extend(request, params));
|
|
806
|
-
//
|
|
807
|
-
// {
|
|
808
|
-
// "success":1,
|
|
809
|
-
// "return": {
|
|
810
|
-
// "received":0,
|
|
811
|
-
// "remains":10,
|
|
812
|
-
// "order_id":1101103635125179,
|
|
813
|
-
// "funds": {
|
|
814
|
-
// "usdt":27.84756553,
|
|
815
|
-
// "usdttrc20":0,
|
|
816
|
-
// "doge":19.98327206
|
|
817
|
-
// },
|
|
818
|
-
// "funds_incl_orders": {
|
|
819
|
-
// "usdt":30.35256553,
|
|
820
|
-
// "usdttrc20":0,
|
|
821
|
-
// "doge":19.98327206
|
|
822
|
-
// },
|
|
823
|
-
// "server_time":1650114256
|
|
824
|
-
// }
|
|
825
|
-
// }
|
|
826
|
-
//
|
|
827
|
-
const result = this.safeValue(response, 'return');
|
|
828
|
-
return this.parseOrder(result, market);
|
|
829
|
-
}
|
|
830
|
-
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
831
|
-
/**
|
|
832
|
-
* @method
|
|
833
|
-
* @name yobit#cancelOrder
|
|
834
|
-
* @see https://yobit.net/en/api
|
|
835
|
-
* @description cancels an open order
|
|
836
|
-
* @param {string} id order id
|
|
837
|
-
* @param {string} symbol not used by yobit cancelOrder ()
|
|
838
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
839
|
-
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
840
|
-
*/
|
|
841
|
-
await this.loadMarkets();
|
|
842
|
-
const request = {
|
|
843
|
-
'order_id': parseInt(id),
|
|
844
|
-
};
|
|
845
|
-
const response = await this.privatePostCancelOrder(this.extend(request, params));
|
|
846
|
-
//
|
|
847
|
-
// {
|
|
848
|
-
// "success":1,
|
|
849
|
-
// "return": {
|
|
850
|
-
// "order_id":1101103632552304,
|
|
851
|
-
// "funds": {
|
|
852
|
-
// "usdt":30.71055443,
|
|
853
|
-
// "usdttrc20":0,
|
|
854
|
-
// "doge":9.98327206
|
|
855
|
-
// },
|
|
856
|
-
// "funds_incl_orders": {
|
|
857
|
-
// "usdt":31.81275443,
|
|
858
|
-
// "usdttrc20":0,
|
|
859
|
-
// "doge":9.98327206
|
|
860
|
-
// },
|
|
861
|
-
// "server_time":1649918298
|
|
862
|
-
// }
|
|
863
|
-
// }
|
|
864
|
-
//
|
|
865
|
-
const result = this.safeValue(response, 'return', {});
|
|
866
|
-
return this.parseOrder(result);
|
|
867
|
-
}
|
|
868
|
-
parseOrderStatus(status) {
|
|
869
|
-
const statuses = {
|
|
870
|
-
'0': 'open',
|
|
871
|
-
'1': 'closed',
|
|
872
|
-
'2': 'canceled',
|
|
873
|
-
'3': 'open', // or partially-filled and canceled? https://github.com/ccxt/ccxt/issues/1594
|
|
874
|
-
};
|
|
875
|
-
return this.safeString(statuses, status, status);
|
|
876
|
-
}
|
|
877
|
-
parseOrder(order, market = undefined) {
|
|
878
|
-
//
|
|
879
|
-
// createOrder (private)
|
|
880
|
-
//
|
|
881
|
-
// {
|
|
882
|
-
// "received":0,
|
|
883
|
-
// "remains":10,
|
|
884
|
-
// "order_id":1101103635125179,
|
|
885
|
-
// "funds": {
|
|
886
|
-
// "usdt":27.84756553,
|
|
887
|
-
// "usdttrc20":0,
|
|
888
|
-
// "doge":19.98327206
|
|
889
|
-
// },
|
|
890
|
-
// "funds_incl_orders": {
|
|
891
|
-
// "usdt":30.35256553,
|
|
892
|
-
// "usdttrc20":0,
|
|
893
|
-
// "doge":19.98327206
|
|
894
|
-
// },
|
|
895
|
-
// "server_time":1650114256
|
|
896
|
-
// }
|
|
897
|
-
//
|
|
898
|
-
// fetchOrder (private)
|
|
899
|
-
//
|
|
900
|
-
// {
|
|
901
|
-
// "id: "1101103635103335", // id-field is manually added in fetchOrder () from exchange response id-order dictionary structure
|
|
902
|
-
// "pair":"doge_usdt",
|
|
903
|
-
// "type":"buy",
|
|
904
|
-
// "start_amount":10,
|
|
905
|
-
// "amount":10,
|
|
906
|
-
// "rate":0.05,
|
|
907
|
-
// "timestamp_created":"1650112553",
|
|
908
|
-
// "status":0
|
|
909
|
-
// }
|
|
910
|
-
//
|
|
911
|
-
// fetchOpenOrders (private)
|
|
912
|
-
//
|
|
913
|
-
// {
|
|
914
|
-
// "id":"1101103635103335", // id-field is manually added in fetchOpenOrders () from exchange response id-order dictionary structure
|
|
915
|
-
// "pair":"doge_usdt",
|
|
916
|
-
// "type":"buy",
|
|
917
|
-
// "amount":10,
|
|
918
|
-
// "rate":0.05,
|
|
919
|
-
// "timestamp_created":"1650112553",
|
|
920
|
-
// "status":0
|
|
921
|
-
// }
|
|
922
|
-
//
|
|
923
|
-
// cancelOrder (private)
|
|
924
|
-
//
|
|
925
|
-
// {
|
|
926
|
-
// "order_id":1101103634000197,
|
|
927
|
-
// "funds": {
|
|
928
|
-
// "usdt":31.81275443,
|
|
929
|
-
// "usdttrc20":0,
|
|
930
|
-
// "doge":9.98327206
|
|
931
|
-
// },
|
|
932
|
-
// "funds_incl_orders": {
|
|
933
|
-
// "usdt":31.81275443,
|
|
934
|
-
// "usdttrc20":0,
|
|
935
|
-
// "doge":9.98327206
|
|
936
|
-
// }
|
|
937
|
-
// }
|
|
938
|
-
//
|
|
939
|
-
let id = this.safeString2(order, 'id', 'order_id');
|
|
940
|
-
let status = this.parseOrderStatus(this.safeString(order, 'status', 'open'));
|
|
941
|
-
if (id === '0') {
|
|
942
|
-
id = this.safeString(order, 'init_order_id');
|
|
943
|
-
status = 'closed';
|
|
944
|
-
}
|
|
945
|
-
const timestamp = this.safeTimestamp2(order, 'timestamp_created', 'server_time');
|
|
946
|
-
const marketId = this.safeString(order, 'pair');
|
|
947
|
-
const symbol = this.safeSymbol(marketId, market);
|
|
948
|
-
const amount = this.safeString(order, 'start_amount');
|
|
949
|
-
const remaining = this.safeString2(order, 'amount', 'remains');
|
|
950
|
-
const filled = this.safeString(order, 'received', '0.0');
|
|
951
|
-
const price = this.safeString(order, 'rate');
|
|
952
|
-
const fee = undefined;
|
|
953
|
-
const type = 'limit';
|
|
954
|
-
const side = this.safeString(order, 'type');
|
|
955
|
-
return this.safeOrder({
|
|
956
|
-
'info': order,
|
|
957
|
-
'id': id,
|
|
958
|
-
'clientOrderId': undefined,
|
|
959
|
-
'symbol': symbol,
|
|
960
|
-
'timestamp': timestamp,
|
|
961
|
-
'datetime': this.iso8601(timestamp),
|
|
962
|
-
'lastTradeTimestamp': undefined,
|
|
963
|
-
'type': type,
|
|
964
|
-
'timeInForce': undefined,
|
|
965
|
-
'postOnly': undefined,
|
|
966
|
-
'side': side,
|
|
967
|
-
'price': price,
|
|
968
|
-
'stopPrice': undefined,
|
|
969
|
-
'triggerPrice': undefined,
|
|
970
|
-
'cost': undefined,
|
|
971
|
-
'amount': amount,
|
|
972
|
-
'remaining': remaining,
|
|
973
|
-
'filled': filled,
|
|
974
|
-
'status': status,
|
|
975
|
-
'fee': fee,
|
|
976
|
-
'average': undefined,
|
|
977
|
-
'trades': undefined,
|
|
978
|
-
}, market);
|
|
979
|
-
}
|
|
980
|
-
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
981
|
-
/**
|
|
982
|
-
* @method
|
|
983
|
-
* @name yobit#fetchOrder
|
|
984
|
-
* @see https://yobit.net/en/api
|
|
985
|
-
* @description fetches information on an order made by the user
|
|
986
|
-
* @param {string} symbol not used by yobit fetchOrder
|
|
987
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
988
|
-
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
989
|
-
*/
|
|
990
|
-
await this.loadMarkets();
|
|
991
|
-
const request = {
|
|
992
|
-
'order_id': parseInt(id),
|
|
993
|
-
};
|
|
994
|
-
const response = await this.privatePostOrderInfo(this.extend(request, params));
|
|
995
|
-
id = id.toString();
|
|
996
|
-
const orders = this.safeValue(response, 'return', {});
|
|
997
|
-
//
|
|
998
|
-
// {
|
|
999
|
-
// "success":1,
|
|
1000
|
-
// "return": {
|
|
1001
|
-
// "1101103635103335": {
|
|
1002
|
-
// "pair":"doge_usdt",
|
|
1003
|
-
// "type":"buy",
|
|
1004
|
-
// "start_amount":10,
|
|
1005
|
-
// "amount":10,
|
|
1006
|
-
// "rate":0.05,
|
|
1007
|
-
// "timestamp_created":"1650112553",
|
|
1008
|
-
// "status":0
|
|
1009
|
-
// }
|
|
1010
|
-
// }
|
|
1011
|
-
// }
|
|
1012
|
-
//
|
|
1013
|
-
return this.parseOrder(this.extend({ 'id': id }, orders[id]));
|
|
1014
|
-
}
|
|
1015
|
-
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1016
|
-
/**
|
|
1017
|
-
* @method
|
|
1018
|
-
* @name yobit#fetchOpenOrders
|
|
1019
|
-
* @see https://yobit.net/en/api
|
|
1020
|
-
* @description fetch all unfilled currently open orders
|
|
1021
|
-
* @param {string} symbol unified market symbol
|
|
1022
|
-
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
1023
|
-
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
1024
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1025
|
-
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1026
|
-
*/
|
|
1027
|
-
if (symbol === undefined) {
|
|
1028
|
-
throw new errors.ArgumentsRequired(this.id + ' fetchOpenOrders() requires a symbol argument');
|
|
1029
|
-
}
|
|
1030
|
-
await this.loadMarkets();
|
|
1031
|
-
const request = {};
|
|
1032
|
-
const market = undefined;
|
|
1033
|
-
if (symbol !== undefined) {
|
|
1034
|
-
const marketInner = this.market(symbol);
|
|
1035
|
-
request['pair'] = marketInner['id'];
|
|
1036
|
-
}
|
|
1037
|
-
const response = await this.privatePostActiveOrders(this.extend(request, params));
|
|
1038
|
-
//
|
|
1039
|
-
// {
|
|
1040
|
-
// "success":1,
|
|
1041
|
-
// "return": {
|
|
1042
|
-
// "1101103634006799": {
|
|
1043
|
-
// "pair":"doge_usdt",
|
|
1044
|
-
// "type":"buy",
|
|
1045
|
-
// "amount":10,
|
|
1046
|
-
// "rate":0.1,
|
|
1047
|
-
// "timestamp_created":"1650034937",
|
|
1048
|
-
// "status":0
|
|
1049
|
-
// },
|
|
1050
|
-
// "1101103634006738": {
|
|
1051
|
-
// "pair":"doge_usdt",
|
|
1052
|
-
// "type":"buy",
|
|
1053
|
-
// "amount":10,
|
|
1054
|
-
// "rate":0.1,
|
|
1055
|
-
// "timestamp_created":"1650034932",
|
|
1056
|
-
// "status":0
|
|
1057
|
-
// }
|
|
1058
|
-
// }
|
|
1059
|
-
// }
|
|
1060
|
-
//
|
|
1061
|
-
const result = this.safeValue(response, 'return', {});
|
|
1062
|
-
return this.parseOrders(result, market, since, limit);
|
|
1063
|
-
}
|
|
1064
|
-
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1065
|
-
/**
|
|
1066
|
-
* @method
|
|
1067
|
-
* @name yobit#fetchMyTrades
|
|
1068
|
-
* @see https://yobit.net/en/api
|
|
1069
|
-
* @description fetch all trades made by the user
|
|
1070
|
-
* @param {string} symbol unified market symbol
|
|
1071
|
-
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1072
|
-
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
1073
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1074
|
-
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
1075
|
-
*/
|
|
1076
|
-
if (symbol === undefined) {
|
|
1077
|
-
throw new errors.ArgumentsRequired(this.id + ' fetchMyTrades() requires a symbol argument');
|
|
1078
|
-
}
|
|
1079
|
-
await this.loadMarkets();
|
|
1080
|
-
const market = this.market(symbol);
|
|
1081
|
-
// some derived classes use camelcase notation for request fields
|
|
1082
|
-
const request = {
|
|
1083
|
-
// 'from': 123456789, // trade ID, from which the display starts numerical 0 (test result: liqui ignores this field)
|
|
1084
|
-
// 'count': 1000, // the number of trades for display numerical, default = 1000
|
|
1085
|
-
// 'from_id': trade ID, from which the display starts numerical 0
|
|
1086
|
-
// 'end_id': trade ID on which the display ends numerical ∞
|
|
1087
|
-
// 'order': 'ASC', // sorting, default = DESC (test result: liqui ignores this field, most recent trade always goes last)
|
|
1088
|
-
// 'since': 1234567890, // UTC start time, default = 0 (test result: liqui ignores this field)
|
|
1089
|
-
// 'end': 1234567890, // UTC end time, default = ∞ (test result: liqui ignores this field)
|
|
1090
|
-
'pair': market['id'],
|
|
1091
|
-
};
|
|
1092
|
-
if (limit !== undefined) {
|
|
1093
|
-
request['count'] = limit;
|
|
1094
|
-
}
|
|
1095
|
-
if (since !== undefined) {
|
|
1096
|
-
request['since'] = this.parseToInt(since / 1000);
|
|
1097
|
-
}
|
|
1098
|
-
const response = await this.privatePostTradeHistory(this.extend(request, params));
|
|
1099
|
-
//
|
|
1100
|
-
// {
|
|
1101
|
-
// "success":1,
|
|
1102
|
-
// "return": {
|
|
1103
|
-
// "200257004": {
|
|
1104
|
-
// "pair":"doge_usdt",
|
|
1105
|
-
// "type":"sell",
|
|
1106
|
-
// "amount":139,
|
|
1107
|
-
// "rate":0.139,
|
|
1108
|
-
// "order_id":"2101103631773172",
|
|
1109
|
-
// "is_your_order":1,
|
|
1110
|
-
// "timestamp":"1649861561"
|
|
1111
|
-
// }
|
|
1112
|
-
// }
|
|
1113
|
-
// }
|
|
1114
|
-
//
|
|
1115
|
-
const trades = this.safeValue(response, 'return', {});
|
|
1116
|
-
const ids = Object.keys(trades);
|
|
1117
|
-
const result = [];
|
|
1118
|
-
for (let i = 0; i < ids.length; i++) {
|
|
1119
|
-
const id = ids[i];
|
|
1120
|
-
const trade = this.parseTrade(this.extend(trades[id], {
|
|
1121
|
-
'trade_id': id,
|
|
1122
|
-
}), market);
|
|
1123
|
-
result.push(trade);
|
|
1124
|
-
}
|
|
1125
|
-
return this.filterBySymbolSinceLimit(result, market['symbol'], since, limit);
|
|
1126
|
-
}
|
|
1127
|
-
async createDepositAddress(code, params = {}) {
|
|
1128
|
-
/**
|
|
1129
|
-
* @method
|
|
1130
|
-
* @name yobit#createDepositAddress
|
|
1131
|
-
* @see https://yobit.net/en/api
|
|
1132
|
-
* @description create a currency deposit address
|
|
1133
|
-
* @param {string} code unified currency code of the currency for the deposit address
|
|
1134
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1135
|
-
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
1136
|
-
*/
|
|
1137
|
-
const request = {
|
|
1138
|
-
'need_new': 1,
|
|
1139
|
-
};
|
|
1140
|
-
const response = await this.fetchDepositAddress(code, this.extend(request, params));
|
|
1141
|
-
const address = this.safeString(response, 'address');
|
|
1142
|
-
this.checkAddress(address);
|
|
1143
|
-
return {
|
|
1144
|
-
'currency': code,
|
|
1145
|
-
'address': address,
|
|
1146
|
-
'tag': undefined,
|
|
1147
|
-
'info': response['info'],
|
|
1148
|
-
};
|
|
1149
|
-
}
|
|
1150
|
-
async fetchDepositAddress(code, params = {}) {
|
|
1151
|
-
/**
|
|
1152
|
-
* @method
|
|
1153
|
-
* @name yobit#fetchDepositAddress
|
|
1154
|
-
* @see https://yobit.net/en/api
|
|
1155
|
-
* @description fetch the deposit address for a currency associated with this account
|
|
1156
|
-
* @param {string} code unified currency code
|
|
1157
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1158
|
-
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
1159
|
-
*/
|
|
1160
|
-
await this.loadMarkets();
|
|
1161
|
-
const currency = this.currency(code);
|
|
1162
|
-
let currencyId = currency['id'];
|
|
1163
|
-
const networks = this.safeValue(this.options, 'networks', {});
|
|
1164
|
-
let network = this.safeStringUpper(params, 'network'); // this line allows the user to specify either ERC20 or ETH
|
|
1165
|
-
network = this.safeString(networks, network, network); // handle ERC20>ETH alias
|
|
1166
|
-
if (network !== undefined) {
|
|
1167
|
-
if (network !== 'ERC20') {
|
|
1168
|
-
currencyId = currencyId + network.toLowerCase();
|
|
1169
|
-
}
|
|
1170
|
-
params = this.omit(params, 'network');
|
|
1171
|
-
}
|
|
1172
|
-
const request = {
|
|
1173
|
-
'coinName': currencyId,
|
|
1174
|
-
'need_new': 0,
|
|
1175
|
-
};
|
|
1176
|
-
const response = await this.privatePostGetDepositAddress(this.extend(request, params));
|
|
1177
|
-
const address = this.safeString(response['return'], 'address');
|
|
1178
|
-
this.checkAddress(address);
|
|
1179
|
-
return {
|
|
1180
|
-
'currency': code,
|
|
1181
|
-
'address': address,
|
|
1182
|
-
'tag': undefined,
|
|
1183
|
-
'network': undefined,
|
|
1184
|
-
'info': response,
|
|
1185
|
-
};
|
|
1186
|
-
}
|
|
1187
|
-
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
1188
|
-
/**
|
|
1189
|
-
* @method
|
|
1190
|
-
* @name yobit#withdraw
|
|
1191
|
-
* @see https://yobit.net/en/api
|
|
1192
|
-
* @description make a withdrawal
|
|
1193
|
-
* @param {string} code unified currency code
|
|
1194
|
-
* @param {float} amount the amount to withdraw
|
|
1195
|
-
* @param {string} address the address to withdraw to
|
|
1196
|
-
* @param {string} tag
|
|
1197
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1198
|
-
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
1199
|
-
*/
|
|
1200
|
-
[tag, params] = this.handleWithdrawTagAndParams(tag, params);
|
|
1201
|
-
this.checkAddress(address);
|
|
1202
|
-
await this.loadMarkets();
|
|
1203
|
-
const currency = this.currency(code);
|
|
1204
|
-
const request = {
|
|
1205
|
-
'coinName': currency['id'],
|
|
1206
|
-
'amount': amount,
|
|
1207
|
-
'address': address,
|
|
1208
|
-
};
|
|
1209
|
-
// no docs on the tag, yet...
|
|
1210
|
-
if (tag !== undefined) {
|
|
1211
|
-
throw new errors.ExchangeError(this.id + ' withdraw() does not support the tag argument yet due to a lack of docs on withdrawing with tag/memo on behalf of the exchange.');
|
|
1212
|
-
}
|
|
1213
|
-
const response = await this.privatePostWithdrawCoinsToAddress(this.extend(request, params));
|
|
1214
|
-
return {
|
|
1215
|
-
'info': response,
|
|
1216
|
-
'id': undefined,
|
|
1217
|
-
};
|
|
1218
|
-
}
|
|
1219
|
-
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
1220
|
-
let url = this.urls['api'][api];
|
|
1221
|
-
const query = this.omit(params, this.extractParams(path));
|
|
1222
|
-
if (api === 'private') {
|
|
1223
|
-
this.checkRequiredCredentials();
|
|
1224
|
-
const nonce = this.nonce();
|
|
1225
|
-
body = this.urlencode(this.extend({
|
|
1226
|
-
'nonce': nonce,
|
|
1227
|
-
'method': path,
|
|
1228
|
-
}, query));
|
|
1229
|
-
const signature = this.hmac(this.encode(body), this.encode(this.secret), sha512.sha512);
|
|
1230
|
-
headers = {
|
|
1231
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
1232
|
-
'Key': this.apiKey,
|
|
1233
|
-
'Sign': signature,
|
|
1234
|
-
};
|
|
1235
|
-
}
|
|
1236
|
-
else if (api === 'public') {
|
|
1237
|
-
url += '/' + this.version + '/' + this.implodeParams(path, params);
|
|
1238
|
-
if (Object.keys(query).length) {
|
|
1239
|
-
url += '?' + this.urlencode(query);
|
|
1240
|
-
}
|
|
1241
|
-
}
|
|
1242
|
-
else {
|
|
1243
|
-
url += '/' + this.implodeParams(path, params);
|
|
1244
|
-
if (method === 'GET') {
|
|
1245
|
-
if (Object.keys(query).length) {
|
|
1246
|
-
url += '?' + this.urlencode(query);
|
|
1247
|
-
}
|
|
1248
|
-
}
|
|
1249
|
-
else {
|
|
1250
|
-
if (Object.keys(query).length) {
|
|
1251
|
-
body = this.json(query);
|
|
1252
|
-
headers = {
|
|
1253
|
-
'Content-Type': 'application/json',
|
|
1254
|
-
};
|
|
1255
|
-
}
|
|
1256
|
-
}
|
|
1257
|
-
}
|
|
1258
|
-
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
1259
|
-
}
|
|
1260
|
-
handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
1261
|
-
if (response === undefined) {
|
|
1262
|
-
return undefined; // fallback to default error handler
|
|
1263
|
-
}
|
|
1264
|
-
if ('success' in response) {
|
|
1265
|
-
//
|
|
1266
|
-
// 1 - Liqui only returns the integer 'success' key from their private API
|
|
1267
|
-
//
|
|
1268
|
-
// { "success": 1, ... } httpCode === 200
|
|
1269
|
-
// { "success": 0, ... } httpCode === 200
|
|
1270
|
-
//
|
|
1271
|
-
// 2 - However, exchanges derived from Liqui, can return non-integers
|
|
1272
|
-
//
|
|
1273
|
-
// It can be a numeric string
|
|
1274
|
-
// { "sucesss": "1", ... }
|
|
1275
|
-
// { "sucesss": "0", ... }, httpCode >= 200 (can be 403, 502, etc)
|
|
1276
|
-
//
|
|
1277
|
-
// Or just a string
|
|
1278
|
-
// { "success": "true", ... }
|
|
1279
|
-
// { "success": "false", ... }, httpCode >= 200
|
|
1280
|
-
//
|
|
1281
|
-
// Or a boolean
|
|
1282
|
-
// { "success": true, ... }
|
|
1283
|
-
// { "success": false, ... }, httpCode >= 200
|
|
1284
|
-
//
|
|
1285
|
-
// 3 - Oversimplified, Python PEP8 forbids comparison operator (===) of different types
|
|
1286
|
-
//
|
|
1287
|
-
// 4 - We do not want to copy-paste and duplicate the code of this handler to other exchanges derived from Liqui
|
|
1288
|
-
//
|
|
1289
|
-
// To cover points 1, 2, 3 and 4 combined this handler should work like this:
|
|
1290
|
-
//
|
|
1291
|
-
let success = this.safeValue(response, 'success', false);
|
|
1292
|
-
if (typeof success === 'string') {
|
|
1293
|
-
if ((success === 'true') || (success === '1')) {
|
|
1294
|
-
success = true;
|
|
1295
|
-
}
|
|
1296
|
-
else {
|
|
1297
|
-
success = false;
|
|
1298
|
-
}
|
|
1299
|
-
}
|
|
1300
|
-
if (!success) {
|
|
1301
|
-
const code = this.safeString(response, 'code');
|
|
1302
|
-
const message = this.safeString(response, 'error');
|
|
1303
|
-
const feedback = this.id + ' ' + body;
|
|
1304
|
-
this.throwExactlyMatchedException(this.exceptions['exact'], code, feedback);
|
|
1305
|
-
this.throwExactlyMatchedException(this.exceptions['exact'], message, feedback);
|
|
1306
|
-
this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
|
|
1307
|
-
throw new errors.ExchangeError(feedback); // unknown message
|
|
1308
|
-
}
|
|
1309
|
-
}
|
|
1310
|
-
return undefined;
|
|
1311
|
-
}
|
|
1312
|
-
}
|
|
1313
|
-
|
|
1314
|
-
module.exports = yobit;
|