ccxt 4.2.19 → 4.2.20

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 (42) hide show
  1. package/README.md +98 -98
  2. package/dist/ccxt.browser.js +67 -133
  3. package/dist/ccxt.browser.min.js +2 -2
  4. package/dist/cjs/ccxt.js +1 -1
  5. package/dist/cjs/src/base/Exchange.js +10 -0
  6. package/dist/cjs/src/binance.js +2 -1
  7. package/dist/cjs/src/binanceus.js +17 -0
  8. package/dist/cjs/src/bingx.js +2 -1
  9. package/dist/cjs/src/bitget.js +25 -31
  10. package/dist/cjs/src/bitteam.js +1 -1
  11. package/dist/cjs/src/bybit.js +0 -28
  12. package/dist/cjs/src/delta.js +0 -18
  13. package/dist/cjs/src/gate.js +0 -25
  14. package/dist/cjs/src/kucoinfutures.js +9 -9
  15. package/dist/cjs/src/okx.js +0 -18
  16. package/js/ccxt.d.ts +1 -1
  17. package/js/ccxt.js +1 -1
  18. package/js/src/abstract/binance.d.ts +1 -0
  19. package/js/src/abstract/binancecoinm.d.ts +1 -0
  20. package/js/src/abstract/binanceus.d.ts +1 -0
  21. package/js/src/abstract/binanceusdm.d.ts +1 -0
  22. package/js/src/abstract/bitpanda.js +11 -0
  23. package/js/src/base/Exchange.d.ts +3 -0
  24. package/js/src/base/Exchange.js +10 -0
  25. package/js/src/binance.js +2 -1
  26. package/js/src/binanceus.js +17 -0
  27. package/js/src/bingx.js +2 -1
  28. package/js/src/bitget.d.ts +1 -1
  29. package/js/src/bitget.js +25 -31
  30. package/js/src/bitteam.js +1 -1
  31. package/js/src/bybit.d.ts +0 -1
  32. package/js/src/bybit.js +1 -29
  33. package/js/src/delta.d.ts +0 -1
  34. package/js/src/delta.js +0 -18
  35. package/js/src/gate.d.ts +0 -1
  36. package/js/src/gate.js +0 -25
  37. package/js/src/kucoinfutures.d.ts +6 -6
  38. package/js/src/kucoinfutures.js +9 -9
  39. package/js/src/okx.d.ts +0 -1
  40. package/js/src/okx.js +0 -18
  41. package/package.json +1 -1
  42. package/skip-tests.json +2 -1
package/js/src/bitget.js CHANGED
@@ -58,6 +58,7 @@ export default class bitget extends Exchange {
58
58
  'fetchBorrowRateHistories': false,
59
59
  'fetchBorrowRateHistory': false,
60
60
  'fetchCanceledOrders': true,
61
+ 'fetchCanceledAndClosedOrders': true,
61
62
  'fetchClosedOrders': true,
62
63
  'fetchCrossBorrowRate': true,
63
64
  'fetchCrossBorrowRates': false,
@@ -5397,20 +5398,8 @@ export default class bitget extends Exchange {
5397
5398
  * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5398
5399
  */
5399
5400
  await this.loadMarkets();
5400
- let market = undefined;
5401
- if (symbol !== undefined) {
5402
- market = this.market(symbol);
5403
- }
5404
- const response = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
5405
- const result = [];
5406
- for (let i = 0; i < response.length; i++) {
5407
- const entry = response[i];
5408
- const status = this.parseOrderStatus(this.safeStringN(entry, ['state', 'status', 'planStatus']));
5409
- if (status === 'closed') {
5410
- result.push(entry);
5411
- }
5412
- }
5413
- return this.parseOrders(result, market, since, limit);
5401
+ const orders = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
5402
+ return this.filterBy(orders, 'status', 'closed');
5414
5403
  }
5415
5404
  async fetchCanceledOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
5416
5405
  /**
@@ -5435,22 +5424,26 @@ export default class bitget extends Exchange {
5435
5424
  * @returns {object} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5436
5425
  */
5437
5426
  await this.loadMarkets();
5438
- let market = undefined;
5439
- if (symbol !== undefined) {
5440
- market = this.market(symbol);
5441
- }
5442
- const response = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
5443
- const result = [];
5444
- for (let i = 0; i < response.length; i++) {
5445
- const entry = response[i];
5446
- const status = this.parseOrderStatus(this.safeStringN(entry, ['state', 'status', 'planStatus']));
5447
- if (status === 'canceled') {
5448
- result.push(entry);
5449
- }
5450
- }
5451
- return this.parseOrders(result, market, since, limit);
5427
+ const orders = await this.fetchCanceledAndClosedOrders(symbol, since, limit, params);
5428
+ return this.filterBy(orders, 'status', 'canceled');
5452
5429
  }
5453
5430
  async fetchCanceledAndClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
5431
+ /**
5432
+ * @method
5433
+ * @name bitget#fetchCanceledAndClosedOrders
5434
+ * @see https://www.bitget.com/api-doc/spot/trade/Get-History-Orders
5435
+ * @see https://www.bitget.com/api-doc/spot/plan/Get-History-Plan-Order
5436
+ * @see https://www.bitget.com/api-doc/contract/trade/Get-Orders-History
5437
+ * @see https://www.bitget.com/api-doc/contract/plan/orders-plan-history
5438
+ * @see https://www.bitget.com/api-doc/margin/cross/trade/Get-Cross-Order-History
5439
+ * @see https://www.bitget.com/api-doc/margin/isolated/trade/Get-Isolated-Order-History
5440
+ * @description fetches information on multiple canceled and closed orders made by the user
5441
+ * @param {string} symbol unified market symbol of the market orders were made in
5442
+ * @param {int} [since] the earliest time in ms to fetch orders for
5443
+ * @param {int} [limit] the maximum number of order structures to retrieve
5444
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
5445
+ * @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
5446
+ */
5454
5447
  await this.loadMarkets();
5455
5448
  const sandboxMode = this.safeValue(this.options, 'sandboxMode', false);
5456
5449
  let market = undefined;
@@ -5735,16 +5728,17 @@ export default class bitget extends Exchange {
5735
5728
  const data = this.safeValue(response, 'data', {});
5736
5729
  if (marketType === 'spot') {
5737
5730
  if ((marginMode !== undefined) || stop) {
5738
- return this.safeValue(data, 'orderList', []);
5731
+ return this.parseOrders(this.safeValue(data, 'orderList', []), market, since, limit);
5739
5732
  }
5740
5733
  }
5741
5734
  else {
5742
- return this.safeValue(data, 'entrustedList', []);
5735
+ return this.parseOrders(this.safeValue(data, 'entrustedList', []), market, since, limit);
5743
5736
  }
5744
5737
  if (typeof response === 'string') {
5745
5738
  response = JSON.parse(response);
5746
5739
  }
5747
- return this.safeValue(response, 'data', []);
5740
+ const orders = this.safeValue(response, 'data', []);
5741
+ return this.parseOrders(orders, market, since, limit);
5748
5742
  }
5749
5743
  async fetchLedger(code = undefined, since = undefined, limit = undefined, params = {}) {
5750
5744
  /**
package/js/src/bitteam.js CHANGED
@@ -127,7 +127,7 @@ export default class bitteam extends Exchange {
127
127
  '1d': '1D',
128
128
  },
129
129
  'urls': {
130
- 'logo': 'https://private-user-images.githubusercontent.com/43336371/291263231-aa2e0d61-edba-44a8-b9bf-68797dc417bd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDMwOTE4NTYsIm5iZiI6MTcwMzA5MTU1NiwicGF0aCI6Ii80MzMzNjM3MS8yOTEyNjMyMzEtYWEyZTBkNjEtZWRiYS00NGE4LWI5YmYtNjg3OTdkYzQxN2JkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjIwVDE2NTkxNlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVkOGE5YmY3ZDMzMWY4YzVjODYzYWJjNjE1MGFkNTRkNzVlMDJmNWE1ZTgwNGQ2NzVkMzkyZTFhOTc4OTNjMWQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.B-ySU5Uo6vz53-iDe08tTQmJH6QOzUA9Jcbj-kZc2wg',
130
+ 'logo': 'https://github.com/ccxt/ccxt/assets/43336371/cf71fe3d-b8b4-40f2-a906-907661b28793',
131
131
  'api': {
132
132
  'history': 'https://history.bit.team',
133
133
  'public': 'https://bit.team',
package/js/src/bybit.d.ts CHANGED
@@ -14,7 +14,6 @@ export default class bybit extends Exchange {
14
14
  convertExpireDateToMarketIdDate(date: any): any;
15
15
  convertMarketIdExpireDate(date: any): string;
16
16
  createExpiredOptionMarket(symbol: any): MarketInterface;
17
- market(symbol: any): any;
18
17
  safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
19
18
  getBybitType(method: any, market: any, params?: {}): any[];
20
19
  fetchTime(params?: {}): Promise<number>;
package/js/src/bybit.js CHANGED
@@ -7,7 +7,7 @@
7
7
  // ---------------------------------------------------------------------------
8
8
  import Exchange from './abstract/bybit.js';
9
9
  import { TICK_SIZE } from './base/functions/number.js';
10
- import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, BadSymbol, MarginModeAlreadySet, NoChange } from './base/errors.js';
10
+ import { AuthenticationError, ExchangeError, ArgumentsRequired, PermissionDenied, InvalidOrder, OrderNotFound, InsufficientFunds, BadRequest, RateLimitExceeded, InvalidNonce, NotSupported, RequestTimeout, MarginModeAlreadySet, NoChange } from './base/errors.js';
11
11
  import { Precise } from './base/Precise.js';
12
12
  import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
13
13
  import { rsa } from './base/functions/rsa.js';
@@ -1251,34 +1251,6 @@ export default class bybit extends Exchange {
1251
1251
  'info': undefined,
1252
1252
  };
1253
1253
  }
1254
- market(symbol) {
1255
- if (this.markets === undefined) {
1256
- throw new ExchangeError(this.id + ' markets not loaded');
1257
- }
1258
- if (typeof symbol === 'string') {
1259
- if (symbol in this.markets) {
1260
- return this.markets[symbol];
1261
- }
1262
- else if (symbol in this.markets_by_id) {
1263
- const markets = this.markets_by_id[symbol];
1264
- let defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
1265
- if (defaultType === 'future') {
1266
- defaultType = 'contract';
1267
- }
1268
- for (let i = 0; i < markets.length; i++) {
1269
- const market = markets[i];
1270
- if (market[defaultType]) {
1271
- return market;
1272
- }
1273
- }
1274
- return markets[0];
1275
- }
1276
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
1277
- return this.createExpiredOptionMarket(symbol);
1278
- }
1279
- }
1280
- throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
1281
- }
1282
1254
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
1283
1255
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
1284
1256
  if (isOption && !(marketId in this.markets_by_id)) {
package/js/src/delta.d.ts CHANGED
@@ -8,7 +8,6 @@ export default class delta extends Exchange {
8
8
  describe(): any;
9
9
  convertExpireDate(date: any): string;
10
10
  createExpiredOptionMarket(symbol: any): MarketInterface;
11
- market(symbol: any): any;
12
11
  safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
13
12
  fetchTime(params?: {}): Promise<number>;
14
13
  fetchStatus(params?: {}): Promise<{
package/js/src/delta.js CHANGED
@@ -318,24 +318,6 @@ export default class delta extends Exchange {
318
318
  'info': undefined,
319
319
  };
320
320
  }
321
- market(symbol) {
322
- if (this.markets === undefined) {
323
- throw new ExchangeError(this.id + ' markets not loaded');
324
- }
325
- if (typeof symbol === 'string') {
326
- if (symbol in this.markets) {
327
- return this.markets[symbol];
328
- }
329
- else if (symbol in this.markets_by_id) {
330
- const markets = this.markets_by_id[symbol];
331
- return markets[0];
332
- }
333
- else if ((symbol.endsWith('-C')) || (symbol.endsWith('-P')) || (symbol.startsWith('C-')) || (symbol.startsWith('P-'))) {
334
- return this.createExpiredOptionMarket(symbol);
335
- }
336
- }
337
- throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
338
- }
339
321
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
340
322
  const isOption = (marketId !== undefined) && ((marketId.endsWith('-C')) || (marketId.endsWith('-P')) || (marketId.startsWith('C-')) || (marketId.startsWith('P-')));
341
323
  if (isOption && !(marketId in this.markets_by_id)) {
package/js/src/gate.d.ts CHANGED
@@ -9,7 +9,6 @@ export default class gate extends Exchange {
9
9
  setSandboxMode(enable: any): void;
10
10
  convertExpireDate(date: any): string;
11
11
  createExpiredOptionMarket(symbol: any): MarketInterface;
12
- market(symbol: any): any;
13
12
  safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
14
13
  fetchMarkets(params?: {}): Promise<any>;
15
14
  fetchSpotMarkets(params?: {}): Promise<any[]>;
package/js/src/gate.js CHANGED
@@ -936,31 +936,6 @@ export default class gate extends Exchange {
936
936
  'info': undefined,
937
937
  };
938
938
  }
939
- market(symbol) {
940
- if (this.markets === undefined) {
941
- throw new ExchangeError(this.id + ' markets not loaded');
942
- }
943
- if (typeof symbol === 'string') {
944
- if (symbol in this.markets) {
945
- return this.markets[symbol];
946
- }
947
- else if (symbol in this.markets_by_id) {
948
- const markets = this.markets_by_id[symbol];
949
- const defaultType = this.safeString2(this.options, 'defaultType', 'defaultSubType', 'spot');
950
- for (let i = 0; i < markets.length; i++) {
951
- const market = markets[i];
952
- if (market[defaultType]) {
953
- return market;
954
- }
955
- }
956
- return markets[0];
957
- }
958
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
959
- return this.createExpiredOptionMarket(symbol);
960
- }
961
- }
962
- throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
963
- }
964
939
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
965
940
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
966
941
  if (isOption && !(marketId in this.markets_by_id)) {
@@ -56,14 +56,14 @@ export default class kucoinfutures extends kucoin {
56
56
  timestamp: any;
57
57
  datetime: any;
58
58
  fundingRate: number;
59
- fundingTimestamp: any;
60
- fundingDatetime: any;
61
- nextFundingRate: any;
59
+ fundingTimestamp: number;
60
+ fundingDatetime: string;
61
+ nextFundingRate: number;
62
62
  nextFundingTimestamp: any;
63
63
  nextFundingDatetime: any;
64
- previousFundingRate: number;
65
- previousFundingTimestamp: number;
66
- previousFundingDatetime: string;
64
+ previousFundingRate: any;
65
+ previousFundingTimestamp: any;
66
+ previousFundingDatetime: any;
67
67
  }>;
68
68
  parseBalance(response: any): Balances;
69
69
  fetchBalance(params?: {}): Promise<Balances>;
@@ -1834,7 +1834,7 @@ export default class kucoinfutures extends kucoin {
1834
1834
  * @method
1835
1835
  * @name kucoinfutures#fetchFundingRate
1836
1836
  * @description fetch the current funding rate
1837
- * @see https://www.kucoin.com/docs/rest/futures-trading/market-data/get-current-funding-rate
1837
+ * @see https://www.kucoin.com/docs/rest/futures-trading/funding-fees/get-current-funding-rate
1838
1838
  * @param {string} symbol unified market symbol
1839
1839
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1840
1840
  * @returns {object} a [funding rate structure]{@link https://docs.ccxt.com/#/?id=funding-rate-structure}
@@ -1858,7 +1858,7 @@ export default class kucoinfutures extends kucoin {
1858
1858
  // }
1859
1859
  //
1860
1860
  const data = this.safeValue(response, 'data');
1861
- const fundingTimestamp = this.safeNumber(data, 'timePoint');
1861
+ const fundingTimestamp = this.safeInteger(data, 'timePoint');
1862
1862
  // the website displayes the previous funding rate as "funding rate"
1863
1863
  return {
1864
1864
  'info': data,
@@ -1869,15 +1869,15 @@ export default class kucoinfutures extends kucoin {
1869
1869
  'estimatedSettlePrice': undefined,
1870
1870
  'timestamp': undefined,
1871
1871
  'datetime': undefined,
1872
- 'fundingRate': this.safeNumber(data, 'predictedValue'),
1873
- 'fundingTimestamp': undefined,
1874
- 'fundingDatetime': undefined,
1875
- 'nextFundingRate': undefined,
1872
+ 'fundingRate': this.safeNumber(data, 'value'),
1873
+ 'fundingTimestamp': fundingTimestamp,
1874
+ 'fundingDatetime': this.iso8601(fundingTimestamp),
1875
+ 'nextFundingRate': this.safeNumber(data, 'predictedValue'),
1876
1876
  'nextFundingTimestamp': undefined,
1877
1877
  'nextFundingDatetime': undefined,
1878
- 'previousFundingRate': this.safeNumber(data, 'value'),
1879
- 'previousFundingTimestamp': fundingTimestamp,
1880
- 'previousFundingDatetime': this.iso8601(fundingTimestamp),
1878
+ 'previousFundingRate': undefined,
1879
+ 'previousFundingTimestamp': undefined,
1880
+ 'previousFundingDatetime': undefined,
1881
1881
  };
1882
1882
  }
1883
1883
  parseBalance(response) {
package/js/src/okx.d.ts CHANGED
@@ -10,7 +10,6 @@ export default class okx extends Exchange {
10
10
  convertToInstrumentType(type: any): string;
11
11
  convertExpireDate(date: any): string;
12
12
  createExpiredOptionMarket(symbol: any): MarketInterface;
13
- market(symbol: any): any;
14
13
  safeMarket(marketId?: any, market?: any, delimiter?: any, marketType?: any): MarketInterface;
15
14
  fetchStatus(params?: {}): Promise<{
16
15
  updated: any;
package/js/src/okx.js CHANGED
@@ -1155,24 +1155,6 @@ export default class okx extends Exchange {
1155
1155
  'info': undefined,
1156
1156
  };
1157
1157
  }
1158
- market(symbol) {
1159
- if (this.markets === undefined) {
1160
- throw new ExchangeError(this.id + ' markets not loaded');
1161
- }
1162
- if (typeof symbol === 'string') {
1163
- if (symbol in this.markets) {
1164
- return this.markets[symbol];
1165
- }
1166
- else if (symbol in this.markets_by_id) {
1167
- const markets = this.markets_by_id[symbol];
1168
- return markets[0];
1169
- }
1170
- else if ((symbol.indexOf('-C') > -1) || (symbol.indexOf('-P') > -1)) {
1171
- return this.createExpiredOptionMarket(symbol);
1172
- }
1173
- }
1174
- throw new BadSymbol(this.id + ' does not have market symbol ' + symbol);
1175
- }
1176
1158
  safeMarket(marketId = undefined, market = undefined, delimiter = undefined, marketType = undefined) {
1177
1159
  const isOption = (marketId !== undefined) && ((marketId.indexOf('-C') > -1) || (marketId.indexOf('-P') > -1));
1178
1160
  if (isOption && !(marketId in this.markets_by_id)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.2.19",
3
+ "version": "4.2.20",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.js",
6
6
  "type": "module",
package/skip-tests.json CHANGED
@@ -373,7 +373,8 @@
373
373
  "fetchCurrencies": {
374
374
  "precision": "not provided",
375
375
  "withdraw": "not provided",
376
- "deposit": "not provided"
376
+ "deposit": "not provided",
377
+ "currencyIdAndCode": "broken currencies"
377
378
  },
378
379
  "fetchTrades": {
379
380
  "side": "not set"