ccxt 4.3.66 → 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 +3 -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/bingx.js +151 -19
- package/dist/cjs/src/bithumb.js +61 -17
- package/dist/cjs/src/pro/okx.js +17 -4
- 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 +1 -1
- package/js/src/bingx.js +151 -19
- package/js/src/bithumb.js +61 -17
- 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 +1 -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 +18 -5
- 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/bingx.js
CHANGED
|
@@ -286,6 +286,10 @@ export default class bingx extends Exchange {
|
|
|
286
286
|
'trade/leverage': 2,
|
|
287
287
|
'trade/forceOrders': 2,
|
|
288
288
|
'trade/allFillOrders': 2,
|
|
289
|
+
'trade/openOrders': 2,
|
|
290
|
+
'trade/orderDetail': 2,
|
|
291
|
+
'trade/orderHistory': 2,
|
|
292
|
+
'trade/marginType': 2,
|
|
289
293
|
'user/commissionRate': 2,
|
|
290
294
|
'user/positions': 2,
|
|
291
295
|
'user/balance': 2,
|
|
@@ -294,9 +298,12 @@ export default class bingx extends Exchange {
|
|
|
294
298
|
'trade/order': 2,
|
|
295
299
|
'trade/leverage': 2,
|
|
296
300
|
'trade/closeAllPositions': 2,
|
|
301
|
+
'trade/marginType': 2,
|
|
302
|
+
'trade/positionMargin': 2,
|
|
297
303
|
},
|
|
298
304
|
'delete': {
|
|
299
305
|
'trade/allOpenOrders': 2,
|
|
306
|
+
'trade/cancelOrder': 2,
|
|
300
307
|
},
|
|
301
308
|
},
|
|
302
309
|
},
|
|
@@ -3007,7 +3014,8 @@ export default class bingx extends Exchange {
|
|
|
3007
3014
|
// "clientOrderID": ""
|
|
3008
3015
|
// }
|
|
3009
3016
|
//
|
|
3010
|
-
// inverse swap cancelAllOrders
|
|
3017
|
+
// inverse swap cancelAllOrders, cancelOrder
|
|
3018
|
+
// inverse swap cancelAllOrders, cancelOrder, fetchOpenOrders
|
|
3011
3019
|
//
|
|
3012
3020
|
// {
|
|
3013
3021
|
// "symbol": "SOL-USD",
|
|
@@ -3169,13 +3177,14 @@ export default class bingx extends Exchange {
|
|
|
3169
3177
|
* @method
|
|
3170
3178
|
* @name bingx#cancelOrder
|
|
3171
3179
|
* @description cancels an open order
|
|
3172
|
-
* @see https://bingx-api.github.io/docs/#/spot/trade-api.html#Cancel%
|
|
3173
|
-
* @see https://bingx-api.github.io/docs/#/swapV2/trade-api.html#Cancel%
|
|
3180
|
+
* @see https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Cancel%20Order
|
|
3181
|
+
* @see https://bingx-api.github.io/docs/#/en-us/swapV2/trade-api.html#Cancel%20Order
|
|
3182
|
+
* @see https://bingx-api.github.io/docs/#/en-us/cswap/trade-api.html#Cancel%20an%20Order
|
|
3174
3183
|
* @param {string} id order id
|
|
3175
3184
|
* @param {string} symbol unified symbol of the market the order was made in
|
|
3176
3185
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3177
3186
|
* @param {string} [params.clientOrderId] a unique id for the order
|
|
3178
|
-
* @returns {object}
|
|
3187
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
3179
3188
|
*/
|
|
3180
3189
|
if (symbol === undefined) {
|
|
3181
3190
|
throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
|
|
@@ -3194,12 +3203,20 @@ export default class bingx extends Exchange {
|
|
|
3194
3203
|
request['orderId'] = id;
|
|
3195
3204
|
}
|
|
3196
3205
|
let response = undefined;
|
|
3197
|
-
|
|
3198
|
-
|
|
3199
|
-
|
|
3206
|
+
let type = undefined;
|
|
3207
|
+
let subType = undefined;
|
|
3208
|
+
[type, params] = this.handleMarketTypeAndParams('cancelOrder', market, params);
|
|
3209
|
+
[subType, params] = this.handleSubTypeAndParams('cancelOrder', market, params);
|
|
3210
|
+
if (type === 'spot') {
|
|
3211
|
+
response = await this.spotV1PrivatePostTradeCancel(this.extend(request, params));
|
|
3200
3212
|
}
|
|
3201
3213
|
else {
|
|
3202
|
-
|
|
3214
|
+
if (subType === 'inverse') {
|
|
3215
|
+
response = await this.cswapV1PrivateDeleteTradeCancelOrder(this.extend(request, params));
|
|
3216
|
+
}
|
|
3217
|
+
else {
|
|
3218
|
+
response = await this.swapV2PrivateDeleteTradeOrder(this.extend(request, params));
|
|
3219
|
+
}
|
|
3203
3220
|
}
|
|
3204
3221
|
//
|
|
3205
3222
|
// spot
|
|
@@ -3220,7 +3237,59 @@ export default class bingx extends Exchange {
|
|
|
3220
3237
|
// }
|
|
3221
3238
|
// }
|
|
3222
3239
|
//
|
|
3223
|
-
// swap
|
|
3240
|
+
// inverse swap
|
|
3241
|
+
//
|
|
3242
|
+
// {
|
|
3243
|
+
// "code": 0,
|
|
3244
|
+
// "msg": "",
|
|
3245
|
+
// "data": {
|
|
3246
|
+
// "order": {
|
|
3247
|
+
// "symbol": "SOL-USD",
|
|
3248
|
+
// "orderId": "1816002957423951872",
|
|
3249
|
+
// "side": "BUY",
|
|
3250
|
+
// "positionSide": "Long",
|
|
3251
|
+
// "type": "Pending",
|
|
3252
|
+
// "quantity": 0,
|
|
3253
|
+
// "origQty": "0",
|
|
3254
|
+
// "price": "150",
|
|
3255
|
+
// "executedQty": "0",
|
|
3256
|
+
// "avgPrice": "0",
|
|
3257
|
+
// "cumQuote": "0",
|
|
3258
|
+
// "stopPrice": "",
|
|
3259
|
+
// "profit": "0.0000",
|
|
3260
|
+
// "commission": "0.000000",
|
|
3261
|
+
// "status": "CANCELLED",
|
|
3262
|
+
// "time": 1721803819410,
|
|
3263
|
+
// "updateTime": 1721803819427,
|
|
3264
|
+
// "clientOrderId": "",
|
|
3265
|
+
// "leverage": "",
|
|
3266
|
+
// "takeProfit": {
|
|
3267
|
+
// "type": "",
|
|
3268
|
+
// "quantity": 0,
|
|
3269
|
+
// "stopPrice": 0,
|
|
3270
|
+
// "price": 0,
|
|
3271
|
+
// "workingType": "",
|
|
3272
|
+
// "stopGuaranteed": ""
|
|
3273
|
+
// },
|
|
3274
|
+
// "stopLoss": {
|
|
3275
|
+
// "type": "",
|
|
3276
|
+
// "quantity": 0,
|
|
3277
|
+
// "stopPrice": 0,
|
|
3278
|
+
// "price": 0,
|
|
3279
|
+
// "workingType": "",
|
|
3280
|
+
// "stopGuaranteed": ""
|
|
3281
|
+
// },
|
|
3282
|
+
// "advanceAttr": 0,
|
|
3283
|
+
// "positionID": 0,
|
|
3284
|
+
// "takeProfitEntrustPrice": 0,
|
|
3285
|
+
// "stopLossEntrustPrice": 0,
|
|
3286
|
+
// "orderType": "",
|
|
3287
|
+
// "workingType": ""
|
|
3288
|
+
// }
|
|
3289
|
+
// }
|
|
3290
|
+
// }
|
|
3291
|
+
//
|
|
3292
|
+
// linear swap
|
|
3224
3293
|
//
|
|
3225
3294
|
// {
|
|
3226
3295
|
// "code": 0,
|
|
@@ -3247,9 +3316,9 @@ export default class bingx extends Exchange {
|
|
|
3247
3316
|
// }
|
|
3248
3317
|
// }
|
|
3249
3318
|
//
|
|
3250
|
-
const data = this.
|
|
3251
|
-
const
|
|
3252
|
-
return this.parseOrder(
|
|
3319
|
+
const data = this.safeDict(response, 'data', {});
|
|
3320
|
+
const order = this.safeDict(data, 'order', data);
|
|
3321
|
+
return this.parseOrder(order, market);
|
|
3253
3322
|
}
|
|
3254
3323
|
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
3255
3324
|
/**
|
|
@@ -3729,9 +3798,10 @@ export default class bingx extends Exchange {
|
|
|
3729
3798
|
/**
|
|
3730
3799
|
* @method
|
|
3731
3800
|
* @name bingx#fetchOpenOrders
|
|
3732
|
-
* @see https://bingx-api.github.io/docs/#/spot/trade-api.html#Query%20Open%20Orders
|
|
3733
|
-
* @see https://bingx-api.github.io/docs/#/swapV2/trade-api.html#Query%20all%20current%20pending%20orders
|
|
3734
3801
|
* @description fetch all unfilled currently open orders
|
|
3802
|
+
* @see https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Current%20Open%20Orders
|
|
3803
|
+
* @see https://bingx-api.github.io/docs/#/en-us/swapV2/trade-api.html#Current%20All%20Open%20Orders
|
|
3804
|
+
* @see https://bingx-api.github.io/docs/#/en-us/cswap/trade-api.html#Query%20all%20current%20pending%20orders
|
|
3735
3805
|
* @param {string} symbol unified market symbol
|
|
3736
3806
|
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
3737
3807
|
* @param {int} [limit] the maximum number of open order structures to retrieve
|
|
@@ -3745,13 +3815,21 @@ export default class bingx extends Exchange {
|
|
|
3745
3815
|
market = this.market(symbol);
|
|
3746
3816
|
request['symbol'] = market['id'];
|
|
3747
3817
|
}
|
|
3818
|
+
let type = undefined;
|
|
3819
|
+
let subType = undefined;
|
|
3748
3820
|
let response = undefined;
|
|
3749
|
-
|
|
3750
|
-
|
|
3751
|
-
|
|
3821
|
+
[type, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);
|
|
3822
|
+
[subType, params] = this.handleSubTypeAndParams('fetchOpenOrders', market, params);
|
|
3823
|
+
if (type === 'spot') {
|
|
3824
|
+
response = await this.spotV1PrivateGetTradeOpenOrders(this.extend(request, params));
|
|
3752
3825
|
}
|
|
3753
3826
|
else {
|
|
3754
|
-
|
|
3827
|
+
if (subType === 'inverse') {
|
|
3828
|
+
response = await this.cswapV1PrivateGetTradeOpenOrders(this.extend(request, params));
|
|
3829
|
+
}
|
|
3830
|
+
else {
|
|
3831
|
+
response = await this.swapV2PrivateGetTradeOpenOrders(this.extend(request, params));
|
|
3832
|
+
}
|
|
3755
3833
|
}
|
|
3756
3834
|
//
|
|
3757
3835
|
// spot
|
|
@@ -3779,7 +3857,61 @@ export default class bingx extends Exchange {
|
|
|
3779
3857
|
// }
|
|
3780
3858
|
// }
|
|
3781
3859
|
//
|
|
3782
|
-
// swap
|
|
3860
|
+
// inverse swap
|
|
3861
|
+
//
|
|
3862
|
+
// {
|
|
3863
|
+
// "code": 0,
|
|
3864
|
+
// "msg": "",
|
|
3865
|
+
// "data": {
|
|
3866
|
+
// "orders": [
|
|
3867
|
+
// {
|
|
3868
|
+
// "symbol": "SOL-USD",
|
|
3869
|
+
// "orderId": "1816013900044320768",
|
|
3870
|
+
// "side": "BUY",
|
|
3871
|
+
// "positionSide": "Long",
|
|
3872
|
+
// "type": "LIMIT",
|
|
3873
|
+
// "quantity": 1,
|
|
3874
|
+
// "origQty": "",
|
|
3875
|
+
// "price": "150",
|
|
3876
|
+
// "executedQty": "0",
|
|
3877
|
+
// "avgPrice": "0.000",
|
|
3878
|
+
// "cumQuote": "",
|
|
3879
|
+
// "stopPrice": "",
|
|
3880
|
+
// "profit": "0.0000",
|
|
3881
|
+
// "commission": "0.0000",
|
|
3882
|
+
// "status": "Pending",
|
|
3883
|
+
// "time": 1721806428334,
|
|
3884
|
+
// "updateTime": 1721806428352,
|
|
3885
|
+
// "clientOrderId": "",
|
|
3886
|
+
// "leverage": "",
|
|
3887
|
+
// "takeProfit": {
|
|
3888
|
+
// "type": "TAKE_PROFIT",
|
|
3889
|
+
// "quantity": 0,
|
|
3890
|
+
// "stopPrice": 0,
|
|
3891
|
+
// "price": 0,
|
|
3892
|
+
// "workingType": "MARK_PRICE",
|
|
3893
|
+
// "stopGuaranteed": ""
|
|
3894
|
+
// },
|
|
3895
|
+
// "stopLoss": {
|
|
3896
|
+
// "type": "STOP",
|
|
3897
|
+
// "quantity": 0,
|
|
3898
|
+
// "stopPrice": 0,
|
|
3899
|
+
// "price": 0,
|
|
3900
|
+
// "workingType": "MARK_PRICE",
|
|
3901
|
+
// "stopGuaranteed": ""
|
|
3902
|
+
// },
|
|
3903
|
+
// "advanceAttr": 0,
|
|
3904
|
+
// "positionID": 0,
|
|
3905
|
+
// "takeProfitEntrustPrice": 0,
|
|
3906
|
+
// "stopLossEntrustPrice": 0,
|
|
3907
|
+
// "orderType": "",
|
|
3908
|
+
// "workingType": "MARK_PRICE"
|
|
3909
|
+
// }
|
|
3910
|
+
// ]
|
|
3911
|
+
// }
|
|
3912
|
+
// }
|
|
3913
|
+
//
|
|
3914
|
+
// linear swap
|
|
3783
3915
|
//
|
|
3784
3916
|
// {
|
|
3785
3917
|
// "code": 0,
|
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/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;
|
|
@@ -19,7 +19,7 @@ export default class hyperliquid extends hyperliquidRest {
|
|
|
19
19
|
handleOrder(client: Client, message: any): void;
|
|
20
20
|
handleErrorMessage(client: Client, message: any): boolean;
|
|
21
21
|
handleMessage(client: Client, message: any): void;
|
|
22
|
-
ping(client:
|
|
22
|
+
ping(client: Client): {
|
|
23
23
|
method: string;
|
|
24
24
|
};
|
|
25
25
|
handlePong(client: Client, message: any): any;
|
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;
|
package/js/src/pro/okx.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
import okxRest from '../okx.js';
|
|
9
|
-
import { ArgumentsRequired, BadRequest, ExchangeError, ChecksumError, AuthenticationError } from '../base/errors.js';
|
|
9
|
+
import { ArgumentsRequired, BadRequest, ExchangeError, ChecksumError, AuthenticationError, InvalidNonce } from '../base/errors.js';
|
|
10
10
|
import { ArrayCache, ArrayCacheByTimestamp, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide } from '../base/ws/Cache.js';
|
|
11
11
|
import { sha256 } from '../static_dependencies/noble-hashes/sha256.js';
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
@@ -897,7 +897,7 @@ export default class okx extends okxRest {
|
|
|
897
897
|
this.handleDelta(bookside, deltas[i]);
|
|
898
898
|
}
|
|
899
899
|
}
|
|
900
|
-
handleOrderBookMessage(client, message, orderbook, messageHash) {
|
|
900
|
+
handleOrderBookMessage(client, message, orderbook, messageHash, market = undefined) {
|
|
901
901
|
//
|
|
902
902
|
// {
|
|
903
903
|
// "asks": [
|
|
@@ -912,6 +912,9 @@ export default class okx extends okxRest {
|
|
|
912
912
|
// ],
|
|
913
913
|
// "instId": "BTC-USDT",
|
|
914
914
|
// "ts": "1626537446491"
|
|
915
|
+
// "checksum": -855196043,
|
|
916
|
+
// "prevSeqId": 123456,
|
|
917
|
+
// "seqId": 123457
|
|
915
918
|
// }
|
|
916
919
|
//
|
|
917
920
|
const asks = this.safeValue(message, 'asks', []);
|
|
@@ -921,9 +924,12 @@ export default class okx extends okxRest {
|
|
|
921
924
|
this.handleDeltas(storedAsks, asks);
|
|
922
925
|
this.handleDeltas(storedBids, bids);
|
|
923
926
|
const marketId = this.safeString(message, 'instId');
|
|
924
|
-
const symbol = this.safeSymbol(marketId);
|
|
927
|
+
const symbol = this.safeSymbol(marketId, market);
|
|
925
928
|
const checksum = this.handleOption('watchOrderBook', 'checksum', true);
|
|
929
|
+
const seqId = this.safeInteger(message, 'seqId');
|
|
926
930
|
if (checksum) {
|
|
931
|
+
const prevSeqId = this.safeInteger(message, 'prevSeqId');
|
|
932
|
+
const nonce = orderbook['nonce'];
|
|
927
933
|
const asksLength = storedAsks.length;
|
|
928
934
|
const bidsLength = storedBids.length;
|
|
929
935
|
const payloadArray = [];
|
|
@@ -940,14 +946,21 @@ export default class okx extends okxRest {
|
|
|
940
946
|
const payload = payloadArray.join(':');
|
|
941
947
|
const responseChecksum = this.safeInteger(message, 'checksum');
|
|
942
948
|
const localChecksum = this.crc32(payload, true);
|
|
949
|
+
let error = undefined;
|
|
950
|
+
if (prevSeqId !== -1 && nonce !== prevSeqId) {
|
|
951
|
+
error = new InvalidNonce(this.id + ' watchOrderBook received invalid nonce');
|
|
952
|
+
}
|
|
943
953
|
if (responseChecksum !== localChecksum) {
|
|
944
|
-
|
|
954
|
+
error = new ChecksumError(this.id + ' ' + this.orderbookChecksumMessage(symbol));
|
|
955
|
+
}
|
|
956
|
+
if (error !== undefined) {
|
|
945
957
|
delete client.subscriptions[messageHash];
|
|
946
958
|
delete this.orderbooks[symbol];
|
|
947
959
|
client.reject(error, messageHash);
|
|
948
960
|
}
|
|
949
961
|
}
|
|
950
962
|
const timestamp = this.safeInteger(message, 'ts');
|
|
963
|
+
orderbook['nonce'] = seqId;
|
|
951
964
|
orderbook['timestamp'] = timestamp;
|
|
952
965
|
orderbook['datetime'] = this.iso8601(timestamp);
|
|
953
966
|
return orderbook;
|
|
@@ -1069,7 +1082,7 @@ export default class okx extends okxRest {
|
|
|
1069
1082
|
const orderbook = this.orderbooks[symbol];
|
|
1070
1083
|
for (let i = 0; i < data.length; i++) {
|
|
1071
1084
|
const update = data[i];
|
|
1072
|
-
this.handleOrderBookMessage(client, update, orderbook, messageHash);
|
|
1085
|
+
this.handleOrderBookMessage(client, update, orderbook, messageHash, market);
|
|
1073
1086
|
client.resolve(orderbook, messageHash);
|
|
1074
1087
|
}
|
|
1075
1088
|
}
|
package/js/src/pro/oxfun.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export default class oxfun extends oxfunRest {
|
|
|
32
32
|
cancelOrdersWs(ids: string[], symbol?: Str, params?: {}): Promise<any>;
|
|
33
33
|
authenticate(params?: {}): Promise<any>;
|
|
34
34
|
handleAuthenticationMessage(client: Client, message: any): void;
|
|
35
|
-
ping(client:
|
|
35
|
+
ping(client: Client): string;
|
|
36
36
|
handlePong(client: Client, message: any): any;
|
|
37
37
|
handleMessage(client: Client, message: any): void;
|
|
38
38
|
}
|
package/js/src/pro/p2b.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export default class p2b extends p2bRest {
|
|
|
14
14
|
handleOrderBook(client: Client, message: any): void;
|
|
15
15
|
handleMessage(client: Client, message: any): void;
|
|
16
16
|
handleErrorMessage(client: Client, message: any): boolean;
|
|
17
|
-
ping(client:
|
|
17
|
+
ping(client: Client): {
|
|
18
18
|
method: string;
|
|
19
19
|
params: any[];
|
|
20
20
|
id: number;
|
package/js/src/pro/poloniex.d.ts
CHANGED
|
@@ -36,7 +36,7 @@ export default class poloniex extends poloniexRest {
|
|
|
36
36
|
handleMessage(client: Client, message: any): void;
|
|
37
37
|
handleErrorMessage(client: Client, message: any): boolean;
|
|
38
38
|
handleAuthenticate(client: Client, message: any): any;
|
|
39
|
-
ping(client:
|
|
39
|
+
ping(client: Client): {
|
|
40
40
|
event: string;
|
|
41
41
|
};
|
|
42
42
|
}
|
package/js/src/pro/whitebit.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export default class whitebit extends whitebitRest {
|
|
|
31
31
|
handleMessage(client: Client, message: any): void;
|
|
32
32
|
handleSubscriptionStatus(client: Client, message: any, id: any): void;
|
|
33
33
|
handlePong(client: Client, message: any): any;
|
|
34
|
-
ping(client:
|
|
34
|
+
ping(client: Client): {
|
|
35
35
|
id: number;
|
|
36
36
|
method: string;
|
|
37
37
|
params: any[];
|
package/package.json
CHANGED