ccxt 4.5.8 → 4.5.10
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 -7
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +111 -17
- package/dist/cjs/src/base/ws/Client.js +4 -0
- package/dist/cjs/src/bitget.js +59 -72
- package/dist/cjs/src/coinbaseexchange.js +15 -0
- package/dist/cjs/src/hyperliquid.js +0 -3
- package/dist/cjs/src/latoken.js +1 -0
- package/dist/cjs/src/phemex.js +15 -6
- package/dist/cjs/src/pro/alpaca.js +1 -1
- package/dist/cjs/src/pro/apex.js +4 -4
- package/dist/cjs/src/pro/binance.js +2 -1
- package/dist/cjs/src/pro/bitfinex.js +1 -1
- package/dist/cjs/src/pro/bitget.js +1 -1
- package/dist/cjs/src/pro/bitmart.js +1 -1
- package/dist/cjs/src/pro/bitmex.js +1 -1
- package/dist/cjs/src/pro/bitvavo.js +6 -6
- package/dist/cjs/src/pro/blockchaincom.js +1 -1
- package/dist/cjs/src/pro/bybit.js +2 -1
- package/dist/cjs/src/pro/cex.js +2 -2
- package/dist/cjs/src/pro/coincatch.js +1 -1
- package/dist/cjs/src/pro/coinex.js +3 -3
- package/dist/cjs/src/pro/cryptocom.js +1 -1
- package/dist/cjs/src/pro/derive.js +1 -1
- package/dist/cjs/src/pro/gate.js +1 -1
- package/dist/cjs/src/pro/hitbtc.js +1 -1
- package/dist/cjs/src/pro/htx.js +2 -2
- package/dist/cjs/src/pro/kraken.js +8 -8
- package/dist/cjs/src/pro/krakenfutures.js +1 -1
- package/dist/cjs/src/pro/kucoin.js +4 -4
- package/dist/cjs/src/pro/kucoinfutures.js +4 -4
- package/dist/cjs/src/pro/mexc.js +6 -1
- package/dist/cjs/src/pro/modetrade.js +2 -2
- package/dist/cjs/src/pro/okx.js +4 -2
- package/dist/cjs/src/pro/onetrading.js +1 -1
- package/dist/cjs/src/pro/oxfun.js +1 -1
- package/dist/cjs/src/pro/toobit.js +1 -1
- package/dist/cjs/src/pro/whitebit.js +1 -1
- package/dist/cjs/src/pro/woo.js +1 -1
- package/dist/cjs/src/pro/woofipro.js +2 -2
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/coinbaseexchange.d.ts +15 -0
- package/js/src/base/Exchange.d.ts +13 -5
- package/js/src/base/Exchange.js +111 -17
- package/js/src/base/ws/Client.d.ts +1 -0
- package/js/src/base/ws/Client.js +4 -0
- package/js/src/bitget.js +59 -72
- package/js/src/coinbaseexchange.js +15 -0
- package/js/src/hyperliquid.js +0 -3
- package/js/src/latoken.js +1 -0
- package/js/src/phemex.js +15 -6
- package/js/src/pro/alpaca.js +1 -1
- package/js/src/pro/apex.js +4 -4
- package/js/src/pro/binance.d.ts +1 -1
- package/js/src/pro/binance.js +2 -1
- package/js/src/pro/bitfinex.js +1 -1
- package/js/src/pro/bitget.js +1 -1
- package/js/src/pro/bitmart.js +1 -1
- package/js/src/pro/bitmex.js +1 -1
- package/js/src/pro/bitvavo.d.ts +3 -3
- package/js/src/pro/bitvavo.js +6 -6
- package/js/src/pro/blockchaincom.js +1 -1
- package/js/src/pro/bybit.js +2 -1
- package/js/src/pro/cex.js +2 -2
- package/js/src/pro/coincatch.js +1 -1
- package/js/src/pro/coinex.js +3 -3
- package/js/src/pro/cryptocom.d.ts +1 -1
- package/js/src/pro/cryptocom.js +1 -1
- package/js/src/pro/derive.js +1 -1
- package/js/src/pro/gate.d.ts +1 -1
- package/js/src/pro/gate.js +1 -1
- package/js/src/pro/hitbtc.d.ts +1 -1
- package/js/src/pro/hitbtc.js +1 -1
- package/js/src/pro/htx.js +2 -2
- package/js/src/pro/hyperliquid.d.ts +1 -1
- package/js/src/pro/kraken.d.ts +2 -2
- package/js/src/pro/kraken.js +8 -8
- package/js/src/pro/krakenfutures.js +1 -1
- package/js/src/pro/kucoin.js +4 -4
- package/js/src/pro/kucoinfutures.js +4 -4
- package/js/src/pro/mexc.js +6 -1
- package/js/src/pro/modetrade.js +2 -2
- package/js/src/pro/okx.d.ts +2 -2
- package/js/src/pro/okx.js +4 -2
- package/js/src/pro/onetrading.js +1 -1
- package/js/src/pro/oxfun.d.ts +1 -1
- package/js/src/pro/oxfun.js +1 -1
- package/js/src/pro/poloniex.d.ts +2 -2
- package/js/src/pro/toobit.js +1 -1
- package/js/src/pro/whitebit.js +1 -1
- package/js/src/pro/woo.js +1 -1
- package/js/src/pro/woofipro.js +2 -2
- package/package.json +21 -10
package/js/src/base/ws/Client.js
CHANGED
|
@@ -47,6 +47,10 @@ export default class Client {
|
|
|
47
47
|
// connection-related Future
|
|
48
48
|
this.connected = Future();
|
|
49
49
|
}
|
|
50
|
+
reusableFuture(messageHash) {
|
|
51
|
+
// only used in go
|
|
52
|
+
return this.future(messageHash);
|
|
53
|
+
}
|
|
50
54
|
future(messageHash) {
|
|
51
55
|
if (!(messageHash in this.futures)) {
|
|
52
56
|
this.futures[messageHash] = Future();
|
package/js/src/bitget.js
CHANGED
|
@@ -4358,10 +4358,53 @@ export default class bitget extends Exchange {
|
|
|
4358
4358
|
response = await this.privateMixGetV2MixAccountAccounts(this.extend(request, params));
|
|
4359
4359
|
}
|
|
4360
4360
|
else if (marginMode === 'isolated') {
|
|
4361
|
-
response = await this.
|
|
4361
|
+
response = await this.privateMarginGetV2MarginIsolatedAccountAssets(this.extend(request, params));
|
|
4362
|
+
//
|
|
4363
|
+
// {
|
|
4364
|
+
// "code": "00000",
|
|
4365
|
+
// "msg": "success",
|
|
4366
|
+
// "requestTime": "1759829170717",
|
|
4367
|
+
// "data": [
|
|
4368
|
+
// {
|
|
4369
|
+
// "symbol": "BTCUSDT",
|
|
4370
|
+
// "coin": "USDT",
|
|
4371
|
+
// "totalAmount": "0.000001",
|
|
4372
|
+
// "available": "0.000001",
|
|
4373
|
+
// "frozen": "0",
|
|
4374
|
+
// "borrow": "0",
|
|
4375
|
+
// "interest": "0",
|
|
4376
|
+
// "net": "0.000001",
|
|
4377
|
+
// "coupon": "0",
|
|
4378
|
+
// "cTime": "1759826434145",
|
|
4379
|
+
// "uTime": "1759826434146"
|
|
4380
|
+
// },
|
|
4381
|
+
// ]
|
|
4382
|
+
// }
|
|
4383
|
+
//
|
|
4362
4384
|
}
|
|
4363
4385
|
else if (marginMode === 'cross') {
|
|
4364
|
-
response = await this.
|
|
4386
|
+
response = await this.privateMarginGetV2MarginCrossedAccountAssets(this.extend(request, params));
|
|
4387
|
+
//
|
|
4388
|
+
// {
|
|
4389
|
+
// "code": "00000",
|
|
4390
|
+
// "msg": "success",
|
|
4391
|
+
// "requestTime": "1759828519501",
|
|
4392
|
+
// "data": [
|
|
4393
|
+
// {
|
|
4394
|
+
// "coin": "USDT",
|
|
4395
|
+
// "totalAmount": "0.01",
|
|
4396
|
+
// "available": "0.01",
|
|
4397
|
+
// "frozen": "0",
|
|
4398
|
+
// "borrow": "0",
|
|
4399
|
+
// "interest": "0",
|
|
4400
|
+
// "net": "0.01",
|
|
4401
|
+
// "coupon": "0",
|
|
4402
|
+
// "cTime": "1759828511592",
|
|
4403
|
+
// "uTime": "1759828511592"
|
|
4404
|
+
// }
|
|
4405
|
+
// ]
|
|
4406
|
+
// }
|
|
4407
|
+
//
|
|
4365
4408
|
}
|
|
4366
4409
|
else if (marketType === 'spot') {
|
|
4367
4410
|
response = await this.privateSpotGetV2SpotAccountAssets(this.extend(request, params));
|
|
@@ -4413,49 +4456,6 @@ export default class bitget extends Exchange {
|
|
|
4413
4456
|
// ]
|
|
4414
4457
|
// }
|
|
4415
4458
|
//
|
|
4416
|
-
// isolated margin
|
|
4417
|
-
//
|
|
4418
|
-
// {
|
|
4419
|
-
// "code": "00000",
|
|
4420
|
-
// "msg": "success",
|
|
4421
|
-
// "requestTime": 1697501436571,
|
|
4422
|
-
// "data": [
|
|
4423
|
-
// {
|
|
4424
|
-
// "symbol": "BTCUSDT",
|
|
4425
|
-
// "coin": "BTC",
|
|
4426
|
-
// "totalAmount": "0.00021654",
|
|
4427
|
-
// "available": "0.00021654",
|
|
4428
|
-
// "transferable": "0.00021654",
|
|
4429
|
-
// "frozen": "0",
|
|
4430
|
-
// "borrow": "0",
|
|
4431
|
-
// "interest": "0",
|
|
4432
|
-
// "net": "0.00021654",
|
|
4433
|
-
// "ctime": "1697248128071"
|
|
4434
|
-
// },
|
|
4435
|
-
// ]
|
|
4436
|
-
// }
|
|
4437
|
-
//
|
|
4438
|
-
// cross margin
|
|
4439
|
-
//
|
|
4440
|
-
// {
|
|
4441
|
-
// "code": "00000",
|
|
4442
|
-
// "msg": "success",
|
|
4443
|
-
// "requestTime": 1697515463804,
|
|
4444
|
-
// "data": [
|
|
4445
|
-
// {
|
|
4446
|
-
// "coin": "BTC",
|
|
4447
|
-
// "totalAmount": "0.00024996",
|
|
4448
|
-
// "available": "0.00024996",
|
|
4449
|
-
// "transferable": "0.00004994",
|
|
4450
|
-
// "frozen": "0",
|
|
4451
|
-
// "borrow": "0.0001",
|
|
4452
|
-
// "interest": "0.00000001",
|
|
4453
|
-
// "net": "0.00014995",
|
|
4454
|
-
// "ctime": "1697251265504"
|
|
4455
|
-
// },
|
|
4456
|
-
// ]
|
|
4457
|
-
// }
|
|
4458
|
-
//
|
|
4459
4459
|
// uta
|
|
4460
4460
|
//
|
|
4461
4461
|
// {
|
|
@@ -4550,34 +4550,21 @@ export default class bitget extends Exchange {
|
|
|
4550
4550
|
// "isolatedUnrealizedPL": null
|
|
4551
4551
|
// }
|
|
4552
4552
|
//
|
|
4553
|
-
// isolated margin
|
|
4554
|
-
//
|
|
4555
|
-
// {
|
|
4556
|
-
// "symbol": "BTCUSDT",
|
|
4557
|
-
// "coin": "BTC",
|
|
4558
|
-
// "totalAmount": "0.00021654",
|
|
4559
|
-
// "available": "0.00021654",
|
|
4560
|
-
// "transferable": "0.00021654",
|
|
4561
|
-
// "frozen": "0",
|
|
4562
|
-
// "borrow": "0",
|
|
4563
|
-
// "interest": "0",
|
|
4564
|
-
// "net": "0.00021654",
|
|
4565
|
-
// "ctime": "1697248128071"
|
|
4566
|
-
// }
|
|
4567
|
-
//
|
|
4568
|
-
// cross margin
|
|
4553
|
+
// cross & isolated margin
|
|
4569
4554
|
//
|
|
4570
|
-
//
|
|
4571
|
-
//
|
|
4572
|
-
//
|
|
4573
|
-
//
|
|
4574
|
-
//
|
|
4575
|
-
//
|
|
4576
|
-
//
|
|
4577
|
-
//
|
|
4578
|
-
//
|
|
4579
|
-
//
|
|
4580
|
-
//
|
|
4555
|
+
// {
|
|
4556
|
+
// "coin": "USDT",
|
|
4557
|
+
// "totalAmount": "0.01",
|
|
4558
|
+
// "available": "0.01",
|
|
4559
|
+
// "frozen": "0",
|
|
4560
|
+
// "borrow": "0",
|
|
4561
|
+
// "interest": "0",
|
|
4562
|
+
// "net": "0.01",
|
|
4563
|
+
// "coupon": "0",
|
|
4564
|
+
// "cTime": "1759828511592",
|
|
4565
|
+
// "uTime": "1759828511592"
|
|
4566
|
+
// // "symbol": "BTCUSDT" // only for isolated margin
|
|
4567
|
+
// }
|
|
4581
4568
|
//
|
|
4582
4569
|
for (let i = 0; i < balance.length; i++) {
|
|
4583
4570
|
const entry = balance[i];
|
|
@@ -214,7 +214,19 @@ export default class coinbaseexchange extends Exchange {
|
|
|
214
214
|
'users/self/trailing-volume',
|
|
215
215
|
'withdrawals/fee-estimate',
|
|
216
216
|
'conversions/{conversion_id}',
|
|
217
|
+
'conversions',
|
|
217
218
|
'conversions/fees',
|
|
219
|
+
'loans/lending-overview',
|
|
220
|
+
'loans/lending-overview-xm',
|
|
221
|
+
'loans/loan-preview',
|
|
222
|
+
'loans/loan-preview-xm',
|
|
223
|
+
'loans/repayment-preview',
|
|
224
|
+
'loans/repayment-preview-xm',
|
|
225
|
+
'loans/interest/{loan_id}',
|
|
226
|
+
'loans/interest/history/{loan_id}',
|
|
227
|
+
'loans/interest',
|
|
228
|
+
'loans/assets',
|
|
229
|
+
'loans',
|
|
218
230
|
],
|
|
219
231
|
'post': [
|
|
220
232
|
'conversions',
|
|
@@ -231,6 +243,9 @@ export default class coinbaseexchange extends Exchange {
|
|
|
231
243
|
'withdrawals/coinbase-account',
|
|
232
244
|
'withdrawals/crypto',
|
|
233
245
|
'withdrawals/payment-method',
|
|
246
|
+
'loans/open',
|
|
247
|
+
'loans/repay-interest',
|
|
248
|
+
'loans/repay-principal',
|
|
234
249
|
],
|
|
235
250
|
'delete': [
|
|
236
251
|
'orders',
|
package/js/src/hyperliquid.js
CHANGED
|
@@ -3147,9 +3147,6 @@ export default class hyperliquid extends Exchange {
|
|
|
3147
3147
|
'nonce': nonce,
|
|
3148
3148
|
'signature': transferSig,
|
|
3149
3149
|
};
|
|
3150
|
-
if (vaultAddress !== undefined) {
|
|
3151
|
-
transferRequest['vaultAddress'] = vaultAddress;
|
|
3152
|
-
}
|
|
3153
3150
|
const transferResponse = await this.privatePostExchange(transferRequest);
|
|
3154
3151
|
return transferResponse;
|
|
3155
3152
|
}
|
package/js/src/latoken.js
CHANGED
|
@@ -1606,6 +1606,7 @@ export default class latoken extends Exchange {
|
|
|
1606
1606
|
'TRANSACTION_STATUS_EXECUTED': 'ok',
|
|
1607
1607
|
'TRANSACTION_STATUS_CHECKING': 'pending',
|
|
1608
1608
|
'TRANSACTION_STATUS_CANCELLED': 'canceled',
|
|
1609
|
+
'TRANSACTION_STATUS_FAILED': 'failed',
|
|
1609
1610
|
};
|
|
1610
1611
|
return this.safeString(statuses, status, status);
|
|
1611
1612
|
}
|
package/js/src/phemex.js
CHANGED
|
@@ -4385,13 +4385,25 @@ export default class phemex extends Exchange {
|
|
|
4385
4385
|
}
|
|
4386
4386
|
await this.loadMarkets();
|
|
4387
4387
|
const market = this.market(symbol);
|
|
4388
|
-
if (!market['swap']
|
|
4389
|
-
throw new BadSymbol(this.id + ' setMarginMode() supports swap
|
|
4388
|
+
if (!market['swap']) {
|
|
4389
|
+
throw new BadSymbol(this.id + ' setMarginMode() supports swap contracts only');
|
|
4390
4390
|
}
|
|
4391
4391
|
marginMode = marginMode.toLowerCase();
|
|
4392
4392
|
if (marginMode !== 'isolated' && marginMode !== 'cross') {
|
|
4393
4393
|
throw new BadRequest(this.id + ' setMarginMode() marginMode argument should be isolated or cross');
|
|
4394
4394
|
}
|
|
4395
|
+
const request = {
|
|
4396
|
+
'symbol': market['id'],
|
|
4397
|
+
};
|
|
4398
|
+
const isCross = marginMode === 'cross';
|
|
4399
|
+
if (this.inArray(market['settle'], ['USDT', 'USDC'])) {
|
|
4400
|
+
const currentLeverage = this.safeString(params, 'leverage');
|
|
4401
|
+
if (currentLeverage === undefined) {
|
|
4402
|
+
throw new ArgumentsRequired(this.id + ' setMarginMode() requires a "leverage" parameter for USDT markets');
|
|
4403
|
+
}
|
|
4404
|
+
request['leverageRr'] = isCross ? Precise.stringNeg(Precise.stringAbs(currentLeverage)) : Precise.stringAbs(currentLeverage);
|
|
4405
|
+
return await this.privatePutGPositionsLeverage(this.extend(request, params));
|
|
4406
|
+
}
|
|
4395
4407
|
let leverage = this.safeInteger(params, 'leverage');
|
|
4396
4408
|
if (marginMode === 'cross') {
|
|
4397
4409
|
leverage = 0;
|
|
@@ -4399,10 +4411,7 @@ export default class phemex extends Exchange {
|
|
|
4399
4411
|
if (leverage === undefined) {
|
|
4400
4412
|
throw new ArgumentsRequired(this.id + ' setMarginMode() requires a leverage parameter');
|
|
4401
4413
|
}
|
|
4402
|
-
|
|
4403
|
-
'symbol': market['id'],
|
|
4404
|
-
'leverage': leverage,
|
|
4405
|
-
};
|
|
4414
|
+
request['leverage'] = leverage;
|
|
4406
4415
|
return await this.privatePutPositionsLeverage(this.extend(request, params));
|
|
4407
4416
|
}
|
|
4408
4417
|
/**
|
package/js/src/pro/alpaca.js
CHANGED
|
@@ -571,7 +571,7 @@ export default class alpaca extends alpacaRest {
|
|
|
571
571
|
this.checkRequiredCredentials();
|
|
572
572
|
const messageHash = 'authenticated';
|
|
573
573
|
const client = this.client(url);
|
|
574
|
-
const future = client.
|
|
574
|
+
const future = client.reusableFuture(messageHash);
|
|
575
575
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
576
576
|
if (authenticated === undefined) {
|
|
577
577
|
let request = {
|
package/js/src/pro/apex.js
CHANGED
|
@@ -824,7 +824,7 @@ export default class apex extends apexRest {
|
|
|
824
824
|
const signature = this.hmac(this.encode(messageString), this.encode(this.stringToBase64(this.secret)), sha256, 'base64');
|
|
825
825
|
const messageHash = 'authenticated';
|
|
826
826
|
const client = this.client(url);
|
|
827
|
-
const future = client.
|
|
827
|
+
const future = client.reusableFuture(messageHash);
|
|
828
828
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
829
829
|
if (authenticated === undefined) {
|
|
830
830
|
// auth sign
|
|
@@ -967,10 +967,10 @@ export default class apex extends apexRest {
|
|
|
967
967
|
}
|
|
968
968
|
}
|
|
969
969
|
ping(client) {
|
|
970
|
-
const timeStamp = this.milliseconds()
|
|
971
|
-
client.lastPong = timeStamp;
|
|
970
|
+
const timeStamp = this.milliseconds();
|
|
971
|
+
client.lastPong = timeStamp;
|
|
972
972
|
return {
|
|
973
|
-
'args': [timeStamp],
|
|
973
|
+
'args': [timeStamp.toString()],
|
|
974
974
|
'op': 'ping',
|
|
975
975
|
};
|
|
976
976
|
}
|
package/js/src/pro/binance.d.ts
CHANGED
|
@@ -681,7 +681,7 @@ export default class binance extends binanceRest {
|
|
|
681
681
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
682
682
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
683
683
|
*/
|
|
684
|
-
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<
|
|
684
|
+
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<Order[]>;
|
|
685
685
|
/**
|
|
686
686
|
* @method
|
|
687
687
|
* @name binance#fetchOrderWs
|
package/js/src/pro/binance.js
CHANGED
|
@@ -1479,7 +1479,8 @@ export default class binance extends binanceRest {
|
|
|
1479
1479
|
'id': requestId,
|
|
1480
1480
|
};
|
|
1481
1481
|
params = this.omit(params, 'callerMethodName');
|
|
1482
|
-
const
|
|
1482
|
+
const res = await this.watchMultiple(url, messageHashes, this.extend(request, params), messageHashes, subscribe);
|
|
1483
|
+
const [symbol, timeframe, candles] = res;
|
|
1483
1484
|
if (this.newUpdates) {
|
|
1484
1485
|
limit = candles.getLimit(symbol, limit);
|
|
1485
1486
|
}
|
package/js/src/pro/bitfinex.js
CHANGED
|
@@ -992,7 +992,7 @@ export default class bitfinex extends bitfinexRest {
|
|
|
992
992
|
const url = this.urls['api']['ws']['private'];
|
|
993
993
|
const client = this.client(url);
|
|
994
994
|
const messageHash = 'authenticated';
|
|
995
|
-
const future = client.
|
|
995
|
+
const future = client.reusableFuture(messageHash);
|
|
996
996
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
997
997
|
if (authenticated === undefined) {
|
|
998
998
|
const nonce = this.milliseconds();
|
package/js/src/pro/bitget.js
CHANGED
|
@@ -2483,7 +2483,7 @@ export default class bitget extends bitgetRest {
|
|
|
2483
2483
|
const url = this.safeString(params, 'url');
|
|
2484
2484
|
const client = this.client(url);
|
|
2485
2485
|
const messageHash = 'authenticated';
|
|
2486
|
-
const future = client.
|
|
2486
|
+
const future = client.reusableFuture(messageHash);
|
|
2487
2487
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
2488
2488
|
if (authenticated === undefined) {
|
|
2489
2489
|
const timestamp = this.seconds().toString();
|
package/js/src/pro/bitmart.js
CHANGED
|
@@ -1503,7 +1503,7 @@ export default class bitmart extends bitmartRest {
|
|
|
1503
1503
|
const url = this.implodeHostname(this.urls['api']['ws'][type]['private']);
|
|
1504
1504
|
const messageHash = 'authenticated';
|
|
1505
1505
|
const client = this.client(url);
|
|
1506
|
-
const future = client.
|
|
1506
|
+
const future = client.reusableFuture(messageHash);
|
|
1507
1507
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
1508
1508
|
if (authenticated === undefined) {
|
|
1509
1509
|
const timestamp = this.milliseconds().toString();
|
package/js/src/pro/bitmex.js
CHANGED
|
@@ -689,7 +689,7 @@ export default class bitmex extends bitmexRest {
|
|
|
689
689
|
const url = this.urls['api']['ws'];
|
|
690
690
|
const client = this.client(url);
|
|
691
691
|
const messageHash = 'authenticated';
|
|
692
|
-
const future = client.
|
|
692
|
+
const future = client.reusableFuture(messageHash);
|
|
693
693
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
694
694
|
if (authenticated === undefined) {
|
|
695
695
|
this.checkRequiredCredentials();
|
package/js/src/pro/bitvavo.d.ts
CHANGED
|
@@ -154,7 +154,7 @@ export default class bitvavo extends bitvavoRest {
|
|
|
154
154
|
* @param {object} [params] extra parameters specific to the bitvavo api endpoint
|
|
155
155
|
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
156
156
|
*/
|
|
157
|
-
cancelOrderWs(id: string, symbol?: Str, params?: {}): Promise<
|
|
157
|
+
cancelOrderWs(id: string, symbol?: Str, params?: {}): Promise<Order>;
|
|
158
158
|
/**
|
|
159
159
|
* @method
|
|
160
160
|
* @name bitvavo#cancelAllOrdersWs
|
|
@@ -164,7 +164,7 @@ export default class bitvavo extends bitvavoRest {
|
|
|
164
164
|
* @param {object} [params] extra parameters specific to the bitvavo api endpoint
|
|
165
165
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
166
166
|
*/
|
|
167
|
-
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<
|
|
167
|
+
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<Order[]>;
|
|
168
168
|
handleMultipleOrders(client: Client, message: any): void;
|
|
169
169
|
/**
|
|
170
170
|
* @method
|
|
@@ -226,7 +226,7 @@ export default class bitvavo extends bitvavoRest {
|
|
|
226
226
|
* @param {object} [params] extra parameters specific to the bitvavo api endpoint
|
|
227
227
|
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
228
228
|
*/
|
|
229
|
-
withdrawWs(code: string, amount:
|
|
229
|
+
withdrawWs(code: string, amount: number, address: string, tag?: Str, params?: {}): Promise<any>;
|
|
230
230
|
handleWithdraw(client: Client, message: any): void;
|
|
231
231
|
/**
|
|
232
232
|
* @method
|
package/js/src/pro/bitvavo.js
CHANGED
|
@@ -34,18 +34,18 @@ export default class bitvavo extends bitvavoRest {
|
|
|
34
34
|
'editOrderWs': true,
|
|
35
35
|
'fetchBalanceWs': true,
|
|
36
36
|
'fetchCurrenciesWS': true,
|
|
37
|
-
'fetchDepositAddressWs':
|
|
37
|
+
'fetchDepositAddressWs': false,
|
|
38
38
|
'fetchDepositsWs': true,
|
|
39
|
-
'fetchDepositWithdrawFeesWs':
|
|
39
|
+
'fetchDepositWithdrawFeesWs': false,
|
|
40
40
|
'fetchMyTradesWs': true,
|
|
41
41
|
'fetchOHLCVWs': true,
|
|
42
42
|
'fetchOpenOrdersWs': true,
|
|
43
43
|
'fetchOrderWs': true,
|
|
44
|
-
'fetchOrderBookWs':
|
|
44
|
+
'fetchOrderBookWs': false,
|
|
45
45
|
'fetchOrdersWs': true,
|
|
46
|
-
'fetchTickerWs':
|
|
47
|
-
'fetchTickersWs':
|
|
48
|
-
'fetchTimeWs':
|
|
46
|
+
'fetchTickerWs': false,
|
|
47
|
+
'fetchTickersWs': false,
|
|
48
|
+
'fetchTimeWs': false,
|
|
49
49
|
'fetchTradingFeesWs': true,
|
|
50
50
|
'fetchWithdrawalsWs': true,
|
|
51
51
|
'withdrawWs': true,
|
|
@@ -761,7 +761,7 @@ export default class blockchaincom extends blockchaincomRest {
|
|
|
761
761
|
const url = this.urls['api']['ws'];
|
|
762
762
|
const client = this.client(url);
|
|
763
763
|
const messageHash = 'authenticated';
|
|
764
|
-
const future = client.
|
|
764
|
+
const future = client.reusableFuture(messageHash);
|
|
765
765
|
const isAuthenticated = this.safeValue(client.subscriptions, messageHash);
|
|
766
766
|
if (isAuthenticated === undefined) {
|
|
767
767
|
this.checkRequiredCredentials();
|
package/js/src/pro/bybit.js
CHANGED
|
@@ -994,6 +994,7 @@ export default class bybit extends bybitRest {
|
|
|
994
994
|
this.orderbooks[symbol] = this.orderBook();
|
|
995
995
|
}
|
|
996
996
|
const orderbook = this.orderbooks[symbol];
|
|
997
|
+
orderbook['symbol'] = symbol;
|
|
997
998
|
if (isSnapshot) {
|
|
998
999
|
const snapshot = this.parseOrderBook(data, symbol, timestamp, 'b', 'a');
|
|
999
1000
|
orderbook.reset(snapshot);
|
|
@@ -2282,7 +2283,7 @@ export default class bybit extends bybitRest {
|
|
|
2282
2283
|
this.checkRequiredCredentials();
|
|
2283
2284
|
const messageHash = 'authenticated';
|
|
2284
2285
|
const client = this.client(url);
|
|
2285
|
-
const future = client.
|
|
2286
|
+
const future = client.reusableFuture(messageHash);
|
|
2286
2287
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
2287
2288
|
if (authenticated === undefined) {
|
|
2288
2289
|
const expiresInt = this.milliseconds() + 10000;
|
package/js/src/pro/cex.js
CHANGED
|
@@ -1514,7 +1514,7 @@ export default class cex extends cexRest {
|
|
|
1514
1514
|
const url = this.urls['api']['ws'];
|
|
1515
1515
|
const client = this.client(url);
|
|
1516
1516
|
const messageHash = 'authenticated';
|
|
1517
|
-
const future = client.
|
|
1517
|
+
const future = client.reusableFuture('authenticated');
|
|
1518
1518
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
1519
1519
|
if (authenticated === undefined) {
|
|
1520
1520
|
this.checkRequiredCredentials();
|
|
@@ -1529,7 +1529,7 @@ export default class cex extends cexRest {
|
|
|
1529
1529
|
'timestamp': nonce,
|
|
1530
1530
|
},
|
|
1531
1531
|
};
|
|
1532
|
-
|
|
1532
|
+
this.watch(url, messageHash, this.extend(request, params), messageHash);
|
|
1533
1533
|
}
|
|
1534
1534
|
return await future;
|
|
1535
1535
|
}
|
package/js/src/pro/coincatch.js
CHANGED
|
@@ -102,7 +102,7 @@ export default class coincatch extends coincatchRest {
|
|
|
102
102
|
const url = this.urls['api']['ws']['private'];
|
|
103
103
|
const client = this.client(url);
|
|
104
104
|
const messageHash = 'authenticated';
|
|
105
|
-
const future = client.
|
|
105
|
+
const future = client.reusableFuture(messageHash);
|
|
106
106
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
107
107
|
if (authenticated === undefined) {
|
|
108
108
|
const timestamp = this.seconds().toString();
|
package/js/src/pro/coinex.js
CHANGED
|
@@ -151,7 +151,7 @@ export default class coinex extends coinexRest {
|
|
|
151
151
|
const defaultType = this.safeString(this.options, 'defaultType');
|
|
152
152
|
const data = this.safeDict(message, 'data', {});
|
|
153
153
|
const rawTickers = this.safeList(data, 'state_list', []);
|
|
154
|
-
const newTickers =
|
|
154
|
+
const newTickers = {};
|
|
155
155
|
for (let i = 0; i < rawTickers.length; i++) {
|
|
156
156
|
const entry = rawTickers[i];
|
|
157
157
|
const marketId = this.safeString(entry, 'market');
|
|
@@ -159,7 +159,7 @@ export default class coinex extends coinexRest {
|
|
|
159
159
|
const market = this.safeMarket(marketId, undefined, undefined, defaultType);
|
|
160
160
|
const parsedTicker = this.parseWSTicker(entry, market);
|
|
161
161
|
this.tickers[symbol] = parsedTicker;
|
|
162
|
-
newTickers
|
|
162
|
+
newTickers[symbol] = parsedTicker;
|
|
163
163
|
}
|
|
164
164
|
const messageHashes = this.findMessageHashes(client, 'tickers::');
|
|
165
165
|
for (let i = 0; i < messageHashes.length; i++) {
|
|
@@ -1399,7 +1399,7 @@ export default class coinex extends coinexRest {
|
|
|
1399
1399
|
const time = this.milliseconds();
|
|
1400
1400
|
const timestamp = time.toString();
|
|
1401
1401
|
const messageHash = 'authenticated';
|
|
1402
|
-
const future = client.
|
|
1402
|
+
const future = client.reusableFuture(messageHash);
|
|
1403
1403
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
1404
1404
|
if (authenticated !== undefined) {
|
|
1405
1405
|
return await future;
|
|
@@ -283,7 +283,7 @@ export default class cryptocom extends cryptocomRest {
|
|
|
283
283
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
284
284
|
* @returns {object} Returns exchange raw message {@link https://docs.ccxt.com/#/?id=order-structure}
|
|
285
285
|
*/
|
|
286
|
-
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<
|
|
286
|
+
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<Order[]>;
|
|
287
287
|
handleCancelAllOrders(client: Client, message: any): void;
|
|
288
288
|
watchPublic(messageHash: any, params?: {}): Promise<any>;
|
|
289
289
|
watchPublicMultiple(messageHashes: any, topics: any, params?: {}): Promise<any>;
|
package/js/src/pro/cryptocom.js
CHANGED
|
@@ -1356,7 +1356,7 @@ export default class cryptocom extends cryptocomRest {
|
|
|
1356
1356
|
const url = this.urls['api']['ws']['private'];
|
|
1357
1357
|
const client = this.client(url);
|
|
1358
1358
|
const messageHash = 'authenticated';
|
|
1359
|
-
const future = client.
|
|
1359
|
+
const future = client.reusableFuture(messageHash);
|
|
1360
1360
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
1361
1361
|
if (authenticated === undefined) {
|
|
1362
1362
|
const method = 'public/auth';
|
package/js/src/pro/derive.js
CHANGED
|
@@ -424,7 +424,7 @@ export default class derive extends deriveRest {
|
|
|
424
424
|
const url = this.urls['api']['ws'];
|
|
425
425
|
const client = this.client(url);
|
|
426
426
|
const messageHash = 'authenticated';
|
|
427
|
-
const future = client.
|
|
427
|
+
const future = client.reusableFuture(messageHash);
|
|
428
428
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
429
429
|
if (authenticated === undefined) {
|
|
430
430
|
const requestId = this.requestId(url);
|
package/js/src/pro/gate.d.ts
CHANGED
|
@@ -138,7 +138,7 @@ export default class gate extends gateRest {
|
|
|
138
138
|
* @param {int} [params.limit] the maximum number of order structures to retrieve
|
|
139
139
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
140
140
|
*/
|
|
141
|
-
fetchOrdersByStatusWs(status: string, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<
|
|
141
|
+
fetchOrdersByStatusWs(status: string, symbol?: Str, since?: Int, limit?: Int, params?: {}): Promise<Order[]>;
|
|
142
142
|
/**
|
|
143
143
|
* @method
|
|
144
144
|
* @name gate#watchOrderBook
|
package/js/src/pro/gate.js
CHANGED
|
@@ -2026,7 +2026,7 @@ export default class gate extends gateRest {
|
|
|
2026
2026
|
const channel = messageType + '.login';
|
|
2027
2027
|
const client = this.client(url);
|
|
2028
2028
|
const messageHash = 'authenticated';
|
|
2029
|
-
const future = client.
|
|
2029
|
+
const future = client.reusableFuture(messageHash);
|
|
2030
2030
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
2031
2031
|
if (authenticated === undefined) {
|
|
2032
2032
|
return await this.requestPrivate(url, {}, channel, messageHash);
|
package/js/src/pro/hitbtc.d.ts
CHANGED
|
@@ -209,7 +209,7 @@ export default class hitbtc extends hitbtcRest {
|
|
|
209
209
|
* @param {bool} [params.margin] true for canceling margin orders
|
|
210
210
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
211
211
|
*/
|
|
212
|
-
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<
|
|
212
|
+
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<Order[]>;
|
|
213
213
|
/**
|
|
214
214
|
* @method
|
|
215
215
|
* @name hitbtc#fetchOpenOrdersWs
|
package/js/src/pro/hitbtc.js
CHANGED
|
@@ -88,7 +88,7 @@ export default class hitbtc extends hitbtcRest {
|
|
|
88
88
|
const url = this.urls['api']['ws']['private'];
|
|
89
89
|
const messageHash = 'authenticated';
|
|
90
90
|
const client = this.client(url);
|
|
91
|
-
const future = client.
|
|
91
|
+
const future = client.reusableFuture(messageHash);
|
|
92
92
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
93
93
|
if (authenticated === undefined) {
|
|
94
94
|
const timestamp = this.milliseconds();
|
package/js/src/pro/htx.js
CHANGED
|
@@ -2493,7 +2493,7 @@ export default class htx extends htxRest {
|
|
|
2493
2493
|
const messageHash = 'auth';
|
|
2494
2494
|
const relativePath = url.replace('wss://' + hostname, '');
|
|
2495
2495
|
const client = this.client(url);
|
|
2496
|
-
const future = client.
|
|
2496
|
+
const future = client.reusableFuture(messageHash);
|
|
2497
2497
|
const authenticated = this.safeValue(client.subscriptions, messageHash);
|
|
2498
2498
|
if (authenticated === undefined) {
|
|
2499
2499
|
const timestamp = this.ymdhms(this.milliseconds(), 'T');
|
|
@@ -2515,7 +2515,7 @@ export default class htx extends htxRest {
|
|
|
2515
2515
|
};
|
|
2516
2516
|
}
|
|
2517
2517
|
signatureParams = this.keysort(signatureParams);
|
|
2518
|
-
const auth = this.urlencode(signatureParams);
|
|
2518
|
+
const auth = this.urlencode(signatureParams, true); // true required in go
|
|
2519
2519
|
const payload = ['GET', hostname, relativePath, auth].join("\n"); // eslint-disable-line quotes
|
|
2520
2520
|
const signature = this.hmac(this.encode(payload), this.encode(this.secret), sha256, 'base64');
|
|
2521
2521
|
let request = undefined;
|
|
@@ -67,7 +67,7 @@ export default class hyperliquid extends hyperliquidRest {
|
|
|
67
67
|
* @param {string} [params.vaultAddress] the vault address for order cancellation
|
|
68
68
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
69
69
|
*/
|
|
70
|
-
cancelOrdersWs(ids: string[], symbol?: Str, params?: {}): Promise<
|
|
70
|
+
cancelOrdersWs(ids: string[], symbol?: Str, params?: {}): Promise<Order[]>;
|
|
71
71
|
/**
|
|
72
72
|
* @method
|
|
73
73
|
* @name hyperliquid#cancelOrderWs
|
package/js/src/pro/kraken.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export default class kraken extends krakenRest {
|
|
|
44
44
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
45
45
|
* @returns {object} an list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
46
46
|
*/
|
|
47
|
-
cancelOrdersWs(ids: string[], symbol?: Str, params?: {}): Promise<
|
|
47
|
+
cancelOrdersWs(ids: string[], symbol?: Str, params?: {}): Promise<Order[]>;
|
|
48
48
|
/**
|
|
49
49
|
* @method
|
|
50
50
|
* @name kraken#cancelOrderWs
|
|
@@ -66,7 +66,7 @@ export default class kraken extends krakenRest {
|
|
|
66
66
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
67
67
|
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
68
68
|
*/
|
|
69
|
-
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<
|
|
69
|
+
cancelAllOrdersWs(symbol?: Str, params?: {}): Promise<Order[]>;
|
|
70
70
|
handleCancelAllOrders(client: any, message: any): void;
|
|
71
71
|
handleTicker(client: any, message: any): void;
|
|
72
72
|
handleTrades(client: Client, message: any): void;
|