ccxt 4.3.64 → 4.3.66

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.
package/js/src/kraken.js CHANGED
@@ -83,6 +83,7 @@ export default class kraken extends Exchange {
83
83
  'fetchOrderTrades': 'emulated',
84
84
  'fetchPositions': true,
85
85
  'fetchPremiumIndexOHLCV': false,
86
+ 'fetchStatus': true,
86
87
  'fetchTicker': true,
87
88
  'fetchTickers': true,
88
89
  'fetchTime': true,
@@ -640,6 +641,32 @@ export default class kraken extends Exchange {
640
641
  }
641
642
  return result;
642
643
  }
644
+ async fetchStatus(params = {}) {
645
+ /**
646
+ * @method
647
+ * @name kraken#fetchStatus
648
+ * @description the latest known information on the availability of the exchange API
649
+ * @see https://docs.kraken.com/api/docs/rest-api/get-system-status/
650
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
651
+ * @returns {object} a [status structure]{@link https://docs.ccxt.com/#/?id=exchange-status-structure}
652
+ */
653
+ const response = await this.publicGetSystemStatus(params);
654
+ //
655
+ // {
656
+ // error: [],
657
+ // result: { status: 'online', timestamp: '2024-07-22T16:34:44Z' }
658
+ // }
659
+ //
660
+ const result = this.safeDict(response, 'result');
661
+ const statusRaw = this.safeString(result, 'status');
662
+ return {
663
+ 'status': (statusRaw === 'online') ? 'ok' : 'maintenance',
664
+ 'updated': undefined,
665
+ 'eta': undefined,
666
+ 'url': undefined,
667
+ 'info': response,
668
+ };
669
+ }
643
670
  async fetchCurrencies(params = {}) {
644
671
  /**
645
672
  * @method
@@ -1,11 +1,14 @@
1
1
  import hyperliquidRest from '../hyperliquid.js';
2
2
  import Client from '../base/ws/Client.js';
3
- import { Int, Str, Market, OrderBook, Trade, OHLCV, Order, Dict } from '../base/types.js';
3
+ import { Int, Str, Market, OrderBook, Trade, OHLCV, Order, Dict, Strings, Ticker, Tickers } from '../base/types.js';
4
4
  export default class hyperliquid extends hyperliquidRest {
5
5
  describe(): any;
6
6
  watchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
7
7
  handleOrderBook(client: any, message: any): void;
8
+ watchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
8
9
  watchMyTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
10
+ handleWsTickers(client: Client, message: any): void;
11
+ parseWsTicker(rawTicker: any, market?: Market): Ticker;
9
12
  handleMyTrades(client: Client, message: any): void;
10
13
  watchTrades(symbol: string, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
11
14
  handleTrades(client: Client, message: any): void;
@@ -20,7 +20,7 @@ export default class hyperliquid extends hyperliquidRest {
20
20
  'watchOrderBook': true,
21
21
  'watchOrders': true,
22
22
  'watchTicker': false,
23
- 'watchTickers': false,
23
+ 'watchTickers': true,
24
24
  'watchTrades': true,
25
25
  'watchPosition': false,
26
26
  },
@@ -121,6 +121,32 @@ export default class hyperliquid extends hyperliquidRest {
121
121
  const messageHash = 'orderbook:' + symbol;
122
122
  client.resolve(orderbook, messageHash);
123
123
  }
124
+ async watchTickers(symbols = undefined, params = {}) {
125
+ /**
126
+ * @method
127
+ * @name hyperliquid#watchTickers
128
+ * @description watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
129
+ * @param {string[]} symbols unified symbol of the market to fetch the ticker for
130
+ * @param {object} [params] extra parameters specific to the exchange API endpoint
131
+ * @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
132
+ */
133
+ await this.loadMarkets();
134
+ symbols = this.marketSymbols(symbols, undefined, true);
135
+ const messageHash = 'tickers';
136
+ const url = this.urls['api']['ws']['public'];
137
+ const request = {
138
+ 'method': 'subscribe',
139
+ 'subscription': {
140
+ 'type': 'webData2',
141
+ 'user': '0x0000000000000000000000000000000000000000',
142
+ },
143
+ };
144
+ const tickers = await this.watch(url, messageHash, this.extend(request, params), messageHash);
145
+ if (this.newUpdates) {
146
+ return this.filterByArrayTickers(tickers, 'symbol', symbols);
147
+ }
148
+ return this.tickers;
149
+ }
124
150
  async watchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
125
151
  /**
126
152
  * @method
@@ -156,6 +182,81 @@ export default class hyperliquid extends hyperliquidRest {
156
182
  }
157
183
  return this.filterBySymbolSinceLimit(trades, symbol, since, limit, true);
158
184
  }
185
+ handleWsTickers(client, message) {
186
+ //
187
+ // {
188
+ // "channel": "webData2",
189
+ // "data": {
190
+ // "meta": {
191
+ // "universe": [
192
+ // {
193
+ // "szDecimals": 5,
194
+ // "name": "BTC",
195
+ // "maxLeverage": 50,
196
+ // "onlyIsolated": false
197
+ // },
198
+ // ...
199
+ // ],
200
+ // },
201
+ // "assetCtxs": [
202
+ // {
203
+ // "funding": "0.00003005",
204
+ // "openInterest": "2311.50778",
205
+ // "prevDayPx": "63475.0",
206
+ // "dayNtlVlm": "468043329.64289033",
207
+ // "premium": "0.00094264",
208
+ // "oraclePx": "64712.0",
209
+ // "markPx": "64774.0",
210
+ // "midPx": "64773.5",
211
+ // "impactPxs": [
212
+ // "64773.0",
213
+ // "64774.0"
214
+ // ]
215
+ // },
216
+ // ...
217
+ // ],
218
+ // "spotAssetCtxs": [
219
+ // {
220
+ // "prevDayPx": "0.20937",
221
+ // "dayNtlVlm": "11188888.61984999",
222
+ // "markPx": "0.19722",
223
+ // "midPx": "0.197145",
224
+ // "circulatingSupply": "598760557.12072003",
225
+ // "coin": "PURR/USDC"
226
+ // },
227
+ // ...
228
+ // ],
229
+ // }
230
+ // }
231
+ //
232
+ // spot
233
+ const rawData = this.safeDict(message, 'data', {});
234
+ const spotAssets = this.safeList(rawData, 'spotAssetCtxs', []);
235
+ const parsedTickers = [];
236
+ for (let i = 0; i < spotAssets.length; i++) {
237
+ const assetObject = spotAssets[i];
238
+ const marketId = this.safeString(assetObject, 'coin');
239
+ const market = this.safeMarket(marketId, undefined, undefined, 'spot');
240
+ const ticker = this.parseWsTicker(assetObject, market);
241
+ parsedTickers.push(ticker);
242
+ }
243
+ // perpetuals
244
+ const meta = this.safeDict(rawData, 'meta', {});
245
+ const universe = this.safeList(meta, 'universe', []);
246
+ const assetCtxs = this.safeList(rawData, 'assetCtxs', []);
247
+ for (let i = 0; i < universe.length; i++) {
248
+ const data = this.extend(this.safeDict(universe, i, {}), this.safeDict(assetCtxs, i, {}));
249
+ const id = data['name'] + '/USDC:USDC';
250
+ const market = this.safeMarket(id, undefined, undefined, 'swap');
251
+ const ticker = this.parseWsTicker(data, market);
252
+ parsedTickers.push(ticker);
253
+ }
254
+ const tickers = this.indexBy(parsedTickers, 'symbol');
255
+ client.resolve(tickers, 'tickers');
256
+ }
257
+ parseWsTicker(rawTicker, market = undefined) {
258
+ return this.parseTicker(rawTicker, market);
259
+ }
159
260
  handleMyTrades(client, message) {
160
261
  //
161
262
  // {
@@ -525,6 +626,7 @@ export default class hyperliquid extends hyperliquidRest {
525
626
  'candle': this.handleOHLCV,
526
627
  'orderUpdates': this.handleOrder,
527
628
  'userFills': this.handleMyTrades,
629
+ 'webData2': this.handleWsTickers,
528
630
  };
529
631
  const exacMethod = this.safeValue(methods, topic);
530
632
  if (exacMethod !== undefined) {
package/js/src/pro/okx.js CHANGED
@@ -1640,7 +1640,7 @@ export default class okx extends okxRest {
1640
1640
  await this.loadMarkets();
1641
1641
  await this.authenticate();
1642
1642
  const url = this.getUrl('private', 'private');
1643
- const messageHash = this.nonce().toString();
1643
+ const messageHash = this.milliseconds().toString();
1644
1644
  let op = undefined;
1645
1645
  [op, params] = this.handleOptionAndParams(params, 'createOrderWs', 'op', 'batch-orders');
1646
1646
  const args = this.createOrderRequest(symbol, type, side, amount, price, params);
@@ -1710,7 +1710,7 @@ export default class okx extends okxRest {
1710
1710
  await this.loadMarkets();
1711
1711
  await this.authenticate();
1712
1712
  const url = this.getUrl('private', 'private');
1713
- const messageHash = this.nonce().toString();
1713
+ const messageHash = this.milliseconds().toString();
1714
1714
  let op = undefined;
1715
1715
  [op, params] = this.handleOptionAndParams(params, 'editOrderWs', 'op', 'amend-order');
1716
1716
  const args = this.editOrderRequest(id, symbol, type, side, amount, price, params);
@@ -1739,7 +1739,7 @@ export default class okx extends okxRest {
1739
1739
  await this.loadMarkets();
1740
1740
  await this.authenticate();
1741
1741
  const url = this.getUrl('private', 'private');
1742
- const messageHash = this.nonce().toString();
1742
+ const messageHash = this.milliseconds().toString();
1743
1743
  const clientOrderId = this.safeString2(params, 'clOrdId', 'clientOrderId');
1744
1744
  params = this.omit(params, ['clientOrderId', 'clOrdId']);
1745
1745
  const arg = {
@@ -1779,7 +1779,7 @@ export default class okx extends okxRest {
1779
1779
  await this.loadMarkets();
1780
1780
  await this.authenticate();
1781
1781
  const url = this.getUrl('private', 'private');
1782
- const messageHash = this.nonce().toString();
1782
+ const messageHash = this.milliseconds().toString();
1783
1783
  const args = [];
1784
1784
  for (let i = 0; i < idsLength; i++) {
1785
1785
  const arg = {
@@ -1815,7 +1815,7 @@ export default class okx extends okxRest {
1815
1815
  throw new BadRequest(this.id + 'cancelAllOrdersWs is only applicable to Option in Portfolio Margin mode, and MMP privilege is required.');
1816
1816
  }
1817
1817
  const url = this.getUrl('private', 'private');
1818
- const messageHash = this.nonce().toString();
1818
+ const messageHash = this.milliseconds().toString();
1819
1819
  const request = {
1820
1820
  'id': messageHash,
1821
1821
  'op': 'mass-cancel',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ccxt",
3
- "version": "4.3.64",
3
+ "version": "4.3.66",
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",