ccxt 4.3.66 → 4.3.68

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 (55) hide show
  1. package/README.md +3 -3
  2. package/dist/ccxt.browser.min.js +2 -2
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/base/Exchange.js +6 -4
  5. package/dist/cjs/src/base/functions/type.js +2 -2
  6. package/dist/cjs/src/bingx.js +478 -159
  7. package/dist/cjs/src/bitget.js +4 -2
  8. package/dist/cjs/src/bithumb.js +61 -17
  9. package/dist/cjs/src/pro/krakenfutures.js +7 -6
  10. package/dist/cjs/src/pro/okx.js +17 -4
  11. package/js/ccxt.d.ts +1 -1
  12. package/js/ccxt.js +1 -1
  13. package/js/src/abstract/bingx.d.ts +7 -0
  14. package/js/src/base/Exchange.d.ts +14 -13
  15. package/js/src/base/Exchange.js +6 -4
  16. package/js/src/base/functions/type.js +2 -2
  17. package/js/src/bingx.d.ts +2 -0
  18. package/js/src/bingx.js +478 -159
  19. package/js/src/bitget.js +4 -2
  20. package/js/src/bithumb.js +61 -17
  21. package/js/src/pro/bitget.d.ts +1 -1
  22. package/js/src/pro/bybit.d.ts +1 -1
  23. package/js/src/pro/coinone.d.ts +1 -1
  24. package/js/src/pro/currencycom.d.ts +1 -1
  25. package/js/src/pro/hollaex.d.ts +1 -1
  26. package/js/src/pro/hyperliquid.d.ts +1 -1
  27. package/js/src/pro/krakenfutures.js +7 -6
  28. package/js/src/pro/kucoin.d.ts +1 -1
  29. package/js/src/pro/kucoinfutures.d.ts +1 -1
  30. package/js/src/pro/mexc.d.ts +1 -1
  31. package/js/src/pro/okcoin.d.ts +1 -1
  32. package/js/src/pro/okx.d.ts +2 -2
  33. package/js/src/pro/okx.js +18 -5
  34. package/js/src/pro/oxfun.d.ts +1 -1
  35. package/js/src/pro/p2b.d.ts +1 -1
  36. package/js/src/pro/poloniex.d.ts +1 -1
  37. package/js/src/pro/whitebit.d.ts +1 -1
  38. package/package.json +1 -1
  39. package/dist/cjs/src/abstract/bittrex.js +0 -9
  40. package/dist/cjs/src/bittrex.js +0 -2308
  41. package/dist/cjs/src/pro/bittrex.js +0 -959
  42. package/js/src/bittrex.d.ts +0 -97
  43. package/js/src/bittrex.js +0 -2309
  44. package/js/src/coinbaseprime.d.ts +0 -4
  45. package/js/src/coinbaseprime.js +0 -32
  46. package/js/src/pro/bittrex.d.ts +0 -69
  47. package/js/src/pro/bittrex.js +0 -960
  48. package/js/src/pro/coinbaseprime.d.ts +0 -4
  49. package/js/src/pro/coinbaseprime.js +0 -33
  50. package/js/src/pro/huobipro.d.ts +0 -4
  51. package/js/src/pro/huobipro.js +0 -17
  52. package/js/src/pro/mexc3.d.ts +0 -4
  53. package/js/src/pro/mexc3.js +0 -17
  54. package/js/src/pro/okex.d.ts +0 -4
  55. package/js/src/pro/okex.js +0 -17
@@ -5205,8 +5205,10 @@ class bitget extends bitget$1 {
5205
5205
  response = JSON.parse(response);
5206
5206
  }
5207
5207
  const data = this.safeDict(response, 'data');
5208
- if ((data !== undefined) && !Array.isArray(data)) {
5209
- return this.parseOrder(data, market);
5208
+ if ((data !== undefined)) {
5209
+ if (!Array.isArray(data)) {
5210
+ return this.parseOrder(data, market);
5211
+ }
5210
5212
  }
5211
5213
  const dataList = this.safeList(response, 'data', []);
5212
5214
  const first = this.safeDict(dataList, 0, {});
@@ -203,17 +203,57 @@ class bithumb extends bithumb$1 {
203
203
  * @returns {object[]} an array of objects representing market data
204
204
  */
205
205
  const result = [];
206
- const quoteCurrencies = this.safeValue(this.options, 'quoteCurrencies', {});
206
+ const quoteCurrencies = this.safeDict(this.options, 'quoteCurrencies', {});
207
207
  const quotes = Object.keys(quoteCurrencies);
208
+ const promises = [];
208
209
  for (let i = 0; i < quotes.length; i++) {
209
- const quote = quotes[i];
210
- const quoteId = quote;
211
- const extension = this.safeValue(quoteCurrencies, quote, {});
212
210
  const request = {
213
- 'quoteId': quoteId,
211
+ 'quoteId': quotes[i],
214
212
  };
215
- const response = await this.publicGetTickerALLQuoteId(this.extend(request, params));
216
- const data = this.safeValue(response, 'data');
213
+ promises.push(this.publicGetTickerALLQuoteId(this.extend(request, params)));
214
+ //
215
+ // {
216
+ // "status": "0000",
217
+ // "data": {
218
+ // "ETH": {
219
+ // "opening_price": "0.05153399",
220
+ // "closing_price": "0.05145144",
221
+ // "min_price": "0.05145144",
222
+ // "max_price": "0.05160781",
223
+ // "units_traded": "6.541124172077830855",
224
+ // "acc_trade_value": "0.33705472498492329997697755",
225
+ // "prev_closing_price": "0.0515943",
226
+ // "units_traded_24H": "43.368879902677400513",
227
+ // "acc_trade_value_24H": "2.24165339555398079994373342",
228
+ // "fluctate_24H": "-0.00018203",
229
+ // "fluctate_rate_24H": "-0.35"
230
+ // },
231
+ // "XRP": {
232
+ // "opening_price": "0.00000918",
233
+ // "closing_price": "0.0000092",
234
+ // "min_price": "0.00000918",
235
+ // "max_price": "0.0000092",
236
+ // "units_traded": "6516.949363",
237
+ // "acc_trade_value": "0.0598792533602796",
238
+ // "prev_closing_price": "0.00000916",
239
+ // "units_traded_24H": "229161.50354738",
240
+ // "acc_trade_value_24H": "2.0446589371637117",
241
+ // "fluctate_24H": "0.00000049",
242
+ // "fluctate_rate_24H": "5.63"
243
+ // },
244
+ // ...
245
+ // "date": "1721675913145"
246
+ // }
247
+ // }
248
+ //
249
+ }
250
+ const results = await Promise.all(promises);
251
+ for (let i = 0; i < quotes.length; i++) {
252
+ const quote = quotes[i];
253
+ const quoteId = quote;
254
+ const response = results[i];
255
+ const data = this.safeDict(response, 'data');
256
+ const extension = this.safeDict(quoteCurrencies, quote, {});
217
257
  const currencyIds = Object.keys(data);
218
258
  for (let j = 0; j < currencyIds.length; j++) {
219
259
  const currencyId = currencyIds[j];
@@ -282,7 +322,7 @@ class bithumb extends bithumb$1 {
282
322
  }
283
323
  parseBalance(response) {
284
324
  const result = { 'info': response };
285
- const balances = this.safeValue(response, 'data');
325
+ const balances = this.safeDict(response, 'data');
286
326
  const codes = Object.keys(this.currencies);
287
327
  for (let i = 0; i < codes.length; i++) {
288
328
  const code = codes[i];
@@ -353,7 +393,7 @@ class bithumb extends bithumb$1 {
353
393
  // }
354
394
  // }
355
395
  //
356
- const data = this.safeValue(response, 'data', {});
396
+ const data = this.safeDict(response, 'data', {});
357
397
  const timestamp = this.safeInteger(data, 'timestamp');
358
398
  return this.parseOrderBook(data, symbol, timestamp, 'bids', 'asks', 'price', 'quantity');
359
399
  }
@@ -417,15 +457,19 @@ class bithumb extends bithumb$1 {
417
457
  */
418
458
  await this.loadMarkets();
419
459
  const result = {};
420
- const quoteCurrencies = this.safeValue(this.options, 'quoteCurrencies', {});
460
+ const quoteCurrencies = this.safeDict(this.options, 'quoteCurrencies', {});
421
461
  const quotes = Object.keys(quoteCurrencies);
462
+ const promises = [];
422
463
  for (let i = 0; i < quotes.length; i++) {
423
- const quote = quotes[i];
424
- const quoteId = quote;
425
464
  const request = {
426
- 'quoteId': quoteId,
465
+ 'quoteId': quotes[i],
427
466
  };
428
- const response = await this.publicGetTickerALLQuoteId(this.extend(request, params));
467
+ promises.push(this.publicGetTickerALLQuoteId(this.extend(request, params)));
468
+ }
469
+ const responses = await Promise.all(promises);
470
+ for (let i = 0; i < quotes.length; i++) {
471
+ const quote = quotes[i];
472
+ const response = responses[i];
429
473
  //
430
474
  // {
431
475
  // "status":"0000",
@@ -447,7 +491,7 @@ class bithumb extends bithumb$1 {
447
491
  // }
448
492
  // }
449
493
  //
450
- const data = this.safeValue(response, 'data', {});
494
+ const data = this.safeDict(response, 'data', {});
451
495
  const timestamp = this.safeInteger(data, 'date');
452
496
  const tickers = this.omit(data, 'date');
453
497
  const currencyIds = Object.keys(tickers);
@@ -832,7 +876,7 @@ class bithumb extends bithumb$1 {
832
876
  // }
833
877
  //
834
878
  const timestamp = this.safeIntegerProduct(order, 'order_date', 0.001);
835
- const sideProperty = this.safeValue2(order, 'type', 'side');
879
+ const sideProperty = this.safeString2(order, 'type', 'side');
836
880
  const side = (sideProperty === 'bid') ? 'buy' : 'sell';
837
881
  const status = this.parseOrderStatus(this.safeString(order, 'order_status'));
838
882
  const price = this.safeString2(order, 'order_price', 'price');
@@ -863,7 +907,7 @@ class bithumb extends bithumb$1 {
863
907
  symbol = market['symbol'];
864
908
  }
865
909
  const id = this.safeString(order, 'order_id');
866
- const rawTrades = this.safeValue(order, 'contract', []);
910
+ const rawTrades = this.safeList(order, 'contract', []);
867
911
  return this.safeOrder({
868
912
  'info': order,
869
913
  'id': id,
@@ -76,17 +76,17 @@ class krakenfutures extends krakenfutures$1 {
76
76
  const url = this.urls['api']['ws'];
77
77
  const messageHash = 'challenge';
78
78
  const client = this.client(url);
79
- let future = this.safeValue(client.subscriptions, messageHash);
80
- if (future === undefined) {
79
+ const future = client.future(messageHash);
80
+ const authenticated = this.safeValue(client.subscriptions, messageHash);
81
+ if (authenticated === undefined) {
81
82
  const request = {
82
83
  'event': 'challenge',
83
84
  'api_key': this.apiKey,
84
85
  };
85
86
  const message = this.extend(request, params);
86
- future = await this.watch(url, messageHash, message, messageHash);
87
- client.subscriptions[messageHash] = future;
87
+ this.watch(url, messageHash, message, messageHash);
88
88
  }
89
- return future;
89
+ return await future;
90
90
  }
91
91
  async watchOrderBookForSymbols(symbols, limit = undefined, params = {}) {
92
92
  /**
@@ -1572,7 +1572,8 @@ class krakenfutures extends krakenfutures$1 {
1572
1572
  const signature = this.hmac(hashedChallenge, base64Secret, sha512.sha512, 'base64');
1573
1573
  this.options['challenge'] = challenge;
1574
1574
  this.options['signedChallenge'] = signature;
1575
- client.resolve(message, messageHash);
1575
+ const future = this.safeValue(client.futures, messageHash);
1576
+ future.resolve(true);
1576
1577
  }
1577
1578
  else {
1578
1579
  const error = new errors.AuthenticationError(this.id + ' ' + this.json(message));
@@ -894,7 +894,7 @@ class okx extends okx$1 {
894
894
  this.handleDelta(bookside, deltas[i]);
895
895
  }
896
896
  }
897
- handleOrderBookMessage(client, message, orderbook, messageHash) {
897
+ handleOrderBookMessage(client, message, orderbook, messageHash, market = undefined) {
898
898
  //
899
899
  // {
900
900
  // "asks": [
@@ -909,6 +909,9 @@ class okx extends okx$1 {
909
909
  // ],
910
910
  // "instId": "BTC-USDT",
911
911
  // "ts": "1626537446491"
912
+ // "checksum": -855196043,
913
+ // "prevSeqId": 123456,
914
+ // "seqId": 123457
912
915
  // }
913
916
  //
914
917
  const asks = this.safeValue(message, 'asks', []);
@@ -918,9 +921,12 @@ class okx extends okx$1 {
918
921
  this.handleDeltas(storedAsks, asks);
919
922
  this.handleDeltas(storedBids, bids);
920
923
  const marketId = this.safeString(message, 'instId');
921
- const symbol = this.safeSymbol(marketId);
924
+ const symbol = this.safeSymbol(marketId, market);
922
925
  const checksum = this.handleOption('watchOrderBook', 'checksum', true);
926
+ const seqId = this.safeInteger(message, 'seqId');
923
927
  if (checksum) {
928
+ const prevSeqId = this.safeInteger(message, 'prevSeqId');
929
+ const nonce = orderbook['nonce'];
924
930
  const asksLength = storedAsks.length;
925
931
  const bidsLength = storedBids.length;
926
932
  const payloadArray = [];
@@ -937,14 +943,21 @@ class okx extends okx$1 {
937
943
  const payload = payloadArray.join(':');
938
944
  const responseChecksum = this.safeInteger(message, 'checksum');
939
945
  const localChecksum = this.crc32(payload, true);
946
+ let error = undefined;
947
+ if (prevSeqId !== -1 && nonce !== prevSeqId) {
948
+ error = new errors.InvalidNonce(this.id + ' watchOrderBook received invalid nonce');
949
+ }
940
950
  if (responseChecksum !== localChecksum) {
941
- const error = new errors.ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
951
+ error = new errors.ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
952
+ }
953
+ if (error !== undefined) {
942
954
  delete client.subscriptions[messageHash];
943
955
  delete this.orderbooks[symbol];
944
956
  client.reject(error, messageHash);
945
957
  }
946
958
  }
947
959
  const timestamp = this.safeInteger(message, 'ts');
960
+ orderbook['nonce'] = seqId;
948
961
  orderbook['timestamp'] = timestamp;
949
962
  orderbook['datetime'] = this.iso8601(timestamp);
950
963
  return orderbook;
@@ -1066,7 +1079,7 @@ class okx extends okx$1 {
1066
1079
  const orderbook = this.orderbooks[symbol];
1067
1080
  for (let i = 0; i < data.length; i++) {
1068
1081
  const update = data[i];
1069
- this.handleOrderBookMessage(client, update, orderbook, messageHash);
1082
+ this.handleOrderBookMessage(client, update, orderbook, messageHash, market);
1070
1083
  client.resolve(orderbook, messageHash);
1071
1084
  }
1072
1085
  }
package/js/ccxt.d.ts CHANGED
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
4
4
  import * as errors from './src/base/errors.js';
5
5
  import type { Int, int, Str, Strings, Num, Bool, IndexType, OrderSide, OrderType, MarketType, SubType, Dict, NullableDict, List, NullableList, Fee, OHLCV, OHLCVC, implicitReturnType, Market, Currency, Dictionary, MinMax, FeeInterface, TradingFeeInterface, MarketInterface, Trade, Order, OrderBook, Ticker, Transaction, Tickers, CurrencyInterface, Balance, BalanceAccount, Account, PartialBalances, Balances, DepositAddress, WithdrawalResponse, DepositAddressResponse, FundingRate, FundingRates, Position, BorrowInterest, LeverageTier, LedgerEntry, DepositWithdrawFeeNetwork, DepositWithdrawFee, TransferEntry, CrossBorrowRate, IsolatedBorrowRate, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, CancellationRequest, FundingHistory, MarginMode, Greeks, Conversion, Option, LastPrice, Leverage, MarginModification, Leverages, LastPrices, Currencies, TradingFees, MarginModes, OptionChain, IsolatedBorrowRates, CrossBorrowRates, TransferEntries, LeverageTiers } from './src/base/types.js';
6
6
  import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending } from './src/base/errors.js';
7
- declare const version = "4.3.65";
7
+ declare const version = "4.3.67";
8
8
  import ace from './src/ace.js';
9
9
  import alpaca from './src/alpaca.js';
10
10
  import ascendex from './src/ascendex.js';
package/js/ccxt.js CHANGED
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
38
38
  import { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending } from './src/base/errors.js';
39
39
  //-----------------------------------------------------------------------------
40
40
  // this is updated by vss.js when building
41
- const version = '4.3.66';
41
+ const version = '4.3.68';
42
42
  Exchange.ccxtVersion = version;
43
43
  //-----------------------------------------------------------------------------
44
44
  import ace from './src/ace.js';
@@ -84,13 +84,20 @@ interface Exchange {
84
84
  cswapV1PrivateGetTradeLeverage(params?: {}): Promise<implicitReturnType>;
85
85
  cswapV1PrivateGetTradeForceOrders(params?: {}): Promise<implicitReturnType>;
86
86
  cswapV1PrivateGetTradeAllFillOrders(params?: {}): Promise<implicitReturnType>;
87
+ cswapV1PrivateGetTradeOpenOrders(params?: {}): Promise<implicitReturnType>;
88
+ cswapV1PrivateGetTradeOrderDetail(params?: {}): Promise<implicitReturnType>;
89
+ cswapV1PrivateGetTradeOrderHistory(params?: {}): Promise<implicitReturnType>;
90
+ cswapV1PrivateGetTradeMarginType(params?: {}): Promise<implicitReturnType>;
87
91
  cswapV1PrivateGetUserCommissionRate(params?: {}): Promise<implicitReturnType>;
88
92
  cswapV1PrivateGetUserPositions(params?: {}): Promise<implicitReturnType>;
89
93
  cswapV1PrivateGetUserBalance(params?: {}): Promise<implicitReturnType>;
90
94
  cswapV1PrivatePostTradeOrder(params?: {}): Promise<implicitReturnType>;
91
95
  cswapV1PrivatePostTradeLeverage(params?: {}): Promise<implicitReturnType>;
92
96
  cswapV1PrivatePostTradeCloseAllPositions(params?: {}): Promise<implicitReturnType>;
97
+ cswapV1PrivatePostTradeMarginType(params?: {}): Promise<implicitReturnType>;
98
+ cswapV1PrivatePostTradePositionMargin(params?: {}): Promise<implicitReturnType>;
93
99
  cswapV1PrivateDeleteTradeAllOpenOrders(params?: {}): Promise<implicitReturnType>;
100
+ cswapV1PrivateDeleteTradeCancelOrder(params?: {}): Promise<implicitReturnType>;
94
101
  contractV1PrivateGetAllPosition(params?: {}): Promise<implicitReturnType>;
95
102
  contractV1PrivateGetAllOrders(params?: {}): Promise<implicitReturnType>;
96
103
  contractV1PrivateGetBalance(params?: {}): Promise<implicitReturnType>;
@@ -7,6 +7,7 @@ import type { Market, Trade, Ticker, OHLCV, OHLCVC, Order, OrderBook, Balance, B
7
7
  export type { Market, Trade, Fee, Ticker, OHLCV, OHLCVC, Order, OrderBook, Balance, Balances, Dictionary, Transaction, DepositAddressResponse, Currency, MinMax, IndexType, Int, Bool, OrderType, OrderSide, Position, LedgerEntry, BorrowInterest, OpenInterest, LeverageTier, TransferEntry, CrossBorrowRate, FundingRateHistory, Liquidation, FundingHistory, OrderRequest, MarginMode, Tickers, Greeks, Option, OptionChain, Str, Num, MarketInterface, CurrencyInterface, BalanceAccount, MarginModes, MarketType, Leverage, Leverages, LastPrice, LastPrices, Account, Strings, Conversion } from './types.js';
8
8
  import { ArrayCache, ArrayCacheByTimestamp } from './ws/Cache.js';
9
9
  import { OrderBook as Ob } from './ws/OrderBook.js';
10
+ import Client from './ws/Client.js';
10
11
  /**
11
12
  * @class Exchange
12
13
  */
@@ -648,7 +649,7 @@ export default class Exchange {
648
649
  indexedOrderBook(snapshot?: {}, depth?: number): IndexedOrderBook;
649
650
  countedOrderBook(snapshot?: {}, depth?: number): CountedOrderBook;
650
651
  handleMessage(client: any, message: any): void;
651
- ping(client: any): any;
652
+ ping(client: Client): any;
652
653
  client(url: string): WsClient;
653
654
  watchMultiple(url: string, messageHashes: string[], message?: any, subscribeHashes?: any, subscription?: any): import("./ws/Future.js").FutureInterface;
654
655
  watch(url: string, messageHash: string, message?: any, subscribeHash?: any, subscription?: any): any;
@@ -658,7 +659,7 @@ export default class Exchange {
658
659
  close(): Promise<void>;
659
660
  loadOrderBook(client: any, messageHash: string, symbol: string, limit?: Int, params?: {}): Promise<void>;
660
661
  convertToBigInt(value: string): bigint;
661
- stringToCharsArray(value: any): any;
662
+ stringToCharsArray(value: string): string[];
662
663
  valueIsDefined(value: any): boolean;
663
664
  arraySlice(array: any, first: any, second?: any): any;
664
665
  getProperty(obj: any, property: any, defaultValue?: any): any;
@@ -668,9 +669,9 @@ export default class Exchange {
668
669
  ethAbiEncode(types: any, args: any): Uint8Array;
669
670
  ethEncodeStructuredData(domain: any, messageTypes: any, messageData: any): Uint8Array;
670
671
  intToBase16(elem: any): string;
671
- extendExchangeOptions(newOptions: any): void;
672
+ extendExchangeOptions(newOptions: Dict): void;
672
673
  createSafeDictionary(): {};
673
- randomBytes(length: any): string;
674
+ randomBytes(length: number): string;
674
675
  safeBoolN(dictionaryOrList: any, keys: IndexType[], defaultValue?: boolean): boolean | undefined;
675
676
  safeBool2(dictionary: any, key1: IndexType, key2: IndexType, defaultValue?: boolean): boolean | undefined;
676
677
  safeBool(dictionary: any, key: IndexType, defaultValue?: boolean): boolean | undefined;
@@ -722,7 +723,7 @@ export default class Exchange {
722
723
  parseTrade(trade: Dict, market?: Market): Trade;
723
724
  parseTransaction(transaction: Dict, currency?: Currency): Transaction;
724
725
  parseTransfer(transfer: Dict, currency?: Currency): TransferEntry;
725
- parseAccount(account: any): Account;
726
+ parseAccount(account: Dict): Account;
726
727
  parseLedgerEntry(item: Dict, currency?: Currency): object;
727
728
  parseOrder(order: Dict, market?: Market): Order;
728
729
  fetchCrossBorrowRates(params?: {}): Promise<CrossBorrowRates>;
@@ -796,11 +797,11 @@ export default class Exchange {
796
797
  info: Dictionary<any>;
797
798
  };
798
799
  safeCurrencyStructure(currency: object): CurrencyInterface;
799
- safeMarketStructure(market?: any): MarketInterface;
800
+ safeMarketStructure(market?: Dict): MarketInterface;
800
801
  setMarkets(markets: any, currencies?: any): Dictionary<any>;
801
802
  getDescribeForExtendedWsExchange(currentRestInstance: any, parentRestInstance: any, wsBaseDescribe: Dictionary<any>): any;
802
- safeBalance(balance: object): Balances;
803
- safeOrder(order: object, market?: Market): Order;
803
+ safeBalance(balance: Dict): Balances;
804
+ safeOrder(order: Dict, market?: Market): Order;
804
805
  parseOrders(orders: object, market?: Market, since?: Int, limit?: Int, params?: {}): Order[];
805
806
  calculateFee(symbol: string, type: string, side: string, amount: number, price: number, takerOrMaker?: string, params?: {}): {
806
807
  type: string;
@@ -808,12 +809,12 @@ export default class Exchange {
808
809
  rate: number;
809
810
  cost: number;
810
811
  };
811
- safeLiquidation(liquidation: object, market?: Market): Liquidation;
812
- safeTrade(trade: object, market?: Market): Trade;
812
+ safeLiquidation(liquidation: Dict, market?: Market): Liquidation;
813
+ safeTrade(trade: Dict, market?: Market): Trade;
813
814
  findNearestCeiling(arr: number[], providedValue: number): number;
814
815
  invertFlatStringDictionary(dict: any): {};
815
816
  reduceFeesByCurrency(fees: any): any[];
816
- safeTicker(ticker: object, market?: Market): Ticker;
817
+ safeTicker(ticker: Dict, market?: Market): Ticker;
817
818
  fetchBorrowRate(code: string, amount: any, params?: {}): Promise<{}>;
818
819
  repayCrossMargin(code: string, amount: any, params?: {}): Promise<{}>;
819
820
  repayIsolatedMargin(symbol: string, code: string, amount: any, params?: {}): Promise<{}>;
@@ -847,7 +848,7 @@ export default class Exchange {
847
848
  parseOHLCVs(ohlcvs: object[], market?: any, timeframe?: string, since?: Int, limit?: Int): OHLCV[];
848
849
  parseLeverageTiers(response: any, symbols?: string[], marketIdKey?: any): LeverageTiers;
849
850
  loadTradingLimits(symbols?: Strings, reload?: boolean, params?: {}): Promise<Dictionary<any>>;
850
- safePosition(position: any): Position;
851
+ safePosition(position: Dict): Position;
851
852
  parsePositions(positions: any[], symbols?: string[], params?: {}): Position[];
852
853
  parseAccounts(accounts: any[], params?: {}): Account[];
853
854
  parseTrades(trades: any[], market?: Market, since?: Int, limit?: Int, params?: {}): Trade[];
@@ -1092,7 +1093,7 @@ export default class Exchange {
1092
1093
  sortCursorPaginatedResult(result: any): any;
1093
1094
  removeRepeatedElementsFromArray(input: any): any;
1094
1095
  handleUntilOption(key: string, request: any, params: any, multiplier?: number): any[];
1095
- safeOpenInterest(interest: any, market?: Market): OpenInterest;
1096
+ safeOpenInterest(interest: Dict, market?: Market): OpenInterest;
1096
1097
  parseLiquidation(liquidation: any, market?: Market): Liquidation;
1097
1098
  parseLiquidations(liquidations: Dict[], market?: Market, since?: Int, limit?: Int): Liquidation[];
1098
1099
  parseGreeks(greeks: Dict, market?: Market): Greeks;
@@ -1165,7 +1165,7 @@ export default class Exchange {
1165
1165
  return new CountedOrderBook(snapshot, depth);
1166
1166
  }
1167
1167
  handleMessage(client, message) { } // stub to override
1168
- // ping (client) {} // stub to override
1168
+ // ping (client: Client) {} // stub to override
1169
1169
  ping(client) {
1170
1170
  return undefined;
1171
1171
  }
@@ -1575,8 +1575,10 @@ export default class Exchange {
1575
1575
  if (value === undefined) {
1576
1576
  return defaultValue;
1577
1577
  }
1578
- if (typeof value === 'object') {
1579
- return value;
1578
+ if ((typeof value === 'object')) {
1579
+ if (!Array.isArray(value)) {
1580
+ return value;
1581
+ }
1580
1582
  }
1581
1583
  return defaultValue;
1582
1584
  }
@@ -3465,7 +3467,7 @@ export default class Exchange {
3465
3467
  }
3466
3468
  else {
3467
3469
  // otherwise, try to use the global-scope 'defaultNetwork' value (even if that network is not supported by currency, it doesn't make any problem, this will be just used "at first" if currency supports this network at all)
3468
- const defaultNetwork = this.safeDict(this.options, 'defaultNetwork');
3470
+ const defaultNetwork = this.safeString(this.options, 'defaultNetwork');
3469
3471
  if (defaultNetwork !== undefined) {
3470
3472
  defaultNetworkCode = defaultNetwork;
3471
3473
  }
@@ -82,7 +82,7 @@ const safeInteger2 = (o, k1, k2, $default) => {
82
82
  return isNumber(n) ? n : $default;
83
83
  };
84
84
  const safeIntegerProduct2 = (o, k1, k2, $factor, $default) => {
85
- const n = asInteger(prop2(o, k1, k2));
85
+ const n = asFloat(prop2(o, k1, k2));
86
86
  return isNumber(n) ? parseInt(n * $factor) : $default;
87
87
  };
88
88
  const safeTimestamp2 = (o, k1, k2, $default) => {
@@ -129,7 +129,7 @@ const safeIntegerN = (o, k, $default) => {
129
129
  return isNumber(n) ? n : $default;
130
130
  };
131
131
  const safeIntegerProductN = (o, k, $factor, $default) => {
132
- const n = asInteger(getValueFromKeysInArray(o, k));
132
+ const n = asFloat(getValueFromKeysInArray(o, k));
133
133
  return isNumber(n) ? parseInt(n * $factor) : $default;
134
134
  };
135
135
  const safeTimestampN = (o, k, $default) => {
package/js/src/bingx.d.ts CHANGED
@@ -86,6 +86,8 @@ export default class bingx extends Exchange {
86
86
  fetchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
87
87
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
88
88
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
89
+ fetchCanceledOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
90
+ fetchCanceledAndClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
89
91
  transfer(code: string, amount: number, fromAccount: string, toAccount: string, params?: {}): Promise<TransferEntry>;
90
92
  fetchTransfers(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<TransferEntries>;
91
93
  parseTransfer(transfer: Dict, currency?: Currency): TransferEntry;