ccxt 4.2.57 → 4.2.59
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/CHANGELOG.md +83 -0
- package/README.md +4 -5
- package/build.sh +1 -1
- package/cleanup.sh +3 -0
- package/dist/ccxt.browser.js +772 -497
- package/dist/ccxt.browser.min.js +7 -7
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/alpaca.js +90 -88
- package/dist/cjs/src/base/Exchange.js +24 -1
- package/dist/cjs/src/binance.js +43 -30
- package/dist/cjs/src/bingx.js +15 -4
- package/dist/cjs/src/bitget.js +72 -57
- package/dist/cjs/src/bitmex.js +13 -29
- package/dist/cjs/src/bitrue.js +24 -15
- package/dist/cjs/src/blofin.js +25 -2
- package/dist/cjs/src/bybit.js +11 -3
- package/dist/cjs/src/coinbase.js +24 -14
- package/dist/cjs/src/currencycom.js +15 -5
- package/dist/cjs/src/delta.js +14 -1
- package/dist/cjs/src/gate.js +1 -1
- package/dist/cjs/src/hitbtc.js +12 -1
- package/dist/cjs/src/krakenfutures.js +22 -7
- package/dist/cjs/src/kuna.js +14 -11
- package/dist/cjs/src/lbank.js +1 -1
- package/dist/cjs/src/mexc.js +20 -20
- package/dist/cjs/src/okx.js +32 -2
- package/dist/cjs/src/phemex.js +1 -1
- package/dist/cjs/src/pro/alpaca.js +1 -1
- package/dist/cjs/src/pro/binance.js +1 -1
- package/dist/cjs/src/pro/bitfinex2.js +1 -1
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/bitmart.js +51 -89
- package/dist/cjs/src/pro/bitvavo.js +1 -1
- package/dist/cjs/src/pro/bybit.js +1 -1
- package/dist/cjs/src/pro/coinex.js +1 -1
- package/dist/cjs/src/pro/cryptocom.js +1 -1
- package/dist/cjs/src/pro/deribit.js +201 -84
- package/dist/cjs/src/pro/gate.js +1 -1
- package/dist/cjs/src/pro/independentreserve.js +1 -1
- package/dist/cjs/src/pro/kraken.js +1 -1
- package/dist/cjs/src/pro/kucoinfutures.js +1 -1
- package/dist/cjs/src/pro/mexc.js +5 -3
- package/dist/cjs/src/pro/okx.js +1 -1
- package/dist/cjs/src/pro/whitebit.js +4 -6
- package/dist/cjs/src/pro/woo.js +1 -1
- package/dist/cjs/src/probit.js +1 -1
- package/dist/cjs/src/wavesexchange.js +1 -1
- package/dist/cjs/src/woo.js +22 -6
- package/js/ccxt.d.ts +3 -3
- package/js/ccxt.js +1 -1
- package/js/src/alpaca.js +90 -88
- package/js/src/base/Exchange.d.ts +6 -4
- package/js/src/base/Exchange.js +24 -1
- package/js/src/base/types.d.ts +9 -0
- package/js/src/binance.d.ts +3 -2
- package/js/src/binance.js +43 -30
- package/js/src/bingx.d.ts +3 -2
- package/js/src/bingx.js +15 -4
- package/js/src/bitget.d.ts +3 -2
- package/js/src/bitget.js +72 -57
- package/js/src/bitmex.d.ts +3 -3
- package/js/src/bitmex.js +13 -29
- package/js/src/bitrue.js +24 -15
- package/js/src/blofin.d.ts +3 -2
- package/js/src/blofin.js +25 -2
- package/js/src/bybit.d.ts +3 -6
- package/js/src/bybit.js +11 -3
- package/js/src/coinbase.js +24 -14
- package/js/src/currencycom.d.ts +3 -2
- package/js/src/currencycom.js +15 -5
- package/js/src/delta.d.ts +3 -2
- package/js/src/delta.js +14 -1
- package/js/src/gate.js +1 -1
- package/js/src/hitbtc.d.ts +3 -2
- package/js/src/hitbtc.js +12 -1
- package/js/src/krakenfutures.d.ts +3 -2
- package/js/src/krakenfutures.js +22 -7
- package/js/src/kuna.js +14 -11
- package/js/src/lbank.js +1 -1
- package/js/src/mexc.d.ts +3 -13
- package/js/src/mexc.js +20 -20
- package/js/src/okx.d.ts +3 -2
- package/js/src/okx.js +32 -2
- package/js/src/phemex.js +1 -1
- package/js/src/pro/alpaca.js +1 -1
- package/js/src/pro/binance.js +1 -1
- package/js/src/pro/bitfinex2.js +1 -1
- package/js/src/pro/bitget.js +1 -1
- package/js/src/pro/bitmart.d.ts +2 -2
- package/js/src/pro/bitmart.js +51 -89
- package/js/src/pro/bitvavo.js +1 -1
- package/js/src/pro/bybit.js +1 -1
- package/js/src/pro/coinex.js +1 -1
- package/js/src/pro/cryptocom.js +1 -1
- package/js/src/pro/deribit.d.ts +5 -0
- package/js/src/pro/deribit.js +202 -85
- package/js/src/pro/gate.js +1 -1
- package/js/src/pro/independentreserve.js +1 -1
- package/js/src/pro/kraken.js +1 -1
- package/js/src/pro/kucoinfutures.js +1 -1
- package/js/src/pro/mexc.js +6 -4
- package/js/src/pro/okx.js +1 -1
- package/js/src/pro/whitebit.js +4 -6
- package/js/src/pro/woo.js +1 -1
- package/js/src/probit.js +1 -1
- package/js/src/wavesexchange.js +1 -1
- package/js/src/woo.d.ts +3 -5
- package/js/src/woo.js +22 -6
- package/package.json +1 -1
- package/skip-tests.json +8 -3
package/js/src/coinbase.js
CHANGED
|
@@ -3068,10 +3068,12 @@ export default class coinbase extends Exchange {
|
|
|
3068
3068
|
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
3069
3069
|
*/
|
|
3070
3070
|
await this.loadMarkets();
|
|
3071
|
+
const maxLimit = 300;
|
|
3072
|
+
limit = (limit === undefined) ? maxLimit : Math.min(limit, maxLimit);
|
|
3071
3073
|
let paginate = false;
|
|
3072
3074
|
[paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
|
|
3073
3075
|
if (paginate) {
|
|
3074
|
-
return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params,
|
|
3076
|
+
return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, maxLimit - 1);
|
|
3075
3077
|
}
|
|
3076
3078
|
const market = this.market(symbol);
|
|
3077
3079
|
const request = {
|
|
@@ -3081,20 +3083,20 @@ export default class coinbase extends Exchange {
|
|
|
3081
3083
|
const until = this.safeValueN(params, ['until', 'till', 'end']);
|
|
3082
3084
|
params = this.omit(params, ['until', 'till']);
|
|
3083
3085
|
const duration = this.parseTimeframe(timeframe);
|
|
3084
|
-
const
|
|
3086
|
+
const requestedDuration = limit * duration;
|
|
3085
3087
|
let sinceString = undefined;
|
|
3086
3088
|
if (since !== undefined) {
|
|
3087
3089
|
sinceString = this.numberToString(this.parseToInt(since / 1000));
|
|
3088
3090
|
}
|
|
3089
3091
|
else {
|
|
3090
3092
|
const now = this.seconds().toString();
|
|
3091
|
-
sinceString = Precise.stringSub(now,
|
|
3093
|
+
sinceString = Precise.stringSub(now, requestedDuration.toString());
|
|
3092
3094
|
}
|
|
3093
3095
|
request['start'] = sinceString;
|
|
3094
3096
|
let endString = this.numberToString(until);
|
|
3095
3097
|
if (until === undefined) {
|
|
3096
3098
|
// 300 candles max
|
|
3097
|
-
endString = Precise.stringAdd(sinceString,
|
|
3099
|
+
endString = Precise.stringAdd(sinceString, requestedDuration.toString());
|
|
3098
3100
|
}
|
|
3099
3101
|
request['end'] = endString;
|
|
3100
3102
|
const response = await this.v3PrivateGetBrokerageProductsProductIdCandles(this.extend(request, params));
|
|
@@ -3154,8 +3156,19 @@ export default class coinbase extends Exchange {
|
|
|
3154
3156
|
const request = {
|
|
3155
3157
|
'product_id': market['id'],
|
|
3156
3158
|
};
|
|
3159
|
+
if (since !== undefined) {
|
|
3160
|
+
request['start'] = this.numberToString(this.parseToInt(since / 1000));
|
|
3161
|
+
}
|
|
3157
3162
|
if (limit !== undefined) {
|
|
3158
|
-
request['limit'] = limit;
|
|
3163
|
+
request['limit'] = Math.min(limit, 1000);
|
|
3164
|
+
}
|
|
3165
|
+
let until = undefined;
|
|
3166
|
+
[until, params] = this.handleOptionAndParams(params, 'fetchTrades', 'until');
|
|
3167
|
+
if (until !== undefined) {
|
|
3168
|
+
request['end'] = this.numberToString(this.parseToInt(until / 1000));
|
|
3169
|
+
}
|
|
3170
|
+
else if (since !== undefined) {
|
|
3171
|
+
throw new ArgumentsRequired(this.id + ' fetchTrades() requires a `until` parameter when you use `since` argument');
|
|
3159
3172
|
}
|
|
3160
3173
|
const response = await this.v3PrivateGetBrokerageProductsProductIdTicker(this.extend(request, params));
|
|
3161
3174
|
//
|
|
@@ -3289,7 +3302,7 @@ export default class coinbase extends Exchange {
|
|
|
3289
3302
|
// }
|
|
3290
3303
|
// }
|
|
3291
3304
|
//
|
|
3292
|
-
const data = this.
|
|
3305
|
+
const data = this.safeDict(response, 'pricebook', {});
|
|
3293
3306
|
const time = this.safeString(data, 'time');
|
|
3294
3307
|
const timestamp = this.parse8601(time);
|
|
3295
3308
|
return this.parseOrderBook(data, symbol, timestamp, 'bids', 'asks', 'price', 'size');
|
|
@@ -3742,7 +3755,7 @@ export default class coinbase extends Exchange {
|
|
|
3742
3755
|
}
|
|
3743
3756
|
else {
|
|
3744
3757
|
this.checkRequiredCredentials();
|
|
3745
|
-
const
|
|
3758
|
+
const timestampString = this.seconds().toString();
|
|
3746
3759
|
let payload = '';
|
|
3747
3760
|
if (method !== 'GET') {
|
|
3748
3761
|
if (Object.keys(query).length) {
|
|
@@ -3750,17 +3763,14 @@ export default class coinbase extends Exchange {
|
|
|
3750
3763
|
payload = body;
|
|
3751
3764
|
}
|
|
3752
3765
|
}
|
|
3753
|
-
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
}
|
|
3757
|
-
}
|
|
3758
|
-
const auth = nonce + method + savedPath + payload;
|
|
3766
|
+
// 'GET' doesn't need payload in the signature. inside url is enough
|
|
3767
|
+
// https://docs.cloud.coinbase.com/advanced-trade-api/docs/auth#example-request
|
|
3768
|
+
const auth = timestampString + method + savedPath + payload;
|
|
3759
3769
|
const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256);
|
|
3760
3770
|
headers = {
|
|
3761
3771
|
'CB-ACCESS-KEY': this.apiKey,
|
|
3762
3772
|
'CB-ACCESS-SIGN': signature,
|
|
3763
|
-
'CB-ACCESS-TIMESTAMP':
|
|
3773
|
+
'CB-ACCESS-TIMESTAMP': timestampString,
|
|
3764
3774
|
'Content-Type': 'application/json',
|
|
3765
3775
|
};
|
|
3766
3776
|
}
|
package/js/src/currencycom.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/currencycom.js';
|
|
2
|
-
import type { Balances, Currency, Int, Market, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction } from './base/types.js';
|
|
2
|
+
import type { Balances, Currency, Int, Market, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class currencycom
|
|
5
5
|
* @augments Exchange
|
|
@@ -59,7 +59,8 @@ export default class currencycom extends Exchange {
|
|
|
59
59
|
};
|
|
60
60
|
parseLedgerEntryStatus(status: any): string;
|
|
61
61
|
parseLedgerEntryType(type: any): string;
|
|
62
|
-
fetchLeverage(symbol: string, params?: {}): Promise<
|
|
62
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
63
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
63
64
|
fetchDepositAddress(code: string, params?: {}): Promise<{
|
|
64
65
|
currency: string;
|
|
65
66
|
address: string;
|
package/js/src/currencycom.js
CHANGED
|
@@ -1809,12 +1809,22 @@ export default class currencycom extends Exchange {
|
|
|
1809
1809
|
};
|
|
1810
1810
|
const response = await this.privateGetV2LeverageSettings(this.extend(request, params));
|
|
1811
1811
|
//
|
|
1812
|
-
//
|
|
1813
|
-
//
|
|
1814
|
-
//
|
|
1815
|
-
//
|
|
1812
|
+
// {
|
|
1813
|
+
// "values": [ 1, 2, 5, 10, ],
|
|
1814
|
+
// "value": "10",
|
|
1815
|
+
// }
|
|
1816
1816
|
//
|
|
1817
|
-
return this.
|
|
1817
|
+
return this.parseLeverage(response, market);
|
|
1818
|
+
}
|
|
1819
|
+
parseLeverage(leverage, market = undefined) {
|
|
1820
|
+
const leverageValue = this.safeInteger(leverage, 'value');
|
|
1821
|
+
return {
|
|
1822
|
+
'info': leverage,
|
|
1823
|
+
'symbol': market['symbol'],
|
|
1824
|
+
'marginMode': undefined,
|
|
1825
|
+
'longLeverage': leverageValue,
|
|
1826
|
+
'shortLeverage': leverageValue,
|
|
1827
|
+
};
|
|
1818
1828
|
}
|
|
1819
1829
|
async fetchDepositAddress(code, params = {}) {
|
|
1820
1830
|
/**
|
package/js/src/delta.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/delta.js';
|
|
2
|
-
import type { Balances, Currency, Greeks, Int, Market, MarketInterface, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Position } from './base/types.js';
|
|
2
|
+
import type { Balances, Currency, Greeks, Int, Market, MarketInterface, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Position, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class delta
|
|
5
5
|
* @augments Exchange
|
|
@@ -153,7 +153,8 @@ export default class delta extends Exchange {
|
|
|
153
153
|
};
|
|
154
154
|
fetchOpenInterest(symbol: string, params?: {}): Promise<import("./base/types.js").OpenInterest>;
|
|
155
155
|
parseOpenInterest(interest: any, market?: Market): import("./base/types.js").OpenInterest;
|
|
156
|
-
fetchLeverage(symbol: string, params?: {}): Promise<
|
|
156
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
157
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
157
158
|
setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
|
|
158
159
|
fetchSettlementHistory(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<any>;
|
|
159
160
|
parseSettlement(settlement: any, market: any): {
|
package/js/src/delta.js
CHANGED
|
@@ -2814,6 +2814,7 @@ export default class delta extends Exchange {
|
|
|
2814
2814
|
const request = {
|
|
2815
2815
|
'product_id': market['numericId'],
|
|
2816
2816
|
};
|
|
2817
|
+
const response = await this.privateGetProductsProductIdOrdersLeverage(this.extend(request, params));
|
|
2817
2818
|
//
|
|
2818
2819
|
// {
|
|
2819
2820
|
// "result": {
|
|
@@ -2827,7 +2828,19 @@ export default class delta extends Exchange {
|
|
|
2827
2828
|
// "success": true
|
|
2828
2829
|
// }
|
|
2829
2830
|
//
|
|
2830
|
-
|
|
2831
|
+
const result = this.safeDict(response, 'result', {});
|
|
2832
|
+
return this.parseLeverage(result, market);
|
|
2833
|
+
}
|
|
2834
|
+
parseLeverage(leverage, market = undefined) {
|
|
2835
|
+
const marketId = this.safeString(leverage, 'index_symbol');
|
|
2836
|
+
const leverageValue = this.safeInteger(leverage, 'leverage');
|
|
2837
|
+
return {
|
|
2838
|
+
'info': leverage,
|
|
2839
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
2840
|
+
'marginMode': this.safeStringLower(leverage, 'margin_mode'),
|
|
2841
|
+
'longLeverage': leverageValue,
|
|
2842
|
+
'shortLeverage': leverageValue,
|
|
2843
|
+
};
|
|
2831
2844
|
}
|
|
2832
2845
|
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
2833
2846
|
/**
|
package/js/src/gate.js
CHANGED
|
@@ -962,7 +962,7 @@ export default class gate extends Exchange {
|
|
|
962
962
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
963
963
|
* @returns {object[]} an array of objects representing market data
|
|
964
964
|
*/
|
|
965
|
-
const sandboxMode = this.
|
|
965
|
+
const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);
|
|
966
966
|
let rawPromises = [
|
|
967
967
|
this.fetchContractMarkets(params),
|
|
968
968
|
this.fetchOptionMarkets(params),
|
package/js/src/hitbtc.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/hitbtc.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, FundingRateHistory, OHLCV, Ticker, Order, OrderBook, Dictionary, Position, Str, Trade, Balances, Transaction, MarginMode, Tickers, Strings, Market, Currency, MarginModes } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, FundingRateHistory, OHLCV, Ticker, Order, OrderBook, Dictionary, Position, Str, Trade, Balances, Transaction, MarginMode, Tickers, Strings, Market, Currency, MarginModes, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class hitbtc
|
|
5
5
|
* @augments Exchange
|
|
@@ -143,7 +143,8 @@ export default class hitbtc extends Exchange {
|
|
|
143
143
|
};
|
|
144
144
|
reduceMargin(symbol: string, amount: any, params?: {}): Promise<any>;
|
|
145
145
|
addMargin(symbol: string, amount: any, params?: {}): Promise<any>;
|
|
146
|
-
fetchLeverage(symbol: string, params?: {}): Promise<
|
|
146
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
147
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
147
148
|
setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
|
|
148
149
|
fetchDepositWithdrawFees(codes?: Strings, params?: {}): Promise<any>;
|
|
149
150
|
parseDepositWithdrawFee(fee: any, currency?: Currency): any;
|
package/js/src/hitbtc.js
CHANGED
|
@@ -3402,7 +3402,18 @@ export default class hitbtc extends Exchange {
|
|
|
3402
3402
|
// ]
|
|
3403
3403
|
// }
|
|
3404
3404
|
//
|
|
3405
|
-
return this.
|
|
3405
|
+
return this.parseLeverage(response, market);
|
|
3406
|
+
}
|
|
3407
|
+
parseLeverage(leverage, market = undefined) {
|
|
3408
|
+
const marketId = this.safeString(leverage, 'symbol');
|
|
3409
|
+
const leverageValue = this.safeInteger(leverage, 'leverage');
|
|
3410
|
+
return {
|
|
3411
|
+
'info': leverage,
|
|
3412
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
3413
|
+
'marginMode': this.safeStringLower(leverage, 'type'),
|
|
3414
|
+
'longLeverage': leverageValue,
|
|
3415
|
+
'shortLeverage': leverageValue,
|
|
3416
|
+
};
|
|
3406
3417
|
}
|
|
3407
3418
|
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
3408
3419
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/krakenfutures.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, OHLCV, Trade, FundingRateHistory, OrderRequest, Order, Balances, Str, Ticker, OrderBook, Tickers, Strings, Market, Currency } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, OHLCV, Trade, FundingRateHistory, OrderRequest, Order, Balances, Str, Ticker, OrderBook, Tickers, Strings, Market, Currency, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class krakenfutures
|
|
5
5
|
* @augments Exchange
|
|
@@ -94,7 +94,8 @@ export default class krakenfutures extends Exchange {
|
|
|
94
94
|
transferOut(code: string, amount: any, params?: {}): Promise<TransferEntry>;
|
|
95
95
|
transfer(code: string, amount: number, fromAccount: string, toAccount: string, params?: {}): Promise<TransferEntry>;
|
|
96
96
|
setLeverage(leverage: Int, symbol?: Str, params?: {}): Promise<any>;
|
|
97
|
-
fetchLeverage(symbol
|
|
97
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
98
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
98
99
|
handleErrors(code: any, reason: any, url: any, method: any, headers: any, body: any, response: any, requestHeaders: any, requestBody: any): any;
|
|
99
100
|
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
100
101
|
url: string;
|
package/js/src/krakenfutures.js
CHANGED
|
@@ -2459,7 +2459,7 @@ export default class krakenfutures extends Exchange {
|
|
|
2459
2459
|
//
|
|
2460
2460
|
return await this.privatePutLeveragepreferences(this.extend(request, params));
|
|
2461
2461
|
}
|
|
2462
|
-
async fetchLeverage(symbol
|
|
2462
|
+
async fetchLeverage(symbol, params = {}) {
|
|
2463
2463
|
/**
|
|
2464
2464
|
* @method
|
|
2465
2465
|
* @name krakenfutures#fetchLeverage
|
|
@@ -2473,17 +2473,32 @@ export default class krakenfutures extends Exchange {
|
|
|
2473
2473
|
throw new ArgumentsRequired(this.id + ' fetchLeverage() requires a symbol argument');
|
|
2474
2474
|
}
|
|
2475
2475
|
await this.loadMarkets();
|
|
2476
|
+
const market = this.market(symbol);
|
|
2476
2477
|
const request = {
|
|
2477
2478
|
'symbol': this.marketId(symbol).toUpperCase(),
|
|
2478
2479
|
};
|
|
2480
|
+
const response = await this.privateGetLeveragepreferences(this.extend(request, params));
|
|
2479
2481
|
//
|
|
2480
|
-
//
|
|
2481
|
-
//
|
|
2482
|
-
//
|
|
2483
|
-
//
|
|
2484
|
-
//
|
|
2482
|
+
// {
|
|
2483
|
+
// "result": "success",
|
|
2484
|
+
// "serverTime": "2023-08-01T09:54:08.900Z",
|
|
2485
|
+
// "leveragePreferences": [ { symbol: "PF_LTCUSD", maxLeverage: "5.00" } ]
|
|
2486
|
+
// }
|
|
2485
2487
|
//
|
|
2486
|
-
|
|
2488
|
+
const leveragePreferences = this.safeList(response, 'leveragePreferences', []);
|
|
2489
|
+
const data = this.safeDict(leveragePreferences, 0, {});
|
|
2490
|
+
return this.parseLeverage(data, market);
|
|
2491
|
+
}
|
|
2492
|
+
parseLeverage(leverage, market = undefined) {
|
|
2493
|
+
const marketId = this.safeString(leverage, 'symbol');
|
|
2494
|
+
const leverageValue = this.safeInteger(leverage, 'maxLeverage');
|
|
2495
|
+
return {
|
|
2496
|
+
'info': leverage,
|
|
2497
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
2498
|
+
'marginMode': undefined,
|
|
2499
|
+
'longLeverage': leverageValue,
|
|
2500
|
+
'shortLeverage': leverageValue,
|
|
2501
|
+
};
|
|
2487
2502
|
}
|
|
2488
2503
|
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
2489
2504
|
if (response === undefined) {
|
package/js/src/kuna.js
CHANGED
|
@@ -809,7 +809,7 @@ export default class kuna extends Exchange {
|
|
|
809
809
|
await this.loadMarkets();
|
|
810
810
|
const market = this.market(symbol);
|
|
811
811
|
const request = {
|
|
812
|
-
'
|
|
812
|
+
'pairs': market['id'],
|
|
813
813
|
};
|
|
814
814
|
if (limit !== undefined) {
|
|
815
815
|
request['limit'] = limit;
|
|
@@ -817,18 +817,21 @@ export default class kuna extends Exchange {
|
|
|
817
817
|
const response = await this.v4PublicGetTradePublicBookPairs(this.extend(request, params));
|
|
818
818
|
//
|
|
819
819
|
// {
|
|
820
|
-
//
|
|
821
|
-
//
|
|
822
|
-
//
|
|
823
|
-
//
|
|
824
|
-
//
|
|
825
|
-
//
|
|
826
|
-
//
|
|
827
|
-
//
|
|
828
|
-
//
|
|
820
|
+
// 'data': [
|
|
821
|
+
// {
|
|
822
|
+
// 'createdAt': '2024-03-02T00:10:49.385Z',
|
|
823
|
+
// 'id': '3b42878a-3688-4bc1-891e-5cc2fc902142',
|
|
824
|
+
// 'matchPrice': '62181.31',
|
|
825
|
+
// 'matchQuantity': '0.00568',
|
|
826
|
+
// 'pair': 'BTC_USDT',
|
|
827
|
+
// 'quoteQuantity': '353.1898408',
|
|
828
|
+
// 'side': 'Bid'
|
|
829
|
+
// },
|
|
830
|
+
// ...
|
|
831
|
+
// ]
|
|
829
832
|
// }
|
|
830
833
|
//
|
|
831
|
-
const data = this.
|
|
834
|
+
const data = this.safeList(response, 'data', []);
|
|
832
835
|
return this.parseTrades(data, market, since, limit);
|
|
833
836
|
}
|
|
834
837
|
parseTrade(trade, market = undefined) {
|
package/js/src/lbank.js
CHANGED
|
@@ -2694,7 +2694,7 @@ export default class lbank extends Exchange {
|
|
|
2694
2694
|
const uppercaseHash = hash.toUpperCase();
|
|
2695
2695
|
let sign = undefined;
|
|
2696
2696
|
if (signatureMethod === 'RSA') {
|
|
2697
|
-
const cacheSecretAsPem = this.
|
|
2697
|
+
const cacheSecretAsPem = this.safeBool(this.options, 'cacheSecretAsPem', true);
|
|
2698
2698
|
let pem = undefined;
|
|
2699
2699
|
if (cacheSecretAsPem) {
|
|
2700
2700
|
pem = this.safeValue(this.options, 'pem');
|
package/js/src/mexc.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/mexc.js';
|
|
2
|
-
import type { TransferEntry, IndexType, Int, OrderSide, Balances, OrderType, OHLCV, FundingRateHistory, Position, OrderBook, OrderRequest, FundingHistory, Order, Str, Trade, Transaction, Ticker, Tickers, Strings, Market, Currency } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, IndexType, Int, OrderSide, Balances, OrderType, OHLCV, FundingRateHistory, Position, OrderBook, OrderRequest, FundingHistory, Order, Str, Trade, Transaction, Ticker, Tickers, Strings, Market, Currency, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class mexc
|
|
5
5
|
* @augments Exchange
|
|
@@ -172,18 +172,8 @@ export default class mexc extends Exchange {
|
|
|
172
172
|
parseTransactionFee(transaction: any, currency?: Currency): {};
|
|
173
173
|
fetchDepositWithdrawFees(codes?: Strings, params?: {}): Promise<any>;
|
|
174
174
|
parseDepositWithdrawFee(fee: any, currency?: Currency): any;
|
|
175
|
-
fetchLeverage(symbol: string, params?: {}): Promise<
|
|
176
|
-
|
|
177
|
-
symbol: string;
|
|
178
|
-
leverage: number;
|
|
179
|
-
marginMode: any;
|
|
180
|
-
}>;
|
|
181
|
-
parseLeverage(leverage: any, market?: Market): {
|
|
182
|
-
info: any;
|
|
183
|
-
symbol: string;
|
|
184
|
-
leverage: number;
|
|
185
|
-
marginMode: any;
|
|
186
|
-
};
|
|
175
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
176
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
187
177
|
handleMarginModeAndParams(methodName: any, params?: {}, defaultValue?: any): any[];
|
|
188
178
|
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
189
179
|
url: any;
|
package/js/src/mexc.js
CHANGED
|
@@ -5426,30 +5426,30 @@ export default class mexc extends Exchange {
|
|
|
5426
5426
|
// }
|
|
5427
5427
|
//
|
|
5428
5428
|
const data = this.safeList(response, 'data', []);
|
|
5429
|
-
|
|
5430
|
-
return this.parseLeverage(longLeverage, market);
|
|
5429
|
+
return this.parseLeverage(data, market);
|
|
5431
5430
|
}
|
|
5432
5431
|
parseLeverage(leverage, market = undefined) {
|
|
5433
|
-
|
|
5434
|
-
|
|
5435
|
-
|
|
5436
|
-
|
|
5437
|
-
|
|
5438
|
-
|
|
5439
|
-
|
|
5440
|
-
|
|
5441
|
-
|
|
5442
|
-
|
|
5443
|
-
|
|
5444
|
-
|
|
5445
|
-
|
|
5446
|
-
|
|
5447
|
-
|
|
5432
|
+
let marginMode = undefined;
|
|
5433
|
+
let longLeverage = undefined;
|
|
5434
|
+
let shortLeverage = undefined;
|
|
5435
|
+
for (let i = 0; i < leverage.length; i++) {
|
|
5436
|
+
const entry = leverage[i];
|
|
5437
|
+
const openType = this.safeInteger(entry, 'openType');
|
|
5438
|
+
const positionType = this.safeInteger(entry, 'positionType');
|
|
5439
|
+
if (positionType === 1) {
|
|
5440
|
+
longLeverage = this.safeInteger(entry, 'leverage');
|
|
5441
|
+
}
|
|
5442
|
+
else if (positionType === 2) {
|
|
5443
|
+
shortLeverage = this.safeInteger(entry, 'leverage');
|
|
5444
|
+
}
|
|
5445
|
+
marginMode = (openType === 1) ? 'isolated' : 'cross';
|
|
5446
|
+
}
|
|
5448
5447
|
return {
|
|
5449
5448
|
'info': leverage,
|
|
5450
5449
|
'symbol': market['symbol'],
|
|
5451
|
-
'
|
|
5452
|
-
'
|
|
5450
|
+
'marginMode': marginMode,
|
|
5451
|
+
'longLeverage': longLeverage,
|
|
5452
|
+
'shortLeverage': shortLeverage,
|
|
5453
5453
|
};
|
|
5454
5454
|
}
|
|
5455
5455
|
handleMarginModeAndParams(methodName, params = {}, defaultValue = undefined) {
|
|
@@ -5500,7 +5500,7 @@ export default class mexc extends Exchange {
|
|
|
5500
5500
|
'source': this.safeString(this.options, 'broker', 'CCXT'),
|
|
5501
5501
|
};
|
|
5502
5502
|
}
|
|
5503
|
-
if ((method === 'POST') || (method === 'PUT')) {
|
|
5503
|
+
if ((method === 'POST') || (method === 'PUT') || (method === 'DELETE')) {
|
|
5504
5504
|
headers['Content-Type'] = 'application/json';
|
|
5505
5505
|
}
|
|
5506
5506
|
}
|
package/js/src/okx.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/okx.js';
|
|
2
|
-
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency } from './base/types.js';
|
|
2
|
+
import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderRequest, FundingHistory, Str, Transaction, Ticker, OrderBook, Balances, Tickers, Market, Greeks, Strings, MarketInterface, Currency, Leverage } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class okx
|
|
5
5
|
* @augments Exchange
|
|
@@ -104,7 +104,8 @@ export default class okx extends Exchange {
|
|
|
104
104
|
fetchWithdrawal(id: string, code?: Str, params?: {}): Promise<Transaction>;
|
|
105
105
|
parseTransactionStatus(status: any): string;
|
|
106
106
|
parseTransaction(transaction: any, currency?: Currency): Transaction;
|
|
107
|
-
fetchLeverage(symbol: string, params?: {}): Promise<
|
|
107
|
+
fetchLeverage(symbol: string, params?: {}): Promise<Leverage>;
|
|
108
|
+
parseLeverage(leverage: any, market?: any): Leverage;
|
|
108
109
|
fetchPosition(symbol: string, params?: {}): Promise<import("./base/types.js").Position>;
|
|
109
110
|
fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
|
|
110
111
|
fetchPositionsForSymbol(symbol: string, params?: {}): Promise<import("./base/types.js").Position[]>;
|
package/js/src/okx.js
CHANGED
|
@@ -1560,7 +1560,7 @@ export default class okx extends Exchange {
|
|
|
1560
1560
|
// while fetchCurrencies is a public API method by design
|
|
1561
1561
|
// therefore we check the keys here
|
|
1562
1562
|
// and fallback to generating the currencies from the markets
|
|
1563
|
-
const isSandboxMode = this.
|
|
1563
|
+
const isSandboxMode = this.safeBool(this.options, 'sandboxMode', false);
|
|
1564
1564
|
if (!this.checkRequiredCredentials(false) || isSandboxMode) {
|
|
1565
1565
|
return undefined;
|
|
1566
1566
|
}
|
|
@@ -5164,7 +5164,37 @@ export default class okx extends Exchange {
|
|
|
5164
5164
|
// "msg": ""
|
|
5165
5165
|
// }
|
|
5166
5166
|
//
|
|
5167
|
-
|
|
5167
|
+
const data = this.safeList(response, 'data', []);
|
|
5168
|
+
return this.parseLeverage(data, market);
|
|
5169
|
+
}
|
|
5170
|
+
parseLeverage(leverage, market = undefined) {
|
|
5171
|
+
let marketId = undefined;
|
|
5172
|
+
let marginMode = undefined;
|
|
5173
|
+
let longLeverage = undefined;
|
|
5174
|
+
let shortLeverage = undefined;
|
|
5175
|
+
for (let i = 0; i < leverage.length; i++) {
|
|
5176
|
+
const entry = leverage[i];
|
|
5177
|
+
marginMode = this.safeStringLower(entry, 'mgnMode');
|
|
5178
|
+
marketId = this.safeString(entry, 'instId');
|
|
5179
|
+
const positionSide = this.safeStringLower(entry, 'posSide');
|
|
5180
|
+
if (positionSide === 'long') {
|
|
5181
|
+
longLeverage = this.safeInteger(entry, 'lever');
|
|
5182
|
+
}
|
|
5183
|
+
else if (positionSide === 'short') {
|
|
5184
|
+
shortLeverage = this.safeInteger(entry, 'lever');
|
|
5185
|
+
}
|
|
5186
|
+
else {
|
|
5187
|
+
longLeverage = this.safeInteger(entry, 'lever');
|
|
5188
|
+
shortLeverage = this.safeInteger(entry, 'lever');
|
|
5189
|
+
}
|
|
5190
|
+
}
|
|
5191
|
+
return {
|
|
5192
|
+
'info': leverage,
|
|
5193
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
5194
|
+
'marginMode': marginMode,
|
|
5195
|
+
'longLeverage': longLeverage,
|
|
5196
|
+
'shortLeverage': shortLeverage,
|
|
5197
|
+
};
|
|
5168
5198
|
}
|
|
5169
5199
|
async fetchPosition(symbol, params = {}) {
|
|
5170
5200
|
/**
|
package/js/src/phemex.js
CHANGED
|
@@ -2422,7 +2422,7 @@ export default class phemex extends Exchange {
|
|
|
2422
2422
|
}
|
|
2423
2423
|
parseOrder(order, market = undefined) {
|
|
2424
2424
|
const isSwap = this.safeBool(market, 'swap', false);
|
|
2425
|
-
const hasPnl = ('closedPnl' in order);
|
|
2425
|
+
const hasPnl = ('closedPnl' in order) || ('closedPnlRv' in order) || ('totalPnlRv' in order);
|
|
2426
2426
|
if (isSwap || hasPnl) {
|
|
2427
2427
|
return this.parseSwapOrder(order, market);
|
|
2428
2428
|
}
|
package/js/src/pro/alpaca.js
CHANGED
|
@@ -613,7 +613,7 @@ export default class alpaca extends alpacaRest {
|
|
|
613
613
|
for (let i = 0; i < message.length; i++) {
|
|
614
614
|
const data = message[i];
|
|
615
615
|
const T = this.safeString(data, 'T');
|
|
616
|
-
const msg = this.
|
|
616
|
+
const msg = this.safeString(data, 'msg');
|
|
617
617
|
if (T === 'subscription') {
|
|
618
618
|
this.handleSubscription(client, data);
|
|
619
619
|
return;
|
package/js/src/pro/binance.js
CHANGED
|
@@ -2468,7 +2468,7 @@ export default class binance extends binanceRest {
|
|
|
2468
2468
|
this.setBalanceCache(client, type, isPortfolioMargin);
|
|
2469
2469
|
this.setPositionsCache(client, type, symbols, isPortfolioMargin);
|
|
2470
2470
|
const fetchPositionsSnapshot = this.handleOption('watchPositions', 'fetchPositionsSnapshot', true);
|
|
2471
|
-
const awaitPositionsSnapshot = this.
|
|
2471
|
+
const awaitPositionsSnapshot = this.safeBool('watchPositions', 'awaitPositionsSnapshot', true);
|
|
2472
2472
|
const cache = this.safeValue(this.positions, type);
|
|
2473
2473
|
if (fetchPositionsSnapshot && awaitPositionsSnapshot && cache === undefined) {
|
|
2474
2474
|
const snapshot = await client.future(type + ':fetchPositionsSnapshot');
|
package/js/src/pro/bitfinex2.js
CHANGED
|
@@ -56,7 +56,7 @@ export default class bitfinex2 extends bitfinex2Rest {
|
|
|
56
56
|
'symbol': marketId,
|
|
57
57
|
};
|
|
58
58
|
const result = await this.watch(url, messageHash, this.deepExtend(request, params), messageHash, { 'checksum': false });
|
|
59
|
-
const checksum = this.
|
|
59
|
+
const checksum = this.safeBool(this.options, 'checksum', true);
|
|
60
60
|
if (checksum && !client.subscriptions[messageHash]['checksum'] && (channel === 'book')) {
|
|
61
61
|
client.subscriptions[messageHash]['checksum'] = true;
|
|
62
62
|
await client.send({
|
package/js/src/pro/bitget.js
CHANGED
|
@@ -539,7 +539,7 @@ export default class bitget extends bitgetRest {
|
|
|
539
539
|
this.handleDeltas(storedOrderBook['bids'], bids);
|
|
540
540
|
storedOrderBook['timestamp'] = timestamp;
|
|
541
541
|
storedOrderBook['datetime'] = this.iso8601(timestamp);
|
|
542
|
-
const checksum = this.
|
|
542
|
+
const checksum = this.safeBool(this.options, 'checksum', true);
|
|
543
543
|
const isSnapshot = this.safeString(message, 'action') === 'snapshot'; // snapshot does not have a checksum
|
|
544
544
|
if (!isSnapshot && checksum) {
|
|
545
545
|
const storedAsks = storedOrderBook['asks'];
|
package/js/src/pro/bitmart.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import Client from '../base/ws/Client.js';
|
|
|
4
4
|
export default class bitmart extends bitmartRest {
|
|
5
5
|
describe(): any;
|
|
6
6
|
subscribe(channel: any, symbol: any, type: any, params?: {}): Promise<any>;
|
|
7
|
-
subscribeMultiple(channel: string, type: string, symbols
|
|
7
|
+
subscribeMultiple(channel: string, type: string, symbols?: Strings, params?: {}): Promise<any>;
|
|
8
8
|
watchBalance(params?: {}): Promise<Balances>;
|
|
9
9
|
setBalanceCache(client: Client, type: any, subscribeHash: any): void;
|
|
10
10
|
loadBalanceSnapshot(client: any, messageHash: any, type: any): Promise<void>;
|
|
@@ -23,9 +23,9 @@ export default class bitmart extends bitmartRest {
|
|
|
23
23
|
handlePositions(client: Client, message: any): void;
|
|
24
24
|
parseWsPosition(position: any, market?: Market): Position;
|
|
25
25
|
handleTrade(client: Client, message: any): void;
|
|
26
|
+
handleTradeLoop(entry: any): string;
|
|
26
27
|
parseWsTrade(trade: any, market?: Market): Trade;
|
|
27
28
|
handleTicker(client: Client, message: any): void;
|
|
28
|
-
resolveMessageHashesForSymbol(client: any, symbol: any, result: any, prexif: any): void;
|
|
29
29
|
parseWsSwapTicker(ticker: any, market?: Market): Ticker;
|
|
30
30
|
watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
31
31
|
handleOHLCV(client: Client, message: any): void;
|