ccxt 4.2.71 → 4.2.73
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 +124 -122
- package/build.sh +1 -1
- package/dist/ccxt.browser.js +3293 -378
- package/dist/ccxt.browser.min.js +4 -4
- package/dist/cjs/ccxt.js +6 -1
- package/dist/cjs/src/abstract/coinbaseinternational.js +9 -0
- package/dist/cjs/src/ascendex.js +149 -2
- package/dist/cjs/src/base/Exchange.js +30 -6
- package/dist/cjs/src/btcturk.js +3 -3
- package/dist/cjs/src/coinbaseinternational.js +2019 -0
- package/dist/cjs/src/gate.js +1 -1
- package/dist/cjs/src/hyperliquid.js +8 -2
- package/dist/cjs/src/mexc.js +1 -1
- package/dist/cjs/src/okx.js +1 -1
- package/dist/cjs/src/pro/bingx.js +29 -6
- package/dist/cjs/src/pro/coinbaseinternational.js +645 -0
- package/dist/cjs/src/pro/hitbtc.js +16 -7
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -2
- package/js/src/abstract/coinbaseinternational.d.ts +42 -0
- package/js/src/abstract/coinbaseinternational.js +11 -0
- package/js/src/ace.d.ts +2 -2
- package/js/src/alpaca.d.ts +2 -2
- package/js/src/ascendex.d.ts +7 -3
- package/js/src/ascendex.js +149 -2
- package/js/src/base/Exchange.d.ts +81 -78
- package/js/src/base/Exchange.js +30 -6
- package/js/src/base/types.d.ts +10 -0
- package/js/src/bigone.d.ts +2 -2
- package/js/src/binance.d.ts +8 -8
- package/js/src/bingx.d.ts +4 -4
- package/js/src/bit2c.d.ts +2 -2
- package/js/src/bitbank.d.ts +2 -2
- package/js/src/bitbns.d.ts +2 -2
- package/js/src/bitfinex.d.ts +3 -3
- package/js/src/bitfinex2.d.ts +5 -5
- package/js/src/bitflyer.d.ts +2 -2
- package/js/src/bitget.d.ts +4 -4
- package/js/src/bithumb.d.ts +2 -2
- package/js/src/bitmart.d.ts +4 -4
- package/js/src/bitmex.d.ts +3 -3
- package/js/src/bitopro.d.ts +2 -2
- package/js/src/bitrue.d.ts +5 -5
- package/js/src/bitso.d.ts +2 -2
- package/js/src/bitstamp.d.ts +2 -2
- package/js/src/bitteam.d.ts +2 -2
- package/js/src/bitvavo.d.ts +4 -4
- package/js/src/bl3p.d.ts +2 -2
- package/js/src/blockchaincom.d.ts +2 -2
- package/js/src/blofin.d.ts +4 -4
- package/js/src/btcalpha.d.ts +2 -2
- package/js/src/btcbox.d.ts +2 -2
- package/js/src/btcmarkets.d.ts +2 -2
- package/js/src/btcturk.d.ts +2 -2
- package/js/src/btcturk.js +3 -3
- package/js/src/bybit.d.ts +5 -5
- package/js/src/cex.d.ts +4 -4
- package/js/src/coinbase.d.ts +3 -3
- package/js/src/coinbaseinternational.d.ts +146 -0
- package/js/src/coinbaseinternational.js +2020 -0
- package/js/src/coinbasepro.d.ts +2 -2
- package/js/src/coincheck.d.ts +2 -2
- package/js/src/coinex.d.ts +4 -4
- package/js/src/coinlist.d.ts +3 -3
- package/js/src/coinmate.d.ts +2 -2
- package/js/src/coinmetro.d.ts +2 -2
- package/js/src/coinone.d.ts +2 -2
- package/js/src/coinsph.d.ts +2 -2
- package/js/src/coinspot.d.ts +2 -2
- package/js/src/cryptocom.d.ts +4 -4
- package/js/src/currencycom.d.ts +2 -2
- package/js/src/delta.d.ts +3 -3
- package/js/src/deribit.d.ts +3 -3
- package/js/src/digifinex.d.ts +3 -3
- package/js/src/exmo.d.ts +3 -3
- package/js/src/gate.d.ts +5 -5
- package/js/src/gate.js +1 -1
- package/js/src/gemini.d.ts +2 -2
- package/js/src/hitbtc.d.ts +4 -4
- package/js/src/hollaex.d.ts +2 -2
- package/js/src/htx.d.ts +6 -6
- package/js/src/huobijp.d.ts +2 -2
- package/js/src/hyperliquid.d.ts +4 -3
- package/js/src/hyperliquid.js +9 -3
- package/js/src/idex.d.ts +3 -3
- package/js/src/independentreserve.d.ts +2 -2
- package/js/src/indodax.d.ts +2 -2
- package/js/src/kraken.d.ts +3 -3
- package/js/src/krakenfutures.d.ts +4 -4
- package/js/src/kucoin.d.ts +4 -4
- package/js/src/kucoinfutures.d.ts +4 -4
- package/js/src/kuna.d.ts +2 -2
- package/js/src/latoken.d.ts +2 -2
- package/js/src/lbank.d.ts +2 -2
- package/js/src/luno.d.ts +2 -2
- package/js/src/lykke.d.ts +2 -2
- package/js/src/mercado.d.ts +2 -2
- package/js/src/mexc.d.ts +2 -2
- package/js/src/mexc.js +1 -1
- package/js/src/ndax.d.ts +3 -3
- package/js/src/novadax.d.ts +2 -2
- package/js/src/oceanex.d.ts +2 -2
- package/js/src/okcoin.d.ts +3 -3
- package/js/src/okx.d.ts +4 -4
- package/js/src/okx.js +1 -1
- package/js/src/onetrading.d.ts +2 -2
- package/js/src/p2b.d.ts +2 -2
- package/js/src/paymium.d.ts +2 -2
- package/js/src/phemex.d.ts +3 -3
- package/js/src/poloniex.d.ts +3 -3
- package/js/src/poloniexfutures.d.ts +4 -4
- package/js/src/pro/binance.d.ts +3 -3
- package/js/src/pro/bingx.d.ts +1 -0
- package/js/src/pro/bingx.js +29 -6
- package/js/src/pro/bitvavo.d.ts +11 -11
- package/js/src/pro/bybit.d.ts +1 -1
- package/js/src/pro/cex.d.ts +8 -8
- package/js/src/pro/coinbase.d.ts +2 -2
- package/js/src/pro/coinbaseinternational.d.ts +28 -0
- package/js/src/pro/coinbaseinternational.js +646 -0
- package/js/src/pro/cryptocom.d.ts +2 -2
- package/js/src/pro/hitbtc.d.ts +2 -2
- package/js/src/pro/hitbtc.js +16 -7
- package/js/src/pro/kraken.d.ts +3 -3
- package/js/src/pro/okx.d.ts +3 -3
- package/js/src/pro/poloniex.d.ts +5 -5
- package/js/src/probit.d.ts +2 -2
- package/js/src/timex.d.ts +3 -3
- package/js/src/tokocrypto.d.ts +2 -2
- package/js/src/upbit.d.ts +2 -2
- package/js/src/wavesexchange.d.ts +2 -2
- package/js/src/wazirx.d.ts +2 -2
- package/js/src/whitebit.d.ts +2 -2
- package/js/src/woo.d.ts +5 -5
- package/js/src/yobit.d.ts +2 -2
- package/js/src/zaif.d.ts +2 -2
- package/js/src/zonda.d.ts +2 -2
- package/package.json +1 -1
- package/skip-tests.json +13 -0
package/dist/ccxt.browser.js
CHANGED
|
@@ -512,6 +512,22 @@ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchang
|
|
|
512
512
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
|
|
513
513
|
|
|
514
514
|
|
|
515
|
+
/***/ }),
|
|
516
|
+
|
|
517
|
+
/***/ 931:
|
|
518
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
519
|
+
|
|
520
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
521
|
+
/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
522
|
+
/* harmony export */ });
|
|
523
|
+
/* harmony import */ var _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
|
|
524
|
+
// -------------------------------------------------------------------------------
|
|
525
|
+
|
|
526
|
+
class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e {
|
|
527
|
+
}
|
|
528
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
|
|
529
|
+
|
|
530
|
+
|
|
515
531
|
/***/ }),
|
|
516
532
|
|
|
517
533
|
/***/ 2925:
|
|
@@ -3713,9 +3729,11 @@ class ascendex extends _abstract_ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
|
|
|
3713
3729
|
'fetchFundingRateHistory': false,
|
|
3714
3730
|
'fetchFundingRates': true,
|
|
3715
3731
|
'fetchIndexOHLCV': false,
|
|
3716
|
-
'fetchLeverage':
|
|
3732
|
+
'fetchLeverage': 'emulated',
|
|
3733
|
+
'fetchLeverages': true,
|
|
3717
3734
|
'fetchLeverageTiers': true,
|
|
3718
|
-
'fetchMarginMode':
|
|
3735
|
+
'fetchMarginMode': 'emulated',
|
|
3736
|
+
'fetchMarginModes': true,
|
|
3719
3737
|
'fetchMarketLeverageTiers': 'emulated',
|
|
3720
3738
|
'fetchMarkets': true,
|
|
3721
3739
|
'fetchMarkOHLCV': false,
|
|
@@ -6931,6 +6949,151 @@ class ascendex extends _abstract_ascendex_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
|
|
|
6931
6949
|
'amount': this.safeNumber(income, 'paymentInUSDT'),
|
|
6932
6950
|
};
|
|
6933
6951
|
}
|
|
6952
|
+
async fetchMarginModes(symbols = undefined, params = {}) {
|
|
6953
|
+
/**
|
|
6954
|
+
* @method
|
|
6955
|
+
* @name ascendex#fetchMarginMode
|
|
6956
|
+
* @description fetches the set margin mode of the user
|
|
6957
|
+
* @see https://ascendex.github.io/ascendex-futures-pro-api-v2/#position
|
|
6958
|
+
* @param {string[]} [symbols] a list of unified market symbols
|
|
6959
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
6960
|
+
* @returns {object} a list of [margin mode structures]{@link https://docs.ccxt.com/#/?id=margin-mode-structure}
|
|
6961
|
+
*/
|
|
6962
|
+
await this.loadMarkets();
|
|
6963
|
+
await this.loadAccounts();
|
|
6964
|
+
const account = this.safeValue(this.accounts, 0, {});
|
|
6965
|
+
const accountGroup = this.safeString(account, 'id');
|
|
6966
|
+
const request = {
|
|
6967
|
+
'account-group': accountGroup,
|
|
6968
|
+
};
|
|
6969
|
+
const response = await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(request, params));
|
|
6970
|
+
//
|
|
6971
|
+
// {
|
|
6972
|
+
// "code": 0,
|
|
6973
|
+
// "data": {
|
|
6974
|
+
// "accountId": "fut2ODPhGiY71Pl4vtXnOZ00ssgD7QGn",
|
|
6975
|
+
// "ac": "FUTURES",
|
|
6976
|
+
// "collaterals": [
|
|
6977
|
+
// {
|
|
6978
|
+
// "asset": "USDT",
|
|
6979
|
+
// "balance": "44.570287262",
|
|
6980
|
+
// "referencePrice": "1",
|
|
6981
|
+
// "discountFactor": "1"
|
|
6982
|
+
// }
|
|
6983
|
+
// ],
|
|
6984
|
+
// "contracts": [
|
|
6985
|
+
// {
|
|
6986
|
+
// "symbol": "BTC-PERP",
|
|
6987
|
+
// "side": "LONG",
|
|
6988
|
+
// "position": "0.0001",
|
|
6989
|
+
// "referenceCost": "-3.12277254",
|
|
6990
|
+
// "unrealizedPnl": "-0.001700233",
|
|
6991
|
+
// "realizedPnl": "0",
|
|
6992
|
+
// "avgOpenPrice": "31209",
|
|
6993
|
+
// "marginType": "isolated",
|
|
6994
|
+
// "isolatedMargin": "1.654972977",
|
|
6995
|
+
// "leverage": "2",
|
|
6996
|
+
// "takeProfitPrice": "0",
|
|
6997
|
+
// "takeProfitTrigger": "market",
|
|
6998
|
+
// "stopLossPrice": "0",
|
|
6999
|
+
// "stopLossTrigger": "market",
|
|
7000
|
+
// "buyOpenOrderNotional": "0",
|
|
7001
|
+
// "sellOpenOrderNotional": "0",
|
|
7002
|
+
// "markPrice": "31210.723063672",
|
|
7003
|
+
// "indexPrice": "31223.148857925"
|
|
7004
|
+
// },
|
|
7005
|
+
// ]
|
|
7006
|
+
// }
|
|
7007
|
+
// }
|
|
7008
|
+
//
|
|
7009
|
+
const data = this.safeDict(response, 'data', {});
|
|
7010
|
+
const marginModes = this.safeList(data, 'contracts', []);
|
|
7011
|
+
return this.parseMarginModes(marginModes, symbols, 'symbol');
|
|
7012
|
+
}
|
|
7013
|
+
parseMarginMode(marginMode, market = undefined) {
|
|
7014
|
+
const marketId = this.safeString(marginMode, 'symbol');
|
|
7015
|
+
const marginType = this.safeString(marginMode, 'marginType');
|
|
7016
|
+
const margin = (marginType === 'crossed') ? 'cross' : 'isolated';
|
|
7017
|
+
return {
|
|
7018
|
+
'info': marginMode,
|
|
7019
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
7020
|
+
'marginMode': margin,
|
|
7021
|
+
};
|
|
7022
|
+
}
|
|
7023
|
+
async fetchLeverages(symbols = undefined, params = {}) {
|
|
7024
|
+
/**
|
|
7025
|
+
* @method
|
|
7026
|
+
* @name ascendex#fetchLeverages
|
|
7027
|
+
* @description fetch the set leverage for all contract markets
|
|
7028
|
+
* @see https://ascendex.github.io/ascendex-futures-pro-api-v2/#position
|
|
7029
|
+
* @param {string[]} [symbols] a list of unified market symbols
|
|
7030
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
7031
|
+
* @returns {object} a list of [leverage structures]{@link https://docs.ccxt.com/#/?id=leverage-structure}
|
|
7032
|
+
*/
|
|
7033
|
+
await this.loadMarkets();
|
|
7034
|
+
await this.loadAccounts();
|
|
7035
|
+
const account = this.safeValue(this.accounts, 0, {});
|
|
7036
|
+
const accountGroup = this.safeString(account, 'id');
|
|
7037
|
+
const request = {
|
|
7038
|
+
'account-group': accountGroup,
|
|
7039
|
+
};
|
|
7040
|
+
const response = await this.v2PrivateAccountGroupGetFuturesPosition(this.extend(request, params));
|
|
7041
|
+
//
|
|
7042
|
+
// {
|
|
7043
|
+
// "code": 0,
|
|
7044
|
+
// "data": {
|
|
7045
|
+
// "accountId": "fut2ODPhGiY71Pl4vtXnOZ00ssgD7QGn",
|
|
7046
|
+
// "ac": "FUTURES",
|
|
7047
|
+
// "collaterals": [
|
|
7048
|
+
// {
|
|
7049
|
+
// "asset": "USDT",
|
|
7050
|
+
// "balance": "44.570287262",
|
|
7051
|
+
// "referencePrice": "1",
|
|
7052
|
+
// "discountFactor": "1"
|
|
7053
|
+
// }
|
|
7054
|
+
// ],
|
|
7055
|
+
// "contracts": [
|
|
7056
|
+
// {
|
|
7057
|
+
// "symbol": "BTC-PERP",
|
|
7058
|
+
// "side": "LONG",
|
|
7059
|
+
// "position": "0.0001",
|
|
7060
|
+
// "referenceCost": "-3.12277254",
|
|
7061
|
+
// "unrealizedPnl": "-0.001700233",
|
|
7062
|
+
// "realizedPnl": "0",
|
|
7063
|
+
// "avgOpenPrice": "31209",
|
|
7064
|
+
// "marginType": "isolated",
|
|
7065
|
+
// "isolatedMargin": "1.654972977",
|
|
7066
|
+
// "leverage": "2",
|
|
7067
|
+
// "takeProfitPrice": "0",
|
|
7068
|
+
// "takeProfitTrigger": "market",
|
|
7069
|
+
// "stopLossPrice": "0",
|
|
7070
|
+
// "stopLossTrigger": "market",
|
|
7071
|
+
// "buyOpenOrderNotional": "0",
|
|
7072
|
+
// "sellOpenOrderNotional": "0",
|
|
7073
|
+
// "markPrice": "31210.723063672",
|
|
7074
|
+
// "indexPrice": "31223.148857925"
|
|
7075
|
+
// },
|
|
7076
|
+
// ]
|
|
7077
|
+
// }
|
|
7078
|
+
// }
|
|
7079
|
+
//
|
|
7080
|
+
const data = this.safeDict(response, 'data', {});
|
|
7081
|
+
const leverages = this.safeList(data, 'contracts', []);
|
|
7082
|
+
return this.parseLeverages(leverages, symbols, 'symbol');
|
|
7083
|
+
}
|
|
7084
|
+
parseLeverage(leverage, market = undefined) {
|
|
7085
|
+
const marketId = this.safeString(leverage, 'symbol');
|
|
7086
|
+
const leverageValue = this.safeInteger(leverage, 'leverage');
|
|
7087
|
+
const marginType = this.safeString(leverage, 'marginType');
|
|
7088
|
+
const marginMode = (marginType === 'crossed') ? 'cross' : 'isolated';
|
|
7089
|
+
return {
|
|
7090
|
+
'info': leverage,
|
|
7091
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
7092
|
+
'marginMode': marginMode,
|
|
7093
|
+
'longLeverage': leverageValue,
|
|
7094
|
+
'shortLeverage': leverageValue,
|
|
7095
|
+
};
|
|
7096
|
+
}
|
|
6934
7097
|
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
6935
7098
|
const version = api[0];
|
|
6936
7099
|
const access = api[1];
|
|
@@ -9024,6 +9187,15 @@ class Exchange {
|
|
|
9024
9187
|
async fetchFundingRates(symbols = undefined, params = {}) {
|
|
9025
9188
|
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchFundingRates() is not supported yet');
|
|
9026
9189
|
}
|
|
9190
|
+
async watchFundingRate(symbol, params = {}) {
|
|
9191
|
+
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' watchFundingRate() is not supported yet');
|
|
9192
|
+
}
|
|
9193
|
+
async watchFundingRates(symbols, params = {}) {
|
|
9194
|
+
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' watchFundingRates() is not supported yet');
|
|
9195
|
+
}
|
|
9196
|
+
async watchFundingRatesForSymbols(symbols, params = {}) {
|
|
9197
|
+
return await this.watchFundingRates(symbols, params);
|
|
9198
|
+
}
|
|
9027
9199
|
async transfer(code, amount, fromAccount, toAccount, params = {}) {
|
|
9028
9200
|
throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' transfer() is not supported yet');
|
|
9029
9201
|
}
|
|
@@ -10274,11 +10446,19 @@ class Exchange {
|
|
|
10274
10446
|
// for example, if 'ETH' is passed for networkCode, but 'ETH' key not defined in `options->networks` object
|
|
10275
10447
|
if (networkId === undefined) {
|
|
10276
10448
|
if (currencyCode === undefined) {
|
|
10277
|
-
|
|
10278
|
-
|
|
10449
|
+
const currencies = Object.values(this.currencies);
|
|
10450
|
+
for (let i = 0; i < currencies.length; i++) {
|
|
10451
|
+
const currency = [i];
|
|
10452
|
+
const networks = this.safeDict(currency, 'networks');
|
|
10453
|
+
const network = this.safeDict(networks, networkCode);
|
|
10454
|
+
networkId = this.safeString(network, 'id');
|
|
10455
|
+
if (networkId !== undefined) {
|
|
10456
|
+
break;
|
|
10457
|
+
}
|
|
10458
|
+
}
|
|
10279
10459
|
}
|
|
10280
10460
|
else {
|
|
10281
|
-
// if currencyCode was provided, then we try to find if that currencyCode has a replacement (i.e. ERC20 for ETH)
|
|
10461
|
+
// if currencyCode was provided, then we try to find if that currencyCode has a replacement (i.e. ERC20 for ETH) or is in the currency
|
|
10282
10462
|
const defaultNetworkCodeReplacements = this.safeValue(this.options, 'defaultNetworkCodeReplacements', {});
|
|
10283
10463
|
if (currencyCode in defaultNetworkCodeReplacements) {
|
|
10284
10464
|
// if there is a replacement for the passed networkCode, then we use it to find network-id in `options->networks` object
|
|
@@ -10294,11 +10474,18 @@ class Exchange {
|
|
|
10294
10474
|
}
|
|
10295
10475
|
}
|
|
10296
10476
|
}
|
|
10297
|
-
|
|
10298
|
-
|
|
10299
|
-
|
|
10477
|
+
else {
|
|
10478
|
+
// serach for network inside currency
|
|
10479
|
+
const currency = this.safeDict(this.currencies, currencyCode);
|
|
10480
|
+
const networks = this.safeDict(currency, 'networks');
|
|
10481
|
+
const network = this.safeDict(networks, networkCode);
|
|
10482
|
+
networkId = this.safeString(network, 'id');
|
|
10300
10483
|
}
|
|
10301
10484
|
}
|
|
10485
|
+
// if it wasn't found, we just set the provided value to network-id
|
|
10486
|
+
if (networkId === undefined) {
|
|
10487
|
+
networkId = networkCode;
|
|
10488
|
+
}
|
|
10302
10489
|
}
|
|
10303
10490
|
return networkId;
|
|
10304
10491
|
}
|
|
@@ -82306,9 +82493,9 @@ class btcturk extends _abstract_btcturk_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
82306
82493
|
'30m': 30,
|
|
82307
82494
|
'1h': 60,
|
|
82308
82495
|
'4h': 240,
|
|
82309
|
-
'1d': '1
|
|
82310
|
-
'1w': '1
|
|
82311
|
-
'1y': '1
|
|
82496
|
+
'1d': '1 d',
|
|
82497
|
+
'1w': '1 w',
|
|
82498
|
+
'1y': '1 y',
|
|
82312
82499
|
},
|
|
82313
82500
|
'urls': {
|
|
82314
82501
|
'logo': 'https://user-images.githubusercontent.com/51840849/87153926-efbef500-c2c0-11ea-9842-05b63612c4b9.jpg',
|
|
@@ -96917,6 +97104,2035 @@ class coinbase extends _abstract_coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
|
|
|
96917
97104
|
}
|
|
96918
97105
|
|
|
96919
97106
|
|
|
97107
|
+
/***/ }),
|
|
97108
|
+
|
|
97109
|
+
/***/ 9339:
|
|
97110
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
97111
|
+
|
|
97112
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
97113
|
+
/* harmony export */ Z: () => (/* binding */ coinbaseinternational)
|
|
97114
|
+
/* harmony export */ });
|
|
97115
|
+
/* harmony import */ var _abstract_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(931);
|
|
97116
|
+
/* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6689);
|
|
97117
|
+
/* harmony import */ var _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2194);
|
|
97118
|
+
/* harmony import */ var _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9292);
|
|
97119
|
+
/* harmony import */ var _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1372);
|
|
97120
|
+
// ----------------------------------------------------------------------------
|
|
97121
|
+
|
|
97122
|
+
|
|
97123
|
+
|
|
97124
|
+
|
|
97125
|
+
|
|
97126
|
+
// ----------------------------------------------------------------------------
|
|
97127
|
+
/**
|
|
97128
|
+
* @class coinbaseinternational
|
|
97129
|
+
* @augments Exchange
|
|
97130
|
+
*/
|
|
97131
|
+
class coinbaseinternational extends _abstract_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
97132
|
+
describe() {
|
|
97133
|
+
return this.deepExtend(super.describe(), {
|
|
97134
|
+
'id': 'coinbaseinternational',
|
|
97135
|
+
'name': 'coinbase International',
|
|
97136
|
+
'countries': ['US'],
|
|
97137
|
+
'certified': true,
|
|
97138
|
+
'pro': true,
|
|
97139
|
+
'rateLimit': 100,
|
|
97140
|
+
'version': 'v1',
|
|
97141
|
+
'userAgent': this.userAgents['chrome'],
|
|
97142
|
+
'headers': {
|
|
97143
|
+
'CB-VERSION': '2018-05-30',
|
|
97144
|
+
},
|
|
97145
|
+
'has': {
|
|
97146
|
+
'CORS': true,
|
|
97147
|
+
'spot': true,
|
|
97148
|
+
'margin': true,
|
|
97149
|
+
'swap': true,
|
|
97150
|
+
'future': true,
|
|
97151
|
+
'option': false,
|
|
97152
|
+
'addMargin': false,
|
|
97153
|
+
'cancelAllOrders': true,
|
|
97154
|
+
'cancelOrder': true,
|
|
97155
|
+
'cancelOrders': false,
|
|
97156
|
+
'closeAllPositions': false,
|
|
97157
|
+
'closePosition': false,
|
|
97158
|
+
'createDepositAddress': true,
|
|
97159
|
+
'createLimitBuyOrder': true,
|
|
97160
|
+
'createLimitSellOrder': true,
|
|
97161
|
+
'createMarketBuyOrder': true,
|
|
97162
|
+
'createMarketBuyOrderWithCost': false,
|
|
97163
|
+
'createMarketOrderWithCost': false,
|
|
97164
|
+
'createMarketSellOrder': true,
|
|
97165
|
+
'createMarketSellOrderWithCost': false,
|
|
97166
|
+
'createOrder': true,
|
|
97167
|
+
'createPostOnlyOrder': true,
|
|
97168
|
+
'createReduceOnlyOrder': false,
|
|
97169
|
+
'createStopLimitOrder': true,
|
|
97170
|
+
'createStopMarketOrder': true,
|
|
97171
|
+
'createStopOrder': true,
|
|
97172
|
+
'editOrder': true,
|
|
97173
|
+
'fetchAccounts': true,
|
|
97174
|
+
'fetchBalance': true,
|
|
97175
|
+
'fetchBidsAsks': false,
|
|
97176
|
+
'fetchBorrowRateHistories': false,
|
|
97177
|
+
'fetchBorrowRateHistory': false,
|
|
97178
|
+
'fetchCanceledOrders': false,
|
|
97179
|
+
'fetchClosedOrders': false,
|
|
97180
|
+
'fetchCrossBorrowRate': false,
|
|
97181
|
+
'fetchCrossBorrowRates': false,
|
|
97182
|
+
'fetchCurrencies': true,
|
|
97183
|
+
'fetchDeposits': true,
|
|
97184
|
+
'fetchFundingHistory': false,
|
|
97185
|
+
'fetchFundingRate': false,
|
|
97186
|
+
'fetchFundingRateHistory': true,
|
|
97187
|
+
'fetchFundingRates': false,
|
|
97188
|
+
'fetchIndexOHLCV': false,
|
|
97189
|
+
'fetchIsolatedBorrowRate': false,
|
|
97190
|
+
'fetchIsolatedBorrowRates': false,
|
|
97191
|
+
'fetchL2OrderBook': false,
|
|
97192
|
+
'fetchLedger': false,
|
|
97193
|
+
'fetchLeverage': false,
|
|
97194
|
+
'fetchLeverageTiers': false,
|
|
97195
|
+
'fetchMarginMode': false,
|
|
97196
|
+
'fetchMarkets': true,
|
|
97197
|
+
'fetchMarkOHLCV': false,
|
|
97198
|
+
'fetchMyBuys': true,
|
|
97199
|
+
'fetchMySells': true,
|
|
97200
|
+
'fetchMyTrades': true,
|
|
97201
|
+
'fetchOHLCV': false,
|
|
97202
|
+
'fetchOpenInterestHistory': false,
|
|
97203
|
+
'fetchOpenOrders': true,
|
|
97204
|
+
'fetchOrder': true,
|
|
97205
|
+
'fetchOrderBook': false,
|
|
97206
|
+
'fetchOrders': false,
|
|
97207
|
+
'fetchPosition': true,
|
|
97208
|
+
'fetchPositionMode': false,
|
|
97209
|
+
'fetchPositions': true,
|
|
97210
|
+
'fetchPositionsRisk': false,
|
|
97211
|
+
'fetchPremiumIndexOHLCV': false,
|
|
97212
|
+
'fetchTicker': true,
|
|
97213
|
+
'fetchTickers': true,
|
|
97214
|
+
'fetchTime': false,
|
|
97215
|
+
'fetchTrades': false,
|
|
97216
|
+
'fetchTradingFee': false,
|
|
97217
|
+
'fetchTradingFees': false,
|
|
97218
|
+
'fetchWithdrawals': true,
|
|
97219
|
+
'reduceMargin': false,
|
|
97220
|
+
'setLeverage': false,
|
|
97221
|
+
'setMargin': true,
|
|
97222
|
+
'setMarginMode': false,
|
|
97223
|
+
'setPositionMode': false,
|
|
97224
|
+
'withdraw': true,
|
|
97225
|
+
},
|
|
97226
|
+
'urls': {
|
|
97227
|
+
'logo': 'https://github.com/ccxt/ccxt/assets/43336371/866ae638-6ab5-4ebf-ab2c-cdcce9545625',
|
|
97228
|
+
'api': {
|
|
97229
|
+
'rest': 'https://api.international.coinbase.com/api',
|
|
97230
|
+
},
|
|
97231
|
+
'test': {
|
|
97232
|
+
'rest': 'https://api-n5e1.coinbase.com/api',
|
|
97233
|
+
},
|
|
97234
|
+
'www': 'https://www.coinbaseinternational.com/international-exchange',
|
|
97235
|
+
'doc': [
|
|
97236
|
+
'https://docs.cloud.coinbaseinternational.com/intx/docs',
|
|
97237
|
+
],
|
|
97238
|
+
'fees': [
|
|
97239
|
+
'https://help.coinbaseinternational.com/en/international-exchange/trading-deposits-withdrawals/international-exchange-fees',
|
|
97240
|
+
],
|
|
97241
|
+
'referral': '',
|
|
97242
|
+
},
|
|
97243
|
+
'requiredCredentials': {
|
|
97244
|
+
'apiKey': true,
|
|
97245
|
+
'secret': true,
|
|
97246
|
+
'password': true,
|
|
97247
|
+
},
|
|
97248
|
+
'api': {
|
|
97249
|
+
'v1': {
|
|
97250
|
+
'public': {
|
|
97251
|
+
'get': [
|
|
97252
|
+
'assets',
|
|
97253
|
+
'assets/{assets}',
|
|
97254
|
+
'assets/{asset}/networks',
|
|
97255
|
+
'instruments',
|
|
97256
|
+
'instruments/{instrument}',
|
|
97257
|
+
'instruments/{instrument}/quote',
|
|
97258
|
+
'instruments/{instrument}/funding',
|
|
97259
|
+
'',
|
|
97260
|
+
],
|
|
97261
|
+
},
|
|
97262
|
+
'private': {
|
|
97263
|
+
'get': [
|
|
97264
|
+
'orders',
|
|
97265
|
+
'orders/{id}',
|
|
97266
|
+
'portfolios',
|
|
97267
|
+
'portfolios/{portfolio}',
|
|
97268
|
+
'portfolios/{portfolio}/detail',
|
|
97269
|
+
'portfolios/{portfolio}/summary',
|
|
97270
|
+
'portfolios/{portfolio}/balances',
|
|
97271
|
+
'portfolios/{portfolio}/balances/{asset}',
|
|
97272
|
+
'portfolios/{portfolio}/positions',
|
|
97273
|
+
'portfolios/{portfolio}/positions/{instrument}',
|
|
97274
|
+
'portfolios/fills',
|
|
97275
|
+
'portfolios/{portfolio}/fills',
|
|
97276
|
+
'transfers',
|
|
97277
|
+
'transfers/{transfer_uuid}',
|
|
97278
|
+
],
|
|
97279
|
+
'post': [
|
|
97280
|
+
'orders',
|
|
97281
|
+
'portfolios',
|
|
97282
|
+
'portfolios/margin',
|
|
97283
|
+
'portfolios/transfer',
|
|
97284
|
+
'transfers/withdraw',
|
|
97285
|
+
'transfers/address',
|
|
97286
|
+
'transfers/create-counterparty-id',
|
|
97287
|
+
'transfers/validate-counterparty-id',
|
|
97288
|
+
'transfers/withdraw/counterparty',
|
|
97289
|
+
],
|
|
97290
|
+
'put': [
|
|
97291
|
+
'orders/{id}',
|
|
97292
|
+
'portfolios/{portfolio}',
|
|
97293
|
+
],
|
|
97294
|
+
'delete': [
|
|
97295
|
+
'orders',
|
|
97296
|
+
'orders/{id}',
|
|
97297
|
+
],
|
|
97298
|
+
},
|
|
97299
|
+
},
|
|
97300
|
+
},
|
|
97301
|
+
'fees': {
|
|
97302
|
+
'trading': {
|
|
97303
|
+
'taker': this.parseNumber('0.004'),
|
|
97304
|
+
'maker': this.parseNumber('0.002'),
|
|
97305
|
+
'tierBased': true,
|
|
97306
|
+
'percentage': true,
|
|
97307
|
+
'tiers': {
|
|
97308
|
+
'taker': [
|
|
97309
|
+
[this.parseNumber('0'), this.parseNumber('0.004')],
|
|
97310
|
+
[this.parseNumber('1000000'), this.parseNumber('0.004')],
|
|
97311
|
+
[this.parseNumber('5000000'), this.parseNumber('0.0035')],
|
|
97312
|
+
[this.parseNumber('10000000'), this.parseNumber('0.0035')],
|
|
97313
|
+
[this.parseNumber('50000000'), this.parseNumber('0.003')],
|
|
97314
|
+
[this.parseNumber('250000000'), this.parseNumber('0.0025')],
|
|
97315
|
+
],
|
|
97316
|
+
'maker': [
|
|
97317
|
+
[this.parseNumber('0'), this.parseNumber('0.002')],
|
|
97318
|
+
[this.parseNumber('1000000'), this.parseNumber('0.0016')],
|
|
97319
|
+
[this.parseNumber('5000000'), this.parseNumber('0.001')],
|
|
97320
|
+
[this.parseNumber('10000000'), this.parseNumber('0.0008')],
|
|
97321
|
+
[this.parseNumber('50000000'), this.parseNumber('0.0005')],
|
|
97322
|
+
[this.parseNumber('250000000'), this.parseNumber('0')],
|
|
97323
|
+
],
|
|
97324
|
+
},
|
|
97325
|
+
},
|
|
97326
|
+
},
|
|
97327
|
+
'precisionMode': _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__/* .TICK_SIZE */ .sh,
|
|
97328
|
+
'exceptions': {
|
|
97329
|
+
'exact': {},
|
|
97330
|
+
'broad': {
|
|
97331
|
+
'DUPLICATE_CLIENT_ORDER_ID': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.DuplicateOrderId,
|
|
97332
|
+
'Order rejected': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
|
|
97333
|
+
'market orders must be IoC': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
|
|
97334
|
+
'tif is required': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
|
|
97335
|
+
'Invalid replace order request': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
|
|
97336
|
+
'Unauthorized': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.PermissionDenied,
|
|
97337
|
+
'invalid result_limit': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
|
|
97338
|
+
'is a required field': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
|
|
97339
|
+
'Not Found': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
|
|
97340
|
+
'ip not allowed': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.AuthenticationError,
|
|
97341
|
+
},
|
|
97342
|
+
},
|
|
97343
|
+
'timeframes': {
|
|
97344
|
+
'1m': 'ONE_MINUTE',
|
|
97345
|
+
'5m': 'FIVE_MINUTE',
|
|
97346
|
+
'15m': 'FIFTEEN_MINUTE',
|
|
97347
|
+
'30m': 'THIRTY_MINUTE',
|
|
97348
|
+
'1h': 'ONE_HOUR',
|
|
97349
|
+
'2h': 'TWO_HOUR',
|
|
97350
|
+
'6h': 'SIX_HOUR',
|
|
97351
|
+
'1d': 'ONE_DAY',
|
|
97352
|
+
},
|
|
97353
|
+
'options': {
|
|
97354
|
+
'brokerId': 'nfqkvdjp',
|
|
97355
|
+
'portfolio': '',
|
|
97356
|
+
'withdraw': {
|
|
97357
|
+
'method': 'v1PrivatePostTransfersWithdraw', // use v1PrivatePostTransfersWithdrawCounterparty for counterparty withdrawals
|
|
97358
|
+
},
|
|
97359
|
+
'networksById': {
|
|
97360
|
+
'ethereum': 'ETH',
|
|
97361
|
+
'arbitrum': 'ARBITRUM',
|
|
97362
|
+
'avacchain': 'AVAX',
|
|
97363
|
+
'optimism': 'OPTIMISM',
|
|
97364
|
+
'polygon': 'MATIC',
|
|
97365
|
+
'solana': 'SOL',
|
|
97366
|
+
'bitcoin': 'BTC',
|
|
97367
|
+
},
|
|
97368
|
+
},
|
|
97369
|
+
});
|
|
97370
|
+
}
|
|
97371
|
+
async handlePortfolioAndParams(methodName, params = {}) {
|
|
97372
|
+
let portfolio = undefined;
|
|
97373
|
+
[portfolio, params] = this.handleOptionAndParams(params, methodName, 'portfolio');
|
|
97374
|
+
if ((portfolio !== undefined) && (portfolio !== '')) {
|
|
97375
|
+
return [portfolio, params];
|
|
97376
|
+
}
|
|
97377
|
+
const defaultPortfolio = this.safeString(this.options, 'portfolio');
|
|
97378
|
+
if ((defaultPortfolio !== undefined) && (defaultPortfolio !== '')) {
|
|
97379
|
+
return [defaultPortfolio, params];
|
|
97380
|
+
}
|
|
97381
|
+
const accounts = await this.fetchAccounts();
|
|
97382
|
+
for (let i = 0; i < accounts.length; i++) {
|
|
97383
|
+
const account = accounts[i];
|
|
97384
|
+
const info = this.safeDict(account, 'info', {});
|
|
97385
|
+
if (this.safeBool(info, 'is_default')) {
|
|
97386
|
+
const portfolioId = this.safeString(info, 'portfolio_id');
|
|
97387
|
+
this.options['portfolio'] = portfolioId;
|
|
97388
|
+
return [portfolioId, params];
|
|
97389
|
+
}
|
|
97390
|
+
}
|
|
97391
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' ' + methodName + '() requires a portfolio parameter or set the default portfolio with this.options["portfolio"]');
|
|
97392
|
+
}
|
|
97393
|
+
async handleNetworkIdAndParams(currencyCode, methodName, params) {
|
|
97394
|
+
let networkId = undefined;
|
|
97395
|
+
[networkId, params] = this.handleOptionAndParams(params, methodName, 'network_arn_id');
|
|
97396
|
+
if (networkId === undefined) {
|
|
97397
|
+
await this.loadCurrencyNetworks(currencyCode);
|
|
97398
|
+
const networks = this.currencies[currencyCode]['networks'];
|
|
97399
|
+
const network = this.safeString2(params, 'networkCode', 'network');
|
|
97400
|
+
if (network === undefined) {
|
|
97401
|
+
// find default network
|
|
97402
|
+
if (this.isEmpty(networks)) {
|
|
97403
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' createDepositAddress network not found for currency ' + currencyCode + ' please specify networkId in params');
|
|
97404
|
+
}
|
|
97405
|
+
const defaultNetwork = this.findDefaultNetwork(networks);
|
|
97406
|
+
networkId = defaultNetwork['id'];
|
|
97407
|
+
}
|
|
97408
|
+
else {
|
|
97409
|
+
networkId = this.networkCodeToId(network, currencyCode);
|
|
97410
|
+
}
|
|
97411
|
+
}
|
|
97412
|
+
return [networkId, params];
|
|
97413
|
+
}
|
|
97414
|
+
async fetchAccounts(params = {}) {
|
|
97415
|
+
/**
|
|
97416
|
+
* @method
|
|
97417
|
+
* @name coinbaseinternational#fetchAccounts
|
|
97418
|
+
* @description fetch all the accounts associated with a profile
|
|
97419
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getportfolios
|
|
97420
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
97421
|
+
* @returns {object} a dictionary of [account structures]{@link https://docs.ccxt.com/#/?id=account-structure} indexed by the account type
|
|
97422
|
+
*/
|
|
97423
|
+
await this.loadMarkets();
|
|
97424
|
+
const response = await this.v1PrivateGetPortfolios(params);
|
|
97425
|
+
//
|
|
97426
|
+
// [
|
|
97427
|
+
// {
|
|
97428
|
+
// "portfolio_id":"1ap32qsc-1-0",
|
|
97429
|
+
// "portfolio_uuid":"028d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
97430
|
+
// "name":"CCXT Portfolio 030624-17:16",
|
|
97431
|
+
// "user_uuid":"e6cf46b6-a32f-5fa7-addb-3324d4526fbd",
|
|
97432
|
+
// "maker_fee_rate":"0",
|
|
97433
|
+
// "taker_fee_rate":"0.0002",
|
|
97434
|
+
// "trading_lock":false,
|
|
97435
|
+
// "borrow_disabled":false,
|
|
97436
|
+
// "is_lsp":false,
|
|
97437
|
+
// "is_default":true,
|
|
97438
|
+
// "cross_collateral_enabled":false
|
|
97439
|
+
// }
|
|
97440
|
+
// ]
|
|
97441
|
+
//
|
|
97442
|
+
return this.parseAccounts(response, params);
|
|
97443
|
+
}
|
|
97444
|
+
parseAccount(account) {
|
|
97445
|
+
//
|
|
97446
|
+
// {
|
|
97447
|
+
// "portfolio_id":"1ap32qsc-1-0",
|
|
97448
|
+
// "portfolio_uuid":"028d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
97449
|
+
// "name":"CCXT Portfolio 030624-17:16",
|
|
97450
|
+
// "user_uuid":"e6cf46b6-a32f-5fa7-addb-3324d4526fbd",
|
|
97451
|
+
// "maker_fee_rate":"0",
|
|
97452
|
+
// "taker_fee_rate":"0.0002",
|
|
97453
|
+
// "trading_lock":false,
|
|
97454
|
+
// "borrow_disabled":false,
|
|
97455
|
+
// "is_lsp":false,
|
|
97456
|
+
// "is_default":true,
|
|
97457
|
+
// "cross_collateral_enabled":false
|
|
97458
|
+
// }
|
|
97459
|
+
//
|
|
97460
|
+
return {
|
|
97461
|
+
'id': this.safeString2(account, 'portfolio_id', 'portfolio_uuid'),
|
|
97462
|
+
'type': undefined,
|
|
97463
|
+
'code': undefined,
|
|
97464
|
+
'info': account,
|
|
97465
|
+
};
|
|
97466
|
+
}
|
|
97467
|
+
async fetchFundingRateHistory(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
97468
|
+
/**
|
|
97469
|
+
* @method
|
|
97470
|
+
* @name coinbaseinternational#fetchFundingRateHistory
|
|
97471
|
+
* @description fetches historical funding rate prices
|
|
97472
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getinstrumentfunding
|
|
97473
|
+
* @param {string} symbol unified symbol of the market to fetch the funding rate history for
|
|
97474
|
+
* @param {int} [since] timestamp in ms of the earliest funding rate to fetch
|
|
97475
|
+
* @param {int} [limit] the maximum amount of [funding rate structures]{@link https://docs.ccxt.com/#/?id=funding-rate-history-structure} to fetch
|
|
97476
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
97477
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
97478
|
+
*/
|
|
97479
|
+
if (symbol === undefined) {
|
|
97480
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchFundingRateHistory() requires a symbol argument');
|
|
97481
|
+
}
|
|
97482
|
+
await this.loadMarkets();
|
|
97483
|
+
let paginate = false;
|
|
97484
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
|
|
97485
|
+
let maxEntriesPerRequest = undefined;
|
|
97486
|
+
[maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'maxEntriesPerRequest', 100);
|
|
97487
|
+
const pageKey = 'ccxtPageKey';
|
|
97488
|
+
if (paginate) {
|
|
97489
|
+
return await this.fetchPaginatedCallIncremental('fetchFundingRateHistory', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
|
|
97490
|
+
}
|
|
97491
|
+
const market = this.market(symbol);
|
|
97492
|
+
const page = this.safeInteger(params, pageKey, 1) - 1;
|
|
97493
|
+
const request = {
|
|
97494
|
+
'instrument': market['id'],
|
|
97495
|
+
'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
|
|
97496
|
+
};
|
|
97497
|
+
if (limit !== undefined) {
|
|
97498
|
+
request['result_limit'] = limit;
|
|
97499
|
+
}
|
|
97500
|
+
const response = await this.v1PublicGetInstrumentsInstrumentFunding(this.extend(request, params));
|
|
97501
|
+
//
|
|
97502
|
+
// {
|
|
97503
|
+
// "pagination":{
|
|
97504
|
+
// "result_limit":"25",
|
|
97505
|
+
// "result_offset":"0"
|
|
97506
|
+
// },
|
|
97507
|
+
// "results":[
|
|
97508
|
+
// {
|
|
97509
|
+
// "instrument_id":"149264167780483072",
|
|
97510
|
+
// "funding_rate":"0.000011",
|
|
97511
|
+
// "mark_price":"47388.1",
|
|
97512
|
+
// "event_time":"2024-02-10T16:00:00Z"
|
|
97513
|
+
// },
|
|
97514
|
+
// ...
|
|
97515
|
+
// ]
|
|
97516
|
+
// }
|
|
97517
|
+
//
|
|
97518
|
+
const rawRates = this.safeList(response, 'results', []);
|
|
97519
|
+
return this.parseFundingRateHistories(rawRates, market, since, limit);
|
|
97520
|
+
}
|
|
97521
|
+
parseFundingRateHistory(info, market = undefined) {
|
|
97522
|
+
return this.parseFundingRate(info, market);
|
|
97523
|
+
}
|
|
97524
|
+
parseFundingRate(contract, market = undefined) {
|
|
97525
|
+
//
|
|
97526
|
+
// {
|
|
97527
|
+
// "instrument_id":"149264167780483072",
|
|
97528
|
+
// "funding_rate":"0.000011",
|
|
97529
|
+
// "mark_price":"47388.1",
|
|
97530
|
+
// "event_time":"2024-02-10T16:00:00Z"
|
|
97531
|
+
// }
|
|
97532
|
+
//
|
|
97533
|
+
const fundingDatetime = this.safeString2(contract, 'event_time', 'time');
|
|
97534
|
+
return {
|
|
97535
|
+
'info': contract,
|
|
97536
|
+
'symbol': this.safeSymbol(undefined, market),
|
|
97537
|
+
'markPrice': this.safeNumber(contract, 'mark_price'),
|
|
97538
|
+
'indexPrice': undefined,
|
|
97539
|
+
'interestRate': undefined,
|
|
97540
|
+
'estimatedSettlePrice': undefined,
|
|
97541
|
+
'timestamp': this.parse8601(fundingDatetime),
|
|
97542
|
+
'datetime': fundingDatetime,
|
|
97543
|
+
'fundingRate': this.safeNumber(contract, 'funding_rate'),
|
|
97544
|
+
'fundingTimestamp': this.parse8601(fundingDatetime),
|
|
97545
|
+
'fundingDatetime': fundingDatetime,
|
|
97546
|
+
'nextFundingRate': undefined,
|
|
97547
|
+
'nextFundingTimestamp': undefined,
|
|
97548
|
+
'nextFundingDatetime': undefined,
|
|
97549
|
+
'previousFundingRate': undefined,
|
|
97550
|
+
'previousFundingTimestamp': undefined,
|
|
97551
|
+
'previousFundingDatetime': undefined,
|
|
97552
|
+
};
|
|
97553
|
+
}
|
|
97554
|
+
async createDepositAddress(code, params = {}) {
|
|
97555
|
+
/**
|
|
97556
|
+
* @method
|
|
97557
|
+
* @name coinbaseinternational#createDepositAddress
|
|
97558
|
+
* @description create a currency deposit address
|
|
97559
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/createaddress
|
|
97560
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/createcounterpartyid
|
|
97561
|
+
* @param {string} code unified currency code of the currency for the deposit address
|
|
97562
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
97563
|
+
* @param {string} [params.network_arn_id] Identifies the blockchain network (e.g., networks/ethereum-mainnet/assets/313ef8a9-ae5a-5f2f-8a56-572c0e2a4d5a) if not provided will pick default
|
|
97564
|
+
* @param {string} [params.network] unified network code to identify the blockchain network
|
|
97565
|
+
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
97566
|
+
*/
|
|
97567
|
+
await this.loadMarkets();
|
|
97568
|
+
let method = undefined;
|
|
97569
|
+
[method, params] = this.handleOptionAndParams(params, 'createDepositAddress', 'method', 'v1PrivatePostTransfersAddress');
|
|
97570
|
+
let portfolio = undefined;
|
|
97571
|
+
[portfolio, params] = await this.handlePortfolioAndParams('createDepositAddress', params);
|
|
97572
|
+
const request = {
|
|
97573
|
+
'portfolio': portfolio,
|
|
97574
|
+
};
|
|
97575
|
+
if (method === 'v1PrivatePostTransfersAddress') {
|
|
97576
|
+
const currency = this.currency(code);
|
|
97577
|
+
request['asset'] = currency['id'];
|
|
97578
|
+
let networkId = undefined;
|
|
97579
|
+
[networkId, params] = await this.handleNetworkIdAndParams(code, 'createDepositAddress', params);
|
|
97580
|
+
request['network_arn_id'] = networkId;
|
|
97581
|
+
}
|
|
97582
|
+
const response = await this[method](this.extend(request, params));
|
|
97583
|
+
//
|
|
97584
|
+
// v1PrivatePostTransfersAddress
|
|
97585
|
+
// {
|
|
97586
|
+
// address: "3LkwYscRyh6tUR1XTqXSJQoJnK7ucC1F4n",
|
|
97587
|
+
// network_arn_id: "networks/bitcoin-mainnet/assets/6ecc0dcc-10a2-500e-b315-a3b9abae19ce",
|
|
97588
|
+
// destination_tag: "",
|
|
97589
|
+
// }
|
|
97590
|
+
// v1PrivatePostTransfersCreateCounterpartyId
|
|
97591
|
+
// {
|
|
97592
|
+
// "portfolio_uuid":"018e0a8b-6b6b-70e0-9689-1e7926c2c8bc",
|
|
97593
|
+
// "counterparty_id":"CB2ZPUCZBE"
|
|
97594
|
+
// }
|
|
97595
|
+
//
|
|
97596
|
+
const tag = this.safeString(response, 'destination_tag');
|
|
97597
|
+
const address = this.safeString2(response, 'address', 'counterparty_id');
|
|
97598
|
+
return {
|
|
97599
|
+
'currency': code,
|
|
97600
|
+
'tag': tag,
|
|
97601
|
+
'address': address,
|
|
97602
|
+
'info': response,
|
|
97603
|
+
};
|
|
97604
|
+
}
|
|
97605
|
+
findDefaultNetwork(networks) {
|
|
97606
|
+
const networksArray = this.toArray(networks);
|
|
97607
|
+
for (let i = 0; i < networksArray.length; i++) {
|
|
97608
|
+
const info = networksArray[i]['info'];
|
|
97609
|
+
const is_default = this.safeBool(info, 'is_default', false);
|
|
97610
|
+
if (is_default === true) {
|
|
97611
|
+
return networksArray[i];
|
|
97612
|
+
}
|
|
97613
|
+
}
|
|
97614
|
+
return networksArray[0];
|
|
97615
|
+
}
|
|
97616
|
+
async loadCurrencyNetworks(code, params = {}) {
|
|
97617
|
+
const currency = this.currency(code);
|
|
97618
|
+
const networks = this.safeDict(currency, 'networks');
|
|
97619
|
+
if (networks !== undefined) {
|
|
97620
|
+
return;
|
|
97621
|
+
}
|
|
97622
|
+
const request = {
|
|
97623
|
+
'asset': currency['id'],
|
|
97624
|
+
};
|
|
97625
|
+
const rawNetworks = await this.v1PublicGetAssetsAssetNetworks(request);
|
|
97626
|
+
//
|
|
97627
|
+
// [
|
|
97628
|
+
// {
|
|
97629
|
+
// "asset_id":"1",
|
|
97630
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
97631
|
+
// "asset_name":"USDC",
|
|
97632
|
+
// "network_arn_id":"networks/ethereum-mainnet/assets/9bc140b4-69c3-5fc9-bd0d-b041bcf40039",
|
|
97633
|
+
// "min_withdrawal_amt":"1",
|
|
97634
|
+
// "max_withdrawal_amt":"100000000",
|
|
97635
|
+
// "network_confirms":35,
|
|
97636
|
+
// "processing_time":485,
|
|
97637
|
+
// "is_default":true,
|
|
97638
|
+
// "network_name":"ethereum",
|
|
97639
|
+
// "display_name":"Ethereum"
|
|
97640
|
+
// },
|
|
97641
|
+
// ....
|
|
97642
|
+
// ]
|
|
97643
|
+
//
|
|
97644
|
+
currency['networks'] = this.parseNetworks(rawNetworks);
|
|
97645
|
+
}
|
|
97646
|
+
parseNetworks(networks, params = {}) {
|
|
97647
|
+
const result = {};
|
|
97648
|
+
for (let i = 0; i < networks.length; i++) {
|
|
97649
|
+
const network = this.extend(this.parseNetwork(networks[i]), params);
|
|
97650
|
+
result[network['network']] = network;
|
|
97651
|
+
}
|
|
97652
|
+
return result;
|
|
97653
|
+
}
|
|
97654
|
+
parseNetwork(network, params = {}) {
|
|
97655
|
+
//
|
|
97656
|
+
// {
|
|
97657
|
+
// "asset_id":"1",
|
|
97658
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
97659
|
+
// "asset_name":"USDC",
|
|
97660
|
+
// "network_arn_id":"networks/ethereum-mainnet/assets/9bc140b4-69c3-5fc9-bd0d-b041bcf40039",
|
|
97661
|
+
// "min_withdrawal_amt":"1",
|
|
97662
|
+
// "max_withdrawal_amt":"100000000",
|
|
97663
|
+
// "network_confirms":35,
|
|
97664
|
+
// "processing_time":485,
|
|
97665
|
+
// "is_default":true,
|
|
97666
|
+
// "network_name":"ethereum",
|
|
97667
|
+
// "display_name":"Ethereum"
|
|
97668
|
+
// }
|
|
97669
|
+
//
|
|
97670
|
+
const currencyId = this.safeString(network, 'asset_name');
|
|
97671
|
+
const currencyCode = this.safeCurrencyCode(currencyId);
|
|
97672
|
+
const networkId = this.safeString(network, 'network_arn_id');
|
|
97673
|
+
return this.safeNetwork({
|
|
97674
|
+
'info': network,
|
|
97675
|
+
'id': networkId,
|
|
97676
|
+
'name': this.safeString(network, 'display_name'),
|
|
97677
|
+
'network': this.networkIdToCode(this.safeStringN(network, ['network_name', 'display_name', 'network_arn_id'], ''), currencyCode),
|
|
97678
|
+
'active': undefined,
|
|
97679
|
+
'deposit': undefined,
|
|
97680
|
+
'withdraw': undefined,
|
|
97681
|
+
'precision': undefined,
|
|
97682
|
+
'fee': undefined,
|
|
97683
|
+
'limits': {
|
|
97684
|
+
'withdraw': {
|
|
97685
|
+
'min': this.safeNumber(network, 'min_withdrawal_amt'),
|
|
97686
|
+
'max': this.safeNumber(network, 'max_withdrawal_amt'),
|
|
97687
|
+
},
|
|
97688
|
+
'deposit': {
|
|
97689
|
+
'min': undefined,
|
|
97690
|
+
'max': undefined,
|
|
97691
|
+
},
|
|
97692
|
+
},
|
|
97693
|
+
});
|
|
97694
|
+
}
|
|
97695
|
+
async setMargin(symbol, amount, params = {}) {
|
|
97696
|
+
/**
|
|
97697
|
+
* @method
|
|
97698
|
+
* @name coinbaseinternational#setMargin
|
|
97699
|
+
* @description Either adds or reduces margin in order to set the margin to a specific value
|
|
97700
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/setportfoliomarginoverride
|
|
97701
|
+
* @param {string} symbol unified market symbol of the market to set margin in
|
|
97702
|
+
* @param {float} amount the amount to set the margin to
|
|
97703
|
+
* @param {object} [params] parameters specific to the exchange API endpoint
|
|
97704
|
+
* @returns {object} A [margin structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#add-margin-structure}
|
|
97705
|
+
*/
|
|
97706
|
+
let portfolio = undefined;
|
|
97707
|
+
[portfolio, params] = await this.handlePortfolioAndParams('setMargin', params);
|
|
97708
|
+
if (symbol !== undefined) {
|
|
97709
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' setMargin() only allows setting margin to full portfolio');
|
|
97710
|
+
}
|
|
97711
|
+
const request = {
|
|
97712
|
+
'portfolio': portfolio,
|
|
97713
|
+
'margin_override': amount,
|
|
97714
|
+
};
|
|
97715
|
+
return await this.v1PrivatePostPortfoliosMargin(this.extend(request, params));
|
|
97716
|
+
}
|
|
97717
|
+
async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
97718
|
+
/**
|
|
97719
|
+
* @method
|
|
97720
|
+
* @name exchange#fetchDepositsWithdrawals
|
|
97721
|
+
* @description fetch history of deposits and withdrawals
|
|
97722
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/gettransfers
|
|
97723
|
+
* @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
|
|
97724
|
+
* @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
|
|
97725
|
+
* @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
|
|
97726
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
97727
|
+
* @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
|
|
97728
|
+
* @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
|
|
97729
|
+
* @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
|
|
97730
|
+
* @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
|
|
97731
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
97732
|
+
* @returns {object} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
97733
|
+
*/
|
|
97734
|
+
await this.loadMarkets();
|
|
97735
|
+
let paginate = undefined;
|
|
97736
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'paginate');
|
|
97737
|
+
let maxEntriesPerRequest = undefined;
|
|
97738
|
+
[maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'maxEntriesPerRequest', 100);
|
|
97739
|
+
const pageKey = 'ccxtPageKey';
|
|
97740
|
+
if (paginate) {
|
|
97741
|
+
return await this.fetchPaginatedCallIncremental('fetchDepositsWithdrawals', code, since, limit, params, pageKey, maxEntriesPerRequest);
|
|
97742
|
+
}
|
|
97743
|
+
const page = this.safeInteger(params, pageKey, 1) - 1;
|
|
97744
|
+
const request = {
|
|
97745
|
+
'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
|
|
97746
|
+
};
|
|
97747
|
+
if (since !== undefined) {
|
|
97748
|
+
request['time_from'] = this.iso8601(since);
|
|
97749
|
+
}
|
|
97750
|
+
if (limit !== undefined) {
|
|
97751
|
+
const newLimit = Math.min(limit, 100);
|
|
97752
|
+
request['result_limit'] = newLimit;
|
|
97753
|
+
}
|
|
97754
|
+
let portfolios = undefined;
|
|
97755
|
+
[portfolios, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'portfolios');
|
|
97756
|
+
if (portfolios !== undefined) {
|
|
97757
|
+
request['portfolios'] = portfolios;
|
|
97758
|
+
}
|
|
97759
|
+
let until = undefined;
|
|
97760
|
+
[until, params] = this.handleOptionAndParams(params, 'fetchDepositsWithdrawals', 'until');
|
|
97761
|
+
if (until !== undefined) {
|
|
97762
|
+
request['time_to'] = this.iso8601(until);
|
|
97763
|
+
}
|
|
97764
|
+
const response = await this.v1PrivateGetTransfers(this.extend(request, params));
|
|
97765
|
+
//
|
|
97766
|
+
// {
|
|
97767
|
+
// "pagination":{
|
|
97768
|
+
// "result_limit":25,
|
|
97769
|
+
// "result_offset":0
|
|
97770
|
+
// },
|
|
97771
|
+
// "results":[
|
|
97772
|
+
// {
|
|
97773
|
+
// "transfer_uuid":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3",
|
|
97774
|
+
// "transfer_type":"WITHDRAW",
|
|
97775
|
+
// "amount":"1.000000",
|
|
97776
|
+
// "asset":"USDC",
|
|
97777
|
+
// "status":"PROCESSED",
|
|
97778
|
+
// "network_name":"ethereum",
|
|
97779
|
+
// "created_at":"2024-03-14T02:32:18.497795Z",
|
|
97780
|
+
// "updated_at":"2024-03-14T02:35:38.514588Z",
|
|
97781
|
+
// "from_portfolio":{
|
|
97782
|
+
// "id":"1yun54bb-1-6",
|
|
97783
|
+
// "uuid":"018e0a8b-6b6b-70e0-9689-1e7926c2c8bc",
|
|
97784
|
+
// "name":"fungus technology o?Portfolio"
|
|
97785
|
+
// },
|
|
97786
|
+
// "to_address":"0xcdcE79F820BE9d6C5033db5c31d1AE3A8c2399bB"
|
|
97787
|
+
// }
|
|
97788
|
+
// ]
|
|
97789
|
+
// }
|
|
97790
|
+
//
|
|
97791
|
+
const rawTransactions = this.safeList(response, 'results', []);
|
|
97792
|
+
return this.parseTransactions(rawTransactions);
|
|
97793
|
+
}
|
|
97794
|
+
async fetchPosition(symbol, params = {}) {
|
|
97795
|
+
/**
|
|
97796
|
+
* @method
|
|
97797
|
+
* @name coinbaseinternational#fetchPosition
|
|
97798
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getportfolioposition
|
|
97799
|
+
* @description fetch data on an open position
|
|
97800
|
+
* @param {string} symbol unified market symbol of the market the position is held in
|
|
97801
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
97802
|
+
* @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
97803
|
+
*/
|
|
97804
|
+
await this.loadMarkets();
|
|
97805
|
+
symbol = this.symbol(symbol);
|
|
97806
|
+
let portfolio = undefined;
|
|
97807
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchPosition', params);
|
|
97808
|
+
const request = {
|
|
97809
|
+
'portfolio': portfolio,
|
|
97810
|
+
'instrument': this.marketId(symbol),
|
|
97811
|
+
};
|
|
97812
|
+
const position = await this.v1PrivateGetPortfoliosPortfolioPositionsInstrument(this.extend(request, params));
|
|
97813
|
+
//
|
|
97814
|
+
// {
|
|
97815
|
+
// "symbol":"BTC-PERP",
|
|
97816
|
+
// "instrument_id":"114jqr89-0-0",
|
|
97817
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
97818
|
+
// "vwap":"52482.3",
|
|
97819
|
+
// "net_size":"0",
|
|
97820
|
+
// "buy_order_size":"0.001",
|
|
97821
|
+
// "sell_order_size":"0",
|
|
97822
|
+
// "im_contribution":"0.2",
|
|
97823
|
+
// "unrealized_pnl":"0",
|
|
97824
|
+
// "mark_price":"52406.8",
|
|
97825
|
+
// "entry_vwap":"52472.9"
|
|
97826
|
+
// }
|
|
97827
|
+
//
|
|
97828
|
+
return this.parsePosition(position);
|
|
97829
|
+
}
|
|
97830
|
+
parsePosition(position, market = undefined) {
|
|
97831
|
+
//
|
|
97832
|
+
// {
|
|
97833
|
+
// "symbol":"BTC-PERP",
|
|
97834
|
+
// "instrument_id":"114jqr89-0-0",
|
|
97835
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
97836
|
+
// "vwap":"52482.3",
|
|
97837
|
+
// "net_size":"0",
|
|
97838
|
+
// "buy_order_size":"0.001",
|
|
97839
|
+
// "sell_order_size":"0",
|
|
97840
|
+
// "im_contribution":"0.2",
|
|
97841
|
+
// "unrealized_pnl":"0",
|
|
97842
|
+
// "mark_price":"52406.8",
|
|
97843
|
+
// "entry_vwap":"52472.9"
|
|
97844
|
+
// }
|
|
97845
|
+
//
|
|
97846
|
+
const marketId = this.safeString(position, 'symbol');
|
|
97847
|
+
let quantity = this.safeString(position, 'net_size');
|
|
97848
|
+
market = this.safeMarket(marketId, market, '-');
|
|
97849
|
+
let side = 'long';
|
|
97850
|
+
if (_base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringLe(quantity, '0')) {
|
|
97851
|
+
side = 'short';
|
|
97852
|
+
quantity = _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringMul('-1', quantity);
|
|
97853
|
+
}
|
|
97854
|
+
return this.safePosition({
|
|
97855
|
+
'info': position,
|
|
97856
|
+
'id': this.safeString(position, 'id'),
|
|
97857
|
+
'symbol': market['symbol'],
|
|
97858
|
+
'entryPrice': undefined,
|
|
97859
|
+
'markPrice': this.safeNumber(position, 'mark_price'),
|
|
97860
|
+
'notional': undefined,
|
|
97861
|
+
'collateral': undefined,
|
|
97862
|
+
'unrealizedPnl': this.safeNumber(position, 'unrealized_pnl'),
|
|
97863
|
+
'side': side,
|
|
97864
|
+
'contracts': this.parseNumber(quantity),
|
|
97865
|
+
'contractSize': this.safeNumber(market, 'contractSize'),
|
|
97866
|
+
'timestamp': undefined,
|
|
97867
|
+
'datetime': undefined,
|
|
97868
|
+
'hedged': undefined,
|
|
97869
|
+
'maintenanceMargin': undefined,
|
|
97870
|
+
'maintenanceMarginPercentage': undefined,
|
|
97871
|
+
'initialMargin': this.safeNumber(position, 'im_contribution'),
|
|
97872
|
+
'initialMarginPercentage': undefined,
|
|
97873
|
+
'leverage': undefined,
|
|
97874
|
+
'liquidationPrice': undefined,
|
|
97875
|
+
'marginRatio': undefined,
|
|
97876
|
+
'marginMode': undefined,
|
|
97877
|
+
'percentage': undefined,
|
|
97878
|
+
});
|
|
97879
|
+
}
|
|
97880
|
+
async fetchPositions(symbols = undefined, params = {}) {
|
|
97881
|
+
/**
|
|
97882
|
+
* @method
|
|
97883
|
+
* @name coinbaseinternational#fetchPositions
|
|
97884
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getportfoliopositions
|
|
97885
|
+
* @description fetch all open positions
|
|
97886
|
+
* @param {string[]} [symbols] list of unified market symbols
|
|
97887
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
97888
|
+
* @param {string} [method] method name to call, "positionRisk", "account" or "option", default is "positionRisk"
|
|
97889
|
+
* @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
97890
|
+
*/
|
|
97891
|
+
await this.loadMarkets();
|
|
97892
|
+
let portfolio = undefined;
|
|
97893
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchPositions', params);
|
|
97894
|
+
const request = {
|
|
97895
|
+
'portfolio': portfolio,
|
|
97896
|
+
};
|
|
97897
|
+
const response = await this.v1PrivateGetPortfoliosPortfolioPositions(this.extend(request, params));
|
|
97898
|
+
//
|
|
97899
|
+
// [
|
|
97900
|
+
// {
|
|
97901
|
+
// "symbol":"BTC-PERP",
|
|
97902
|
+
// "instrument_id":"114jqr89-0-0",
|
|
97903
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
97904
|
+
// "vwap":"52482.3",
|
|
97905
|
+
// "net_size":"0",
|
|
97906
|
+
// "buy_order_size":"0.001",
|
|
97907
|
+
// "sell_order_size":"0",
|
|
97908
|
+
// "im_contribution":"0.2",
|
|
97909
|
+
// "unrealized_pnl":"0",
|
|
97910
|
+
// "mark_price":"52406.8",
|
|
97911
|
+
// "entry_vwap":"52472.9"
|
|
97912
|
+
// }
|
|
97913
|
+
// ]
|
|
97914
|
+
//
|
|
97915
|
+
const positions = this.parsePositions(response);
|
|
97916
|
+
if (this.isEmpty(symbols)) {
|
|
97917
|
+
return positions;
|
|
97918
|
+
}
|
|
97919
|
+
symbols = this.marketSymbols(symbols);
|
|
97920
|
+
return this.filterByArrayPositions(positions, 'symbol', symbols, false);
|
|
97921
|
+
}
|
|
97922
|
+
async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
97923
|
+
/**
|
|
97924
|
+
* @method
|
|
97925
|
+
* @name coinbaseinternational#fetchWithdrawals
|
|
97926
|
+
* @description fetch all withdrawals made from an account
|
|
97927
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/gettransfers
|
|
97928
|
+
* @param {string} code unified currency code
|
|
97929
|
+
* @param {int} [since] the earliest time in ms to fetch withdrawals for
|
|
97930
|
+
* @param {int} [limit] the maximum number of withdrawals structures to retrieve
|
|
97931
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
97932
|
+
* @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
|
|
97933
|
+
* @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
|
|
97934
|
+
* @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
|
|
97935
|
+
* @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
|
|
97936
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
97937
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
97938
|
+
*/
|
|
97939
|
+
await this.loadMarkets();
|
|
97940
|
+
params['type'] = 'WITHDRAW';
|
|
97941
|
+
return await this.fetchDepositsWithdrawals(code, since, limit, params);
|
|
97942
|
+
}
|
|
97943
|
+
async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
97944
|
+
/**
|
|
97945
|
+
* @method
|
|
97946
|
+
* @name coinbaseinternational#fetchDeposits
|
|
97947
|
+
* @description fetch all deposits made to an account
|
|
97948
|
+
* @param {string} code unified currency code
|
|
97949
|
+
* @param {int} [since] the earliest time in ms to fetch deposits for
|
|
97950
|
+
* @param {int} [limit] the maximum number of deposits structures to retrieve
|
|
97951
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
97952
|
+
* @param {string} [params.portfolios] Identifies the portfolios by UUID (e.g., 892e8c7c-e979-4cad-b61b-55a197932cf1) or portfolio ID (e.g., 5189861793641175). Can provide single or multiple portfolios to filter by or fetches transfers for all portfolios if none are provided.
|
|
97953
|
+
* @param {int} [params.until] Only find transfers updated before this time. Use timestamp format
|
|
97954
|
+
* @param {string} [params.status] The current status of transfer. Possible values: [PROCESSED, NEW, FAILED, STARTED]
|
|
97955
|
+
* @param {string} [params.type] The type of transfer Possible values: [DEPOSIT, WITHDRAW, REBATE, STIPEND, INTERNAL, FUNDING]
|
|
97956
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
97957
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
97958
|
+
*/
|
|
97959
|
+
await this.loadMarkets();
|
|
97960
|
+
params['type'] = 'DEPOSIT';
|
|
97961
|
+
return await this.fetchDepositsWithdrawals(code, since, limit, params);
|
|
97962
|
+
}
|
|
97963
|
+
parseTransactionStatus(status) {
|
|
97964
|
+
const statuses = {
|
|
97965
|
+
'PROCESSED': 'ok',
|
|
97966
|
+
'NEW': 'pending',
|
|
97967
|
+
'STARTED': 'pending',
|
|
97968
|
+
'FAILED': 'canceled',
|
|
97969
|
+
};
|
|
97970
|
+
return this.safeString(statuses, status, status);
|
|
97971
|
+
}
|
|
97972
|
+
parseTransaction(transaction, currency = undefined) {
|
|
97973
|
+
//
|
|
97974
|
+
// {
|
|
97975
|
+
// "idem":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3"
|
|
97976
|
+
// }
|
|
97977
|
+
// const transactionType = this.safeString (transaction, 'type');
|
|
97978
|
+
const datetime = this.safeString(transaction, 'updated_at');
|
|
97979
|
+
const fromPorfolio = this.safeDict(transaction, 'from_portfolio', {});
|
|
97980
|
+
const addressFrom = this.safeStringN(transaction, ['from_address', 'from_cb_account', this.safeStringN(fromPorfolio, ['id', 'uuid', 'name']), 'from_counterparty_id']);
|
|
97981
|
+
const toPorfolio = this.safeDict(transaction, 'from_portfolio', {});
|
|
97982
|
+
const addressTo = this.safeStringN(transaction, ['to_address', 'to_cb_account', this.safeStringN(toPorfolio, ['id', 'uuid', 'name']), 'to_counterparty_id']);
|
|
97983
|
+
return {
|
|
97984
|
+
'info': transaction,
|
|
97985
|
+
'id': this.safeString(transaction, 'transfer_uuid'),
|
|
97986
|
+
'txid': this.safeString(transaction, 'transaction_uuid'),
|
|
97987
|
+
'timestamp': this.parse8601(datetime),
|
|
97988
|
+
'datetime': datetime,
|
|
97989
|
+
'network': this.networkIdToCode(this.safeString(transaction, 'network_name')),
|
|
97990
|
+
'address': undefined,
|
|
97991
|
+
'addressTo': addressTo,
|
|
97992
|
+
'addressFrom': addressFrom,
|
|
97993
|
+
'tag': undefined,
|
|
97994
|
+
'tagTo': undefined,
|
|
97995
|
+
'tagFrom': undefined,
|
|
97996
|
+
'type': this.safeString(transaction, 'resource'),
|
|
97997
|
+
'amount': this.safeNumber(transaction, 'amount'),
|
|
97998
|
+
'currency': this.safeCurrencyCode(this.safeString(transaction, 'asset'), currency),
|
|
97999
|
+
'status': this.parseTransactionStatus(this.safeString(transaction, 'status')),
|
|
98000
|
+
'updated': this.parse8601(datetime),
|
|
98001
|
+
'fee': {
|
|
98002
|
+
'cost': undefined,
|
|
98003
|
+
'currency': undefined,
|
|
98004
|
+
},
|
|
98005
|
+
};
|
|
98006
|
+
}
|
|
98007
|
+
parseTrade(trade, market = undefined) {
|
|
98008
|
+
//
|
|
98009
|
+
// {
|
|
98010
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
98011
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
98012
|
+
// "portfolio_name":"CCXT Portfolio 020624-17:16",
|
|
98013
|
+
// "fill_id":"1xbfy19y-1-184",
|
|
98014
|
+
// "exec_id":"280841526207070392",
|
|
98015
|
+
// "order_id":"1xbfv8yw-1-0",
|
|
98016
|
+
// "instrument_id":"114jqr89-0-0",
|
|
98017
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
98018
|
+
// "symbol":"BTC-PERP",
|
|
98019
|
+
// "match_id":"280841526207053840",
|
|
98020
|
+
// "fill_price":"52500",
|
|
98021
|
+
// "fill_qty":"0.01",
|
|
98022
|
+
// "client_id":"1x59ctku-1-1",
|
|
98023
|
+
// "client_order_id":"ccxt3e4e2a5f-4a89-",
|
|
98024
|
+
// "order_qty":"0.01",
|
|
98025
|
+
// "limit_price":"52500",
|
|
98026
|
+
// "total_filled":"0.01",
|
|
98027
|
+
// "filled_vwap":"52500",
|
|
98028
|
+
// "expire_time":"",
|
|
98029
|
+
// "stop_price":"",
|
|
98030
|
+
// "side":"BUY",
|
|
98031
|
+
// "tif":"GTC",
|
|
98032
|
+
// "stp_mode":"BOTH",
|
|
98033
|
+
// "flags":"",
|
|
98034
|
+
// "fee":"0.105",
|
|
98035
|
+
// "fee_asset":"USDC",
|
|
98036
|
+
// "order_status":"DONE",
|
|
98037
|
+
// "event_time":"2024-02-15T00:43:57.631Z"
|
|
98038
|
+
// }
|
|
98039
|
+
//
|
|
98040
|
+
const marketId = this.safeString(trade, 'symbol');
|
|
98041
|
+
const datetime = this.safeString(trade, 'event_time');
|
|
98042
|
+
return this.safeTrade({
|
|
98043
|
+
'info': trade,
|
|
98044
|
+
'id': this.safeString2(trade, 'fill_id', 'exec_id'),
|
|
98045
|
+
'order': this.safeString(trade, 'order_id'),
|
|
98046
|
+
'timestamp': this.parse8601(datetime),
|
|
98047
|
+
'datetime': datetime,
|
|
98048
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
98049
|
+
'type': undefined,
|
|
98050
|
+
'side': this.safeStringLower(trade, 'side'),
|
|
98051
|
+
'takerOrMaker': undefined,
|
|
98052
|
+
'price': this.safeNumber(trade, 'fill_price'),
|
|
98053
|
+
'amount': this.safeNumber(trade, 'fill_qty'),
|
|
98054
|
+
'cost': undefined,
|
|
98055
|
+
'fee': {
|
|
98056
|
+
'cost': this.safeNumber(trade, 'fee'),
|
|
98057
|
+
'currency': this.safeCurrencyCode(this.safeString(trade, 'fee_asset')),
|
|
98058
|
+
},
|
|
98059
|
+
});
|
|
98060
|
+
}
|
|
98061
|
+
async fetchMarkets(params = {}) {
|
|
98062
|
+
/**
|
|
98063
|
+
* @method
|
|
98064
|
+
* @name coinbaseinternational#fetchMarkets
|
|
98065
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getinstruments
|
|
98066
|
+
* @description retrieves data on all markets for coinbaseinternational
|
|
98067
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98068
|
+
* @returns {object[]} an array of objects representing market data
|
|
98069
|
+
*/
|
|
98070
|
+
const response = await this.v1PublicGetInstruments(params);
|
|
98071
|
+
//
|
|
98072
|
+
// [
|
|
98073
|
+
// {
|
|
98074
|
+
// "instrument_id":"149264164756389888",
|
|
98075
|
+
// "instrument_uuid":"e9360798-6a10-45d6-af05-67c30eb91e2d",
|
|
98076
|
+
// "symbol":"ETH-PERP",
|
|
98077
|
+
// "type":"PERP",
|
|
98078
|
+
// "base_asset_id":"118059611793145856",
|
|
98079
|
+
// "base_asset_uuid":"d85dce9b-5b73-5c3c-8978-522ce1d1c1b4",
|
|
98080
|
+
// "base_asset_name":"ETH",
|
|
98081
|
+
// "quote_asset_id":"1",
|
|
98082
|
+
// "quote_asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
98083
|
+
// "quote_asset_name":"USDC",
|
|
98084
|
+
// "base_increment":"0.0001",
|
|
98085
|
+
// "quote_increment":"0.01",
|
|
98086
|
+
// "price_band_percent":"0.02",
|
|
98087
|
+
// "market_order_percent":"0.0075",
|
|
98088
|
+
// "qty_24hr":"44434.8131",
|
|
98089
|
+
// "notional_24hr":"110943454.279785",
|
|
98090
|
+
// "avg_daily_qty":"1099171.6025",
|
|
98091
|
+
// "avg_daily_notional":"2637240145.456987",
|
|
98092
|
+
// "previous_day_qty":"78909.3939",
|
|
98093
|
+
// "open_interest":"1270.749",
|
|
98094
|
+
// "position_limit_qty":"1831.9527",
|
|
98095
|
+
// "position_limit_adq_pct":"0.05",
|
|
98096
|
+
// "replacement_cost":"0.23",
|
|
98097
|
+
// "base_imf":"0.1",
|
|
98098
|
+
// "min_notional_value":"10",
|
|
98099
|
+
// "funding_interval":"3600000000000",
|
|
98100
|
+
// "trading_state":"TRADING",
|
|
98101
|
+
// "quote":{
|
|
98102
|
+
// "best_bid_price":"2490.8",
|
|
98103
|
+
// "best_bid_size":"9.0515",
|
|
98104
|
+
// "best_ask_price":"2490.81",
|
|
98105
|
+
// "best_ask_size":"4.8486",
|
|
98106
|
+
// "trade_price":"2490.39",
|
|
98107
|
+
// "trade_qty":"0.9508",
|
|
98108
|
+
// "index_price":"2490.5",
|
|
98109
|
+
// "mark_price":"2490.8",
|
|
98110
|
+
// "settlement_price":"2490.81",
|
|
98111
|
+
// "limit_up":"2615.42",
|
|
98112
|
+
// "limit_down":"2366.34",
|
|
98113
|
+
// "predicted_funding":"0.000009",
|
|
98114
|
+
// "timestamp":"2024-02-10T16:07:39.454Z"
|
|
98115
|
+
// }
|
|
98116
|
+
// },
|
|
98117
|
+
// ...
|
|
98118
|
+
// ]
|
|
98119
|
+
//
|
|
98120
|
+
return this.parseMarkets(response);
|
|
98121
|
+
}
|
|
98122
|
+
parseMarket(market) {
|
|
98123
|
+
//
|
|
98124
|
+
// {
|
|
98125
|
+
// "instrument_id":"149264164756389888",
|
|
98126
|
+
// "instrument_uuid":"e9360798-6a10-45d6-af05-67c30eb91e2d",
|
|
98127
|
+
// "symbol":"ETH-PERP",
|
|
98128
|
+
// "type":"PERP",
|
|
98129
|
+
// "base_asset_id":"118059611793145856",
|
|
98130
|
+
// "base_asset_uuid":"d85dce9b-5b73-5c3c-8978-522ce1d1c1b4",
|
|
98131
|
+
// "base_asset_name":"ETH",
|
|
98132
|
+
// "quote_asset_id":"1",
|
|
98133
|
+
// "quote_asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
98134
|
+
// "quote_asset_name":"USDC",
|
|
98135
|
+
// "base_increment":"0.0001",
|
|
98136
|
+
// "quote_increment":"0.01",
|
|
98137
|
+
// "price_band_percent":"0.02",
|
|
98138
|
+
// "market_order_percent":"0.0075",
|
|
98139
|
+
// "qty_24hr":"44434.8131",
|
|
98140
|
+
// "notional_24hr":"110943454.279785",
|
|
98141
|
+
// "avg_daily_qty":"1099171.6025",
|
|
98142
|
+
// "avg_daily_notional":"2637240145.456987",
|
|
98143
|
+
// "previous_day_qty":"78909.3939",
|
|
98144
|
+
// "open_interest":"1270.749",
|
|
98145
|
+
// "position_limit_qty":"1831.9527",
|
|
98146
|
+
// "position_limit_adq_pct":"0.05",
|
|
98147
|
+
// "replacement_cost":"0.23",
|
|
98148
|
+
// "base_imf":"0.1",
|
|
98149
|
+
// "min_notional_value":"10",
|
|
98150
|
+
// "funding_interval":"3600000000000",
|
|
98151
|
+
// "trading_state":"TRADING",
|
|
98152
|
+
// "quote":{
|
|
98153
|
+
// "best_bid_price":"2490.8",
|
|
98154
|
+
// "best_bid_size":"9.0515",
|
|
98155
|
+
// "best_ask_price":"2490.81",
|
|
98156
|
+
// "best_ask_size":"4.8486",
|
|
98157
|
+
// "trade_price":"2490.39",
|
|
98158
|
+
// "trade_qty":"0.9508",
|
|
98159
|
+
// "index_price":"2490.5",
|
|
98160
|
+
// "mark_price":"2490.8",
|
|
98161
|
+
// "settlement_price":"2490.81",
|
|
98162
|
+
// "limit_up":"2615.42",
|
|
98163
|
+
// "limit_down":"2366.34",
|
|
98164
|
+
// "predicted_funding":"0.000009",
|
|
98165
|
+
// "timestamp":"2024-02-10T16:07:39.454Z"
|
|
98166
|
+
// }
|
|
98167
|
+
// }
|
|
98168
|
+
//
|
|
98169
|
+
const marketId = this.safeString(market, 'symbol');
|
|
98170
|
+
const baseId = this.safeString(market, 'base_asset_name');
|
|
98171
|
+
const quoteId = this.safeString(market, 'quote_asset_name');
|
|
98172
|
+
const typeId = this.safeString(market, 'type'); // 'SPOT', 'PERP'
|
|
98173
|
+
const isSpot = (typeId === 'SPOT');
|
|
98174
|
+
const fees = this.fees;
|
|
98175
|
+
let symbol = baseId + '/' + quoteId;
|
|
98176
|
+
let settleId = undefined;
|
|
98177
|
+
if (!isSpot) {
|
|
98178
|
+
settleId = quoteId;
|
|
98179
|
+
symbol += ':' + quoteId;
|
|
98180
|
+
}
|
|
98181
|
+
return {
|
|
98182
|
+
'id': marketId,
|
|
98183
|
+
'lowercaseId': marketId.toLowerCase(),
|
|
98184
|
+
'symbol': symbol,
|
|
98185
|
+
'base': baseId,
|
|
98186
|
+
'quote': quoteId,
|
|
98187
|
+
'settle': settleId ? settleId : undefined,
|
|
98188
|
+
'baseId': baseId,
|
|
98189
|
+
'quoteId': quoteId,
|
|
98190
|
+
'settleId': settleId ? settleId : undefined,
|
|
98191
|
+
'type': isSpot ? 'spot' : 'swap',
|
|
98192
|
+
'spot': isSpot,
|
|
98193
|
+
'margin': false,
|
|
98194
|
+
'swap': !isSpot,
|
|
98195
|
+
'future': false,
|
|
98196
|
+
'option': false,
|
|
98197
|
+
'active': this.safeString(market, 'trading_state') === 'TRADING',
|
|
98198
|
+
'contract': !isSpot,
|
|
98199
|
+
'linear': isSpot ? undefined : (settleId === quoteId),
|
|
98200
|
+
'inverse': isSpot ? undefined : (settleId !== quoteId),
|
|
98201
|
+
'taker': fees['trading']['taker'],
|
|
98202
|
+
'maker': fees['trading']['maker'],
|
|
98203
|
+
'contractSize': isSpot ? undefined : 1,
|
|
98204
|
+
'expiry': undefined,
|
|
98205
|
+
'expiryDatetime': undefined,
|
|
98206
|
+
'strike': undefined,
|
|
98207
|
+
'optionType': undefined,
|
|
98208
|
+
'precision': {
|
|
98209
|
+
'amount': this.safeNumber(market, 'base_increment'),
|
|
98210
|
+
'price': this.safeNumber(market, 'quote_increment'),
|
|
98211
|
+
'cost': this.safeNumber(market, 'quote_increment'),
|
|
98212
|
+
},
|
|
98213
|
+
'limits': {
|
|
98214
|
+
'leverage': {
|
|
98215
|
+
'min': undefined,
|
|
98216
|
+
'max': this.safeNumber(market, 'base_imf'),
|
|
98217
|
+
},
|
|
98218
|
+
'amount': {
|
|
98219
|
+
'min': undefined,
|
|
98220
|
+
'max': isSpot ? undefined : this.safeNumber(market, 'position_limit_qty'),
|
|
98221
|
+
},
|
|
98222
|
+
'price': {
|
|
98223
|
+
'min': undefined,
|
|
98224
|
+
'max': undefined,
|
|
98225
|
+
},
|
|
98226
|
+
'cost': {
|
|
98227
|
+
'min': this.safeNumber(market, 'min_notional_value'),
|
|
98228
|
+
'max': undefined,
|
|
98229
|
+
},
|
|
98230
|
+
},
|
|
98231
|
+
'info': market,
|
|
98232
|
+
'created': undefined,
|
|
98233
|
+
};
|
|
98234
|
+
}
|
|
98235
|
+
async fetchCurrencies(params = {}) {
|
|
98236
|
+
/**
|
|
98237
|
+
* @method
|
|
98238
|
+
* @name coinbaseinternational#fetchCurrencies
|
|
98239
|
+
* @description fetches all available currencies on an exchange
|
|
98240
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getassets
|
|
98241
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98242
|
+
* @returns {object} an associative dictionary of currencies
|
|
98243
|
+
*/
|
|
98244
|
+
const currencies = await this.v1PublicGetAssets(params);
|
|
98245
|
+
//
|
|
98246
|
+
// [
|
|
98247
|
+
// {
|
|
98248
|
+
// "asset_id":"1",
|
|
98249
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
98250
|
+
// "asset_name":"USDC",
|
|
98251
|
+
// "status":"ACTIVE",
|
|
98252
|
+
// "collateral_weight":1.0,
|
|
98253
|
+
// "supported_networks_enabled":true
|
|
98254
|
+
// },
|
|
98255
|
+
// ...
|
|
98256
|
+
// ]
|
|
98257
|
+
//
|
|
98258
|
+
const result = {};
|
|
98259
|
+
for (let i = 0; i < currencies.length; i++) {
|
|
98260
|
+
const currency = this.parseCurrency(currencies[i]);
|
|
98261
|
+
result[currency['code']] = currency;
|
|
98262
|
+
}
|
|
98263
|
+
return result;
|
|
98264
|
+
}
|
|
98265
|
+
parseCurrency(currency) {
|
|
98266
|
+
//
|
|
98267
|
+
// {
|
|
98268
|
+
// "asset_id":"1",
|
|
98269
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
98270
|
+
// "asset_name":"USDC",
|
|
98271
|
+
// "status":"ACTIVE",
|
|
98272
|
+
// "collateral_weight":1.0,
|
|
98273
|
+
// "supported_networks_enabled":true
|
|
98274
|
+
// }
|
|
98275
|
+
//
|
|
98276
|
+
const id = this.safeString(currency, 'asset_name');
|
|
98277
|
+
const code = this.safeCurrencyCode(id);
|
|
98278
|
+
const statusId = this.safeString(currency, 'status');
|
|
98279
|
+
return {
|
|
98280
|
+
'id': id,
|
|
98281
|
+
'name': code,
|
|
98282
|
+
'code': code,
|
|
98283
|
+
'precision': undefined,
|
|
98284
|
+
'info': currency,
|
|
98285
|
+
'active': (statusId === 'ACTIVE'),
|
|
98286
|
+
'deposit': undefined,
|
|
98287
|
+
'withdraw': undefined,
|
|
98288
|
+
'networks': undefined,
|
|
98289
|
+
'fee': undefined,
|
|
98290
|
+
'fees': undefined,
|
|
98291
|
+
'limits': this.limits,
|
|
98292
|
+
};
|
|
98293
|
+
}
|
|
98294
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
98295
|
+
/**
|
|
98296
|
+
* @method
|
|
98297
|
+
* @name coinbaseinternational#fetchTickers
|
|
98298
|
+
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
98299
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getinstruments
|
|
98300
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
98301
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98302
|
+
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
98303
|
+
*/
|
|
98304
|
+
await this.loadMarkets();
|
|
98305
|
+
symbols = this.marketSymbols(symbols);
|
|
98306
|
+
const instruments = await this.v1PublicGetInstruments(params);
|
|
98307
|
+
const tickers = {};
|
|
98308
|
+
for (let i = 0; i < instruments.length; i++) {
|
|
98309
|
+
const instrument = instruments[i];
|
|
98310
|
+
const marketId = this.safeString(instrument, 'symbol');
|
|
98311
|
+
const symbol = this.safeSymbol(marketId);
|
|
98312
|
+
const quote = this.safeDict(instrument, 'quote', {});
|
|
98313
|
+
tickers[symbol] = this.parseTicker(quote, this.safeMarket(marketId));
|
|
98314
|
+
}
|
|
98315
|
+
return this.filterByArray(tickers, 'symbol', symbols, true);
|
|
98316
|
+
}
|
|
98317
|
+
async fetchTicker(symbol, params = {}) {
|
|
98318
|
+
/**
|
|
98319
|
+
* @method
|
|
98320
|
+
* @name coinbaseinternational#fetchTicker
|
|
98321
|
+
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
98322
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getinstrumentquote
|
|
98323
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
98324
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98325
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
98326
|
+
*/
|
|
98327
|
+
await this.loadMarkets();
|
|
98328
|
+
const market = this.market(symbol);
|
|
98329
|
+
const request = {
|
|
98330
|
+
'instrument': this.marketId(symbol),
|
|
98331
|
+
};
|
|
98332
|
+
const ticker = await this.v1PublicGetInstrumentsInstrumentQuote(this.extend(request, params));
|
|
98333
|
+
return this.parseTicker(ticker, market);
|
|
98334
|
+
}
|
|
98335
|
+
parseTicker(ticker, market = undefined) {
|
|
98336
|
+
//
|
|
98337
|
+
// {
|
|
98338
|
+
// "best_bid_price":"2490.8",
|
|
98339
|
+
// "best_bid_size":"9.0515",
|
|
98340
|
+
// "best_ask_price":"2490.81",
|
|
98341
|
+
// "best_ask_size":"4.8486",
|
|
98342
|
+
// "trade_price":"2490.39",
|
|
98343
|
+
// "trade_qty":"0.9508",
|
|
98344
|
+
// "index_price":"2490.5",
|
|
98345
|
+
// "mark_price":"2490.8",
|
|
98346
|
+
// "settlement_price":"2490.81",
|
|
98347
|
+
// "limit_up":"2615.42",
|
|
98348
|
+
// "limit_down":"2366.34",
|
|
98349
|
+
// "predicted_funding":"0.000009",
|
|
98350
|
+
// "timestamp":"2024-02-10T16:07:39.454Z"
|
|
98351
|
+
// }
|
|
98352
|
+
//
|
|
98353
|
+
const datetime = this.safeString(ticker, 'timestamp');
|
|
98354
|
+
return this.safeTicker({
|
|
98355
|
+
'info': ticker,
|
|
98356
|
+
'symbol': this.safeSymbol(undefined, market),
|
|
98357
|
+
'timestamp': this.parse8601(datetime),
|
|
98358
|
+
'datetime': datetime,
|
|
98359
|
+
'bid': this.safeNumber(ticker, 'best_bid_price'),
|
|
98360
|
+
'bidVolume': this.safeNumber(ticker, 'best_bid_size'),
|
|
98361
|
+
'ask': this.safeNumber(ticker, 'best_ask_price'),
|
|
98362
|
+
'askVolume': this.safeNumber(ticker, 'best_ask_size'),
|
|
98363
|
+
'high': undefined,
|
|
98364
|
+
'low': undefined,
|
|
98365
|
+
'open': undefined,
|
|
98366
|
+
'close': undefined,
|
|
98367
|
+
'last': undefined,
|
|
98368
|
+
'change': undefined,
|
|
98369
|
+
'percentage': undefined,
|
|
98370
|
+
'average': undefined,
|
|
98371
|
+
'vwap': undefined,
|
|
98372
|
+
'baseVolume': undefined,
|
|
98373
|
+
'quoteVolume': undefined,
|
|
98374
|
+
'previousClose': undefined,
|
|
98375
|
+
});
|
|
98376
|
+
}
|
|
98377
|
+
async fetchBalance(params = {}) {
|
|
98378
|
+
/**
|
|
98379
|
+
* @method
|
|
98380
|
+
* @name coinbaseinternational#fetchBalance
|
|
98381
|
+
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
98382
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getportfoliobalances
|
|
98383
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98384
|
+
* @param {boolean} [params.v3] default false, set true to use v3 api endpoint
|
|
98385
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
98386
|
+
*/
|
|
98387
|
+
await this.loadMarkets();
|
|
98388
|
+
let portfolio = undefined;
|
|
98389
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchBalance', params);
|
|
98390
|
+
const request = {
|
|
98391
|
+
'portfolio': portfolio,
|
|
98392
|
+
};
|
|
98393
|
+
const balances = await this.v1PrivateGetPortfoliosPortfolioBalances(this.extend(request, params));
|
|
98394
|
+
//
|
|
98395
|
+
// [
|
|
98396
|
+
// {
|
|
98397
|
+
// "asset_id":"0-0-1",
|
|
98398
|
+
// "asset_name":"USDC",
|
|
98399
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
98400
|
+
// "quantity":"500000.0000000000",
|
|
98401
|
+
// "hold":"0",
|
|
98402
|
+
// "hold_available_for_collateral":"0",
|
|
98403
|
+
// "transfer_hold":"0",
|
|
98404
|
+
// "collateral_value":"500000.0",
|
|
98405
|
+
// "max_withdraw_amount":"500000.0000000000",
|
|
98406
|
+
// "loan":"0",
|
|
98407
|
+
// "loan_collateral_requirement":"0.0"
|
|
98408
|
+
// }
|
|
98409
|
+
// ]
|
|
98410
|
+
//
|
|
98411
|
+
return this.parseBalance(balances);
|
|
98412
|
+
}
|
|
98413
|
+
parseBalance(response) {
|
|
98414
|
+
//
|
|
98415
|
+
// {
|
|
98416
|
+
// "asset_id":"0-0-1",
|
|
98417
|
+
// "asset_name":"USDC",
|
|
98418
|
+
// "asset_uuid":"2b92315d-eab7-5bef-84fa-089a131333f5",
|
|
98419
|
+
// "quantity":"500000.0000000000",
|
|
98420
|
+
// "hold":"0",
|
|
98421
|
+
// "hold_available_for_collateral":"0",
|
|
98422
|
+
// "transfer_hold":"0",
|
|
98423
|
+
// "collateral_value":"500000.0",
|
|
98424
|
+
// "max_withdraw_amount":"500000.0000000000",
|
|
98425
|
+
// "loan":"0",
|
|
98426
|
+
// "loan_collateral_requirement":"0.0"
|
|
98427
|
+
// }
|
|
98428
|
+
//
|
|
98429
|
+
const result = {
|
|
98430
|
+
'info': response,
|
|
98431
|
+
};
|
|
98432
|
+
for (let i = 0; i < response.length; i++) {
|
|
98433
|
+
const rawBalance = response[i];
|
|
98434
|
+
const currencyId = this.safeString(rawBalance, 'asset_name');
|
|
98435
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
98436
|
+
const account = this.account();
|
|
98437
|
+
account['total'] = this.safeString(rawBalance, 'quantity');
|
|
98438
|
+
account['used'] = this.safeString(rawBalance, 'hold');
|
|
98439
|
+
result[code] = account;
|
|
98440
|
+
}
|
|
98441
|
+
return this.safeBalance(result);
|
|
98442
|
+
}
|
|
98443
|
+
async transfer(code, amount, fromAccount, toAccount, params = {}) {
|
|
98444
|
+
/**
|
|
98445
|
+
* @method
|
|
98446
|
+
* @name coinbaseinternational#transfer
|
|
98447
|
+
* @description Transfer an amount of asset from one portfolio to another.
|
|
98448
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/createportfolioassettransfer
|
|
98449
|
+
* @param {string} code unified currency code
|
|
98450
|
+
* @param {float} amount amount to transfer
|
|
98451
|
+
* @param {string} fromAccount account to transfer from
|
|
98452
|
+
* @param {string} toAccount account to transfer to
|
|
98453
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98454
|
+
* @returns {object} a [transfer structure]{@link https://github.com/ccxt/ccxt/wiki/Manual#transfer-structure}
|
|
98455
|
+
*/
|
|
98456
|
+
await this.loadMarkets();
|
|
98457
|
+
const currency = this.currency(code);
|
|
98458
|
+
const request = {
|
|
98459
|
+
'asset': currency['id'],
|
|
98460
|
+
'ammount': amount,
|
|
98461
|
+
'from': fromAccount,
|
|
98462
|
+
'to': toAccount,
|
|
98463
|
+
};
|
|
98464
|
+
const response = await this.v1PrivatePostPortfoliosTransfer(this.extend(request, params));
|
|
98465
|
+
const success = this.safeBool(response, 'success');
|
|
98466
|
+
return {
|
|
98467
|
+
'info': response,
|
|
98468
|
+
'id': undefined,
|
|
98469
|
+
'timestamp': undefined,
|
|
98470
|
+
'datetime': undefined,
|
|
98471
|
+
'currency': code,
|
|
98472
|
+
'amount': amount,
|
|
98473
|
+
'fromAccount': fromAccount,
|
|
98474
|
+
'toAccount': toAccount,
|
|
98475
|
+
'status': success ? 'ok' : 'failed',
|
|
98476
|
+
};
|
|
98477
|
+
}
|
|
98478
|
+
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
98479
|
+
/**
|
|
98480
|
+
* @method
|
|
98481
|
+
* @name coinbaseinternational#createOrder
|
|
98482
|
+
* @description create a trade order
|
|
98483
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/createorder
|
|
98484
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
98485
|
+
* @param {string} type 'market' or 'limit'
|
|
98486
|
+
* @param {string} side 'buy' or 'sell'
|
|
98487
|
+
* @param {float} amount how much you want to trade in units of the base currency, quote currency for 'market' 'buy' orders
|
|
98488
|
+
* @param {float} [price] the price to fulfill the order, in units of the quote currency, ignored in market orders
|
|
98489
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98490
|
+
* @param {float} [params.stopPrice] price to trigger stop orders
|
|
98491
|
+
* @param {float} [params.triggerPrice] price to trigger stop orders
|
|
98492
|
+
* @param {float} [params.stopLossPrice] price to trigger stop-loss orders
|
|
98493
|
+
* @param {bool} [params.postOnly] true or false
|
|
98494
|
+
* @param {string} [params.tif] 'GTC', 'IOC', 'GTD' default is 'GTC' for limit orders and 'IOC' for market orders
|
|
98495
|
+
* @param {string} [params.expire_time] The expiration time required for orders with the time in force set to GTT. Must not go beyond 30 days of the current time. Uses ISO-8601 format (e.g., 2023-03-16T23:59:53Z)
|
|
98496
|
+
* @param {string} [params.stp_mode] Possible values: [NONE, AGGRESSING, BOTH] Specifies the behavior for self match handling. None disables the functionality, new cancels the newest order, and both cancels both orders.
|
|
98497
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
98498
|
+
*/
|
|
98499
|
+
await this.loadMarkets();
|
|
98500
|
+
const market = this.market(symbol);
|
|
98501
|
+
let typeId = type.toUpperCase();
|
|
98502
|
+
const stopPrice = this.safeNumberN(params, ['triggerPrice', 'stopPrice', 'stop_price']);
|
|
98503
|
+
const clientOrderIdprefix = this.safeString(this.options, 'brokerId', 'nfqkvdjp');
|
|
98504
|
+
let clientOrderId = clientOrderIdprefix + '-' + this.uuid();
|
|
98505
|
+
clientOrderId = clientOrderId.slice(0, 17);
|
|
98506
|
+
const request = {
|
|
98507
|
+
'client_order_id': clientOrderId,
|
|
98508
|
+
'side': side.toUpperCase(),
|
|
98509
|
+
'instrument': market['id'],
|
|
98510
|
+
'size': this.amountToPrecision(market['symbol'], amount),
|
|
98511
|
+
};
|
|
98512
|
+
if (stopPrice !== undefined) {
|
|
98513
|
+
if (type === 'limit') {
|
|
98514
|
+
typeId = 'STOP_LIMIT';
|
|
98515
|
+
}
|
|
98516
|
+
else {
|
|
98517
|
+
typeId = 'STOP';
|
|
98518
|
+
}
|
|
98519
|
+
request['stop_price'] = stopPrice;
|
|
98520
|
+
}
|
|
98521
|
+
request['type'] = typeId;
|
|
98522
|
+
if (type === 'limit') {
|
|
98523
|
+
if (price === undefined) {
|
|
98524
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + 'createOrder() requires a price parameter for a limit order types');
|
|
98525
|
+
}
|
|
98526
|
+
request['price'] = price;
|
|
98527
|
+
}
|
|
98528
|
+
let portfolio = undefined;
|
|
98529
|
+
[portfolio, params] = await this.handlePortfolioAndParams('createOrder', params);
|
|
98530
|
+
if (portfolio !== undefined) {
|
|
98531
|
+
request['portfolio'] = portfolio;
|
|
98532
|
+
}
|
|
98533
|
+
const postOnly = this.safeBool2(params, 'postOnly', 'post_only');
|
|
98534
|
+
let tif = this.safeString2(params, 'tif', 'timeInForce');
|
|
98535
|
+
// market orders must be IOC
|
|
98536
|
+
if (typeId === 'MARKET') {
|
|
98537
|
+
if (tif !== undefined && tif !== 'IOC') {
|
|
98538
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + 'createOrder() market orders must have tif set to "IOC"');
|
|
98539
|
+
}
|
|
98540
|
+
tif = 'IOC';
|
|
98541
|
+
}
|
|
98542
|
+
else {
|
|
98543
|
+
tif = (tif === undefined) ? 'GTC' : tif;
|
|
98544
|
+
}
|
|
98545
|
+
if (postOnly !== undefined) {
|
|
98546
|
+
request['post_only'] = postOnly;
|
|
98547
|
+
}
|
|
98548
|
+
request['tif'] = tif;
|
|
98549
|
+
params = this.omit(params, ['client_order_id', 'user', 'postOnly', 'timeInForce']);
|
|
98550
|
+
const response = await this.v1PrivatePostOrders(this.extend(request, params));
|
|
98551
|
+
//
|
|
98552
|
+
// {
|
|
98553
|
+
// "order_id":"1x96skvg-1-0",
|
|
98554
|
+
// "client_order_id":"ccxt",
|
|
98555
|
+
// "side":"BUY",
|
|
98556
|
+
// "instrument_id":"114jqr89-0-0",
|
|
98557
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
98558
|
+
// "symbol":"BTC-PERP",
|
|
98559
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
98560
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
98561
|
+
// "type":"LIMIT",
|
|
98562
|
+
// "price":"10000",
|
|
98563
|
+
// "size":"0.001",
|
|
98564
|
+
// "tif":"GTC",
|
|
98565
|
+
// "stp_mode":"BOTH",
|
|
98566
|
+
// "event_type":"NEW",
|
|
98567
|
+
// "order_status":"WORKING",
|
|
98568
|
+
// "leaves_qty":"0.001",
|
|
98569
|
+
// "exec_qty":"0",
|
|
98570
|
+
// "avg_price":"0",
|
|
98571
|
+
// "fee":"0"
|
|
98572
|
+
// }
|
|
98573
|
+
//
|
|
98574
|
+
return this.parseOrder(response, market);
|
|
98575
|
+
}
|
|
98576
|
+
parseOrder(order, market = undefined) {
|
|
98577
|
+
//
|
|
98578
|
+
// {
|
|
98579
|
+
// "order_id":"1x96skvg-1-0",
|
|
98580
|
+
// "client_order_id":"ccxt",
|
|
98581
|
+
// "side":"BUY",
|
|
98582
|
+
// "instrument_id":"114jqr89-0-0",
|
|
98583
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
98584
|
+
// "symbol":"BTC-PERP",
|
|
98585
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
98586
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
98587
|
+
// "type":"LIMIT",
|
|
98588
|
+
// "price":"10000",
|
|
98589
|
+
// "size":"0.001",
|
|
98590
|
+
// "tif":"GTC",
|
|
98591
|
+
// "stp_mode":"BOTH",
|
|
98592
|
+
// "event_type":"NEW",
|
|
98593
|
+
// "order_status":"WORKING",
|
|
98594
|
+
// "leaves_qty":"0.001",
|
|
98595
|
+
// "exec_qty":"0",
|
|
98596
|
+
// "avg_price":"0",
|
|
98597
|
+
// "fee":"0"
|
|
98598
|
+
// }
|
|
98599
|
+
//
|
|
98600
|
+
const marketId = this.safeString(order, 'symbol');
|
|
98601
|
+
const feeCost = this.safeNumber(order, 'fee');
|
|
98602
|
+
let fee = undefined;
|
|
98603
|
+
if (feeCost !== undefined) {
|
|
98604
|
+
fee = {
|
|
98605
|
+
'cost': feeCost,
|
|
98606
|
+
};
|
|
98607
|
+
}
|
|
98608
|
+
const datetime = this.safeString2(order, 'submit_time', 'event_time');
|
|
98609
|
+
return this.safeOrder({
|
|
98610
|
+
'info': order,
|
|
98611
|
+
'id': this.safeString(order, 'order_id'),
|
|
98612
|
+
'clientOrderId': this.safeString(order, 'client_order_id'),
|
|
98613
|
+
'timestamp': this.parse8601(datetime),
|
|
98614
|
+
'datetime': datetime,
|
|
98615
|
+
'lastTradeTimestamp': undefined,
|
|
98616
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
98617
|
+
'type': this.parseOrderType(this.safeString(order, 'type')),
|
|
98618
|
+
'timeInForce': this.safeString(order, 'tif'),
|
|
98619
|
+
'postOnly': undefined,
|
|
98620
|
+
'side': this.safeStringLower(order, 'side'),
|
|
98621
|
+
'price': this.safeString(order, 'price'),
|
|
98622
|
+
'stopPrice': this.safeString(order, 'stop_price'),
|
|
98623
|
+
'triggerPrice': this.safeString(order, 'stop_price'),
|
|
98624
|
+
'amount': this.safeString(order, 'size'),
|
|
98625
|
+
'filled': this.safeString(order, 'exec_qty'),
|
|
98626
|
+
'remaining': this.safeString(order, 'leaves_qty'),
|
|
98627
|
+
'cost': undefined,
|
|
98628
|
+
'average': this.safeString(order, 'avg_price'),
|
|
98629
|
+
'status': this.parseOrderStatus(this.safeString(order, 'order_status')),
|
|
98630
|
+
'fee': fee,
|
|
98631
|
+
'trades': undefined,
|
|
98632
|
+
}, market);
|
|
98633
|
+
}
|
|
98634
|
+
parseOrderStatus(status) {
|
|
98635
|
+
const statuses = {
|
|
98636
|
+
'NEW': 'open',
|
|
98637
|
+
'PARTIAL_FILLED': 'open',
|
|
98638
|
+
'FILLED': 'closed',
|
|
98639
|
+
'CANCELED': 'canceled',
|
|
98640
|
+
'REPLACED': 'canceled',
|
|
98641
|
+
'PENDING_CANCEL': 'open',
|
|
98642
|
+
'REJECTED': 'rejected',
|
|
98643
|
+
'PENDING_NEW': 'open',
|
|
98644
|
+
'EXPIRED': 'expired',
|
|
98645
|
+
'PENDING_REPLACE': 'open',
|
|
98646
|
+
};
|
|
98647
|
+
return this.safeString(statuses, status, status);
|
|
98648
|
+
}
|
|
98649
|
+
parseOrderType(type) {
|
|
98650
|
+
if (type === 'UNKNOWN_ORDER_TYPE') {
|
|
98651
|
+
return undefined;
|
|
98652
|
+
}
|
|
98653
|
+
const types = {
|
|
98654
|
+
'MARKET': 'market',
|
|
98655
|
+
'LIMIT': 'limit',
|
|
98656
|
+
'STOP': 'limit',
|
|
98657
|
+
'STOP_LIMIT': 'limit',
|
|
98658
|
+
};
|
|
98659
|
+
return this.safeString(types, type, type);
|
|
98660
|
+
}
|
|
98661
|
+
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
98662
|
+
/**
|
|
98663
|
+
* @method
|
|
98664
|
+
* @name coinbaseinternational#cancelOrder
|
|
98665
|
+
* @description cancels an open order
|
|
98666
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/cancelorder
|
|
98667
|
+
* @param {string} id order id
|
|
98668
|
+
* @param {string} symbol not used by coinbaseinternational cancelOrder()
|
|
98669
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98670
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
98671
|
+
*/
|
|
98672
|
+
await this.loadMarkets();
|
|
98673
|
+
let portfolio = undefined;
|
|
98674
|
+
[portfolio, params] = await this.handlePortfolioAndParams('cancelOrder', params);
|
|
98675
|
+
const request = {
|
|
98676
|
+
'portfolio': portfolio,
|
|
98677
|
+
'id': id,
|
|
98678
|
+
};
|
|
98679
|
+
let market = undefined;
|
|
98680
|
+
if (symbol !== undefined) {
|
|
98681
|
+
market = this.market(symbol);
|
|
98682
|
+
}
|
|
98683
|
+
const orders = await this.v1PrivateDeleteOrdersId(this.extend(request, params));
|
|
98684
|
+
//
|
|
98685
|
+
// {
|
|
98686
|
+
// "order_id":"1x96skvg-1-0",
|
|
98687
|
+
// "client_order_id":"ccxt",
|
|
98688
|
+
// "side":"BUY",
|
|
98689
|
+
// "instrument_id":"114jqr89-0-0",
|
|
98690
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
98691
|
+
// "symbol":"BTC-PERP",
|
|
98692
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
98693
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
98694
|
+
// "type":"LIMIT",
|
|
98695
|
+
// "price":"10000",
|
|
98696
|
+
// "size":"0.001",
|
|
98697
|
+
// "tif":"GTC",
|
|
98698
|
+
// "stp_mode":"BOTH",
|
|
98699
|
+
// "event_type":"CANCELED",
|
|
98700
|
+
// "order_status":"DONE",
|
|
98701
|
+
// "leaves_qty":"0.001",
|
|
98702
|
+
// "exec_qty":"0",
|
|
98703
|
+
// "avg_price":"0",
|
|
98704
|
+
// "fee":"0"
|
|
98705
|
+
// }
|
|
98706
|
+
//
|
|
98707
|
+
return this.parseOrder(orders, market);
|
|
98708
|
+
}
|
|
98709
|
+
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
98710
|
+
/**
|
|
98711
|
+
* @method
|
|
98712
|
+
* @name coinbaseinternational#cancelAllOrders
|
|
98713
|
+
* @description cancel all open orders
|
|
98714
|
+
* @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
|
|
98715
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98716
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
98717
|
+
*/
|
|
98718
|
+
await this.loadMarkets();
|
|
98719
|
+
let portfolio = undefined;
|
|
98720
|
+
[portfolio, params] = await this.handlePortfolioAndParams('cancelAllOrders', params);
|
|
98721
|
+
const request = {
|
|
98722
|
+
'portfolio': portfolio,
|
|
98723
|
+
};
|
|
98724
|
+
let market = undefined;
|
|
98725
|
+
if (symbol) {
|
|
98726
|
+
market = this.market(symbol);
|
|
98727
|
+
request['instrument'] = market['id'];
|
|
98728
|
+
}
|
|
98729
|
+
const orders = await this.v1PrivateDeleteOrders(this.extend(request, params));
|
|
98730
|
+
return this.parseOrders(orders, market);
|
|
98731
|
+
}
|
|
98732
|
+
async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
98733
|
+
/**
|
|
98734
|
+
* @method
|
|
98735
|
+
* @name coinbaseinternational#editOrder
|
|
98736
|
+
* @description edit a trade order
|
|
98737
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/modifyorder
|
|
98738
|
+
* @param {string} id cancel order id
|
|
98739
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
98740
|
+
* @param {string} type 'market' or 'limit'
|
|
98741
|
+
* @param {string} side 'buy' or 'sell'
|
|
98742
|
+
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
98743
|
+
* @param {float} [price] the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders
|
|
98744
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98745
|
+
* @param {string} params.clientOrderId client order id
|
|
98746
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
98747
|
+
*/
|
|
98748
|
+
await this.loadMarkets();
|
|
98749
|
+
const market = this.market(symbol);
|
|
98750
|
+
const request = {
|
|
98751
|
+
'id': id,
|
|
98752
|
+
};
|
|
98753
|
+
let portfolio = undefined;
|
|
98754
|
+
[portfolio, params] = await this.handlePortfolioAndParams('editOrder', params);
|
|
98755
|
+
if (portfolio !== undefined) {
|
|
98756
|
+
request['portfolio'] = portfolio;
|
|
98757
|
+
}
|
|
98758
|
+
if (amount !== undefined) {
|
|
98759
|
+
request['size'] = this.amountToPrecision(symbol, amount);
|
|
98760
|
+
}
|
|
98761
|
+
if (price !== undefined) {
|
|
98762
|
+
request['price'] = this.priceToPrecision(symbol, price);
|
|
98763
|
+
}
|
|
98764
|
+
const stopPrice = this.safeNumberN(params, ['stopPrice', 'stop_price', 'triggerPrice']);
|
|
98765
|
+
if (stopPrice !== undefined) {
|
|
98766
|
+
request['stop_price'] = stopPrice;
|
|
98767
|
+
}
|
|
98768
|
+
const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
|
|
98769
|
+
if (clientOrderId === undefined) {
|
|
98770
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' editOrder() requires a clientOrderId parameter');
|
|
98771
|
+
}
|
|
98772
|
+
request['client_order_id'] = clientOrderId;
|
|
98773
|
+
const order = await this.v1PrivatePutOrdersId(this.extend(request, params));
|
|
98774
|
+
return this.parseOrder(order, market);
|
|
98775
|
+
}
|
|
98776
|
+
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
98777
|
+
/**
|
|
98778
|
+
* @method
|
|
98779
|
+
* @name coinbaseinternational#fetchOrder
|
|
98780
|
+
* @description fetches information on an order made by the user
|
|
98781
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/modifyorder
|
|
98782
|
+
* @param {string} id the order id
|
|
98783
|
+
* @param {string} symbol unified market symbol that the order was made in
|
|
98784
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98785
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
98786
|
+
*/
|
|
98787
|
+
await this.loadMarkets();
|
|
98788
|
+
let market = undefined;
|
|
98789
|
+
if (symbol !== undefined) {
|
|
98790
|
+
market = this.market(symbol);
|
|
98791
|
+
}
|
|
98792
|
+
let portfolio = undefined;
|
|
98793
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchOrder', params);
|
|
98794
|
+
const request = {
|
|
98795
|
+
'id': id,
|
|
98796
|
+
'portfolio': portfolio,
|
|
98797
|
+
};
|
|
98798
|
+
const order = await this.v1PrivateGetOrdersId(this.extend(request, params));
|
|
98799
|
+
//
|
|
98800
|
+
// {
|
|
98801
|
+
// "order_id":"1x96skvg-1-0",
|
|
98802
|
+
// "client_order_id":"ccxt",
|
|
98803
|
+
// "side":"BUY",
|
|
98804
|
+
// "instrument_id":"114jqr89-0-0",
|
|
98805
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
98806
|
+
// "symbol":"BTC-PERP",
|
|
98807
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
98808
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
98809
|
+
// "type":"LIMIT",
|
|
98810
|
+
// "price":"10000",
|
|
98811
|
+
// "size":"0.001",
|
|
98812
|
+
// "tif":"GTC",
|
|
98813
|
+
// "stp_mode":"BOTH",
|
|
98814
|
+
// "event_type":"NEW",
|
|
98815
|
+
// "event_time":"2024-02-14T03:25:14Z",
|
|
98816
|
+
// "submit_time":"2024-02-14T03:25:13.999Z",
|
|
98817
|
+
// "order_status":"WORKING",
|
|
98818
|
+
// "leaves_qty":"0.001",
|
|
98819
|
+
// "exec_qty":"0",
|
|
98820
|
+
// "avg_price":"0",
|
|
98821
|
+
// "fee":"0"
|
|
98822
|
+
// }
|
|
98823
|
+
//
|
|
98824
|
+
return this.parseOrder(order, market);
|
|
98825
|
+
}
|
|
98826
|
+
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
98827
|
+
/**
|
|
98828
|
+
* @method
|
|
98829
|
+
* @name coinbaseinternational#fetchOpenOrders
|
|
98830
|
+
* @description fetches information on all currently open orders
|
|
98831
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getorders
|
|
98832
|
+
* @param {string} symbol unified market symbol of the orders
|
|
98833
|
+
* @param {int} [since] timestamp in ms of the earliest order, default is undefined
|
|
98834
|
+
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
98835
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98836
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
98837
|
+
* @param {int} [params.offset] offset
|
|
98838
|
+
* @param {string} [params.event_type] The most recent type of event that happened to the order. Allowed values: NEW, TRADE, REPLACED
|
|
98839
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
98840
|
+
*/
|
|
98841
|
+
await this.loadMarkets();
|
|
98842
|
+
let portfolio = undefined;
|
|
98843
|
+
[portfolio, params] = await this.handlePortfolioAndParams('fetchOpenOrders', params);
|
|
98844
|
+
let paginate = false;
|
|
98845
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'paginate');
|
|
98846
|
+
let maxEntriesPerRequest = undefined;
|
|
98847
|
+
[maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchOpenOrders', 'maxEntriesPerRequest', 100);
|
|
98848
|
+
const pageKey = 'ccxtPageKey';
|
|
98849
|
+
if (paginate) {
|
|
98850
|
+
return await this.fetchPaginatedCallIncremental('fetchOpenOrders', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
|
|
98851
|
+
}
|
|
98852
|
+
const page = this.safeInteger(params, pageKey, 1) - 1;
|
|
98853
|
+
const request = {
|
|
98854
|
+
'portfolio': portfolio,
|
|
98855
|
+
'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
|
|
98856
|
+
};
|
|
98857
|
+
let market = undefined;
|
|
98858
|
+
if (symbol) {
|
|
98859
|
+
market = this.market(symbol);
|
|
98860
|
+
request['instrument'] = symbol;
|
|
98861
|
+
}
|
|
98862
|
+
if (limit !== undefined) {
|
|
98863
|
+
if (limit > 100) {
|
|
98864
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' fetchOpenOrders() maximum limit is 100');
|
|
98865
|
+
}
|
|
98866
|
+
request['result_limit'] = limit;
|
|
98867
|
+
}
|
|
98868
|
+
if (since !== undefined) {
|
|
98869
|
+
request['ref_datetime'] = this.iso8601(since);
|
|
98870
|
+
}
|
|
98871
|
+
const response = await this.v1PrivateGetOrders(this.extend(request, params));
|
|
98872
|
+
//
|
|
98873
|
+
// {
|
|
98874
|
+
// "pagination":{
|
|
98875
|
+
// "result_limit":25,
|
|
98876
|
+
// "result_offset":0
|
|
98877
|
+
// },
|
|
98878
|
+
// "results":[
|
|
98879
|
+
// {
|
|
98880
|
+
// "order_id":"1y4cm6b4-1-0",
|
|
98881
|
+
// "client_order_id":"ccxtd0dd4b5d-8e5f-",
|
|
98882
|
+
// "side":"SELL",
|
|
98883
|
+
// "instrument_id":"114jqr89-0-0",
|
|
98884
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
98885
|
+
// "symbol":"BTC-PERP",
|
|
98886
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
98887
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
98888
|
+
// "type":"LIMIT",
|
|
98889
|
+
// "price":"54000",
|
|
98890
|
+
// "size":"0.01",
|
|
98891
|
+
// "tif":"GTC",
|
|
98892
|
+
// "stp_mode":"BOTH",
|
|
98893
|
+
// "event_type":"NEW",
|
|
98894
|
+
// "event_time":"2024-02-24T16:46:37.413Z",
|
|
98895
|
+
// "submit_time":"2024-02-24T16:46:37.412Z",
|
|
98896
|
+
// "order_status":"WORKING",
|
|
98897
|
+
// "leaves_qty":"0.01",
|
|
98898
|
+
// "exec_qty":"0",
|
|
98899
|
+
// "avg_price":"0",
|
|
98900
|
+
// "fee":"0"
|
|
98901
|
+
// },
|
|
98902
|
+
// ...
|
|
98903
|
+
// ]
|
|
98904
|
+
// }
|
|
98905
|
+
//
|
|
98906
|
+
const rawOrders = this.safeList(response, 'results', []);
|
|
98907
|
+
return this.parseOrders(rawOrders, market, since, limit);
|
|
98908
|
+
}
|
|
98909
|
+
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
98910
|
+
/**
|
|
98911
|
+
* @method
|
|
98912
|
+
* @name coinbaseinternational#fetchMyTrades
|
|
98913
|
+
* @description fetch all trades made by the user
|
|
98914
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/getmultiportfoliofills
|
|
98915
|
+
* @param {string} symbol unified market symbol of the trades
|
|
98916
|
+
* @param {int} [since] timestamp in ms of the earliest order, default is undefined
|
|
98917
|
+
* @param {int} [limit] the maximum number of trade structures to fetch
|
|
98918
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
98919
|
+
* @param {int} [params.until] the latest time in ms to fetch trades for
|
|
98920
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
98921
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
98922
|
+
*/
|
|
98923
|
+
await this.loadMarkets();
|
|
98924
|
+
let paginate = false;
|
|
98925
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
|
|
98926
|
+
const pageKey = 'ccxtPageKey';
|
|
98927
|
+
let maxEntriesPerRequest = undefined;
|
|
98928
|
+
[maxEntriesPerRequest, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'maxEntriesPerRequest', 100);
|
|
98929
|
+
if (paginate) {
|
|
98930
|
+
return await this.fetchPaginatedCallIncremental('fetchMyTrades', symbol, since, limit, params, pageKey, maxEntriesPerRequest);
|
|
98931
|
+
}
|
|
98932
|
+
let market = undefined;
|
|
98933
|
+
if (symbol !== undefined) {
|
|
98934
|
+
market = this.market(symbol);
|
|
98935
|
+
}
|
|
98936
|
+
const page = this.safeInteger(params, pageKey, 1) - 1;
|
|
98937
|
+
const request = {
|
|
98938
|
+
'result_offset': this.safeInteger2(params, 'offset', 'result_offset', page * maxEntriesPerRequest),
|
|
98939
|
+
};
|
|
98940
|
+
if (limit !== undefined) {
|
|
98941
|
+
if (limit > 100) {
|
|
98942
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' fetchMyTrades() maximum limit is 100. Consider setting paginate to true to fetch more trades.');
|
|
98943
|
+
}
|
|
98944
|
+
request['result_limit'] = limit;
|
|
98945
|
+
}
|
|
98946
|
+
if (since !== undefined) {
|
|
98947
|
+
request['time_from'] = this.iso8601(since);
|
|
98948
|
+
}
|
|
98949
|
+
const until = this.safeStringN(params, ['until', 'till']);
|
|
98950
|
+
if (until !== undefined) {
|
|
98951
|
+
params = this.omit(params, ['until', 'till']);
|
|
98952
|
+
request['ref_datetime'] = this.iso8601(until);
|
|
98953
|
+
}
|
|
98954
|
+
const response = await this.v1PrivateGetPortfoliosFills(this.extend(request, params));
|
|
98955
|
+
//
|
|
98956
|
+
// {
|
|
98957
|
+
// "pagination":{
|
|
98958
|
+
// "result_limit":25,
|
|
98959
|
+
// "result_offset":0
|
|
98960
|
+
// },
|
|
98961
|
+
// "results":[
|
|
98962
|
+
// {
|
|
98963
|
+
// "portfolio_id":"1wp37qsc-1-0",
|
|
98964
|
+
// "portfolio_uuid":"018d7f6c-b92c-7361-8b7e-2932711e5a22",
|
|
98965
|
+
// "portfolio_name":"CCXT Portfolio 020624-17:16",
|
|
98966
|
+
// "fill_id":"1xbfy19y-1-184",
|
|
98967
|
+
// "exec_id":"280841526207070392",
|
|
98968
|
+
// "order_id":"1xbfv8yw-1-0",
|
|
98969
|
+
// "instrument_id":"114jqr89-0-0",
|
|
98970
|
+
// "instrument_uuid":"b3469e0b-222c-4f8a-9f68-1f9e44d7e5e0",
|
|
98971
|
+
// "symbol":"BTC-PERP",
|
|
98972
|
+
// "match_id":"280841526207053840",
|
|
98973
|
+
// "fill_price":"52500",
|
|
98974
|
+
// "fill_qty":"0.01",
|
|
98975
|
+
// "client_id":"1x59ctku-1-1",
|
|
98976
|
+
// "client_order_id":"ccxt3e4e2a5f-4a89-",
|
|
98977
|
+
// "order_qty":"0.01",
|
|
98978
|
+
// "limit_price":"52500",
|
|
98979
|
+
// "total_filled":"0.01",
|
|
98980
|
+
// "filled_vwap":"52500",
|
|
98981
|
+
// "expire_time":"",
|
|
98982
|
+
// "stop_price":"",
|
|
98983
|
+
// "side":"BUY",
|
|
98984
|
+
// "tif":"GTC",
|
|
98985
|
+
// "stp_mode":"BOTH",
|
|
98986
|
+
// "flags":"",
|
|
98987
|
+
// "fee":"0.105",
|
|
98988
|
+
// "fee_asset":"USDC",
|
|
98989
|
+
// "order_status":"DONE",
|
|
98990
|
+
// "event_time":"2024-02-15T00:43:57.631Z"
|
|
98991
|
+
// },
|
|
98992
|
+
// ]
|
|
98993
|
+
// }
|
|
98994
|
+
//
|
|
98995
|
+
const trades = this.safeList(response, 'results', []);
|
|
98996
|
+
return this.parseTrades(trades, market, since, limit);
|
|
98997
|
+
}
|
|
98998
|
+
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
98999
|
+
/**
|
|
99000
|
+
* @method
|
|
99001
|
+
* @name coinbaseinternational#withdraw
|
|
99002
|
+
* @description make a withdrawal
|
|
99003
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/withdraw
|
|
99004
|
+
* @see https://docs.cloud.coinbase.com/intx/reference/counterpartywithdraw
|
|
99005
|
+
* @param {string} code unified currency code
|
|
99006
|
+
* @param {float} amount the amount to withdraw
|
|
99007
|
+
* @param {string} address the address to withdraw to
|
|
99008
|
+
* @param {string} [tag] an optional tag for the withdrawal
|
|
99009
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
99010
|
+
* @param {boolean} [params.add_network_fee_to_total] if true, deducts network fee from the portfolio, otherwise deduct fee from the withdrawal
|
|
99011
|
+
* @param {string} [params.network_arn_id] Identifies the blockchain network (e.g., networks/ethereum-mainnet/assets/313ef8a9-ae5a-5f2f-8a56-572c0e2a4d5a)
|
|
99012
|
+
* @param {string} [params.nonce] a unique integer representing the withdrawal request
|
|
99013
|
+
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
99014
|
+
*/
|
|
99015
|
+
[tag, params] = this.handleWithdrawTagAndParams(tag, params);
|
|
99016
|
+
this.checkAddress(address);
|
|
99017
|
+
await this.loadMarkets();
|
|
99018
|
+
const currency = this.currency(code);
|
|
99019
|
+
let portfolio = undefined;
|
|
99020
|
+
[portfolio, params] = await this.handlePortfolioAndParams('withdraw', params);
|
|
99021
|
+
let method = undefined;
|
|
99022
|
+
[method, params] = this.handleOptionAndParams(params, 'withdraw', 'method', 'v1PrivatePostTransfersWithdraw');
|
|
99023
|
+
let networkId = undefined;
|
|
99024
|
+
[networkId, params] = await this.handleNetworkIdAndParams(code, 'withdraw', params);
|
|
99025
|
+
const request = {
|
|
99026
|
+
'portfolio': portfolio,
|
|
99027
|
+
'type': 'send',
|
|
99028
|
+
'asset': currency['id'],
|
|
99029
|
+
'address': address,
|
|
99030
|
+
'amount': amount,
|
|
99031
|
+
'currency': currency['id'],
|
|
99032
|
+
'network_arn_id': networkId,
|
|
99033
|
+
'nonce': this.nonce(),
|
|
99034
|
+
};
|
|
99035
|
+
const response = await this[method](this.extend(request, params));
|
|
99036
|
+
//
|
|
99037
|
+
// {
|
|
99038
|
+
// "idem":"8e471d77-4208-45a8-9e5b-f3bd8a2c1fc3"
|
|
99039
|
+
// }
|
|
99040
|
+
//
|
|
99041
|
+
return this.parseTransaction(response, currency);
|
|
99042
|
+
}
|
|
99043
|
+
safeNetwork(network) {
|
|
99044
|
+
let withdrawEnabled = this.safeBool(network, 'withdraw');
|
|
99045
|
+
let depositEnabled = this.safeBool(network, 'deposit');
|
|
99046
|
+
const limits = this.safeDict(network, 'limits');
|
|
99047
|
+
const withdraw = this.safeDict(limits, 'withdraw');
|
|
99048
|
+
const withdrawMax = this.safeNumber(withdraw, 'max');
|
|
99049
|
+
const deposit = this.safeDict(limits, 'deposit');
|
|
99050
|
+
const depositMax = this.safeNumber(deposit, 'max');
|
|
99051
|
+
if (withdrawEnabled === undefined && withdrawMax !== undefined) {
|
|
99052
|
+
withdrawEnabled = (withdrawMax > 0);
|
|
99053
|
+
}
|
|
99054
|
+
if (depositEnabled === undefined && depositMax !== undefined) {
|
|
99055
|
+
depositEnabled = (depositMax > 0);
|
|
99056
|
+
}
|
|
99057
|
+
const networkId = this.safeString(network, 'id');
|
|
99058
|
+
const isEnabled = (withdrawEnabled && depositEnabled);
|
|
99059
|
+
return {
|
|
99060
|
+
'info': network['info'],
|
|
99061
|
+
'id': networkId,
|
|
99062
|
+
'name': this.safeString(network, 'name'),
|
|
99063
|
+
'network': this.safeString(network, 'network'),
|
|
99064
|
+
'active': this.safeBool(network, 'active', isEnabled),
|
|
99065
|
+
'deposit': depositEnabled,
|
|
99066
|
+
'withdraw': withdrawEnabled,
|
|
99067
|
+
'fee': this.safeNumber(network, 'fee'),
|
|
99068
|
+
'precision': this.safeNumber(network, 'precision'),
|
|
99069
|
+
'limits': {
|
|
99070
|
+
'withdraw': {
|
|
99071
|
+
'min': this.safeNumber(withdraw, 'min'),
|
|
99072
|
+
'max': withdrawMax,
|
|
99073
|
+
},
|
|
99074
|
+
'deposit': {
|
|
99075
|
+
'min': this.safeNumber(deposit, 'min'),
|
|
99076
|
+
'max': depositMax,
|
|
99077
|
+
},
|
|
99078
|
+
},
|
|
99079
|
+
};
|
|
99080
|
+
}
|
|
99081
|
+
sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
99082
|
+
const version = api[0];
|
|
99083
|
+
const signed = api[1] === 'private';
|
|
99084
|
+
let fullPath = '/' + version + '/' + this.implodeParams(path, params);
|
|
99085
|
+
const query = this.omit(params, this.extractParams(path));
|
|
99086
|
+
const savedPath = '/api' + fullPath;
|
|
99087
|
+
if (method === 'GET' || method === 'DELETE') {
|
|
99088
|
+
if (Object.keys(query).length) {
|
|
99089
|
+
fullPath += '?' + this.urlencodeWithArrayRepeat(query);
|
|
99090
|
+
}
|
|
99091
|
+
}
|
|
99092
|
+
const url = this.urls['api']['rest'] + fullPath;
|
|
99093
|
+
if (signed) {
|
|
99094
|
+
this.checkRequiredCredentials();
|
|
99095
|
+
const nonce = this.nonce().toString();
|
|
99096
|
+
let payload = '';
|
|
99097
|
+
if (method !== 'GET') {
|
|
99098
|
+
if (Object.keys(query).length) {
|
|
99099
|
+
body = this.json(query);
|
|
99100
|
+
payload = body;
|
|
99101
|
+
}
|
|
99102
|
+
}
|
|
99103
|
+
const auth = nonce + method + savedPath + payload;
|
|
99104
|
+
const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_4__/* .sha256 */ .J, 'base64');
|
|
99105
|
+
headers = {
|
|
99106
|
+
'CB-ACCESS-TIMESTAMP': nonce,
|
|
99107
|
+
'CB-ACCESS-SIGN': signature,
|
|
99108
|
+
'CB-ACCESS-PASSPHRASE': this.password,
|
|
99109
|
+
'CB-ACCESS-KEY': this.apiKey,
|
|
99110
|
+
};
|
|
99111
|
+
}
|
|
99112
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
99113
|
+
}
|
|
99114
|
+
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
99115
|
+
//
|
|
99116
|
+
// {
|
|
99117
|
+
// "title":"io.javalin.http.BadRequestResponse: Order rejected (DUPLICATE_CLIENT_ORDER_ID - duplicate client order id detected)",
|
|
99118
|
+
// "status":400
|
|
99119
|
+
// }
|
|
99120
|
+
//
|
|
99121
|
+
if (response === undefined) {
|
|
99122
|
+
return undefined; // fallback to default error handler
|
|
99123
|
+
}
|
|
99124
|
+
const feedback = this.id + ' ' + body;
|
|
99125
|
+
const errMsg = this.safeString(response, 'title');
|
|
99126
|
+
if (errMsg !== undefined) {
|
|
99127
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], errMsg, feedback);
|
|
99128
|
+
this.throwBroadlyMatchedException(this.exceptions['broad'], errMsg, feedback);
|
|
99129
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback);
|
|
99130
|
+
}
|
|
99131
|
+
return undefined;
|
|
99132
|
+
}
|
|
99133
|
+
}
|
|
99134
|
+
|
|
99135
|
+
|
|
96920
99136
|
/***/ }),
|
|
96921
99137
|
|
|
96922
99138
|
/***/ 8856:
|
|
@@ -136263,7 +138479,7 @@ class gate extends _abstract_gate_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
|
|
|
136263
138479
|
let request = {};
|
|
136264
138480
|
[request, params] = this.prepareRequest(market, undefined, params);
|
|
136265
138481
|
request['interval'] = this.safeString(this.timeframes, timeframe, timeframe);
|
|
136266
|
-
let maxLimit = 1000;
|
|
138482
|
+
let maxLimit = market['contract'] ? 1999 : 1000;
|
|
136267
138483
|
limit = (limit === undefined) ? maxLimit : Math.min(limit, maxLimit);
|
|
136268
138484
|
let until = this.safeInteger(params, 'until');
|
|
136269
138485
|
if (until !== undefined) {
|
|
@@ -159659,8 +161875,8 @@ class hyperliquid extends _abstract_hyperliquid_js__WEBPACK_IMPORTED_MODULE_0__/
|
|
|
159659
161875
|
'strike': undefined,
|
|
159660
161876
|
'optionType': undefined,
|
|
159661
161877
|
'precision': {
|
|
159662
|
-
'amount':
|
|
159663
|
-
'price':
|
|
161878
|
+
'amount': this.parseNumber(this.parsePrecision(this.safeString(market, 'szDecimals'))),
|
|
161879
|
+
'price': this.parseNumber('5'), // significant digits
|
|
159664
161880
|
},
|
|
159665
161881
|
'limits': {
|
|
159666
161882
|
'leverage': {
|
|
@@ -159919,6 +162135,12 @@ class hyperliquid extends _abstract_hyperliquid_js__WEBPACK_IMPORTED_MODULE_0__/
|
|
|
159919
162135
|
amountToPrecision(symbol, amount) {
|
|
159920
162136
|
return this.decimalToPrecision(amount, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .ROUND */ .oU, this.markets[symbol]['precision']['amount'], this.precisionMode);
|
|
159921
162137
|
}
|
|
162138
|
+
priceToPrecision(symbol, price) {
|
|
162139
|
+
const market = this.market(symbol);
|
|
162140
|
+
const result = this.decimalToPrecision(price, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .ROUND */ .oU, market['precision']['price'], _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .SIGNIFICANT_DIGITS */ .tV, this.paddingMode);
|
|
162141
|
+
const decimalParsedResult = this.decimalToPrecision(result, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .ROUND */ .oU, 6, _base_functions_number_js__WEBPACK_IMPORTED_MODULE_2__/* .DECIMAL_PLACES */ .nr, this.paddingMode);
|
|
162142
|
+
return decimalParsedResult;
|
|
162143
|
+
}
|
|
159922
162144
|
hashMessage(message) {
|
|
159923
162145
|
return '0x' + this.hash(message, _static_dependencies_noble_hashes_sha3_js__WEBPACK_IMPORTED_MODULE_3__/* .keccak_256 */ .fr, 'hex');
|
|
159924
162146
|
}
|
|
@@ -188975,7 +191197,7 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
|
|
|
188975
191197
|
'Combination of optional parameters invalid': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
|
|
188976
191198
|
'api market order is disabled': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
|
|
188977
191199
|
'Contract not allow place order!': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
|
|
188978
|
-
'Oversold': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.
|
|
191200
|
+
'Oversold': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
|
|
188979
191201
|
'Insufficient position': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
|
|
188980
191202
|
'Insufficient balance!': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
|
|
188981
191203
|
'Bid price is great than max allow price': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
|
|
@@ -204034,7 +206256,7 @@ class okx extends _abstract_okx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
204034
206256
|
let paginate = false;
|
|
204035
206257
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchFundingRateHistory', 'paginate');
|
|
204036
206258
|
if (paginate) {
|
|
204037
|
-
return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params);
|
|
206259
|
+
return await this.fetchPaginatedCallDeterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 100);
|
|
204038
206260
|
}
|
|
204039
206261
|
const market = this.market(symbol);
|
|
204040
206262
|
const request = {
|
|
@@ -227796,21 +230018,44 @@ class bingx extends _bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
|
227796
230018
|
}
|
|
227797
230019
|
return true;
|
|
227798
230020
|
}
|
|
227799
|
-
async
|
|
227800
|
-
const time = this.milliseconds();
|
|
230021
|
+
async keepAliveListenKey(params = {}) {
|
|
227801
230022
|
const listenKey = this.safeString(this.options, 'listenKey');
|
|
227802
230023
|
if (listenKey === undefined) {
|
|
227803
|
-
|
|
227804
|
-
this.options['listenKey'] = this.safeString(response, 'listenKey');
|
|
227805
|
-
this.options['lastAuthenticatedTime'] = time;
|
|
230024
|
+
// A network error happened: we can't renew a listen key that does not exist.
|
|
227806
230025
|
return;
|
|
227807
230026
|
}
|
|
230027
|
+
try {
|
|
230028
|
+
await this.userAuthPrivatePutUserDataStream({ 'listenKey': listenKey }); // extend the expiry
|
|
230029
|
+
}
|
|
230030
|
+
catch (error) {
|
|
230031
|
+
const types = ['spot', 'swap'];
|
|
230032
|
+
for (let i = 0; i < types.length; i++) {
|
|
230033
|
+
const type = types[i];
|
|
230034
|
+
const url = this.urls['api']['ws'][type] + '?listenKey=' + listenKey;
|
|
230035
|
+
const client = this.client(url);
|
|
230036
|
+
const messageHashes = Object.keys(client.futures);
|
|
230037
|
+
for (let j = 0; j < messageHashes.length; j++) {
|
|
230038
|
+
const messageHash = messageHashes[j];
|
|
230039
|
+
client.reject(error, messageHash);
|
|
230040
|
+
}
|
|
230041
|
+
}
|
|
230042
|
+
this.options['listenKey'] = undefined;
|
|
230043
|
+
this.options['lastAuthenticatedTime'] = 0;
|
|
230044
|
+
return;
|
|
230045
|
+
}
|
|
230046
|
+
// whether or not to schedule another listenKey keepAlive request
|
|
230047
|
+
const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 3600000);
|
|
230048
|
+
this.delay(listenKeyRefreshRate, this.keepAliveListenKey, params);
|
|
230049
|
+
}
|
|
230050
|
+
async authenticate(params = {}) {
|
|
230051
|
+
const time = this.milliseconds();
|
|
227808
230052
|
const lastAuthenticatedTime = this.safeInteger(this.options, 'lastAuthenticatedTime', 0);
|
|
227809
230053
|
const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 3600000); // 1 hour
|
|
227810
230054
|
if (time - lastAuthenticatedTime > listenKeyRefreshRate) {
|
|
227811
|
-
const response = await this.
|
|
230055
|
+
const response = await this.userAuthPrivatePostUserDataStream();
|
|
227812
230056
|
this.options['listenKey'] = this.safeString(response, 'listenKey');
|
|
227813
230057
|
this.options['lastAuthenticatedTime'] = time;
|
|
230058
|
+
this.delay(listenKeyRefreshRate, this.keepAliveListenKey, params);
|
|
227814
230059
|
}
|
|
227815
230060
|
}
|
|
227816
230061
|
async pong(client, message) {
|
|
@@ -242613,6 +244858,660 @@ class coinbase extends _coinbase_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
|
|
|
242613
244858
|
}
|
|
242614
244859
|
|
|
242615
244860
|
|
|
244861
|
+
/***/ }),
|
|
244862
|
+
|
|
244863
|
+
/***/ 6541:
|
|
244864
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
244865
|
+
|
|
244866
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
244867
|
+
/* harmony export */ Z: () => (/* binding */ coinbaseinternational)
|
|
244868
|
+
/* harmony export */ });
|
|
244869
|
+
/* harmony import */ var _coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(9339);
|
|
244870
|
+
/* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6689);
|
|
244871
|
+
/* harmony import */ var _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1372);
|
|
244872
|
+
/* harmony import */ var _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3020);
|
|
244873
|
+
// ---------------------------------------------------------------------------
|
|
244874
|
+
|
|
244875
|
+
|
|
244876
|
+
|
|
244877
|
+
|
|
244878
|
+
// ---------------------------------------------------------------------------
|
|
244879
|
+
class coinbaseinternational extends _coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
244880
|
+
describe() {
|
|
244881
|
+
return this.deepExtend(super.describe(), {
|
|
244882
|
+
'has': {
|
|
244883
|
+
'ws': true,
|
|
244884
|
+
'watchTrades': true,
|
|
244885
|
+
'watchTradesForSymbols': true,
|
|
244886
|
+
'watchOrderBook': true,
|
|
244887
|
+
'watchOrderBookForSymbols': true,
|
|
244888
|
+
'watchTicker': true,
|
|
244889
|
+
'watchBalance': false,
|
|
244890
|
+
'watchMyTrades': false,
|
|
244891
|
+
'watchOHLCV': false,
|
|
244892
|
+
'watchOHLCVForSymbols': false,
|
|
244893
|
+
'watchOrders': false,
|
|
244894
|
+
'watchOrdersForSymbols': false,
|
|
244895
|
+
'watchPositions': false,
|
|
244896
|
+
'watchTickers': false,
|
|
244897
|
+
'createOrderWs': false,
|
|
244898
|
+
'editOrderWs': false,
|
|
244899
|
+
'cancelOrderWs': false,
|
|
244900
|
+
'cancelOrdersWs': false,
|
|
244901
|
+
'cancelAllOrdersWs': false,
|
|
244902
|
+
'fetchOrderWs': false,
|
|
244903
|
+
'fetchOrdersWs': false,
|
|
244904
|
+
'fetchBalanceWs': false,
|
|
244905
|
+
'fetchMyTradesWs': false,
|
|
244906
|
+
},
|
|
244907
|
+
'urls': {
|
|
244908
|
+
'api': {
|
|
244909
|
+
'ws': 'wss://ws-md.international.coinbase.com',
|
|
244910
|
+
},
|
|
244911
|
+
'test': {
|
|
244912
|
+
'ws': 'wss://ws-md.n5e2.coinbase.com',
|
|
244913
|
+
},
|
|
244914
|
+
},
|
|
244915
|
+
'options': {
|
|
244916
|
+
'watchTicker': {
|
|
244917
|
+
'channel': 'LEVEL1', // 'INSTRUMENTS' or 'RISK'
|
|
244918
|
+
},
|
|
244919
|
+
'tradesLimit': 1000,
|
|
244920
|
+
'ordersLimit': 1000,
|
|
244921
|
+
'myTradesLimit': 1000,
|
|
244922
|
+
},
|
|
244923
|
+
'errors': {
|
|
244924
|
+
'exact': {
|
|
244925
|
+
'Unable to authenticate': _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.AuthenticationError,
|
|
244926
|
+
},
|
|
244927
|
+
},
|
|
244928
|
+
});
|
|
244929
|
+
}
|
|
244930
|
+
async subscribe(name, symbols = undefined, params = {}) {
|
|
244931
|
+
/**
|
|
244932
|
+
* @ignore
|
|
244933
|
+
* @method
|
|
244934
|
+
* @description subscribes to a websocket channel
|
|
244935
|
+
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
|
|
244936
|
+
* @param {string} name the name of the channel
|
|
244937
|
+
* @param {string[]} [symbols] unified market symbol
|
|
244938
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
244939
|
+
* @returns {object} subscription to a websocket channel
|
|
244940
|
+
*/
|
|
244941
|
+
this.checkRequiredCredentials();
|
|
244942
|
+
let market = undefined;
|
|
244943
|
+
let messageHash = name;
|
|
244944
|
+
let productIds = [];
|
|
244945
|
+
if (symbols === undefined) {
|
|
244946
|
+
symbols = this.symbols;
|
|
244947
|
+
}
|
|
244948
|
+
const symbolsLength = symbols.length;
|
|
244949
|
+
if (symbolsLength > 1) {
|
|
244950
|
+
const parsedSymbols = this.marketSymbols(symbols);
|
|
244951
|
+
const marketIds = this.marketIds(parsedSymbols);
|
|
244952
|
+
productIds = marketIds;
|
|
244953
|
+
messageHash = messageHash + '::' + parsedSymbols.join(',');
|
|
244954
|
+
}
|
|
244955
|
+
else if (symbolsLength === 1) {
|
|
244956
|
+
market = this.market(symbols[0]);
|
|
244957
|
+
messageHash = name + '::' + market['symbol'];
|
|
244958
|
+
productIds = [market['id']];
|
|
244959
|
+
}
|
|
244960
|
+
const url = this.urls['api']['ws'];
|
|
244961
|
+
if (url === undefined) {
|
|
244962
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.NotSupported(this.id + ' is not supported in sandbox environment');
|
|
244963
|
+
}
|
|
244964
|
+
const timestamp = this.nonce().toString();
|
|
244965
|
+
const auth = timestamp + this.apiKey + 'CBINTLMD' + this.password;
|
|
244966
|
+
const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_2__/* .sha256 */ .J, 'base64');
|
|
244967
|
+
const subscribe = {
|
|
244968
|
+
'type': 'SUBSCRIBE',
|
|
244969
|
+
'product_ids': productIds,
|
|
244970
|
+
'channels': [name],
|
|
244971
|
+
'time': timestamp,
|
|
244972
|
+
'key': this.apiKey,
|
|
244973
|
+
'passphrase': this.password,
|
|
244974
|
+
'signature': signature,
|
|
244975
|
+
};
|
|
244976
|
+
return await this.watch(url, messageHash, this.extend(subscribe, params), messageHash);
|
|
244977
|
+
}
|
|
244978
|
+
async subscribeMultiple(name, symbols = undefined, params = {}) {
|
|
244979
|
+
/**
|
|
244980
|
+
* @ignore
|
|
244981
|
+
* @method
|
|
244982
|
+
* @description subscribes to a websocket channel using watchMultiple
|
|
244983
|
+
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
|
|
244984
|
+
* @param {string} name the name of the channel
|
|
244985
|
+
* @param {string|string[]} [symbol] unified market symbol
|
|
244986
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
244987
|
+
* @returns {object} subscription to a websocket channel
|
|
244988
|
+
*/
|
|
244989
|
+
this.checkRequiredCredentials();
|
|
244990
|
+
if (this.isEmpty(symbols)) {
|
|
244991
|
+
symbols = this.symbols;
|
|
244992
|
+
}
|
|
244993
|
+
else {
|
|
244994
|
+
symbols = this.marketSymbols(symbols);
|
|
244995
|
+
}
|
|
244996
|
+
const messageHashes = [];
|
|
244997
|
+
const productIds = [];
|
|
244998
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
244999
|
+
const marketId = this.marketId(symbols[i]);
|
|
245000
|
+
const symbol = this.symbol(marketId);
|
|
245001
|
+
productIds.push(marketId);
|
|
245002
|
+
messageHashes.push(name + '::' + symbol);
|
|
245003
|
+
}
|
|
245004
|
+
const url = this.urls['api']['ws'];
|
|
245005
|
+
if (url === undefined) {
|
|
245006
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.NotSupported(this.id + ' is not supported in sandbox environment');
|
|
245007
|
+
}
|
|
245008
|
+
const timestamp = this.numberToString(this.seconds());
|
|
245009
|
+
const auth = timestamp + this.apiKey + 'CBINTLMD' + this.password;
|
|
245010
|
+
const signature = this.hmac(this.encode(auth), this.base64ToBinary(this.secret), _static_dependencies_noble_hashes_sha256_js__WEBPACK_IMPORTED_MODULE_2__/* .sha256 */ .J, 'base64');
|
|
245011
|
+
const subscribe = {
|
|
245012
|
+
'type': 'SUBSCRIBE',
|
|
245013
|
+
'time': timestamp,
|
|
245014
|
+
'product_ids': productIds,
|
|
245015
|
+
'channels': [name],
|
|
245016
|
+
'key': this.apiKey,
|
|
245017
|
+
'passphrase': this.password,
|
|
245018
|
+
'signature': signature,
|
|
245019
|
+
};
|
|
245020
|
+
return await this.watchMultiple(url, messageHashes, this.extend(subscribe, params), messageHashes);
|
|
245021
|
+
}
|
|
245022
|
+
async watchFundingRate(symbol, params = {}) {
|
|
245023
|
+
/**
|
|
245024
|
+
* @method
|
|
245025
|
+
* @name coinbaseinternational#watchFundingRate
|
|
245026
|
+
* @description watch the current funding rate
|
|
245027
|
+
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
|
|
245028
|
+
* @param {string} symbol unified market symbol
|
|
245029
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
245030
|
+
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
245031
|
+
*/
|
|
245032
|
+
return await this.subscribe('RISK', [symbol], params);
|
|
245033
|
+
}
|
|
245034
|
+
async watchFundingRates(symbols, params = {}) {
|
|
245035
|
+
/**
|
|
245036
|
+
* @method
|
|
245037
|
+
* @name coinbaseinternational#watchFundingRates
|
|
245038
|
+
* @description watch the funding rate for multiple markets
|
|
245039
|
+
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
|
|
245040
|
+
* @param {string[]|undefined} symbols list of unified market symbols
|
|
245041
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
245042
|
+
* @returns {object} a dictionary of [funding rates structures]{@link https://docs.ccxt.com/#/?id=funding-rates-structure}, indexe by market symbols
|
|
245043
|
+
*/
|
|
245044
|
+
return await this.subscribeMultiple('RISK', symbols, params);
|
|
245045
|
+
}
|
|
245046
|
+
async watchTicker(symbol, params = {}) {
|
|
245047
|
+
/**
|
|
245048
|
+
* @method
|
|
245049
|
+
* @name coinbaseinternational#watchTicker
|
|
245050
|
+
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
245051
|
+
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
|
|
245052
|
+
* @param {string} [symbol] unified symbol of the market to fetch the ticker for
|
|
245053
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
245054
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
245055
|
+
*/
|
|
245056
|
+
let channel = undefined;
|
|
245057
|
+
[channel, params] = this.handleOptionAndParams(params, 'watchTicker', 'channel', 'LEVEL1');
|
|
245058
|
+
return await this.subscribe(channel, [symbol], params);
|
|
245059
|
+
}
|
|
245060
|
+
handleInstrument(client, message) {
|
|
245061
|
+
//
|
|
245062
|
+
// {
|
|
245063
|
+
// "sequence": 1,
|
|
245064
|
+
// "product_id": "ETH-PERP",
|
|
245065
|
+
// "instrument_type": "PERP",
|
|
245066
|
+
// "base_asset_name": "ETH",
|
|
245067
|
+
// "quote_asset_name": "USDC",
|
|
245068
|
+
// "base_increment": "0.0001",
|
|
245069
|
+
// "quote_increment": "0.01",
|
|
245070
|
+
// "avg_daily_quantity": "43.0",
|
|
245071
|
+
// "avg_daily_volume": "80245.2",
|
|
245072
|
+
// "total_30_day_quantity":"1443.0",
|
|
245073
|
+
// "total_30_day_volume":"3040449.0",
|
|
245074
|
+
// "total_24_hour_quantity":"48.1",
|
|
245075
|
+
// "total_24_hour_volume":"101348.3",
|
|
245076
|
+
// "base_imf": "0.2",
|
|
245077
|
+
// "min_quantity": "0.0001",
|
|
245078
|
+
// "position_size_limit": "500",
|
|
245079
|
+
// "funding_interval": "60000000000",
|
|
245080
|
+
// "trading_state": "trading",
|
|
245081
|
+
// "last_update_time": "2023-05-04T11:16:33.016Z",
|
|
245082
|
+
// "time": "2023-05-10T14:58:47.000Z",
|
|
245083
|
+
// "channel":"INSTRUMENTS",
|
|
245084
|
+
// "type":"SNAPSHOT"
|
|
245085
|
+
// }
|
|
245086
|
+
const ticker = this.parseWsInstrument(message);
|
|
245087
|
+
const channel = this.safeString(message, 'channel');
|
|
245088
|
+
client.resolve(ticker, channel);
|
|
245089
|
+
client.resolve(ticker, channel + '::' + ticker['symbol']);
|
|
245090
|
+
}
|
|
245091
|
+
parseWsInstrument(ticker, market = undefined) {
|
|
245092
|
+
//
|
|
245093
|
+
// {
|
|
245094
|
+
// "sequence": 1,
|
|
245095
|
+
// "product_id": "ETH-PERP",
|
|
245096
|
+
// "instrument_type": "PERP",
|
|
245097
|
+
// "base_asset_name": "ETH",
|
|
245098
|
+
// "quote_asset_name": "USDC",
|
|
245099
|
+
// "base_increment": "0.0001",
|
|
245100
|
+
// "quote_increment": "0.01",
|
|
245101
|
+
// "avg_daily_quantity": "43.0",
|
|
245102
|
+
// "avg_daily_volume": "80245.2",
|
|
245103
|
+
// "total_30_day_quantity":"1443.0",
|
|
245104
|
+
// "total_30_day_volume":"3040449.0",
|
|
245105
|
+
// "total_24_hour_quantity":"48.1",
|
|
245106
|
+
// "total_24_hour_volume":"101348.3",
|
|
245107
|
+
// "base_imf": "0.2",
|
|
245108
|
+
// "min_quantity": "0.0001",
|
|
245109
|
+
// "position_size_limit": "500",
|
|
245110
|
+
// "funding_interval": "60000000000",
|
|
245111
|
+
// "trading_state": "trading",
|
|
245112
|
+
// "last_update_time": "2023-05-04T11:16:33.016Z",
|
|
245113
|
+
// "time": "2023-05-10T14:58:47.000Z",
|
|
245114
|
+
// "channel":"INSTRUMENTS",
|
|
245115
|
+
// "type":"SNAPSHOT"
|
|
245116
|
+
// }
|
|
245117
|
+
//
|
|
245118
|
+
const marketId = this.safeString(ticker, 'product_id');
|
|
245119
|
+
const datetime = this.safeString(ticker, 'time');
|
|
245120
|
+
return this.safeTicker({
|
|
245121
|
+
'info': ticker,
|
|
245122
|
+
'symbol': this.safeSymbol(marketId, market, '-'),
|
|
245123
|
+
'timestamp': this.parse8601(datetime),
|
|
245124
|
+
'datetime': datetime,
|
|
245125
|
+
'high': undefined,
|
|
245126
|
+
'low': undefined,
|
|
245127
|
+
'bid': undefined,
|
|
245128
|
+
'bidVolume': undefined,
|
|
245129
|
+
'ask': undefined,
|
|
245130
|
+
'askVolume': undefined,
|
|
245131
|
+
'vwap': undefined,
|
|
245132
|
+
'open': undefined,
|
|
245133
|
+
'close': undefined,
|
|
245134
|
+
'last': undefined,
|
|
245135
|
+
'previousClose': undefined,
|
|
245136
|
+
'change': undefined,
|
|
245137
|
+
'percentage': undefined,
|
|
245138
|
+
'average': undefined,
|
|
245139
|
+
'baseVolume': this.safeString(ticker, 'total_24_hour_quantity'),
|
|
245140
|
+
'quoteVolume': this.safeString(ticker, 'total_24_hour_volume'),
|
|
245141
|
+
});
|
|
245142
|
+
}
|
|
245143
|
+
handleTicker(client, message) {
|
|
245144
|
+
//
|
|
245145
|
+
// snapshot
|
|
245146
|
+
// {
|
|
245147
|
+
// "sequence": 0,
|
|
245148
|
+
// "product_id": "BTC-PERP",
|
|
245149
|
+
// "time": "2023-05-10T14:58:47.000Z",
|
|
245150
|
+
// "bid_price": "28787.8",
|
|
245151
|
+
// "bid_qty": "0.466", // One side book
|
|
245152
|
+
// "channel": "LEVEL1",
|
|
245153
|
+
// "type": "SNAPSHOT"
|
|
245154
|
+
// }
|
|
245155
|
+
// update
|
|
245156
|
+
// {
|
|
245157
|
+
// "sequence": 1,
|
|
245158
|
+
// "product_id": "BTC-PERP",
|
|
245159
|
+
// "time": "2023-05-10T14:58:47.547Z",
|
|
245160
|
+
// "bid_price": "28787.8",
|
|
245161
|
+
// "bid_qty": "0.466",
|
|
245162
|
+
// "ask_price": "28788.8",
|
|
245163
|
+
// "ask_qty": "1.566",
|
|
245164
|
+
// "channel": "LEVEL1",
|
|
245165
|
+
// "type": "UPDATE"
|
|
245166
|
+
// }
|
|
245167
|
+
//
|
|
245168
|
+
const ticker = this.parseWsTicker(message);
|
|
245169
|
+
const channel = this.safeString(message, 'channel');
|
|
245170
|
+
client.resolve(ticker, channel);
|
|
245171
|
+
client.resolve(ticker, channel + '::' + ticker['symbol']);
|
|
245172
|
+
}
|
|
245173
|
+
parseWsTicker(ticker, market = undefined) {
|
|
245174
|
+
//
|
|
245175
|
+
// {
|
|
245176
|
+
// "sequence": 1,
|
|
245177
|
+
// "product_id": "BTC-PERP",
|
|
245178
|
+
// "time": "2023-05-10T14:58:47.547Z",
|
|
245179
|
+
// "bid_price": "28787.8",
|
|
245180
|
+
// "bid_qty": "0.466",
|
|
245181
|
+
// "ask_price": "28788.8",
|
|
245182
|
+
// "ask_qty": "1.566",
|
|
245183
|
+
// "channel": "LEVEL1",
|
|
245184
|
+
// "type": "UPDATE"
|
|
245185
|
+
// }
|
|
245186
|
+
//
|
|
245187
|
+
const datetime = this.safeString(ticker, 'time');
|
|
245188
|
+
const marketId = this.safeString(ticker, 'product_id');
|
|
245189
|
+
return this.safeTicker({
|
|
245190
|
+
'info': ticker,
|
|
245191
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
245192
|
+
'timestamp': this.parse8601(datetime),
|
|
245193
|
+
'datetime': datetime,
|
|
245194
|
+
'bid': this.safeNumber(ticker, 'bid_price'),
|
|
245195
|
+
'bidVolume': this.safeNumber(ticker, 'bid_qty'),
|
|
245196
|
+
'ask': this.safeNumber(ticker, 'ask_price'),
|
|
245197
|
+
'askVolume': this.safeNumber(ticker, 'ask_qty'),
|
|
245198
|
+
'high': undefined,
|
|
245199
|
+
'low': undefined,
|
|
245200
|
+
'open': undefined,
|
|
245201
|
+
'close': undefined,
|
|
245202
|
+
'last': undefined,
|
|
245203
|
+
'change': undefined,
|
|
245204
|
+
'percentage': undefined,
|
|
245205
|
+
'average': undefined,
|
|
245206
|
+
'vwap': undefined,
|
|
245207
|
+
'baseVolume': undefined,
|
|
245208
|
+
'quoteVolume': undefined,
|
|
245209
|
+
'previousClose': undefined,
|
|
245210
|
+
});
|
|
245211
|
+
}
|
|
245212
|
+
async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
245213
|
+
/**
|
|
245214
|
+
* @method
|
|
245215
|
+
* @name coinbaseinternational#watchTrades
|
|
245216
|
+
* @description get the list of most recent trades for a particular symbol
|
|
245217
|
+
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
|
|
245218
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
245219
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
245220
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
245221
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
245222
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
245223
|
+
*/
|
|
245224
|
+
return await this.watchTradesForSymbols([symbol], since, limit, params);
|
|
245225
|
+
}
|
|
245226
|
+
async watchTradesForSymbols(symbols, since = undefined, limit = undefined, params = {}) {
|
|
245227
|
+
/**
|
|
245228
|
+
* @method
|
|
245229
|
+
* @name coinbaseinternational#watchTradesForSymbols
|
|
245230
|
+
* @description get the list of most recent trades for a list of symbols
|
|
245231
|
+
* @param {string[]} symbols unified symbol of the market to fetch trades for
|
|
245232
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
245233
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
245234
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
245235
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
245236
|
+
*/
|
|
245237
|
+
await this.loadMarkets();
|
|
245238
|
+
symbols = this.marketSymbols(symbols, undefined, false, true, true);
|
|
245239
|
+
const trades = await this.subscribeMultiple('MATCH', symbols, params);
|
|
245240
|
+
if (this.newUpdates) {
|
|
245241
|
+
const first = this.safeDict(trades, 0);
|
|
245242
|
+
const tradeSymbol = this.safeString(first, 'symbol');
|
|
245243
|
+
limit = trades.getLimit(tradeSymbol, limit);
|
|
245244
|
+
}
|
|
245245
|
+
return this.filterBySinceLimit(trades, since, limit, 'timestamp', true);
|
|
245246
|
+
}
|
|
245247
|
+
handleTrade(client, message) {
|
|
245248
|
+
//
|
|
245249
|
+
// {
|
|
245250
|
+
// "sequence": 0,
|
|
245251
|
+
// "product_id": "BTC-PERP",
|
|
245252
|
+
// "time": "2023-05-10T14:58:47.002Z",
|
|
245253
|
+
// "match_id": "177101110052388865",
|
|
245254
|
+
// "trade_qty": "0.006",
|
|
245255
|
+
// "aggressor_side": "BUY",
|
|
245256
|
+
// "trade_price": "28833.1",
|
|
245257
|
+
// "channel": "MATCH",
|
|
245258
|
+
// "type": "UPDATE"
|
|
245259
|
+
// }
|
|
245260
|
+
//
|
|
245261
|
+
const trade = this.parseWsTrade(message);
|
|
245262
|
+
const symbol = trade['symbol'];
|
|
245263
|
+
const channel = this.safeString(message, 'channel');
|
|
245264
|
+
if (!(symbol in this.trades)) {
|
|
245265
|
+
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
245266
|
+
const tradesArrayCache = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_3__/* .ArrayCache */ .ZL(limit);
|
|
245267
|
+
this.trades[symbol] = tradesArrayCache;
|
|
245268
|
+
}
|
|
245269
|
+
const tradesArray = this.trades[symbol];
|
|
245270
|
+
tradesArray.append(trade);
|
|
245271
|
+
this.trades[symbol] = tradesArray;
|
|
245272
|
+
client.resolve(tradesArray, channel);
|
|
245273
|
+
client.resolve(tradesArray, channel + '::' + trade['symbol']);
|
|
245274
|
+
return message;
|
|
245275
|
+
}
|
|
245276
|
+
parseWsTrade(trade, market = undefined) {
|
|
245277
|
+
//
|
|
245278
|
+
// {
|
|
245279
|
+
// "sequence": 0,
|
|
245280
|
+
// "product_id": "BTC-PERP",
|
|
245281
|
+
// "time": "2023-05-10T14:58:47.002Z",
|
|
245282
|
+
// "match_id": "177101110052388865",
|
|
245283
|
+
// "trade_qty": "0.006",
|
|
245284
|
+
// "aggressor_side": "BUY",
|
|
245285
|
+
// "trade_price": "28833.1",
|
|
245286
|
+
// "channel": "MATCH",
|
|
245287
|
+
// "type": "UPDATE"
|
|
245288
|
+
// }
|
|
245289
|
+
const marketId = this.safeString2(trade, 'symbol', 'product_id');
|
|
245290
|
+
const datetime = this.safeString(trade, 'time');
|
|
245291
|
+
return this.safeTrade({
|
|
245292
|
+
'info': trade,
|
|
245293
|
+
'id': this.safeString(trade, 'match_id'),
|
|
245294
|
+
'order': undefined,
|
|
245295
|
+
'timestamp': this.parse8601(datetime),
|
|
245296
|
+
'datetime': datetime,
|
|
245297
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
245298
|
+
'type': undefined,
|
|
245299
|
+
'side': this.safeStringLower(trade, 'agressor_side'),
|
|
245300
|
+
'takerOrMaker': undefined,
|
|
245301
|
+
'price': this.safeString(trade, 'trade_price'),
|
|
245302
|
+
'amount': this.safeString(trade, 'trade_qty'),
|
|
245303
|
+
'cost': undefined,
|
|
245304
|
+
'fee': undefined,
|
|
245305
|
+
});
|
|
245306
|
+
}
|
|
245307
|
+
async watchOrderBook(symbol, limit = undefined, params = {}) {
|
|
245308
|
+
/**
|
|
245309
|
+
* @method
|
|
245310
|
+
* @name coinbaseinternational#watchOrderBook
|
|
245311
|
+
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
245312
|
+
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
|
|
245313
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
245314
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
245315
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
245316
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
245317
|
+
*/
|
|
245318
|
+
return await this.watchOrderBookForSymbols([symbol], limit, params);
|
|
245319
|
+
}
|
|
245320
|
+
async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
|
|
245321
|
+
/**
|
|
245322
|
+
* @method
|
|
245323
|
+
* @name coinbaseinternational#watchOrderBook
|
|
245324
|
+
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
245325
|
+
* @see https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
|
|
245326
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
245327
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
245328
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
245329
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
245330
|
+
*/
|
|
245331
|
+
await this.loadMarkets();
|
|
245332
|
+
return await this.subscribeMultiple('LEVEL2', symbols, params);
|
|
245333
|
+
}
|
|
245334
|
+
handleOrderBook(client, message) {
|
|
245335
|
+
//
|
|
245336
|
+
// snapshot
|
|
245337
|
+
// {
|
|
245338
|
+
// "sequence": 0,
|
|
245339
|
+
// "product_id": "BTC-PERP",
|
|
245340
|
+
// "time": "2023-05-10T14:58:47.000Z",
|
|
245341
|
+
// "bids": [
|
|
245342
|
+
// ["29100", "0.02"],
|
|
245343
|
+
// ["28950", "0.01"],
|
|
245344
|
+
// ["28900", "0.01"]
|
|
245345
|
+
// ],
|
|
245346
|
+
// "asks": [
|
|
245347
|
+
// ["29267.8", "18"],
|
|
245348
|
+
// ["29747.6", "18"],
|
|
245349
|
+
// ["30227.4", "9"]
|
|
245350
|
+
// ],
|
|
245351
|
+
// "channel": "LEVEL2",
|
|
245352
|
+
// "type": "SNAPSHOT",
|
|
245353
|
+
// }
|
|
245354
|
+
// update
|
|
245355
|
+
// {
|
|
245356
|
+
// "sequence": 1,
|
|
245357
|
+
// "product_id": "BTC-PERP",
|
|
245358
|
+
// "time": "2023-05-10T14:58:47.375Z",
|
|
245359
|
+
// "changes": [
|
|
245360
|
+
// [
|
|
245361
|
+
// "BUY",
|
|
245362
|
+
// "28787.7",
|
|
245363
|
+
// "6"
|
|
245364
|
+
// ]
|
|
245365
|
+
// ],
|
|
245366
|
+
// "channel": "LEVEL2",
|
|
245367
|
+
// "type": "UPDATE"
|
|
245368
|
+
// }
|
|
245369
|
+
//
|
|
245370
|
+
const type = this.safeString(message, 'type');
|
|
245371
|
+
const marketId = this.safeString(message, 'product_id');
|
|
245372
|
+
const symbol = this.safeSymbol(marketId);
|
|
245373
|
+
const datetime = this.safeString(message, 'time');
|
|
245374
|
+
const channel = this.safeString(message, 'channel');
|
|
245375
|
+
if (!(symbol in this.orderbooks)) {
|
|
245376
|
+
const limit = this.safeInteger(this.options, 'watchOrderBookLimit', 1000);
|
|
245377
|
+
this.orderbooks[symbol] = this.orderBook({}, limit);
|
|
245378
|
+
}
|
|
245379
|
+
const orderbook = this.orderbooks[symbol];
|
|
245380
|
+
if (type === 'SNAPSHOT') {
|
|
245381
|
+
const parsedSnapshot = this.parseOrderBook(message, symbol, undefined, 'bids', 'asks');
|
|
245382
|
+
orderbook.reset(parsedSnapshot);
|
|
245383
|
+
orderbook['symbol'] = symbol;
|
|
245384
|
+
}
|
|
245385
|
+
else {
|
|
245386
|
+
const changes = this.safeList(message, 'changes', []);
|
|
245387
|
+
this.handleDeltas(orderbook, changes);
|
|
245388
|
+
}
|
|
245389
|
+
orderbook['nonce'] = this.safeInteger(message, 'sequence');
|
|
245390
|
+
orderbook['datetime'] = datetime;
|
|
245391
|
+
orderbook['timestamp'] = this.parse8601(datetime);
|
|
245392
|
+
this.orderbooks[symbol] = orderbook;
|
|
245393
|
+
client.resolve(orderbook, channel + '::' + symbol);
|
|
245394
|
+
}
|
|
245395
|
+
handleDelta(orderbook, delta) {
|
|
245396
|
+
const rawSide = this.safeStringLower(delta, 0);
|
|
245397
|
+
const side = (rawSide === 'buy') ? 'bids' : 'asks';
|
|
245398
|
+
const price = this.safeFloat(delta, 1);
|
|
245399
|
+
const amount = this.safeFloat(delta, 2);
|
|
245400
|
+
const bookside = orderbook[side];
|
|
245401
|
+
bookside.store(price, amount);
|
|
245402
|
+
}
|
|
245403
|
+
handleDeltas(orderbook, deltas) {
|
|
245404
|
+
for (let i = 0; i < deltas.length; i++) {
|
|
245405
|
+
this.handleDelta(orderbook, deltas[i]);
|
|
245406
|
+
}
|
|
245407
|
+
}
|
|
245408
|
+
handleSubscriptionStatus(client, message) {
|
|
245409
|
+
//
|
|
245410
|
+
// {
|
|
245411
|
+
// "channels": [
|
|
245412
|
+
// {
|
|
245413
|
+
// "name": "MATCH",
|
|
245414
|
+
// "product_ids": [
|
|
245415
|
+
// "BTC-PERP",
|
|
245416
|
+
// "ETH-PERP"
|
|
245417
|
+
// ]
|
|
245418
|
+
// },
|
|
245419
|
+
// {
|
|
245420
|
+
// "name": "INSTRUMENTS",
|
|
245421
|
+
// "product_ids": [
|
|
245422
|
+
// "BTC-PERP",
|
|
245423
|
+
// "ETH-PERP"
|
|
245424
|
+
// ]
|
|
245425
|
+
// }
|
|
245426
|
+
// ],
|
|
245427
|
+
// "authenticated": true,
|
|
245428
|
+
// "channel": "SUBSCRIPTIONS",
|
|
245429
|
+
// "type": "SNAPSHOT",
|
|
245430
|
+
// "time": "2023-05-30T16:53:46.847Z"
|
|
245431
|
+
// }
|
|
245432
|
+
//
|
|
245433
|
+
return message;
|
|
245434
|
+
}
|
|
245435
|
+
handleFundingRate(client, message) {
|
|
245436
|
+
//
|
|
245437
|
+
// snapshot
|
|
245438
|
+
// {
|
|
245439
|
+
// "sequence": 0,
|
|
245440
|
+
// "product_id": "BTC-PERP",
|
|
245441
|
+
// "time": "2023-05-10T14:58:47.000Z",
|
|
245442
|
+
// "funding_rate": "0.001387",
|
|
245443
|
+
// "is_final": true,
|
|
245444
|
+
// "channel": "FUNDING",
|
|
245445
|
+
// "type": "SNAPSHOT"
|
|
245446
|
+
// }
|
|
245447
|
+
// update
|
|
245448
|
+
// {
|
|
245449
|
+
// "sequence": 1,
|
|
245450
|
+
// "product_id": "BTC-PERP",
|
|
245451
|
+
// "time": "2023-05-10T15:00:00.000Z",
|
|
245452
|
+
// "funding_rate": "0.001487",
|
|
245453
|
+
// "is_final": false,
|
|
245454
|
+
// "channel": "FUNDING",
|
|
245455
|
+
// "type": "UPDATE"
|
|
245456
|
+
// }
|
|
245457
|
+
//
|
|
245458
|
+
const channel = this.safeString(message, 'channel');
|
|
245459
|
+
const fundingRate = this.parseFundingRate(message);
|
|
245460
|
+
client.resolve(fundingRate, channel + '::' + fundingRate['symbol']);
|
|
245461
|
+
}
|
|
245462
|
+
handleErrorMessage(client, message) {
|
|
245463
|
+
//
|
|
245464
|
+
// {
|
|
245465
|
+
// message: 'Failed to subscribe',
|
|
245466
|
+
// reason: 'Unable to authenticate',
|
|
245467
|
+
// channel: 'SUBSCRIPTIONS',
|
|
245468
|
+
// type: 'REJECT'
|
|
245469
|
+
// }
|
|
245470
|
+
//
|
|
245471
|
+
const type = this.safeString(message, 'type');
|
|
245472
|
+
if (type !== 'REJECT') {
|
|
245473
|
+
return false;
|
|
245474
|
+
}
|
|
245475
|
+
const reason = this.safeString(message, 'reason');
|
|
245476
|
+
const errMsg = this.safeString(message, 'message');
|
|
245477
|
+
try {
|
|
245478
|
+
const feedback = this.id + ' ' + errMsg + reason;
|
|
245479
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], reason, feedback);
|
|
245480
|
+
this.throwBroadlyMatchedException(this.exceptions['broad'], reason, feedback);
|
|
245481
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ExchangeError(feedback);
|
|
245482
|
+
}
|
|
245483
|
+
catch (e) {
|
|
245484
|
+
client.reject(e);
|
|
245485
|
+
}
|
|
245486
|
+
return true;
|
|
245487
|
+
}
|
|
245488
|
+
handleMessage(client, message) {
|
|
245489
|
+
if (this.handleErrorMessage(client, message)) {
|
|
245490
|
+
return;
|
|
245491
|
+
}
|
|
245492
|
+
const channel = this.safeString(message, 'channel');
|
|
245493
|
+
const methods = {
|
|
245494
|
+
'SUBSCRIPTIONS': this.handleSubscriptionStatus,
|
|
245495
|
+
'INSTRUMENTS': this.handleInstrument,
|
|
245496
|
+
'LEVEL1': this.handleTicker,
|
|
245497
|
+
'MATCH': this.handleTrade,
|
|
245498
|
+
'LEVEL2': this.handleOrderBook,
|
|
245499
|
+
'FUNDING': this.handleFundingRate,
|
|
245500
|
+
'RISK': this.handleTicker,
|
|
245501
|
+
};
|
|
245502
|
+
const type = this.safeString(message, 'type');
|
|
245503
|
+
if (type === 'error') {
|
|
245504
|
+
const errorMessage = this.safeString(message, 'message');
|
|
245505
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ExchangeError(errorMessage);
|
|
245506
|
+
}
|
|
245507
|
+
const method = this.safeValue(methods, channel);
|
|
245508
|
+
if (method !== undefined) {
|
|
245509
|
+
method.call(this, client, message);
|
|
245510
|
+
}
|
|
245511
|
+
}
|
|
245512
|
+
}
|
|
245513
|
+
|
|
245514
|
+
|
|
242616
245515
|
/***/ }),
|
|
242617
245516
|
|
|
242618
245517
|
/***/ 8368:
|
|
@@ -251134,7 +254033,10 @@ class hitbtc extends _hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
251134
254033
|
// }
|
|
251135
254034
|
// }
|
|
251136
254035
|
//
|
|
251137
|
-
const
|
|
254036
|
+
const snapshot = this.safeDict(message, 'snapshot');
|
|
254037
|
+
const update = this.safeDict(message, 'update');
|
|
254038
|
+
const data = snapshot ? snapshot : update;
|
|
254039
|
+
const type = snapshot ? 'snapshot' : 'update';
|
|
251138
254040
|
const marketIds = Object.keys(data);
|
|
251139
254041
|
for (let i = 0; i < marketIds.length; i++) {
|
|
251140
254042
|
const marketId = marketIds[i];
|
|
@@ -251143,17 +254045,23 @@ class hitbtc extends _hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
|
|
|
251143
254045
|
const item = data[marketId];
|
|
251144
254046
|
const messageHash = 'orderbooks::' + symbol;
|
|
251145
254047
|
if (!(symbol in this.orderbooks)) {
|
|
251146
|
-
const subscription = this.
|
|
254048
|
+
const subscription = this.safeDict(client.subscriptions, messageHash, {});
|
|
251147
254049
|
const limit = this.safeInteger(subscription, 'limit');
|
|
251148
254050
|
this.orderbooks[symbol] = this.orderBook({}, limit);
|
|
251149
254051
|
}
|
|
254052
|
+
const orderbook = this.orderbooks[symbol];
|
|
251150
254053
|
const timestamp = this.safeInteger(item, 't');
|
|
251151
254054
|
const nonce = this.safeInteger(item, 's');
|
|
251152
|
-
|
|
251153
|
-
|
|
251154
|
-
|
|
251155
|
-
|
|
251156
|
-
|
|
254055
|
+
if (type === 'snapshot') {
|
|
254056
|
+
const parsedSnapshot = this.parseOrderBook(item, symbol, timestamp, 'b', 'a');
|
|
254057
|
+
orderbook.reset(parsedSnapshot);
|
|
254058
|
+
}
|
|
254059
|
+
else {
|
|
254060
|
+
const asks = this.safeList(item, 'a', []);
|
|
254061
|
+
const bids = this.safeList(item, 'b', []);
|
|
254062
|
+
this.handleDeltas(orderbook['asks'], asks);
|
|
254063
|
+
this.handleDeltas(orderbook['bids'], bids);
|
|
254064
|
+
}
|
|
251157
254065
|
orderbook['timestamp'] = timestamp;
|
|
251158
254066
|
orderbook['datetime'] = this.iso8601(timestamp);
|
|
251159
254067
|
orderbook['nonce'] = nonce;
|
|
@@ -317537,39 +320445,39 @@ var __webpack_exports__ = {};
|
|
|
317537
320445
|
(() => {
|
|
317538
320446
|
__webpack_require__.r(__webpack_exports__);
|
|
317539
320447
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
317540
|
-
/* harmony export */ AccountNotEnabled: () => (/* reexport safe */
|
|
317541
|
-
/* harmony export */ AccountSuspended: () => (/* reexport safe */
|
|
317542
|
-
/* harmony export */ AddressPending: () => (/* reexport safe */
|
|
317543
|
-
/* harmony export */ ArgumentsRequired: () => (/* reexport safe */
|
|
317544
|
-
/* harmony export */ AuthenticationError: () => (/* reexport safe */
|
|
317545
|
-
/* harmony export */ BadRequest: () => (/* reexport safe */
|
|
317546
|
-
/* harmony export */ BadResponse: () => (/* reexport safe */
|
|
317547
|
-
/* harmony export */ BadSymbol: () => (/* reexport safe */
|
|
317548
|
-
/* harmony export */ BaseError: () => (/* reexport safe */
|
|
317549
|
-
/* harmony export */ CancelPending: () => (/* reexport safe */
|
|
317550
|
-
/* harmony export */ DDoSProtection: () => (/* reexport safe */
|
|
317551
|
-
/* harmony export */ DuplicateOrderId: () => (/* reexport safe */
|
|
320448
|
+
/* harmony export */ AccountNotEnabled: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AccountNotEnabled),
|
|
320449
|
+
/* harmony export */ AccountSuspended: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AccountSuspended),
|
|
320450
|
+
/* harmony export */ AddressPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AddressPending),
|
|
320451
|
+
/* harmony export */ ArgumentsRequired: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ArgumentsRequired),
|
|
320452
|
+
/* harmony export */ AuthenticationError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.AuthenticationError),
|
|
320453
|
+
/* harmony export */ BadRequest: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadRequest),
|
|
320454
|
+
/* harmony export */ BadResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadResponse),
|
|
320455
|
+
/* harmony export */ BadSymbol: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BadSymbol),
|
|
320456
|
+
/* harmony export */ BaseError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.BaseError),
|
|
320457
|
+
/* harmony export */ CancelPending: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.CancelPending),
|
|
320458
|
+
/* harmony export */ DDoSProtection: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.DDoSProtection),
|
|
320459
|
+
/* harmony export */ DuplicateOrderId: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.DuplicateOrderId),
|
|
317552
320460
|
/* harmony export */ Exchange: () => (/* reexport safe */ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__.e),
|
|
317553
|
-
/* harmony export */ ExchangeError: () => (/* reexport safe */
|
|
317554
|
-
/* harmony export */ ExchangeNotAvailable: () => (/* reexport safe */
|
|
317555
|
-
/* harmony export */ InsufficientFunds: () => (/* reexport safe */
|
|
317556
|
-
/* harmony export */ InvalidAddress: () => (/* reexport safe */
|
|
317557
|
-
/* harmony export */ InvalidNonce: () => (/* reexport safe */
|
|
317558
|
-
/* harmony export */ InvalidOrder: () => (/* reexport safe */
|
|
317559
|
-
/* harmony export */ MarginModeAlreadySet: () => (/* reexport safe */
|
|
317560
|
-
/* harmony export */ NetworkError: () => (/* reexport safe */
|
|
317561
|
-
/* harmony export */ NoChange: () => (/* reexport safe */
|
|
317562
|
-
/* harmony export */ NotSupported: () => (/* reexport safe */
|
|
317563
|
-
/* harmony export */ NullResponse: () => (/* reexport safe */
|
|
317564
|
-
/* harmony export */ OnMaintenance: () => (/* reexport safe */
|
|
317565
|
-
/* harmony export */ OrderImmediatelyFillable: () => (/* reexport safe */
|
|
317566
|
-
/* harmony export */ OrderNotCached: () => (/* reexport safe */
|
|
317567
|
-
/* harmony export */ OrderNotFillable: () => (/* reexport safe */
|
|
317568
|
-
/* harmony export */ OrderNotFound: () => (/* reexport safe */
|
|
317569
|
-
/* harmony export */ PermissionDenied: () => (/* reexport safe */
|
|
317570
|
-
/* harmony export */ Precise: () => (/* reexport safe */
|
|
317571
|
-
/* harmony export */ RateLimitExceeded: () => (/* reexport safe */
|
|
317572
|
-
/* harmony export */ RequestTimeout: () => (/* reexport safe */
|
|
320461
|
+
/* harmony export */ ExchangeError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ExchangeError),
|
|
320462
|
+
/* harmony export */ ExchangeNotAvailable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.ExchangeNotAvailable),
|
|
320463
|
+
/* harmony export */ InsufficientFunds: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InsufficientFunds),
|
|
320464
|
+
/* harmony export */ InvalidAddress: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidAddress),
|
|
320465
|
+
/* harmony export */ InvalidNonce: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidNonce),
|
|
320466
|
+
/* harmony export */ InvalidOrder: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.InvalidOrder),
|
|
320467
|
+
/* harmony export */ MarginModeAlreadySet: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.MarginModeAlreadySet),
|
|
320468
|
+
/* harmony export */ NetworkError: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NetworkError),
|
|
320469
|
+
/* harmony export */ NoChange: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NoChange),
|
|
320470
|
+
/* harmony export */ NotSupported: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NotSupported),
|
|
320471
|
+
/* harmony export */ NullResponse: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.NullResponse),
|
|
320472
|
+
/* harmony export */ OnMaintenance: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OnMaintenance),
|
|
320473
|
+
/* harmony export */ OrderImmediatelyFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderImmediatelyFillable),
|
|
320474
|
+
/* harmony export */ OrderNotCached: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotCached),
|
|
320475
|
+
/* harmony export */ OrderNotFillable: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotFillable),
|
|
320476
|
+
/* harmony export */ OrderNotFound: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.OrderNotFound),
|
|
320477
|
+
/* harmony export */ PermissionDenied: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.PermissionDenied),
|
|
320478
|
+
/* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__.O),
|
|
320479
|
+
/* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.RateLimitExceeded),
|
|
320480
|
+
/* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__.RequestTimeout),
|
|
317573
320481
|
/* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
|
|
317574
320482
|
/* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
|
|
317575
320483
|
/* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
|
|
@@ -317609,79 +320517,80 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
317609
320517
|
/* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__.Z),
|
|
317610
320518
|
/* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_38__.Z),
|
|
317611
320519
|
/* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__.Z),
|
|
317612
|
-
/* harmony export */
|
|
317613
|
-
/* harmony export */
|
|
317614
|
-
/* harmony export */
|
|
317615
|
-
/* harmony export */
|
|
317616
|
-
/* harmony export */
|
|
317617
|
-
/* harmony export */
|
|
317618
|
-
/* harmony export */
|
|
317619
|
-
/* harmony export */
|
|
317620
|
-
/* harmony export */
|
|
317621
|
-
/* harmony export */
|
|
317622
|
-
/* harmony export */
|
|
320520
|
+
/* harmony export */ coinbaseinternational: () => (/* reexport safe */ _src_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_40__.Z),
|
|
320521
|
+
/* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__.Z),
|
|
320522
|
+
/* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__.Z),
|
|
320523
|
+
/* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__.Z),
|
|
320524
|
+
/* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__.Z),
|
|
320525
|
+
/* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__.Z),
|
|
320526
|
+
/* harmony export */ coinmetro: () => (/* reexport safe */ _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_46__.Z),
|
|
320527
|
+
/* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_47__.Z),
|
|
320528
|
+
/* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_48__.Z),
|
|
320529
|
+
/* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_49__.Z),
|
|
320530
|
+
/* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_50__.Z),
|
|
320531
|
+
/* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_51__.Z),
|
|
317623
320532
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
317624
|
-
/* harmony export */ delta: () => (/* reexport safe */
|
|
317625
|
-
/* harmony export */ deribit: () => (/* reexport safe */
|
|
317626
|
-
/* harmony export */ digifinex: () => (/* reexport safe */
|
|
317627
|
-
/* harmony export */ errors: () => (/* reexport module object */
|
|
320533
|
+
/* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_52__.Z),
|
|
320534
|
+
/* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_53__.Z),
|
|
320535
|
+
/* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_54__.Z),
|
|
320536
|
+
/* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__),
|
|
317628
320537
|
/* harmony export */ exchanges: () => (/* binding */ exchanges),
|
|
317629
|
-
/* harmony export */ exmo: () => (/* reexport safe */
|
|
317630
|
-
/* harmony export */ fmfwio: () => (/* reexport safe */
|
|
317631
|
-
/* harmony export */ functions: () => (/* reexport module object */
|
|
317632
|
-
/* harmony export */ gate: () => (/* reexport safe */
|
|
317633
|
-
/* harmony export */ gateio: () => (/* reexport safe */
|
|
317634
|
-
/* harmony export */ gemini: () => (/* reexport safe */
|
|
317635
|
-
/* harmony export */ hitbtc: () => (/* reexport safe */
|
|
317636
|
-
/* harmony export */ hitbtc3: () => (/* reexport safe */
|
|
317637
|
-
/* harmony export */ hollaex: () => (/* reexport safe */
|
|
317638
|
-
/* harmony export */ htx: () => (/* reexport safe */
|
|
317639
|
-
/* harmony export */ huobi: () => (/* reexport safe */
|
|
317640
|
-
/* harmony export */ huobijp: () => (/* reexport safe */
|
|
317641
|
-
/* harmony export */ hyperliquid: () => (/* reexport safe */
|
|
317642
|
-
/* harmony export */ idex: () => (/* reexport safe */
|
|
317643
|
-
/* harmony export */ independentreserve: () => (/* reexport safe */
|
|
317644
|
-
/* harmony export */ indodax: () => (/* reexport safe */
|
|
317645
|
-
/* harmony export */ kraken: () => (/* reexport safe */
|
|
317646
|
-
/* harmony export */ krakenfutures: () => (/* reexport safe */
|
|
317647
|
-
/* harmony export */ kucoin: () => (/* reexport safe */
|
|
317648
|
-
/* harmony export */ kucoinfutures: () => (/* reexport safe */
|
|
317649
|
-
/* harmony export */ kuna: () => (/* reexport safe */
|
|
317650
|
-
/* harmony export */ latoken: () => (/* reexport safe */
|
|
317651
|
-
/* harmony export */ lbank: () => (/* reexport safe */
|
|
317652
|
-
/* harmony export */ luno: () => (/* reexport safe */
|
|
317653
|
-
/* harmony export */ lykke: () => (/* reexport safe */
|
|
317654
|
-
/* harmony export */ mercado: () => (/* reexport safe */
|
|
317655
|
-
/* harmony export */ mexc: () => (/* reexport safe */
|
|
317656
|
-
/* harmony export */ ndax: () => (/* reexport safe */
|
|
317657
|
-
/* harmony export */ novadax: () => (/* reexport safe */
|
|
317658
|
-
/* harmony export */ oceanex: () => (/* reexport safe */
|
|
317659
|
-
/* harmony export */ okcoin: () => (/* reexport safe */
|
|
317660
|
-
/* harmony export */ okx: () => (/* reexport safe */
|
|
317661
|
-
/* harmony export */ onetrading: () => (/* reexport safe */
|
|
317662
|
-
/* harmony export */ p2b: () => (/* reexport safe */
|
|
317663
|
-
/* harmony export */ paymium: () => (/* reexport safe */
|
|
317664
|
-
/* harmony export */ phemex: () => (/* reexport safe */
|
|
317665
|
-
/* harmony export */ poloniex: () => (/* reexport safe */
|
|
317666
|
-
/* harmony export */ poloniexfutures: () => (/* reexport safe */
|
|
320538
|
+
/* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_55__.Z),
|
|
320539
|
+
/* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_56__.Z),
|
|
320540
|
+
/* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__),
|
|
320541
|
+
/* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_57__.Z),
|
|
320542
|
+
/* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_58__.Z),
|
|
320543
|
+
/* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_59__.Z),
|
|
320544
|
+
/* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_60__.Z),
|
|
320545
|
+
/* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_61__.Z),
|
|
320546
|
+
/* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_62__.Z),
|
|
320547
|
+
/* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_63__.Z),
|
|
320548
|
+
/* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_64__.Z),
|
|
320549
|
+
/* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_65__.Z),
|
|
320550
|
+
/* harmony export */ hyperliquid: () => (/* reexport safe */ _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_66__.Z),
|
|
320551
|
+
/* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_67__.Z),
|
|
320552
|
+
/* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_68__.Z),
|
|
320553
|
+
/* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_69__.Z),
|
|
320554
|
+
/* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_70__.Z),
|
|
320555
|
+
/* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_71__.Z),
|
|
320556
|
+
/* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_72__.Z),
|
|
320557
|
+
/* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_73__.Z),
|
|
320558
|
+
/* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_74__.Z),
|
|
320559
|
+
/* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_75__.Z),
|
|
320560
|
+
/* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_76__.Z),
|
|
320561
|
+
/* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_77__.Z),
|
|
320562
|
+
/* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_78__.Z),
|
|
320563
|
+
/* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_79__.Z),
|
|
320564
|
+
/* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_80__.Z),
|
|
320565
|
+
/* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_81__.Z),
|
|
320566
|
+
/* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_82__.Z),
|
|
320567
|
+
/* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_83__.Z),
|
|
320568
|
+
/* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_84__.Z),
|
|
320569
|
+
/* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_85__.Z),
|
|
320570
|
+
/* harmony export */ onetrading: () => (/* reexport safe */ _src_onetrading_js__WEBPACK_IMPORTED_MODULE_86__.Z),
|
|
320571
|
+
/* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_87__.Z),
|
|
320572
|
+
/* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_88__.Z),
|
|
320573
|
+
/* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_89__.Z),
|
|
320574
|
+
/* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_90__.Z),
|
|
320575
|
+
/* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_91__.Z),
|
|
317667
320576
|
/* harmony export */ pro: () => (/* binding */ pro),
|
|
317668
|
-
/* harmony export */ probit: () => (/* reexport safe */
|
|
317669
|
-
/* harmony export */ timex: () => (/* reexport safe */
|
|
317670
|
-
/* harmony export */ tokocrypto: () => (/* reexport safe */
|
|
317671
|
-
/* harmony export */ upbit: () => (/* reexport safe */
|
|
320577
|
+
/* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_92__.Z),
|
|
320578
|
+
/* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_93__.Z),
|
|
320579
|
+
/* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_94__.Z),
|
|
320580
|
+
/* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_95__.Z),
|
|
317672
320581
|
/* harmony export */ version: () => (/* binding */ version),
|
|
317673
|
-
/* harmony export */ wavesexchange: () => (/* reexport safe */
|
|
317674
|
-
/* harmony export */ wazirx: () => (/* reexport safe */
|
|
317675
|
-
/* harmony export */ whitebit: () => (/* reexport safe */
|
|
317676
|
-
/* harmony export */ woo: () => (/* reexport safe */
|
|
317677
|
-
/* harmony export */ yobit: () => (/* reexport safe */
|
|
317678
|
-
/* harmony export */ zaif: () => (/* reexport safe */
|
|
317679
|
-
/* harmony export */ zonda: () => (/* reexport safe */
|
|
320582
|
+
/* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_96__.Z),
|
|
320583
|
+
/* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_97__.Z),
|
|
320584
|
+
/* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_98__.Z),
|
|
320585
|
+
/* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_99__.Z),
|
|
320586
|
+
/* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_100__.Z),
|
|
320587
|
+
/* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_101__.Z),
|
|
320588
|
+
/* harmony export */ zonda: () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_102__.Z)
|
|
317680
320589
|
/* harmony export */ });
|
|
317681
320590
|
/* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
|
|
317682
|
-
/* harmony import */ var
|
|
317683
|
-
/* harmony import */ var
|
|
317684
|
-
/* harmony import */ var
|
|
320591
|
+
/* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__ = __webpack_require__(2194);
|
|
320592
|
+
/* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__ = __webpack_require__(7100);
|
|
320593
|
+
/* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__ = __webpack_require__(6689);
|
|
317685
320594
|
/* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
|
|
317686
320595
|
/* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
|
|
317687
320596
|
/* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
|
|
@@ -317721,130 +320630,132 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
317721
320630
|
/* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(3527);
|
|
317722
320631
|
/* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(6445);
|
|
317723
320632
|
/* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(437);
|
|
317724
|
-
/* harmony import */ var
|
|
317725
|
-
/* harmony import */ var
|
|
317726
|
-
/* harmony import */ var
|
|
317727
|
-
/* harmony import */ var
|
|
317728
|
-
/* harmony import */ var
|
|
317729
|
-
/* harmony import */ var
|
|
317730
|
-
/* harmony import */ var
|
|
317731
|
-
/* harmony import */ var
|
|
317732
|
-
/* harmony import */ var
|
|
317733
|
-
/* harmony import */ var
|
|
317734
|
-
/* harmony import */ var
|
|
317735
|
-
/* harmony import */ var
|
|
317736
|
-
/* harmony import */ var
|
|
317737
|
-
/* harmony import */ var
|
|
317738
|
-
/* harmony import */ var
|
|
317739
|
-
/* harmony import */ var
|
|
317740
|
-
/* harmony import */ var
|
|
317741
|
-
/* harmony import */ var
|
|
317742
|
-
/* harmony import */ var
|
|
317743
|
-
/* harmony import */ var
|
|
317744
|
-
/* harmony import */ var
|
|
317745
|
-
/* harmony import */ var
|
|
317746
|
-
/* harmony import */ var
|
|
317747
|
-
/* harmony import */ var
|
|
317748
|
-
/* harmony import */ var
|
|
317749
|
-
/* harmony import */ var
|
|
317750
|
-
/* harmony import */ var
|
|
317751
|
-
/* harmony import */ var
|
|
317752
|
-
/* harmony import */ var
|
|
317753
|
-
/* harmony import */ var
|
|
317754
|
-
/* harmony import */ var
|
|
317755
|
-
/* harmony import */ var
|
|
317756
|
-
/* harmony import */ var
|
|
317757
|
-
/* harmony import */ var
|
|
317758
|
-
/* harmony import */ var
|
|
317759
|
-
/* harmony import */ var
|
|
317760
|
-
/* harmony import */ var
|
|
317761
|
-
/* harmony import */ var
|
|
317762
|
-
/* harmony import */ var
|
|
317763
|
-
/* harmony import */ var
|
|
317764
|
-
/* harmony import */ var
|
|
317765
|
-
/* harmony import */ var
|
|
317766
|
-
/* harmony import */ var
|
|
317767
|
-
/* harmony import */ var
|
|
317768
|
-
/* harmony import */ var
|
|
317769
|
-
/* harmony import */ var
|
|
317770
|
-
/* harmony import */ var
|
|
317771
|
-
/* harmony import */ var
|
|
317772
|
-
/* harmony import */ var
|
|
317773
|
-
/* harmony import */ var
|
|
317774
|
-
/* harmony import */ var
|
|
317775
|
-
/* harmony import */ var
|
|
317776
|
-
/* harmony import */ var
|
|
317777
|
-
/* harmony import */ var
|
|
317778
|
-
/* harmony import */ var
|
|
317779
|
-
/* harmony import */ var
|
|
317780
|
-
/* harmony import */ var
|
|
317781
|
-
/* harmony import */ var
|
|
317782
|
-
/* harmony import */ var
|
|
317783
|
-
/* harmony import */ var
|
|
317784
|
-
/* harmony import */ var
|
|
317785
|
-
/* harmony import */ var
|
|
317786
|
-
/* harmony import */ var
|
|
317787
|
-
/* harmony import */ var
|
|
317788
|
-
/* harmony import */ var
|
|
317789
|
-
/* harmony import */ var
|
|
317790
|
-
/* harmony import */ var
|
|
317791
|
-
/* harmony import */ var
|
|
317792
|
-
/* harmony import */ var
|
|
317793
|
-
/* harmony import */ var
|
|
317794
|
-
/* harmony import */ var
|
|
317795
|
-
/* harmony import */ var
|
|
317796
|
-
/* harmony import */ var
|
|
317797
|
-
/* harmony import */ var
|
|
317798
|
-
/* harmony import */ var
|
|
317799
|
-
/* harmony import */ var
|
|
317800
|
-
/* harmony import */ var
|
|
317801
|
-
/* harmony import */ var
|
|
317802
|
-
/* harmony import */ var
|
|
317803
|
-
/* harmony import */ var
|
|
317804
|
-
/* harmony import */ var
|
|
317805
|
-
/* harmony import */ var
|
|
317806
|
-
/* harmony import */ var
|
|
317807
|
-
/* harmony import */ var
|
|
317808
|
-
/* harmony import */ var
|
|
317809
|
-
/* harmony import */ var
|
|
317810
|
-
/* harmony import */ var
|
|
317811
|
-
/* harmony import */ var
|
|
317812
|
-
/* harmony import */ var
|
|
317813
|
-
/* harmony import */ var
|
|
317814
|
-
/* harmony import */ var
|
|
317815
|
-
/* harmony import */ var
|
|
317816
|
-
/* harmony import */ var
|
|
317817
|
-
/* harmony import */ var
|
|
317818
|
-
/* harmony import */ var
|
|
317819
|
-
/* harmony import */ var
|
|
317820
|
-
/* harmony import */ var
|
|
317821
|
-
/* harmony import */ var
|
|
317822
|
-
/* harmony import */ var
|
|
317823
|
-
/* harmony import */ var
|
|
317824
|
-
/* harmony import */ var
|
|
317825
|
-
/* harmony import */ var
|
|
317826
|
-
/* harmony import */ var
|
|
317827
|
-
/* harmony import */ var
|
|
317828
|
-
/* harmony import */ var
|
|
317829
|
-
/* harmony import */ var
|
|
317830
|
-
/* harmony import */ var
|
|
317831
|
-
/* harmony import */ var
|
|
317832
|
-
/* harmony import */ var
|
|
317833
|
-
/* harmony import */ var
|
|
317834
|
-
/* harmony import */ var
|
|
317835
|
-
/* harmony import */ var
|
|
317836
|
-
/* harmony import */ var
|
|
317837
|
-
/* harmony import */ var
|
|
317838
|
-
/* harmony import */ var
|
|
317839
|
-
/* harmony import */ var
|
|
317840
|
-
/* harmony import */ var
|
|
317841
|
-
/* harmony import */ var
|
|
317842
|
-
/* harmony import */ var
|
|
317843
|
-
/* harmony import */ var
|
|
317844
|
-
/* harmony import */ var
|
|
317845
|
-
/* harmony import */ var
|
|
317846
|
-
/* harmony import */ var
|
|
317847
|
-
/* harmony import */ var
|
|
320633
|
+
/* harmony import */ var _src_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(9339);
|
|
320634
|
+
/* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(8856);
|
|
320635
|
+
/* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(2117);
|
|
320636
|
+
/* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(332);
|
|
320637
|
+
/* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(3623);
|
|
320638
|
+
/* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(9816);
|
|
320639
|
+
/* harmony import */ var _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(4759);
|
|
320640
|
+
/* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(7811);
|
|
320641
|
+
/* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(5782);
|
|
320642
|
+
/* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(7794);
|
|
320643
|
+
/* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(9129);
|
|
320644
|
+
/* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(3214);
|
|
320645
|
+
/* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(1753);
|
|
320646
|
+
/* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(24);
|
|
320647
|
+
/* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(8846);
|
|
320648
|
+
/* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(1729);
|
|
320649
|
+
/* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(5788);
|
|
320650
|
+
/* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(7290);
|
|
320651
|
+
/* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(7036);
|
|
320652
|
+
/* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(6743);
|
|
320653
|
+
/* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(4714);
|
|
320654
|
+
/* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(4815);
|
|
320655
|
+
/* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(8422);
|
|
320656
|
+
/* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(5939);
|
|
320657
|
+
/* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(8146);
|
|
320658
|
+
/* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(7034);
|
|
320659
|
+
/* harmony import */ var _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(5959);
|
|
320660
|
+
/* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(8232);
|
|
320661
|
+
/* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(9570);
|
|
320662
|
+
/* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(1605);
|
|
320663
|
+
/* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(9922);
|
|
320664
|
+
/* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(4470);
|
|
320665
|
+
/* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(3583);
|
|
320666
|
+
/* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(1924);
|
|
320667
|
+
/* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(7732);
|
|
320668
|
+
/* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(2545);
|
|
320669
|
+
/* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(3944);
|
|
320670
|
+
/* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(1758);
|
|
320671
|
+
/* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(3803);
|
|
320672
|
+
/* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(9013);
|
|
320673
|
+
/* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(6641);
|
|
320674
|
+
/* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(4531);
|
|
320675
|
+
/* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(2449);
|
|
320676
|
+
/* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(6749);
|
|
320677
|
+
/* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(3007);
|
|
320678
|
+
/* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(4042);
|
|
320679
|
+
/* harmony import */ var _src_onetrading_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(6481);
|
|
320680
|
+
/* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(2466);
|
|
320681
|
+
/* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(7082);
|
|
320682
|
+
/* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(79);
|
|
320683
|
+
/* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(8891);
|
|
320684
|
+
/* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(6877);
|
|
320685
|
+
/* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(3657);
|
|
320686
|
+
/* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(1067);
|
|
320687
|
+
/* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(5261);
|
|
320688
|
+
/* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(7584);
|
|
320689
|
+
/* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(3853);
|
|
320690
|
+
/* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(6536);
|
|
320691
|
+
/* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(5467);
|
|
320692
|
+
/* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(517);
|
|
320693
|
+
/* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(3850);
|
|
320694
|
+
/* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(5934);
|
|
320695
|
+
/* harmony import */ var _src_zonda_js__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(5140);
|
|
320696
|
+
/* harmony import */ var _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_103__ = __webpack_require__(2467);
|
|
320697
|
+
/* harmony import */ var _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_104__ = __webpack_require__(2383);
|
|
320698
|
+
/* harmony import */ var _src_pro_bequant_js__WEBPACK_IMPORTED_MODULE_105__ = __webpack_require__(8848);
|
|
320699
|
+
/* harmony import */ var _src_pro_binance_js__WEBPACK_IMPORTED_MODULE_106__ = __webpack_require__(8764);
|
|
320700
|
+
/* harmony import */ var _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_107__ = __webpack_require__(5078);
|
|
320701
|
+
/* harmony import */ var _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_108__ = __webpack_require__(1326);
|
|
320702
|
+
/* harmony import */ var _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_109__ = __webpack_require__(1230);
|
|
320703
|
+
/* harmony import */ var _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_110__ = __webpack_require__(6955);
|
|
320704
|
+
/* harmony import */ var _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_111__ = __webpack_require__(453);
|
|
320705
|
+
/* harmony import */ var _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_112__ = __webpack_require__(9772);
|
|
320706
|
+
/* harmony import */ var _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_113__ = __webpack_require__(588);
|
|
320707
|
+
/* harmony import */ var _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_114__ = __webpack_require__(1885);
|
|
320708
|
+
/* harmony import */ var _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_115__ = __webpack_require__(7504);
|
|
320709
|
+
/* harmony import */ var _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_116__ = __webpack_require__(2302);
|
|
320710
|
+
/* harmony import */ var _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_117__ = __webpack_require__(2191);
|
|
320711
|
+
/* harmony import */ var _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_118__ = __webpack_require__(1297);
|
|
320712
|
+
/* harmony import */ var _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_119__ = __webpack_require__(3005);
|
|
320713
|
+
/* harmony import */ var _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_120__ = __webpack_require__(2317);
|
|
320714
|
+
/* harmony import */ var _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_121__ = __webpack_require__(6977);
|
|
320715
|
+
/* harmony import */ var _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_122__ = __webpack_require__(2519);
|
|
320716
|
+
/* harmony import */ var _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_123__ = __webpack_require__(5030);
|
|
320717
|
+
/* harmony import */ var _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_124__ = __webpack_require__(5272);
|
|
320718
|
+
/* harmony import */ var _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_125__ = __webpack_require__(3414);
|
|
320719
|
+
/* harmony import */ var _src_pro_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_126__ = __webpack_require__(6541);
|
|
320720
|
+
/* harmony import */ var _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_127__ = __webpack_require__(8368);
|
|
320721
|
+
/* harmony import */ var _src_pro_coincheck_js__WEBPACK_IMPORTED_MODULE_128__ = __webpack_require__(7891);
|
|
320722
|
+
/* harmony import */ var _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_129__ = __webpack_require__(204);
|
|
320723
|
+
/* harmony import */ var _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_130__ = __webpack_require__(5208);
|
|
320724
|
+
/* harmony import */ var _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_131__ = __webpack_require__(6820);
|
|
320725
|
+
/* harmony import */ var _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_132__ = __webpack_require__(2952);
|
|
320726
|
+
/* harmony import */ var _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_133__ = __webpack_require__(1788);
|
|
320727
|
+
/* harmony import */ var _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_134__ = __webpack_require__(9004);
|
|
320728
|
+
/* harmony import */ var _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_135__ = __webpack_require__(8335);
|
|
320729
|
+
/* harmony import */ var _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_136__ = __webpack_require__(1465);
|
|
320730
|
+
/* harmony import */ var _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_137__ = __webpack_require__(9488);
|
|
320731
|
+
/* harmony import */ var _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_138__ = __webpack_require__(5189);
|
|
320732
|
+
/* harmony import */ var _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_139__ = __webpack_require__(8559);
|
|
320733
|
+
/* harmony import */ var _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_140__ = __webpack_require__(7474);
|
|
320734
|
+
/* harmony import */ var _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_141__ = __webpack_require__(8384);
|
|
320735
|
+
/* harmony import */ var _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_142__ = __webpack_require__(9021);
|
|
320736
|
+
/* harmony import */ var _src_pro_hyperliquid_js__WEBPACK_IMPORTED_MODULE_143__ = __webpack_require__(8354);
|
|
320737
|
+
/* harmony import */ var _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_144__ = __webpack_require__(3484);
|
|
320738
|
+
/* harmony import */ var _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_145__ = __webpack_require__(1311);
|
|
320739
|
+
/* harmony import */ var _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_146__ = __webpack_require__(736);
|
|
320740
|
+
/* harmony import */ var _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_147__ = __webpack_require__(449);
|
|
320741
|
+
/* harmony import */ var _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_148__ = __webpack_require__(2387);
|
|
320742
|
+
/* harmony import */ var _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_149__ = __webpack_require__(7181);
|
|
320743
|
+
/* harmony import */ var _src_pro_lbank_js__WEBPACK_IMPORTED_MODULE_150__ = __webpack_require__(1267);
|
|
320744
|
+
/* harmony import */ var _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_151__ = __webpack_require__(627);
|
|
320745
|
+
/* harmony import */ var _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_152__ = __webpack_require__(6484);
|
|
320746
|
+
/* harmony import */ var _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_153__ = __webpack_require__(8080);
|
|
320747
|
+
/* harmony import */ var _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_154__ = __webpack_require__(7105);
|
|
320748
|
+
/* harmony import */ var _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(2214);
|
|
320749
|
+
/* harmony import */ var _src_pro_onetrading_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(9419);
|
|
320750
|
+
/* harmony import */ var _src_pro_p2b_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(8516);
|
|
320751
|
+
/* harmony import */ var _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_158__ = __webpack_require__(4360);
|
|
320752
|
+
/* harmony import */ var _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_159__ = __webpack_require__(7924);
|
|
320753
|
+
/* harmony import */ var _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_160__ = __webpack_require__(3541);
|
|
320754
|
+
/* harmony import */ var _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_161__ = __webpack_require__(9782);
|
|
320755
|
+
/* harmony import */ var _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_162__ = __webpack_require__(7614);
|
|
320756
|
+
/* harmony import */ var _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_163__ = __webpack_require__(4828);
|
|
320757
|
+
/* harmony import */ var _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_164__ = __webpack_require__(5630);
|
|
320758
|
+
/* harmony import */ var _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_165__ = __webpack_require__(3910);
|
|
317848
320759
|
/*
|
|
317849
320760
|
|
|
317850
320761
|
MIT License
|
|
@@ -317879,7 +320790,7 @@ SOFTWARE.
|
|
|
317879
320790
|
|
|
317880
320791
|
//-----------------------------------------------------------------------------
|
|
317881
320792
|
// this is updated by vss.js when building
|
|
317882
|
-
const version = '4.2.
|
|
320793
|
+
const version = '4.2.73';
|
|
317883
320794
|
_src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
|
|
317884
320795
|
//-----------------------------------------------------------------------------
|
|
317885
320796
|
|
|
@@ -317981,6 +320892,7 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
|
|
|
317981
320892
|
|
|
317982
320893
|
|
|
317983
320894
|
|
|
320895
|
+
|
|
317984
320896
|
|
|
317985
320897
|
|
|
317986
320898
|
// pro exchanges
|
|
@@ -318044,6 +320956,7 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
|
|
|
318044
320956
|
|
|
318045
320957
|
|
|
318046
320958
|
|
|
320959
|
+
|
|
318047
320960
|
|
|
318048
320961
|
|
|
318049
320962
|
const exchanges = {
|
|
@@ -318086,132 +320999,134 @@ const exchanges = {
|
|
|
318086
320999
|
'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
|
|
318087
321000
|
'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
|
|
318088
321001
|
'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
|
|
318089
|
-
'
|
|
318090
|
-
'
|
|
318091
|
-
'
|
|
318092
|
-
'
|
|
318093
|
-
'
|
|
318094
|
-
'
|
|
318095
|
-
'
|
|
318096
|
-
'
|
|
318097
|
-
'
|
|
318098
|
-
'
|
|
318099
|
-
'
|
|
318100
|
-
'
|
|
318101
|
-
'
|
|
318102
|
-
'
|
|
318103
|
-
'
|
|
318104
|
-
'
|
|
318105
|
-
'
|
|
318106
|
-
'
|
|
318107
|
-
'
|
|
318108
|
-
'
|
|
318109
|
-
'
|
|
318110
|
-
'
|
|
318111
|
-
'
|
|
318112
|
-
'
|
|
318113
|
-
'
|
|
318114
|
-
'
|
|
318115
|
-
'
|
|
318116
|
-
'
|
|
318117
|
-
'
|
|
318118
|
-
'
|
|
318119
|
-
'
|
|
318120
|
-
'
|
|
318121
|
-
'
|
|
318122
|
-
'
|
|
318123
|
-
'
|
|
318124
|
-
'
|
|
318125
|
-
'
|
|
318126
|
-
'
|
|
318127
|
-
'
|
|
318128
|
-
'
|
|
318129
|
-
'
|
|
318130
|
-
'
|
|
318131
|
-
'
|
|
318132
|
-
'
|
|
318133
|
-
'
|
|
318134
|
-
'
|
|
318135
|
-
'
|
|
318136
|
-
'
|
|
318137
|
-
'
|
|
318138
|
-
'
|
|
318139
|
-
'
|
|
318140
|
-
'
|
|
318141
|
-
'
|
|
318142
|
-
'
|
|
318143
|
-
'
|
|
318144
|
-
'
|
|
318145
|
-
'
|
|
318146
|
-
'
|
|
318147
|
-
'
|
|
318148
|
-
'
|
|
318149
|
-
'
|
|
318150
|
-
'
|
|
321002
|
+
'coinbaseinternational': _src_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
|
|
321003
|
+
'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
|
|
321004
|
+
'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
|
|
321005
|
+
'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
|
|
321006
|
+
'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
|
|
321007
|
+
'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
|
|
321008
|
+
'coinmetro': _src_coinmetro_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
|
|
321009
|
+
'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
|
|
321010
|
+
'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
|
|
321011
|
+
'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
|
|
321012
|
+
'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
|
|
321013
|
+
'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
|
|
321014
|
+
'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
|
|
321015
|
+
'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
|
|
321016
|
+
'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
|
|
321017
|
+
'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
|
|
321018
|
+
'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
|
|
321019
|
+
'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
|
|
321020
|
+
'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
|
|
321021
|
+
'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
|
|
321022
|
+
'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
|
|
321023
|
+
'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
|
|
321024
|
+
'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
|
|
321025
|
+
'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
|
|
321026
|
+
'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
|
|
321027
|
+
'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
|
|
321028
|
+
'hyperliquid': _src_hyperliquid_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
|
|
321029
|
+
'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
|
|
321030
|
+
'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
|
|
321031
|
+
'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
|
|
321032
|
+
'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
|
|
321033
|
+
'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
|
|
321034
|
+
'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
|
|
321035
|
+
'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
|
|
321036
|
+
'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
|
|
321037
|
+
'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
|
|
321038
|
+
'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
|
|
321039
|
+
'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
|
|
321040
|
+
'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
|
|
321041
|
+
'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
|
|
321042
|
+
'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
|
|
321043
|
+
'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
|
|
321044
|
+
'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
|
|
321045
|
+
'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
|
|
321046
|
+
'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
|
|
321047
|
+
'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
|
|
321048
|
+
'onetrading': _src_onetrading_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
|
|
321049
|
+
'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
|
|
321050
|
+
'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
|
|
321051
|
+
'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
|
|
321052
|
+
'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
|
|
321053
|
+
'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
|
|
321054
|
+
'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
|
|
321055
|
+
'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
|
|
321056
|
+
'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
|
|
321057
|
+
'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
|
|
321058
|
+
'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
|
|
321059
|
+
'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
|
|
321060
|
+
'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_98__/* ["default"] */ .Z,
|
|
321061
|
+
'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_99__/* ["default"] */ .Z,
|
|
321062
|
+
'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_100__/* ["default"] */ .Z,
|
|
321063
|
+
'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_101__/* ["default"] */ .Z,
|
|
321064
|
+
'zonda': _src_zonda_js__WEBPACK_IMPORTED_MODULE_102__/* ["default"] */ .Z,
|
|
318151
321065
|
};
|
|
318152
321066
|
const pro = {
|
|
318153
|
-
'alpaca':
|
|
318154
|
-
'ascendex':
|
|
318155
|
-
'bequant':
|
|
318156
|
-
'binance':
|
|
318157
|
-
'binancecoinm':
|
|
318158
|
-
'binanceus':
|
|
318159
|
-
'binanceusdm':
|
|
318160
|
-
'bingx':
|
|
318161
|
-
'bitcoincom':
|
|
318162
|
-
'bitfinex':
|
|
318163
|
-
'bitfinex2':
|
|
318164
|
-
'bitget':
|
|
318165
|
-
'bitmart':
|
|
318166
|
-
'bitmex':
|
|
318167
|
-
'bitopro':
|
|
318168
|
-
'bitpanda':
|
|
318169
|
-
'bitrue':
|
|
318170
|
-
'bitstamp':
|
|
318171
|
-
'bitvavo':
|
|
318172
|
-
'blockchaincom':
|
|
318173
|
-
'bybit':
|
|
318174
|
-
'cex':
|
|
318175
|
-
'coinbase':
|
|
318176
|
-
'
|
|
318177
|
-
'
|
|
318178
|
-
'
|
|
318179
|
-
'
|
|
318180
|
-
'
|
|
318181
|
-
'
|
|
318182
|
-
'
|
|
318183
|
-
'
|
|
318184
|
-
'
|
|
318185
|
-
'
|
|
318186
|
-
'
|
|
318187
|
-
'
|
|
318188
|
-
'
|
|
318189
|
-
'
|
|
318190
|
-
'
|
|
318191
|
-
'
|
|
318192
|
-
'
|
|
318193
|
-
'
|
|
318194
|
-
'
|
|
318195
|
-
'
|
|
318196
|
-
'
|
|
318197
|
-
'
|
|
318198
|
-
'
|
|
318199
|
-
'
|
|
318200
|
-
'
|
|
318201
|
-
'
|
|
318202
|
-
'
|
|
318203
|
-
'
|
|
318204
|
-
'
|
|
318205
|
-
'
|
|
318206
|
-
'
|
|
318207
|
-
'
|
|
318208
|
-
'
|
|
318209
|
-
'
|
|
318210
|
-
'
|
|
318211
|
-
'
|
|
318212
|
-
'
|
|
318213
|
-
'
|
|
318214
|
-
'
|
|
321067
|
+
'alpaca': _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_103__/* ["default"] */ .Z,
|
|
321068
|
+
'ascendex': _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_104__/* ["default"] */ .Z,
|
|
321069
|
+
'bequant': _src_pro_bequant_js__WEBPACK_IMPORTED_MODULE_105__/* ["default"] */ .Z,
|
|
321070
|
+
'binance': _src_pro_binance_js__WEBPACK_IMPORTED_MODULE_106__/* ["default"] */ .Z,
|
|
321071
|
+
'binancecoinm': _src_pro_binancecoinm_js__WEBPACK_IMPORTED_MODULE_107__/* ["default"] */ .Z,
|
|
321072
|
+
'binanceus': _src_pro_binanceus_js__WEBPACK_IMPORTED_MODULE_108__/* ["default"] */ .Z,
|
|
321073
|
+
'binanceusdm': _src_pro_binanceusdm_js__WEBPACK_IMPORTED_MODULE_109__/* ["default"] */ .Z,
|
|
321074
|
+
'bingx': _src_pro_bingx_js__WEBPACK_IMPORTED_MODULE_110__/* ["default"] */ .Z,
|
|
321075
|
+
'bitcoincom': _src_pro_bitcoincom_js__WEBPACK_IMPORTED_MODULE_111__/* ["default"] */ .Z,
|
|
321076
|
+
'bitfinex': _src_pro_bitfinex_js__WEBPACK_IMPORTED_MODULE_112__/* ["default"] */ .Z,
|
|
321077
|
+
'bitfinex2': _src_pro_bitfinex2_js__WEBPACK_IMPORTED_MODULE_113__/* ["default"] */ .Z,
|
|
321078
|
+
'bitget': _src_pro_bitget_js__WEBPACK_IMPORTED_MODULE_114__/* ["default"] */ .Z,
|
|
321079
|
+
'bitmart': _src_pro_bitmart_js__WEBPACK_IMPORTED_MODULE_115__/* ["default"] */ .Z,
|
|
321080
|
+
'bitmex': _src_pro_bitmex_js__WEBPACK_IMPORTED_MODULE_116__/* ["default"] */ .Z,
|
|
321081
|
+
'bitopro': _src_pro_bitopro_js__WEBPACK_IMPORTED_MODULE_117__/* ["default"] */ .Z,
|
|
321082
|
+
'bitpanda': _src_pro_bitpanda_js__WEBPACK_IMPORTED_MODULE_118__/* ["default"] */ .Z,
|
|
321083
|
+
'bitrue': _src_pro_bitrue_js__WEBPACK_IMPORTED_MODULE_119__/* ["default"] */ .Z,
|
|
321084
|
+
'bitstamp': _src_pro_bitstamp_js__WEBPACK_IMPORTED_MODULE_120__/* ["default"] */ .Z,
|
|
321085
|
+
'bitvavo': _src_pro_bitvavo_js__WEBPACK_IMPORTED_MODULE_121__/* ["default"] */ .Z,
|
|
321086
|
+
'blockchaincom': _src_pro_blockchaincom_js__WEBPACK_IMPORTED_MODULE_122__/* ["default"] */ .Z,
|
|
321087
|
+
'bybit': _src_pro_bybit_js__WEBPACK_IMPORTED_MODULE_123__/* ["default"] */ .Z,
|
|
321088
|
+
'cex': _src_pro_cex_js__WEBPACK_IMPORTED_MODULE_124__/* ["default"] */ .Z,
|
|
321089
|
+
'coinbase': _src_pro_coinbase_js__WEBPACK_IMPORTED_MODULE_125__/* ["default"] */ .Z,
|
|
321090
|
+
'coinbaseinternational': _src_pro_coinbaseinternational_js__WEBPACK_IMPORTED_MODULE_126__/* ["default"] */ .Z,
|
|
321091
|
+
'coinbasepro': _src_pro_coinbasepro_js__WEBPACK_IMPORTED_MODULE_127__/* ["default"] */ .Z,
|
|
321092
|
+
'coincheck': _src_pro_coincheck_js__WEBPACK_IMPORTED_MODULE_128__/* ["default"] */ .Z,
|
|
321093
|
+
'coinex': _src_pro_coinex_js__WEBPACK_IMPORTED_MODULE_129__/* ["default"] */ .Z,
|
|
321094
|
+
'coinone': _src_pro_coinone_js__WEBPACK_IMPORTED_MODULE_130__/* ["default"] */ .Z,
|
|
321095
|
+
'cryptocom': _src_pro_cryptocom_js__WEBPACK_IMPORTED_MODULE_131__/* ["default"] */ .Z,
|
|
321096
|
+
'currencycom': _src_pro_currencycom_js__WEBPACK_IMPORTED_MODULE_132__/* ["default"] */ .Z,
|
|
321097
|
+
'deribit': _src_pro_deribit_js__WEBPACK_IMPORTED_MODULE_133__/* ["default"] */ .Z,
|
|
321098
|
+
'exmo': _src_pro_exmo_js__WEBPACK_IMPORTED_MODULE_134__/* ["default"] */ .Z,
|
|
321099
|
+
'gate': _src_pro_gate_js__WEBPACK_IMPORTED_MODULE_135__/* ["default"] */ .Z,
|
|
321100
|
+
'gateio': _src_pro_gateio_js__WEBPACK_IMPORTED_MODULE_136__/* ["default"] */ .Z,
|
|
321101
|
+
'gemini': _src_pro_gemini_js__WEBPACK_IMPORTED_MODULE_137__/* ["default"] */ .Z,
|
|
321102
|
+
'hitbtc': _src_pro_hitbtc_js__WEBPACK_IMPORTED_MODULE_138__/* ["default"] */ .Z,
|
|
321103
|
+
'hollaex': _src_pro_hollaex_js__WEBPACK_IMPORTED_MODULE_139__/* ["default"] */ .Z,
|
|
321104
|
+
'htx': _src_pro_htx_js__WEBPACK_IMPORTED_MODULE_140__/* ["default"] */ .Z,
|
|
321105
|
+
'huobi': _src_pro_huobi_js__WEBPACK_IMPORTED_MODULE_141__/* ["default"] */ .Z,
|
|
321106
|
+
'huobijp': _src_pro_huobijp_js__WEBPACK_IMPORTED_MODULE_142__/* ["default"] */ .Z,
|
|
321107
|
+
'hyperliquid': _src_pro_hyperliquid_js__WEBPACK_IMPORTED_MODULE_143__/* ["default"] */ .Z,
|
|
321108
|
+
'idex': _src_pro_idex_js__WEBPACK_IMPORTED_MODULE_144__/* ["default"] */ .Z,
|
|
321109
|
+
'independentreserve': _src_pro_independentreserve_js__WEBPACK_IMPORTED_MODULE_145__/* ["default"] */ .Z,
|
|
321110
|
+
'kraken': _src_pro_kraken_js__WEBPACK_IMPORTED_MODULE_146__/* ["default"] */ .Z,
|
|
321111
|
+
'krakenfutures': _src_pro_krakenfutures_js__WEBPACK_IMPORTED_MODULE_147__/* ["default"] */ .Z,
|
|
321112
|
+
'kucoin': _src_pro_kucoin_js__WEBPACK_IMPORTED_MODULE_148__/* ["default"] */ .Z,
|
|
321113
|
+
'kucoinfutures': _src_pro_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_149__/* ["default"] */ .Z,
|
|
321114
|
+
'lbank': _src_pro_lbank_js__WEBPACK_IMPORTED_MODULE_150__/* ["default"] */ .Z,
|
|
321115
|
+
'luno': _src_pro_luno_js__WEBPACK_IMPORTED_MODULE_151__/* ["default"] */ .Z,
|
|
321116
|
+
'mexc': _src_pro_mexc_js__WEBPACK_IMPORTED_MODULE_152__/* ["default"] */ .Z,
|
|
321117
|
+
'ndax': _src_pro_ndax_js__WEBPACK_IMPORTED_MODULE_153__/* ["default"] */ .Z,
|
|
321118
|
+
'okcoin': _src_pro_okcoin_js__WEBPACK_IMPORTED_MODULE_154__/* ["default"] */ .Z,
|
|
321119
|
+
'okx': _src_pro_okx_js__WEBPACK_IMPORTED_MODULE_155__/* ["default"] */ .Z,
|
|
321120
|
+
'onetrading': _src_pro_onetrading_js__WEBPACK_IMPORTED_MODULE_156__/* ["default"] */ .Z,
|
|
321121
|
+
'p2b': _src_pro_p2b_js__WEBPACK_IMPORTED_MODULE_157__/* ["default"] */ .Z,
|
|
321122
|
+
'phemex': _src_pro_phemex_js__WEBPACK_IMPORTED_MODULE_158__/* ["default"] */ .Z,
|
|
321123
|
+
'poloniex': _src_pro_poloniex_js__WEBPACK_IMPORTED_MODULE_159__/* ["default"] */ .Z,
|
|
321124
|
+
'poloniexfutures': _src_pro_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_160__/* ["default"] */ .Z,
|
|
321125
|
+
'probit': _src_pro_probit_js__WEBPACK_IMPORTED_MODULE_161__/* ["default"] */ .Z,
|
|
321126
|
+
'upbit': _src_pro_upbit_js__WEBPACK_IMPORTED_MODULE_162__/* ["default"] */ .Z,
|
|
321127
|
+
'wazirx': _src_pro_wazirx_js__WEBPACK_IMPORTED_MODULE_163__/* ["default"] */ .Z,
|
|
321128
|
+
'whitebit': _src_pro_whitebit_js__WEBPACK_IMPORTED_MODULE_164__/* ["default"] */ .Z,
|
|
321129
|
+
'woo': _src_pro_woo_js__WEBPACK_IMPORTED_MODULE_165__/* ["default"] */ .Z,
|
|
318215
321130
|
};
|
|
318216
321131
|
for (const exchange in pro) {
|
|
318217
321132
|
// const ccxtExchange = exchanges[exchange]
|
|
@@ -318224,7 +321139,7 @@ for (const exchange in pro) {
|
|
|
318224
321139
|
pro.exchanges = Object.keys(pro);
|
|
318225
321140
|
pro['Exchange'] = _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e; // now the same for rest and ts
|
|
318226
321141
|
//-----------------------------------------------------------------------------
|
|
318227
|
-
const ccxt = Object.assign({ version, Exchange: _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e, Precise:
|
|
321142
|
+
const ccxt = Object.assign({ version, Exchange: _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e, Precise: _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_166__/* .Precise */ .O, 'exchanges': Object.keys(exchanges), 'pro': pro }, exchanges, _src_base_functions_js__WEBPACK_IMPORTED_MODULE_167__, _src_base_errors_js__WEBPACK_IMPORTED_MODULE_168__);
|
|
318228
321143
|
|
|
318229
321144
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ccxt);
|
|
318230
321145
|
//-----------------------------------------------------------------------------
|