ccxt 4.2.55 → 4.2.57
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 -3
- package/build.sh +2 -2
- package/dist/ccxt.browser.js +540 -185
- package/dist/ccxt.browser.min.js +6 -6
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +31 -2
- package/dist/cjs/src/binance.js +155 -0
- package/dist/cjs/src/bingx.js +3 -1
- package/dist/cjs/src/bitmex.js +42 -1
- package/dist/cjs/src/hitbtc.js +51 -54
- package/dist/cjs/src/mexc.js +75 -0
- package/dist/cjs/src/pro/bitget.js +69 -73
- package/dist/cjs/src/pro/bitmex.js +23 -32
- package/dist/cjs/src/pro/bybit.js +19 -5
- package/dist/cjs/src/pro/cex.js +6 -2
- package/dist/cjs/src/pro/coinex.js +6 -3
- package/dist/cjs/src/pro/currencycom.js +2 -1
- package/dist/cjs/src/pro/kraken.js +1 -1
- package/dist/cjs/src/pro/mexc.js +2 -2
- package/dist/cjs/src/pro/whitebit.js +11 -7
- package/dist/cjs/src/upbit.js +1 -1
- package/dist/cjs/src/woo.js +41 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/woo.d.ts +9 -0
- package/js/src/base/Exchange.d.ts +11 -5
- package/js/src/base/Exchange.js +31 -2
- package/js/src/base/types.d.ts +5 -3
- package/js/src/binance.d.ts +3 -1
- package/js/src/binance.js +155 -0
- package/js/src/bingx.d.ts +4 -4
- package/js/src/bingx.js +3 -1
- package/js/src/bitmex.d.ts +2 -0
- package/js/src/bitmex.js +42 -1
- package/js/src/hitbtc.d.ts +3 -2
- package/js/src/hitbtc.js +51 -54
- package/js/src/mexc.d.ts +12 -0
- package/js/src/mexc.js +75 -0
- package/js/src/pro/bitget.d.ts +0 -1
- package/js/src/pro/bitget.js +69 -73
- package/js/src/pro/bitmex.js +24 -31
- package/js/src/pro/bybit.js +19 -5
- package/js/src/pro/cex.js +6 -2
- package/js/src/pro/coinex.js +6 -3
- package/js/src/pro/currencycom.js +2 -1
- package/js/src/pro/kraken.js +1 -1
- package/js/src/pro/mexc.js +2 -2
- package/js/src/pro/whitebit.js +11 -7
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
- package/js/src/upbit.js +1 -1
- package/js/src/woo.d.ts +1 -0
- package/js/src/woo.js +41 -0
- package/package.json +1 -1
- package/skip-tests.json +21 -163
|
@@ -89,7 +89,10 @@ class bitget extends bitget$1 {
|
|
|
89
89
|
}
|
|
90
90
|
getInstType(market, params = {}) {
|
|
91
91
|
let instType = undefined;
|
|
92
|
-
if (
|
|
92
|
+
if (market === undefined) {
|
|
93
|
+
[instType, params] = this.handleProductTypeAndParams(undefined, params);
|
|
94
|
+
}
|
|
95
|
+
else if ((market['swap']) || (market['future'])) {
|
|
93
96
|
[instType, params] = this.handleProductTypeAndParams(market, params);
|
|
94
97
|
}
|
|
95
98
|
else {
|
|
@@ -666,9 +669,12 @@ class bitget extends bitget$1 {
|
|
|
666
669
|
stored = new Cache.ArrayCache(limit);
|
|
667
670
|
this.trades[symbol] = stored;
|
|
668
671
|
}
|
|
669
|
-
const data = this.
|
|
670
|
-
|
|
671
|
-
|
|
672
|
+
const data = this.safeList(message, 'data', []);
|
|
673
|
+
const length = data.length;
|
|
674
|
+
const maxLength = Math.max(length - 1, 0);
|
|
675
|
+
// fix chronological order by reversing
|
|
676
|
+
for (let i = maxLength; i >= 0; i--) {
|
|
677
|
+
const rawTrade = data[i];
|
|
672
678
|
const parsed = this.parseWsTrade(rawTrade, market);
|
|
673
679
|
stored.append(parsed);
|
|
674
680
|
}
|
|
@@ -685,22 +691,71 @@ class bitget extends bitget$1 {
|
|
|
685
691
|
// "tradeId": "1116461060594286593"
|
|
686
692
|
// }
|
|
687
693
|
//
|
|
688
|
-
|
|
689
|
-
|
|
694
|
+
// order with trade in it
|
|
695
|
+
// {
|
|
696
|
+
// accBaseVolume: '0.1',
|
|
697
|
+
// baseVolume: '0.1',
|
|
698
|
+
// cTime: '1709221342922',
|
|
699
|
+
// clientOid: '1147122943507734528',
|
|
700
|
+
// enterPointSource: 'API',
|
|
701
|
+
// feeDetail: [Array],
|
|
702
|
+
// fillFee: '-0.0049578',
|
|
703
|
+
// fillFeeCoin: 'USDT',
|
|
704
|
+
// fillNotionalUsd: '8.263',
|
|
705
|
+
// fillPrice: '82.63',
|
|
706
|
+
// fillTime: '1709221342986',
|
|
707
|
+
// force: 'gtc',
|
|
708
|
+
// instId: 'LTCUSDT',
|
|
709
|
+
// leverage: '10',
|
|
710
|
+
// marginCoin: 'USDT',
|
|
711
|
+
// marginMode: 'crossed',
|
|
712
|
+
// notionalUsd: '8.268',
|
|
713
|
+
// orderId: '1147122943499345921',
|
|
714
|
+
// orderType: 'market',
|
|
715
|
+
// pnl: '0',
|
|
716
|
+
// posMode: 'hedge_mode',
|
|
717
|
+
// posSide: 'short',
|
|
718
|
+
// price: '0',
|
|
719
|
+
// priceAvg: '82.63',
|
|
720
|
+
// reduceOnly: 'no',
|
|
721
|
+
// side: 'sell',
|
|
722
|
+
// size: '0.1',
|
|
723
|
+
// status: 'filled',
|
|
724
|
+
// tradeId: '1147122943772479563',
|
|
725
|
+
// tradeScope: 'T',
|
|
726
|
+
// tradeSide: 'open',
|
|
727
|
+
// uTime: '1709221342986'
|
|
728
|
+
// }
|
|
729
|
+
//
|
|
730
|
+
const instId = this.safeString(trade, 'instId');
|
|
731
|
+
if (market === undefined) {
|
|
732
|
+
market = this.safeMarket(instId, undefined, undefined, 'contract');
|
|
733
|
+
}
|
|
734
|
+
const timestamp = this.safeIntegerN(trade, ['uTime', 'cTime', 'ts']);
|
|
735
|
+
const feeCost = this.safeString(trade, 'fillFee');
|
|
736
|
+
let fee = undefined;
|
|
737
|
+
if (feeCost !== undefined) {
|
|
738
|
+
const feeCurrencyId = this.safeString(trade, 'fillFeeCoin');
|
|
739
|
+
const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
|
|
740
|
+
fee = {
|
|
741
|
+
'cost': Precise["default"].stringAbs(feeCost),
|
|
742
|
+
'currency': feeCurrencyCode,
|
|
743
|
+
};
|
|
744
|
+
}
|
|
690
745
|
return this.safeTrade({
|
|
691
746
|
'info': trade,
|
|
692
747
|
'id': this.safeString(trade, 'tradeId'),
|
|
693
|
-
'order':
|
|
748
|
+
'order': this.safeString(trade, 'orderId'),
|
|
694
749
|
'timestamp': timestamp,
|
|
695
750
|
'datetime': this.iso8601(timestamp),
|
|
696
751
|
'symbol': market['symbol'],
|
|
697
752
|
'type': undefined,
|
|
698
753
|
'side': this.safeString(trade, 'side'),
|
|
699
754
|
'takerOrMaker': undefined,
|
|
700
|
-
'price': this.
|
|
755
|
+
'price': this.safeString2(trade, 'priceAvg', 'price'),
|
|
701
756
|
'amount': this.safeString(trade, 'size'),
|
|
702
|
-
'cost':
|
|
703
|
-
'fee':
|
|
757
|
+
'cost': this.safeString(trade, 'fillNotionalUsd'),
|
|
758
|
+
'fee': fee,
|
|
704
759
|
}, market);
|
|
705
760
|
}
|
|
706
761
|
async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -1105,6 +1160,9 @@ class bitget extends bitget$1 {
|
|
|
1105
1160
|
const marketSymbols = {};
|
|
1106
1161
|
for (let i = 0; i < data.length; i++) {
|
|
1107
1162
|
const order = data[i];
|
|
1163
|
+
if ('tradeId' in order) {
|
|
1164
|
+
this.handleMyTrades(client, order);
|
|
1165
|
+
}
|
|
1108
1166
|
const marketId = this.safeString(order, 'instId');
|
|
1109
1167
|
const market = this.safeMarket(marketId, undefined, undefined, marketType);
|
|
1110
1168
|
const parsed = this.parseWsOrder(order, market);
|
|
@@ -1370,7 +1428,7 @@ class bitget extends bitget$1 {
|
|
|
1370
1428
|
this.myTrades = new Cache.ArrayCache(limit);
|
|
1371
1429
|
}
|
|
1372
1430
|
const stored = this.myTrades;
|
|
1373
|
-
const parsed = this.
|
|
1431
|
+
const parsed = this.parseWsTrade(message);
|
|
1374
1432
|
stored.append(parsed);
|
|
1375
1433
|
const symbol = parsed['symbol'];
|
|
1376
1434
|
const messageHash = 'myTrades';
|
|
@@ -1378,68 +1436,6 @@ class bitget extends bitget$1 {
|
|
|
1378
1436
|
const symbolSpecificMessageHash = 'myTrades:' + symbol;
|
|
1379
1437
|
client.resolve(stored, symbolSpecificMessageHash);
|
|
1380
1438
|
}
|
|
1381
|
-
parseWsMyTrade(trade, market = undefined) {
|
|
1382
|
-
//
|
|
1383
|
-
// order and trade mixin (contract)
|
|
1384
|
-
//
|
|
1385
|
-
// {
|
|
1386
|
-
// "accBaseVolume": "0",
|
|
1387
|
-
// "cTime": "1701920553759",
|
|
1388
|
-
// "clientOid": "1116501214318198793",
|
|
1389
|
-
// "enterPointSource": "WEB",
|
|
1390
|
-
// "feeDetail": [{
|
|
1391
|
-
// "feeCoin": "USDT",
|
|
1392
|
-
// "fee": "-0.162003"
|
|
1393
|
-
// }],
|
|
1394
|
-
// "force": "gtc",
|
|
1395
|
-
// "instId": "BTCUSDT",
|
|
1396
|
-
// "leverage": "20",
|
|
1397
|
-
// "marginCoin": "USDT",
|
|
1398
|
-
// "marginMode": "isolated",
|
|
1399
|
-
// "notionalUsd": "105",
|
|
1400
|
-
// "orderId": "1116501214293032964",
|
|
1401
|
-
// "orderType": "limit",
|
|
1402
|
-
// "posMode": "hedge_mode",
|
|
1403
|
-
// "posSide": "long",
|
|
1404
|
-
// "price": "35000",
|
|
1405
|
-
// "reduceOnly": "no",
|
|
1406
|
-
// "side": "buy",
|
|
1407
|
-
// "size": "0.003",
|
|
1408
|
-
// "status": "canceled",
|
|
1409
|
-
// "tradeSide": "open",
|
|
1410
|
-
// "uTime": "1701920595866"
|
|
1411
|
-
// }
|
|
1412
|
-
//
|
|
1413
|
-
const marketId = this.safeString(trade, 'instId');
|
|
1414
|
-
market = this.safeMarket(marketId, market, undefined, 'contract');
|
|
1415
|
-
const timestamp = this.safeInteger2(trade, 'uTime', 'cTime');
|
|
1416
|
-
const orderFee = this.safeValue(trade, 'feeDetail', []);
|
|
1417
|
-
const fee = this.safeValue(orderFee, 0);
|
|
1418
|
-
const feeAmount = this.safeString(fee, 'fee');
|
|
1419
|
-
let feeObject = undefined;
|
|
1420
|
-
if (feeAmount !== undefined) {
|
|
1421
|
-
const feeCurrency = this.safeString(fee, 'feeCoin');
|
|
1422
|
-
feeObject = {
|
|
1423
|
-
'cost': Precise["default"].stringAbs(feeAmount),
|
|
1424
|
-
'currency': this.safeCurrencyCode(feeCurrency),
|
|
1425
|
-
};
|
|
1426
|
-
}
|
|
1427
|
-
return this.safeTrade({
|
|
1428
|
-
'info': trade,
|
|
1429
|
-
'id': undefined,
|
|
1430
|
-
'order': this.safeString(trade, 'orderId'),
|
|
1431
|
-
'timestamp': timestamp,
|
|
1432
|
-
'datetime': this.iso8601(timestamp),
|
|
1433
|
-
'symbol': market['symbol'],
|
|
1434
|
-
'type': this.safeString(trade, 'orderType'),
|
|
1435
|
-
'side': this.safeString(trade, 'side'),
|
|
1436
|
-
'takerOrMaker': undefined,
|
|
1437
|
-
'price': this.safeString(trade, 'price'),
|
|
1438
|
-
'amount': this.safeString(trade, 'size'),
|
|
1439
|
-
'cost': this.safeString(trade, 'notionalUsd'),
|
|
1440
|
-
'fee': feeObject,
|
|
1441
|
-
}, market);
|
|
1442
|
-
}
|
|
1443
1439
|
async watchBalance(params = {}) {
|
|
1444
1440
|
/**
|
|
1445
1441
|
* @method
|
|
@@ -60,17 +60,9 @@ class bitmex extends bitmex$1 {
|
|
|
60
60
|
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
61
61
|
*/
|
|
62
62
|
await this.loadMarkets();
|
|
63
|
-
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
const url = this.urls['api']['ws'];
|
|
67
|
-
const request = {
|
|
68
|
-
'op': 'subscribe',
|
|
69
|
-
'args': [
|
|
70
|
-
messageHash,
|
|
71
|
-
],
|
|
72
|
-
};
|
|
73
|
-
return await this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
63
|
+
symbol = this.symbol(symbol);
|
|
64
|
+
const tickers = await this.watchTickers([symbol], params);
|
|
65
|
+
return tickers[symbol];
|
|
74
66
|
}
|
|
75
67
|
async watchTickers(symbols = undefined, params = {}) {
|
|
76
68
|
/**
|
|
@@ -86,26 +78,27 @@ class bitmex extends bitmex$1 {
|
|
|
86
78
|
const name = 'instrument';
|
|
87
79
|
const url = this.urls['api']['ws'];
|
|
88
80
|
const messageHashes = [];
|
|
81
|
+
const rawSubscriptions = [];
|
|
89
82
|
if (symbols !== undefined) {
|
|
90
83
|
for (let i = 0; i < symbols.length; i++) {
|
|
91
84
|
const symbol = symbols[i];
|
|
92
85
|
const market = this.market(symbol);
|
|
93
|
-
const
|
|
94
|
-
|
|
86
|
+
const subscription = name + ':' + market['id'];
|
|
87
|
+
rawSubscriptions.push(subscription);
|
|
88
|
+
const messageHash = 'ticker:' + symbol;
|
|
89
|
+
messageHashes.push(messageHash);
|
|
95
90
|
}
|
|
96
91
|
}
|
|
97
92
|
else {
|
|
98
|
-
|
|
93
|
+
rawSubscriptions.push(name);
|
|
94
|
+
messageHashes.push('alltickers');
|
|
99
95
|
}
|
|
100
96
|
const request = {
|
|
101
97
|
'op': 'subscribe',
|
|
102
|
-
'args':
|
|
98
|
+
'args': rawSubscriptions,
|
|
103
99
|
};
|
|
104
|
-
const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params),
|
|
100
|
+
const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), rawSubscriptions);
|
|
105
101
|
if (this.newUpdates) {
|
|
106
|
-
if (symbols === undefined) {
|
|
107
|
-
return ticker;
|
|
108
|
-
}
|
|
109
102
|
const result = {};
|
|
110
103
|
result[ticker['symbol']] = ticker;
|
|
111
104
|
return result;
|
|
@@ -339,23 +332,21 @@ class bitmex extends bitmex$1 {
|
|
|
339
332
|
// ]
|
|
340
333
|
// }
|
|
341
334
|
//
|
|
342
|
-
const table = this.safeString(message, 'table');
|
|
343
335
|
const data = this.safeList(message, 'data', []);
|
|
344
|
-
const tickers = {};
|
|
345
336
|
for (let i = 0; i < data.length; i++) {
|
|
346
337
|
const update = data[i];
|
|
347
338
|
const marketId = this.safeString(update, 'symbol');
|
|
348
|
-
const
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
const
|
|
353
|
-
const
|
|
354
|
-
tickers[symbol] =
|
|
355
|
-
|
|
356
|
-
client.resolve(
|
|
339
|
+
const symbol = this.safeSymbol(marketId);
|
|
340
|
+
if (!(symbol in this.tickers)) {
|
|
341
|
+
this.tickers[symbol] = this.parseTicker({});
|
|
342
|
+
}
|
|
343
|
+
const updatedTicker = this.parseTicker(update);
|
|
344
|
+
const fullParsedTicker = this.deepExtend(this.tickers[symbol], updatedTicker);
|
|
345
|
+
this.tickers[symbol] = fullParsedTicker;
|
|
346
|
+
const messageHash = 'ticker:' + symbol;
|
|
347
|
+
client.resolve(fullParsedTicker, messageHash);
|
|
348
|
+
client.resolve(fullParsedTicker, 'alltickers');
|
|
357
349
|
}
|
|
358
|
-
client.resolve(tickers, 'instrument');
|
|
359
350
|
return message;
|
|
360
351
|
}
|
|
361
352
|
async watchBalance(params = {}) {
|
|
@@ -1335,7 +1326,7 @@ class bitmex extends bitmex$1 {
|
|
|
1335
1326
|
const messageHash = table + ':' + market['id'];
|
|
1336
1327
|
const result = [
|
|
1337
1328
|
this.parse8601(this.safeString(candle, 'timestamp')) - duration * 1000,
|
|
1338
|
-
|
|
1329
|
+
undefined,
|
|
1339
1330
|
this.safeFloat(candle, 'high'),
|
|
1340
1331
|
this.safeFloat(candle, 'low'),
|
|
1341
1332
|
this.safeFloat(candle, 'close'),
|
|
@@ -328,15 +328,29 @@ class bybit extends bybit$1 {
|
|
|
328
328
|
// "price24hPcnt": "-0.0388"
|
|
329
329
|
// }
|
|
330
330
|
// }
|
|
331
|
+
// swap delta
|
|
332
|
+
// {
|
|
333
|
+
// "topic":"tickers.AAVEUSDT",
|
|
334
|
+
// "type":"delta",
|
|
335
|
+
// "data":{
|
|
336
|
+
// "symbol":"AAVEUSDT",
|
|
337
|
+
// "bid1Price":"112.89",
|
|
338
|
+
// "bid1Size":"2.12",
|
|
339
|
+
// "ask1Price":"112.90",
|
|
340
|
+
// "ask1Size":"5.02"
|
|
341
|
+
// },
|
|
342
|
+
// "cs":78039939929,
|
|
343
|
+
// "ts":1709210212704
|
|
344
|
+
// }
|
|
331
345
|
//
|
|
332
346
|
const topic = this.safeString(message, 'topic', '');
|
|
333
347
|
const updateType = this.safeString(message, 'type', '');
|
|
334
|
-
const data = this.
|
|
335
|
-
const isSpot = this.safeString(data, '
|
|
348
|
+
const data = this.safeDict(message, 'data', {});
|
|
349
|
+
const isSpot = this.safeString(data, 'usdIndexPrice') !== undefined;
|
|
336
350
|
const type = isSpot ? 'spot' : 'contract';
|
|
337
351
|
let symbol = undefined;
|
|
338
352
|
let parsed = undefined;
|
|
339
|
-
if ((updateType === 'snapshot')
|
|
353
|
+
if ((updateType === 'snapshot')) {
|
|
340
354
|
parsed = this.parseTicker(data);
|
|
341
355
|
symbol = parsed['symbol'];
|
|
342
356
|
}
|
|
@@ -347,8 +361,8 @@ class bybit extends bybit$1 {
|
|
|
347
361
|
const market = this.safeMarket(marketId, undefined, undefined, type);
|
|
348
362
|
symbol = market['symbol'];
|
|
349
363
|
// update the info in place
|
|
350
|
-
const ticker = this.
|
|
351
|
-
const rawTicker = this.
|
|
364
|
+
const ticker = this.safeDict(this.tickers, symbol, {});
|
|
365
|
+
const rawTicker = this.safeDict(ticker, 'info', {});
|
|
352
366
|
const merged = this.extend(rawTicker, data);
|
|
353
367
|
parsed = this.parseTicker(merged);
|
|
354
368
|
}
|
package/dist/cjs/src/pro/cex.js
CHANGED
|
@@ -1088,7 +1088,10 @@ class cex extends cex$1 {
|
|
|
1088
1088
|
for (let i = 0; i < sorted.length; i++) {
|
|
1089
1089
|
stored.append(this.parseOHLCV(sorted[i], market));
|
|
1090
1090
|
}
|
|
1091
|
-
this.ohlcvs
|
|
1091
|
+
if (!(symbol in this.ohlcvs)) {
|
|
1092
|
+
this.ohlcvs[symbol] = {};
|
|
1093
|
+
}
|
|
1094
|
+
this.ohlcvs[symbol]['unknown'] = stored;
|
|
1092
1095
|
client.resolve(stored, messageHash);
|
|
1093
1096
|
}
|
|
1094
1097
|
handleOHLCV24(client, message) {
|
|
@@ -1147,7 +1150,8 @@ class cex extends cex$1 {
|
|
|
1147
1150
|
const pair = this.safeString(message, 'pair');
|
|
1148
1151
|
const symbol = this.pairToSymbol(pair);
|
|
1149
1152
|
const messageHash = 'ohlcv:' + symbol;
|
|
1150
|
-
const stored = this.safeValue(this.ohlcvs, symbol);
|
|
1153
|
+
// const stored = this.safeValue (this.ohlcvs, symbol);
|
|
1154
|
+
const stored = this.ohlcvs[symbol]['unknown'];
|
|
1151
1155
|
for (let i = 0; i < data.length; i++) {
|
|
1152
1156
|
const ohlcv = [
|
|
1153
1157
|
this.safeTimestamp(data[i], 0),
|
|
@@ -387,14 +387,17 @@ class coinex extends coinex$1 {
|
|
|
387
387
|
const keys = Object.keys(this.ohlcvs);
|
|
388
388
|
const keysLength = keys.length;
|
|
389
389
|
if (keysLength === 0) {
|
|
390
|
+
this.ohlcvs['unknown'] = {};
|
|
390
391
|
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
391
|
-
|
|
392
|
+
const stored = new Cache.ArrayCacheByTimestamp(limit);
|
|
393
|
+
this.ohlcvs['unknown']['unknown'] = stored;
|
|
392
394
|
}
|
|
395
|
+
const ohlcv = this.ohlcvs['unknown']['unknown'];
|
|
393
396
|
for (let i = 0; i < ohlcvs.length; i++) {
|
|
394
397
|
const candle = ohlcvs[i];
|
|
395
|
-
|
|
398
|
+
ohlcv.append(candle);
|
|
396
399
|
}
|
|
397
|
-
client.resolve(
|
|
400
|
+
client.resolve(ohlcv, messageHash);
|
|
398
401
|
}
|
|
399
402
|
async watchTicker(symbol, params = {}) {
|
|
400
403
|
/**
|
|
@@ -90,7 +90,7 @@ class currencycom extends currencycom$1 {
|
|
|
90
90
|
// "accountId": 5470310874305732,
|
|
91
91
|
// "collateralCurrency": true,
|
|
92
92
|
// "asset": "USD",
|
|
93
|
-
// "free": 47.
|
|
93
|
+
// "free": 47.82576736,
|
|
94
94
|
// "locked": 1.187925,
|
|
95
95
|
// "default": true
|
|
96
96
|
// },
|
|
@@ -460,6 +460,7 @@ class currencycom extends currencycom$1 {
|
|
|
460
460
|
orderbook = this.orderBook();
|
|
461
461
|
}
|
|
462
462
|
orderbook.reset({
|
|
463
|
+
'symbol': symbol,
|
|
463
464
|
'timestamp': timestamp,
|
|
464
465
|
'datetime': this.iso8601(timestamp),
|
|
465
466
|
});
|
|
@@ -355,7 +355,7 @@ class kraken extends kraken$1 {
|
|
|
355
355
|
// [
|
|
356
356
|
// 0, // channelID
|
|
357
357
|
// [ // price volume time side type misc
|
|
358
|
-
// [ "5541.20000", "0.15850568", "1534614057.
|
|
358
|
+
// [ "5541.20000", "0.15850568", "1534614057.321596", "s", "l", "" ],
|
|
359
359
|
// [ "6060.00000", "0.02455000", "1534614057.324998", "b", "l", "" ],
|
|
360
360
|
// ],
|
|
361
361
|
// "trade",
|
package/dist/cjs/src/pro/mexc.js
CHANGED
|
@@ -244,7 +244,7 @@ class mexc extends mexc$1 {
|
|
|
244
244
|
// "d": {
|
|
245
245
|
// "e": "spot@public.kline.v3.api",
|
|
246
246
|
// "k": {
|
|
247
|
-
// "t":
|
|
247
|
+
// "t": 1678642261,
|
|
248
248
|
// "o": 20626.94,
|
|
249
249
|
// "c": 20599.69,
|
|
250
250
|
// "h": 20626.94,
|
|
@@ -457,7 +457,7 @@ class mexc extends mexc$1 {
|
|
|
457
457
|
client.subscriptions[messageHash] = 1;
|
|
458
458
|
this.orderbooks[symbol] = this.countedOrderBook({});
|
|
459
459
|
}
|
|
460
|
-
const storedOrderBook = this.
|
|
460
|
+
const storedOrderBook = this.orderbooks[symbol];
|
|
461
461
|
const nonce = this.safeInteger(storedOrderBook, 'nonce');
|
|
462
462
|
if (nonce === undefined) {
|
|
463
463
|
const cacheLength = storedOrderBook.cache.length;
|
|
@@ -114,15 +114,19 @@ class whitebit extends whitebit$1 {
|
|
|
114
114
|
const symbol = market['symbol'];
|
|
115
115
|
const messageHash = 'candles' + ':' + symbol;
|
|
116
116
|
const parsed = this.parseOHLCV(data, market);
|
|
117
|
-
this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol);
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
// this.ohlcvs[symbol] = this.safeValue (this.ohlcvs, symbol);
|
|
118
|
+
if (!(symbol in this.ohlcvs)) {
|
|
119
|
+
this.ohlcvs[symbol] = {};
|
|
120
|
+
}
|
|
121
|
+
// let stored = this.ohlcvs[symbol]['unknown']; // we don't know the timeframe but we need to respect the type
|
|
122
|
+
if (!('unknown' in this.ohlcvs[symbol])) {
|
|
120
123
|
const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
|
|
121
|
-
stored = new Cache.ArrayCacheByTimestamp(limit);
|
|
122
|
-
this.ohlcvs[symbol] = stored;
|
|
124
|
+
const stored = new Cache.ArrayCacheByTimestamp(limit);
|
|
125
|
+
this.ohlcvs[symbol]['unknown'] = stored;
|
|
123
126
|
}
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
const ohlcv = this.ohlcvs[symbol]['unknown'];
|
|
128
|
+
ohlcv.append(parsed);
|
|
129
|
+
client.resolve(ohlcv, messageHash);
|
|
126
130
|
}
|
|
127
131
|
return message;
|
|
128
132
|
}
|
package/dist/cjs/src/upbit.js
CHANGED
|
@@ -616,7 +616,7 @@ class upbit extends upbit$1 {
|
|
|
616
616
|
// "trade_time": "104543",
|
|
617
617
|
// "trade_date_kst": "20181122",
|
|
618
618
|
// "trade_time_kst": "194543",
|
|
619
|
-
// "trade_timestamp":
|
|
619
|
+
// "trade_timestamp": 1542883543096,
|
|
620
620
|
// "opening_price": 0.02976455,
|
|
621
621
|
// "high_price": 0.02992577,
|
|
622
622
|
// "low_price": 0.02934283,
|
package/dist/cjs/src/woo.js
CHANGED
|
@@ -97,6 +97,7 @@ class woo extends woo$1 {
|
|
|
97
97
|
'reduceMargin': false,
|
|
98
98
|
'setLeverage': true,
|
|
99
99
|
'setMargin': false,
|
|
100
|
+
'setPositionMode': true,
|
|
100
101
|
'transfer': true,
|
|
101
102
|
'withdraw': true, // exchange have that endpoint disabled atm, but was once implemented in ccxt per old docs: https://kronosresearch.github.io/wootrade-documents/#token-withdraw
|
|
102
103
|
},
|
|
@@ -171,10 +172,16 @@ class woo extends woo$1 {
|
|
|
171
172
|
'client/trade/{tid}': 1,
|
|
172
173
|
'order/{oid}/trades': 1,
|
|
173
174
|
'client/trades': 1,
|
|
175
|
+
'client/hist_trades': 1,
|
|
176
|
+
'staking/yield_history': 1,
|
|
177
|
+
'client/holding': 1,
|
|
174
178
|
'asset/deposit': 10,
|
|
175
179
|
'asset/history': 60,
|
|
176
180
|
'sub_account/all': 60,
|
|
177
181
|
'sub_account/assets': 60,
|
|
182
|
+
'sub_account/asset_detail': 60,
|
|
183
|
+
'sub_account/ip_restriction': 10,
|
|
184
|
+
'asset/main_sub_transfer_history': 30,
|
|
178
185
|
'token_interest': 60,
|
|
179
186
|
'token_interest/{token}': 60,
|
|
180
187
|
'interest/history': 60,
|
|
@@ -187,9 +194,12 @@ class woo extends woo$1 {
|
|
|
187
194
|
'post': {
|
|
188
195
|
'order': 5,
|
|
189
196
|
'asset/main_sub_transfer': 30,
|
|
197
|
+
'asset/ltv': 30,
|
|
190
198
|
'asset/withdraw': 30,
|
|
199
|
+
'asset/internal_withdraw': 30,
|
|
191
200
|
'interest/repay': 60,
|
|
192
201
|
'client/account_mode': 120,
|
|
202
|
+
'client/position_mode': 5,
|
|
193
203
|
'client/leverage': 120,
|
|
194
204
|
},
|
|
195
205
|
'delete': {
|
|
@@ -2611,6 +2621,37 @@ class woo extends woo$1 {
|
|
|
2611
2621
|
const sorted = this.sortBy(rates, 'timestamp');
|
|
2612
2622
|
return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
|
|
2613
2623
|
}
|
|
2624
|
+
async setPositionMode(hedged, symbol = undefined, params = {}) {
|
|
2625
|
+
/**
|
|
2626
|
+
* @method
|
|
2627
|
+
* @name woo#setPositionMode
|
|
2628
|
+
* @description set hedged to true or false for a market
|
|
2629
|
+
* @see https://docs.woo.org/#update-position-mode
|
|
2630
|
+
* @param {bool} hedged set to true to use HEDGE_MODE, false for ONE_WAY
|
|
2631
|
+
* @param {string} symbol not used by woo setPositionMode
|
|
2632
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2633
|
+
* @returns {object} response from the exchange
|
|
2634
|
+
*/
|
|
2635
|
+
let hedgeMode = undefined;
|
|
2636
|
+
if (hedged) {
|
|
2637
|
+
hedgeMode = 'HEDGE_MODE';
|
|
2638
|
+
}
|
|
2639
|
+
else {
|
|
2640
|
+
hedgeMode = 'ONE_WAY';
|
|
2641
|
+
}
|
|
2642
|
+
const request = {
|
|
2643
|
+
'position_mode': hedgeMode,
|
|
2644
|
+
};
|
|
2645
|
+
const response = await this.v1PrivatePostClientPositionMode(this.extend(request, params));
|
|
2646
|
+
//
|
|
2647
|
+
// {
|
|
2648
|
+
// "success": true,
|
|
2649
|
+
// "data": {},
|
|
2650
|
+
// "timestamp": "1709195608551"
|
|
2651
|
+
// }
|
|
2652
|
+
//
|
|
2653
|
+
return response;
|
|
2654
|
+
}
|
|
2614
2655
|
async fetchLeverage(symbol, params = {}) {
|
|
2615
2656
|
await this.loadMarkets();
|
|
2616
2657
|
const response = await this.v3PrivateGetAccountinfo(params);
|
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 { Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax, Position, FundingRateHistory, Liquidation, FundingHistory, MarginMode, Greeks } from './src/base/types.js';
|
|
6
6
|
import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange } from './src/base/errors.js';
|
|
7
|
-
declare const version = "4.2.
|
|
7
|
+
declare const version = "4.2.56";
|
|
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, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending, NoChange } from './src/base/errors.js';
|
|
39
39
|
//-----------------------------------------------------------------------------
|
|
40
40
|
// this is updated by vss.js when building
|
|
41
|
-
const version = '4.2.
|
|
41
|
+
const version = '4.2.57';
|
|
42
42
|
Exchange.ccxtVersion = version;
|
|
43
43
|
//-----------------------------------------------------------------------------
|
|
44
44
|
import ace from './src/ace.js';
|
package/js/src/abstract/woo.d.ts
CHANGED
|
@@ -23,10 +23,16 @@ interface Exchange {
|
|
|
23
23
|
v1PrivateGetClientTradeTid(params?: {}): Promise<implicitReturnType>;
|
|
24
24
|
v1PrivateGetOrderOidTrades(params?: {}): Promise<implicitReturnType>;
|
|
25
25
|
v1PrivateGetClientTrades(params?: {}): Promise<implicitReturnType>;
|
|
26
|
+
v1PrivateGetClientHistTrades(params?: {}): Promise<implicitReturnType>;
|
|
27
|
+
v1PrivateGetStakingYieldHistory(params?: {}): Promise<implicitReturnType>;
|
|
28
|
+
v1PrivateGetClientHolding(params?: {}): Promise<implicitReturnType>;
|
|
26
29
|
v1PrivateGetAssetDeposit(params?: {}): Promise<implicitReturnType>;
|
|
27
30
|
v1PrivateGetAssetHistory(params?: {}): Promise<implicitReturnType>;
|
|
28
31
|
v1PrivateGetSubAccountAll(params?: {}): Promise<implicitReturnType>;
|
|
29
32
|
v1PrivateGetSubAccountAssets(params?: {}): Promise<implicitReturnType>;
|
|
33
|
+
v1PrivateGetSubAccountAssetDetail(params?: {}): Promise<implicitReturnType>;
|
|
34
|
+
v1PrivateGetSubAccountIpRestriction(params?: {}): Promise<implicitReturnType>;
|
|
35
|
+
v1PrivateGetAssetMainSubTransferHistory(params?: {}): Promise<implicitReturnType>;
|
|
30
36
|
v1PrivateGetTokenInterest(params?: {}): Promise<implicitReturnType>;
|
|
31
37
|
v1PrivateGetTokenInterestToken(params?: {}): Promise<implicitReturnType>;
|
|
32
38
|
v1PrivateGetInterestHistory(params?: {}): Promise<implicitReturnType>;
|
|
@@ -37,9 +43,12 @@ interface Exchange {
|
|
|
37
43
|
v1PrivateGetClientTransactionHistory(params?: {}): Promise<implicitReturnType>;
|
|
38
44
|
v1PrivatePostOrder(params?: {}): Promise<implicitReturnType>;
|
|
39
45
|
v1PrivatePostAssetMainSubTransfer(params?: {}): Promise<implicitReturnType>;
|
|
46
|
+
v1PrivatePostAssetLtv(params?: {}): Promise<implicitReturnType>;
|
|
40
47
|
v1PrivatePostAssetWithdraw(params?: {}): Promise<implicitReturnType>;
|
|
48
|
+
v1PrivatePostAssetInternalWithdraw(params?: {}): Promise<implicitReturnType>;
|
|
41
49
|
v1PrivatePostInterestRepay(params?: {}): Promise<implicitReturnType>;
|
|
42
50
|
v1PrivatePostClientAccountMode(params?: {}): Promise<implicitReturnType>;
|
|
51
|
+
v1PrivatePostClientPositionMode(params?: {}): Promise<implicitReturnType>;
|
|
43
52
|
v1PrivatePostClientLeverage(params?: {}): Promise<implicitReturnType>;
|
|
44
53
|
v1PrivateDeleteOrder(params?: {}): Promise<implicitReturnType>;
|
|
45
54
|
v1PrivateDeleteClientOrder(params?: {}): Promise<implicitReturnType>;
|