ccxt 4.3.58 → 4.3.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +4 -2
- package/dist/cjs/src/base/Exchange.js +4 -4
- package/dist/cjs/src/base/errors.js +22 -22
- package/dist/cjs/src/binance.js +90 -1
- package/dist/cjs/src/bingx.js +467 -123
- package/dist/cjs/src/bitfinex.js +38 -4
- package/dist/cjs/src/bitmart.js +1 -0
- package/dist/cjs/src/bitso.js +4 -1
- package/dist/cjs/src/btcbox.js +149 -7
- package/dist/cjs/src/bybit.js +3 -5
- package/dist/cjs/src/cryptocom.js +14 -6
- package/dist/cjs/src/deribit.js +15 -1
- package/dist/cjs/src/digifinex.js +32 -7
- package/dist/cjs/src/gate.js +16 -17
- package/dist/cjs/src/htx.js +7 -7
- package/dist/cjs/src/hyperliquid.js +108 -2
- package/dist/cjs/src/kraken.js +1 -1
- package/dist/cjs/src/mexc.js +11 -11
- package/dist/cjs/src/okx.js +11 -2
- package/dist/cjs/src/pro/binance.js +11 -13
- package/dist/cjs/src/pro/bingx.js +11 -8
- package/dist/cjs/src/pro/cex.js +1 -1
- package/dist/cjs/src/pro/kucoin.js +35 -3
- package/dist/cjs/src/pro/phemex.js +1 -1
- package/dist/cjs/src/pro/xt.js +1112 -0
- package/dist/cjs/src/timex.js +18 -2
- package/dist/cjs/src/upbit.js +148 -49
- package/dist/cjs/src/xt.js +73 -8
- package/js/ccxt.d.ts +6 -3
- package/js/ccxt.js +5 -3
- package/js/src/abstract/bingx.d.ts +1 -1
- package/js/src/abstract/bitmart.d.ts +1 -0
- package/js/src/abstract/btcbox.d.ts +1 -0
- package/js/src/abstract/upbit.d.ts +3 -0
- package/js/src/abstract/xt.d.ts +1 -0
- package/js/src/base/Exchange.d.ts +3 -3
- package/js/src/base/Exchange.js +5 -5
- package/js/src/base/errorHierarchy.d.ts +5 -5
- package/js/src/base/errorHierarchy.js +5 -5
- package/js/src/base/errors.d.ts +15 -15
- package/js/src/base/errors.js +22 -22
- package/js/src/binance.d.ts +1 -1
- package/js/src/binance.js +90 -1
- package/js/src/bingx.js +467 -123
- package/js/src/bitfinex.d.ts +2 -2
- package/js/src/bitfinex.js +38 -4
- package/js/src/bitmart.js +1 -0
- package/js/src/bitso.js +4 -1
- package/js/src/btcbox.d.ts +4 -1
- package/js/src/btcbox.js +149 -7
- package/js/src/bybit.js +3 -5
- package/js/src/cryptocom.js +14 -6
- package/js/src/deribit.d.ts +1 -1
- package/js/src/deribit.js +15 -1
- package/js/src/digifinex.d.ts +3 -2
- package/js/src/digifinex.js +32 -7
- package/js/src/gate.js +16 -17
- package/js/src/htx.js +7 -7
- package/js/src/hyperliquid.d.ts +3 -1
- package/js/src/hyperliquid.js +108 -2
- package/js/src/kraken.js +1 -1
- package/js/src/mexc.js +11 -11
- package/js/src/okx.js +11 -2
- package/js/src/pro/binance.js +11 -13
- package/js/src/pro/bingx.js +11 -8
- package/js/src/pro/bitmart.d.ts +3 -3
- package/js/src/pro/bitopro.d.ts +2 -2
- package/js/src/pro/cex.js +1 -1
- package/js/src/pro/coincheck.d.ts +2 -2
- package/js/src/pro/coinone.d.ts +2 -2
- package/js/src/pro/hyperliquid.d.ts +2 -2
- package/js/src/pro/kucoin.js +35 -3
- package/js/src/pro/phemex.js +1 -1
- package/js/src/pro/xt.d.ts +31 -0
- package/js/src/pro/xt.js +1113 -0
- package/js/src/timex.d.ts +2 -2
- package/js/src/timex.js +18 -2
- package/js/src/upbit.d.ts +0 -1
- package/js/src/upbit.js +148 -49
- package/js/src/xt.js +73 -8
- package/package.json +1 -1
package/js/src/hyperliquid.js
CHANGED
|
@@ -101,7 +101,7 @@ export default class hyperliquid extends Exchange {
|
|
|
101
101
|
'fetchTickers': false,
|
|
102
102
|
'fetchTime': false,
|
|
103
103
|
'fetchTrades': true,
|
|
104
|
-
'fetchTradingFee':
|
|
104
|
+
'fetchTradingFee': true,
|
|
105
105
|
'fetchTradingFees': false,
|
|
106
106
|
'fetchTransfer': false,
|
|
107
107
|
'fetchTransfers': false,
|
|
@@ -1318,7 +1318,7 @@ export default class hyperliquid extends Exchange {
|
|
|
1318
1318
|
* @description cancel multiple orders for multiple symbols
|
|
1319
1319
|
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#cancel-order-s
|
|
1320
1320
|
* @see https://hyperliquid.gitbook.io/hyperliquid-docs/for-developers/api/exchange-endpoint#cancel-order-s-by-cloid
|
|
1321
|
-
* @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol
|
|
1321
|
+
* @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol, example [{"id": "a", "symbol": "BTC/USDT"}, {"id": "b", "symbol": "ETH/USDT"}]
|
|
1322
1322
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1323
1323
|
* @param {string} [params.vaultAddress] the vault address
|
|
1324
1324
|
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
@@ -2519,6 +2519,112 @@ export default class hyperliquid extends Exchange {
|
|
|
2519
2519
|
'fee': undefined,
|
|
2520
2520
|
};
|
|
2521
2521
|
}
|
|
2522
|
+
async fetchTradingFee(symbol, params = {}) {
|
|
2523
|
+
/**
|
|
2524
|
+
* @method
|
|
2525
|
+
* @name hyperliquid#fetchTradingFee
|
|
2526
|
+
* @description fetch the trading fees for a market
|
|
2527
|
+
* @param {string} symbol unified market symbol
|
|
2528
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2529
|
+
* @param {string} [params.user] user address, will default to this.walletAddress if not provided
|
|
2530
|
+
* @returns {object} a [fee structure]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
2531
|
+
*/
|
|
2532
|
+
await this.loadMarkets();
|
|
2533
|
+
let userAddress = undefined;
|
|
2534
|
+
[userAddress, params] = this.handlePublicAddress('fetchTradingFee', params);
|
|
2535
|
+
const market = this.market(symbol);
|
|
2536
|
+
const request = {
|
|
2537
|
+
'type': 'userFees',
|
|
2538
|
+
'user': userAddress,
|
|
2539
|
+
};
|
|
2540
|
+
const response = await this.publicPostInfo(this.extend(request, params));
|
|
2541
|
+
//
|
|
2542
|
+
// {
|
|
2543
|
+
// "dailyUserVlm": [
|
|
2544
|
+
// {
|
|
2545
|
+
// "date": "2024-07-08",
|
|
2546
|
+
// "userCross": "0.0",
|
|
2547
|
+
// "userAdd": "0.0",
|
|
2548
|
+
// "exchange": "90597185.23639999"
|
|
2549
|
+
// }
|
|
2550
|
+
// ],
|
|
2551
|
+
// "feeSchedule": {
|
|
2552
|
+
// "cross": "0.00035",
|
|
2553
|
+
// "add": "0.0001",
|
|
2554
|
+
// "tiers": {
|
|
2555
|
+
// "vip": [
|
|
2556
|
+
// {
|
|
2557
|
+
// "ntlCutoff": "5000000.0",
|
|
2558
|
+
// "cross": "0.0003",
|
|
2559
|
+
// "add": "0.00005"
|
|
2560
|
+
// }
|
|
2561
|
+
// ],
|
|
2562
|
+
// "mm": [
|
|
2563
|
+
// {
|
|
2564
|
+
// "makerFractionCutoff": "0.005",
|
|
2565
|
+
// "add": "-0.00001"
|
|
2566
|
+
// }
|
|
2567
|
+
// ]
|
|
2568
|
+
// },
|
|
2569
|
+
// "referralDiscount": "0.04"
|
|
2570
|
+
// },
|
|
2571
|
+
// "userCrossRate": "0.00035",
|
|
2572
|
+
// "userAddRate": "0.0001",
|
|
2573
|
+
// "activeReferralDiscount": "0.0"
|
|
2574
|
+
// }
|
|
2575
|
+
//
|
|
2576
|
+
const data = {
|
|
2577
|
+
'userCrossRate': this.safeString(response, 'userCrossRate'),
|
|
2578
|
+
'userAddRate': this.safeString(response, 'userAddRate'),
|
|
2579
|
+
};
|
|
2580
|
+
return this.parseTradingFee(data, market);
|
|
2581
|
+
}
|
|
2582
|
+
parseTradingFee(fee, market = undefined) {
|
|
2583
|
+
//
|
|
2584
|
+
// {
|
|
2585
|
+
// "dailyUserVlm": [
|
|
2586
|
+
// {
|
|
2587
|
+
// "date": "2024-07-08",
|
|
2588
|
+
// "userCross": "0.0",
|
|
2589
|
+
// "userAdd": "0.0",
|
|
2590
|
+
// "exchange": "90597185.23639999"
|
|
2591
|
+
// }
|
|
2592
|
+
// ],
|
|
2593
|
+
// "feeSchedule": {
|
|
2594
|
+
// "cross": "0.00035",
|
|
2595
|
+
// "add": "0.0001",
|
|
2596
|
+
// "tiers": {
|
|
2597
|
+
// "vip": [
|
|
2598
|
+
// {
|
|
2599
|
+
// "ntlCutoff": "5000000.0",
|
|
2600
|
+
// "cross": "0.0003",
|
|
2601
|
+
// "add": "0.00005"
|
|
2602
|
+
// }
|
|
2603
|
+
// ],
|
|
2604
|
+
// "mm": [
|
|
2605
|
+
// {
|
|
2606
|
+
// "makerFractionCutoff": "0.005",
|
|
2607
|
+
// "add": "-0.00001"
|
|
2608
|
+
// }
|
|
2609
|
+
// ]
|
|
2610
|
+
// },
|
|
2611
|
+
// "referralDiscount": "0.04"
|
|
2612
|
+
// },
|
|
2613
|
+
// "userCrossRate": "0.00035",
|
|
2614
|
+
// "userAddRate": "0.0001",
|
|
2615
|
+
// "activeReferralDiscount": "0.0"
|
|
2616
|
+
// }
|
|
2617
|
+
//
|
|
2618
|
+
const symbol = this.safeSymbol(undefined, market);
|
|
2619
|
+
return {
|
|
2620
|
+
'info': fee,
|
|
2621
|
+
'symbol': symbol,
|
|
2622
|
+
'maker': this.safeNumber(fee, 'userAddRate'),
|
|
2623
|
+
'taker': this.safeNumber(fee, 'userCrossRate'),
|
|
2624
|
+
'percentage': undefined,
|
|
2625
|
+
'tierBased': undefined,
|
|
2626
|
+
};
|
|
2627
|
+
}
|
|
2522
2628
|
formatVaultAddress(address = undefined) {
|
|
2523
2629
|
if (address === undefined) {
|
|
2524
2630
|
return undefined;
|
package/js/src/kraken.js
CHANGED
|
@@ -1052,7 +1052,7 @@ export default class kraken extends Exchange {
|
|
|
1052
1052
|
else {
|
|
1053
1053
|
direction = 'in';
|
|
1054
1054
|
}
|
|
1055
|
-
const timestamp = this.
|
|
1055
|
+
const timestamp = this.safeIntegerProduct(item, 'time', 1000);
|
|
1056
1056
|
return {
|
|
1057
1057
|
'info': item,
|
|
1058
1058
|
'id': id,
|
package/js/src/mexc.js
CHANGED
|
@@ -799,24 +799,24 @@ export default class mexc extends Exchange {
|
|
|
799
799
|
'commonCurrencies': {
|
|
800
800
|
'BEYONDPROTOCOL': 'BEYOND',
|
|
801
801
|
'BIFI': 'BIFIF',
|
|
802
|
-
'BYN': '
|
|
802
|
+
'BYN': 'BEYONDFI',
|
|
803
803
|
'COFI': 'COFIX',
|
|
804
|
-
'DFI': '
|
|
805
|
-
'DFT': '
|
|
804
|
+
'DFI': 'DFISTARTER',
|
|
805
|
+
'DFT': 'DFUTURE',
|
|
806
806
|
'DRK': 'DRK',
|
|
807
|
-
'EGC': '
|
|
807
|
+
'EGC': 'EGORASCREDIT',
|
|
808
808
|
'FLUX1': 'FLUX',
|
|
809
809
|
'FLUX': 'FLUX1',
|
|
810
|
-
'FREE': '
|
|
810
|
+
'FREE': 'FREEROSSDAO',
|
|
811
811
|
'GAS': 'GASDAO',
|
|
812
812
|
'GASNEO': 'GAS',
|
|
813
|
-
'GMT': '
|
|
813
|
+
'GMT': 'GMTTOKEN',
|
|
814
814
|
'STEPN': 'GMT',
|
|
815
|
-
'HERO': '
|
|
816
|
-
'MIMO': '
|
|
817
|
-
'PROS': '
|
|
818
|
-
'SIN': '
|
|
819
|
-
'SOUL': '
|
|
815
|
+
'HERO': 'STEPHERO',
|
|
816
|
+
'MIMO': 'MIMOSA',
|
|
817
|
+
'PROS': 'PROSFINANCE',
|
|
818
|
+
'SIN': 'SINCITYTOKEN',
|
|
819
|
+
'SOUL': 'SOULSWAP',
|
|
820
820
|
},
|
|
821
821
|
'exceptions': {
|
|
822
822
|
'exact': {
|
package/js/src/okx.js
CHANGED
|
@@ -927,7 +927,16 @@ export default class okx extends Exchange {
|
|
|
927
927
|
'64003': AccountNotEnabled,
|
|
928
928
|
'70010': BadRequest,
|
|
929
929
|
'70013': BadRequest,
|
|
930
|
-
'70016': BadRequest,
|
|
930
|
+
'70016': BadRequest,
|
|
931
|
+
'1009': BadRequest,
|
|
932
|
+
'4001': AuthenticationError,
|
|
933
|
+
'4002': BadRequest,
|
|
934
|
+
'4003': RateLimitExceeded,
|
|
935
|
+
'4004': NetworkError,
|
|
936
|
+
'4005': ExchangeNotAvailable,
|
|
937
|
+
'4006': BadRequest,
|
|
938
|
+
'4007': AuthenticationError,
|
|
939
|
+
'4008': RateLimitExceeded, // The number of subscribed channels exceeds the maximum limit.
|
|
931
940
|
},
|
|
932
941
|
'broad': {
|
|
933
942
|
'Internal Server Error': ExchangeNotAvailable,
|
|
@@ -3351,7 +3360,7 @@ export default class okx extends Exchange {
|
|
|
3351
3360
|
* @description cancel multiple orders for multiple symbols
|
|
3352
3361
|
* @see https://www.okx.com/docs-v5/en/#order-book-trading-trade-post-cancel-multiple-orders
|
|
3353
3362
|
* @see https://www.okx.com/docs-v5/en/#order-book-trading-algo-trading-post-cancel-algo-order
|
|
3354
|
-
* @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol
|
|
3363
|
+
* @param {CancellationRequest[]} orders each order should contain the parameters required by cancelOrder namely id and symbol, example [{"id": "a", "symbol": "BTC/USDT"}, {"id": "b", "symbol": "ETH/USDT"}]
|
|
3355
3364
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3356
3365
|
* @param {boolean} [params.trigger] whether the order is a stop/trigger order
|
|
3357
3366
|
* @param {boolean} [params.trailing] set to true if you want to cancel trailing orders
|
package/js/src/pro/binance.js
CHANGED
|
@@ -614,9 +614,9 @@ export default class binance extends binanceRest {
|
|
|
614
614
|
for (let i = 0; i < symbols.length; i++) {
|
|
615
615
|
const symbol = symbols[i];
|
|
616
616
|
const market = this.market(symbol);
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
const symbolHash =
|
|
617
|
+
messageHashes.push('orderbook::' + symbol);
|
|
618
|
+
const subscriptionHash = market['lowercaseId'] + '@' + name;
|
|
619
|
+
const symbolHash = subscriptionHash + '@' + watchOrderBookRate + 'ms';
|
|
620
620
|
subParams.push(symbolHash);
|
|
621
621
|
}
|
|
622
622
|
const messageHashesLength = messageHashes.length;
|
|
@@ -636,8 +636,7 @@ export default class binance extends binanceRest {
|
|
|
636
636
|
'type': type,
|
|
637
637
|
'params': params,
|
|
638
638
|
};
|
|
639
|
-
const
|
|
640
|
-
const orderbook = await this.watchMultiple(url, messageHashes, message, messageHashes, subscription);
|
|
639
|
+
const orderbook = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes, subscription);
|
|
641
640
|
return orderbook.limit();
|
|
642
641
|
}
|
|
643
642
|
async fetchOrderBookWs(symbol, limit = undefined, params = {}) {
|
|
@@ -816,8 +815,7 @@ export default class binance extends binanceRest {
|
|
|
816
815
|
const marketId = this.safeString(message, 's');
|
|
817
816
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
818
817
|
const symbol = market['symbol'];
|
|
819
|
-
const
|
|
820
|
-
const messageHash = market['lowercaseId'] + '@' + name;
|
|
818
|
+
const messageHash = 'orderbook::' + symbol;
|
|
821
819
|
if (!(symbol in this.orderbooks)) {
|
|
822
820
|
//
|
|
823
821
|
// https://github.com/ccxt/ccxt/issues/6672
|
|
@@ -960,12 +958,14 @@ export default class binance extends binanceRest {
|
|
|
960
958
|
if (firstMarket['contract']) {
|
|
961
959
|
type = firstMarket['linear'] ? 'future' : 'delivery';
|
|
962
960
|
}
|
|
961
|
+
const messageHashes = [];
|
|
963
962
|
const subParams = [];
|
|
964
963
|
for (let i = 0; i < symbols.length; i++) {
|
|
965
964
|
const symbol = symbols[i];
|
|
966
965
|
const market = this.market(symbol);
|
|
967
|
-
|
|
968
|
-
|
|
966
|
+
messageHashes.push('trade::' + symbol);
|
|
967
|
+
const rawHash = market['lowercaseId'] + '@' + name;
|
|
968
|
+
subParams.push(rawHash);
|
|
969
969
|
}
|
|
970
970
|
const query = this.omit(params, 'type');
|
|
971
971
|
const subParamsLength = subParams.length;
|
|
@@ -979,7 +979,7 @@ export default class binance extends binanceRest {
|
|
|
979
979
|
const subscribe = {
|
|
980
980
|
'id': requestId,
|
|
981
981
|
};
|
|
982
|
-
const trades = await this.watchMultiple(url,
|
|
982
|
+
const trades = await this.watchMultiple(url, messageHashes, this.extend(request, query), messageHashes, subscribe);
|
|
983
983
|
if (this.newUpdates) {
|
|
984
984
|
const first = this.safeValue(trades, 0);
|
|
985
985
|
const tradeSymbol = this.safeString(first, 'symbol');
|
|
@@ -1170,9 +1170,7 @@ export default class binance extends binanceRest {
|
|
|
1170
1170
|
const marketId = this.safeString(message, 's');
|
|
1171
1171
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
1172
1172
|
const symbol = market['symbol'];
|
|
1173
|
-
const
|
|
1174
|
-
const event = this.safeString(message, 'e');
|
|
1175
|
-
const messageHash = lowerCaseId + '@' + event;
|
|
1173
|
+
const messageHash = 'trade::' + symbol;
|
|
1176
1174
|
const trade = this.parseWsTrade(message, market);
|
|
1177
1175
|
let tradesArray = this.safeValue(this.trades, symbol);
|
|
1178
1176
|
if (tradesArray === undefined) {
|
package/js/src/pro/bingx.js
CHANGED
|
@@ -97,10 +97,10 @@ export default class bingx extends bingxRest {
|
|
|
97
97
|
*/
|
|
98
98
|
await this.loadMarkets();
|
|
99
99
|
const market = this.market(symbol);
|
|
100
|
-
const [marketType, query] = this.handleMarketTypeAndParams('
|
|
100
|
+
const [marketType, query] = this.handleMarketTypeAndParams('watchTicker', market, params);
|
|
101
101
|
const url = this.safeValue(this.urls['api']['ws'], marketType);
|
|
102
102
|
if (url === undefined) {
|
|
103
|
-
throw new BadRequest(this.id + '
|
|
103
|
+
throw new BadRequest(this.id + ' watchTicker is not supported for ' + marketType + ' markets.');
|
|
104
104
|
}
|
|
105
105
|
const subscriptionHash = market['id'] + '@ticker';
|
|
106
106
|
const messageHash = this.getMessageHash('ticker', market['symbol']);
|
|
@@ -448,21 +448,23 @@ export default class bingx extends bingxRest {
|
|
|
448
448
|
*/
|
|
449
449
|
await this.loadMarkets();
|
|
450
450
|
const market = this.market(symbol);
|
|
451
|
-
|
|
451
|
+
let marketType = undefined;
|
|
452
|
+
[marketType, params] = this.handleMarketTypeAndParams('watchTrades', market, params);
|
|
452
453
|
const url = this.safeValue(this.urls['api']['ws'], marketType);
|
|
453
454
|
if (url === undefined) {
|
|
454
455
|
throw new BadRequest(this.id + ' watchTrades is not supported for ' + marketType + ' markets.');
|
|
455
456
|
}
|
|
456
|
-
const
|
|
457
|
+
const rawHash = market['id'] + '@trade';
|
|
458
|
+
const messageHash = 'trade::' + symbol;
|
|
457
459
|
const uuid = this.uuid();
|
|
458
460
|
const request = {
|
|
459
461
|
'id': uuid,
|
|
460
|
-
'dataType':
|
|
462
|
+
'dataType': rawHash,
|
|
461
463
|
};
|
|
462
464
|
if (marketType === 'swap') {
|
|
463
465
|
request['reqType'] = 'sub';
|
|
464
466
|
}
|
|
465
|
-
const trades = await this.watch(url, messageHash, this.extend(request,
|
|
467
|
+
const trades = await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
466
468
|
if (this.newUpdates) {
|
|
467
469
|
limit = trades.getLimit(symbol, limit);
|
|
468
470
|
}
|
|
@@ -529,12 +531,13 @@ export default class bingx extends bingxRest {
|
|
|
529
531
|
// }
|
|
530
532
|
//
|
|
531
533
|
const data = this.safeValue(message, 'data', []);
|
|
532
|
-
const
|
|
533
|
-
const marketId =
|
|
534
|
+
const rawHash = this.safeString(message, 'dataType');
|
|
535
|
+
const marketId = rawHash.split('@')[0];
|
|
534
536
|
const isSwap = client.url.indexOf('swap') >= 0;
|
|
535
537
|
const marketType = isSwap ? 'swap' : 'spot';
|
|
536
538
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
537
539
|
const symbol = market['symbol'];
|
|
540
|
+
const messageHash = 'trade::' + symbol;
|
|
538
541
|
let trades = undefined;
|
|
539
542
|
if (Array.isArray(data)) {
|
|
540
543
|
trades = this.parseTrades(data, market);
|
package/js/src/pro/bitmart.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import bitmartRest from '../bitmart.js';
|
|
2
|
-
import type { Int, Market, Str, Strings, OrderBook, Order, Trade, Ticker, Tickers, OHLCV, Position, Balances } from '../base/types.js';
|
|
2
|
+
import type { Int, Market, Str, Strings, OrderBook, Order, Trade, Ticker, Tickers, OHLCV, Position, Balances, Dict } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class bitmart extends bitmartRest {
|
|
5
5
|
describe(): any;
|
|
@@ -16,7 +16,7 @@ export default class bitmart extends bitmartRest {
|
|
|
16
16
|
watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
17
17
|
watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
18
18
|
handleOrders(client: Client, message: any): void;
|
|
19
|
-
parseWsOrder(order:
|
|
19
|
+
parseWsOrder(order: Dict, market?: Market): Order;
|
|
20
20
|
parseWsOrderStatus(statusId: any): string;
|
|
21
21
|
parseWsOrderSide(sideId: any): string;
|
|
22
22
|
watchPositions(symbols?: Strings, since?: Int, limit?: Int, params?: {}): Promise<Position[]>;
|
|
@@ -24,7 +24,7 @@ export default class bitmart extends bitmartRest {
|
|
|
24
24
|
parseWsPosition(position: any, market?: Market): Position;
|
|
25
25
|
handleTrade(client: Client, message: any): void;
|
|
26
26
|
handleTradeLoop(entry: any): string;
|
|
27
|
-
parseWsTrade(trade:
|
|
27
|
+
parseWsTrade(trade: Dict, market?: Market): Trade;
|
|
28
28
|
handleTicker(client: Client, message: any): void;
|
|
29
29
|
parseWsSwapTicker(ticker: any, market?: Market): Ticker;
|
|
30
30
|
watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
package/js/src/pro/bitopro.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import bitoproRest from '../bitopro.js';
|
|
2
|
-
import type { Int, OrderBook, Trade, Ticker, Balances, Market, Str } from '../base/types.js';
|
|
2
|
+
import type { Int, OrderBook, Trade, Ticker, Balances, Market, Str, Dict } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class bitopro extends bitoproRest {
|
|
5
5
|
describe(): any;
|
|
@@ -10,7 +10,7 @@ export default class bitopro extends bitoproRest {
|
|
|
10
10
|
handleTrade(client: Client, message: any): void;
|
|
11
11
|
watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
12
12
|
handleMyTrade(client: Client, message: any): void;
|
|
13
|
-
parseWsTrade(trade:
|
|
13
|
+
parseWsTrade(trade: Dict, market?: Market): Trade;
|
|
14
14
|
watchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
15
15
|
handleTicker(client: Client, message: any): void;
|
|
16
16
|
authenticate(url: any): void;
|
package/js/src/pro/cex.js
CHANGED
|
@@ -1015,7 +1015,7 @@ export default class cex extends cexRest {
|
|
|
1015
1015
|
// }
|
|
1016
1016
|
//
|
|
1017
1017
|
const data = this.safeValue(message, 'data', {});
|
|
1018
|
-
const incrementalId = this.
|
|
1018
|
+
const incrementalId = this.safeInteger(data, 'id');
|
|
1019
1019
|
const pair = this.safeString(data, 'pair', '');
|
|
1020
1020
|
const symbol = this.pairToSymbol(pair);
|
|
1021
1021
|
const storedOrderBook = this.safeValue(this.orderbooks, symbol);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import coincheckRest from '../coincheck.js';
|
|
2
|
-
import type { Int, Market, OrderBook, Trade } from '../base/types.js';
|
|
2
|
+
import type { Int, Market, OrderBook, Trade, Dict } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class coincheck extends coincheckRest {
|
|
5
5
|
describe(): any;
|
|
@@ -7,6 +7,6 @@ export default class coincheck extends coincheckRest {
|
|
|
7
7
|
handleOrderBook(client: any, message: any): void;
|
|
8
8
|
watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
9
9
|
handleTrades(client: Client, message: any): void;
|
|
10
|
-
parseWsTrade(trade:
|
|
10
|
+
parseWsTrade(trade: Dict, market?: Market): Trade;
|
|
11
11
|
handleMessage(client: Client, message: any): void;
|
|
12
12
|
}
|
package/js/src/pro/coinone.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import coinoneRest from '../coinone.js';
|
|
2
|
-
import type { Int, Market, OrderBook, Ticker, Trade } from '../base/types.js';
|
|
2
|
+
import type { Int, Market, OrderBook, Ticker, Trade, Dict } from '../base/types.js';
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class coinone extends coinoneRest {
|
|
5
5
|
describe(): any;
|
|
@@ -11,7 +11,7 @@ export default class coinone extends coinoneRest {
|
|
|
11
11
|
parseWsTicker(ticker: any, market?: Market): Ticker;
|
|
12
12
|
watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
13
13
|
handleTrades(client: Client, message: any): void;
|
|
14
|
-
parseWsTrade(trade:
|
|
14
|
+
parseWsTrade(trade: Dict, market?: Market): Trade;
|
|
15
15
|
handleErrorMessage(client: Client, message: any): boolean;
|
|
16
16
|
handleMessage(client: Client, message: any): void;
|
|
17
17
|
ping(client: any): {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import hyperliquidRest from '../hyperliquid.js';
|
|
2
2
|
import Client from '../base/ws/Client.js';
|
|
3
|
-
import { Int, Str, Market, OrderBook, Trade, OHLCV, Order } from '../base/types.js';
|
|
3
|
+
import { Int, Str, Market, OrderBook, Trade, OHLCV, Order, Dict } from '../base/types.js';
|
|
4
4
|
export default class hyperliquid extends hyperliquidRest {
|
|
5
5
|
describe(): any;
|
|
6
6
|
watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
@@ -9,7 +9,7 @@ export default class hyperliquid extends hyperliquidRest {
|
|
|
9
9
|
handleMyTrades(client: Client, message: any): void;
|
|
10
10
|
watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
11
11
|
handleTrades(client: Client, message: any): void;
|
|
12
|
-
parseWsTrade(trade:
|
|
12
|
+
parseWsTrade(trade: Dict, market?: Market): Trade;
|
|
13
13
|
watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
14
14
|
handleOHLCV(client: Client, message: any): void;
|
|
15
15
|
watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
package/js/src/pro/kucoin.js
CHANGED
|
@@ -43,6 +43,9 @@ export default class kucoin extends kucoinRest {
|
|
|
43
43
|
'snapshotMaxRetries': 3,
|
|
44
44
|
'method': '/market/level2', // '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50'
|
|
45
45
|
},
|
|
46
|
+
'watchMyTrades': {
|
|
47
|
+
'method': '/spotMarket/tradeOrders', // or '/spot/tradeFills'
|
|
48
|
+
},
|
|
46
49
|
},
|
|
47
50
|
'streaming': {
|
|
48
51
|
// kucoin does not support built-in ws protocol-level ping-pong
|
|
@@ -986,11 +989,14 @@ export default class kucoin extends kucoinRest {
|
|
|
986
989
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
987
990
|
* @param {int} [limit] the maximum number of trade structures to retrieve
|
|
988
991
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
992
|
+
* @param {string} [params.method] '/spotMarket/tradeOrders' or '/spot/tradeFills' default is '/spotMarket/tradeOrders'
|
|
989
993
|
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
|
|
990
994
|
*/
|
|
991
995
|
await this.loadMarkets();
|
|
992
996
|
const url = await this.negotiate(true);
|
|
993
|
-
const
|
|
997
|
+
const options = this.safeDict(this.options, 'watchMyTrades');
|
|
998
|
+
const defaultMethod = this.safeString(params, 'method', '/spotMarket/tradeOrders');
|
|
999
|
+
const topic = (defaultMethod !== undefined) ? defaultMethod : this.safeString(options, 'method');
|
|
994
1000
|
const request = {
|
|
995
1001
|
'privateChannel': true,
|
|
996
1002
|
};
|
|
@@ -1048,6 +1054,8 @@ export default class kucoin extends kucoinRest {
|
|
|
1048
1054
|
client.resolve(this.myTrades, symbolSpecificMessageHash);
|
|
1049
1055
|
}
|
|
1050
1056
|
parseWsTrade(trade, market = undefined) {
|
|
1057
|
+
//
|
|
1058
|
+
// /spotMarket/tradeOrders
|
|
1051
1059
|
//
|
|
1052
1060
|
// {
|
|
1053
1061
|
// "symbol": "KCS-USDT",
|
|
@@ -1070,6 +1078,22 @@ export default class kucoin extends kucoinRest {
|
|
|
1070
1078
|
// "ts": 1670329987311000000
|
|
1071
1079
|
// }
|
|
1072
1080
|
//
|
|
1081
|
+
// /spot/tradeFills
|
|
1082
|
+
//
|
|
1083
|
+
// {
|
|
1084
|
+
// "fee": 0.00262148,
|
|
1085
|
+
// "feeCurrency": "USDT",
|
|
1086
|
+
// "feeRate": 0.001,
|
|
1087
|
+
// "orderId": "62417436b29df8000183df2f",
|
|
1088
|
+
// "orderType": "market",
|
|
1089
|
+
// "price": 131.074,
|
|
1090
|
+
// "side": "sell",
|
|
1091
|
+
// "size": 0.02,
|
|
1092
|
+
// "symbol": "LTC-USDT",
|
|
1093
|
+
// "time": "1648456758734571745",
|
|
1094
|
+
// "tradeId": "624174362e113d2f467b3043"
|
|
1095
|
+
// }
|
|
1096
|
+
//
|
|
1073
1097
|
const marketId = this.safeString(trade, 'symbol');
|
|
1074
1098
|
market = this.safeMarket(marketId, market, '-');
|
|
1075
1099
|
const symbol = market['symbol'];
|
|
@@ -1079,7 +1103,10 @@ export default class kucoin extends kucoinRest {
|
|
|
1079
1103
|
const price = this.safeString(trade, 'matchPrice');
|
|
1080
1104
|
const amount = this.safeString(trade, 'matchSize');
|
|
1081
1105
|
const order = this.safeString(trade, 'orderId');
|
|
1082
|
-
const timestamp = this.
|
|
1106
|
+
const timestamp = this.safeIntegerProduct2(trade, 'ts', 'time', 0.000001);
|
|
1107
|
+
const feeCurrency = market['quote'];
|
|
1108
|
+
const feeRate = this.safeString(trade, 'feeRate');
|
|
1109
|
+
const feeCost = this.safeString(trade, 'fee');
|
|
1083
1110
|
return this.safeTrade({
|
|
1084
1111
|
'info': trade,
|
|
1085
1112
|
'timestamp': timestamp,
|
|
@@ -1093,7 +1120,11 @@ export default class kucoin extends kucoinRest {
|
|
|
1093
1120
|
'price': price,
|
|
1094
1121
|
'amount': amount,
|
|
1095
1122
|
'cost': undefined,
|
|
1096
|
-
'fee':
|
|
1123
|
+
'fee': {
|
|
1124
|
+
'cost': feeCost,
|
|
1125
|
+
'rate': feeRate,
|
|
1126
|
+
'currency': feeCurrency,
|
|
1127
|
+
},
|
|
1097
1128
|
}, market);
|
|
1098
1129
|
}
|
|
1099
1130
|
async watchBalance(params = {}) {
|
|
@@ -1202,6 +1233,7 @@ export default class kucoin extends kucoinRest {
|
|
|
1202
1233
|
'account.balance': this.handleBalance,
|
|
1203
1234
|
'orderChange': this.handleOrder,
|
|
1204
1235
|
'stopOrder': this.handleOrder,
|
|
1236
|
+
'/spot/tradeFills': this.handleMyTrade,
|
|
1205
1237
|
};
|
|
1206
1238
|
const method = this.safeValue(methods, subject);
|
|
1207
1239
|
if (method !== undefined) {
|
package/js/src/pro/phemex.js
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import xtRest from '../xt.js';
|
|
2
|
+
import { Balances, Dict, Int, Market, OHLCV, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade } from '../base/types.js';
|
|
3
|
+
import Client from '../base/ws/Client.js';
|
|
4
|
+
export default class xt extends xtRest {
|
|
5
|
+
describe(): any;
|
|
6
|
+
getListenKey(isContract: boolean): Promise<any>;
|
|
7
|
+
getCacheIndex(orderbook: any, cache: any): any;
|
|
8
|
+
handleDelta(orderbook: any, delta: any): void;
|
|
9
|
+
subscribe(name: string, access: string, methodName: string, market?: Market, symbols?: string[], params?: {}): Promise<any>;
|
|
10
|
+
watchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
11
|
+
watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
12
|
+
watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
13
|
+
watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
14
|
+
watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
15
|
+
watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
16
|
+
watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
17
|
+
watchBalance(params?: {}): Promise<Balances>;
|
|
18
|
+
handleTicker(client: Client, message: Dict): Dict;
|
|
19
|
+
handleTickers(client: Client, message: Dict): Dict;
|
|
20
|
+
handleOHLCV(client: Client, message: Dict): Dict;
|
|
21
|
+
handleTrade(client: Client, message: Dict): Dict;
|
|
22
|
+
handleOrderBook(client: Client, message: Dict): void;
|
|
23
|
+
parseWsOrderTrade(trade: Dict, market?: Market): Trade;
|
|
24
|
+
parseWsOrder(order: Dict, market?: Market): Order;
|
|
25
|
+
handleOrder(client: Client, message: Dict): Dict;
|
|
26
|
+
handleBalance(client: Client, message: Dict): void;
|
|
27
|
+
handleMyTrades(client: Client, message: Dict): void;
|
|
28
|
+
handleMessage(client: Client, message: any): void;
|
|
29
|
+
ping(client: Client): string;
|
|
30
|
+
handleErrorMessage(client: Client, message: Dict): void;
|
|
31
|
+
}
|