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/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 +1 -1
- package/dist/cjs/src/bybit.js +12 -4
- 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 +5 -5
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/base/Exchange.js +1 -1
- package/js/src/bybit.js +12 -4
- 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/hyperliquid.d.ts +4 -1
- package/js/src/pro/hyperliquid.js +103 -1
- package/js/src/pro/okx.js +5 -5
- package/package.json +1 -1
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':
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1818
|
+
const messageHash = this.milliseconds().toString();
|
|
1819
1819
|
const request = {
|
|
1820
1820
|
'id': messageHash,
|
|
1821
1821
|
'op': 'mass-cancel',
|
package/package.json
CHANGED