ccxt 4.4.25 → 4.4.26
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 +1 -1
- package/dist/cjs/src/alpaca.js +257 -11
- package/dist/cjs/src/base/Exchange.js +14 -1
- package/dist/cjs/src/binance.js +2 -3
- package/dist/cjs/src/bingx.js +7 -1
- package/dist/cjs/src/bitget.js +2 -2
- package/dist/cjs/src/bitmart.js +3 -3
- package/dist/cjs/src/bybit.js +3 -14
- package/dist/cjs/src/cex.js +40 -0
- package/dist/cjs/src/coinex.js +2 -4
- package/dist/cjs/src/digifinex.js +2 -2
- package/dist/cjs/src/exmo.js +1 -0
- package/dist/cjs/src/gate.js +3 -3
- package/dist/cjs/src/htx.js +2 -3
- package/dist/cjs/src/hyperliquid.js +14 -4
- package/dist/cjs/src/kucoin.js +2 -2
- package/dist/cjs/src/okx.js +3 -2
- package/dist/cjs/src/phemex.js +4 -2
- package/dist/cjs/src/pro/exmo.js +216 -3
- package/dist/cjs/src/whitebit.js +2 -2
- package/dist/cjs/src/xt.js +39 -27
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/alpaca.d.ts +1 -0
- package/js/src/abstract/bingx.d.ts +1 -0
- package/js/src/abstract/okx.d.ts +1 -0
- package/js/src/abstract/phemex.d.ts +1 -0
- package/js/src/alpaca.d.ts +6 -1
- package/js/src/alpaca.js +258 -12
- package/js/src/base/Exchange.d.ts +7 -6
- package/js/src/base/Exchange.js +14 -1
- package/js/src/base/types.d.ts +3 -3
- package/js/src/binance.d.ts +3 -14
- package/js/src/binance.js +2 -3
- package/js/src/bingx.js +7 -1
- package/js/src/bitget.d.ts +3 -13
- package/js/src/bitget.js +2 -2
- package/js/src/bitmart.d.ts +3 -13
- package/js/src/bitmart.js +3 -3
- package/js/src/bybit.d.ts +3 -14
- package/js/src/bybit.js +3 -14
- package/js/src/cex.d.ts +2 -0
- package/js/src/cex.js +40 -0
- package/js/src/coinex.d.ts +3 -15
- package/js/src/coinex.js +2 -4
- package/js/src/digifinex.d.ts +3 -13
- package/js/src/digifinex.js +2 -2
- package/js/src/exmo.js +1 -0
- package/js/src/gate.d.ts +3 -13
- package/js/src/gate.js +3 -3
- package/js/src/htx.d.ts +3 -14
- package/js/src/htx.js +2 -3
- package/js/src/hyperliquid.js +14 -4
- package/js/src/kucoin.d.ts +3 -13
- package/js/src/kucoin.js +2 -2
- package/js/src/okx.d.ts +3 -13
- package/js/src/okx.js +3 -2
- package/js/src/phemex.js +4 -2
- package/js/src/pro/exmo.d.ts +5 -1
- package/js/src/pro/exmo.js +216 -3
- package/js/src/whitebit.d.ts +3 -13
- package/js/src/whitebit.js +2 -2
- package/js/src/woo.d.ts +1 -1
- package/js/src/xt.js +39 -27
- package/package.json +1 -1
package/dist/cjs/src/exmo.js
CHANGED
package/dist/cjs/src/gate.js
CHANGED
|
@@ -6488,14 +6488,14 @@ class gate extends gate$1 {
|
|
|
6488
6488
|
const timestamp = this.safeInteger(info, 'create_time');
|
|
6489
6489
|
return {
|
|
6490
6490
|
'info': info,
|
|
6491
|
-
'timestamp': timestamp,
|
|
6492
|
-
'datetime': this.iso8601(timestamp),
|
|
6493
6491
|
'symbol': this.safeString(market, 'symbol'),
|
|
6494
6492
|
'currency': this.safeCurrencyCode(this.safeString(info, 'currency')),
|
|
6495
|
-
'marginMode': marginMode,
|
|
6496
6493
|
'interest': this.safeNumber(info, 'interest'),
|
|
6497
6494
|
'interestRate': this.safeNumber(info, 'actual_rate'),
|
|
6498
6495
|
'amountBorrowed': undefined,
|
|
6496
|
+
'marginMode': marginMode,
|
|
6497
|
+
'timestamp': timestamp,
|
|
6498
|
+
'datetime': this.iso8601(timestamp),
|
|
6499
6499
|
};
|
|
6500
6500
|
}
|
|
6501
6501
|
sign(path, api = [], method = 'GET', params = {}, headers = undefined, body = undefined) {
|
package/dist/cjs/src/htx.js
CHANGED
|
@@ -7301,16 +7301,15 @@ class htx extends htx$1 {
|
|
|
7301
7301
|
const symbol = this.safeString(market, 'symbol');
|
|
7302
7302
|
const timestamp = this.safeInteger(info, 'accrued-at');
|
|
7303
7303
|
return {
|
|
7304
|
-
'
|
|
7304
|
+
'info': info,
|
|
7305
7305
|
'symbol': symbol,
|
|
7306
|
-
'marginMode': marginMode,
|
|
7307
7306
|
'currency': this.safeCurrencyCode(this.safeString(info, 'currency')),
|
|
7308
7307
|
'interest': this.safeNumber(info, 'interest-amount'),
|
|
7309
7308
|
'interestRate': this.safeNumber(info, 'interest-rate'),
|
|
7310
7309
|
'amountBorrowed': this.safeNumber(info, 'loan-amount'),
|
|
7310
|
+
'marginMode': marginMode,
|
|
7311
7311
|
'timestamp': timestamp,
|
|
7312
7312
|
'datetime': this.iso8601(timestamp),
|
|
7313
|
-
'info': info,
|
|
7314
7313
|
};
|
|
7315
7314
|
}
|
|
7316
7315
|
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
@@ -782,9 +782,18 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
782
782
|
await this.loadMarkets();
|
|
783
783
|
const market = this.market(symbol);
|
|
784
784
|
const until = this.safeInteger(params, 'until', this.milliseconds());
|
|
785
|
-
|
|
785
|
+
let useTail = since === undefined;
|
|
786
|
+
const originalSince = since;
|
|
786
787
|
if (since === undefined) {
|
|
787
|
-
|
|
788
|
+
if (limit !== undefined) {
|
|
789
|
+
// optimization if limit is provided
|
|
790
|
+
const timeframeInMilliseconds = this.parseTimeframe(timeframe) * 1000;
|
|
791
|
+
since = this.sum(until, timeframeInMilliseconds * limit * -1);
|
|
792
|
+
useTail = false;
|
|
793
|
+
}
|
|
794
|
+
else {
|
|
795
|
+
since = 0;
|
|
796
|
+
}
|
|
788
797
|
}
|
|
789
798
|
params = this.omit(params, ['until']);
|
|
790
799
|
const request = {
|
|
@@ -813,7 +822,7 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
813
822
|
// }
|
|
814
823
|
// ]
|
|
815
824
|
//
|
|
816
|
-
return this.parseOHLCVs(response, market, timeframe,
|
|
825
|
+
return this.parseOHLCVs(response, market, timeframe, originalSince, limit, useTail);
|
|
817
826
|
}
|
|
818
827
|
parseOHLCV(ohlcv, market = undefined) {
|
|
819
828
|
//
|
|
@@ -1615,7 +1624,8 @@ class hyperliquid extends hyperliquid$1 {
|
|
|
1615
1624
|
request['startTime'] = since;
|
|
1616
1625
|
}
|
|
1617
1626
|
else {
|
|
1618
|
-
|
|
1627
|
+
const maxLimit = (limit === undefined) ? 500 : limit;
|
|
1628
|
+
request['startTime'] = this.milliseconds() - maxLimit * 60 * 60 * 1000;
|
|
1619
1629
|
}
|
|
1620
1630
|
const until = this.safeInteger(params, 'until');
|
|
1621
1631
|
params = this.omit(params, 'until');
|
package/dist/cjs/src/kucoin.js
CHANGED
|
@@ -4590,15 +4590,15 @@ class kucoin extends kucoin$1 {
|
|
|
4590
4590
|
currencyId = this.safeString(info, 'currency');
|
|
4591
4591
|
}
|
|
4592
4592
|
return {
|
|
4593
|
+
'info': info,
|
|
4593
4594
|
'symbol': symbol,
|
|
4594
|
-
'marginMode': marginMode,
|
|
4595
4595
|
'currency': this.safeCurrencyCode(currencyId),
|
|
4596
4596
|
'interest': interest,
|
|
4597
4597
|
'interestRate': this.safeNumber(info, 'dailyIntRate'),
|
|
4598
4598
|
'amountBorrowed': amountBorrowed,
|
|
4599
|
+
'marginMode': marginMode,
|
|
4599
4600
|
'timestamp': timestamp,
|
|
4600
4601
|
'datetime': this.iso8601(timestamp),
|
|
4601
|
-
'info': info,
|
|
4602
4602
|
};
|
|
4603
4603
|
}
|
|
4604
4604
|
async fetchBorrowRateHistories(codes = undefined, since = undefined, limit = undefined, params = {}) {
|
package/dist/cjs/src/okx.js
CHANGED
|
@@ -395,6 +395,7 @@ class okx extends okx$1 {
|
|
|
395
395
|
// eth staking
|
|
396
396
|
'finance/staking-defi/eth/balance': 5 / 3,
|
|
397
397
|
'finance/staking-defi/eth/purchase-redeem-history': 5 / 3,
|
|
398
|
+
'finance/staking-defi/eth/product-info': 3,
|
|
398
399
|
// copytrading
|
|
399
400
|
'copytrading/current-subpositions': 1,
|
|
400
401
|
'copytrading/subpositions-history': 1,
|
|
@@ -7073,15 +7074,15 @@ class okx extends okx$1 {
|
|
|
7073
7074
|
}
|
|
7074
7075
|
const timestamp = this.safeInteger(info, 'ts');
|
|
7075
7076
|
return {
|
|
7077
|
+
'info': info,
|
|
7076
7078
|
'symbol': this.safeString(market, 'symbol'),
|
|
7077
|
-
'marginMode': this.safeString(info, 'mgnMode'),
|
|
7078
7079
|
'currency': this.safeCurrencyCode(this.safeString(info, 'ccy')),
|
|
7079
7080
|
'interest': this.safeNumber(info, 'interest'),
|
|
7080
7081
|
'interestRate': this.safeNumber(info, 'interestRate'),
|
|
7081
7082
|
'amountBorrowed': this.safeNumber(info, 'liab'),
|
|
7083
|
+
'marginMode': this.safeString(info, 'mgnMode'),
|
|
7082
7084
|
'timestamp': timestamp,
|
|
7083
7085
|
'datetime': this.iso8601(timestamp),
|
|
7084
|
-
'info': info,
|
|
7085
7086
|
};
|
|
7086
7087
|
}
|
|
7087
7088
|
async borrowCrossMargin(code, amount, params = {}) {
|
package/dist/cjs/src/phemex.js
CHANGED
|
@@ -105,7 +105,7 @@ class phemex extends phemex$1 {
|
|
|
105
105
|
'private': 'https://{hostname}',
|
|
106
106
|
},
|
|
107
107
|
'www': 'https://phemex.com',
|
|
108
|
-
'doc': 'https://
|
|
108
|
+
'doc': 'https://phemex-docs.github.io/#overview',
|
|
109
109
|
'fees': 'https://phemex.com/fees-conditions',
|
|
110
110
|
'referral': {
|
|
111
111
|
'url': 'https://phemex.com/register?referralCode=EDNVJ',
|
|
@@ -163,6 +163,7 @@ class phemex extends phemex$1 {
|
|
|
163
163
|
'v2': {
|
|
164
164
|
'get': {
|
|
165
165
|
'public/products': 5,
|
|
166
|
+
'public/products-plus': 5,
|
|
166
167
|
'md/v2/orderbook': 5,
|
|
167
168
|
'md/v2/trade': 5,
|
|
168
169
|
'md/v2/ticker/24hr': 5,
|
|
@@ -735,7 +736,7 @@ class phemex extends phemex$1 {
|
|
|
735
736
|
'max': this.parseSafeNumber(this.safeString(market, 'maxOrderValue')),
|
|
736
737
|
},
|
|
737
738
|
},
|
|
738
|
-
'created':
|
|
739
|
+
'created': this.safeInteger(market, 'listTime'),
|
|
739
740
|
'info': market,
|
|
740
741
|
});
|
|
741
742
|
}
|
|
@@ -744,6 +745,7 @@ class phemex extends phemex$1 {
|
|
|
744
745
|
* @method
|
|
745
746
|
* @name phemex#fetchMarkets
|
|
746
747
|
* @description retrieves data on all markets for phemex
|
|
748
|
+
* @see https://phemex-docs.github.io/#query-product-information-3
|
|
747
749
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
748
750
|
* @returns {object[]} an array of objects representing market data
|
|
749
751
|
*/
|
package/dist/cjs/src/pro/exmo.js
CHANGED
|
@@ -17,7 +17,7 @@ class exmo extends exmo$1 {
|
|
|
17
17
|
'watchTickers': true,
|
|
18
18
|
'watchTrades': true,
|
|
19
19
|
'watchMyTrades': true,
|
|
20
|
-
'watchOrders':
|
|
20
|
+
'watchOrders': true,
|
|
21
21
|
'watchOrderBook': true,
|
|
22
22
|
'watchOHLCV': false,
|
|
23
23
|
},
|
|
@@ -570,6 +570,219 @@ class exmo extends exmo$1 {
|
|
|
570
570
|
this.handleDelta(bookside, deltas[i]);
|
|
571
571
|
}
|
|
572
572
|
}
|
|
573
|
+
async watchOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
574
|
+
/**
|
|
575
|
+
* @method
|
|
576
|
+
* @name exmo#watchOrders
|
|
577
|
+
* @see https://documenter.getpostman.com/view/10287440/SzYXWKPi#85f7bc03-b1c9-4cd2-bd22-8fd422272825
|
|
578
|
+
* @see https://documenter.getpostman.com/view/10287440/SzYXWKPi#95e4ed18-1791-4e6d-83ad-cbfe9be1051c
|
|
579
|
+
* @description watches information on multiple orders made by the user
|
|
580
|
+
* @param {string} symbol unified market symbol of the market orders were made in
|
|
581
|
+
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
582
|
+
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
583
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
584
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
585
|
+
*/
|
|
586
|
+
await this.loadMarkets();
|
|
587
|
+
await this.authenticate(params);
|
|
588
|
+
const [type, query] = this.handleMarketTypeAndParams('watchOrders', undefined, params);
|
|
589
|
+
const url = this.urls['api']['ws'][type];
|
|
590
|
+
let messageHash = undefined;
|
|
591
|
+
if (symbol === undefined) {
|
|
592
|
+
messageHash = 'orders:' + type;
|
|
593
|
+
}
|
|
594
|
+
else {
|
|
595
|
+
const market = this.market(symbol);
|
|
596
|
+
symbol = market['symbol'];
|
|
597
|
+
messageHash = 'orders:' + market['symbol'];
|
|
598
|
+
}
|
|
599
|
+
const message = {
|
|
600
|
+
'method': 'subscribe',
|
|
601
|
+
'topics': [
|
|
602
|
+
type + '/orders',
|
|
603
|
+
],
|
|
604
|
+
'id': this.requestId(),
|
|
605
|
+
};
|
|
606
|
+
const request = this.deepExtend(message, query);
|
|
607
|
+
const orders = await this.watch(url, messageHash, request, messageHash, request);
|
|
608
|
+
return this.filterBySymbolSinceLimit(orders, symbol, since, limit, true);
|
|
609
|
+
}
|
|
610
|
+
handleOrders(client, message) {
|
|
611
|
+
//
|
|
612
|
+
// spot
|
|
613
|
+
// {
|
|
614
|
+
// "ts": 1574427585174,
|
|
615
|
+
// "event": "snapshot",
|
|
616
|
+
// "topic": "spot/orders",
|
|
617
|
+
// "data": [
|
|
618
|
+
// {
|
|
619
|
+
// "order_id": "14",
|
|
620
|
+
// "client_id":"100500",
|
|
621
|
+
// "created": "1574427585",
|
|
622
|
+
// "pair": "BTC_USD",
|
|
623
|
+
// "price": "7750",
|
|
624
|
+
// "quantity": "0.1",
|
|
625
|
+
// "amount": "775",
|
|
626
|
+
// "original_quantity": "0.1",
|
|
627
|
+
// "original_amount": "775",
|
|
628
|
+
// "type": "sell",
|
|
629
|
+
// "status": "open"
|
|
630
|
+
// }
|
|
631
|
+
// ]
|
|
632
|
+
// }
|
|
633
|
+
//
|
|
634
|
+
// margin
|
|
635
|
+
// {
|
|
636
|
+
// "ts":1624371281773,
|
|
637
|
+
// "event":"snapshot",
|
|
638
|
+
// "topic":"margin/orders",
|
|
639
|
+
// "data":[
|
|
640
|
+
// {
|
|
641
|
+
// "order_id":"692844278081168665",
|
|
642
|
+
// "created":"1624371250919761600",
|
|
643
|
+
// "type":"limit_buy",
|
|
644
|
+
// "previous_type":"limit_buy",
|
|
645
|
+
// "pair":"BTC_USD",
|
|
646
|
+
// "leverage":"2",
|
|
647
|
+
// "price":"10000",
|
|
648
|
+
// "stop_price":"0",
|
|
649
|
+
// "distance":"0",
|
|
650
|
+
// "trigger_price":"10000",
|
|
651
|
+
// "init_quantity":"0.1",
|
|
652
|
+
// "quantity":"0.1",
|
|
653
|
+
// "funding_currency":"USD",
|
|
654
|
+
// "funding_quantity":"1000",
|
|
655
|
+
// "funding_rate":"0",
|
|
656
|
+
// "client_id":"111111",
|
|
657
|
+
// "expire":0,
|
|
658
|
+
// "src":1,
|
|
659
|
+
// "comment":"comment1",
|
|
660
|
+
// "updated":1624371250938136600,
|
|
661
|
+
// "status":"active"
|
|
662
|
+
// }
|
|
663
|
+
// ]
|
|
664
|
+
// }
|
|
665
|
+
//
|
|
666
|
+
const topic = this.safeString(message, 'topic');
|
|
667
|
+
const parts = topic.split('/');
|
|
668
|
+
const type = this.safeString(parts, 0);
|
|
669
|
+
const messageHash = 'orders:' + type;
|
|
670
|
+
const event = this.safeString(message, 'event');
|
|
671
|
+
if (this.orders === undefined) {
|
|
672
|
+
const limit = this.safeInteger(this.options, 'ordersLimit', 1000);
|
|
673
|
+
this.orders = new Cache.ArrayCacheBySymbolById(limit);
|
|
674
|
+
}
|
|
675
|
+
const cachedOrders = this.orders;
|
|
676
|
+
let rawOrders = [];
|
|
677
|
+
if (event === 'snapshot') {
|
|
678
|
+
rawOrders = this.safeValue(message, 'data', []);
|
|
679
|
+
}
|
|
680
|
+
else if (event === 'update') {
|
|
681
|
+
const rawOrder = this.safeDict(message, 'data', {});
|
|
682
|
+
rawOrders.push(rawOrder);
|
|
683
|
+
}
|
|
684
|
+
const symbols = {};
|
|
685
|
+
for (let j = 0; j < rawOrders.length; j++) {
|
|
686
|
+
const order = this.parseWsOrder(rawOrders[j]);
|
|
687
|
+
cachedOrders.append(order);
|
|
688
|
+
symbols[order['symbol']] = true;
|
|
689
|
+
}
|
|
690
|
+
const symbolKeys = Object.keys(symbols);
|
|
691
|
+
for (let i = 0; i < symbolKeys.length; i++) {
|
|
692
|
+
const symbol = symbolKeys[i];
|
|
693
|
+
const symbolSpecificMessageHash = 'orders:' + symbol;
|
|
694
|
+
client.resolve(cachedOrders, symbolSpecificMessageHash);
|
|
695
|
+
}
|
|
696
|
+
client.resolve(cachedOrders, messageHash);
|
|
697
|
+
}
|
|
698
|
+
parseWsOrder(order, market = undefined) {
|
|
699
|
+
//
|
|
700
|
+
// {
|
|
701
|
+
// order_id: '43226756791',
|
|
702
|
+
// client_id: 0,
|
|
703
|
+
// created: '1730371416',
|
|
704
|
+
// type: 'market_buy',
|
|
705
|
+
// pair: 'TRX_USD',
|
|
706
|
+
// quantity: '0',
|
|
707
|
+
// original_quantity: '30',
|
|
708
|
+
// status: 'cancelled',
|
|
709
|
+
// last_trade_id: '726480870',
|
|
710
|
+
// last_trade_price: '0.17',
|
|
711
|
+
// last_trade_quantity: '30'
|
|
712
|
+
// }
|
|
713
|
+
//
|
|
714
|
+
const id = this.safeString(order, 'order_id');
|
|
715
|
+
const timestamp = this.safeTimestamp(order, 'created');
|
|
716
|
+
const orderType = this.safeString(order, 'type');
|
|
717
|
+
const side = this.parseSide(orderType);
|
|
718
|
+
const marketId = this.safeString(order, 'pair');
|
|
719
|
+
market = this.safeMarket(marketId, market);
|
|
720
|
+
const symbol = market['symbol'];
|
|
721
|
+
let amount = this.safeString(order, 'quantity');
|
|
722
|
+
if (amount === undefined) {
|
|
723
|
+
const amountField = (side === 'buy') ? 'in_amount' : 'out_amount';
|
|
724
|
+
amount = this.safeString(order, amountField);
|
|
725
|
+
}
|
|
726
|
+
const price = this.safeString(order, 'price');
|
|
727
|
+
const clientOrderId = this.omitZero(this.safeString(order, 'client_id'));
|
|
728
|
+
const triggerPrice = this.omitZero(this.safeString(order, 'stop_price'));
|
|
729
|
+
let type = undefined;
|
|
730
|
+
if ((orderType !== 'buy') && (orderType !== 'sell')) {
|
|
731
|
+
type = orderType;
|
|
732
|
+
}
|
|
733
|
+
let trades = undefined;
|
|
734
|
+
if ('last_trade_id' in order) {
|
|
735
|
+
const trade = this.parseWsTrade(order, market);
|
|
736
|
+
trades = [trade];
|
|
737
|
+
}
|
|
738
|
+
return this.safeOrder({
|
|
739
|
+
'id': id,
|
|
740
|
+
'clientOrderId': clientOrderId,
|
|
741
|
+
'datetime': this.iso8601(timestamp),
|
|
742
|
+
'timestamp': timestamp,
|
|
743
|
+
'lastTradeTimestamp': undefined,
|
|
744
|
+
'status': this.parseStatus(this.safeString(order, 'status')),
|
|
745
|
+
'symbol': symbol,
|
|
746
|
+
'type': type,
|
|
747
|
+
'timeInForce': undefined,
|
|
748
|
+
'postOnly': undefined,
|
|
749
|
+
'side': side,
|
|
750
|
+
'price': price,
|
|
751
|
+
'stopPrice': triggerPrice,
|
|
752
|
+
'triggerPrice': triggerPrice,
|
|
753
|
+
'cost': undefined,
|
|
754
|
+
'amount': this.safeString(order, 'original_quantity'),
|
|
755
|
+
'filled': undefined,
|
|
756
|
+
'remaining': this.safeString(order, 'quantity'),
|
|
757
|
+
'average': undefined,
|
|
758
|
+
'trades': trades,
|
|
759
|
+
'fee': undefined,
|
|
760
|
+
'info': order,
|
|
761
|
+
}, market);
|
|
762
|
+
}
|
|
763
|
+
parseWsTrade(trade, market = undefined) {
|
|
764
|
+
const id = this.safeString(trade, 'order_id');
|
|
765
|
+
const orderType = this.safeString(trade, 'type');
|
|
766
|
+
const side = this.parseSide(orderType);
|
|
767
|
+
const marketId = this.safeString(trade, 'pair');
|
|
768
|
+
market = this.safeMarket(marketId, market);
|
|
769
|
+
const symbol = market['symbol'];
|
|
770
|
+
let type = undefined;
|
|
771
|
+
if ((orderType !== 'buy') && (orderType !== 'sell')) {
|
|
772
|
+
type = orderType;
|
|
773
|
+
}
|
|
774
|
+
return this.safeTrade({
|
|
775
|
+
'id': this.safeString(trade, 'last_trade_id'),
|
|
776
|
+
'symbol': symbol,
|
|
777
|
+
'order': id,
|
|
778
|
+
'type': type,
|
|
779
|
+
'side': side,
|
|
780
|
+
'price': this.safeString(trade, 'last_trade_price'),
|
|
781
|
+
'amount': this.safeString(trade, 'last_trade_quantity'),
|
|
782
|
+
'cost': undefined,
|
|
783
|
+
'fee': undefined,
|
|
784
|
+
}, market);
|
|
785
|
+
}
|
|
573
786
|
handleMessage(client, message) {
|
|
574
787
|
//
|
|
575
788
|
// {
|
|
@@ -610,8 +823,8 @@ class exmo extends exmo$1 {
|
|
|
610
823
|
'spot/trades': this.handleTrades,
|
|
611
824
|
'margin/trades': this.handleTrades,
|
|
612
825
|
'spot/order_book_updates': this.handleOrderBook,
|
|
613
|
-
|
|
614
|
-
|
|
826
|
+
'spot/orders': this.handleOrders,
|
|
827
|
+
'margin/orders': this.handleOrders,
|
|
615
828
|
'spot/user_trades': this.handleMyTrades,
|
|
616
829
|
'margin/user_trades': this.handleMyTrades,
|
|
617
830
|
};
|
package/dist/cjs/src/whitebit.js
CHANGED
|
@@ -2357,15 +2357,15 @@ class whitebit extends whitebit$1 {
|
|
|
2357
2357
|
const symbol = this.safeSymbol(marketId, market, '_');
|
|
2358
2358
|
const timestamp = this.safeTimestamp(info, 'modifyDate');
|
|
2359
2359
|
return {
|
|
2360
|
+
'info': info,
|
|
2360
2361
|
'symbol': symbol,
|
|
2361
|
-
'marginMode': 'cross',
|
|
2362
2362
|
'currency': 'USDT',
|
|
2363
2363
|
'interest': this.safeNumber(info, 'unrealizedFunding'),
|
|
2364
2364
|
'interestRate': 0.00098,
|
|
2365
2365
|
'amountBorrowed': this.safeNumber(info, 'amount'),
|
|
2366
|
+
'marginMode': 'cross',
|
|
2366
2367
|
'timestamp': timestamp,
|
|
2367
2368
|
'datetime': this.iso8601(timestamp),
|
|
2368
|
-
'info': info,
|
|
2369
2369
|
};
|
|
2370
2370
|
}
|
|
2371
2371
|
async fetchFundingRate(symbol, params = {}) {
|
package/dist/cjs/src/xt.js
CHANGED
|
@@ -1970,6 +1970,17 @@ class xt extends xt$1 {
|
|
|
1970
1970
|
// "b": true
|
|
1971
1971
|
// }
|
|
1972
1972
|
//
|
|
1973
|
+
// spot: watchTrades
|
|
1974
|
+
//
|
|
1975
|
+
// {
|
|
1976
|
+
// s: 'btc_usdt',
|
|
1977
|
+
// i: '228825383103928709',
|
|
1978
|
+
// t: 1684258222702,
|
|
1979
|
+
// p: '27003.65',
|
|
1980
|
+
// q: '0.000796',
|
|
1981
|
+
// b: true
|
|
1982
|
+
// }
|
|
1983
|
+
//
|
|
1973
1984
|
// spot: watchMyTrades
|
|
1974
1985
|
//
|
|
1975
1986
|
// {
|
|
@@ -1982,17 +1993,6 @@ class xt extends xt$1 {
|
|
|
1982
1993
|
// "v": "90000" // volume trade amount
|
|
1983
1994
|
// }
|
|
1984
1995
|
//
|
|
1985
|
-
// spot: watchTrades
|
|
1986
|
-
//
|
|
1987
|
-
// {
|
|
1988
|
-
// s: 'btc_usdt',
|
|
1989
|
-
// i: '228825383103928709',
|
|
1990
|
-
// t: 1684258222702,
|
|
1991
|
-
// p: '27003.65',
|
|
1992
|
-
// q: '0.000796',
|
|
1993
|
-
// b: true
|
|
1994
|
-
// }
|
|
1995
|
-
//
|
|
1996
1996
|
// swap and future: fetchTrades
|
|
1997
1997
|
//
|
|
1998
1998
|
// {
|
|
@@ -2072,22 +2072,34 @@ class xt extends xt$1 {
|
|
|
2072
2072
|
marketType = hasSpotKeys ? 'spot' : 'contract';
|
|
2073
2073
|
}
|
|
2074
2074
|
market = this.safeMarket(marketId, market, '_', marketType);
|
|
2075
|
-
|
|
2076
|
-
let
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2075
|
+
let side = undefined;
|
|
2076
|
+
let takerOrMaker = undefined;
|
|
2077
|
+
const isBuyerMaker = this.safeBool(trade, 'b');
|
|
2078
|
+
if (isBuyerMaker !== undefined) {
|
|
2079
|
+
side = isBuyerMaker ? 'sell' : 'buy';
|
|
2080
|
+
takerOrMaker = 'taker'; // public trades always taker
|
|
2081
|
+
}
|
|
2082
|
+
else {
|
|
2083
|
+
const takerMaker = this.safeStringLower(trade, 'takerMaker');
|
|
2084
|
+
if (takerMaker !== undefined) {
|
|
2085
|
+
takerOrMaker = takerMaker;
|
|
2086
|
+
}
|
|
2087
|
+
else {
|
|
2088
|
+
const isMaker = this.safeBool(trade, 'isMaker');
|
|
2089
|
+
if (isMaker !== undefined) {
|
|
2090
|
+
takerOrMaker = isMaker ? 'maker' : 'taker';
|
|
2091
|
+
}
|
|
2092
|
+
}
|
|
2093
|
+
const orderSide = this.safeStringLower(trade, 'orderSide');
|
|
2094
|
+
if (orderSide !== undefined) {
|
|
2095
|
+
side = orderSide;
|
|
2096
|
+
}
|
|
2097
|
+
else {
|
|
2098
|
+
const bidOrAsk = this.safeString(trade, 'm');
|
|
2099
|
+
if (bidOrAsk !== undefined) {
|
|
2100
|
+
side = (bidOrAsk === 'BID') ? 'buy' : 'sell';
|
|
2101
|
+
}
|
|
2102
|
+
}
|
|
2091
2103
|
}
|
|
2092
2104
|
const timestamp = this.safeIntegerN(trade, ['t', 'time', 'timestamp']);
|
|
2093
2105
|
const quantity = this.safeString2(trade, 'q', 'quantity');
|
package/js/ccxt.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
|
|
|
4
4
|
import * as errors from './src/base/errors.js';
|
|
5
5
|
import type { Int, int, Str, Strings, Num, Bool, IndexType, OrderSide, OrderType, MarketType, SubType, Dict, NullableDict, List, NullableList, Fee, OHLCV, OHLCVC, implicitReturnType, Market, Currency, Dictionary, MinMax, FeeInterface, TradingFeeInterface, MarketInterface, Trade, Order, OrderBook, Ticker, Transaction, Tickers, CurrencyInterface, Balance, BalanceAccount, Account, PartialBalances, Balances, DepositAddress, WithdrawalResponse, DepositAddressResponse, FundingRate, FundingRates, Position, BorrowInterest, LeverageTier, LedgerEntry, DepositWithdrawFeeNetwork, DepositWithdrawFee, TransferEntry, CrossBorrowRate, IsolatedBorrowRate, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, CancellationRequest, FundingHistory, MarketMarginModes, MarginMode, Greeks, Conversion, Option, LastPrice, Leverage, MarginModification, Leverages, LastPrices, Currencies, TradingFees, MarginModes, OptionChain, IsolatedBorrowRates, CrossBorrowRates, LeverageTiers, LongShortRatio } from './src/base/types.js';
|
|
6
6
|
import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending, UnsubscribeError } from './src/base/errors.js';
|
|
7
|
-
declare const version = "4.4.
|
|
7
|
+
declare const version = "4.4.25";
|
|
8
8
|
import ace from './src/ace.js';
|
|
9
9
|
import alpaca from './src/alpaca.js';
|
|
10
10
|
import ascendex from './src/ascendex.js';
|
package/js/ccxt.js
CHANGED
|
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
|
|
|
38
38
|
import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, ManualInteractionNeeded, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending, UnsubscribeError } from './src/base/errors.js';
|
|
39
39
|
//-----------------------------------------------------------------------------
|
|
40
40
|
// this is updated by vss.js when building
|
|
41
|
-
const version = '4.4.
|
|
41
|
+
const version = '4.4.26';
|
|
42
42
|
Exchange.ccxtVersion = version;
|
|
43
43
|
//-----------------------------------------------------------------------------
|
|
44
44
|
import ace from './src/ace.js';
|
|
@@ -19,6 +19,7 @@ interface Exchange {
|
|
|
19
19
|
traderPrivateGetV2AssetsSymbolOrAssetId(params?: {}): Promise<implicitReturnType>;
|
|
20
20
|
traderPrivateGetV2CorporateActionsAnnouncementsId(params?: {}): Promise<implicitReturnType>;
|
|
21
21
|
traderPrivateGetV2CorporateActionsAnnouncements(params?: {}): Promise<implicitReturnType>;
|
|
22
|
+
traderPrivateGetV2Wallets(params?: {}): Promise<implicitReturnType>;
|
|
22
23
|
traderPrivatePostV2Orders(params?: {}): Promise<implicitReturnType>;
|
|
23
24
|
traderPrivatePostV2Watchlists(params?: {}): Promise<implicitReturnType>;
|
|
24
25
|
traderPrivatePostV2WatchlistsWatchlistId(params?: {}): Promise<implicitReturnType>;
|
|
@@ -35,6 +35,7 @@ interface Exchange {
|
|
|
35
35
|
swapV1PrivateGetMarketMarkPriceKlines(params?: {}): Promise<implicitReturnType>;
|
|
36
36
|
swapV1PrivateGetTradeBatchCancelReplace(params?: {}): Promise<implicitReturnType>;
|
|
37
37
|
swapV1PrivateGetTradeFullOrder(params?: {}): Promise<implicitReturnType>;
|
|
38
|
+
swapV1PrivateGetPositionMarginHistory(params?: {}): Promise<implicitReturnType>;
|
|
38
39
|
swapV1PrivatePostTradeCancelReplace(params?: {}): Promise<implicitReturnType>;
|
|
39
40
|
swapV1PrivatePostPositionSideDual(params?: {}): Promise<implicitReturnType>;
|
|
40
41
|
swapV1PrivatePostTradeClosePosition(params?: {}): Promise<implicitReturnType>;
|
package/js/src/abstract/okx.d.ts
CHANGED
|
@@ -188,6 +188,7 @@ interface Exchange {
|
|
|
188
188
|
privateGetFinanceStakingDefiOrdersHistory(params?: {}): Promise<implicitReturnType>;
|
|
189
189
|
privateGetFinanceStakingDefiEthBalance(params?: {}): Promise<implicitReturnType>;
|
|
190
190
|
privateGetFinanceStakingDefiEthPurchaseRedeemHistory(params?: {}): Promise<implicitReturnType>;
|
|
191
|
+
privateGetFinanceStakingDefiEthProductInfo(params?: {}): Promise<implicitReturnType>;
|
|
191
192
|
privateGetCopytradingCurrentSubpositions(params?: {}): Promise<implicitReturnType>;
|
|
192
193
|
privateGetCopytradingSubpositionsHistory(params?: {}): Promise<implicitReturnType>;
|
|
193
194
|
privateGetCopytradingInstruments(params?: {}): Promise<implicitReturnType>;
|
|
@@ -23,6 +23,7 @@ interface Exchange {
|
|
|
23
23
|
v1GetExchangePublicProducts(params?: {}): Promise<implicitReturnType>;
|
|
24
24
|
v1GetApiDataPublicDataFundingRateHistory(params?: {}): Promise<implicitReturnType>;
|
|
25
25
|
v2GetPublicProducts(params?: {}): Promise<implicitReturnType>;
|
|
26
|
+
v2GetPublicProductsPlus(params?: {}): Promise<implicitReturnType>;
|
|
26
27
|
v2GetMdV2Orderbook(params?: {}): Promise<implicitReturnType>;
|
|
27
28
|
v2GetMdV2Trade(params?: {}): Promise<implicitReturnType>;
|
|
28
29
|
v2GetMdV2Ticker24hr(params?: {}): Promise<implicitReturnType>;
|
package/js/src/alpaca.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/alpaca.js';
|
|
2
|
-
import type { Dict, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Trade, int } from './base/types.js';
|
|
2
|
+
import type { Dict, Int, Market, Num, OHLCV, Order, OrderBook, OrderSide, OrderType, Str, Trade, int, Strings, Ticker, Tickers, Currency, DepositAddress } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class alpaca
|
|
5
5
|
* @augments Exchange
|
|
@@ -13,6 +13,8 @@ export default class alpaca extends Exchange {
|
|
|
13
13
|
fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
14
14
|
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
15
15
|
parseOHLCV(ohlcv: any, market?: Market): OHLCV;
|
|
16
|
+
fetchTicker(symbol: string, params?: {}): Promise<Ticker>;
|
|
17
|
+
fetchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
16
18
|
createOrder(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
|
|
17
19
|
cancelOrder(id: string, symbol?: Str, params?: {}): Promise<Order>;
|
|
18
20
|
cancelAllOrders(symbol?: Str, params?: {}): Promise<Order[]>;
|
|
@@ -23,7 +25,10 @@ export default class alpaca extends Exchange {
|
|
|
23
25
|
parseOrder(order: Dict, market?: Market): Order;
|
|
24
26
|
parseOrderStatus(status: Str): string;
|
|
25
27
|
parseTimeInForce(timeInForce: Str): string;
|
|
28
|
+
fetchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
|
26
29
|
parseTrade(trade: Dict, market?: Market): Trade;
|
|
30
|
+
fetchDepositAddress(code: string, params?: {}): Promise<DepositAddress>;
|
|
31
|
+
parseDepositAddress(depositAddress: any, currency?: Currency): DepositAddress;
|
|
27
32
|
sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
|
|
28
33
|
url: string;
|
|
29
34
|
method: string;
|