ccxt 4.3.65 → 4.3.67
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/README.md +4 -3
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +2 -2
- package/dist/cjs/src/bingx.js +151 -19
- package/dist/cjs/src/bithumb.js +61 -17
- package/dist/cjs/src/hyperliquid.js +63 -7
- package/dist/cjs/src/independentreserve.js +0 -1
- package/dist/cjs/src/kraken.js +27 -0
- package/dist/cjs/src/pro/hyperliquid.js +103 -1
- package/dist/cjs/src/pro/okx.js +22 -9
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bingx.d.ts +7 -0
- package/js/src/base/Exchange.d.ts +14 -13
- package/js/src/base/Exchange.js +2 -2
- package/js/src/bingx.js +151 -19
- package/js/src/bithumb.js +61 -17
- package/js/src/hyperliquid.d.ts +3 -1
- package/js/src/hyperliquid.js +63 -7
- package/js/src/independentreserve.js +1 -1
- package/js/src/kraken.d.ts +7 -0
- package/js/src/kraken.js +27 -0
- package/js/src/pro/bitget.d.ts +1 -1
- package/js/src/pro/bybit.d.ts +1 -1
- package/js/src/pro/coinone.d.ts +1 -1
- package/js/src/pro/currencycom.d.ts +1 -1
- package/js/src/pro/hollaex.d.ts +1 -1
- package/js/src/pro/hyperliquid.d.ts +5 -2
- package/js/src/pro/hyperliquid.js +103 -1
- package/js/src/pro/kucoin.d.ts +1 -1
- package/js/src/pro/kucoinfutures.d.ts +1 -1
- package/js/src/pro/mexc.d.ts +1 -1
- package/js/src/pro/okcoin.d.ts +1 -1
- package/js/src/pro/okx.d.ts +2 -2
- package/js/src/pro/okx.js +23 -10
- package/js/src/pro/oxfun.d.ts +1 -1
- package/js/src/pro/p2b.d.ts +1 -1
- package/js/src/pro/poloniex.d.ts +1 -1
- package/js/src/pro/whitebit.d.ts +1 -1
- package/package.json +1 -1
- package/dist/cjs/src/abstract/bittrex.js +0 -9
- package/dist/cjs/src/bittrex.js +0 -2308
- package/dist/cjs/src/pro/bittrex.js +0 -959
- package/js/src/bittrex.d.ts +0 -97
- package/js/src/bittrex.js +0 -2309
- package/js/src/pro/bittrex.d.ts +0 -69
- package/js/src/pro/bittrex.js +0 -960
package/js/src/bithumb.js
CHANGED
|
@@ -206,17 +206,57 @@ export default class bithumb extends Exchange {
|
|
|
206
206
|
* @returns {object[]} an array of objects representing market data
|
|
207
207
|
*/
|
|
208
208
|
const result = [];
|
|
209
|
-
const quoteCurrencies = this.
|
|
209
|
+
const quoteCurrencies = this.safeDict(this.options, 'quoteCurrencies', {});
|
|
210
210
|
const quotes = Object.keys(quoteCurrencies);
|
|
211
|
+
const promises = [];
|
|
211
212
|
for (let i = 0; i < quotes.length; i++) {
|
|
212
|
-
const quote = quotes[i];
|
|
213
|
-
const quoteId = quote;
|
|
214
|
-
const extension = this.safeValue(quoteCurrencies, quote, {});
|
|
215
213
|
const request = {
|
|
216
|
-
'quoteId':
|
|
214
|
+
'quoteId': quotes[i],
|
|
217
215
|
};
|
|
218
|
-
|
|
219
|
-
|
|
216
|
+
promises.push(this.publicGetTickerALLQuoteId(this.extend(request, params)));
|
|
217
|
+
//
|
|
218
|
+
// {
|
|
219
|
+
// "status": "0000",
|
|
220
|
+
// "data": {
|
|
221
|
+
// "ETH": {
|
|
222
|
+
// "opening_price": "0.05153399",
|
|
223
|
+
// "closing_price": "0.05145144",
|
|
224
|
+
// "min_price": "0.05145144",
|
|
225
|
+
// "max_price": "0.05160781",
|
|
226
|
+
// "units_traded": "6.541124172077830855",
|
|
227
|
+
// "acc_trade_value": "0.33705472498492329997697755",
|
|
228
|
+
// "prev_closing_price": "0.0515943",
|
|
229
|
+
// "units_traded_24H": "43.368879902677400513",
|
|
230
|
+
// "acc_trade_value_24H": "2.24165339555398079994373342",
|
|
231
|
+
// "fluctate_24H": "-0.00018203",
|
|
232
|
+
// "fluctate_rate_24H": "-0.35"
|
|
233
|
+
// },
|
|
234
|
+
// "XRP": {
|
|
235
|
+
// "opening_price": "0.00000918",
|
|
236
|
+
// "closing_price": "0.0000092",
|
|
237
|
+
// "min_price": "0.00000918",
|
|
238
|
+
// "max_price": "0.0000092",
|
|
239
|
+
// "units_traded": "6516.949363",
|
|
240
|
+
// "acc_trade_value": "0.0598792533602796",
|
|
241
|
+
// "prev_closing_price": "0.00000916",
|
|
242
|
+
// "units_traded_24H": "229161.50354738",
|
|
243
|
+
// "acc_trade_value_24H": "2.0446589371637117",
|
|
244
|
+
// "fluctate_24H": "0.00000049",
|
|
245
|
+
// "fluctate_rate_24H": "5.63"
|
|
246
|
+
// },
|
|
247
|
+
// ...
|
|
248
|
+
// "date": "1721675913145"
|
|
249
|
+
// }
|
|
250
|
+
// }
|
|
251
|
+
//
|
|
252
|
+
}
|
|
253
|
+
const results = await Promise.all(promises);
|
|
254
|
+
for (let i = 0; i < quotes.length; i++) {
|
|
255
|
+
const quote = quotes[i];
|
|
256
|
+
const quoteId = quote;
|
|
257
|
+
const response = results[i];
|
|
258
|
+
const data = this.safeDict(response, 'data');
|
|
259
|
+
const extension = this.safeDict(quoteCurrencies, quote, {});
|
|
220
260
|
const currencyIds = Object.keys(data);
|
|
221
261
|
for (let j = 0; j < currencyIds.length; j++) {
|
|
222
262
|
const currencyId = currencyIds[j];
|
|
@@ -285,7 +325,7 @@ export default class bithumb extends Exchange {
|
|
|
285
325
|
}
|
|
286
326
|
parseBalance(response) {
|
|
287
327
|
const result = { 'info': response };
|
|
288
|
-
const balances = this.
|
|
328
|
+
const balances = this.safeDict(response, 'data');
|
|
289
329
|
const codes = Object.keys(this.currencies);
|
|
290
330
|
for (let i = 0; i < codes.length; i++) {
|
|
291
331
|
const code = codes[i];
|
|
@@ -356,7 +396,7 @@ export default class bithumb extends Exchange {
|
|
|
356
396
|
// }
|
|
357
397
|
// }
|
|
358
398
|
//
|
|
359
|
-
const data = this.
|
|
399
|
+
const data = this.safeDict(response, 'data', {});
|
|
360
400
|
const timestamp = this.safeInteger(data, 'timestamp');
|
|
361
401
|
return this.parseOrderBook(data, symbol, timestamp, 'bids', 'asks', 'price', 'quantity');
|
|
362
402
|
}
|
|
@@ -420,15 +460,19 @@ export default class bithumb extends Exchange {
|
|
|
420
460
|
*/
|
|
421
461
|
await this.loadMarkets();
|
|
422
462
|
const result = {};
|
|
423
|
-
const quoteCurrencies = this.
|
|
463
|
+
const quoteCurrencies = this.safeDict(this.options, 'quoteCurrencies', {});
|
|
424
464
|
const quotes = Object.keys(quoteCurrencies);
|
|
465
|
+
const promises = [];
|
|
425
466
|
for (let i = 0; i < quotes.length; i++) {
|
|
426
|
-
const quote = quotes[i];
|
|
427
|
-
const quoteId = quote;
|
|
428
467
|
const request = {
|
|
429
|
-
'quoteId':
|
|
468
|
+
'quoteId': quotes[i],
|
|
430
469
|
};
|
|
431
|
-
|
|
470
|
+
promises.push(this.publicGetTickerALLQuoteId(this.extend(request, params)));
|
|
471
|
+
}
|
|
472
|
+
const responses = await Promise.all(promises);
|
|
473
|
+
for (let i = 0; i < quotes.length; i++) {
|
|
474
|
+
const quote = quotes[i];
|
|
475
|
+
const response = responses[i];
|
|
432
476
|
//
|
|
433
477
|
// {
|
|
434
478
|
// "status":"0000",
|
|
@@ -450,7 +494,7 @@ export default class bithumb extends Exchange {
|
|
|
450
494
|
// }
|
|
451
495
|
// }
|
|
452
496
|
//
|
|
453
|
-
const data = this.
|
|
497
|
+
const data = this.safeDict(response, 'data', {});
|
|
454
498
|
const timestamp = this.safeInteger(data, 'date');
|
|
455
499
|
const tickers = this.omit(data, 'date');
|
|
456
500
|
const currencyIds = Object.keys(tickers);
|
|
@@ -835,7 +879,7 @@ export default class bithumb extends Exchange {
|
|
|
835
879
|
// }
|
|
836
880
|
//
|
|
837
881
|
const timestamp = this.safeIntegerProduct(order, 'order_date', 0.001);
|
|
838
|
-
const sideProperty = this.
|
|
882
|
+
const sideProperty = this.safeString2(order, 'type', 'side');
|
|
839
883
|
const side = (sideProperty === 'bid') ? 'buy' : 'sell';
|
|
840
884
|
const status = this.parseOrderStatus(this.safeString(order, 'order_status'));
|
|
841
885
|
const price = this.safeString2(order, 'order_price', 'price');
|
|
@@ -866,7 +910,7 @@ export default class bithumb extends Exchange {
|
|
|
866
910
|
symbol = market['symbol'];
|
|
867
911
|
}
|
|
868
912
|
const id = this.safeString(order, 'order_id');
|
|
869
|
-
const rawTrades = this.
|
|
913
|
+
const rawTrades = this.safeList(order, 'contract', []);
|
|
870
914
|
return this.safeOrder({
|
|
871
915
|
'info': order,
|
|
872
916
|
'id': id,
|
package/js/src/hyperliquid.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import Exchange from './abstract/hyperliquid.js';
|
|
2
|
-
import type { Market, TransferEntry, Balances, Int, OrderBook, OHLCV, Str, FundingRateHistory, Order, OrderType, OrderSide, Trade, Strings, Position, OrderRequest, Dict, Num, MarginModification, Currencies, CancellationRequest, int, Transaction, Currency, TradingFeeInterface } from './base/types.js';
|
|
2
|
+
import type { Market, TransferEntry, Balances, Int, OrderBook, OHLCV, Str, FundingRateHistory, Order, OrderType, OrderSide, Trade, Strings, Position, OrderRequest, Dict, Num, MarginModification, Currencies, CancellationRequest, int, Transaction, Currency, TradingFeeInterface, Ticker, Tickers } from './base/types.js';
|
|
3
3
|
/**
|
|
4
4
|
* @class hyperliquid
|
|
5
5
|
* @augments Exchange
|
|
@@ -14,6 +14,8 @@ export default class hyperliquid extends Exchange {
|
|
|
14
14
|
parseMarket(market: Dict): Market;
|
|
15
15
|
fetchBalance(params?: {}): Promise<Balances>;
|
|
16
16
|
fetchOrderBook(symbol: string, limit?: Int, params?: {}): Promise<OrderBook>;
|
|
17
|
+
fetchTickers(symbols?: Strings, params?: {}): Promise<Tickers>;
|
|
18
|
+
parseTicker(ticker: Dict, market?: Market): Ticker;
|
|
17
19
|
fetchOHLCV(symbol: string, timeframe?: string, since?: Int, limit?: Int, params?: {}): Promise<OHLCV[]>;
|
|
18
20
|
parseOHLCV(ohlcv: any, market?: Market): OHLCV;
|
|
19
21
|
fetchTrades(symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Trade[]>;
|
package/js/src/hyperliquid.js
CHANGED
|
@@ -97,8 +97,8 @@ export default class hyperliquid extends Exchange {
|
|
|
97
97
|
'fetchPositions': true,
|
|
98
98
|
'fetchPositionsRisk': false,
|
|
99
99
|
'fetchPremiumIndexOHLCV': false,
|
|
100
|
-
'fetchTicker':
|
|
101
|
-
'fetchTickers':
|
|
100
|
+
'fetchTicker': 'emulated',
|
|
101
|
+
'fetchTickers': true,
|
|
102
102
|
'fetchTime': false,
|
|
103
103
|
'fetchTrades': true,
|
|
104
104
|
'fetchTradingFee': true,
|
|
@@ -327,12 +327,12 @@ export default class hyperliquid extends Exchange {
|
|
|
327
327
|
// ]
|
|
328
328
|
//
|
|
329
329
|
//
|
|
330
|
-
|
|
331
|
-
|
|
330
|
+
const meta = this.safeDict(response, 0, {});
|
|
331
|
+
const universe = this.safeList(meta, 'universe', []);
|
|
332
332
|
const assetCtxs = this.safeDict(response, 1, {});
|
|
333
333
|
const result = [];
|
|
334
|
-
for (let i = 0; i <
|
|
335
|
-
const data = this.extend(this.safeDict(
|
|
334
|
+
for (let i = 0; i < universe.length; i++) {
|
|
335
|
+
const data = this.extend(this.safeDict(universe, i, {}), this.safeDict(assetCtxs, i, {}));
|
|
336
336
|
data['baseId'] = i;
|
|
337
337
|
result.push(data);
|
|
338
338
|
}
|
|
@@ -447,11 +447,13 @@ export default class hyperliquid extends Exchange {
|
|
|
447
447
|
//
|
|
448
448
|
// response differs depending on the environment (mainnet vs sandbox)
|
|
449
449
|
const first = this.safeDict(response, 0, {});
|
|
450
|
+
const second = this.safeList(response, 1, []);
|
|
450
451
|
const meta = this.safeList2(first, 'universe', 'spot_infos', []);
|
|
451
452
|
const tokens = this.safeList2(first, 'tokens', 'token_infos', []);
|
|
452
453
|
const markets = [];
|
|
453
454
|
for (let i = 0; i < meta.length; i++) {
|
|
454
455
|
const market = this.safeDict(meta, i, {});
|
|
456
|
+
const extraData = this.safeDict(second, i, {});
|
|
455
457
|
const marketName = this.safeString(market, 'name');
|
|
456
458
|
// if (marketName.indexOf ('/') < 0) {
|
|
457
459
|
// // there are some weird spot markets in testnet, eg @2
|
|
@@ -528,7 +530,7 @@ export default class hyperliquid extends Exchange {
|
|
|
528
530
|
},
|
|
529
531
|
},
|
|
530
532
|
'created': undefined,
|
|
531
|
-
'info': market,
|
|
533
|
+
'info': this.extend(extraData, market),
|
|
532
534
|
}));
|
|
533
535
|
}
|
|
534
536
|
return markets;
|
|
@@ -756,6 +758,60 @@ export default class hyperliquid extends Exchange {
|
|
|
756
758
|
const timestamp = this.safeInteger(response, 'time');
|
|
757
759
|
return this.parseOrderBook(result, market['symbol'], timestamp, 'bids', 'asks', 'px', 'sz');
|
|
758
760
|
}
|
|
761
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
762
|
+
/**
|
|
763
|
+
* @method
|
|
764
|
+
* @name hyperliquid#fetchTickers
|
|
765
|
+
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
766
|
+
* @see https://www.bitmex.com/api/explorer/#!/Instrument/Instrument_getActiveAndIndices
|
|
767
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
768
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
769
|
+
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
770
|
+
*/
|
|
771
|
+
await this.loadMarkets();
|
|
772
|
+
symbols = this.marketSymbols(symbols);
|
|
773
|
+
// at this stage, to get tickers data, we use fetchMarkets endpoints
|
|
774
|
+
const response = await this.fetchMarkets(params);
|
|
775
|
+
// same response as under "fetchMarkets"
|
|
776
|
+
const result = {};
|
|
777
|
+
for (let i = 0; i < response.length; i++) {
|
|
778
|
+
const market = response[i];
|
|
779
|
+
const info = market['info'];
|
|
780
|
+
const ticker = this.parseTicker(info, market);
|
|
781
|
+
const symbol = this.safeString(ticker, 'symbol');
|
|
782
|
+
result[symbol] = ticker;
|
|
783
|
+
}
|
|
784
|
+
return this.filterByArrayTickers(result, 'symbol', symbols);
|
|
785
|
+
}
|
|
786
|
+
parseTicker(ticker, market = undefined) {
|
|
787
|
+
//
|
|
788
|
+
// {
|
|
789
|
+
// "prevDayPx": "3400.5",
|
|
790
|
+
// "dayNtlVlm": "511297257.47936022",
|
|
791
|
+
// "markPx": "3464.7",
|
|
792
|
+
// "midPx": "3465.05",
|
|
793
|
+
// "oraclePx": "3460.1", // only in swap
|
|
794
|
+
// "openInterest": "64638.1108", // only in swap
|
|
795
|
+
// "premium": "0.00141614", // only in swap
|
|
796
|
+
// "funding": "0.00008727", // only in swap
|
|
797
|
+
// "impactPxs": [ "3465.0", "3465.1" ], // only in swap
|
|
798
|
+
// "coin": "PURR", // only in spot
|
|
799
|
+
// "circulatingSupply": "998949190.03400207", // only in spot
|
|
800
|
+
// },
|
|
801
|
+
//
|
|
802
|
+
const bidAsk = this.safeList(ticker, 'impactPxs');
|
|
803
|
+
return this.safeTicker({
|
|
804
|
+
'symbol': market['symbol'],
|
|
805
|
+
'timestamp': undefined,
|
|
806
|
+
'datetime': undefined,
|
|
807
|
+
'previousClose': this.safeNumber(ticker, 'prevDayPx'),
|
|
808
|
+
'close': this.safeNumber(ticker, 'midPx'),
|
|
809
|
+
'bid': this.safeNumber(bidAsk, 0),
|
|
810
|
+
'ask': this.safeNumber(bidAsk, 1),
|
|
811
|
+
'quoteVolume': this.safeNumber(ticker, 'dayNtlVlm'),
|
|
812
|
+
'info': ticker,
|
|
813
|
+
}, market);
|
|
814
|
+
}
|
|
759
815
|
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
760
816
|
/**
|
|
761
817
|
* @method
|
|
@@ -9,7 +9,7 @@ import Exchange from './abstract/independentreserve.js';
|
|
|
9
9
|
import { Precise } from './base/Precise.js';
|
|
10
10
|
import { TICK_SIZE } from './base/functions/number.js';
|
|
11
11
|
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
12
|
-
import { BadRequest } from '
|
|
12
|
+
import { BadRequest } from './base/errors.js';
|
|
13
13
|
// ---------------------------------------------------------------------------
|
|
14
14
|
/**
|
|
15
15
|
* @class independentreserve
|
package/js/src/kraken.d.ts
CHANGED
|
@@ -11,6 +11,13 @@ export default class kraken extends Exchange {
|
|
|
11
11
|
fetchMarkets(params?: {}): Promise<Market[]>;
|
|
12
12
|
safeCurrency(currencyId: any, currency?: Currency): import("./base/types.js").CurrencyInterface;
|
|
13
13
|
appendInactiveMarkets(result: any): any;
|
|
14
|
+
fetchStatus(params?: {}): Promise<{
|
|
15
|
+
status: string;
|
|
16
|
+
updated: any;
|
|
17
|
+
eta: any;
|
|
18
|
+
url: any;
|
|
19
|
+
info: any;
|
|
20
|
+
}>;
|
|
14
21
|
fetchCurrencies(params?: {}): Promise<Currencies>;
|
|
15
22
|
fetchTradingFee(symbol: string, params?: {}): Promise<TradingFeeInterface>;
|
|
16
23
|
parseTradingFee(response: any, market: any): {
|
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
|
package/js/src/pro/bitget.d.ts
CHANGED
|
@@ -43,7 +43,7 @@ export default class bitget extends bitgetRest {
|
|
|
43
43
|
handleAuthenticate(client: Client, message: any): void;
|
|
44
44
|
handleErrorMessage(client: Client, message: any): boolean;
|
|
45
45
|
handleMessage(client: Client, message: any): void;
|
|
46
|
-
ping(client:
|
|
46
|
+
ping(client: Client): string;
|
|
47
47
|
handlePong(client: Client, message: any): any;
|
|
48
48
|
handleSubscriptionStatus(client: Client, message: any): any;
|
|
49
49
|
}
|
package/js/src/pro/bybit.d.ts
CHANGED
|
@@ -46,7 +46,7 @@ export default class bybit extends bybitRest {
|
|
|
46
46
|
authenticate(url: any, params?: {}): Promise<any>;
|
|
47
47
|
handleErrorMessage(client: Client, message: any): boolean;
|
|
48
48
|
handleMessage(client: Client, message: any): void;
|
|
49
|
-
ping(client:
|
|
49
|
+
ping(client: Client): {
|
|
50
50
|
req_id: any;
|
|
51
51
|
op: string;
|
|
52
52
|
};
|
package/js/src/pro/coinone.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export default class coinone extends coinoneRest {
|
|
|
14
14
|
parseWsTrade(trade: Dict, market?: Market): Trade;
|
|
15
15
|
handleErrorMessage(client: Client, message: any): boolean;
|
|
16
16
|
handleMessage(client: Client, message: any): void;
|
|
17
|
-
ping(client:
|
|
17
|
+
ping(client: Client): {
|
|
18
18
|
request_type: string;
|
|
19
19
|
};
|
|
20
20
|
handlePong(client: Client, message: any): any;
|
|
@@ -3,7 +3,7 @@ import type { Int, OrderBook, Trade, Ticker, OHLCV, Balances } from '../base/typ
|
|
|
3
3
|
import Client from '../base/ws/Client.js';
|
|
4
4
|
export default class currencycom extends currencycomRest {
|
|
5
5
|
describe(): any;
|
|
6
|
-
ping(client:
|
|
6
|
+
ping(client: Client): {
|
|
7
7
|
destination: string;
|
|
8
8
|
correlationId: any;
|
|
9
9
|
payload: {};
|
package/js/src/pro/hollaex.d.ts
CHANGED
|
@@ -17,7 +17,7 @@ export default class hollaex extends hollaexRest {
|
|
|
17
17
|
watchPrivate(messageHash: any, params?: {}): Promise<any>;
|
|
18
18
|
handleErrorMessage(client: Client, message: any): any;
|
|
19
19
|
handleMessage(client: Client, message: any): void;
|
|
20
|
-
ping(client:
|
|
20
|
+
ping(client: Client): {
|
|
21
21
|
op: string;
|
|
22
22
|
};
|
|
23
23
|
handlePong(client: Client, message: any): any;
|
|
@@ -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;
|
|
@@ -16,7 +19,7 @@ export default class hyperliquid extends hyperliquidRest {
|
|
|
16
19
|
handleOrder(client: Client, message: any): void;
|
|
17
20
|
handleErrorMessage(client: Client, message: any): boolean;
|
|
18
21
|
handleMessage(client: Client, message: any): void;
|
|
19
|
-
ping(client:
|
|
22
|
+
ping(client: Client): {
|
|
20
23
|
method: string;
|
|
21
24
|
};
|
|
22
25
|
handlePong(client: Client, message: any): any;
|
|
@@ -20,7 +20,7 @@ export default class hyperliquid extends hyperliquidRest {
|
|
|
20
20
|
'watchOrderBook': true,
|
|
21
21
|
'watchOrders': true,
|
|
22
22
|
'watchTicker': false,
|
|
23
|
-
'watchTickers':
|
|
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/kucoin.d.ts
CHANGED
|
@@ -39,7 +39,7 @@ export default class kucoin extends kucoinRest {
|
|
|
39
39
|
watchBalance(params?: {}): Promise<Balances>;
|
|
40
40
|
handleBalance(client: Client, message: any): void;
|
|
41
41
|
handleSubject(client: Client, message: any): void;
|
|
42
|
-
ping(client:
|
|
42
|
+
ping(client: Client): {
|
|
43
43
|
id: any;
|
|
44
44
|
type: string;
|
|
45
45
|
};
|
|
@@ -42,7 +42,7 @@ export default class kucoinfutures extends kucoinfuturesRest {
|
|
|
42
42
|
fetchBalanceSnapshot(client: any, message: any): Promise<void>;
|
|
43
43
|
handleSubject(client: Client, message: any): void;
|
|
44
44
|
getMessageHash(elementName: string, symbol?: Str): string;
|
|
45
|
-
ping(client:
|
|
45
|
+
ping(client: Client): {
|
|
46
46
|
id: any;
|
|
47
47
|
type: string;
|
|
48
48
|
};
|
package/js/src/pro/mexc.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export default class mexc extends mexcRest {
|
|
|
37
37
|
handlePong(client: Client, message: any): any;
|
|
38
38
|
handleSubscriptionStatus(client: Client, message: any): void;
|
|
39
39
|
handleMessage(client: Client, message: any): void;
|
|
40
|
-
ping(client:
|
|
40
|
+
ping(client: Client): {
|
|
41
41
|
method: string;
|
|
42
42
|
};
|
|
43
43
|
}
|
package/js/src/pro/okcoin.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export default class okcoin extends okcoinRest {
|
|
|
23
23
|
handleBalance(client: Client, message: any): void;
|
|
24
24
|
handleSubscriptionStatus(client: Client, message: any): any;
|
|
25
25
|
handleAuthenticate(client: Client, message: any): any;
|
|
26
|
-
ping(client:
|
|
26
|
+
ping(client: Client): string;
|
|
27
27
|
handlePong(client: Client, message: any): any;
|
|
28
28
|
handleErrorMessage(client: Client, message: any): any;
|
|
29
29
|
handleMessage(client: Client, message: any): void;
|
package/js/src/pro/okx.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export default class okx extends okxRest {
|
|
|
28
28
|
watchOrderBookForSymbols(symbols: string[], limit?: Int, params?: {}): Promise<OrderBook>;
|
|
29
29
|
handleDelta(bookside: any, delta: any): void;
|
|
30
30
|
handleDeltas(bookside: any, deltas: any): void;
|
|
31
|
-
handleOrderBookMessage(client: Client, message: any, orderbook: any, messageHash: any): any;
|
|
31
|
+
handleOrderBookMessage(client: Client, message: any, orderbook: any, messageHash: any, market?: any): any;
|
|
32
32
|
handleOrderBook(client: Client, message: any): any;
|
|
33
33
|
authenticate(params?: {}): Promise<any>;
|
|
34
34
|
watchBalance(params?: {}): Promise<Balances>;
|
|
@@ -50,7 +50,7 @@ export default class okx extends okxRest {
|
|
|
50
50
|
handleCancelAllOrders(client: Client, message: any): void;
|
|
51
51
|
handleSubscriptionStatus(client: Client, message: any): any;
|
|
52
52
|
handleAuthenticate(client: Client, message: any): void;
|
|
53
|
-
ping(client:
|
|
53
|
+
ping(client: Client): string;
|
|
54
54
|
handlePong(client: Client, message: any): any;
|
|
55
55
|
handleErrorMessage(client: Client, message: any): any;
|
|
56
56
|
handleMessage(client: Client, message: any): void;
|