ccxt 4.5.55 → 4.5.56

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 (177) hide show
  1. package/README.md +209 -5
  2. package/dist/ccxt.browser.min.js +3 -3
  3. package/dist/cjs/ccxt.js +1 -1
  4. package/dist/cjs/src/aftermath.js +10 -5
  5. package/dist/cjs/src/alpaca.js +2 -2
  6. package/dist/cjs/src/apex.js +25 -16
  7. package/dist/cjs/src/arkham.js +7 -4
  8. package/dist/cjs/src/ascendex.js +6 -3
  9. package/dist/cjs/src/base/Exchange.js +3 -3
  10. package/dist/cjs/src/bigone.js +7 -4
  11. package/dist/cjs/src/binance.js +4 -4
  12. package/dist/cjs/src/bingx.js +4 -4
  13. package/dist/cjs/src/bitflyer.js +2 -1
  14. package/dist/cjs/src/bitget.js +14 -3
  15. package/dist/cjs/src/bitmart.js +5 -4
  16. package/dist/cjs/src/bitmex.js +7 -4
  17. package/dist/cjs/src/bitopro.js +1 -1
  18. package/dist/cjs/src/bitrue.js +2 -1
  19. package/dist/cjs/src/bitso.js +6 -3
  20. package/dist/cjs/src/bitstamp.js +5 -3
  21. package/dist/cjs/src/bittrade.js +2 -1
  22. package/dist/cjs/src/blofin.js +2 -1
  23. package/dist/cjs/src/bybit.js +19 -17
  24. package/dist/cjs/src/bybiteu.js +1 -0
  25. package/dist/cjs/src/coinbaseexchange.js +2 -1
  26. package/dist/cjs/src/coinbaseinternational.js +15 -9
  27. package/dist/cjs/src/coinex.js +5 -3
  28. package/dist/cjs/src/coinsph.js +4 -4
  29. package/dist/cjs/src/cryptocom.js +6 -6
  30. package/dist/cjs/src/deepcoin.js +6 -3
  31. package/dist/cjs/src/delta.js +2 -1
  32. package/dist/cjs/src/deribit.js +4 -2
  33. package/dist/cjs/src/derive.js +5 -3
  34. package/dist/cjs/src/digifinex.js +2 -1
  35. package/dist/cjs/src/exmo.js +12 -39
  36. package/dist/cjs/src/foxbit.js +1 -1
  37. package/dist/cjs/src/gemini.js +4 -2
  38. package/dist/cjs/src/grvt.js +13 -7
  39. package/dist/cjs/src/hashkey.js +4 -4
  40. package/dist/cjs/src/hibachi.js +1 -1
  41. package/dist/cjs/src/hitbtc.js +2 -1
  42. package/dist/cjs/src/htx.js +9 -5
  43. package/dist/cjs/src/hyperliquid.js +19 -13
  44. package/dist/cjs/src/indodax.js +2 -1
  45. package/dist/cjs/src/kraken.js +14 -13
  46. package/dist/cjs/src/krakenfutures.js +2 -1
  47. package/dist/cjs/src/lbank.js +8 -4
  48. package/dist/cjs/src/lighter.js +1 -1
  49. package/dist/cjs/src/luno.js +1 -1
  50. package/dist/cjs/src/mercado.js +2 -1
  51. package/dist/cjs/src/mexc.js +24 -14
  52. package/dist/cjs/src/modetrade.js +1 -1
  53. package/dist/cjs/src/okx.js +6 -3
  54. package/dist/cjs/src/oxfun.js +5 -3
  55. package/dist/cjs/src/p2b.js +8 -4
  56. package/dist/cjs/src/paradex.js +3 -2
  57. package/dist/cjs/src/phemex.js +4 -2
  58. package/dist/cjs/src/poloniex.js +2 -1
  59. package/dist/cjs/src/pro/apex.js +10 -1
  60. package/dist/cjs/src/pro/aster.js +10 -9
  61. package/dist/cjs/src/pro/binance.js +3 -3
  62. package/dist/cjs/src/pro/bingx.js +7 -2
  63. package/dist/cjs/src/pro/bitmart.js +10 -0
  64. package/dist/cjs/src/pro/bitmex.js +1 -1
  65. package/dist/cjs/src/pro/grvt.js +8 -0
  66. package/dist/cjs/src/pro/htx.js +4 -4
  67. package/dist/cjs/src/pro/krakenfutures.js +16 -4
  68. package/dist/cjs/src/pro/modetrade.js +3 -3
  69. package/dist/cjs/src/pro/okx.js +4 -4
  70. package/dist/cjs/src/pro/oxfun.js +4 -4
  71. package/dist/cjs/src/pro/woo.js +4 -4
  72. package/dist/cjs/src/pro/woofipro.js +3 -3
  73. package/dist/cjs/src/pro/xt.js +1 -1
  74. package/dist/cjs/src/toobit.js +1 -1
  75. package/dist/cjs/src/woo.js +1 -1
  76. package/dist/cjs/src/woofipro.js +1 -1
  77. package/dist/cjs/src/xt.js +2 -1
  78. package/dist/cjs/src/yobit.js +4 -2
  79. package/dist/cjs/src/zebpay.js +3 -3
  80. package/js/ccxt.d.ts +1 -1
  81. package/js/ccxt.js +1 -1
  82. package/js/src/abstract/mexc.d.ts +1 -0
  83. package/js/src/aftermath.js +10 -5
  84. package/js/src/alpaca.js +2 -2
  85. package/js/src/apex.d.ts +1 -1
  86. package/js/src/apex.js +25 -16
  87. package/js/src/arkham.js +7 -4
  88. package/js/src/ascendex.js +6 -3
  89. package/js/src/base/Exchange.js +3 -3
  90. package/js/src/bigone.js +7 -4
  91. package/js/src/binance.js +4 -4
  92. package/js/src/bingx.js +4 -4
  93. package/js/src/bitflyer.js +2 -1
  94. package/js/src/bitget.js +14 -3
  95. package/js/src/bitmart.js +5 -4
  96. package/js/src/bitmex.js +7 -4
  97. package/js/src/bitopro.js +1 -1
  98. package/js/src/bitrue.js +2 -1
  99. package/js/src/bitso.js +6 -3
  100. package/js/src/bitstamp.js +5 -3
  101. package/js/src/bittrade.js +2 -1
  102. package/js/src/blofin.js +2 -1
  103. package/js/src/bybit.d.ts +1 -1
  104. package/js/src/bybit.js +19 -17
  105. package/js/src/bybiteu.js +1 -0
  106. package/js/src/coinbaseexchange.js +2 -1
  107. package/js/src/coinbaseinternational.d.ts +1 -1
  108. package/js/src/coinbaseinternational.js +15 -9
  109. package/js/src/coinex.d.ts +1 -1
  110. package/js/src/coinex.js +5 -3
  111. package/js/src/coinsph.js +4 -4
  112. package/js/src/cryptocom.js +6 -6
  113. package/js/src/deepcoin.js +6 -3
  114. package/js/src/delta.js +2 -1
  115. package/js/src/deribit.js +4 -2
  116. package/js/src/derive.js +5 -3
  117. package/js/src/digifinex.js +2 -1
  118. package/js/src/exmo.js +12 -39
  119. package/js/src/foxbit.js +1 -1
  120. package/js/src/gemini.js +4 -2
  121. package/js/src/grvt.d.ts +1 -1
  122. package/js/src/grvt.js +13 -7
  123. package/js/src/hashkey.js +4 -4
  124. package/js/src/hibachi.d.ts +1 -1
  125. package/js/src/hibachi.js +1 -1
  126. package/js/src/hitbtc.js +2 -1
  127. package/js/src/htx.js +9 -5
  128. package/js/src/hyperliquid.d.ts +4 -4
  129. package/js/src/hyperliquid.js +19 -13
  130. package/js/src/indodax.js +2 -1
  131. package/js/src/kraken.js +14 -13
  132. package/js/src/krakenfutures.js +2 -1
  133. package/js/src/lbank.js +8 -4
  134. package/js/src/lighter.d.ts +1 -1
  135. package/js/src/lighter.js +1 -1
  136. package/js/src/luno.js +1 -1
  137. package/js/src/mercado.js +2 -1
  138. package/js/src/mexc.d.ts +2 -2
  139. package/js/src/mexc.js +24 -14
  140. package/js/src/modetrade.js +1 -1
  141. package/js/src/okx.js +6 -3
  142. package/js/src/oxfun.js +5 -3
  143. package/js/src/p2b.js +8 -4
  144. package/js/src/paradex.js +3 -2
  145. package/js/src/phemex.js +4 -2
  146. package/js/src/poloniex.js +2 -1
  147. package/js/src/pro/apex.js +10 -1
  148. package/js/src/pro/aster.js +10 -9
  149. package/js/src/pro/binance.d.ts +1 -1
  150. package/js/src/pro/binance.js +3 -3
  151. package/js/src/pro/bingx.js +7 -2
  152. package/js/src/pro/bitmart.js +10 -0
  153. package/js/src/pro/bitmex.js +1 -1
  154. package/js/src/pro/grvt.js +8 -0
  155. package/js/src/pro/htx.d.ts +4 -4
  156. package/js/src/pro/htx.js +4 -4
  157. package/js/src/pro/krakenfutures.d.ts +4 -4
  158. package/js/src/pro/krakenfutures.js +16 -4
  159. package/js/src/pro/modetrade.d.ts +3 -3
  160. package/js/src/pro/modetrade.js +3 -3
  161. package/js/src/pro/okx.d.ts +4 -4
  162. package/js/src/pro/okx.js +4 -4
  163. package/js/src/pro/oxfun.d.ts +4 -4
  164. package/js/src/pro/oxfun.js +4 -4
  165. package/js/src/pro/woo.d.ts +4 -4
  166. package/js/src/pro/woo.js +4 -4
  167. package/js/src/pro/woofipro.d.ts +3 -3
  168. package/js/src/pro/woofipro.js +3 -3
  169. package/js/src/pro/xt.js +1 -1
  170. package/js/src/toobit.d.ts +1 -1
  171. package/js/src/toobit.js +1 -1
  172. package/js/src/woo.js +1 -1
  173. package/js/src/woofipro.js +1 -1
  174. package/js/src/xt.js +2 -1
  175. package/js/src/yobit.js +4 -2
  176. package/js/src/zebpay.js +3 -3
  177. package/package.json +21 -7
package/js/src/apex.js CHANGED
@@ -1209,7 +1209,7 @@ export default class apex extends Exchange {
1209
1209
  'IMMEDIATE_OR_CANCEL': 'IMMEDIATE_OR_CANCEL',
1210
1210
  'POST_ONLY': 'POST_ONLY',
1211
1211
  };
1212
- return this.safeString(timeInForces, timeInForce, undefined);
1212
+ return this.safeString(timeInForces, timeInForce);
1213
1213
  }
1214
1214
  parseOrderStatus(status) {
1215
1215
  if (status !== undefined) {
@@ -1357,14 +1357,16 @@ export default class apex extends Exchange {
1357
1357
  if (clientOrderId === undefined) {
1358
1358
  clientOrderId = this.generateRandomClientIdOmni(accountId);
1359
1359
  }
1360
+ const finalClientOrderId = clientOrderId; // java req
1360
1361
  params = this.omit(params, ['clientId', 'clientOrderId', 'client_order_id', 'stopLossPrice', 'takeProfitPrice', 'triggerPrice']);
1362
+ const finalOrderPrice = orderPrice; // java req
1361
1363
  const orderToSign = {
1362
1364
  'accountId': accountId,
1363
- 'slotId': clientOrderId,
1364
- 'nonce': clientOrderId,
1365
+ 'slotId': finalClientOrderId,
1366
+ 'nonce': finalClientOrderId,
1365
1367
  'pairId': market['quoteId'],
1366
1368
  'size': orderSize,
1367
- 'price': orderPrice,
1369
+ 'price': finalOrderPrice,
1368
1370
  'direction': orderSide,
1369
1371
  'makerFeeRate': maker,
1370
1372
  'takerFeeRate': taker,
@@ -1378,11 +1380,11 @@ export default class apex extends Exchange {
1378
1380
  'side': orderSide,
1379
1381
  'type': orderType,
1380
1382
  'size': orderSize,
1381
- 'price': orderPrice,
1383
+ 'price': finalOrderPrice,
1382
1384
  'limitFee': limitFee,
1383
1385
  'expiration': Math.floor(timeNow / 1000 + 30 * 24 * 60 * 60),
1384
1386
  'timeInForce': timeInForce,
1385
- 'clientId': clientOrderId,
1387
+ 'clientId': finalClientOrderId,
1386
1388
  'brokerId': this.safeString(this.options, 'brokerId', '6956'),
1387
1389
  };
1388
1390
  if (triggerPrice !== undefined) {
@@ -1428,6 +1430,7 @@ export default class apex extends Exchange {
1428
1430
  if (subAccounts.length > 0) {
1429
1431
  nonce = this.safeString(subAccounts[0], 'nonce', '0');
1430
1432
  }
1433
+ const finalNonce = nonce; // java req
1431
1434
  const ethAddress = this.safeString(accountData, 'ethereumAddress', '');
1432
1435
  const accountId = this.safeString(accountData, 'id', '');
1433
1436
  let currency = {};
@@ -1444,12 +1447,15 @@ export default class apex extends Exchange {
1444
1447
  }
1445
1448
  }
1446
1449
  const tokenId = this.safeString(currency, 'tokenId', '');
1447
- const amountNumber = this.parseToInt(amount * (Math.pow(10, this.safeNumber(currency, 'decimals', 0))));
1450
+ const decimalsNum = this.safeNumber(currency, 'decimals', 0);
1451
+ const mathPowResult = (Math.pow(10, decimalsNum));
1452
+ const amountNumber = this.parseToInt(amount * mathPowResult);
1448
1453
  const timestampSeconds = this.parseToInt(this.milliseconds() / 1000);
1449
1454
  let clientOrderId = this.safeStringN(params, ['clientId', 'clientOrderId', 'client_order_id']);
1450
1455
  if (clientOrderId === undefined) {
1451
1456
  clientOrderId = this.generateRandomClientIdOmni(this.safeString(this.options, 'accountId'));
1452
1457
  }
1458
+ const finalClientOrderId = clientOrderId; // java req
1453
1459
  params = this.omit(params, ['clientId', 'clientOrderId', 'client_order_id']);
1454
1460
  if (fromAccount !== undefined && fromAccount.toLowerCase() === 'contract') {
1455
1461
  const formattedUint32 = '4294967295';
@@ -1463,7 +1469,7 @@ export default class apex extends Exchange {
1463
1469
  'tokenId': tokenId,
1464
1470
  'amount': amountNumber.toString(),
1465
1471
  'fee': '0',
1466
- 'nonce': clientOrderId,
1472
+ 'nonce': finalClientOrderId,
1467
1473
  'timestampSeconds': expireTime,
1468
1474
  'isContract': true,
1469
1475
  };
@@ -1471,7 +1477,7 @@ export default class apex extends Exchange {
1471
1477
  const request = {
1472
1478
  'amount': amount,
1473
1479
  'expireTime': expireTime,
1474
- 'clientWithdrawId': clientOrderId,
1480
+ 'clientWithdrawId': finalClientOrderId,
1475
1481
  'signature': signature,
1476
1482
  'token': code,
1477
1483
  'ethAddress': ethAddress,
@@ -1479,10 +1485,11 @@ export default class apex extends Exchange {
1479
1485
  const response = await this.privatePostV3ContractTransferOut(this.extend(request, params));
1480
1486
  const data = this.safeDict(response, 'data', {});
1481
1487
  const currentTime = this.milliseconds();
1488
+ const parsedAmount = this.parseNumber(amount);
1482
1489
  return this.extend(this.parseTransfer(data, this.currency(code)), {
1483
1490
  'timestamp': currentTime,
1484
1491
  'datetime': this.iso8601(currentTime),
1485
- 'amount': this.parseNumber(amount),
1492
+ 'amount': parsedAmount,
1486
1493
  'fromAccount': 'contract',
1487
1494
  'toAccount': 'spot',
1488
1495
  });
@@ -1496,14 +1503,16 @@ export default class apex extends Exchange {
1496
1503
  'tokenId': tokenId,
1497
1504
  'amount': amountNumber.toString(),
1498
1505
  'fee': '0',
1499
- 'nonce': nonce,
1506
+ 'nonce': finalNonce,
1500
1507
  'timestampSeconds': timestampSeconds,
1501
1508
  };
1502
1509
  const signature = await this.getZKTransferSignatureObj(this.remove0xPrefix(this.getSeeds()), orderToSign);
1510
+ const amountStr = amount.toString();
1511
+ const ts = timestampSeconds; // java req
1503
1512
  const request = {
1504
- 'amount': amount.toString(),
1505
- 'timestamp': timestampSeconds,
1506
- 'clientTransferId': clientOrderId,
1513
+ 'amount': amountStr,
1514
+ 'timestamp': ts,
1515
+ 'clientTransferId': finalClientOrderId,
1507
1516
  'signature': signature,
1508
1517
  'zkAccountId': zkAccountId,
1509
1518
  'subAccountId': subAccountId,
@@ -1514,7 +1523,7 @@ export default class apex extends Exchange {
1514
1523
  'receiverZkAccountId': receiverZkAccountId,
1515
1524
  'receiverSubAccountId': receiverSubAccountId,
1516
1525
  'receiverAddress': receiverAddress,
1517
- 'nonce': nonce,
1526
+ 'nonce': finalNonce,
1518
1527
  };
1519
1528
  const response = await this.privatePostV3TransferOut(this.extend(request, params));
1520
1529
  const data = this.safeDict(response, 'data', {});
@@ -1572,7 +1581,7 @@ export default class apex extends Exchange {
1572
1581
  * @description cancels an open order
1573
1582
  * @see https://api-docs.pro.apex.exchange/#privateapi-v3-for-omni-post-cancel-order
1574
1583
  * @param {string} id order id
1575
- * @param symbol
1584
+ * @param {string} [symbol] unified symbol of the market the order was made in
1576
1585
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1577
1586
  * @returns {object} An [order structure]{@link https://docs.ccxt.com/?id=order-structure}
1578
1587
  */
package/js/src/arkham.js CHANGED
@@ -1289,7 +1289,7 @@ export default class arkham extends Exchange {
1289
1289
  //
1290
1290
  // [] returns an empty array, even when successfully cancels orders
1291
1291
  //
1292
- return this.parseOrders(response, undefined);
1292
+ return this.parseOrders(response);
1293
1293
  }
1294
1294
  /**
1295
1295
  * @method
@@ -1828,7 +1828,8 @@ export default class arkham extends Exchange {
1828
1828
  // }
1829
1829
  //
1830
1830
  const data = this.safeList(response, 'addresses');
1831
- const parsed = this.parseDepositAddresses(data, undefined, false, { 'network': networkCode });
1831
+ const networkCodeUnified = networkCode; // java req
1832
+ const parsed = this.parseDepositAddresses(data, undefined, false, { 'network': networkCodeUnified });
1832
1833
  return this.indexBy(parsed, 'network');
1833
1834
  }
1834
1835
  parseDepositAddress(entry, currency = undefined) {
@@ -2386,11 +2387,13 @@ export default class arkham extends Exchange {
2386
2387
  const marketId = this.safeString(info, 'market');
2387
2388
  market = this.safeMarket(marketId, market, undefined, 'swap');
2388
2389
  const maxNotional = this.safeNumber(tier, 'positionLimit');
2390
+ const curr = market['linear'] ? market['base'] : market['quote'];
2391
+ const notional = minNotional;
2389
2392
  tiers.push({
2390
2393
  'tier': this.sum(i, 1),
2391
2394
  'symbol': this.safeSymbol(marketId, market, undefined, 'swap'),
2392
- 'currency': market['linear'] ? market['base'] : market['quote'],
2393
- 'minNotional': minNotional,
2395
+ 'currency': curr,
2396
+ 'minNotional': notional,
2394
2397
  'maxNotional': maxNotional,
2395
2398
  'maintenanceMarginRate': this.safeNumber(tier, 'marginRate'),
2396
2399
  'maxLeverage': this.safeInteger(tier, 'leverageRate'),
@@ -902,12 +902,14 @@ export default class ascendex extends Exchange {
902
902
  accountGroup = this.safeString(data, 'accountGroup');
903
903
  this.options['account-group'] = accountGroup;
904
904
  }
905
+ const finalResponse = response; // java req
906
+ const finalAccountGroup = accountGroup;
905
907
  return [
906
908
  {
907
- 'id': accountGroup,
909
+ 'id': finalAccountGroup,
908
910
  'type': undefined,
909
911
  'code': undefined,
910
- 'info': response,
912
+ 'info': finalResponse,
911
913
  },
912
914
  ];
913
915
  }
@@ -3041,8 +3043,9 @@ export default class ascendex extends Exchange {
3041
3043
  if (type === 'reduce') {
3042
3044
  amount = Precise.stringAbs(amount);
3043
3045
  }
3046
+ const parsedAmount = this.parseNumber(amount);
3044
3047
  return this.extend(this.parseMarginModification(response, market), {
3045
- 'amount': this.parseNumber(amount),
3048
+ 'amount': parsedAmount,
3046
3049
  'type': type,
3047
3050
  });
3048
3051
  }
@@ -2988,7 +2988,7 @@ export default class Exchange {
2988
2988
  }
2989
2989
  else {
2990
2990
  if (marketType === 'spot') {
2991
- this.features[marketType] = this.featuresMapper(initialFeatures, marketType, undefined);
2991
+ this.features[marketType] = this.featuresMapper(initialFeatures, marketType);
2992
2992
  }
2993
2993
  else {
2994
2994
  this.features[marketType] = {};
@@ -4870,7 +4870,7 @@ export default class Exchange {
4870
4870
  positions = this.toArray(positions);
4871
4871
  const result = [];
4872
4872
  for (let i = 0; i < positions.length; i++) {
4873
- const position = this.extend(this.parsePosition(positions[i], undefined), params);
4873
+ const position = this.extend(this.parsePosition(positions[i]), params);
4874
4874
  result.push(position);
4875
4875
  }
4876
4876
  return this.filterByArrayPositions(result, 'symbol', symbols, false);
@@ -4883,7 +4883,7 @@ export default class Exchange {
4883
4883
  ranks = this.toArray(ranks);
4884
4884
  const result = [];
4885
4885
  for (let i = 0; i < ranks.length; i++) {
4886
- const rank = this.extend(this.parseADLRank(ranks[i], undefined), params);
4886
+ const rank = this.extend(this.parseADLRank(ranks[i]), params);
4887
4887
  result.push(rank);
4888
4888
  }
4889
4889
  return this.filterByArrayPositions(result, 'symbol', symbols, false);
package/js/src/bigone.js CHANGED
@@ -1239,18 +1239,21 @@ export default class bigone extends Exchange {
1239
1239
  const makerFeeCost = this.safeString(trade, 'maker_fee');
1240
1240
  const takerFeeCost = this.safeString(trade, 'taker_fee');
1241
1241
  if (makerFeeCost !== undefined) {
1242
+ const makerCode = makerCurrencyCode;
1242
1243
  if (takerFeeCost !== undefined) {
1244
+ const takerCode = takerCurrencyCode;
1243
1245
  result['fees'] = [
1244
- { 'cost': makerFeeCost, 'currency': makerCurrencyCode },
1245
- { 'cost': takerFeeCost, 'currency': takerCurrencyCode },
1246
+ { 'cost': makerFeeCost, 'currency': makerCode },
1247
+ { 'cost': takerFeeCost, 'currency': takerCode },
1246
1248
  ];
1247
1249
  }
1248
1250
  else {
1249
- result['fee'] = { 'cost': makerFeeCost, 'currency': makerCurrencyCode };
1251
+ result['fee'] = { 'cost': makerFeeCost, 'currency': makerCode };
1250
1252
  }
1251
1253
  }
1252
1254
  else if (takerFeeCost !== undefined) {
1253
- result['fee'] = { 'cost': takerFeeCost, 'currency': takerCurrencyCode };
1255
+ const takerCode2 = takerCurrencyCode;
1256
+ result['fee'] = { 'cost': takerFeeCost, 'currency': takerCode2 };
1254
1257
  }
1255
1258
  else {
1256
1259
  result['fee'] = undefined;
package/js/src/binance.js CHANGED
@@ -6590,9 +6590,10 @@ export default class binance extends Exchange {
6590
6590
  const initialUppercaseType = type.toUpperCase();
6591
6591
  const isMarketOrder = initialUppercaseType === 'MARKET';
6592
6592
  const isLimitOrder = initialUppercaseType === 'LIMIT';
6593
+ const upperCaseSide = side.toUpperCase();
6593
6594
  const request = {
6594
6595
  'symbol': market['id'],
6595
- 'side': side.toUpperCase(),
6596
+ 'side': upperCaseSide,
6596
6597
  };
6597
6598
  let isPortfolioMargin = undefined;
6598
6599
  [isPortfolioMargin, params] = this.handleOptionAndParams2(params, 'createOrder', 'papi', 'portfolioMargin', false);
@@ -8090,10 +8091,9 @@ export default class binance extends Exchange {
8090
8091
  return this.parseOrders(response, market);
8091
8092
  }
8092
8093
  else {
8094
+ const order = this.safeOrder({ 'info': response });
8093
8095
  return [
8094
- this.safeOrder({
8095
- 'info': response,
8096
- }),
8096
+ order,
8097
8097
  ];
8098
8098
  }
8099
8099
  }
package/js/src/bingx.js CHANGED
@@ -1699,10 +1699,10 @@ export default class bingx extends Exchange {
1699
1699
  [subType, params] = this.handleSubTypeAndParams('fetchFundingRates', firstMarket, params, subType);
1700
1700
  let response = undefined;
1701
1701
  if (subType === 'inverse') {
1702
- response = await this.cswapV1PublicGetMarketPremiumIndex(this.extend(params));
1702
+ response = await this.cswapV1PublicGetMarketPremiumIndex(params);
1703
1703
  }
1704
1704
  else {
1705
- response = await this.swapV2PublicGetQuotePremiumIndex(this.extend(params));
1705
+ response = await this.swapV2PublicGetQuotePremiumIndex(params);
1706
1706
  }
1707
1707
  const data = this.safeList(response, 'data', []);
1708
1708
  return this.parseFundingRates(data, symbols);
@@ -5249,7 +5249,7 @@ export default class bingx extends Exchange {
5249
5249
  await this.loadMarkets();
5250
5250
  const currency = this.currency(code);
5251
5251
  const defaultRecvWindow = this.safeInteger(this.options, 'recvWindow');
5252
- const recvWindow = this.safeInteger(this.parseParams, 'recvWindow', defaultRecvWindow);
5252
+ const recvWindow = this.safeInteger(params, 'recvWindow', defaultRecvWindow);
5253
5253
  const request = {
5254
5254
  'coin': currency['id'],
5255
5255
  'offset': 0,
@@ -6320,7 +6320,7 @@ export default class bingx extends Exchange {
6320
6320
  async closeAllPositions(params = {}) {
6321
6321
  await this.loadMarkets();
6322
6322
  const defaultRecvWindow = this.safeInteger(this.options, 'recvWindow');
6323
- const recvWindow = this.safeInteger(this.parseParams, 'recvWindow', defaultRecvWindow);
6323
+ const recvWindow = this.safeInteger(params, 'recvWindow', defaultRecvWindow);
6324
6324
  let marketType = undefined;
6325
6325
  [marketType, params] = this.handleMarketTypeAndParams('closeAllPositions', undefined, params);
6326
6326
  let subType = undefined;
@@ -1191,7 +1191,8 @@ export default class bitflyer extends Exchange {
1191
1191
  if (api === 'private') {
1192
1192
  this.checkRequiredCredentials();
1193
1193
  const nonce = this.nonce().toString();
1194
- let auth = [nonce, method, request].join('');
1194
+ const content = [nonce, method, request];
1195
+ let auth = content.join('');
1195
1196
  if (Object.keys(params).length) {
1196
1197
  if (method !== 'GET') {
1197
1198
  body = this.json(params);
package/js/src/bitget.js CHANGED
@@ -1960,9 +1960,7 @@ export default class bitget extends Exchange {
1960
1960
  if (uta) {
1961
1961
  return await this.fetchUtaMarkets(params);
1962
1962
  }
1963
- else {
1964
- return await this.fetchDefaultMarkets(params);
1965
- }
1963
+ return await this.fetchDefaultMarkets(params);
1966
1964
  }
1967
1965
  async fetchDefaultMarkets(params) {
1968
1966
  let types = undefined;
@@ -5363,6 +5361,13 @@ export default class bitget extends Exchange {
5363
5361
  const trailingTriggerPrice = this.safeString(params, 'trailingTriggerPrice', this.numberToString(price));
5364
5362
  const trailingPercent = this.safeString2(params, 'trailingPercent', 'callbackRatio');
5365
5363
  const isTrailingPercentOrder = trailingPercent !== undefined;
5364
+ // const multipleTriggers = (isTriggerOrder && (isStopLossTriggerOrder || isTakeProfitTriggerOrder || isTrailingPercentOrder))
5365
+ // || (isStopLossTriggerOrder && (isTakeProfitTriggerOrder || isTrailingPercentOrder))
5366
+ // || (isTakeProfitTriggerOrder && isTrailingPercentOrder);
5367
+ // if (multipleTriggers) {
5368
+ // throw new ExchangeError (this.id + ' createOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent');
5369
+ // }
5370
+ //
5366
5371
  if (this.sum(isTriggerOrder, isStopLossTriggerOrder, isTakeProfitTriggerOrder, isTrailingPercentOrder) > 1) {
5367
5372
  throw new ExchangeError(this.id + ' createOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent');
5368
5373
  }
@@ -5787,6 +5792,12 @@ export default class bitget extends Exchange {
5787
5792
  const trailingTriggerPrice = this.safeString(params, 'trailingTriggerPrice', this.numberToString(price));
5788
5793
  const trailingPercent = this.safeString2(params, 'trailingPercent', 'newCallbackRatio');
5789
5794
  const isTrailingPercentOrder = trailingPercent !== undefined;
5795
+ // const multipleTriggers = (isTriggerOrder && (isStopLossOrder || isTakeProfitOrder || isTrailingPercentOrder))
5796
+ // || (isStopLossOrder && (isTakeProfitOrder || isTrailingPercentOrder))
5797
+ // || (isTakeProfitOrder && isTrailingPercentOrder);
5798
+ // if (multipleTriggers) {
5799
+ // throw new ExchangeError (this.id + ' editOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent');
5800
+ // }
5790
5801
  if (this.sum(isTriggerOrder, isStopLossOrder, isTakeProfitOrder, isTrailingPercentOrder) > 1) {
5791
5802
  throw new ExchangeError(this.id + ' editOrder() params can only contain one of triggerPrice, stopLossPrice, takeProfitPrice, trailingPercent');
5792
5803
  }
package/js/src/bitmart.js CHANGED
@@ -3296,9 +3296,9 @@ export default class bitmart extends Exchange {
3296
3296
  }
3297
3297
  const succeeded = this.safeValue(data, 'succeed');
3298
3298
  if (succeeded !== undefined) {
3299
- id = this.safeString(succeeded, 0);
3300
- if (id === undefined) {
3301
- throw new InvalidOrder(this.id + ' cancelOrder() failed to cancel ' + symbol + ' order id ' + id);
3299
+ const id2 = this.safeString(succeeded, 0);
3300
+ if (id2 === undefined) {
3301
+ throw new InvalidOrder(this.id + ' cancelOrder() failed to cancel ' + symbol + ' order id ' + id2);
3302
3302
  }
3303
3303
  }
3304
3304
  else {
@@ -4636,8 +4636,9 @@ export default class bitmart extends Exchange {
4636
4636
  if (limit === undefined) {
4637
4637
  limit = 10;
4638
4638
  }
4639
+ const pageNumber = this.safeInteger(params, 'page', 1);
4639
4640
  const request = {
4640
- 'page': this.safeInteger(params, 'page', 1),
4641
+ 'page': pageNumber,
4641
4642
  'limit': limit, // default is 10, max is 100
4642
4643
  };
4643
4644
  let currency = undefined;
package/js/src/bitmex.js CHANGED
@@ -1481,13 +1481,14 @@ export default class bitmex extends Exchange {
1481
1481
  if (status !== undefined) {
1482
1482
  status = this.parseTransactionStatus(status);
1483
1483
  }
1484
+ const code = currency['code'];
1484
1485
  return {
1485
1486
  'info': transaction,
1486
1487
  'id': this.safeString(transaction, 'transactID'),
1487
1488
  'txid': this.safeString(transaction, 'tx'),
1488
1489
  'type': type,
1489
- 'currency': currency['code'],
1490
- 'network': this.networkIdToCode(this.safeString(transaction, 'network'), currency['code']),
1490
+ 'currency': code,
1491
+ 'network': this.networkIdToCode(this.safeString(transaction, 'network'), code),
1491
1492
  'amount': this.parseNumber(amount),
1492
1493
  'status': status,
1493
1494
  'timestamp': transactTime,
@@ -2022,6 +2023,7 @@ export default class bitmex extends Exchange {
2022
2023
  await this.loadMarkets();
2023
2024
  const market = this.market(symbol);
2024
2025
  let orderType = this.capitalize(type);
2026
+ const capitalizeOrderType = orderType;
2025
2027
  const reduceOnly = this.safeValue(params, 'reduceOnly');
2026
2028
  if (reduceOnly !== undefined) {
2027
2029
  if ((!market['swap']) && (!market['future'])) {
@@ -2036,7 +2038,7 @@ export default class bitmex extends Exchange {
2036
2038
  'symbol': market['id'],
2037
2039
  'side': this.capitalize(side),
2038
2040
  'orderQty': qty,
2039
- 'ordType': orderType,
2041
+ 'ordType': capitalizeOrderType,
2040
2042
  'text': brokerId,
2041
2043
  };
2042
2044
  const execInstructions = [];
@@ -2857,9 +2859,10 @@ export default class bitmex extends Exchange {
2857
2859
  }
2858
2860
  const currency = this.currency(code);
2859
2861
  params = this.omit(params, 'network');
2862
+ const parsedNetwork = this.networkCodeToId(networkCode, currency['code']);
2860
2863
  const request = {
2861
2864
  'currency': currency['id'],
2862
- 'network': this.networkCodeToId(networkCode, currency['code']),
2865
+ 'network': parsedNetwork,
2863
2866
  };
2864
2867
  const response = await this.privateGetUserDepositAddress(this.extend(request, params));
2865
2868
  //
package/js/src/bitopro.js CHANGED
@@ -1015,7 +1015,7 @@ export default class bitopro extends Exchange {
1015
1015
  '4': 'canceled',
1016
1016
  '6': 'canceled',
1017
1017
  };
1018
- return this.safeString(statuses, status, undefined);
1018
+ return this.safeString(statuses, status);
1019
1019
  }
1020
1020
  parseOrder(order, market = undefined) {
1021
1021
  //
package/js/src/bitrue.js CHANGED
@@ -978,6 +978,7 @@ export default class bitrue extends Exchange {
978
978
  if (minCost === undefined) {
979
979
  minCost = this.safeNumber(market, 'minOrderMoney');
980
980
  }
981
+ const isSpot = (type === 'spot');
981
982
  return {
982
983
  'id': id,
983
984
  'lowercaseId': lowercaseId,
@@ -989,7 +990,7 @@ export default class bitrue extends Exchange {
989
990
  'quoteId': quoteId,
990
991
  'settleId': settleId,
991
992
  'type': type,
992
- 'spot': (type === 'spot'),
993
+ 'spot': isSpot,
993
994
  'margin': false,
994
995
  'swap': isContract,
995
996
  'future': false,
package/js/src/bitso.js CHANGED
@@ -1046,8 +1046,9 @@ export default class bitso extends Exchange {
1046
1046
  }
1047
1047
  // convert it to an integer unconditionally
1048
1048
  if (markerInParams) {
1049
+ const marker = parseInt(params['marker']);
1049
1050
  params = this.extend(params, {
1050
- 'marker': parseInt(params['marker']),
1051
+ 'marker': marker,
1051
1052
  });
1052
1053
  }
1053
1054
  const request = {
@@ -1266,8 +1267,9 @@ export default class bitso extends Exchange {
1266
1267
  }
1267
1268
  // convert it to an integer unconditionally
1268
1269
  if (markerInParams) {
1270
+ const marker = parseInt(params['marker']);
1269
1271
  params = this.extend(params, {
1270
- 'marker': parseInt(params['marker']),
1272
+ 'marker': marker,
1271
1273
  });
1272
1274
  }
1273
1275
  const request = {
@@ -1827,7 +1829,8 @@ export default class bitso extends Exchange {
1827
1829
  this.checkRequiredCredentials();
1828
1830
  const nonce = this.nonce().toString();
1829
1831
  endpoint = '/api' + endpoint;
1830
- let request = [nonce, method, endpoint].join('');
1832
+ const content = [nonce, method, endpoint];
1833
+ let request = content.join('');
1831
1834
  if (method !== 'GET' && method !== 'DELETE') {
1832
1835
  if (Object.keys(query).length) {
1833
1836
  body = this.json(query);
@@ -677,12 +677,13 @@ export default class bitstamp extends Exchange {
677
677
  }
678
678
  }
679
679
  const isSpot = (type === 'spot');
680
+ const settle = settleId ? this.safeCurrencyCode(settleId) : undefined;
680
681
  result.push({
681
682
  'id': this.safeString(market, 'market_symbol'),
682
683
  'symbol': symbol,
683
684
  'base': base,
684
685
  'quote': quote,
685
- 'settle': settleId ? this.safeCurrencyCode(settleId) : undefined,
686
+ 'settle': settle,
686
687
  'baseId': baseId,
687
688
  'quoteId': quoteId,
688
689
  'settleId': settleId,
@@ -910,7 +911,7 @@ export default class bitstamp extends Exchange {
910
911
  // }
911
912
  //
912
913
  const marketId = this.safeString(ticker, 'pair');
913
- const symbol = this.safeSymbol(marketId, market, undefined);
914
+ const symbol = this.safeSymbol(marketId, market);
914
915
  const timestamp = this.safeTimestamp(ticker, 'timestamp');
915
916
  const vwap = this.safeString(ticker, 'vwap');
916
917
  const baseVolume = this.safeString(ticker, 'volume');
@@ -1332,8 +1333,9 @@ export default class bitstamp extends Exchange {
1332
1333
  return this.parseOHLCVs(ohlc, market, timeframe, since, limit);
1333
1334
  }
1334
1335
  parseBalance(response) {
1336
+ const finalResponse = response; // java req
1335
1337
  const result = {
1336
- 'info': response,
1338
+ 'info': finalResponse,
1337
1339
  'timestamp': undefined,
1338
1340
  'datetime': undefined,
1339
1341
  };
@@ -1991,8 +1991,9 @@ export default class bittrade extends Exchange {
1991
1991
  const requestSorted = this.keysort(request);
1992
1992
  let auth = this.urlencode(requestSorted);
1993
1993
  // unfortunately, PHP demands double quotes for the escaped newline symbol
1994
+ const content = [method, this.hostname, url, auth];
1994
1995
  // eslint-disable-next-line quotes
1995
- const payload = [method, this.hostname, url, auth].join("\n");
1996
+ const payload = content.join("\n");
1996
1997
  const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');
1997
1998
  auth += '&' + this.urlencode({ 'Signature': signature });
1998
1999
  url += '?' + auth;
package/js/src/blofin.js CHANGED
@@ -546,6 +546,7 @@ export default class blofin extends Exchange {
546
546
  let maxLeverage = this.safeString(market, 'maxLeverage', '100');
547
547
  maxLeverage = Precise.stringMax(maxLeverage, '1');
548
548
  const isActive = (this.safeString(market, 'state') === 'live');
549
+ const isMargin = spot && (Precise.stringGt(maxLeverage, '1'));
549
550
  return this.safeMarketStructure({
550
551
  'id': id,
551
552
  'symbol': symbol,
@@ -558,7 +559,7 @@ export default class blofin extends Exchange {
558
559
  'type': type,
559
560
  'spot': spot,
560
561
  'option': option,
561
- 'margin': spot && (Precise.stringGt(maxLeverage, '1')),
562
+ 'margin': isMargin,
562
563
  'swap': swap,
563
564
  'future': future,
564
565
  'active': isActive,
package/js/src/bybit.d.ts CHANGED
@@ -70,7 +70,7 @@ export default class bybit extends Exchange {
70
70
  */
71
71
  fetchMarkets(params?: {}): Promise<Market[]>;
72
72
  fetchSpotMarkets(params: any): Promise<Market[]>;
73
- fetchFutureMarkets(params: any): Promise<Market[]>;
73
+ fetchFutureMarkets(params?: {}): Promise<Market[]>;
74
74
  fetchOptionMarkets(params: any): Promise<Market[]>;
75
75
  parseTicker(ticker: Dict, market?: Market): Ticker;
76
76
  /**