ccxt 4.2.70 → 4.2.72

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 (50) hide show
  1. package/README.md +4 -4
  2. package/build.sh +1 -1
  3. package/dist/ccxt.browser.js +979 -195
  4. package/dist/ccxt.browser.min.js +2 -2
  5. package/dist/cjs/ccxt.js +3 -1
  6. package/dist/cjs/src/ascendex.js +149 -2
  7. package/dist/cjs/src/bitget.js +14 -6
  8. package/dist/cjs/src/coinbase.js +108 -89
  9. package/dist/cjs/src/digifinex.js +2 -1
  10. package/dist/cjs/src/hyperliquid.js +1 -1
  11. package/dist/cjs/src/kraken.js +1 -0
  12. package/dist/cjs/src/mexc.js +9 -0
  13. package/dist/cjs/src/pro/bingx.js +29 -6
  14. package/dist/cjs/src/pro/hitbtc.js +16 -7
  15. package/dist/cjs/src/pro/hyperliquid.js +556 -0
  16. package/js/ccxt.d.ts +4 -1
  17. package/js/ccxt.js +3 -1
  18. package/js/src/abstract/coinbase.d.ts +2 -0
  19. package/js/src/ascendex.d.ts +5 -1
  20. package/js/src/ascendex.js +149 -2
  21. package/js/src/base/Exchange.d.ts +56 -56
  22. package/js/src/base/types.d.ts +58 -48
  23. package/js/src/binance.d.ts +1 -1
  24. package/js/src/bitfinex2.d.ts +1 -1
  25. package/js/src/bitget.js +14 -6
  26. package/js/src/bitrue.d.ts +3 -3
  27. package/js/src/cex.d.ts +1 -1
  28. package/js/src/coinbase.d.ts +1 -1
  29. package/js/src/coinbase.js +108 -89
  30. package/js/src/digifinex.js +2 -1
  31. package/js/src/gate.d.ts +1 -1
  32. package/js/src/htx.d.ts +1 -1
  33. package/js/src/hyperliquid.js +1 -1
  34. package/js/src/idex.d.ts +1 -1
  35. package/js/src/kraken.js +1 -0
  36. package/js/src/kucoinfutures.d.ts +1 -1
  37. package/js/src/mexc.js +9 -0
  38. package/js/src/poloniexfutures.d.ts +2 -2
  39. package/js/src/pro/bingx.d.ts +1 -0
  40. package/js/src/pro/bingx.js +29 -6
  41. package/js/src/pro/bitvavo.d.ts +8 -8
  42. package/js/src/pro/bybit.d.ts +1 -1
  43. package/js/src/pro/cex.d.ts +5 -5
  44. package/js/src/pro/coinbase.d.ts +2 -2
  45. package/js/src/pro/hitbtc.js +16 -7
  46. package/js/src/pro/hyperliquid.d.ts +23 -0
  47. package/js/src/pro/hyperliquid.js +557 -0
  48. package/js/src/pro/poloniex.d.ts +3 -3
  49. package/package.json +1 -1
  50. package/skip-tests.json +33 -58
package/js/src/mexc.js CHANGED
@@ -44,6 +44,7 @@ export default class mexc extends Exchange {
44
44
  'createMarketSellOrderWithCost': false,
45
45
  'createOrder': true,
46
46
  'createOrders': true,
47
+ 'createPostOnlyOrder': true,
47
48
  'createReduceOnlyOrder': true,
48
49
  'deposit': undefined,
49
50
  'editOrder': undefined,
@@ -2210,6 +2211,14 @@ export default class mexc extends Exchange {
2210
2211
  * @param {object} [params] extra parameters specific to the exchange API endpoint
2211
2212
  * @param {string} [params.marginMode] only 'isolated' is supported for spot-margin trading
2212
2213
  * @param {float} [params.triggerPrice] The price at which a trigger order is triggered at
2214
+ * @param {bool} [params.postOnly] if true, the order will only be posted if it will be a maker order
2215
+ * @param {bool} [params.reduceOnly] *contract only* indicates if this order is to reduce the size of a position
2216
+ *
2217
+ * EXCHANGE SPECIFIC PARAMETERS
2218
+ * @param {int} [params.leverage] *contract only* leverage is necessary on isolated margin
2219
+ * @param {long} [params.positionId] *contract only* it is recommended to fill in this parameter when closing a position
2220
+ * @param {string} [params.externalOid] *contract only* external order ID
2221
+ * @param {int} [params.positionMode] *contract only* 1:hedge, 2:one-way, default: the user's current config
2213
2222
  * @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
2214
2223
  */
2215
2224
  await this.loadMarkets();
@@ -53,7 +53,7 @@ export default class poloniexfutures extends Exchange {
53
53
  fetchOrdersByStatus(status: any, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
54
54
  fetchOpenOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
55
55
  fetchClosedOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
56
- fetchOrder(id?: string, symbol?: Str, params?: {}): Promise<Order>;
56
+ fetchOrder(id?: Str, symbol?: Str, params?: {}): Promise<Order>;
57
57
  parseOrder(order: any, market?: Market): Order;
58
58
  fetchFundingRate(symbol: string, params?: {}): Promise<{
59
59
  info: any;
@@ -75,7 +75,7 @@ export default class poloniexfutures extends Exchange {
75
75
  previousFundingDatetime: string;
76
76
  }>;
77
77
  fetchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
78
- setMarginMode(marginMode: string, symbol?: string, params?: {}): Promise<any>;
78
+ setMarginMode(marginMode: string, symbol?: Str, params?: {}): Promise<any>;
79
79
  sign(path: any, api?: string, method?: string, params?: {}, headers?: any, body?: any): {
80
80
  url: any;
81
81
  method: string;
@@ -20,6 +20,7 @@ export default class bingx extends bingxRest {
20
20
  setBalanceCache(client: Client, type: any, subscriptionHash: any, params: any): void;
21
21
  loadBalanceSnapshot(client: any, messageHash: any, type: any): Promise<void>;
22
22
  handleErrorMessage(client: any, message: any): boolean;
23
+ keepAliveListenKey(params?: {}): Promise<void>;
23
24
  authenticate(params?: {}): Promise<void>;
24
25
  pong(client: any, message: any): Promise<void>;
25
26
  handleOrder(client: any, message: any): void;
@@ -765,21 +765,44 @@ export default class bingx extends bingxRest {
765
765
  }
766
766
  return true;
767
767
  }
768
- async authenticate(params = {}) {
769
- const time = this.milliseconds();
768
+ async keepAliveListenKey(params = {}) {
770
769
  const listenKey = this.safeString(this.options, 'listenKey');
771
770
  if (listenKey === undefined) {
772
- const response = await this.userAuthPrivatePostUserDataStream();
773
- this.options['listenKey'] = this.safeString(response, 'listenKey');
774
- this.options['lastAuthenticatedTime'] = time;
771
+ // A network error happened: we can't renew a listen key that does not exist.
775
772
  return;
776
773
  }
774
+ try {
775
+ await this.userAuthPrivatePutUserDataStream({ 'listenKey': listenKey }); // extend the expiry
776
+ }
777
+ catch (error) {
778
+ const types = ['spot', 'swap'];
779
+ for (let i = 0; i < types.length; i++) {
780
+ const type = types[i];
781
+ const url = this.urls['api']['ws'][type] + '?listenKey=' + listenKey;
782
+ const client = this.client(url);
783
+ const messageHashes = Object.keys(client.futures);
784
+ for (let j = 0; j < messageHashes.length; j++) {
785
+ const messageHash = messageHashes[j];
786
+ client.reject(error, messageHash);
787
+ }
788
+ }
789
+ this.options['listenKey'] = undefined;
790
+ this.options['lastAuthenticatedTime'] = 0;
791
+ return;
792
+ }
793
+ // whether or not to schedule another listenKey keepAlive request
794
+ const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 3600000);
795
+ this.delay(listenKeyRefreshRate, this.keepAliveListenKey, params);
796
+ }
797
+ async authenticate(params = {}) {
798
+ const time = this.milliseconds();
777
799
  const lastAuthenticatedTime = this.safeInteger(this.options, 'lastAuthenticatedTime', 0);
778
800
  const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 3600000); // 1 hour
779
801
  if (time - lastAuthenticatedTime > listenKeyRefreshRate) {
780
- const response = await this.userAuthPrivatePutUserDataStream({ 'listenKey': listenKey }); // extend the expiry
802
+ const response = await this.userAuthPrivatePostUserDataStream();
781
803
  this.options['listenKey'] = this.safeString(response, 'listenKey');
782
804
  this.options['lastAuthenticatedTime'] = time;
805
+ this.delay(listenKeyRefreshRate, this.keepAliveListenKey, params);
783
806
  }
784
807
  }
785
808
  async pong(client, message) {
@@ -24,21 +24,21 @@ export default class bitvavo extends bitvavoRest {
24
24
  watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
25
25
  createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number, params?: {}): Promise<Order>;
26
26
  editOrderWs(id: string, symbol: string, type: OrderType, side: OrderSide, amount?: number, price?: number, params?: {}): Promise<Order>;
27
- cancelOrderWs(id: string, symbol?: string, params?: {}): Promise<any>;
28
- cancelAllOrdersWs(symbol?: string, params?: {}): Promise<any>;
27
+ cancelOrderWs(id: string, symbol?: Str, params?: {}): Promise<any>;
28
+ cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<any>;
29
29
  handleMultipleOrders(client: Client, message: any): void;
30
- fetchOrderWs(id: string, symbol?: string, params?: {}): Promise<Order>;
31
- fetchOrdersWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
30
+ fetchOrderWs(id: string, symbol?: Str, params?: {}): Promise<Order>;
31
+ fetchOrdersWs(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
32
32
  watchRequest(action: any, request: any): Promise<any>;
33
- fetchOpenOrdersWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
34
- fetchMyTradesWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
33
+ fetchOpenOrdersWs(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
34
+ fetchMyTradesWs(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
35
35
  handleMyTrades(client: Client, message: any): void;
36
36
  withdrawWs(code: string, amount: any, address: any, tag?: any, params?: {}): Promise<any>;
37
37
  handleWithdraw(client: Client, message: any): void;
38
- fetchWithdrawalsWs(code?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
38
+ fetchWithdrawalsWs(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<any>;
39
39
  handleWithdraws(client: Client, message: any): void;
40
40
  fetchOHLCVWs(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
41
- fetchDepositsWs(code?: string, since?: Int, limit?: Int, params?: {}): Promise<any>;
41
+ fetchDepositsWs(code?: Str, since?: Int, limit?: Int, params?: {}): Promise<any>;
42
42
  handleDeposits(client: Client, message: any): void;
43
43
  fetchTradingFeesWs(params?: {}): Promise<any>;
44
44
  fetchMarketsWs(params?: {}): Promise<any>;
@@ -4,7 +4,7 @@ import Client from '../base/ws/Client.js';
4
4
  export default class bybit extends bybitRest {
5
5
  describe(): any;
6
6
  requestId(): any;
7
- getUrlByMarketType(symbol?: Str, isPrivate?: boolean, method?: string, params?: {}): any;
7
+ getUrlByMarketType(symbol?: Str, isPrivate?: boolean, method?: Str, params?: {}): any;
8
8
  cleanParams(params: any): any;
9
9
  watchTicker(symbol: string, params?: {}): Promise<Ticker>;
10
10
  watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
@@ -16,7 +16,7 @@ export default class cex extends cexRest {
16
16
  handleTicker(client: Client, message: any): void;
17
17
  parseWsTicker(ticker: any, market?: any): Ticker;
18
18
  fetchBalanceWs(params?: {}): Promise<Balances>;
19
- watchOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
19
+ watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
20
20
  watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
21
21
  handleTransaction(client: Client, message: any): void;
22
22
  handleMyTrades(client: Client, message: any): void;
@@ -37,12 +37,12 @@ export default class cex extends cexRest {
37
37
  handleOHLCV24(client: Client, message: any): any;
38
38
  handleOHLCV1m(client: Client, message: any): void;
39
39
  handleOHLCV(client: Client, message: any): void;
40
- fetchOrderWs(id: string, symbol?: string, params?: {}): Promise<Order>;
41
- fetchOpenOrdersWs(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
40
+ fetchOrderWs(id: string, symbol?: Str, params?: {}): Promise<Order>;
41
+ fetchOpenOrdersWs(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
42
42
  createOrderWs(symbol: string, type: OrderType, side: OrderSide, amount: number, price?: number, params?: {}): Promise<Order>;
43
43
  editOrderWs(id: string, symbol: string, type: OrderType, side: OrderSide, amount?: number, price?: number, params?: {}): Promise<Order>;
44
- cancelOrderWs(id: string, symbol?: string, params?: {}): Promise<Order>;
45
- cancelOrdersWs(ids: string[], symbol?: string, params?: {}): Promise<Order[]>;
44
+ cancelOrderWs(id: string, symbol?: Str, params?: {}): Promise<Order>;
45
+ cancelOrdersWs(ids: string[], symbol?: Str, params?: {}): Promise<Order[]>;
46
46
  resolveData(client: Client, message: any): void;
47
47
  handleConnected(client: Client, message: any): any;
48
48
  handleErrorMessage(client: Client, message: any): void;
@@ -1,5 +1,5 @@
1
1
  import coinbaseRest from '../coinbase.js';
2
- import { Strings, Tickers, Ticker, Int, Trade, OrderBook, Order } from '../base/types.js';
2
+ import { Strings, Tickers, Ticker, Int, Trade, OrderBook, Order, Str } from '../base/types.js';
3
3
  export default class coinbase extends coinbaseRest {
4
4
  describe(): any;
5
5
  subscribe(name: any, symbol?: any, params?: {}): Promise<any>;
@@ -8,7 +8,7 @@ export default class coinbase extends coinbaseRest {
8
8
  handleTickers(client: any, message: any): any;
9
9
  parseWsTicker(ticker: any, market?: any): Ticker;
10
10
  watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
11
- watchOrders(symbol?: string, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
11
+ watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
12
12
  watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
13
13
  handleTrade(client: any, message: any): any;
14
14
  handleOrder(client: any, message: any): any;
@@ -250,7 +250,10 @@ export default class hitbtc extends hitbtcRest {
250
250
  // }
251
251
  // }
252
252
  //
253
- const data = this.safeValue2(message, 'snapshot', 'update', {});
253
+ const snapshot = this.safeDict(message, 'snapshot');
254
+ const update = this.safeDict(message, 'update');
255
+ const data = snapshot ? snapshot : update;
256
+ const type = snapshot ? 'snapshot' : 'update';
254
257
  const marketIds = Object.keys(data);
255
258
  for (let i = 0; i < marketIds.length; i++) {
256
259
  const marketId = marketIds[i];
@@ -259,17 +262,23 @@ export default class hitbtc extends hitbtcRest {
259
262
  const item = data[marketId];
260
263
  const messageHash = 'orderbooks::' + symbol;
261
264
  if (!(symbol in this.orderbooks)) {
262
- const subscription = this.safeValue(client.subscriptions, messageHash, {});
265
+ const subscription = this.safeDict(client.subscriptions, messageHash, {});
263
266
  const limit = this.safeInteger(subscription, 'limit');
264
267
  this.orderbooks[symbol] = this.orderBook({}, limit);
265
268
  }
269
+ const orderbook = this.orderbooks[symbol];
266
270
  const timestamp = this.safeInteger(item, 't');
267
271
  const nonce = this.safeInteger(item, 's');
268
- const orderbook = this.orderbooks[symbol];
269
- const asks = this.safeValue(item, 'a', []);
270
- const bids = this.safeValue(item, 'b', []);
271
- this.handleDeltas(orderbook['asks'], asks);
272
- this.handleDeltas(orderbook['bids'], bids);
272
+ if (type === 'snapshot') {
273
+ const parsedSnapshot = this.parseOrderBook(item, symbol, timestamp, 'b', 'a');
274
+ orderbook.reset(parsedSnapshot);
275
+ }
276
+ else {
277
+ const asks = this.safeList(item, 'a', []);
278
+ const bids = this.safeList(item, 'b', []);
279
+ this.handleDeltas(orderbook['asks'], asks);
280
+ this.handleDeltas(orderbook['bids'], bids);
281
+ }
273
282
  orderbook['timestamp'] = timestamp;
274
283
  orderbook['datetime'] = this.iso8601(timestamp);
275
284
  orderbook['nonce'] = nonce;
@@ -0,0 +1,23 @@
1
+ import hyperliquidRest from '../hyperliquid.js';
2
+ import Client from '../base/ws/Client.js';
3
+ import { Int, Str, Market, OrderBook, Trade, OHLCV, Order } from '../base/types.js';
4
+ export default class hyperliquid extends hyperliquidRest {
5
+ describe(): any;
6
+ watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
7
+ handleOrderBook(client: any, message: any): void;
8
+ watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
9
+ handleMyTrades(client: Client, message: any): void;
10
+ watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
11
+ handleTrades(client: Client, message: any): void;
12
+ parseWsTrade(trade: any, market?: Market): Trade;
13
+ watchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
14
+ handleOHLCV(client: Client, message: any): void;
15
+ watchOrders(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
16
+ handleOrder(client: Client, message: any): void;
17
+ handleErrorMessage(client: Client, message: any): boolean;
18
+ handleMessage(client: Client, message: any): void;
19
+ ping(client: any): {
20
+ method: string;
21
+ };
22
+ handlePong(client: Client, message: any): any;
23
+ }