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.
Files changed (54) hide show
  1. package/README.md +4 -3
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +540 -185
  4. package/dist/ccxt.browser.min.js +6 -6
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/base/Exchange.js +31 -2
  7. package/dist/cjs/src/binance.js +155 -0
  8. package/dist/cjs/src/bingx.js +3 -1
  9. package/dist/cjs/src/bitmex.js +42 -1
  10. package/dist/cjs/src/hitbtc.js +51 -54
  11. package/dist/cjs/src/mexc.js +75 -0
  12. package/dist/cjs/src/pro/bitget.js +69 -73
  13. package/dist/cjs/src/pro/bitmex.js +23 -32
  14. package/dist/cjs/src/pro/bybit.js +19 -5
  15. package/dist/cjs/src/pro/cex.js +6 -2
  16. package/dist/cjs/src/pro/coinex.js +6 -3
  17. package/dist/cjs/src/pro/currencycom.js +2 -1
  18. package/dist/cjs/src/pro/kraken.js +1 -1
  19. package/dist/cjs/src/pro/mexc.js +2 -2
  20. package/dist/cjs/src/pro/whitebit.js +11 -7
  21. package/dist/cjs/src/upbit.js +1 -1
  22. package/dist/cjs/src/woo.js +41 -0
  23. package/js/ccxt.d.ts +1 -1
  24. package/js/ccxt.js +1 -1
  25. package/js/src/abstract/woo.d.ts +9 -0
  26. package/js/src/base/Exchange.d.ts +11 -5
  27. package/js/src/base/Exchange.js +31 -2
  28. package/js/src/base/types.d.ts +5 -3
  29. package/js/src/binance.d.ts +3 -1
  30. package/js/src/binance.js +155 -0
  31. package/js/src/bingx.d.ts +4 -4
  32. package/js/src/bingx.js +3 -1
  33. package/js/src/bitmex.d.ts +2 -0
  34. package/js/src/bitmex.js +42 -1
  35. package/js/src/hitbtc.d.ts +3 -2
  36. package/js/src/hitbtc.js +51 -54
  37. package/js/src/mexc.d.ts +12 -0
  38. package/js/src/mexc.js +75 -0
  39. package/js/src/pro/bitget.d.ts +0 -1
  40. package/js/src/pro/bitget.js +69 -73
  41. package/js/src/pro/bitmex.js +24 -31
  42. package/js/src/pro/bybit.js +19 -5
  43. package/js/src/pro/cex.js +6 -2
  44. package/js/src/pro/coinex.js +6 -3
  45. package/js/src/pro/currencycom.js +2 -1
  46. package/js/src/pro/kraken.js +1 -1
  47. package/js/src/pro/mexc.js +2 -2
  48. package/js/src/pro/whitebit.js +11 -7
  49. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
  50. package/js/src/upbit.js +1 -1
  51. package/js/src/woo.d.ts +1 -0
  52. package/js/src/woo.js +41 -0
  53. package/package.json +1 -1
  54. 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 ((market['swap']) || (market['future'])) {
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.safeValue(message, 'data', []);
670
- for (let j = 0; j < data.length; j++) {
671
- const rawTrade = data[j];
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
- market = this.safeMarket(undefined, market);
689
- const timestamp = this.safeInteger(trade, 'ts');
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': undefined,
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.safeString(trade, 'price'),
755
+ 'price': this.safeString2(trade, 'priceAvg', 'price'),
701
756
  'amount': this.safeString(trade, 'size'),
702
- 'cost': undefined,
703
- 'fee': undefined,
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.parseWsMyTrade(message);
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
- const market = this.market(symbol);
64
- const name = 'instrument';
65
- const messageHash = name + ':' + market['id'];
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 hash = name + ':' + market['id'];
94
- messageHashes.push(hash);
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
- messageHashes.push(name);
93
+ rawSubscriptions.push(name);
94
+ messageHashes.push('alltickers');
99
95
  }
100
96
  const request = {
101
97
  'op': 'subscribe',
102
- 'args': messageHashes,
98
+ 'args': rawSubscriptions,
103
99
  };
104
- const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes);
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 market = this.safeMarket(marketId);
349
- const symbol = market['symbol'];
350
- const messageHash = table + ':' + marketId;
351
- const ticker = this.safeDict(this.tickers, symbol, {});
352
- const info = this.safeDict(ticker, 'info', {});
353
- const parsedTicker = this.parseTicker(this.extend(info, update), market);
354
- tickers[symbol] = parsedTicker;
355
- this.tickers[symbol] = parsedTicker;
356
- client.resolve(ticker, messageHash);
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
- this.safeFloat(candle, 'open'),
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.safeValue(message, 'data', {});
335
- const isSpot = this.safeString(data, 'fundingRate') === undefined;
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') || isSpot) {
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.safeValue(this.tickers, symbol, {});
351
- const rawTicker = this.safeValue(ticker, 'info', {});
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
  }
@@ -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[symbol] = stored;
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
- this.ohlcvs = new Cache.ArrayCacheByTimestamp(limit);
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
- this.ohlcvs.append(candle);
398
+ ohlcv.append(candle);
396
399
  }
397
- client.resolve(this.ohlcvs, messageHash);
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.82576735,
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.321597", "s", "l", "" ],
358
+ // [ "5541.20000", "0.15850568", "1534614057.321596", "s", "l", "" ],
359
359
  // [ "6060.00000", "0.02455000", "1534614057.324998", "b", "l", "" ],
360
360
  // ],
361
361
  // "trade",
@@ -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": 1678642260,
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.safeValue(this.orderbooks, symbol);
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
- let stored = this.ohlcvs[symbol];
119
- if (stored === undefined) {
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
- stored.append(parsed);
125
- client.resolve(stored, messageHash);
127
+ const ohlcv = this.ohlcvs[symbol]['unknown'];
128
+ ohlcv.append(parsed);
129
+ client.resolve(ohlcv, messageHash);
126
130
  }
127
131
  return message;
128
132
  }
@@ -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": 1542883543097,
619
+ // "trade_timestamp": 1542883543096,
620
620
  // "opening_price": 0.02976455,
621
621
  // "high_price": 0.02992577,
622
622
  // "low_price": 0.02934283,
@@ -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.54";
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.55';
41
+ const version = '4.2.57';
42
42
  Exchange.ccxtVersion = version;
43
43
  //-----------------------------------------------------------------------------
44
44
  import ace from './src/ace.js';
@@ -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>;