ccxt 4.3.62 → 4.3.64
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 +3 -3
- package/dist/cjs/ccxt.js +2 -1
- package/dist/cjs/src/ace.js +34 -15
- package/dist/cjs/src/alpaca.js +1 -0
- package/dist/cjs/src/base/Exchange.js +11 -4
- package/dist/cjs/src/base/errors.js +8 -1
- package/dist/cjs/src/binance.js +6 -9
- package/dist/cjs/src/bingx.js +554 -151
- package/dist/cjs/src/bitfinex.js +1 -1
- package/dist/cjs/src/bitfinex2.js +1 -1
- package/dist/cjs/src/cryptocom.js +18 -2
- package/dist/cjs/src/independentreserve.js +107 -0
- package/dist/cjs/src/kucoin.js +2 -0
- package/dist/cjs/src/mercado.js +5 -1
- package/dist/cjs/src/pro/binance.js +58 -34
- package/dist/cjs/src/pro/bitfinex2.js +6 -3
- package/dist/cjs/src/pro/bitget.js +4 -1
- package/dist/cjs/src/pro/bitmart.js +3 -3
- package/dist/cjs/src/pro/bitvavo.js +1 -1
- package/dist/cjs/src/pro/bybit.js +44 -18
- package/dist/cjs/src/pro/cryptocom.js +7 -1
- package/dist/cjs/src/pro/gate.js +7 -3
- package/dist/cjs/src/pro/gemini.js +4 -2
- package/dist/cjs/src/pro/htx.js +5 -1
- package/dist/cjs/src/pro/independentreserve.js +5 -3
- package/dist/cjs/src/pro/kraken.js +82 -4
- package/dist/cjs/src/pro/okx.js +3 -3
- package/dist/cjs/src/pro/onetrading.js +3 -2
- package/dist/cjs/src/pro/poloniexfutures.js +5 -1
- package/dist/cjs/src/pro/vertex.js +3 -2
- package/dist/cjs/src/pro/woo.js +2 -1
- package/dist/cjs/src/pro/woofipro.js +3 -2
- package/dist/cjs/src/woo.js +344 -81
- package/js/ccxt.d.ts +3 -3
- package/js/ccxt.js +3 -3
- package/js/src/abstract/cryptocom.d.ts +11 -0
- package/js/src/abstract/kucoin.d.ts +1 -0
- package/js/src/abstract/kucoinfutures.d.ts +1 -0
- package/js/src/abstract/woo.d.ts +3 -0
- package/js/src/ace.js +34 -15
- package/js/src/alpaca.js +1 -0
- package/js/src/base/Exchange.d.ts +1 -0
- package/js/src/base/Exchange.js +11 -4
- package/js/src/base/errorHierarchy.d.ts +3 -1
- package/js/src/base/errorHierarchy.js +3 -1
- package/js/src/base/errors.d.ts +5 -1
- package/js/src/base/errors.js +8 -2
- package/js/src/binance.js +6 -9
- package/js/src/bingx.d.ts +4 -1
- package/js/src/bingx.js +554 -151
- package/js/src/bitfinex.js +1 -1
- package/js/src/bitfinex2.js +1 -1
- package/js/src/coinbaseinternational.d.ts +1 -1
- package/js/src/cryptocom.js +18 -2
- package/js/src/independentreserve.d.ts +3 -1
- package/js/src/independentreserve.js +106 -0
- package/js/src/kucoin.js +2 -0
- package/js/src/mercado.js +5 -1
- package/js/src/pro/binance.d.ts +1 -0
- package/js/src/pro/binance.js +59 -35
- package/js/src/pro/bitfinex2.js +7 -4
- package/js/src/pro/bitget.js +5 -2
- package/js/src/pro/bitmart.js +3 -3
- package/js/src/pro/bitvavo.js +1 -1
- package/js/src/pro/bybit.d.ts +1 -0
- package/js/src/pro/bybit.js +44 -18
- package/js/src/pro/cryptocom.js +8 -2
- package/js/src/pro/gate.js +8 -4
- package/js/src/pro/gemini.js +4 -2
- package/js/src/pro/htx.js +6 -2
- package/js/src/pro/independentreserve.js +6 -4
- package/js/src/pro/kraken.d.ts +3 -1
- package/js/src/pro/kraken.js +83 -5
- package/js/src/pro/okx.js +4 -4
- package/js/src/pro/onetrading.js +3 -2
- package/js/src/pro/poloniexfutures.js +6 -2
- package/js/src/pro/vertex.js +3 -2
- package/js/src/pro/woo.js +2 -1
- package/js/src/pro/woofipro.js +3 -2
- package/js/src/whitebit.d.ts +1 -1
- package/js/src/woo.d.ts +6 -2
- package/js/src/woo.js +344 -81
- package/js/src/xt.d.ts +3 -3
- package/js/src/zonda.d.ts +1 -1
- package/package.json +1 -1
package/dist/cjs/ccxt.js
CHANGED
|
@@ -191,7 +191,7 @@ var xt$1 = require('./src/pro/xt.js');
|
|
|
191
191
|
|
|
192
192
|
//-----------------------------------------------------------------------------
|
|
193
193
|
// this is updated by vss.js when building
|
|
194
|
-
const version = '4.3.
|
|
194
|
+
const version = '4.3.64';
|
|
195
195
|
Exchange["default"].ccxtVersion = version;
|
|
196
196
|
const exchanges = {
|
|
197
197
|
'ace': ace,
|
|
@@ -392,6 +392,7 @@ exports.BadResponse = errors.BadResponse;
|
|
|
392
392
|
exports.BadSymbol = errors.BadSymbol;
|
|
393
393
|
exports.BaseError = errors.BaseError;
|
|
394
394
|
exports.CancelPending = errors.CancelPending;
|
|
395
|
+
exports.ChecksumError = errors.ChecksumError;
|
|
395
396
|
exports.ContractUnavailable = errors.ContractUnavailable;
|
|
396
397
|
exports.DDoSProtection = errors.DDoSProtection;
|
|
397
398
|
exports.DuplicateOrderId = errors.DuplicateOrderId;
|
package/dist/cjs/src/ace.js
CHANGED
|
@@ -198,10 +198,23 @@ class ace extends ace$1 {
|
|
|
198
198
|
return this.parseMarkets(response);
|
|
199
199
|
}
|
|
200
200
|
parseMarket(market) {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
201
|
+
//
|
|
202
|
+
// {
|
|
203
|
+
// "symbol": "ADA/TWD",
|
|
204
|
+
// "base": "ADA",
|
|
205
|
+
// "baseCurrencyId": "122",
|
|
206
|
+
// "quote": "TWD",
|
|
207
|
+
// "quoteCurrencyId": "1",
|
|
208
|
+
// "basePrecision": "2",
|
|
209
|
+
// "quotePrecision": "3",
|
|
210
|
+
// "minLimitBaseAmount": "1.0",
|
|
211
|
+
// "maxLimitBaseAmount": "150000.0"
|
|
212
|
+
// }
|
|
213
|
+
//
|
|
214
|
+
const baseId = this.safeString(market, 'baseCurrencyId');
|
|
215
|
+
const base = this.safeCurrencyCode(this.safeString(market, 'base'));
|
|
216
|
+
const quoteId = this.safeString(market, 'quoteCurrencyId');
|
|
217
|
+
const quote = this.safeCurrencyCode(this.safeString(market, 'quote'));
|
|
205
218
|
const symbol = base + '/' + quote;
|
|
206
219
|
return {
|
|
207
220
|
'id': this.safeString(market, 'symbol'),
|
|
@@ -301,7 +314,7 @@ class ace extends ace$1 {
|
|
|
301
314
|
const market = this.market(symbol);
|
|
302
315
|
const response = await this.publicGetOapiV2ListTradePrice(params);
|
|
303
316
|
const marketId = market['id'];
|
|
304
|
-
const ticker = this.
|
|
317
|
+
const ticker = this.safeDict(response, marketId, {});
|
|
305
318
|
//
|
|
306
319
|
// {
|
|
307
320
|
// "BTC/USDT":{
|
|
@@ -339,7 +352,7 @@ class ace extends ace$1 {
|
|
|
339
352
|
for (let i = 0; i < pairs.length; i++) {
|
|
340
353
|
const marketId = pairs[i];
|
|
341
354
|
const market = this.safeMarket(marketId);
|
|
342
|
-
const rawTicker = this.
|
|
355
|
+
const rawTicker = this.safeDict(response, marketId);
|
|
343
356
|
const ticker = this.parseTicker(rawTicker, market);
|
|
344
357
|
tickers.push(ticker);
|
|
345
358
|
}
|
|
@@ -462,7 +475,7 @@ class ace extends ace$1 {
|
|
|
462
475
|
request['startTime'] = since;
|
|
463
476
|
}
|
|
464
477
|
const response = await this.privatePostV2KlineGetKline(this.extend(request, params));
|
|
465
|
-
const data = this.
|
|
478
|
+
const data = this.safeList(response, 'attachment', []);
|
|
466
479
|
//
|
|
467
480
|
// {
|
|
468
481
|
// "attachment":[
|
|
@@ -544,9 +557,9 @@ class ace extends ace$1 {
|
|
|
544
557
|
timestamp = timestamp - 28800000; // 8 hours
|
|
545
558
|
}
|
|
546
559
|
}
|
|
547
|
-
const orderSide = this.
|
|
560
|
+
const orderSide = this.safeString(order, 'buyOrSell');
|
|
548
561
|
if (orderSide !== undefined) {
|
|
549
|
-
side = (orderSide === 1) ? 'buy' : 'sell';
|
|
562
|
+
side = (orderSide === '1') ? 'buy' : 'sell';
|
|
550
563
|
}
|
|
551
564
|
amount = this.safeString(order, 'num');
|
|
552
565
|
price = this.safeString(order, 'price');
|
|
@@ -555,9 +568,9 @@ class ace extends ace$1 {
|
|
|
555
568
|
if (quoteId !== undefined && baseId !== undefined) {
|
|
556
569
|
symbol = baseId + '/' + quoteId;
|
|
557
570
|
}
|
|
558
|
-
const orderType = this.
|
|
571
|
+
const orderType = this.safeString(order, 'type');
|
|
559
572
|
if (orderType !== undefined) {
|
|
560
|
-
type = (orderType === 1) ? 'limit' : 'market';
|
|
573
|
+
type = (orderType === '1') ? 'limit' : 'market';
|
|
561
574
|
}
|
|
562
575
|
filled = this.safeString(order, 'tradeNum');
|
|
563
576
|
remaining = this.safeString(order, 'remainNum');
|
|
@@ -720,7 +733,7 @@ class ace extends ace$1 {
|
|
|
720
733
|
request['size'] = limit;
|
|
721
734
|
}
|
|
722
735
|
const response = await this.privatePostV2OrderGetOrderList(this.extend(request, params));
|
|
723
|
-
const orders = this.
|
|
736
|
+
const orders = this.safeList(response, 'attachment');
|
|
724
737
|
//
|
|
725
738
|
// {
|
|
726
739
|
// "attachment": [
|
|
@@ -883,7 +896,7 @@ class ace extends ace$1 {
|
|
|
883
896
|
// "status": 200
|
|
884
897
|
// }
|
|
885
898
|
//
|
|
886
|
-
const data = this.
|
|
899
|
+
const data = this.safeDict(response, 'attachment');
|
|
887
900
|
const trades = this.safeList(data, 'trades', []);
|
|
888
901
|
return this.parseTrades(trades, market, since, limit);
|
|
889
902
|
}
|
|
@@ -986,7 +999,7 @@ class ace extends ace$1 {
|
|
|
986
999
|
*/
|
|
987
1000
|
await this.loadMarkets();
|
|
988
1001
|
const response = await this.privatePostV2CoinCustomerAccount(params);
|
|
989
|
-
const balances = this.
|
|
1002
|
+
const balances = this.safeList(response, 'attachment', []);
|
|
990
1003
|
//
|
|
991
1004
|
// {
|
|
992
1005
|
// "attachment":[
|
|
@@ -1021,7 +1034,13 @@ class ace extends ace$1 {
|
|
|
1021
1034
|
}, params);
|
|
1022
1035
|
const sortedData = this.keysort(data);
|
|
1023
1036
|
const values = Object.values(sortedData);
|
|
1024
|
-
|
|
1037
|
+
const stringifiedValues = [];
|
|
1038
|
+
for (let i = 0; i < values.length; i++) {
|
|
1039
|
+
const value = values[i];
|
|
1040
|
+
const strValue = value.toString();
|
|
1041
|
+
stringifiedValues.push(strValue);
|
|
1042
|
+
}
|
|
1043
|
+
auth += stringifiedValues.join('');
|
|
1025
1044
|
const signature = this.hash(this.encode(auth), sha256.sha256, 'hex');
|
|
1026
1045
|
data['signKey'] = signature;
|
|
1027
1046
|
headers = {
|
package/dist/cjs/src/alpaca.js
CHANGED
|
@@ -1096,6 +1096,7 @@ class alpaca extends alpaca$1 {
|
|
|
1096
1096
|
let url = this.implodeHostname(this.urls['api'][api[0]]);
|
|
1097
1097
|
headers = (headers !== undefined) ? headers : {};
|
|
1098
1098
|
if (api[1] === 'private') {
|
|
1099
|
+
this.checkRequiredCredentials();
|
|
1099
1100
|
headers['APCA-API-KEY-ID'] = this.apiKey;
|
|
1100
1101
|
headers['APCA-API-SECRET-KEY'] = this.secret;
|
|
1101
1102
|
}
|
|
@@ -2199,6 +2199,9 @@ class Exchange {
|
|
|
2199
2199
|
afterConstruct() {
|
|
2200
2200
|
this.createNetworksByIdObject();
|
|
2201
2201
|
}
|
|
2202
|
+
orderbookChecksumMessage(symbol) {
|
|
2203
|
+
return symbol + ' : ' + 'orderbook data checksum validation failed. You can reconnect by calling watchOrderBook again or you can mute the error by setting exchange.options["watchOrderBook"]["checksum"] = false';
|
|
2204
|
+
}
|
|
2202
2205
|
createNetworksByIdObject() {
|
|
2203
2206
|
// automatically generate network-id-to-code mappings
|
|
2204
2207
|
const networkIdsToCodesGenerated = this.invertFlatStringDictionary(this.safeValue(this.options, 'networks', {})); // invert defined networks dictionary
|
|
@@ -4330,17 +4333,17 @@ class Exchange {
|
|
|
4330
4333
|
await this.loadMarkets();
|
|
4331
4334
|
const market = this.market(symbol);
|
|
4332
4335
|
symbol = market['symbol'];
|
|
4333
|
-
const tickers = await this.
|
|
4336
|
+
const tickers = await this.fetchTickersWs([symbol], params);
|
|
4334
4337
|
const ticker = this.safeDict(tickers, symbol);
|
|
4335
4338
|
if (ticker === undefined) {
|
|
4336
|
-
throw new errors.NullResponse(this.id + '
|
|
4339
|
+
throw new errors.NullResponse(this.id + ' fetchTickerWs() could not find a ticker for ' + symbol);
|
|
4337
4340
|
}
|
|
4338
4341
|
else {
|
|
4339
4342
|
return ticker;
|
|
4340
4343
|
}
|
|
4341
4344
|
}
|
|
4342
4345
|
else {
|
|
4343
|
-
throw new errors.NotSupported(this.id + '
|
|
4346
|
+
throw new errors.NotSupported(this.id + ' fetchTickerWs() is not supported yet');
|
|
4344
4347
|
}
|
|
4345
4348
|
}
|
|
4346
4349
|
async watchTicker(symbol, params = {}) {
|
|
@@ -6147,8 +6150,12 @@ class Exchange {
|
|
|
6147
6150
|
return [request, params];
|
|
6148
6151
|
}
|
|
6149
6152
|
safeOpenInterest(interest, market = undefined) {
|
|
6153
|
+
let symbol = this.safeString(interest, 'symbol');
|
|
6154
|
+
if (symbol === undefined) {
|
|
6155
|
+
symbol = this.safeString(market, 'symbol');
|
|
6156
|
+
}
|
|
6150
6157
|
return this.extend(interest, {
|
|
6151
|
-
'symbol':
|
|
6158
|
+
'symbol': symbol,
|
|
6152
6159
|
'baseVolume': this.safeNumber(interest, 'baseVolume'),
|
|
6153
6160
|
'quoteVolume': this.safeNumber(interest, 'quoteVolume'),
|
|
6154
6161
|
'openInterestAmount': this.safeNumber(interest, 'openInterestAmount'),
|
|
@@ -201,6 +201,12 @@ class InvalidNonce extends NetworkError {
|
|
|
201
201
|
this.name = 'InvalidNonce';
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
|
+
class ChecksumError extends InvalidNonce {
|
|
205
|
+
constructor(message) {
|
|
206
|
+
super(message);
|
|
207
|
+
this.name = 'ChecksumError';
|
|
208
|
+
}
|
|
209
|
+
}
|
|
204
210
|
class RequestTimeout extends NetworkError {
|
|
205
211
|
constructor(message) {
|
|
206
212
|
super(message);
|
|
@@ -225,7 +231,7 @@ class CancelPending extends OperationFailed {
|
|
|
225
231
|
this.name = 'CancelPending';
|
|
226
232
|
}
|
|
227
233
|
}
|
|
228
|
-
var errors = { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, BadResponse, NullResponse, CancelPending };
|
|
234
|
+
var errors = { BaseError, ExchangeError, AuthenticationError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, OperationRejected, NoChange, MarginModeAlreadySet, MarketClosed, InsufficientFunds, InvalidAddress, AddressPending, InvalidOrder, OrderNotFound, OrderNotCached, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, ContractUnavailable, NotSupported, InvalidProxySettings, ExchangeClosedByUser, OperationFailed, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, ChecksumError, RequestTimeout, BadResponse, NullResponse, CancelPending };
|
|
229
235
|
|
|
230
236
|
exports.AccountNotEnabled = AccountNotEnabled;
|
|
231
237
|
exports.AccountSuspended = AccountSuspended;
|
|
@@ -237,6 +243,7 @@ exports.BadResponse = BadResponse;
|
|
|
237
243
|
exports.BadSymbol = BadSymbol;
|
|
238
244
|
exports.BaseError = BaseError;
|
|
239
245
|
exports.CancelPending = CancelPending;
|
|
246
|
+
exports.ChecksumError = ChecksumError;
|
|
240
247
|
exports.ContractUnavailable = ContractUnavailable;
|
|
241
248
|
exports.DDoSProtection = DDoSProtection;
|
|
242
249
|
exports.DuplicateOrderId = DuplicateOrderId;
|
package/dist/cjs/src/binance.js
CHANGED
|
@@ -813,7 +813,7 @@ class binance extends binance$1 {
|
|
|
813
813
|
'forceOrders': { 'cost': 20, 'noSymbol': 50 },
|
|
814
814
|
'allOrders': 5,
|
|
815
815
|
'openOrder': 1,
|
|
816
|
-
'openOrders': 1,
|
|
816
|
+
'openOrders': { 'cost': 1, 'noSymbol': 40 },
|
|
817
817
|
'order': 1,
|
|
818
818
|
'account': 5,
|
|
819
819
|
'balance': 5,
|
|
@@ -1005,18 +1005,18 @@ class binance extends binance$1 {
|
|
|
1005
1005
|
'ping': 1,
|
|
1006
1006
|
'um/order': 1,
|
|
1007
1007
|
'um/openOrder': 1,
|
|
1008
|
-
'um/openOrders': 1,
|
|
1008
|
+
'um/openOrders': { 'cost': 1, 'noSymbol': 40 },
|
|
1009
1009
|
'um/allOrders': 5,
|
|
1010
1010
|
'cm/order': 1,
|
|
1011
1011
|
'cm/openOrder': 1,
|
|
1012
|
-
'cm/openOrders': 1,
|
|
1012
|
+
'cm/openOrders': { 'cost': 1, 'noSymbol': 40 },
|
|
1013
1013
|
'cm/allOrders': 20,
|
|
1014
1014
|
'um/conditional/openOrder': 1,
|
|
1015
|
-
'um/conditional/openOrders': 40,
|
|
1015
|
+
'um/conditional/openOrders': { 'cost': 1, 'noSymbol': 40 },
|
|
1016
1016
|
'um/conditional/orderHistory': 1,
|
|
1017
1017
|
'um/conditional/allOrders': 40,
|
|
1018
1018
|
'cm/conditional/openOrder': 1,
|
|
1019
|
-
'cm/conditional/openOrders': 40,
|
|
1019
|
+
'cm/conditional/openOrders': { 'cost': 1, 'noSymbol': 40 },
|
|
1020
1020
|
'cm/conditional/orderHistory': 1,
|
|
1021
1021
|
'cm/conditional/allOrders': 40,
|
|
1022
1022
|
'margin/order': 5,
|
|
@@ -6580,10 +6580,7 @@ class binance extends binance$1 {
|
|
|
6580
6580
|
type = this.safeString(params, 'type', marketType);
|
|
6581
6581
|
}
|
|
6582
6582
|
else if (this.options['warnOnFetchOpenOrdersWithoutSymbol']) {
|
|
6583
|
-
|
|
6584
|
-
const numSymbols = symbols.length;
|
|
6585
|
-
const fetchOpenOrdersRateLimit = this.parseToInt(numSymbols / 2);
|
|
6586
|
-
throw new errors.ExchangeError(this.id + ' fetchOpenOrders() WARNING: fetching open orders without specifying a symbol is rate-limited to one call per ' + fetchOpenOrdersRateLimit.toString() + ' seconds. Do not call this method frequently to avoid ban. Set ' + this.id + '.options["warnOnFetchOpenOrdersWithoutSymbol"] = false to suppress this warning message.');
|
|
6583
|
+
throw new errors.ExchangeError(this.id + ' fetchOpenOrders() WARNING: fetching open orders without specifying a symbol has stricter rate limits (10 times more for spot, 40 times more for other markets) compared to requesting with symbol argument. To acknowledge this warning, set ' + this.id + '.options["warnOnFetchOpenOrdersWithoutSymbol"] = false to suppress this warning message.');
|
|
6587
6584
|
}
|
|
6588
6585
|
else {
|
|
6589
6586
|
const defaultType = this.safeString2(this.options, 'fetchOpenOrders', 'defaultType', 'spot');
|