ccxt 4.2.19 → 4.2.21
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 +98 -98
- package/dist/ccxt.browser.js +1119 -364
- package/dist/ccxt.browser.min.js +6 -6
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +47 -4
- package/dist/cjs/src/base/ws/WsClient.js +3 -1
- package/dist/cjs/src/binance.js +2 -1
- package/dist/cjs/src/binanceus.js +17 -0
- package/dist/cjs/src/bingx.js +2 -1
- package/dist/cjs/src/bitget.js +25 -31
- package/dist/cjs/src/bitteam.js +1 -1
- package/dist/cjs/src/bitvavo.js +271 -172
- package/dist/cjs/src/blockchaincom.js +3 -1
- package/dist/cjs/src/bybit.js +0 -28
- package/dist/cjs/src/delta.js +0 -18
- package/dist/cjs/src/gate.js +32 -26
- package/dist/cjs/src/kucoinfutures.js +9 -9
- package/dist/cjs/src/novadax.js +26 -22
- package/dist/cjs/src/okx.js +0 -18
- package/dist/cjs/src/phemex.js +2 -1
- package/dist/cjs/src/pro/bitopro.js +7 -3
- package/dist/cjs/src/pro/bitvavo.js +668 -22
- package/dist/cjs/src/pro/lbank.js +1 -1
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/binance.d.ts +1 -0
- package/js/src/abstract/binancecoinm.d.ts +1 -0
- package/js/src/abstract/binanceus.d.ts +1 -0
- package/js/src/abstract/binanceusdm.d.ts +1 -0
- package/js/src/abstract/bitpanda.js +11 -0
- package/js/src/abstract/gate.d.ts +1 -0
- package/js/src/abstract/gateio.d.ts +1 -0
- package/js/src/abstract/novadax.d.ts +5 -1
- package/js/src/abstract/phemex.d.ts +1 -0
- package/js/src/base/Exchange.d.ts +15 -1
- package/js/src/base/Exchange.js +47 -4
- package/js/src/base/ws/WsClient.js +3 -2
- package/js/src/binance.js +2 -1
- package/js/src/binanceus.js +17 -0
- package/js/src/bingx.js +2 -1
- package/js/src/bitget.d.ts +1 -1
- package/js/src/bitget.js +25 -31
- package/js/src/bitteam.js +1 -1
- package/js/src/bitvavo.d.ts +14 -2
- package/js/src/bitvavo.js +271 -172
- package/js/src/blockchaincom.js +3 -1
- package/js/src/bybit.d.ts +0 -1
- package/js/src/bybit.js +1 -29
- package/js/src/delta.d.ts +0 -1
- package/js/src/delta.js +0 -18
- package/js/src/gate.d.ts +1 -1
- package/js/src/gate.js +32 -26
- package/js/src/kucoinfutures.d.ts +6 -6
- package/js/src/kucoinfutures.js +9 -9
- package/js/src/novadax.js +26 -22
- package/js/src/okx.d.ts +0 -1
- package/js/src/okx.js +0 -18
- package/js/src/phemex.js +2 -1
- package/js/src/pro/bitopro.js +7 -3
- package/js/src/pro/bitvavo.d.ts +35 -2
- package/js/src/pro/bitvavo.js +669 -23
- package/js/src/pro/lbank.js +1 -1
- package/package.json +1 -1
- package/skip-tests.json +2 -1
package/js/src/bybit.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
import Exchange from './abstract/bybit.js';
|
|
9
9
|
import { TICK_SIZE } from './base/functions/number.js';
|
|
10
|
-
import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout,
|
|
10
|
+
import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, MarginModeAlreadySet, NoChange } from './base/errors.js';
|
|
11
11
|
import { Precise } from './base/Precise.js';
|
|
12
12
|
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
13
13
|
import { rsa } from './base/functions/rsa.js';
|
|
@@ -1251,34 +1251,6 @@ export default class bybit extends Exchange {
|
|
|
1251
1251
|
'info': undefined,
|
|
1252
1252
|
};
|
|
1253
1253
|
}
|
|
1254
|
-
market(symbol) {
|
|
1255
|
-
if (this.markets === undefined) {
|
|
1256
|
-
throw new ExchangeError(this.id + ' markets not loaded');
|
|
1257
|
-
}
|
|
1258
|
-
if (typeof symbol === 'string') {
|
|
1259
|
-
if (symbol in this.markets) {
|
|
1260
|
-
return this.markets[symbol];
|
|
1261
|
-
}
|
|
1262
|
-
else if (symbol in this.markets_by_id) {
|
|
1263
|
-
const markets = this.markets_by_id[symbol];
|
|
1264
|
-
let defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
|
|
1265
|
-
if (defaultType === 'future') {
|
|
1266
|
-
defaultType = 'contract';
|
|
1267
|
-
}
|
|
1268
|
-
for (let i = 0; i < markets.length; i++) {
|
|
1269
|
-
const market = markets[i];
|
|
1270
|
-
if (market[defaultType]) {
|
|
1271
|
-
return market;
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
|
-
return markets[0];
|
|
1275
|
-
}
|
|
1276
|
-
else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
|
|
1277
|
-
return this.createExpiredOptionMarket(symbol);
|
|
1278
|
-
}
|
|
1279
|
-
}
|
|
1280
|
-
throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
|
|
1281
|
-
}
|
|
1282
1254
|
safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
|
|
1283
1255
|
const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
|
|
1284
1256
|
if (isOption && !(marketId in this.markets_by_id)) {
|
package/js/src/delta.d.ts
CHANGED
|
@@ -8,7 +8,6 @@ export default class delta extends Exchange {
|
|
|
8
8
|
describe(): any;
|
|
9
9
|
convertExpireDate(date: any): string;
|
|
10
10
|
createExpiredOptionMarket(symbol: any): MarketInterface;
|
|
11
|
-
market(symbol: any): any;
|
|
12
11
|
safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
|
|
13
12
|
fetchTime(params?: {}): Promise<number>;
|
|
14
13
|
fetchStatus(params?: {}): Promise<{
|
package/js/src/delta.js
CHANGED
|
@@ -318,24 +318,6 @@ export default class delta extends Exchange {
|
|
|
318
318
|
'info': undefined,
|
|
319
319
|
};
|
|
320
320
|
}
|
|
321
|
-
market(symbol) {
|
|
322
|
-
if (this.markets === undefined) {
|
|
323
|
-
throw new ExchangeError(this.id + ' markets not loaded');
|
|
324
|
-
}
|
|
325
|
-
if (typeof symbol === 'string') {
|
|
326
|
-
if (symbol in this.markets) {
|
|
327
|
-
return this.markets[symbol];
|
|
328
|
-
}
|
|
329
|
-
else if (symbol in this.markets_by_id) {
|
|
330
|
-
const markets = this.markets_by_id[symbol];
|
|
331
|
-
return markets[0];
|
|
332
|
-
}
|
|
333
|
-
else if ((symbol.endsWith('-C')) || (symbol.endsWith('-P')) || (symbol.startsWith('C-')) || (symbol.startsWith('P-'))) {
|
|
334
|
-
return this.createExpiredOptionMarket(symbol);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
|
|
338
|
-
}
|
|
339
321
|
safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
|
|
340
322
|
const isOption = (marketId !== undefined) && ((marketId.endsWith('-C')) || (marketId.endsWith('-P')) || (marketId.startsWith('C-')) || (marketId.startsWith('P-')));
|
|
341
323
|
if (isOption && !(marketId in this.markets_by_id)) {
|
package/js/src/gate.d.ts
CHANGED
|
@@ -9,7 +9,6 @@ export default class gate extends Exchange {
|
|
|
9
9
|
setSandboxMode(enable: any): void;
|
|
10
10
|
convertExpireDate(date: any): string;
|
|
11
11
|
createExpiredOptionMarket(symbol: any): MarketInterface;
|
|
12
|
-
market(symbol: any): any;
|
|
13
12
|
safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
|
|
14
13
|
fetchMarkets(params?: {}): Promise<any>;
|
|
15
14
|
fetchSpotMarkets(params?: {}): Promise<any[]>;
|
|
@@ -221,6 +220,7 @@ export default class gate extends Exchange {
|
|
|
221
220
|
fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
|
|
222
221
|
fetchLeverageTiers(symbols?: Strings, params?: {}): Promise<{}>;
|
|
223
222
|
fetchMarketLeverageTiers(symbol: string, params?: {}): Promise<any[]>;
|
|
223
|
+
parseEmulatedLeverageTiers(info: any, market?: any): any[];
|
|
224
224
|
parseMarketLeverageTiers(info: any, market?: Market): any[];
|
|
225
225
|
repayIsolatedMargin(symbol: string, code: string, amount: any, params?: {}): Promise<{
|
|
226
226
|
id: number;
|
package/js/src/gate.js
CHANGED
|
@@ -532,6 +532,7 @@ export default class gate extends Exchange {
|
|
|
532
532
|
'multi_collateral/currency_quota': 20 / 15,
|
|
533
533
|
'multi_collateral/currencies': 20 / 15,
|
|
534
534
|
'multi_collateral/ltv': 20 / 15,
|
|
535
|
+
'multi_collateral/fixed_rate': 20 / 15,
|
|
535
536
|
},
|
|
536
537
|
'post': {
|
|
537
538
|
'collateral/orders': 20 / 15,
|
|
@@ -936,31 +937,6 @@ export default class gate extends Exchange {
|
|
|
936
937
|
'info': undefined,
|
|
937
938
|
};
|
|
938
939
|
}
|
|
939
|
-
market(symbol) {
|
|
940
|
-
if (this.markets === undefined) {
|
|
941
|
-
throw new ExchangeError(this.id + ' markets not loaded');
|
|
942
|
-
}
|
|
943
|
-
if (typeof symbol === 'string') {
|
|
944
|
-
if (symbol in this.markets) {
|
|
945
|
-
return this.markets[symbol];
|
|
946
|
-
}
|
|
947
|
-
else if (symbol in this.markets_by_id) {
|
|
948
|
-
const markets = this.markets_by_id[symbol];
|
|
949
|
-
const defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
|
|
950
|
-
for (let i = 0; i < markets.length; i++) {
|
|
951
|
-
const market = markets[i];
|
|
952
|
-
if (market[defaultType]) {
|
|
953
|
-
return market;
|
|
954
|
-
}
|
|
955
|
-
}
|
|
956
|
-
return markets[0];
|
|
957
|
-
}
|
|
958
|
-
else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
|
|
959
|
-
return this.createExpiredOptionMarket(symbol);
|
|
960
|
-
}
|
|
961
|
-
}
|
|
962
|
-
throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
|
|
963
|
-
}
|
|
964
940
|
safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
|
|
965
941
|
const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
|
|
966
942
|
if (isOption && !(marketId in this.markets_by_id)) {
|
|
@@ -5586,7 +5562,7 @@ export default class gate extends Exchange {
|
|
|
5586
5562
|
* @description retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes
|
|
5587
5563
|
* @see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts
|
|
5588
5564
|
* @see https://www.gate.io/docs/developers/apiv4/en/#list-all-futures-contracts-2
|
|
5589
|
-
* @param {string[]
|
|
5565
|
+
* @param {string[]} [symbols] list of unified market symbols
|
|
5590
5566
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
5591
5567
|
* @returns {object} a dictionary of [leverage tiers structures]{@link https://docs.ccxt.com/#/?id=leverage-tiers-structure}, indexed by market symbols
|
|
5592
5568
|
*/
|
|
@@ -5731,6 +5707,33 @@ export default class gate extends Exchange {
|
|
|
5731
5707
|
//
|
|
5732
5708
|
return this.parseMarketLeverageTiers(response, market);
|
|
5733
5709
|
}
|
|
5710
|
+
parseEmulatedLeverageTiers(info, market = undefined) {
|
|
5711
|
+
const maintenanceMarginUnit = this.safeString(info, 'maintenance_rate'); // '0.005',
|
|
5712
|
+
const leverageMax = this.safeString(info, 'leverage_max'); // '100',
|
|
5713
|
+
const riskLimitStep = this.safeString(info, 'risk_limit_step'); // '1000000',
|
|
5714
|
+
const riskLimitMax = this.safeString(info, 'risk_limit_max'); // '16000000',
|
|
5715
|
+
const initialMarginUnit = Precise.stringDiv('1', leverageMax);
|
|
5716
|
+
let maintenanceMarginRate = maintenanceMarginUnit;
|
|
5717
|
+
let initialMarginRatio = initialMarginUnit;
|
|
5718
|
+
let floor = '0';
|
|
5719
|
+
const tiers = [];
|
|
5720
|
+
while (Precise.stringLt(floor, riskLimitMax)) {
|
|
5721
|
+
const cap = Precise.stringAdd(floor, riskLimitStep);
|
|
5722
|
+
tiers.push({
|
|
5723
|
+
'tier': this.parseNumber(Precise.stringDiv(cap, riskLimitStep)),
|
|
5724
|
+
'currency': this.safeString(market, 'settle'),
|
|
5725
|
+
'minNotional': this.parseNumber(floor),
|
|
5726
|
+
'maxNotional': this.parseNumber(cap),
|
|
5727
|
+
'maintenanceMarginRate': this.parseNumber(maintenanceMarginRate),
|
|
5728
|
+
'maxLeverage': this.parseNumber(Precise.stringDiv('1', initialMarginRatio)),
|
|
5729
|
+
'info': info,
|
|
5730
|
+
});
|
|
5731
|
+
maintenanceMarginRate = Precise.stringAdd(maintenanceMarginRate, maintenanceMarginUnit);
|
|
5732
|
+
initialMarginRatio = Precise.stringAdd(initialMarginRatio, initialMarginUnit);
|
|
5733
|
+
floor = cap;
|
|
5734
|
+
}
|
|
5735
|
+
return tiers;
|
|
5736
|
+
}
|
|
5734
5737
|
parseMarketLeverageTiers(info, market = undefined) {
|
|
5735
5738
|
//
|
|
5736
5739
|
// [
|
|
@@ -5743,6 +5746,9 @@ export default class gate extends Exchange {
|
|
|
5743
5746
|
// }
|
|
5744
5747
|
// ]
|
|
5745
5748
|
//
|
|
5749
|
+
if (!Array.isArray(info)) {
|
|
5750
|
+
return this.parseEmulatedLeverageTiers(info, market);
|
|
5751
|
+
}
|
|
5746
5752
|
let minNotional = 0;
|
|
5747
5753
|
const tiers = [];
|
|
5748
5754
|
for (let i = 0; i < info.length; i++) {
|
|
@@ -56,14 +56,14 @@ export default class kucoinfutures extends kucoin {
|
|
|
56
56
|
timestamp: any;
|
|
57
57
|
datetime: any;
|
|
58
58
|
fundingRate: number;
|
|
59
|
-
fundingTimestamp:
|
|
60
|
-
fundingDatetime:
|
|
61
|
-
nextFundingRate:
|
|
59
|
+
fundingTimestamp: number;
|
|
60
|
+
fundingDatetime: string;
|
|
61
|
+
nextFundingRate: number;
|
|
62
62
|
nextFundingTimestamp: any;
|
|
63
63
|
nextFundingDatetime: any;
|
|
64
|
-
previousFundingRate:
|
|
65
|
-
previousFundingTimestamp:
|
|
66
|
-
previousFundingDatetime:
|
|
64
|
+
previousFundingRate: any;
|
|
65
|
+
previousFundingTimestamp: any;
|
|
66
|
+
previousFundingDatetime: any;
|
|
67
67
|
}>;
|
|
68
68
|
parseBalance(response: any): Balances;
|
|
69
69
|
fetchBalance(params?: {}): Promise<Balances>;
|
package/js/src/kucoinfutures.js
CHANGED
|
@@ -1834,7 +1834,7 @@ export default class kucoinfutures extends kucoin {
|
|
|
1834
1834
|
* @method
|
|
1835
1835
|
* @name kucoinfutures#fetchFundingRate
|
|
1836
1836
|
* @description fetch the current funding rate
|
|
1837
|
-
* @see https://www.kucoin.com/docs/rest/futures-trading/
|
|
1837
|
+
* @see https://www.kucoin.com/docs/rest/futures-trading/funding-fees/get-current-funding-rate
|
|
1838
1838
|
* @param {string} symbol unified market symbol
|
|
1839
1839
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1840
1840
|
* @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
|
|
@@ -1858,7 +1858,7 @@ export default class kucoinfutures extends kucoin {
|
|
|
1858
1858
|
// }
|
|
1859
1859
|
//
|
|
1860
1860
|
const data = this.safeValue(response, 'data');
|
|
1861
|
-
const fundingTimestamp = this.
|
|
1861
|
+
const fundingTimestamp = this.safeInteger(data, 'timePoint');
|
|
1862
1862
|
// the website displayes the previous funding rate as "funding rate"
|
|
1863
1863
|
return {
|
|
1864
1864
|
'info': data,
|
|
@@ -1869,15 +1869,15 @@ export default class kucoinfutures extends kucoin {
|
|
|
1869
1869
|
'estimatedSettlePrice': undefined,
|
|
1870
1870
|
'timestamp': undefined,
|
|
1871
1871
|
'datetime': undefined,
|
|
1872
|
-
'fundingRate': this.safeNumber(data, '
|
|
1873
|
-
'fundingTimestamp':
|
|
1874
|
-
'fundingDatetime':
|
|
1875
|
-
'nextFundingRate':
|
|
1872
|
+
'fundingRate': this.safeNumber(data, 'value'),
|
|
1873
|
+
'fundingTimestamp': fundingTimestamp,
|
|
1874
|
+
'fundingDatetime': this.iso8601(fundingTimestamp),
|
|
1875
|
+
'nextFundingRate': this.safeNumber(data, 'predictedValue'),
|
|
1876
1876
|
'nextFundingTimestamp': undefined,
|
|
1877
1877
|
'nextFundingDatetime': undefined,
|
|
1878
|
-
'previousFundingRate':
|
|
1879
|
-
'previousFundingTimestamp':
|
|
1880
|
-
'previousFundingDatetime':
|
|
1878
|
+
'previousFundingRate': undefined,
|
|
1879
|
+
'previousFundingTimestamp': undefined,
|
|
1880
|
+
'previousFundingDatetime': undefined,
|
|
1881
1881
|
};
|
|
1882
1882
|
}
|
|
1883
1883
|
parseBalance(response) {
|
package/js/src/novadax.js
CHANGED
|
@@ -22,9 +22,9 @@ export default class novadax extends Exchange {
|
|
|
22
22
|
'id': 'novadax',
|
|
23
23
|
'name': 'NovaDAX',
|
|
24
24
|
'countries': ['BR'],
|
|
25
|
-
//
|
|
26
|
-
//
|
|
27
|
-
'rateLimit':
|
|
25
|
+
// 6000 weight per min => 100 weight per second => min weight = 1
|
|
26
|
+
// 100 requests per second => ( 1000ms / 100 ) = 10 ms between requests on average
|
|
27
|
+
'rateLimit': 10,
|
|
28
28
|
'version': 'v1',
|
|
29
29
|
// new metainfo interface
|
|
30
30
|
'has': {
|
|
@@ -122,33 +122,37 @@ export default class novadax extends Exchange {
|
|
|
122
122
|
'api': {
|
|
123
123
|
'public': {
|
|
124
124
|
'get': {
|
|
125
|
-
'common/symbol': 1
|
|
126
|
-
'common/symbols': 1
|
|
127
|
-
'common/timestamp': 1
|
|
128
|
-
'market/tickers':
|
|
129
|
-
'market/ticker': 1
|
|
130
|
-
'market/depth': 1
|
|
131
|
-
'market/trades':
|
|
132
|
-
'market/kline/history':
|
|
125
|
+
'common/symbol': 1,
|
|
126
|
+
'common/symbols': 1,
|
|
127
|
+
'common/timestamp': 1,
|
|
128
|
+
'market/tickers': 5,
|
|
129
|
+
'market/ticker': 1,
|
|
130
|
+
'market/depth': 1,
|
|
131
|
+
'market/trades': 5,
|
|
132
|
+
'market/kline/history': 5,
|
|
133
133
|
},
|
|
134
134
|
},
|
|
135
135
|
'private': {
|
|
136
136
|
'get': {
|
|
137
|
-
'orders/get':
|
|
138
|
-
'orders/list':
|
|
137
|
+
'orders/get': 1,
|
|
138
|
+
'orders/list': 10,
|
|
139
139
|
'orders/fill': 3,
|
|
140
|
-
'orders/fills':
|
|
141
|
-
'account/getBalance':
|
|
142
|
-
'account/subs':
|
|
143
|
-
'account/subs/balance':
|
|
144
|
-
'account/subs/transfer/record':
|
|
140
|
+
'orders/fills': 10,
|
|
141
|
+
'account/getBalance': 1,
|
|
142
|
+
'account/subs': 1,
|
|
143
|
+
'account/subs/balance': 1,
|
|
144
|
+
'account/subs/transfer/record': 10,
|
|
145
145
|
'wallet/query/deposit-withdraw': 3,
|
|
146
146
|
},
|
|
147
147
|
'post': {
|
|
148
|
-
'orders/create':
|
|
149
|
-
'orders/
|
|
150
|
-
'
|
|
151
|
-
'
|
|
148
|
+
'orders/create': 5,
|
|
149
|
+
'orders/batch-create': 50,
|
|
150
|
+
'orders/cancel': 1,
|
|
151
|
+
'orders/batch-cancel': 10,
|
|
152
|
+
'orders/cancel-by-symbol': 10,
|
|
153
|
+
'account/subs/transfer': 5,
|
|
154
|
+
'wallet/withdraw/coin': 3,
|
|
155
|
+
'account/withdraw/coin': 3, // not found in doc
|
|
152
156
|
},
|
|
153
157
|
},
|
|
154
158
|
},
|
package/js/src/okx.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export default class okx extends Exchange {
|
|
|
10
10
|
convertToInstrumentType(type: any): string;
|
|
11
11
|
convertExpireDate(date: any): string;
|
|
12
12
|
createExpiredOptionMarket(symbol: any): MarketInterface;
|
|
13
|
-
market(symbol: any): any;
|
|
14
13
|
safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
|
|
15
14
|
fetchStatus(params?: {}): Promise<{
|
|
16
15
|
updated: any;
|
package/js/src/okx.js
CHANGED
|
@@ -1155,24 +1155,6 @@ export default class okx extends Exchange {
|
|
|
1155
1155
|
'info': undefined,
|
|
1156
1156
|
};
|
|
1157
1157
|
}
|
|
1158
|
-
market(symbol) {
|
|
1159
|
-
if (this.markets === undefined) {
|
|
1160
|
-
throw new ExchangeError(this.id + ' markets not loaded');
|
|
1161
|
-
}
|
|
1162
|
-
if (typeof symbol === 'string') {
|
|
1163
|
-
if (symbol in this.markets) {
|
|
1164
|
-
return this.markets[symbol];
|
|
1165
|
-
}
|
|
1166
|
-
else if (symbol in this.markets_by_id) {
|
|
1167
|
-
const markets = this.markets_by_id[symbol];
|
|
1168
|
-
return markets[0];
|
|
1169
|
-
}
|
|
1170
|
-
else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
|
|
1171
|
-
return this.createExpiredOptionMarket(symbol);
|
|
1172
|
-
}
|
|
1173
|
-
}
|
|
1174
|
-
throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
|
|
1175
|
-
}
|
|
1176
1158
|
safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
|
|
1177
1159
|
const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
|
|
1178
1160
|
if (isOption && !(marketId in this.markets_by_id)) {
|
package/js/src/phemex.js
CHANGED
|
@@ -193,6 +193,7 @@ export default class phemex extends Exchange {
|
|
|
193
193
|
'api-data/g-futures/trades': 5,
|
|
194
194
|
'api-data/futures/trading-fees': 5,
|
|
195
195
|
'api-data/g-futures/trading-fees': 5,
|
|
196
|
+
'api-data/futures/v2/tradeAccountDetail': 5,
|
|
196
197
|
'g-orders/activeList': 1,
|
|
197
198
|
'orders/activeList': 1,
|
|
198
199
|
'exchange/order/list': 5,
|
|
@@ -2770,7 +2771,7 @@ export default class phemex extends Exchange {
|
|
|
2770
2771
|
}
|
|
2771
2772
|
else if (amount !== undefined) {
|
|
2772
2773
|
if (isUSDTSettled) {
|
|
2773
|
-
request['
|
|
2774
|
+
request['orderQtyRq'] = this.amountToPrecision(market['symbol'], amount);
|
|
2774
2775
|
}
|
|
2775
2776
|
else {
|
|
2776
2777
|
request['baseQtyEV'] = this.toEv(amount, market);
|
package/js/src/pro/bitopro.js
CHANGED
|
@@ -26,8 +26,8 @@ export default class bitopro extends bitoproRest {
|
|
|
26
26
|
},
|
|
27
27
|
'urls': {
|
|
28
28
|
'ws': {
|
|
29
|
-
'public': 'wss://stream.bitopro.com:
|
|
30
|
-
'private': 'wss://stream.bitopro.com:
|
|
29
|
+
'public': 'wss://stream.bitopro.com:443/ws/v1/pub',
|
|
30
|
+
'private': 'wss://stream.bitopro.com:443/ws/v1/pub/auth',
|
|
31
31
|
},
|
|
32
32
|
},
|
|
33
33
|
'requiredCredentials': {
|
|
@@ -56,6 +56,7 @@ export default class bitopro extends bitoproRest {
|
|
|
56
56
|
* @method
|
|
57
57
|
* @name bitopro#watchOrderBook
|
|
58
58
|
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
59
|
+
* @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/order_book_stream.md
|
|
59
60
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
60
61
|
* @param {int} [limit] the maximum amount of order book entries to return
|
|
61
62
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
@@ -121,6 +122,7 @@ export default class bitopro extends bitoproRest {
|
|
|
121
122
|
* @method
|
|
122
123
|
* @name bitopro#watchTrades
|
|
123
124
|
* @description get the list of most recent trades for a particular symbol
|
|
125
|
+
* @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/trade_stream.md
|
|
124
126
|
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
125
127
|
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
126
128
|
* @param {int} [limit] the maximum amount of trades to fetch
|
|
@@ -180,6 +182,7 @@ export default class bitopro extends bitoproRest {
|
|
|
180
182
|
* @method
|
|
181
183
|
* @name bitopro#watchTicker
|
|
182
184
|
* @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
185
|
+
* @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/ticker_stream.md
|
|
183
186
|
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
184
187
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
185
188
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
@@ -233,7 +236,7 @@ export default class bitopro extends bitoproRest {
|
|
|
233
236
|
'identity': this.login,
|
|
234
237
|
});
|
|
235
238
|
const payload = this.stringToBase64(rawData);
|
|
236
|
-
const signature = this.hmac(payload, this.encode(this.secret), sha384);
|
|
239
|
+
const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha384);
|
|
237
240
|
const defaultOptions = {
|
|
238
241
|
'ws': {
|
|
239
242
|
'options': {
|
|
@@ -259,6 +262,7 @@ export default class bitopro extends bitoproRest {
|
|
|
259
262
|
* @method
|
|
260
263
|
* @name bitopro#watchBalance
|
|
261
264
|
* @description watch balance and get the amount of funds available for trading or funds locked in orders
|
|
265
|
+
* @see https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/private/user_balance_stream.md
|
|
262
266
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
263
267
|
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
264
268
|
*/
|
package/js/src/pro/bitvavo.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import bitvavoRest from '../bitvavo.js';
|
|
2
|
-
import
|
|
2
|
+
import { Int, Str, OrderSide, OrderType, OrderBook, Ticker, Trade, Order, OHLCV, Balances } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class bitvavo extends bitvavoRest {
|
|
5
5
|
describe(): any;
|
|
@@ -9,6 +9,7 @@ export default class bitvavo extends bitvavoRest {
|
|
|
9
9
|
watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
10
10
|
handleTrade(client: Client, message: any): void;
|
|
11
11
|
watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
12
|
+
handleFetchOHLCV(client: Client, message: any): void;
|
|
12
13
|
handleOHLCV(client: Client, message: any): void;
|
|
13
14
|
watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
14
15
|
handleDelta(bookside: any, delta: any): void;
|
|
@@ -21,10 +22,42 @@ export default class bitvavo extends bitvavoRest {
|
|
|
21
22
|
handleOrderBookSubscriptions(client: Client, message: any, marketIds: any): void;
|
|
22
23
|
watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
23
24
|
watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
25
|
+
createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: any, price?: any, params?: {}): Promise<Order>;
|
|
26
|
+
editOrderWs(id: string, symbol: any, type: any, side: any, amount?: any, price?: any, params?: {}): Promise<Order>;
|
|
27
|
+
cancelOrderWs(id: string, symbol?: string, params?: {}): Promise<any>;
|
|
28
|
+
cancelAllOrdersWs(symbol?: string, params?: {}): Promise<any>;
|
|
29
|
+
handleMultipleOrders(client: Client, message: any): void;
|
|
30
|
+
fetchOrderWs(id: string, symbol?: string, params?: {}): Promise<Order>;
|
|
31
|
+
fetchOrdersWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
32
|
+
watchRequest(action: any, request: any): Promise<any>;
|
|
33
|
+
fetchOpenOrdersWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
34
|
+
fetchMyTradesWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
35
|
+
handleMyTrades(client: Client, message: any): void;
|
|
36
|
+
withdrawWs(code: string, amount: any, address: any, tag?: any, params?: {}): Promise<any>;
|
|
37
|
+
handleWithdraw(client: Client, message: any): void;
|
|
38
|
+
fetchWithdrawalsWs(code?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
|
|
39
|
+
handleWithdraws(client: Client, message: any): void;
|
|
40
|
+
fetchOHLCVWs(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
41
|
+
fetchDepositsWs(code?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
|
|
42
|
+
handleDeposits(client: Client, message: any): void;
|
|
43
|
+
fetchTradingFeesWs(params?: {}): Promise<any>;
|
|
44
|
+
fetchMarketsWs(params?: {}): Promise<any>;
|
|
45
|
+
fetchCurrenciesWs(params?: {}): Promise<any>;
|
|
46
|
+
handleFetchCurrencies(client: Client, message: any): void;
|
|
47
|
+
handleTradingFees(client: any, message: any): void;
|
|
48
|
+
fetchBalanceWs(params?: {}): Promise<Balances>;
|
|
49
|
+
handleFetchBalance(client: Client, message: any): void;
|
|
50
|
+
handleSingleOrder(client: Client, message: any): void;
|
|
51
|
+
handleMarkets(client: Client, message: any): void;
|
|
52
|
+
buildMessageHash(action: any, params?: {}): any;
|
|
53
|
+
checkMessageHashDoesNotExist(messageHash: any): void;
|
|
54
|
+
actionAndMarketMessageHash(action: any, params?: {}): string;
|
|
55
|
+
actionAndOrderIdMessageHash(action: any, params?: {}): string;
|
|
24
56
|
handleOrder(client: Client, message: any): void;
|
|
25
57
|
handleMyTrade(client: Client, message: any): void;
|
|
26
58
|
handleSubscriptionStatus(client: Client, message: any): any;
|
|
27
59
|
authenticate(params?: {}): any;
|
|
28
60
|
handleAuthenticationMessage(client: Client, message: any): void;
|
|
29
|
-
|
|
61
|
+
handleErrorMessage(client: Client, message: any): void;
|
|
62
|
+
handleMessage(client: Client, message: any): void;
|
|
30
63
|
}
|