ccxt 4.4.77 → 4.4.80

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 (154) hide show
  1. package/README.md +8 -10
  2. package/dist/ccxt.browser.min.js +7 -7
  3. package/dist/cjs/ccxt.js +8 -4
  4. package/dist/cjs/src/abstract/ace.js +1 -1
  5. package/dist/cjs/src/abstract/apex.js +9 -0
  6. package/dist/cjs/src/ace.js +1 -1
  7. package/dist/cjs/src/apex.js +1949 -0
  8. package/dist/cjs/src/ascendex.js +25 -4
  9. package/dist/cjs/src/base/Exchange.js +42 -2
  10. package/dist/cjs/src/binance.js +9 -1
  11. package/dist/cjs/src/bingx.js +3 -3
  12. package/dist/cjs/src/bitfinex.js +64 -36
  13. package/dist/cjs/src/bitget.js +191 -138
  14. package/dist/cjs/src/bitmart.js +7 -2
  15. package/dist/cjs/src/bitmex.js +16 -8
  16. package/dist/cjs/src/bitopro.js +5 -1
  17. package/dist/cjs/src/bitrue.js +2 -1
  18. package/dist/cjs/src/bitso.js +1 -1
  19. package/dist/cjs/src/bitteam.js +2 -0
  20. package/dist/cjs/src/bitvavo.js +28 -10
  21. package/dist/cjs/src/btcalpha.js +1 -1
  22. package/dist/cjs/src/btcmarkets.js +1 -1
  23. package/dist/cjs/src/btcturk.js +1 -1
  24. package/dist/cjs/src/bybit.js +32 -16
  25. package/dist/cjs/src/cex.js +1 -1
  26. package/dist/cjs/src/coinbase.js +18 -2
  27. package/dist/cjs/src/coincatch.js +68 -0
  28. package/dist/cjs/src/coinex.js +1 -0
  29. package/dist/cjs/src/coinlist.js +1 -0
  30. package/dist/cjs/src/coinone.js +1 -0
  31. package/dist/cjs/src/delta.js +4 -0
  32. package/dist/cjs/src/deribit.js +1 -0
  33. package/dist/cjs/src/hitbtc.js +3 -0
  34. package/dist/cjs/src/hollaex.js +1 -0
  35. package/dist/cjs/src/htx.js +7 -3
  36. package/dist/cjs/src/huobijp.js +1 -0
  37. package/dist/cjs/src/hyperliquid.js +14 -4
  38. package/dist/cjs/src/kraken.js +2 -0
  39. package/dist/cjs/src/mexc.js +50 -57
  40. package/dist/cjs/src/okx.js +1 -1
  41. package/dist/cjs/src/phemex.js +2 -1
  42. package/dist/cjs/src/poloniex.js +2 -1
  43. package/dist/cjs/src/pro/apex.js +1043 -0
  44. package/dist/cjs/src/pro/binance.js +3 -3
  45. package/dist/cjs/src/pro/coinbase.js +45 -68
  46. package/dist/cjs/src/pro/gate.js +27 -2
  47. package/dist/cjs/src/pro/hollaex.js +2 -2
  48. package/dist/cjs/src/pro/p2b.js +2 -2
  49. package/dist/cjs/src/pro/tradeogre.js +283 -0
  50. package/dist/cjs/src/pro/upbit.js +43 -0
  51. package/dist/cjs/src/probit.js +1 -0
  52. package/dist/cjs/src/static_dependencies/zklink/zklink-sdk-web.js +2639 -0
  53. package/dist/cjs/src/timex.js +2 -2
  54. package/dist/cjs/src/tradeogre.js +2 -1
  55. package/dist/cjs/src/upbit.js +277 -67
  56. package/dist/cjs/src/whitebit.js +66 -12
  57. package/dist/cjs/src/woo.js +3 -1
  58. package/dist/cjs/src/xt.js +9 -0
  59. package/js/ccxt.d.ts +11 -5
  60. package/js/ccxt.js +8 -4
  61. package/js/src/abstract/apex.d.ts +34 -0
  62. package/js/src/abstract/bitmart.d.ts +1 -0
  63. package/js/src/apex.d.ts +333 -0
  64. package/js/src/apex.js +1945 -0
  65. package/js/src/ascendex.d.ts +3 -3
  66. package/js/src/ascendex.js +25 -4
  67. package/js/src/base/Exchange.d.ts +2 -0
  68. package/js/src/base/Exchange.js +42 -1
  69. package/js/src/binance.d.ts +7 -7
  70. package/js/src/binance.js +9 -1
  71. package/js/src/bingx.js +3 -3
  72. package/js/src/bitfinex.d.ts +3 -3
  73. package/js/src/bitfinex.js +64 -36
  74. package/js/src/bitflyer.d.ts +2 -2
  75. package/js/src/bitget.d.ts +2 -0
  76. package/js/src/bitget.js +191 -138
  77. package/js/src/bitmart.d.ts +5 -4
  78. package/js/src/bitmart.js +7 -2
  79. package/js/src/bitmex.d.ts +3 -3
  80. package/js/src/bitmex.js +16 -8
  81. package/js/src/bitopro.js +5 -1
  82. package/js/src/bitrue.js +2 -1
  83. package/js/src/bitso.js +1 -1
  84. package/js/src/bitteam.js +2 -0
  85. package/js/src/bitvavo.js +28 -10
  86. package/js/src/btcalpha.js +1 -1
  87. package/js/src/btcmarkets.js +1 -1
  88. package/js/src/btcturk.js +1 -1
  89. package/js/src/bybit.js +32 -16
  90. package/js/src/cex.js +1 -1
  91. package/js/src/coinbase.d.ts +4 -4
  92. package/js/src/coinbase.js +18 -2
  93. package/js/src/coinbaseexchange.d.ts +1 -1
  94. package/js/src/coincatch.d.ts +11 -0
  95. package/js/src/coincatch.js +68 -0
  96. package/js/src/coinex.js +1 -0
  97. package/js/src/coinlist.js +1 -0
  98. package/js/src/coinone.js +1 -0
  99. package/js/src/cryptocom.d.ts +4 -4
  100. package/js/src/delta.js +4 -0
  101. package/js/src/deribit.d.ts +4 -4
  102. package/js/src/deribit.js +1 -0
  103. package/js/src/derive.d.ts +3 -3
  104. package/js/src/digifinex.d.ts +4 -4
  105. package/js/src/hitbtc.js +3 -0
  106. package/js/src/hollaex.js +1 -0
  107. package/js/src/htx.d.ts +4 -4
  108. package/js/src/htx.js +7 -3
  109. package/js/src/huobijp.js +1 -0
  110. package/js/src/hyperliquid.d.ts +1 -0
  111. package/js/src/hyperliquid.js +14 -4
  112. package/js/src/kraken.d.ts +3 -3
  113. package/js/src/kraken.js +2 -0
  114. package/js/src/krakenfutures.d.ts +2 -2
  115. package/js/src/kucoinfutures.d.ts +5 -5
  116. package/js/src/mexc.d.ts +1 -0
  117. package/js/src/mexc.js +50 -57
  118. package/js/src/okx.js +1 -1
  119. package/js/src/oxfun.d.ts +3 -3
  120. package/js/src/phemex.d.ts +3 -3
  121. package/js/src/phemex.js +2 -1
  122. package/js/src/poloniex.d.ts +3 -3
  123. package/js/src/poloniex.js +2 -1
  124. package/js/src/pro/apex.d.ts +160 -0
  125. package/js/src/pro/apex.js +1038 -0
  126. package/js/src/pro/binance.js +3 -3
  127. package/js/src/pro/coinbase.d.ts +4 -3
  128. package/js/src/pro/coinbase.js +45 -66
  129. package/js/src/pro/gate.js +27 -2
  130. package/js/src/pro/hollaex.js +2 -2
  131. package/js/src/pro/p2b.js +2 -2
  132. package/js/src/pro/tradeogre.d.ts +49 -0
  133. package/js/src/pro/tradeogre.js +278 -0
  134. package/js/src/pro/upbit.d.ts +16 -1
  135. package/js/src/pro/upbit.js +43 -0
  136. package/js/src/probit.js +1 -0
  137. package/js/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
  138. package/js/src/static_dependencies/zklink/zklink-sdk-web.js +4276 -0
  139. package/js/src/timex.js +2 -2
  140. package/js/src/tradeogre.js +2 -1
  141. package/js/src/upbit.d.ts +75 -23
  142. package/js/src/upbit.js +277 -67
  143. package/js/src/vertex.d.ts +3 -3
  144. package/js/src/whitebit.js +66 -12
  145. package/js/src/woo.d.ts +4 -4
  146. package/js/src/woo.js +3 -1
  147. package/js/src/woofipro.d.ts +4 -4
  148. package/js/src/xt.d.ts +4 -4
  149. package/js/src/xt.js +9 -0
  150. package/package.json +2 -2
  151. package/js/src/abstract/ace.d.ts +0 -18
  152. package/js/src/ace.d.ts +0 -158
  153. package/js/src/ace.js +0 -1175
  154. /package/js/src/abstract/{ace.js → apex.js} +0 -0
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/ascendex.js';
2
- import type { TransferEntry, FundingHistory, Int, OHLCV, Order, OrderSide, OrderType, OrderRequest, Str, Trade, Balances, Transaction, Ticker, OrderBook, Tickers, Strings, Num, Currency, Market, Leverage, Leverages, Account, MarginModes, MarginMode, MarginModification, Currencies, TradingFees, Dict, LeverageTier, LeverageTiers, int, FundingRate, FundingRates, DepositAddress } from './base/types.js';
2
+ import type { TransferEntry, FundingHistory, Int, OHLCV, Order, OrderSide, OrderType, OrderRequest, Str, Trade, Balances, Transaction, Ticker, OrderBook, Tickers, Strings, Num, Currency, Market, Leverage, Leverages, Account, MarginModes, MarginMode, MarginModification, Currencies, TradingFees, Dict, LeverageTier, LeverageTiers, int, FundingRate, FundingRates, DepositAddress, Position } from './base/types.js';
3
3
  /**
4
4
  * @class ascendex
5
5
  * @augments Exchange
@@ -277,8 +277,8 @@ export default class ascendex extends Exchange {
277
277
  * @param {object} [params] extra parameters specific to the exchange API endpoint
278
278
  * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
279
279
  */
280
- fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
281
- parsePosition(position: Dict, market?: Market): import("./base/types.js").Position;
280
+ fetchPositions(symbols?: Strings, params?: {}): Promise<Position[]>;
281
+ parsePosition(position: Dict, market?: Market): Position;
282
282
  parseFundingRate(contract: any, market?: Market): FundingRate;
283
283
  /**
284
284
  * @method
@@ -509,6 +509,7 @@ export default class ascendex extends Exchange {
509
509
  // "data":[
510
510
  // {
511
511
  // "assetCode":"BTT",
512
+ // "displayName": "BTT",
512
513
  // "borrowAssetCode":"BTT-B",
513
514
  // "interestAssetCode":"BTT-I",
514
515
  // "nativeScale":0,
@@ -529,12 +530,13 @@ export default class ascendex extends Exchange {
529
530
  // "data":[
530
531
  // {
531
532
  // "assetCode":"LTCBULL",
533
+ // "displayName": "LTCBULL",
532
534
  // "nativeScale":4,
533
535
  // "numConfirmations":20,
534
536
  // "withdrawFee":"0.2",
535
537
  // "minWithdrawalAmt":"1.0",
536
538
  // "statusCode":"Normal",
537
- // "statusMessage":""
539
+ // "statusMessage":"" // hideFromWalletTx
538
540
  // }
539
541
  // ]
540
542
  // }
@@ -556,8 +558,27 @@ export default class ascendex extends Exchange {
556
558
  const scale = this.safeString2(currency, 'precisionScale', 'nativeScale');
557
559
  const precision = this.parseNumber(this.parsePrecision(scale));
558
560
  const fee = this.safeNumber2(currency, 'withdrawFee', 'withdrawalFee');
559
- const status = this.safeString2(currency, 'status', 'statusCode');
561
+ const status = this.safeString(currency, 'status');
562
+ const statusCode = this.safeString(currency, 'statusCode');
560
563
  const active = (status === 'Normal');
564
+ let depositEnabled = undefined;
565
+ let withdrawEnabled = undefined;
566
+ if (status === 'Delisted' || statusCode === 'hideFromWalletTx') {
567
+ depositEnabled = false;
568
+ withdrawEnabled = false;
569
+ }
570
+ else if (status === 'Normal') {
571
+ depositEnabled = true;
572
+ withdrawEnabled = true;
573
+ }
574
+ else if (status === 'NoTransaction' || statusCode === 'NoTransaction') {
575
+ depositEnabled = true;
576
+ withdrawEnabled = false;
577
+ }
578
+ else if (status === 'NoDeposit') {
579
+ depositEnabled = false;
580
+ withdrawEnabled = true;
581
+ }
561
582
  const marginInside = ('borrowAssetCode' in currency);
562
583
  result[code] = {
563
584
  'id': id,
@@ -567,8 +588,8 @@ export default class ascendex extends Exchange {
567
588
  'margin': marginInside,
568
589
  'name': this.safeString(currency, 'assetName'),
569
590
  'active': active,
570
- 'deposit': undefined,
571
- 'withdraw': undefined,
591
+ 'deposit': depositEnabled,
592
+ 'withdraw': withdrawEnabled,
572
593
  'fee': fee,
573
594
  'precision': precision,
574
595
  'limits': {
@@ -377,6 +377,8 @@ export default class Exchange {
377
377
  };
378
378
  starknetEncodeStructuredData(domain: any, messageTypes: any, messageData: any, address: any): string;
379
379
  starknetSign(hash: any, pri: any): string;
380
+ getZKContractSignatureObj(seed: any, params?: {}): Promise<any>;
381
+ getZKTransferSignatureObj(seed: any, params?: {}): Promise<any>;
380
382
  intToBase16(elem: any): string;
381
383
  extendExchangeOptions(newOptions: Dict): void;
382
384
  createSafeDictionary(): {};
@@ -19,7 +19,9 @@ import ethers from '../static_dependencies/ethers/index.js';
19
19
  import { TypedDataEncoder } from '../static_dependencies/ethers/hash/index.js';
20
20
  import { SecureRandom } from "../static_dependencies/jsencrypt/lib/jsbn/rng.js";
21
21
  import { getStarkKey, ethSigToPrivate, sign as starknetCurveSign } from '../static_dependencies/scure-starknet/index.js';
22
+ import init, * as zklink from '../static_dependencies/zklink/zklink-sdk-web.js';
22
23
  import * as Starknet from '../static_dependencies/starknet/index.js';
24
+ import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
23
25
  // ----------------------------------------------------------------------------
24
26
  /**
25
27
  * @class Exchange
@@ -1194,6 +1196,45 @@ export default class Exchange {
1194
1196
  const signature = starknetCurveSign(hash.replace('0x', ''), pri.slice(-64));
1195
1197
  return this.json([signature.r.toString(), signature.s.toString()]);
1196
1198
  }
1199
+ async getZKContractSignatureObj(seed, params = {}) {
1200
+ const formattedSlotId = BigInt('0x' + this.remove0xPrefix(this.hash(this.encode(this.safeString(params, 'slotId')), sha256, 'hex'))).toString();
1201
+ const formattedNonce = BigInt('0x' + this.remove0xPrefix(this.hash(this.encode(this.safeString(params, 'nonce')), sha256, 'hex'))).toString();
1202
+ const formattedUint64 = '18446744073709551615';
1203
+ const formattedUint32 = '4294967295';
1204
+ const accountId = parseInt(Precise.stringMod(this.safeString(params, 'accountId'), formattedUint32), 10);
1205
+ const slotId = parseInt(Precise.stringDiv(Precise.stringMod(formattedSlotId, formattedUint64), formattedUint32), 10);
1206
+ const nonce = parseInt(Precise.stringMod(formattedNonce, formattedUint32), 10);
1207
+ await init();
1208
+ const _signer = zklink.newRpcSignerWithProvider({});
1209
+ await _signer.initZklinkSigner(seed);
1210
+ let tx_builder = new zklink.ContractBuilder(accountId, 0, slotId, nonce, this.safeInteger(params, 'pairId'), Precise.stringMul(this.safeString(params, 'size'), '1e18'), Precise.stringMul(this.safeString(params, 'price'), '1e18'), this.safeString(params, 'direction') === 'BUY', parseInt(Precise.stringMul(this.safeString(params, 'makerFeeRate'), '10000')), parseInt(Precise.stringMul(this.safeString(params, 'takerFeeRate'), '10000')), false);
1211
+ let contractor = zklink.newContract(tx_builder);
1212
+ //const signer = ZkLinkSigner.ethSig(seed);
1213
+ //const signer = new Signer(seed);
1214
+ contractor?.sign(_signer?.getZkLinkSigner());
1215
+ const tx = contractor.jsValue();
1216
+ const zkSign = tx?.signature?.signature;
1217
+ return zkSign;
1218
+ }
1219
+ async getZKTransferSignatureObj(seed, params = {}) {
1220
+ await init();
1221
+ const _signer = zklink.newRpcSignerWithProvider({});
1222
+ await _signer.initZklinkSigner(seed);
1223
+ let nonce = this.safeString(params, 'nonce', '0');
1224
+ if (this.safeBool(params, 'isContract') === true) {
1225
+ const formattedUint32 = '4294967295';
1226
+ const formattedNonce = BigInt('0x' + this.remove0xPrefix(this.hash(this.encode(nonce), sha256, 'hex'))).toString();
1227
+ nonce = Precise.stringMod(formattedNonce, formattedUint32);
1228
+ }
1229
+ let tx_builder = new zklink.TransferBuilder(this.safeNumber(params, 'zkAccountId', 0), this.safeString(params, 'receiverAddress'), this.safeNumber(params, 'subAccountId', 0), this.safeNumber(params, 'receiverSubAccountId', 0), this.safeNumber(params, 'tokenId', 0), this.safeString(params, 'fee', '0'), this.safeString(params, 'amount', '0'), this.parseToInt(nonce), this.safeNumber(params, 'timestampSeconds', 0));
1230
+ let contractor = zklink.newTransfer(tx_builder);
1231
+ //const signer = ZkLinkSigner.ethSig(seed);
1232
+ //const signer = new Signer(seed);
1233
+ contractor?.sign(_signer?.getZkLinkSigner());
1234
+ const tx = contractor.jsValue();
1235
+ const zkSign = tx?.signature?.signature;
1236
+ return zkSign;
1237
+ }
1197
1238
  intToBase16(elem) {
1198
1239
  return elem.toString(16);
1199
1240
  }
@@ -2546,7 +2587,7 @@ export default class Exchange {
2546
2587
  // find lowest precision (which is more desired)
2547
2588
  const precision = this.safeString(network, 'precision');
2548
2589
  const precisionMain = this.safeString(currency, 'precision');
2549
- if (precisionMain === undefined || Precise.stringLt(precision, precisionMain)) {
2590
+ if (precisionMain === undefined || Precise.stringGt(precision, precisionMain)) {
2550
2591
  currency['precision'] = this.parseNumber(precision);
2551
2592
  }
2552
2593
  // limits
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/binance.js';
2
- import type { TransferEntry, Int, OrderSide, Balances, OrderType, Trade, OHLCV, Order, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, Str, Transaction, Ticker, OrderBook, Tickers, Market, Greeks, Strings, Currency, MarketInterface, MarginMode, MarginModes, Leverage, Leverages, Num, Option, MarginModification, TradingFeeInterface, Currencies, TradingFees, Conversion, CrossBorrowRate, IsolatedBorrowRates, IsolatedBorrowRate, Dict, LeverageTier, LeverageTiers, int, LedgerEntry, FundingRate, FundingRates, DepositAddress, LongShortRatio, BorrowInterest } from './base/types.js';
2
+ import type { TransferEntry, Int, OrderSide, Balances, OrderType, Trade, OHLCV, Order, FundingRateHistory, OpenInterest, Liquidation, OrderRequest, Str, Transaction, Ticker, OrderBook, Tickers, Market, Greeks, Strings, Currency, MarketInterface, MarginMode, MarginModes, Leverage, Leverages, Num, Option, MarginModification, TradingFeeInterface, Currencies, TradingFees, Conversion, CrossBorrowRate, IsolatedBorrowRates, IsolatedBorrowRate, Dict, LeverageTier, LeverageTiers, int, LedgerEntry, FundingRate, FundingRates, DepositAddress, LongShortRatio, BorrowInterest, Position } from './base/types.js';
3
3
  /**
4
4
  * @class binance
5
5
  * @augments Exchange
@@ -985,7 +985,7 @@ export default class binance extends Exchange {
985
985
  * @param {object} [params] extra parameters specific to the exchange API endpoint
986
986
  * @returns {object} a [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
987
987
  */
988
- fetchPosition(symbol: string, params?: {}): Promise<import("./base/types.js").Position>;
988
+ fetchPosition(symbol: string, params?: {}): Promise<Position>;
989
989
  /**
990
990
  * @method
991
991
  * @name binance#fetchOptionPositions
@@ -995,8 +995,8 @@ export default class binance extends Exchange {
995
995
  * @param {object} [params] extra parameters specific to the exchange API endpoint
996
996
  * @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
997
997
  */
998
- fetchOptionPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
999
- parsePosition(position: Dict, market?: Market): import("./base/types.js").Position;
998
+ fetchOptionPositions(symbols?: Strings, params?: {}): Promise<Position[]>;
999
+ parsePosition(position: Dict, market?: Market): Position;
1000
1000
  /**
1001
1001
  * @method
1002
1002
  * @name binance#fetchPositions
@@ -1013,7 +1013,7 @@ export default class binance extends Exchange {
1013
1013
  * @param {bool} [params.useV2] set to true if you want to use the obsolete endpoint, where some more additional fields were provided
1014
1014
  * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
1015
1015
  */
1016
- fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
1016
+ fetchPositions(symbols?: Strings, params?: {}): Promise<Position[]>;
1017
1017
  /**
1018
1018
  * @method
1019
1019
  * @name binance#fetchAccountPositions
@@ -1032,7 +1032,7 @@ export default class binance extends Exchange {
1032
1032
  * @param {boolean} [params.useV2] set to true if you want to use obsolete endpoint, where some more additional fields were provided
1033
1033
  * @returns {object} data on account positions
1034
1034
  */
1035
- fetchAccountPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
1035
+ fetchAccountPositions(symbols?: Strings, params?: {}): Promise<Position[]>;
1036
1036
  /**
1037
1037
  * @method
1038
1038
  * @name binance#fetchPositionsRisk
@@ -1050,7 +1050,7 @@ export default class binance extends Exchange {
1050
1050
  * @param {bool} [params.useV2] set to true if you want to use the obsolete endpoint, where some more additional fields were provided
1051
1051
  * @returns {object} data on the positions risk
1052
1052
  */
1053
- fetchPositionsRisk(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
1053
+ fetchPositionsRisk(symbols?: Strings, params?: {}): Promise<Position[]>;
1054
1054
  /**
1055
1055
  * @method
1056
1056
  * @name binance#fetchFundingHistory
package/js/src/binance.js CHANGED
@@ -17,7 +17,7 @@ export default class binance extends Exchange {
17
17
  return this.deepExtend(super.describe(), {
18
18
  'id': 'binance',
19
19
  'name': 'Binance',
20
- 'countries': ['JP', 'MT'],
20
+ 'countries': [],
21
21
  'rateLimit': 50,
22
22
  'certified': true,
23
23
  'pro': true,
@@ -1267,6 +1267,7 @@ export default class binance extends Exchange {
1267
1267
  'inverse', // allows CORS in browsers
1268
1268
  // 'option', // does not allow CORS, enable outside of the browser only
1269
1269
  ],
1270
+ 'loadAllOptions': false,
1270
1271
  'fetchCurrencies': true,
1271
1272
  // 'fetchTradesMethod': 'publicGetAggTrades', // publicGetTrades, publicGetHistoricalTrades, eapiPublicGetTrades
1272
1273
  // 'repayCrossMarginMethod': 'papiPostRepayLoan', // papiPostMarginRepayDebt
@@ -3033,6 +3034,13 @@ export default class binance extends Exchange {
3033
3034
  async fetchMarkets(params = {}) {
3034
3035
  const promisesRaw = [];
3035
3036
  const rawFetchMarkets = this.safeList(this.options, 'fetchMarkets', ['spot', 'linear', 'inverse']);
3037
+ // handle loadAllOptions option
3038
+ const loadAllOptions = this.safeBool(this.options, 'loadAllOptions', false);
3039
+ if (loadAllOptions) {
3040
+ if (!this.inArray('option', rawFetchMarkets)) {
3041
+ rawFetchMarkets.push('option');
3042
+ }
3043
+ }
3036
3044
  const sandboxMode = this.safeBool(this.options, 'sandboxMode', false);
3037
3045
  const fetchMarkets = [];
3038
3046
  for (let i = 0; i < rawFetchMarkets.length; i++) {
package/js/src/bingx.js CHANGED
@@ -706,7 +706,7 @@ export default class bingx extends Exchange {
706
706
  //
707
707
  // {
708
708
  // "code": 0,
709
- // "timestamp": 1702623271477,
709
+ // "timestamp": 1702623271476,
710
710
  // "data": [
711
711
  // {
712
712
  // "coin": "BTC",
@@ -792,7 +792,7 @@ export default class bingx extends Exchange {
792
792
  };
793
793
  }
794
794
  const active = depositEnabled || withdrawEnabled;
795
- result[code] = {
795
+ result[code] = this.safeCurrencyStructure({
796
796
  'info': entry,
797
797
  'code': code,
798
798
  'id': currencyId,
@@ -804,7 +804,7 @@ export default class bingx extends Exchange {
804
804
  'networks': networks,
805
805
  'fee': fee,
806
806
  'limits': defaultLimits,
807
- };
807
+ });
808
808
  }
809
809
  return result;
810
810
  }
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/bitfinex.js';
2
- import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderBook, Str, Transaction, Ticker, Balances, Tickers, Strings, Currency, Market, OpenInterest, Liquidation, OrderRequest, Num, MarginModification, Currencies, TradingFees, Dict, LedgerEntry, FundingRate, FundingRates, DepositAddress, OpenInterests } from './base/types.js';
2
+ import type { TransferEntry, Int, OrderSide, OrderType, Trade, OHLCV, Order, FundingRateHistory, OrderBook, Str, Transaction, Ticker, Balances, Tickers, Strings, Currency, Market, OpenInterest, Liquidation, OrderRequest, Num, MarginModification, Currencies, TradingFees, Dict, LedgerEntry, FundingRate, FundingRates, DepositAddress, OpenInterests, Position } from './base/types.js';
3
3
  /**
4
4
  * @class bitfinex
5
5
  * @augments Exchange
@@ -346,8 +346,8 @@ export default class bitfinex extends Exchange {
346
346
  * @param {object} [params] extra parameters specific to the exchange API endpoint
347
347
  * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
348
348
  */
349
- fetchPositions(symbols?: Strings, params?: {}): Promise<import("./base/types.js").Position[]>;
350
- parsePosition(position: Dict, market?: Market): import("./base/types.js").Position;
349
+ fetchPositions(symbols?: Strings, params?: {}): Promise<Position[]>;
350
+ parsePosition(position: Dict, market?: Market): Position;
351
351
  nonce(): number;
352
352
  sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
353
353
  url: string;
@@ -1155,9 +1155,8 @@ export default class bitfinex extends Exchange {
1155
1155
  //
1156
1156
  // on trading pairs (ex. tBTCUSD)
1157
1157
  //
1158
- // {
1159
- // 'result': [
1160
- // SYMBOL,
1158
+ // [
1159
+ // SYMBOL, // this index is not present in singular-ticker
1161
1160
  // BID,
1162
1161
  // BID_SIZE,
1163
1162
  // ASK,
@@ -1168,15 +1167,13 @@ export default class bitfinex extends Exchange {
1168
1167
  // VOLUME,
1169
1168
  // HIGH,
1170
1169
  // LOW
1171
- // ]
1172
- // }
1170
+ // ]
1173
1171
  //
1174
1172
  //
1175
1173
  // on funding currencies (ex. fUSD)
1176
1174
  //
1177
- // {
1178
- // 'result': [
1179
- // SYMBOL,
1175
+ // [
1176
+ // SYMBOL, // this index is not present in singular-ticker
1180
1177
  // FRR,
1181
1178
  // BID,
1182
1179
  // BID_PERIOD,
@@ -1193,35 +1190,75 @@ export default class bitfinex extends Exchange {
1193
1190
  // _PLACEHOLDER,
1194
1191
  // _PLACEHOLDER,
1195
1192
  // FRR_AMOUNT_AVAILABLE
1196
- // ]
1197
- // }
1193
+ // ]
1198
1194
  //
1199
- const result = this.safeList(ticker, 'result');
1200
- const symbol = this.safeSymbol(undefined, market);
1201
- const length = result.length;
1202
- const last = this.safeString(result, length - 4);
1203
- const percentage = this.safeString(result, length - 5);
1195
+ const length = ticker.length;
1196
+ const isFetchTicker = (length === 10) || (length === 16);
1197
+ let symbol = undefined;
1198
+ let minusIndex = 0;
1199
+ let isFundingCurrency = false;
1200
+ if (isFetchTicker) {
1201
+ minusIndex = 1;
1202
+ isFundingCurrency = (length === 16);
1203
+ }
1204
+ else {
1205
+ const marketId = this.safeString(ticker, 0);
1206
+ market = this.safeMarket(marketId, market);
1207
+ isFundingCurrency = (length === 17);
1208
+ }
1209
+ symbol = this.safeSymbol(undefined, market);
1210
+ let last = undefined;
1211
+ let bid = undefined;
1212
+ let ask = undefined;
1213
+ let change = undefined;
1214
+ let percentage = undefined;
1215
+ let volume = undefined;
1216
+ let high = undefined;
1217
+ let low = undefined;
1218
+ if (isFundingCurrency) {
1219
+ // per api docs, they are different array type
1220
+ last = this.safeString(ticker, 10 - minusIndex);
1221
+ bid = this.safeString(ticker, 2 - minusIndex);
1222
+ ask = this.safeString(ticker, 5 - minusIndex);
1223
+ change = this.safeString(ticker, 8 - minusIndex);
1224
+ percentage = this.safeString(ticker, 9 - minusIndex);
1225
+ volume = this.safeString(ticker, 11 - minusIndex);
1226
+ high = this.safeString(ticker, 12 - minusIndex);
1227
+ low = this.safeString(ticker, 13 - minusIndex);
1228
+ }
1229
+ else {
1230
+ // on trading pairs (ex. tBTCUSD or tHMSTR:USD)
1231
+ last = this.safeString(ticker, 7 - minusIndex);
1232
+ bid = this.safeString(ticker, 1 - minusIndex);
1233
+ ask = this.safeString(ticker, 3 - minusIndex);
1234
+ change = this.safeString(ticker, 5 - minusIndex);
1235
+ percentage = this.safeString(ticker, 6 - minusIndex);
1236
+ percentage = Precise.stringMul(percentage, '100');
1237
+ volume = this.safeString(ticker, 8 - minusIndex);
1238
+ high = this.safeString(ticker, 9 - minusIndex);
1239
+ low = this.safeString(ticker, 10 - minusIndex);
1240
+ }
1204
1241
  return this.safeTicker({
1205
1242
  'symbol': symbol,
1206
1243
  'timestamp': undefined,
1207
1244
  'datetime': undefined,
1208
- 'high': this.safeString(result, length - 2),
1209
- 'low': this.safeString(result, length - 1),
1210
- 'bid': this.safeString(result, length - 10),
1211
- 'bidVolume': this.safeString(result, length - 9),
1212
- 'ask': this.safeString(result, length - 8),
1213
- 'askVolume': this.safeString(result, length - 7),
1245
+ 'high': high,
1246
+ 'low': low,
1247
+ 'bid': bid,
1248
+ 'bidVolume': undefined,
1249
+ 'ask': ask,
1250
+ 'askVolume': undefined,
1214
1251
  'vwap': undefined,
1215
1252
  'open': undefined,
1216
1253
  'close': last,
1217
1254
  'last': last,
1218
1255
  'previousClose': undefined,
1219
- 'change': this.safeString(result, length - 6),
1220
- 'percentage': Precise.stringMul(percentage, '100'),
1256
+ 'change': change,
1257
+ 'percentage': percentage,
1221
1258
  'average': undefined,
1222
- 'baseVolume': this.safeString(result, length - 3),
1259
+ 'baseVolume': volume,
1223
1260
  'quoteVolume': undefined,
1224
- 'info': result,
1261
+ 'info': ticker,
1225
1262
  }, market);
1226
1263
  }
1227
1264
  /**
@@ -1284,15 +1321,7 @@ export default class bitfinex extends Exchange {
1284
1321
  // ...
1285
1322
  // ]
1286
1323
  //
1287
- const result = {};
1288
- for (let i = 0; i < tickers.length; i++) {
1289
- const ticker = tickers[i];
1290
- const marketId = this.safeString(ticker, 0);
1291
- const market = this.safeMarket(marketId);
1292
- const symbol = market['symbol'];
1293
- result[symbol] = this.parseTicker({ 'result': ticker }, market);
1294
- }
1295
- return this.filterByArrayTickers(result, 'symbol', symbols);
1324
+ return this.parseTickers(tickers, symbols);
1296
1325
  }
1297
1326
  /**
1298
1327
  * @method
@@ -1310,8 +1339,7 @@ export default class bitfinex extends Exchange {
1310
1339
  'symbol': market['id'],
1311
1340
  };
1312
1341
  const ticker = await this.publicGetTickerSymbol(this.extend(request, params));
1313
- const result = { 'result': ticker };
1314
- return this.parseTicker(result, market);
1342
+ return this.parseTicker(ticker, market);
1315
1343
  }
1316
1344
  parseTrade(trade, market = undefined) {
1317
1345
  //
@@ -1,5 +1,5 @@
1
1
  import Exchange from './abstract/bitflyer.js';
2
- import type { Balances, Currency, Dict, FundingRate, Int, Market, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, TradingFeeInterface, Transaction, int } from './base/types.js';
2
+ import type { Balances, Currency, Dict, FundingRate, Int, Market, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, TradingFeeInterface, Transaction, Position, int } from './base/types.js';
3
3
  /**
4
4
  * @class bitflyer
5
5
  * @augments Exchange
@@ -167,7 +167,7 @@ export default class bitflyer extends Exchange {
167
167
  * @param {object} [params] extra parameters specific to the exchange API endpoint
168
168
  * @returns {object[]} a list of [position structure]{@link https://docs.ccxt.com/#/?id=position-structure}
169
169
  */
170
- fetchPositions(symbols?: Strings, params?: {}): Promise<any>;
170
+ fetchPositions(symbols?: Strings, params?: {}): Promise<Position[]>;
171
171
  /**
172
172
  * @method
173
173
  * @name bitflyer#withdraw
@@ -588,8 +588,10 @@ export default class bitget extends Exchange {
588
588
  * @name bitget#fetchFundingRate
589
589
  * @description fetch the current funding rate
590
590
  * @see https://www.bitget.com/api-doc/contract/market/Get-Current-Funding-Rate
591
+ * @see https://www.bitget.com/api-doc/contract/market/Get-Symbol-Next-Funding-Time
591
592
  * @param {string} symbol unified market symbol
592
593
  * @param {object} [params] extra parameters specific to the exchange API endpoint
594
+ * @param {string} [params.method] either (default) 'publicMixGetV2MixMarketCurrentFundRate' or 'publicMixGetV2MixMarketFundingTime'
593
595
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
594
596
  */
595
597
  fetchFundingRate(symbol: string, params?: {}): Promise<FundingRate>;