ccxt 4.4.5 → 4.4.7

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 (45) 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 +21 -2
  5. package/dist/cjs/src/bingx.js +3 -0
  6. package/dist/cjs/src/bitflyer.js +2 -2
  7. package/dist/cjs/src/bitget.js +19 -7
  8. package/dist/cjs/src/bitmart.js +310 -128
  9. package/dist/cjs/src/bybit.js +25 -11
  10. package/dist/cjs/src/coinbase.js +6 -8
  11. package/dist/cjs/src/gate.js +3 -0
  12. package/dist/cjs/src/kraken.js +6 -1
  13. package/dist/cjs/src/kucoin.js +2 -2
  14. package/dist/cjs/src/mexc.js +127 -19
  15. package/dist/cjs/src/pro/bitget.js +66 -0
  16. package/dist/cjs/src/pro/htx.js +14 -0
  17. package/dist/cjs/src/pro/kraken.js +60 -0
  18. package/dist/cjs/src/pro/okx.js +11 -5
  19. package/examples/js/cli.js +2 -0
  20. package/js/ccxt.d.ts +1 -1
  21. package/js/ccxt.js +1 -1
  22. package/js/src/abstract/bitmart.d.ts +4 -0
  23. package/js/src/base/Exchange.d.ts +4 -0
  24. package/js/src/base/Exchange.js +21 -2
  25. package/js/src/bingx.js +3 -0
  26. package/js/src/bitflyer.js +2 -2
  27. package/js/src/bitget.d.ts +1 -0
  28. package/js/src/bitget.js +19 -7
  29. package/js/src/bitmart.d.ts +1 -0
  30. package/js/src/bitmart.js +310 -128
  31. package/js/src/bybit.js +25 -11
  32. package/js/src/coinbase.js +6 -8
  33. package/js/src/gate.js +3 -0
  34. package/js/src/kraken.js +6 -1
  35. package/js/src/kucoin.js +2 -2
  36. package/js/src/mexc.d.ts +3 -0
  37. package/js/src/mexc.js +127 -19
  38. package/js/src/pro/bitget.d.ts +3 -0
  39. package/js/src/pro/bitget.js +66 -0
  40. package/js/src/pro/htx.js +14 -0
  41. package/js/src/pro/kraken.d.ts +3 -0
  42. package/js/src/pro/kraken.js +60 -0
  43. package/js/src/pro/okx.d.ts +1 -0
  44. package/js/src/pro/okx.js +11 -5
  45. package/package.json +1 -1
package/js/src/pro/htx.js CHANGED
@@ -135,6 +135,8 @@ export default class htx extends htxRest {
135
135
  * @method
136
136
  * @name huobi#watchTicker
137
137
  * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
138
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53561-7773-11ed-9966-0242ac110003
139
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c33ab2-77ae-11ed-9966-0242ac110003
138
140
  * @param {string} symbol unified symbol of the market to fetch the ticker for
139
141
  * @param {object} [params] extra parameters specific to the exchange API endpoint
140
142
  * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
@@ -203,6 +205,9 @@ export default class htx extends htxRest {
203
205
  * @method
204
206
  * @name huobi#watchTrades
205
207
  * @description get the list of most recent trades for a particular symbol
208
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53b69-7773-11ed-9966-0242ac110003
209
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c33c21-77ae-11ed-9966-0242ac110003
210
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c33cfe-77ae-11ed-9966-0242ac110003
206
211
  * @param {string} symbol unified symbol of the market to fetch trades for
207
212
  * @param {int} [since] timestamp in ms of the earliest trade to fetch
208
213
  * @param {int} [limit] the maximum amount of trades to fetch
@@ -266,6 +271,9 @@ export default class htx extends htxRest {
266
271
  * @method
267
272
  * @name huobi#watchOHLCV
268
273
  * @description watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
274
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53241-7773-11ed-9966-0242ac110003
275
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c3346a-77ae-11ed-9966-0242ac110003
276
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c33563-77ae-11ed-9966-0242ac110003
269
277
  * @param {string} symbol unified symbol of the market to fetch OHLCV data for
270
278
  * @param {string} timeframe the length of time each candle represents
271
279
  * @param {int} [since] timestamp in ms of the earliest candle to fetch
@@ -672,6 +680,7 @@ export default class htx extends htxRest {
672
680
  * @method
673
681
  * @name huobi#watchMyTrades
674
682
  * @description watches information on multiple trades made by the user
683
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53dd5-7773-11ed-9966-0242ac110003
675
684
  * @param {string} symbol unified market symbol of the market trades were made in
676
685
  * @param {int} [since] the earliest time in ms to fetch trades for
677
686
  * @param {int} [limit] the maximum number of trade structures to retrieve
@@ -775,6 +784,7 @@ export default class htx extends htxRest {
775
784
  * @method
776
785
  * @name huobi#watchOrders
777
786
  * @description watches information on multiple orders made by the user
787
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec53c8f-7773-11ed-9966-0242ac110003
778
788
  * @param {string} symbol unified market symbol of the market orders were made in
779
789
  * @param {int} [since] the earliest time in ms to fetch orders for
780
790
  * @param {int} [limit] the maximum number of order structures to retrieve
@@ -1349,6 +1359,10 @@ export default class htx extends htxRest {
1349
1359
  * @method
1350
1360
  * @name huobi#watchBalance
1351
1361
  * @description watch balance and get the amount of funds available for trading or funds locked in orders
1362
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=7ec52e28-7773-11ed-9966-0242ac110003
1363
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=10000084-77b7-11ed-9966-0242ac110003
1364
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=8cb7dcca-77b5-11ed-9966-0242ac110003
1365
+ * @see https://www.htx.com/en-us/opend/newApiPages/?id=28c34995-77ae-11ed-9966-0242ac110003
1352
1366
  * @param {object} [params] extra parameters specific to the exchange API endpoint
1353
1367
  * @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
1354
1368
  */
@@ -18,6 +18,9 @@ export default class kraken extends krakenRest {
18
18
  watchPublic(name: any, symbol: any, params?: {}): Promise<any>;
19
19
  watchTicker(symbol: string, params?: {}): Promise<Ticker>;
20
20
  watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
21
+ watchBidsAsks(symbols?: Strings, params?: {}): Promise<Tickers>;
22
+ handleBidAsk(client: Client, message: any, subscription: any): void;
23
+ parseWsBidAsk(ticker: any, market?: any): Ticker;
21
24
  watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
22
25
  watchTradesForSymbols(symbols: string[], since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
23
26
  watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
@@ -23,6 +23,7 @@ export default class kraken extends krakenRest {
23
23
  'watchOrders': true,
24
24
  'watchTicker': true,
25
25
  'watchTickers': true,
26
+ 'watchBidsAsks': true,
26
27
  'watchTrades': true,
27
28
  'watchTradesForSymbols': true,
28
29
  'createOrderWs': true,
@@ -499,6 +500,64 @@ export default class kraken extends krakenRest {
499
500
  }
500
501
  return this.filterByArray(this.tickers, 'symbol', symbols);
501
502
  }
503
+ async watchBidsAsks(symbols = undefined, params = {}) {
504
+ /**
505
+ * @method
506
+ * @name kraken#watchBidsAsks
507
+ * @see https://docs.kraken.com/api/docs/websocket-v1/spread
508
+ * @description watches best bid & ask for symbols
509
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
510
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
511
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
512
+ */
513
+ await this.loadMarkets();
514
+ symbols = this.marketSymbols(symbols, undefined, false);
515
+ const ticker = await this.watchMultiHelper('bidask', 'spread', symbols, undefined, params);
516
+ if (this.newUpdates) {
517
+ const result = {};
518
+ result[ticker['symbol']] = ticker;
519
+ return result;
520
+ }
521
+ return this.filterByArray(this.bidsasks, 'symbol', symbols);
522
+ }
523
+ handleBidAsk(client, message, subscription) {
524
+ //
525
+ // [
526
+ // 7208974, // channelID
527
+ // [
528
+ // "63758.60000", // bid
529
+ // "63759.10000", // ask
530
+ // "1726814731.089778", // timestamp
531
+ // "0.00057917", // bid_volume
532
+ // "0.15681688" // ask_volume
533
+ // ],
534
+ // "spread",
535
+ // "XBT/USDT"
536
+ // ]
537
+ //
538
+ const parsedTicker = this.parseWsBidAsk(message);
539
+ const symbol = parsedTicker['symbol'];
540
+ this.bidsasks[symbol] = parsedTicker;
541
+ const messageHash = this.getMessageHash('bidask', undefined, symbol);
542
+ client.resolve(parsedTicker, messageHash);
543
+ }
544
+ parseWsBidAsk(ticker, market = undefined) {
545
+ const data = this.safeList(ticker, 1, []);
546
+ const marketId = this.safeString(ticker, 3);
547
+ market = this.safeValue(this.options['marketsByWsName'], marketId);
548
+ const symbol = this.safeString(market, 'symbol');
549
+ const timestamp = this.parseToInt(this.safeInteger(data, 2)) * 1000;
550
+ return this.safeTicker({
551
+ 'symbol': symbol,
552
+ 'timestamp': timestamp,
553
+ 'datetime': this.iso8601(timestamp),
554
+ 'ask': this.safeString(data, 1),
555
+ 'askVolume': this.safeString(data, 4),
556
+ 'bid': this.safeString(data, 0),
557
+ 'bidVolume': this.safeString(data, 3),
558
+ 'info': ticker,
559
+ }, market);
560
+ }
502
561
  async watchTrades(symbol, since = undefined, limit = undefined, params = {}) {
503
562
  /**
504
563
  * @method
@@ -1493,6 +1552,7 @@ export default class kraken extends krakenRest {
1493
1552
  'book': this.handleOrderBook,
1494
1553
  'ohlc': this.handleOHLCV,
1495
1554
  'ticker': this.handleTicker,
1555
+ 'spread': this.handleBidAsk,
1496
1556
  'trade': this.handleTrades,
1497
1557
  // private
1498
1558
  'openOrders': this.handleOrders,
@@ -52,6 +52,7 @@ export default class okx extends okxRest {
52
52
  watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
53
53
  handleOrders(client: Client, message: any, subscription?: any): void;
54
54
  handleMyTrades(client: Client, message: any): void;
55
+ requestId(): string;
55
56
  createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: Num, params?: {}): Promise<Order>;
56
57
  handlePlaceOrders(client: Client, message: any): void;
57
58
  editOrderWs(id: string, symbol: string, type: OrderType, side: OrderSide, amount?: Num, price?: Num, params?: {}): Promise<Order>;
package/js/src/pro/okx.js CHANGED
@@ -1957,6 +1957,12 @@ export default class okx extends okxRest {
1957
1957
  client.resolve(this.orders, symbolMessageHash);
1958
1958
  }
1959
1959
  }
1960
+ requestId() {
1961
+ const ts = this.milliseconds().toString();
1962
+ const randomNumber = this.randNumber(4);
1963
+ const randomPart = randomNumber.toString();
1964
+ return ts + randomPart;
1965
+ }
1960
1966
  async createOrderWs(symbol, type, side, amount, price = undefined, params = {}) {
1961
1967
  /**
1962
1968
  * @method
@@ -1975,7 +1981,7 @@ export default class okx extends okxRest {
1975
1981
  await this.loadMarkets();
1976
1982
  await this.authenticate();
1977
1983
  const url = this.getUrl('private', 'private');
1978
- const messageHash = this.milliseconds().toString();
1984
+ const messageHash = this.requestId();
1979
1985
  let op = undefined;
1980
1986
  [op, params] = this.handleOptionAndParams(params, 'createOrderWs', 'op', 'batch-orders');
1981
1987
  const args = this.createOrderRequest(symbol, type, side, amount, price, params);
@@ -2045,7 +2051,7 @@ export default class okx extends okxRest {
2045
2051
  await this.loadMarkets();
2046
2052
  await this.authenticate();
2047
2053
  const url = this.getUrl('private', 'private');
2048
- const messageHash = this.milliseconds().toString();
2054
+ const messageHash = this.requestId();
2049
2055
  let op = undefined;
2050
2056
  [op, params] = this.handleOptionAndParams(params, 'editOrderWs', 'op', 'amend-order');
2051
2057
  const args = this.editOrderRequest(id, symbol, type, side, amount, price, params);
@@ -2074,7 +2080,7 @@ export default class okx extends okxRest {
2074
2080
  await this.loadMarkets();
2075
2081
  await this.authenticate();
2076
2082
  const url = this.getUrl('private', 'private');
2077
- const messageHash = this.milliseconds().toString();
2083
+ const messageHash = this.requestId();
2078
2084
  const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');
2079
2085
  params = this.omit(params, ['clientOrderId', 'clOrdId']);
2080
2086
  const arg = {
@@ -2114,7 +2120,7 @@ export default class okx extends okxRest {
2114
2120
  await this.loadMarkets();
2115
2121
  await this.authenticate();
2116
2122
  const url = this.getUrl('private', 'private');
2117
- const messageHash = this.milliseconds().toString();
2123
+ const messageHash = this.requestId();
2118
2124
  const args = [];
2119
2125
  for (let i = 0; i < idsLength; i++) {
2120
2126
  const arg = {
@@ -2150,7 +2156,7 @@ export default class okx extends okxRest {
2150
2156
  throw new BadRequest(this.id + 'cancelAllOrdersWs is only applicable to Option in Portfolio Margin mode, and MMP privilege is required.');
2151
2157
  }
2152
2158
  const url = this.getUrl('private', 'private');
2153
- const messageHash = this.milliseconds().toString();
2159
+ const messageHash = this.requestId();
2154
2160
  const request = {
2155
2161
  'id': messageHash,
2156
2162
  'op': 'mass-cancel',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.4.5",
3
+ "version": "4.4.7",
4
4
  "description": "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges",
5
5
  "unpkg": "dist/ccxt.browser.min.js",
6
6
  "type": "module",