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
@@ -7451,9 +7451,11 @@ class Exchange {
7451
7451
  'fetchLedger': undefined,
7452
7452
  'fetchLedgerEntry': undefined,
7453
7453
  'fetchLeverage': undefined,
7454
+ 'fetchLeverages': undefined,
7454
7455
  'fetchLeverageTiers': undefined,
7455
7456
  'fetchLiquidations': undefined,
7456
7457
  'fetchMarginMode': undefined,
7458
+ 'fetchMarginModes': undefined,
7457
7459
  'fetchMarketLeverageTiers': undefined,
7458
7460
  'fetchMarkets': true,
7459
7461
  'fetchMarketsWs': undefined,
@@ -8884,8 +8886,17 @@ class Exchange {
8884
8886
  async fetchOrderBook(symbol, limit = undefined, params = {}) {
8885
8887
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchOrderBook() is not supported yet');
8886
8888
  }
8887
- async fetchMarginMode(symbol = undefined, params = {}) {
8888
- throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchMarginMode() is not supported yet');
8889
+ async fetchMarginMode(symbol, params = {}) {
8890
+ if (this.has['fetchMarginModes']) {
8891
+ const marginModes = await this.fetchMarginModes([symbol], params);
8892
+ return this.safeDict(marginModes, symbol);
8893
+ }
8894
+ else {
8895
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchMarginMode() is not supported yet');
8896
+ }
8897
+ }
8898
+ async fetchMarginModes(symbols = undefined, params = {}) {
8899
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchMarginModes () is not supported yet');
8889
8900
  }
8890
8901
  async fetchRestOrderBookSafe(symbol, limit = undefined, params = {}) {
8891
8902
  const fetchSnapshotMaxRetries = this.handleOption('watchOrderBook', 'maxRetries', 3);
@@ -8996,6 +9007,9 @@ class Exchange {
8996
9007
  async fetchLeverage(symbol, params = {}) {
8997
9008
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchLeverage() is not supported yet');
8998
9009
  }
9010
+ async fetchLeverages(symbols = undefined, params = {}) {
9011
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' fetchLeverages() is not supported yet');
9012
+ }
8999
9013
  async setPositionMode(hedged, symbol = undefined, params = {}) {
9000
9014
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' setPositionMode() is not supported yet');
9001
9015
  }
@@ -12575,6 +12589,21 @@ class Exchange {
12575
12589
  parseGreeks(greeks, market = undefined) {
12576
12590
  throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' parseGreeks () is not supported yet');
12577
12591
  }
12592
+ parseMarginModes(response, symbols = undefined, symbolKey = undefined, marketType = undefined) {
12593
+ const marginModeStructures = {};
12594
+ for (let i = 0; i < response.length; i++) {
12595
+ const info = response[i];
12596
+ const marketId = this.safeString(info, symbolKey);
12597
+ const market = this.safeMarket(marketId, undefined, undefined, marketType);
12598
+ if ((symbols === undefined) || this.inArray(market['symbol'], symbols)) {
12599
+ marginModeStructures[market['symbol']] = this.parseMarginMode(info, market);
12600
+ }
12601
+ }
12602
+ return marginModeStructures;
12603
+ }
12604
+ parseMarginMode(marginMode, market = undefined) {
12605
+ throw new _errors_js__WEBPACK_IMPORTED_MODULE_3__.NotSupported(this.id + ' parseMarginMode () is not supported yet');
12606
+ }
12578
12607
  }
12579
12608
 
12580
12609
 
@@ -18183,6 +18212,8 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
18183
18212
  'fetchLeverage': true,
18184
18213
  'fetchLeverageTiers': true,
18185
18214
  'fetchLiquidations': false,
18215
+ 'fetchMarginMode': 'emulated',
18216
+ 'fetchMarginModes': true,
18186
18217
  'fetchMarketLeverageTiers': 'emulated',
18187
18218
  'fetchMarkets': true,
18188
18219
  'fetchMarkOHLCV': true,
@@ -30244,6 +30275,159 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
30244
30275
  'hedged': dualSidePosition,
30245
30276
  };
30246
30277
  }
30278
+ async fetchMarginModes(symbols = undefined, params = {}) {
30279
+ /**
30280
+ * @method
30281
+ * @name binance#fetchMarginMode
30282
+ * @description fetches margin modes ("isolated" or "cross") that the market for the symbol in in, with symbol=undefined all markets for a subType (linear/inverse) are returned
30283
+ * @see https://binance-docs.github.io/apidocs/futures/en/#account-information-v2-user_data
30284
+ * @param {string} symbol unified symbol of the market the order was made in
30285
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
30286
+ * @returns {object} struct of marginMode
30287
+ */
30288
+ await this.loadMarkets();
30289
+ let market = undefined;
30290
+ if (symbols !== undefined) {
30291
+ symbols = this.marketSymbols(symbols);
30292
+ market = this.market(symbols[0]);
30293
+ }
30294
+ let subType = undefined;
30295
+ [subType, params] = this.handleSubTypeAndParams('fetchMarginMode', market, params);
30296
+ let response = undefined;
30297
+ if (subType === 'linear') {
30298
+ response = await this.fapiPrivateV2GetAccount(params);
30299
+ //
30300
+ // {
30301
+ // feeTier: '0',
30302
+ // canTrade: true,
30303
+ // canDeposit: true,
30304
+ // canWithdraw: true,
30305
+ // tradeGroupId: '-1',
30306
+ // updateTime: '0',
30307
+ // multiAssetsMargin: true,
30308
+ // totalInitialMargin: '438.31134352',
30309
+ // totalMaintMargin: '5.90847101',
30310
+ // totalWalletBalance: '4345.15626338',
30311
+ // totalUnrealizedProfit: '376.45220224',
30312
+ // totalMarginBalance: '4721.60846562',
30313
+ // totalPositionInitialMargin: '425.45252687',
30314
+ // totalOpenOrderInitialMargin: '12.85881664',
30315
+ // totalCrossWalletBalance: '4345.15626338',
30316
+ // totalCrossUnPnl: '376.45220224',
30317
+ // availableBalance: '4281.84764041',
30318
+ // maxWithdrawAmount: '4281.84764041',
30319
+ // assets: [
30320
+ // {
30321
+ // asset: 'ETH',
30322
+ // walletBalance: '0.00000000',
30323
+ // unrealizedProfit: '0.00000000',
30324
+ // marginBalance: '0.00000000',
30325
+ // maintMargin: '0.00000000',
30326
+ // initialMargin: '0.00000000',
30327
+ // positionInitialMargin: '0.00000000',
30328
+ // openOrderInitialMargin: '0.00000000',
30329
+ // maxWithdrawAmount: '0.00000000',
30330
+ // crossWalletBalance: '0.00000000',
30331
+ // crossUnPnl: '0.00000000',
30332
+ // availableBalance: '1.26075574',
30333
+ // marginAvailable: true,
30334
+ // updateTime: '0'
30335
+ // },
30336
+ // ...
30337
+ // ],
30338
+ // positions: [
30339
+ // {
30340
+ // symbol: 'SNTUSDT',
30341
+ // initialMargin: '0',
30342
+ // maintMargin: '0',
30343
+ // unrealizedProfit: '0.00000000',
30344
+ // positionInitialMargin: '0',
30345
+ // openOrderInitialMargin: '0',
30346
+ // leverage: '20',
30347
+ // isolated: false,
30348
+ // entryPrice: '0.0',
30349
+ // breakEvenPrice: '0.0',
30350
+ // maxNotional: '25000',
30351
+ // positionSide: 'BOTH',
30352
+ // positionAmt: '0',
30353
+ // notional: '0',
30354
+ // isolatedWallet: '0',
30355
+ // updateTime: '0',
30356
+ // bidNotional: '0',
30357
+ // askNotional: '0'
30358
+ // },
30359
+ // ...
30360
+ // ]
30361
+ // }
30362
+ //
30363
+ }
30364
+ else if (subType === 'inverse') {
30365
+ response = await this.dapiPrivateGetAccount(params);
30366
+ //
30367
+ // {
30368
+ // feeTier: '0',
30369
+ // canTrade: true,
30370
+ // canDeposit: true,
30371
+ // canWithdraw: true,
30372
+ // updateTime: '0',
30373
+ // assets: [
30374
+ // {
30375
+ // asset: 'APT',
30376
+ // walletBalance: '0.00000000',
30377
+ // unrealizedProfit: '0.00000000',
30378
+ // marginBalance: '0.00000000',
30379
+ // maintMargin: '0.00000000',
30380
+ // initialMargin: '0.00000000',
30381
+ // positionInitialMargin: '0.00000000',
30382
+ // openOrderInitialMargin: '0.00000000',
30383
+ // maxWithdrawAmount: '0.00000000',
30384
+ // crossWalletBalance: '0.00000000',
30385
+ // crossUnPnl: '0.00000000',
30386
+ // availableBalance: '0.00000000',
30387
+ // updateTime: '0'
30388
+ // },
30389
+ // ...
30390
+ // ],
30391
+ // positions: [
30392
+ // {
30393
+ // symbol: 'BCHUSD_240329',
30394
+ // initialMargin: '0',
30395
+ // maintMargin: '0',
30396
+ // unrealizedProfit: '0.00000000',
30397
+ // positionInitialMargin: '0',
30398
+ // openOrderInitialMargin: '0',
30399
+ // leverage: '20',
30400
+ // isolated: false,
30401
+ // positionSide: 'BOTH',
30402
+ // entryPrice: '0.00000000',
30403
+ // maxQty: '1000',
30404
+ // notionalValue: '0',
30405
+ // isolatedWallet: '0',
30406
+ // updateTime: '0',
30407
+ // positionAmt: '0',
30408
+ // breakEvenPrice: '0.00000000'
30409
+ // },
30410
+ // ...
30411
+ // ]
30412
+ // }
30413
+ //
30414
+ }
30415
+ else {
30416
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' fetchMarginModes () supports linear and inverse subTypes only');
30417
+ }
30418
+ const assets = this.safeValue(response, 'positions', []);
30419
+ return this.parseMarginModes(assets, symbols, 'symbol', 'swap');
30420
+ }
30421
+ parseMarginMode(marginMode, market = undefined) {
30422
+ const marketId = this.safeString(marginMode, 'symbol');
30423
+ market = this.safeMarket(marketId, market);
30424
+ const isIsolated = this.safeBool(marginMode, 'isolated');
30425
+ return {
30426
+ 'info': marginMode,
30427
+ 'symbol': market['symbol'],
30428
+ 'marginMode': isIsolated ? 'isolated' : 'cross',
30429
+ };
30430
+ }
30247
30431
  }
30248
30432
 
30249
30433
 
@@ -31991,7 +32175,9 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
31991
32175
  if (symbols !== undefined) {
31992
32176
  symbols = this.marketSymbols(symbols);
31993
32177
  const firstSymbol = this.safeString(symbols, 0);
31994
- market = this.market(firstSymbol);
32178
+ if (firstSymbol !== undefined) {
32179
+ market = this.market(firstSymbol);
32180
+ }
31995
32181
  }
31996
32182
  let type = undefined;
31997
32183
  [type, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
@@ -58529,7 +58715,8 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
58529
58715
  'fetchFundingRates': true,
58530
58716
  'fetchIndexOHLCV': false,
58531
58717
  'fetchLedger': true,
58532
- 'fetchLeverage': false,
58718
+ 'fetchLeverage': true,
58719
+ 'fetchLeverages': true,
58533
58720
  'fetchLeverageTiers': false,
58534
58721
  'fetchLiquidations': true,
58535
58722
  'fetchMarketLeverageTiers': false,
@@ -60584,6 +60771,46 @@ class bitmex extends _abstract_bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
60584
60771
  //
60585
60772
  return this.parseOrders(response, market);
60586
60773
  }
60774
+ async fetchLeverages(symbols = undefined, params = {}) {
60775
+ /**
60776
+ * @method
60777
+ * @name bitmex#fetchLeverages
60778
+ * @description fetch the set leverage for all contract markets
60779
+ * @see https://www.bitmex.com/api/explorer/#!/Position/Position_get
60780
+ * @param {string[]} [symbols] a list of unified market symbols
60781
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
60782
+ * @returns {object} a list of [leverage structures]{@link https://docs.ccxt.com/#/?id=leverage-structure}
60783
+ */
60784
+ await this.loadMarkets();
60785
+ const positions = await this.fetchPositions(symbols, params);
60786
+ const result = [];
60787
+ for (let i = 0; i < positions.length; i++) {
60788
+ const entry = positions[i];
60789
+ const marketId = this.safeString(entry, 'symbol');
60790
+ const market = this.safeMarket(marketId, undefined, undefined, 'contract');
60791
+ result.push({
60792
+ 'info': entry,
60793
+ 'symbol': market['symbol'],
60794
+ 'leverage': this.safeInteger(entry, 'leverage'),
60795
+ 'marginMode': this.safeString(entry, 'marginMode'),
60796
+ });
60797
+ }
60798
+ return result;
60799
+ }
60800
+ async fetchLeverage(symbol, params = {}) {
60801
+ /**
60802
+ * @method
60803
+ * @name bitmex#fetchLeverage
60804
+ * @description fetch the set leverage for a market
60805
+ * @see https://www.bitmex.com/api/explorer/#!/Position/Position_get
60806
+ * @param {string} symbol unified market symbol
60807
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
60808
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
60809
+ */
60810
+ await this.loadMarkets();
60811
+ const leverage = await this.fetchLeverages([symbol], params);
60812
+ return leverage;
60813
+ }
60587
60814
  async fetchPositions(symbols = undefined, params = {}) {
60588
60815
  /**
60589
60816
  * @method
@@ -141189,7 +141416,8 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
141189
141416
  'fetchLeverage': true,
141190
141417
  'fetchLeverageTiers': undefined,
141191
141418
  'fetchLiquidations': false,
141192
- 'fetchMarginMode': true,
141419
+ 'fetchMarginMode': 'emulated',
141420
+ 'fetchMarginModes': true,
141193
141421
  'fetchMarketLeverageTiers': false,
141194
141422
  'fetchMarkets': true,
141195
141423
  'fetchMarkOHLCV': true,
@@ -143633,7 +143861,7 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
143633
143861
  'stopLossPrice': undefined,
143634
143862
  }, market);
143635
143863
  }
143636
- async fetchMarginMode(symbol = undefined, params = {}) {
143864
+ async fetchMarginModes(symbols = undefined, params = {}) {
143637
143865
  /**
143638
143866
  * @method
143639
143867
  * @name hitbtc#fetchMarginMode
@@ -143646,70 +143874,66 @@ class hitbtc extends _abstract_hitbtc_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
143646
143874
  */
143647
143875
  await this.loadMarkets();
143648
143876
  let market = undefined;
143649
- if (symbol !== undefined) {
143650
- market = this.market(symbol);
143877
+ if (symbols !== undefined) {
143878
+ symbols = this.marketSymbols(symbols);
143879
+ market = this.market(symbols[0]);
143651
143880
  }
143652
143881
  let marketType = undefined;
143653
143882
  [marketType, params] = this.handleMarketTypeAndParams('fetchMarginMode', market, params);
143654
143883
  let response = undefined;
143655
143884
  if (marketType === 'margin') {
143656
143885
  response = await this.privateGetMarginConfig(params);
143886
+ //
143887
+ // {
143888
+ // "config": [{
143889
+ // "symbol": "BTCUSD",
143890
+ // "margin_call_leverage_mul": "1.50",
143891
+ // "liquidation_leverage_mul": "2.00",
143892
+ // "max_initial_leverage": "10.00",
143893
+ // "margin_mode": "Isolated",
143894
+ // "force_close_fee": "0.05",
143895
+ // "enabled": true,
143896
+ // "active": true,
143897
+ // "limit_base": "50000.00",
143898
+ // "limit_power": "2.2",
143899
+ // "unlimited_threshold": "10.0"
143900
+ // }]
143901
+ // }
143902
+ //
143657
143903
  }
143658
143904
  else if (marketType === 'swap') {
143659
143905
  response = await this.privateGetFuturesConfig(params);
143906
+ //
143907
+ // {
143908
+ // "config": [{
143909
+ // "symbol": "BTCUSD_PERP",
143910
+ // "margin_call_leverage_mul": "1.20",
143911
+ // "liquidation_leverage_mul": "2.00",
143912
+ // "max_initial_leverage": "100.00",
143913
+ // "margin_mode": "Isolated",
143914
+ // "force_close_fee": "0.001",
143915
+ // "enabled": true,
143916
+ // "active": false,
143917
+ // "limit_base": "5000000.000000000000",
143918
+ // "limit_power": "1.25",
143919
+ // "unlimited_threshold": "2.00"
143920
+ // }]
143921
+ // }
143922
+ //
143660
143923
  }
143661
143924
  else {
143662
- throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadSymbol(this.id + ' fetchMarginMode() supports swap contracts and margin only');
143925
+ throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadSymbol(this.id + ' fetchMarginModes () supports swap contracts and margin only');
143663
143926
  }
143664
- //
143665
- // margin
143666
- // {
143667
- // "config": [{
143668
- // "symbol": "BTCUSD",
143669
- // "margin_call_leverage_mul": "1.50",
143670
- // "liquidation_leverage_mul": "2.00",
143671
- // "max_initial_leverage": "10.00",
143672
- // "margin_mode": "Isolated",
143673
- // "force_close_fee": "0.05",
143674
- // "enabled": true,
143675
- // "active": true,
143676
- // "limit_base": "50000.00",
143677
- // "limit_power": "2.2",
143678
- // "unlimited_threshold": "10.0"
143679
- // }]
143680
- // }
143681
- //
143682
- // swap
143683
- // {
143684
- // "config": [{
143685
- // "symbol": "BTCUSD_PERP",
143686
- // "margin_call_leverage_mul": "1.20",
143687
- // "liquidation_leverage_mul": "2.00",
143688
- // "max_initial_leverage": "100.00",
143689
- // "margin_mode": "Isolated",
143690
- // "force_close_fee": "0.001",
143691
- // "enabled": true,
143692
- // "active": false,
143693
- // "limit_base": "5000000.000000000000",
143694
- // "limit_power": "1.25",
143695
- // "unlimited_threshold": "2.00"
143696
- // }]
143697
- // }
143698
- //
143699
- const config = this.safeValue(response, 'config', []);
143700
- const marginModes = [];
143701
- for (let i = 0; i < config.length; i++) {
143702
- const data = this.safeValue(config, i);
143703
- const marketId = this.safeString(data, 'symbol');
143704
- const marketInner = this.safeMarket(marketId);
143705
- marginModes.push({
143706
- 'info': data,
143707
- 'symbol': this.safeString(marketInner, 'symbol'),
143708
- 'marginMode': this.safeStringLower(data, 'margin_mode'),
143709
- });
143710
- }
143711
- const filteredMargin = this.filterBySymbol(marginModes, symbol);
143712
- return this.safeValue(filteredMargin, 0);
143927
+ const config = this.safeList(response, 'config', []);
143928
+ return this.parseMarginModes(config, symbols, 'symbol');
143929
+ }
143930
+ parseMarginMode(marginMode, market = undefined) {
143931
+ const marketId = this.safeString(marginMode, 'symbol');
143932
+ return {
143933
+ 'info': marginMode,
143934
+ 'symbol': this.safeSymbol(marketId, market),
143935
+ 'marginMode': this.safeStringLower(marginMode, 'margin_mode'),
143936
+ };
143713
143937
  }
143714
143938
  async transfer(code, amount, fromAccount, toAccount, params = {}) {
143715
143939
  /**
@@ -184474,6 +184698,8 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
184474
184698
  'fetchL2OrderBook': true,
184475
184699
  'fetchLedger': undefined,
184476
184700
  'fetchLedgerEntry': undefined,
184701
+ 'fetchLeverage': true,
184702
+ 'fetchLeverages': false,
184477
184703
  'fetchLeverageTiers': true,
184478
184704
  'fetchMarginMode': false,
184479
184705
  'fetchMarketLeverageTiers': undefined,
@@ -189777,6 +190003,79 @@ class mexc extends _abstract_mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"]
189777
190003
  }
189778
190004
  return this.assignDefaultDepositWithdrawFees(result);
189779
190005
  }
190006
+ async fetchLeverage(symbol, params = {}) {
190007
+ /**
190008
+ * @method
190009
+ * @name mexc#fetchLeverage
190010
+ * @description fetch the set leverage for a market
190011
+ * @see https://mexcdevelop.github.io/apidocs/contract_v1_en/#get-leverage
190012
+ * @param {string} symbol unified market symbol
190013
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
190014
+ * @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
190015
+ */
190016
+ await this.loadMarkets();
190017
+ const market = this.market(symbol);
190018
+ const request = {
190019
+ 'symbol': market['id'],
190020
+ };
190021
+ const response = await this.contractPrivateGetPositionLeverage(this.extend(request, params));
190022
+ //
190023
+ // {
190024
+ // "success": true,
190025
+ // "code": 0,
190026
+ // "data": [
190027
+ // {
190028
+ // "level": 1,
190029
+ // "maxVol": 463300,
190030
+ // "mmr": 0.004,
190031
+ // "imr": 0.005,
190032
+ // "positionType": 1,
190033
+ // "openType": 1,
190034
+ // "leverage": 20,
190035
+ // "limitBySys": false,
190036
+ // "currentMmr": 0.004
190037
+ // },
190038
+ // {
190039
+ // "level": 1,
190040
+ // "maxVol": 463300,
190041
+ // "mmr": 0.004,
190042
+ // "imr": 0.005,
190043
+ // "positionType": 2,
190044
+ // "openType": 1,
190045
+ // "leverage": 20,
190046
+ // "limitBySys": false,
190047
+ // "currentMmr": 0.004
190048
+ // }
190049
+ // ]
190050
+ // }
190051
+ //
190052
+ const data = this.safeList(response, 'data', []);
190053
+ const longLeverage = this.safeDict(data, 0);
190054
+ return this.parseLeverage(longLeverage, market);
190055
+ }
190056
+ parseLeverage(leverage, market = undefined) {
190057
+ //
190058
+ // {
190059
+ // "level": 1,
190060
+ // "maxVol": 463300,
190061
+ // "mmr": 0.004,
190062
+ // "imr": 0.005,
190063
+ // "positionType": 1,
190064
+ // "openType": 1,
190065
+ // "leverage": 20,
190066
+ // "limitBySys": false,
190067
+ // "currentMmr": 0.004
190068
+ // }
190069
+ //
190070
+ const marketId = this.safeString(leverage, 'symbol');
190071
+ market = this.safeMarket(marketId, market, undefined, 'contract');
190072
+ return {
190073
+ 'info': leverage,
190074
+ 'symbol': market['symbol'],
190075
+ 'leverage': this.safeInteger(leverage, 'leverage'),
190076
+ 'marginMode': undefined,
190077
+ };
190078
+ }
189780
190079
  handleMarginModeAndParams(methodName, params = {}, defaultValue = undefined) {
189781
190080
  /**
189782
190081
  * @ignore
@@ -226337,7 +226636,10 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
226337
226636
  }
226338
226637
  getInstType(market, params = {}) {
226339
226638
  let instType = undefined;
226340
- if ((market['swap']) || (market['future'])) {
226639
+ if (market === undefined) {
226640
+ [instType, params] = this.handleProductTypeAndParams(undefined, params);
226641
+ }
226642
+ else if ((market['swap']) || (market['future'])) {
226341
226643
  [instType, params] = this.handleProductTypeAndParams(market, params);
226342
226644
  }
226343
226645
  else {
@@ -226914,9 +227216,12 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
226914
227216
  stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_3__/* .ArrayCache */ .ZL(limit);
226915
227217
  this.trades[symbol] = stored;
226916
227218
  }
226917
- const data = this.safeValue(message, 'data', []);
226918
- for (let j = 0; j < data.length; j++) {
226919
- const rawTrade = data[j];
227219
+ const data = this.safeList(message, 'data', []);
227220
+ const length = data.length;
227221
+ const maxLength = Math.max(length - 1, 0);
227222
+ // fix chronological order by reversing
227223
+ for (let i = maxLength; i >= 0; i--) {
227224
+ const rawTrade = data[i];
226920
227225
  const parsed = this.parseWsTrade(rawTrade, market);
226921
227226
  stored.append(parsed);
226922
227227
  }
@@ -226933,22 +227238,71 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
226933
227238
  // "tradeId": "1116461060594286593"
226934
227239
  // }
226935
227240
  //
226936
- market = this.safeMarket(undefined, market);
226937
- const timestamp = this.safeInteger(trade, 'ts');
227241
+ // order with trade in it
227242
+ // {
227243
+ // accBaseVolume: '0.1',
227244
+ // baseVolume: '0.1',
227245
+ // cTime: '1709221342922',
227246
+ // clientOid: '1147122943507734528',
227247
+ // enterPointSource: 'API',
227248
+ // feeDetail: [Array],
227249
+ // fillFee: '-0.0049578',
227250
+ // fillFeeCoin: 'USDT',
227251
+ // fillNotionalUsd: '8.263',
227252
+ // fillPrice: '82.63',
227253
+ // fillTime: '1709221342986',
227254
+ // force: 'gtc',
227255
+ // instId: 'LTCUSDT',
227256
+ // leverage: '10',
227257
+ // marginCoin: 'USDT',
227258
+ // marginMode: 'crossed',
227259
+ // notionalUsd: '8.268',
227260
+ // orderId: '1147122943499345921',
227261
+ // orderType: 'market',
227262
+ // pnl: '0',
227263
+ // posMode: 'hedge_mode',
227264
+ // posSide: 'short',
227265
+ // price: '0',
227266
+ // priceAvg: '82.63',
227267
+ // reduceOnly: 'no',
227268
+ // side: 'sell',
227269
+ // size: '0.1',
227270
+ // status: 'filled',
227271
+ // tradeId: '1147122943772479563',
227272
+ // tradeScope: 'T',
227273
+ // tradeSide: 'open',
227274
+ // uTime: '1709221342986'
227275
+ // }
227276
+ //
227277
+ const instId = this.safeString(trade, 'instId');
227278
+ if (market === undefined) {
227279
+ market = this.safeMarket(instId, undefined, undefined, 'contract');
227280
+ }
227281
+ const timestamp = this.safeIntegerN(trade, ['uTime', 'cTime', 'ts']);
227282
+ const feeCost = this.safeString(trade, 'fillFee');
227283
+ let fee = undefined;
227284
+ if (feeCost !== undefined) {
227285
+ const feeCurrencyId = this.safeString(trade, 'fillFeeCoin');
227286
+ const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
227287
+ fee = {
227288
+ 'cost': _base_Precise_js__WEBPACK_IMPORTED_MODULE_2__/* .Precise */ .O.stringAbs(feeCost),
227289
+ 'currency': feeCurrencyCode,
227290
+ };
227291
+ }
226938
227292
  return this.safeTrade({
226939
227293
  'info': trade,
226940
227294
  'id': this.safeString(trade, 'tradeId'),
226941
- 'order': undefined,
227295
+ 'order': this.safeString(trade, 'orderId'),
226942
227296
  'timestamp': timestamp,
226943
227297
  'datetime': this.iso8601(timestamp),
226944
227298
  'symbol': market['symbol'],
226945
227299
  'type': undefined,
226946
227300
  'side': this.safeString(trade, 'side'),
226947
227301
  'takerOrMaker': undefined,
226948
- 'price': this.safeString(trade, 'price'),
227302
+ 'price': this.safeString2(trade, 'priceAvg', 'price'),
226949
227303
  'amount': this.safeString(trade, 'size'),
226950
- 'cost': undefined,
226951
- 'fee': undefined,
227304
+ 'cost': this.safeString(trade, 'fillNotionalUsd'),
227305
+ 'fee': fee,
226952
227306
  }, market);
226953
227307
  }
226954
227308
  async watchPositions(symbols = undefined, since = undefined, limit = undefined, params = {}) {
@@ -227353,6 +227707,9 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
227353
227707
  const marketSymbols = {};
227354
227708
  for (let i = 0; i < data.length; i++) {
227355
227709
  const order = data[i];
227710
+ if ('tradeId' in order) {
227711
+ this.handleMyTrades(client, order);
227712
+ }
227356
227713
  const marketId = this.safeString(order, 'instId');
227357
227714
  const market = this.safeMarket(marketId, undefined, undefined, marketType);
227358
227715
  const parsed = this.parseWsOrder(order, market);
@@ -227618,7 +227975,7 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
227618
227975
  this.myTrades = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_3__/* .ArrayCache */ .ZL(limit);
227619
227976
  }
227620
227977
  const stored = this.myTrades;
227621
- const parsed = this.parseWsMyTrade(message);
227978
+ const parsed = this.parseWsTrade(message);
227622
227979
  stored.append(parsed);
227623
227980
  const symbol = parsed['symbol'];
227624
227981
  const messageHash = 'myTrades';
@@ -227626,68 +227983,6 @@ class bitget extends _bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
227626
227983
  const symbolSpecificMessageHash = 'myTrades:' + symbol;
227627
227984
  client.resolve(stored, symbolSpecificMessageHash);
227628
227985
  }
227629
- parseWsMyTrade(trade, market = undefined) {
227630
- //
227631
- // order and trade mixin (contract)
227632
- //
227633
- // {
227634
- // "accBaseVolume": "0",
227635
- // "cTime": "1701920553759",
227636
- // "clientOid": "1116501214318198793",
227637
- // "enterPointSource": "WEB",
227638
- // "feeDetail": [{
227639
- // "feeCoin": "USDT",
227640
- // "fee": "-0.162003"
227641
- // }],
227642
- // "force": "gtc",
227643
- // "instId": "BTCUSDT",
227644
- // "leverage": "20",
227645
- // "marginCoin": "USDT",
227646
- // "marginMode": "isolated",
227647
- // "notionalUsd": "105",
227648
- // "orderId": "1116501214293032964",
227649
- // "orderType": "limit",
227650
- // "posMode": "hedge_mode",
227651
- // "posSide": "long",
227652
- // "price": "35000",
227653
- // "reduceOnly": "no",
227654
- // "side": "buy",
227655
- // "size": "0.003",
227656
- // "status": "canceled",
227657
- // "tradeSide": "open",
227658
- // "uTime": "1701920595866"
227659
- // }
227660
- //
227661
- const marketId = this.safeString(trade, 'instId');
227662
- market = this.safeMarket(marketId, market, undefined, 'contract');
227663
- const timestamp = this.safeInteger2(trade, 'uTime', 'cTime');
227664
- const orderFee = this.safeValue(trade, 'feeDetail', []);
227665
- const fee = this.safeValue(orderFee, 0);
227666
- const feeAmount = this.safeString(fee, 'fee');
227667
- let feeObject = undefined;
227668
- if (feeAmount !== undefined) {
227669
- const feeCurrency = this.safeString(fee, 'feeCoin');
227670
- feeObject = {
227671
- 'cost': _base_Precise_js__WEBPACK_IMPORTED_MODULE_2__/* .Precise */ .O.stringAbs(feeAmount),
227672
- 'currency': this.safeCurrencyCode(feeCurrency),
227673
- };
227674
- }
227675
- return this.safeTrade({
227676
- 'info': trade,
227677
- 'id': undefined,
227678
- 'order': this.safeString(trade, 'orderId'),
227679
- 'timestamp': timestamp,
227680
- 'datetime': this.iso8601(timestamp),
227681
- 'symbol': market['symbol'],
227682
- 'type': this.safeString(trade, 'orderType'),
227683
- 'side': this.safeString(trade, 'side'),
227684
- 'takerOrMaker': undefined,
227685
- 'price': this.safeString(trade, 'price'),
227686
- 'amount': this.safeString(trade, 'size'),
227687
- 'cost': this.safeString(trade, 'notionalUsd'),
227688
- 'fee': feeObject,
227689
- }, market);
227690
- }
227691
227986
  async watchBalance(params = {}) {
227692
227987
  /**
227693
227988
  * @method
@@ -229661,17 +229956,9 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
229661
229956
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
229662
229957
  */
229663
229958
  await this.loadMarkets();
229664
- const market = this.market(symbol);
229665
- const name = 'instrument';
229666
- const messageHash = name + ':' + market['id'];
229667
- const url = this.urls['api']['ws'];
229668
- const request = {
229669
- 'op': 'subscribe',
229670
- 'args': [
229671
- messageHash,
229672
- ],
229673
- };
229674
- return await this.watch(url, messageHash, this.extend(request, params), messageHash);
229959
+ symbol = this.symbol(symbol);
229960
+ const tickers = await this.watchTickers([symbol], params);
229961
+ return tickers[symbol];
229675
229962
  }
229676
229963
  async watchTickers(symbols = undefined, params = {}) {
229677
229964
  /**
@@ -229687,26 +229974,27 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
229687
229974
  const name = 'instrument';
229688
229975
  const url = this.urls['api']['ws'];
229689
229976
  const messageHashes = [];
229977
+ const rawSubscriptions = [];
229690
229978
  if (symbols !== undefined) {
229691
229979
  for (let i = 0; i < symbols.length; i++) {
229692
229980
  const symbol = symbols[i];
229693
229981
  const market = this.market(symbol);
229694
- const hash = name + ':' + market['id'];
229695
- messageHashes.push(hash);
229982
+ const subscription = name + ':' + market['id'];
229983
+ rawSubscriptions.push(subscription);
229984
+ const messageHash = 'ticker:' + symbol;
229985
+ messageHashes.push(messageHash);
229696
229986
  }
229697
229987
  }
229698
229988
  else {
229699
- messageHashes.push(name);
229989
+ rawSubscriptions.push(name);
229990
+ messageHashes.push('alltickers');
229700
229991
  }
229701
229992
  const request = {
229702
229993
  'op': 'subscribe',
229703
- 'args': messageHashes,
229994
+ 'args': rawSubscriptions,
229704
229995
  };
229705
- const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes);
229996
+ const ticker = await this.watchMultiple(url, messageHashes, this.extend(request, params), rawSubscriptions);
229706
229997
  if (this.newUpdates) {
229707
- if (symbols === undefined) {
229708
- return ticker;
229709
- }
229710
229998
  const result = {};
229711
229999
  result[ticker['symbol']] = ticker;
229712
230000
  return result;
@@ -229940,23 +230228,23 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
229940
230228
  // ]
229941
230229
  // }
229942
230230
  //
229943
- const table = this.safeString(message, 'table');
229944
230231
  const data = this.safeList(message, 'data', []);
229945
230232
  const tickers = {};
229946
230233
  for (let i = 0; i < data.length; i++) {
229947
230234
  const update = data[i];
229948
230235
  const marketId = this.safeString(update, 'symbol');
229949
- const market = this.safeMarket(marketId);
229950
- const symbol = market['symbol'];
229951
- const messageHash = table + ':' + marketId;
229952
- const ticker = this.safeDict(this.tickers, symbol, {});
229953
- const info = this.safeDict(ticker, 'info', {});
229954
- const parsedTicker = this.parseTicker(this.extend(info, update), market);
229955
- tickers[symbol] = parsedTicker;
229956
- this.tickers[symbol] = parsedTicker;
229957
- client.resolve(ticker, messageHash);
230236
+ const symbol = this.safeSymbol(marketId);
230237
+ if (!(symbol in this.tickers)) {
230238
+ this.tickers[symbol] = this.parseTicker({});
230239
+ }
230240
+ const updatedTicker = this.parseTicker(update);
230241
+ const fullParsedTicker = this.deepExtend(this.tickers[symbol], updatedTicker);
230242
+ tickers[symbol] = fullParsedTicker;
230243
+ this.tickers[symbol] = fullParsedTicker;
230244
+ const messageHash = 'ticker:' + symbol;
230245
+ client.resolve(fullParsedTicker, messageHash);
230246
+ client.resolve(fullParsedTicker, 'alltickers');
229958
230247
  }
229959
- client.resolve(tickers, 'instrument');
229960
230248
  return message;
229961
230249
  }
229962
230250
  async watchBalance(params = {}) {
@@ -230936,7 +231224,7 @@ class bitmex extends _bitmex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
230936
231224
  const messageHash = table + ':' + market['id'];
230937
231225
  const result = [
230938
231226
  this.parse8601(this.safeString(candle, 'timestamp')) - duration * 1000,
230939
- this.safeFloat(candle, 'open'),
231227
+ undefined,
230940
231228
  this.safeFloat(candle, 'high'),
230941
231229
  this.safeFloat(candle, 'low'),
230942
231230
  this.safeFloat(candle, 'close'),
@@ -235235,15 +235523,29 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
235235
235523
  // "price24hPcnt": "-0.0388"
235236
235524
  // }
235237
235525
  // }
235526
+ // swap delta
235527
+ // {
235528
+ // "topic":"tickers.AAVEUSDT",
235529
+ // "type":"delta",
235530
+ // "data":{
235531
+ // "symbol":"AAVEUSDT",
235532
+ // "bid1Price":"112.89",
235533
+ // "bid1Size":"2.12",
235534
+ // "ask1Price":"112.90",
235535
+ // "ask1Size":"5.02"
235536
+ // },
235537
+ // "cs":78039939929,
235538
+ // "ts":1709210212704
235539
+ // }
235238
235540
  //
235239
235541
  const topic = this.safeString(message, 'topic', '');
235240
235542
  const updateType = this.safeString(message, 'type', '');
235241
- const data = this.safeValue(message, 'data', {});
235242
- const isSpot = this.safeString(data, 'fundingRate') === undefined;
235543
+ const data = this.safeDict(message, 'data', {});
235544
+ const isSpot = this.safeString(data, 'usdIndexPrice') !== undefined;
235243
235545
  const type = isSpot ? 'spot' : 'contract';
235244
235546
  let symbol = undefined;
235245
235547
  let parsed = undefined;
235246
- if ((updateType === 'snapshot') || isSpot) {
235548
+ if ((updateType === 'snapshot')) {
235247
235549
  parsed = this.parseTicker(data);
235248
235550
  symbol = parsed['symbol'];
235249
235551
  }
@@ -235254,8 +235556,8 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
235254
235556
  const market = this.safeMarket(marketId, undefined, undefined, type);
235255
235557
  symbol = market['symbol'];
235256
235558
  // update the info in place
235257
- const ticker = this.safeValue(this.tickers, symbol, {});
235258
- const rawTicker = this.safeValue(ticker, 'info', {});
235559
+ const ticker = this.safeDict(this.tickers, symbol, {});
235560
+ const rawTicker = this.safeDict(ticker, 'info', {});
235259
235561
  const merged = this.extend(rawTicker, data);
235260
235562
  parsed = this.parseTicker(merged);
235261
235563
  }
@@ -237848,7 +238150,10 @@ class cex extends _cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
237848
238150
  for (let i = 0; i < sorted.length; i++) {
237849
238151
  stored.append(this.parseOHLCV(sorted[i], market));
237850
238152
  }
237851
- this.ohlcvs[symbol] = stored;
238153
+ if (!(symbol in this.ohlcvs)) {
238154
+ this.ohlcvs[symbol] = {};
238155
+ }
238156
+ this.ohlcvs[symbol]['unknown'] = stored;
237852
238157
  client.resolve(stored, messageHash);
237853
238158
  }
237854
238159
  handleOHLCV24(client, message) {
@@ -237907,7 +238212,8 @@ class cex extends _cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
237907
238212
  const pair = this.safeString(message, 'pair');
237908
238213
  const symbol = this.pairToSymbol(pair);
237909
238214
  const messageHash = 'ohlcv:' + symbol;
237910
- const stored = this.safeValue(this.ohlcvs, symbol);
238215
+ // const stored = this.safeValue (this.ohlcvs, symbol);
238216
+ const stored = this.ohlcvs[symbol]['unknown'];
237911
238217
  for (let i = 0; i < data.length; i++) {
237912
238218
  const ohlcv = [
237913
238219
  this.safeTimestamp(data[i], 0),
@@ -240432,14 +240738,17 @@ class coinex extends _coinex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
240432
240738
  const keys = Object.keys(this.ohlcvs);
240433
240739
  const keysLength = keys.length;
240434
240740
  if (keysLength === 0) {
240741
+ this.ohlcvs['unknown'] = {};
240435
240742
  const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
240436
- this.ohlcvs = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheByTimestamp */ .Py(limit);
240743
+ const stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheByTimestamp */ .Py(limit);
240744
+ this.ohlcvs['unknown']['unknown'] = stored;
240437
240745
  }
240746
+ const ohlcv = this.ohlcvs['unknown']['unknown'];
240438
240747
  for (let i = 0; i < ohlcvs.length; i++) {
240439
240748
  const candle = ohlcvs[i];
240440
- this.ohlcvs.append(candle);
240749
+ ohlcv.append(candle);
240441
240750
  }
240442
- client.resolve(this.ohlcvs, messageHash);
240751
+ client.resolve(ohlcv, messageHash);
240443
240752
  }
240444
240753
  async watchTicker(symbol, params = {}) {
240445
240754
  /**
@@ -242689,7 +242998,7 @@ class currencycom extends _currencycom_js__WEBPACK_IMPORTED_MODULE_0__/* ["defau
242689
242998
  // "accountId": 5470310874305732,
242690
242999
  // "collateralCurrency": true,
242691
243000
  // "asset": "USD",
242692
- // "free": 47.82576735,
243001
+ // "free": 47.82576736,
242693
243002
  // "locked": 1.187925,
242694
243003
  // "default": true
242695
243004
  // },
@@ -243059,6 +243368,7 @@ class currencycom extends _currencycom_js__WEBPACK_IMPORTED_MODULE_0__/* ["defau
243059
243368
  orderbook = this.orderBook();
243060
243369
  }
243061
243370
  orderbook.reset({
243371
+ 'symbol': symbol,
243062
243372
  'timestamp': timestamp,
243063
243373
  'datetime': this.iso8601(timestamp),
243064
243374
  });
@@ -253301,7 +253611,7 @@ class kraken extends _kraken_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z
253301
253611
  // [
253302
253612
  // 0, // channelID
253303
253613
  // [ // price volume time side type misc
253304
- // [ "5541.20000", "0.15850568", "1534614057.321597", "s", "l", "" ],
253614
+ // [ "5541.20000", "0.15850568", "1534614057.321596", "s", "l", "" ],
253305
253615
  // [ "6060.00000", "0.02455000", "1534614057.324998", "b", "l", "" ],
253306
253616
  // ],
253307
253617
  // "trade",
@@ -259414,7 +259724,7 @@ class mexc extends _mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
259414
259724
  // "d": {
259415
259725
  // "e": "spot@public.kline.v3.api",
259416
259726
  // "k": {
259417
- // "t": 1678642260,
259727
+ // "t": 1678642261,
259418
259728
  // "o": 20626.94,
259419
259729
  // "c": 20599.69,
259420
259730
  // "h": 20626.94,
@@ -259627,7 +259937,7 @@ class mexc extends _mexc_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
259627
259937
  client.subscriptions[messageHash] = 1;
259628
259938
  this.orderbooks[symbol] = this.countedOrderBook({});
259629
259939
  }
259630
- const storedOrderBook = this.safeValue(this.orderbooks, symbol);
259940
+ const storedOrderBook = this.orderbooks[symbol];
259631
259941
  const nonce = this.safeInteger(storedOrderBook, 'nonce');
259632
259942
  if (nonce === undefined) {
259633
259943
  const cacheLength = storedOrderBook.cache.length;
@@ -270660,15 +270970,19 @@ class whitebit extends _whitebit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] *
270660
270970
  const symbol = market['symbol'];
270661
270971
  const messageHash = 'candles' + ':' + symbol;
270662
270972
  const parsed = this.parseOHLCV(data, market);
270663
- this.ohlcvs[symbol] = this.safeValue(this.ohlcvs, symbol);
270664
- let stored = this.ohlcvs[symbol];
270665
- if (stored === undefined) {
270973
+ // this.ohlcvs[symbol] = this.safeValue (this.ohlcvs, symbol);
270974
+ if (!(symbol in this.ohlcvs)) {
270975
+ this.ohlcvs[symbol] = {};
270976
+ }
270977
+ // let stored = this.ohlcvs[symbol]['unknown']; // we don't know the timeframe but we need to respect the type
270978
+ if (!('unknown' in this.ohlcvs[symbol])) {
270666
270979
  const limit = this.safeInteger(this.options, 'OHLCVLimit', 1000);
270667
- stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheByTimestamp */ .Py(limit);
270668
- this.ohlcvs[symbol] = stored;
270980
+ const stored = new _base_ws_Cache_js__WEBPACK_IMPORTED_MODULE_2__/* .ArrayCacheByTimestamp */ .Py(limit);
270981
+ this.ohlcvs[symbol]['unknown'] = stored;
270669
270982
  }
270670
- stored.append(parsed);
270671
- client.resolve(stored, messageHash);
270983
+ const ohlcv = this.ohlcvs[symbol]['unknown'];
270984
+ ohlcv.append(parsed);
270985
+ client.resolve(ohlcv, messageHash);
270672
270986
  }
270673
270987
  return message;
270674
270988
  }
@@ -288038,7 +288352,7 @@ class upbit extends _abstract_upbit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
288038
288352
  // "trade_time": "104543",
288039
288353
  // "trade_date_kst": "20181122",
288040
288354
  // "trade_time_kst": "194543",
288041
- // "trade_timestamp": 1542883543097,
288355
+ // "trade_timestamp": 1542883543096,
288042
288356
  // "opening_price": 0.02976455,
288043
288357
  // "high_price": 0.02992577,
288044
288358
  // "low_price": 0.02934283,
@@ -295368,6 +295682,7 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
295368
295682
  'reduceMargin': false,
295369
295683
  'setLeverage': true,
295370
295684
  'setMargin': false,
295685
+ 'setPositionMode': true,
295371
295686
  'transfer': true,
295372
295687
  '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
295373
295688
  },
@@ -295442,10 +295757,16 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
295442
295757
  'client/trade/{tid}': 1,
295443
295758
  'order/{oid}/trades': 1,
295444
295759
  'client/trades': 1,
295760
+ 'client/hist_trades': 1,
295761
+ 'staking/yield_history': 1,
295762
+ 'client/holding': 1,
295445
295763
  'asset/deposit': 10,
295446
295764
  'asset/history': 60,
295447
295765
  'sub_account/all': 60,
295448
295766
  'sub_account/assets': 60,
295767
+ 'sub_account/asset_detail': 60,
295768
+ 'sub_account/ip_restriction': 10,
295769
+ 'asset/main_sub_transfer_history': 30,
295449
295770
  'token_interest': 60,
295450
295771
  'token_interest/{token}': 60,
295451
295772
  'interest/history': 60,
@@ -295458,9 +295779,12 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
295458
295779
  'post': {
295459
295780
  'order': 5,
295460
295781
  'asset/main_sub_transfer': 30,
295782
+ 'asset/ltv': 30,
295461
295783
  'asset/withdraw': 30,
295784
+ 'asset/internal_withdraw': 30,
295462
295785
  'interest/repay': 60,
295463
295786
  'client/account_mode': 120,
295787
+ 'client/position_mode': 5,
295464
295788
  'client/leverage': 120,
295465
295789
  },
295466
295790
  'delete': {
@@ -297882,6 +298206,37 @@ class woo extends _abstract_woo_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
297882
298206
  const sorted = this.sortBy(rates, 'timestamp');
297883
298207
  return this.filterBySymbolSinceLimit(sorted, symbol, since, limit);
297884
298208
  }
298209
+ async setPositionMode(hedged, symbol = undefined, params = {}) {
298210
+ /**
298211
+ * @method
298212
+ * @name woo#setPositionMode
298213
+ * @description set hedged to true or false for a market
298214
+ * @see https://docs.woo.org/#update-position-mode
298215
+ * @param {bool} hedged set to true to use HEDGE_MODE, false for ONE_WAY
298216
+ * @param {string} symbol not used by woo setPositionMode
298217
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
298218
+ * @returns {object} response from the exchange
298219
+ */
298220
+ let hedgeMode = undefined;
298221
+ if (hedged) {
298222
+ hedgeMode = 'HEDGE_MODE';
298223
+ }
298224
+ else {
298225
+ hedgeMode = 'ONE_WAY';
298226
+ }
298227
+ const request = {
298228
+ 'position_mode': hedgeMode,
298229
+ };
298230
+ const response = await this.v1PrivatePostClientPositionMode(this.extend(request, params));
298231
+ //
298232
+ // {
298233
+ // "success": true,
298234
+ // "data": {},
298235
+ // "timestamp": "1709195608551"
298236
+ // }
298237
+ //
298238
+ return response;
298239
+ }
297885
298240
  async fetchLeverage(symbol, params = {}) {
297886
298241
  await this.loadMarkets();
297887
298242
  const response = await this.v3PrivateGetAccountinfo(params);
@@ -307635,7 +307990,7 @@ SOFTWARE.
307635
307990
 
307636
307991
  //-----------------------------------------------------------------------------
307637
307992
  // this is updated by vss.js when building
307638
- const version = '4.2.55';
307993
+ const version = '4.2.57';
307639
307994
  _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
307640
307995
  //-----------------------------------------------------------------------------
307641
307996