ccxt 4.0.86 → 4.0.88
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.js +247 -59
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/binance.js +1 -0
- package/dist/cjs/src/bitget.js +2 -0
- package/dist/cjs/src/bybit.js +1 -0
- package/dist/cjs/src/cryptocom.js +1 -0
- package/dist/cjs/src/delta.js +1 -0
- package/dist/cjs/src/deribit.js +1 -0
- package/dist/cjs/src/exmo.js +148 -48
- package/dist/cjs/src/gate.js +39 -0
- package/dist/cjs/src/hitbtc.js +3 -0
- package/dist/cjs/src/okx.js +39 -0
- package/dist/cjs/src/pro/bitfinex2.js +5 -5
- package/dist/cjs/src/pro/blockchaincom.js +2 -2
- package/dist/cjs/src/pro/luno.js +3 -3
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bitget.d.ts +2 -0
- package/js/src/binance.js +1 -0
- package/js/src/bitget.js +2 -0
- package/js/src/bybit.js +1 -0
- package/js/src/cryptocom.js +1 -0
- package/js/src/delta.js +1 -0
- package/js/src/deribit.js +1 -0
- package/js/src/exmo.js +149 -49
- package/js/src/gate.d.ts +1 -0
- package/js/src/gate.js +39 -0
- package/js/src/hitbtc.js +3 -0
- package/js/src/okx.d.ts +1 -0
- package/js/src/okx.js +39 -0
- package/js/src/pro/bitfinex2.js +5 -5
- package/js/src/pro/blockchaincom.js +2 -2
- package/js/src/pro/luno.js +3 -3
- package/package.json +1 -1
package/dist/cjs/ccxt.js
CHANGED
|
@@ -180,7 +180,7 @@ var woo$1 = require('./src/pro/woo.js');
|
|
|
180
180
|
|
|
181
181
|
//-----------------------------------------------------------------------------
|
|
182
182
|
// this is updated by vss.js when building
|
|
183
|
-
const version = '4.0.
|
|
183
|
+
const version = '4.0.88';
|
|
184
184
|
Exchange["default"].ccxtVersion = version;
|
|
185
185
|
const exchanges = {
|
|
186
186
|
'ace': ace,
|
package/dist/cjs/src/binance.js
CHANGED
|
@@ -106,6 +106,7 @@ class binance extends binance$1 {
|
|
|
106
106
|
'fetchTransactionFees': true,
|
|
107
107
|
'fetchTransactions': false,
|
|
108
108
|
'fetchTransfers': true,
|
|
109
|
+
'fetchUnderlyingAssets': false,
|
|
109
110
|
'fetchVolatilityHistory': false,
|
|
110
111
|
'fetchWithdrawal': false,
|
|
111
112
|
'fetchWithdrawals': true,
|
package/dist/cjs/src/bitget.js
CHANGED
|
@@ -147,6 +147,7 @@ class bitget extends bitget$1 {
|
|
|
147
147
|
'market/candles': 1,
|
|
148
148
|
'market/depth': 1,
|
|
149
149
|
'market/spot-vip-level': 2,
|
|
150
|
+
'market/merge-depth': 1,
|
|
150
151
|
'market/history-candles': 1,
|
|
151
152
|
'public/loan/coinInfos': 2,
|
|
152
153
|
'public/loan/hour-interest': 2, // 10 times/1s (IP) => 20/10 = 2
|
|
@@ -174,6 +175,7 @@ class bitget extends bitget$1 {
|
|
|
174
175
|
'market/history-candles': 1,
|
|
175
176
|
'market/history-index-candles': 1,
|
|
176
177
|
'market/history-mark-candles': 1,
|
|
178
|
+
'market/merge-depth': 1,
|
|
177
179
|
},
|
|
178
180
|
},
|
|
179
181
|
'margin': {
|
package/dist/cjs/src/bybit.js
CHANGED
package/dist/cjs/src/delta.js
CHANGED
package/dist/cjs/src/deribit.js
CHANGED
package/dist/cjs/src/exmo.js
CHANGED
|
@@ -1173,18 +1173,35 @@ class exmo extends exmo$1 {
|
|
|
1173
1173
|
// "commission_percent": "0.2"
|
|
1174
1174
|
// }
|
|
1175
1175
|
//
|
|
1176
|
+
// fetchMyTrades (margin)
|
|
1177
|
+
//
|
|
1178
|
+
// {
|
|
1179
|
+
// "trade_id": "692861757015952517",
|
|
1180
|
+
// "trade_dt": "1693951853197811824",
|
|
1181
|
+
// "trade_type": "buy",
|
|
1182
|
+
// "pair": "ADA_USDT",
|
|
1183
|
+
// "quantity": "1.96607879",
|
|
1184
|
+
// "price": "0.2568",
|
|
1185
|
+
// "amount": "0.50488903"
|
|
1186
|
+
// }
|
|
1187
|
+
//
|
|
1176
1188
|
const timestamp = this.safeTimestamp(trade, 'date');
|
|
1177
1189
|
const id = this.safeString(trade, 'trade_id');
|
|
1178
1190
|
const orderId = this.safeString(trade, 'order_id');
|
|
1179
1191
|
const priceString = this.safeString(trade, 'price');
|
|
1180
1192
|
const amountString = this.safeString(trade, 'quantity');
|
|
1181
1193
|
const costString = this.safeString(trade, 'amount');
|
|
1182
|
-
const side = this.
|
|
1194
|
+
const side = this.safeString2(trade, 'type', 'trade_type');
|
|
1183
1195
|
const type = undefined;
|
|
1184
1196
|
const marketId = this.safeString(trade, 'pair');
|
|
1185
1197
|
market = this.safeMarket(marketId, market, '_');
|
|
1186
1198
|
const symbol = market['symbol'];
|
|
1187
|
-
const
|
|
1199
|
+
const isMaker = this.safeValue(trade, 'is_maker');
|
|
1200
|
+
let takerOrMakerDefault = undefined;
|
|
1201
|
+
if (isMaker !== undefined) {
|
|
1202
|
+
takerOrMakerDefault = isMaker ? 'maker' : 'taker';
|
|
1203
|
+
}
|
|
1204
|
+
const takerOrMaker = this.safeString(trade, 'exec_type', takerOrMakerDefault);
|
|
1188
1205
|
let fee = undefined;
|
|
1189
1206
|
const feeCostString = this.safeString(trade, 'commission_amount');
|
|
1190
1207
|
if (feeCostString !== undefined) {
|
|
@@ -1263,38 +1280,91 @@ class exmo extends exmo$1 {
|
|
|
1263
1280
|
* @method
|
|
1264
1281
|
* @name exmo#fetchMyTrades
|
|
1265
1282
|
* @description fetch all trades made by the user
|
|
1266
|
-
* @
|
|
1283
|
+
* @see https://documenter.getpostman.com/view/10287440/SzYXWKPi#b8d8d9af-4f46-46a1-939b-ad261d79f452 // spot
|
|
1284
|
+
* @see https://documenter.getpostman.com/view/10287440/SzYXWKPi#f4b1aaf8-399f-403b-ab5e-4926d967a106 // margin
|
|
1285
|
+
* @param {string} symbol a symbol is required but it can be a single string, or a non-empty array
|
|
1267
1286
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1268
|
-
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
1287
|
+
* @param {int} [limit] *required for margin orders* the maximum number of trades structures to retrieve
|
|
1269
1288
|
* @param {object} [params] extra parameters specific to the exmo api endpoint
|
|
1289
|
+
*
|
|
1290
|
+
* EXCHANGE SPECIFIC PARAMETERS
|
|
1291
|
+
* @param {int} [params.offset] last deal offset, default = 0
|
|
1270
1292
|
* @returns {Trade[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
|
|
1271
1293
|
*/
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1294
|
+
this.checkRequiredSymbol('fetchMyTrades', symbol);
|
|
1295
|
+
let marginMode = undefined;
|
|
1296
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchMyTrades', params);
|
|
1297
|
+
if (marginMode === 'cross') {
|
|
1298
|
+
throw new errors.BadRequest(this.id + 'only isolated margin is supported');
|
|
1275
1299
|
}
|
|
1276
1300
|
await this.loadMarkets();
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
pair =
|
|
1301
|
+
const market = this.market(symbol);
|
|
1302
|
+
const pair = market['id'];
|
|
1303
|
+
const isSpot = marginMode !== 'isolated';
|
|
1304
|
+
if (limit === undefined) {
|
|
1305
|
+
limit = 100;
|
|
1306
|
+
}
|
|
1307
|
+
const request = {};
|
|
1308
|
+
if (isSpot) {
|
|
1309
|
+
request['pair'] = pair;
|
|
1286
1310
|
}
|
|
1287
1311
|
else {
|
|
1288
|
-
|
|
1289
|
-
pair = market['id'];
|
|
1312
|
+
request['pair_name'] = pair;
|
|
1290
1313
|
}
|
|
1291
|
-
const request = {
|
|
1292
|
-
'pair': pair,
|
|
1293
|
-
};
|
|
1294
1314
|
if (limit !== undefined) {
|
|
1295
1315
|
request['limit'] = limit;
|
|
1296
1316
|
}
|
|
1297
|
-
const
|
|
1317
|
+
const offset = this.safeInteger(params, 'offset', 0);
|
|
1318
|
+
request['offset'] = offset;
|
|
1319
|
+
let response = undefined;
|
|
1320
|
+
if (isSpot) {
|
|
1321
|
+
response = await this.privatePostUserTrades(this.extend(request, params));
|
|
1322
|
+
//
|
|
1323
|
+
// {
|
|
1324
|
+
// "BTC_USD": [
|
|
1325
|
+
// {
|
|
1326
|
+
// "trade_id": 20056872,
|
|
1327
|
+
// "client_id": 100500,
|
|
1328
|
+
// "date": 1435488248,
|
|
1329
|
+
// "type": "buy",
|
|
1330
|
+
// "pair": "BTC_USD",
|
|
1331
|
+
// "quantity": "1",
|
|
1332
|
+
// "price": "100",
|
|
1333
|
+
// "amount": "100",
|
|
1334
|
+
// "order_id": 7,
|
|
1335
|
+
// "parent_order_id": 117684023830293,
|
|
1336
|
+
// "exec_type": "taker",
|
|
1337
|
+
// "commission_amount": "0.02",
|
|
1338
|
+
// "commission_currency": "BTC",
|
|
1339
|
+
// "commission_percent": "0.2"
|
|
1340
|
+
// }
|
|
1341
|
+
// ],
|
|
1342
|
+
// ...
|
|
1343
|
+
// }
|
|
1344
|
+
//
|
|
1345
|
+
}
|
|
1346
|
+
else {
|
|
1347
|
+
const responseFromExchange = await this.privatePostMarginTrades(this.extend(request, params));
|
|
1348
|
+
//
|
|
1349
|
+
// {
|
|
1350
|
+
// "trades": {
|
|
1351
|
+
// "ADA_USDT": [
|
|
1352
|
+
// {
|
|
1353
|
+
// "trade_id": "692861757015952517",
|
|
1354
|
+
// "trade_dt": "1693951853197811824",
|
|
1355
|
+
// "trade_type": "buy",
|
|
1356
|
+
// "pair": "ADA_USDT",
|
|
1357
|
+
// "quantity": "1.96607879",
|
|
1358
|
+
// "price": "0.2568",
|
|
1359
|
+
// "amount": "0.50488903"
|
|
1360
|
+
// },
|
|
1361
|
+
// ]
|
|
1362
|
+
// ...
|
|
1363
|
+
// }
|
|
1364
|
+
// }
|
|
1365
|
+
//
|
|
1366
|
+
response = this.safeValue(responseFromExchange, 'trades');
|
|
1367
|
+
}
|
|
1298
1368
|
let result = [];
|
|
1299
1369
|
const marketIdsInner = Object.keys(response);
|
|
1300
1370
|
for (let i = 0; i < marketIdsInner.length; i++) {
|
|
@@ -1424,13 +1494,21 @@ class exmo extends exmo$1 {
|
|
|
1424
1494
|
* @method
|
|
1425
1495
|
* @name exmo#fetchOrderTrades
|
|
1426
1496
|
* @description fetch all the trades made from a single order
|
|
1497
|
+
* @see https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459 // spot
|
|
1498
|
+
* @see https://documenter.getpostman.com/view/10287440/SzYXWKPi#00810661-9119-46c5-aec5-55abe9cb42c7 // margin
|
|
1427
1499
|
* @param {string} id order id
|
|
1428
1500
|
* @param {string} symbol unified market symbol
|
|
1429
1501
|
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1430
1502
|
* @param {int} [limit] the maximum number of trades to retrieve
|
|
1431
1503
|
* @param {object} [params] extra parameters specific to the exmo api endpoint
|
|
1504
|
+
* @param {string} [params.marginMode] set to "isolated" to fetch trades for a margin order
|
|
1432
1505
|
* @returns {object[]} a list of [trade structures]{@link https://github.com/ccxt/ccxt/wiki/Manual#trade-structure}
|
|
1433
1506
|
*/
|
|
1507
|
+
let marginMode = undefined;
|
|
1508
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchOrderTrades', params);
|
|
1509
|
+
if (marginMode === 'cross') {
|
|
1510
|
+
throw new errors.BadRequest(this.id + ' only supports isolated margin');
|
|
1511
|
+
}
|
|
1434
1512
|
let market = undefined;
|
|
1435
1513
|
if (symbol !== undefined) {
|
|
1436
1514
|
market = this.market(symbol);
|
|
@@ -1438,32 +1516,54 @@ class exmo extends exmo$1 {
|
|
|
1438
1516
|
const request = {
|
|
1439
1517
|
'order_id': id.toString(),
|
|
1440
1518
|
};
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1519
|
+
let response = undefined;
|
|
1520
|
+
if (marginMode === 'isolated') {
|
|
1521
|
+
response = await this.privatePostMarginUserOrderTrades(this.extend(request, params));
|
|
1522
|
+
//
|
|
1523
|
+
// {
|
|
1524
|
+
// "trades": [
|
|
1525
|
+
// {
|
|
1526
|
+
// "is_maker": false,
|
|
1527
|
+
// "order_id": "123",
|
|
1528
|
+
// "pair": "BTC_USD",
|
|
1529
|
+
// "price": "54122.25",
|
|
1530
|
+
// "quantity": "0.00069994",
|
|
1531
|
+
// "trade_dt": "1619069561718824428",
|
|
1532
|
+
// "trade_id": "692842802860135010",
|
|
1533
|
+
// "type": "sell"
|
|
1534
|
+
// }
|
|
1535
|
+
// ]
|
|
1536
|
+
// }
|
|
1537
|
+
//
|
|
1538
|
+
}
|
|
1539
|
+
else {
|
|
1540
|
+
response = await this.privatePostOrderTrades(this.extend(request, params));
|
|
1541
|
+
//
|
|
1542
|
+
// {
|
|
1543
|
+
// "type": "buy",
|
|
1544
|
+
// "in_currency": "BTC",
|
|
1545
|
+
// "in_amount": "1",
|
|
1546
|
+
// "out_currency": "USD",
|
|
1547
|
+
// "out_amount": "100",
|
|
1548
|
+
// "trades": [
|
|
1549
|
+
// {
|
|
1550
|
+
// "trade_id": 3,
|
|
1551
|
+
// "date": 1435488248,
|
|
1552
|
+
// "type": "buy",
|
|
1553
|
+
// "pair": "BTC_USD",
|
|
1554
|
+
// "order_id": 12345,
|
|
1555
|
+
// "quantity": 1,
|
|
1556
|
+
// "price": 100,
|
|
1557
|
+
// "amount": 100,
|
|
1558
|
+
// "exec_type": "taker",
|
|
1559
|
+
// "commission_amount": "0.02",
|
|
1560
|
+
// "commission_currency": "BTC",
|
|
1561
|
+
// "commission_percent": "0.2"
|
|
1562
|
+
// }
|
|
1563
|
+
// ]
|
|
1564
|
+
// }
|
|
1565
|
+
//
|
|
1566
|
+
}
|
|
1467
1567
|
const trades = this.safeValue(response, 'trades');
|
|
1468
1568
|
return this.parseTrades(trades, market, since, limit);
|
|
1469
1569
|
}
|
package/dist/cjs/src/gate.js
CHANGED
|
@@ -130,6 +130,7 @@ class gate extends gate$1 {
|
|
|
130
130
|
'fetchTradingFee': true,
|
|
131
131
|
'fetchTradingFees': true,
|
|
132
132
|
'fetchTransactionFees': true,
|
|
133
|
+
'fetchUnderlyingAssets': true,
|
|
133
134
|
'fetchVolatilityHistory': false,
|
|
134
135
|
'fetchWithdrawals': true,
|
|
135
136
|
'reduceMargin': true,
|
|
@@ -6222,6 +6223,44 @@ class gate extends gate$1 {
|
|
|
6222
6223
|
request['dual_mode'] = hedged;
|
|
6223
6224
|
return await this.privateFuturesPostSettleDualMode(this.extend(request, query));
|
|
6224
6225
|
}
|
|
6226
|
+
async fetchUnderlyingAssets(params = {}) {
|
|
6227
|
+
/**
|
|
6228
|
+
* @method
|
|
6229
|
+
* @name gate#fetchUnderlyingAssets
|
|
6230
|
+
* @description fetches the market ids of underlying assets for a specific contract market type
|
|
6231
|
+
* @param {object} [params] exchange specific params
|
|
6232
|
+
* @param {string} [params.type] the contract market type, 'option', 'swap' or 'future', the default is 'option'
|
|
6233
|
+
* @returns {object[]} a list of [underlying assets]{@link https://github.com/ccxt/ccxt/wiki/Manual#underlying-assets-structure}
|
|
6234
|
+
*/
|
|
6235
|
+
await this.loadMarkets();
|
|
6236
|
+
let marketType = undefined;
|
|
6237
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchUnderlyingAssets', undefined, params);
|
|
6238
|
+
if ((marketType === undefined) || (marketType === 'spot')) {
|
|
6239
|
+
marketType = 'option';
|
|
6240
|
+
}
|
|
6241
|
+
if (marketType !== 'option') {
|
|
6242
|
+
throw new errors.NotSupported(this.id + ' fetchUnderlyingAssets() supports option markets only');
|
|
6243
|
+
}
|
|
6244
|
+
const response = await this.publicOptionsGetUnderlyings(params);
|
|
6245
|
+
//
|
|
6246
|
+
// [
|
|
6247
|
+
// {
|
|
6248
|
+
// "index_time": "1646915796",
|
|
6249
|
+
// "name": "BTC_USDT",
|
|
6250
|
+
// "index_price": "39142.73"
|
|
6251
|
+
// }
|
|
6252
|
+
// ]
|
|
6253
|
+
//
|
|
6254
|
+
const underlyings = [];
|
|
6255
|
+
for (let i = 0; i < response.length; i++) {
|
|
6256
|
+
const underlying = response[i];
|
|
6257
|
+
const name = this.safeString(underlying, 'name');
|
|
6258
|
+
if (name !== undefined) {
|
|
6259
|
+
underlyings.push(name);
|
|
6260
|
+
}
|
|
6261
|
+
}
|
|
6262
|
+
return underlyings;
|
|
6263
|
+
}
|
|
6225
6264
|
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
6226
6265
|
if (response === undefined) {
|
|
6227
6266
|
return undefined;
|
package/dist/cjs/src/hitbtc.js
CHANGED
|
@@ -1232,6 +1232,9 @@ class hitbtc extends hitbtc$1 {
|
|
|
1232
1232
|
if (taker !== undefined) {
|
|
1233
1233
|
takerOrMaker = taker ? 'taker' : 'maker';
|
|
1234
1234
|
}
|
|
1235
|
+
else {
|
|
1236
|
+
takerOrMaker = 'taker'; // the only case when `taker` field is missing, is public fetchTrades and it must be taker
|
|
1237
|
+
}
|
|
1235
1238
|
if (feeCostString !== undefined) {
|
|
1236
1239
|
const info = this.safeValue(market, 'info', {});
|
|
1237
1240
|
const feeCurrency = this.safeString(info, 'fee_currency');
|
package/dist/cjs/src/okx.js
CHANGED
|
@@ -107,6 +107,7 @@ class okx extends okx$1 {
|
|
|
107
107
|
'fetchTransactions': false,
|
|
108
108
|
'fetchTransfer': true,
|
|
109
109
|
'fetchTransfers': true,
|
|
110
|
+
'fetchUnderlyingAssets': true,
|
|
110
111
|
'fetchVolatilityHistory': false,
|
|
111
112
|
'fetchWithdrawal': true,
|
|
112
113
|
'fetchWithdrawals': true,
|
|
@@ -6700,6 +6701,44 @@ class okx extends okx$1 {
|
|
|
6700
6701
|
}
|
|
6701
6702
|
return result;
|
|
6702
6703
|
}
|
|
6704
|
+
async fetchUnderlyingAssets(params = {}) {
|
|
6705
|
+
/**
|
|
6706
|
+
* @method
|
|
6707
|
+
* @name okx#fetchUnderlyingAssets
|
|
6708
|
+
* @description fetches the market ids of underlying assets for a specific contract market type
|
|
6709
|
+
* @see https://www.okx.com/docs-v5/en/#public-data-rest-api-get-underlying
|
|
6710
|
+
* @param {object} [params] exchange specific params
|
|
6711
|
+
* @param {string} [params.type] the contract market type, 'option', 'swap' or 'future', the default is 'option'
|
|
6712
|
+
* @returns {object[]} a list of [underlying assets]{@link https://github.com/ccxt/ccxt/wiki/Manual#underlying-assets-structure}
|
|
6713
|
+
*/
|
|
6714
|
+
await this.loadMarkets();
|
|
6715
|
+
let marketType = undefined;
|
|
6716
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchUnderlyingAssets', undefined, params);
|
|
6717
|
+
if ((marketType === undefined) || (marketType === 'spot')) {
|
|
6718
|
+
marketType = 'option';
|
|
6719
|
+
}
|
|
6720
|
+
if ((marketType !== 'option') && (marketType !== 'swap') && (marketType !== 'future')) {
|
|
6721
|
+
throw new errors.NotSupported(this.id + ' fetchUnderlyingAssets() supports contract markets only');
|
|
6722
|
+
}
|
|
6723
|
+
const request = {
|
|
6724
|
+
'instType': this.convertToInstrumentType(marketType),
|
|
6725
|
+
};
|
|
6726
|
+
const response = await this.publicGetPublicUnderlying(this.extend(request, params));
|
|
6727
|
+
//
|
|
6728
|
+
// {
|
|
6729
|
+
// "code": "0",
|
|
6730
|
+
// "data": [
|
|
6731
|
+
// [
|
|
6732
|
+
// "BTC-USD",
|
|
6733
|
+
// "ETH-USD"
|
|
6734
|
+
// ]
|
|
6735
|
+
// ],
|
|
6736
|
+
// "msg": ""
|
|
6737
|
+
// }
|
|
6738
|
+
//
|
|
6739
|
+
const underlyings = this.safeValue(response, 'data', []);
|
|
6740
|
+
return underlyings[0];
|
|
6741
|
+
}
|
|
6703
6742
|
handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
6704
6743
|
if (!response) {
|
|
6705
6744
|
return undefined; // fallback to default error handler
|
|
@@ -267,13 +267,13 @@ class bitfinex2 extends bitfinex2$1 {
|
|
|
267
267
|
const limit = this.safeInteger(this.options, 'tradesLimit', 1000);
|
|
268
268
|
this.myTrades = new Cache.ArrayCacheBySymbolById(limit);
|
|
269
269
|
}
|
|
270
|
-
const
|
|
271
|
-
|
|
272
|
-
this.myTrades =
|
|
270
|
+
const tradesArray = this.myTrades;
|
|
271
|
+
tradesArray.append(trade);
|
|
272
|
+
this.myTrades = tradesArray;
|
|
273
273
|
// generic subscription
|
|
274
|
-
client.resolve(
|
|
274
|
+
client.resolve(tradesArray, name);
|
|
275
275
|
// specific subscription
|
|
276
|
-
client.resolve(
|
|
276
|
+
client.resolve(tradesArray, messageHash);
|
|
277
277
|
}
|
|
278
278
|
handleTrades(client, message, subscription) {
|
|
279
279
|
//
|
|
@@ -738,8 +738,8 @@ class blockchaincom extends blockchaincom$1 {
|
|
|
738
738
|
};
|
|
739
739
|
}
|
|
740
740
|
handleDelta(bookside, delta) {
|
|
741
|
-
const
|
|
742
|
-
bookside.storeArray(
|
|
741
|
+
const bookArray = this.parseCountedBidAsk(delta, 'px', 'qty', 'num');
|
|
742
|
+
bookside.storeArray(bookArray);
|
|
743
743
|
}
|
|
744
744
|
handleDeltas(bookside, deltas) {
|
|
745
745
|
for (let i = 0; i < deltas.length; i++) {
|
package/dist/cjs/src/pro/luno.js
CHANGED
|
@@ -288,13 +288,13 @@ class luno extends luno$1 {
|
|
|
288
288
|
const asksOrderSide = orderbook['asks'];
|
|
289
289
|
const bidsOrderSide = orderbook['bids'];
|
|
290
290
|
if (createUpdate !== undefined) {
|
|
291
|
-
const
|
|
291
|
+
const bidAskArray = this.customParseBidAsk(createUpdate, 'price', 'volume', 'order_id');
|
|
292
292
|
const type = this.safeString(createUpdate, 'type');
|
|
293
293
|
if (type === 'ASK') {
|
|
294
|
-
asksOrderSide.storeArray(
|
|
294
|
+
asksOrderSide.storeArray(bidAskArray);
|
|
295
295
|
}
|
|
296
296
|
else if (type === 'BID') {
|
|
297
|
-
bidsOrderSide.storeArray(
|
|
297
|
+
bidsOrderSide.storeArray(bidAskArray);
|
|
298
298
|
}
|
|
299
299
|
}
|
|
300
300
|
const deleteUpdate = this.safeValue(message, 'delete_update');
|
package/js/ccxt.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ import * as functions from './src/base/functions.js';
|
|
|
4
4
|
import * as errors from './src/base/errors.js';
|
|
5
5
|
import { Market, Trade, Fee, Ticker, OrderBook, Order, Transaction, Tickers, Currency, Balance, DepositAddress, WithdrawalResponse, DepositAddressResponse, OHLCV, Balances, PartialBalances, Dictionary, MinMax } from './src/base/types.js';
|
|
6
6
|
import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending } from './src/base/errors.js';
|
|
7
|
-
declare const version = "4.0.
|
|
7
|
+
declare const version = "4.0.87";
|
|
8
8
|
import ace from './src/ace.js';
|
|
9
9
|
import alpaca from './src/alpaca.js';
|
|
10
10
|
import ascendex from './src/ascendex.js';
|
package/js/ccxt.js
CHANGED
|
@@ -38,7 +38,7 @@ import * as errors from './src/base/errors.js';
|
|
|
38
38
|
import { BaseError, ExchangeError, PermissionDenied, AccountNotEnabled, AccountSuspended, ArgumentsRequired, BadRequest, BadSymbol, MarginModeAlreadySet, BadResponse, NullResponse, InsufficientFunds, InvalidAddress, InvalidOrder, OrderNotFound, OrderNotCached, CancelPending, OrderImmediatelyFillable, OrderNotFillable, DuplicateOrderId, NotSupported, NetworkError, DDoSProtection, RateLimitExceeded, ExchangeNotAvailable, OnMaintenance, InvalidNonce, RequestTimeout, AuthenticationError, AddressPending } from './src/base/errors.js';
|
|
39
39
|
//-----------------------------------------------------------------------------
|
|
40
40
|
// this is updated by vss.js when building
|
|
41
|
-
const version = '4.0.
|
|
41
|
+
const version = '4.0.88';
|
|
42
42
|
Exchange.ccxtVersion = version;
|
|
43
43
|
//-----------------------------------------------------------------------------
|
|
44
44
|
import ace from './src/ace.js';
|
|
@@ -13,6 +13,7 @@ interface Exchange {
|
|
|
13
13
|
publicSpotGetMarketCandles(params?: {}): Promise<implicitReturnType>;
|
|
14
14
|
publicSpotGetMarketDepth(params?: {}): Promise<implicitReturnType>;
|
|
15
15
|
publicSpotGetMarketSpotVipLevel(params?: {}): Promise<implicitReturnType>;
|
|
16
|
+
publicSpotGetMarketMergeDepth(params?: {}): Promise<implicitReturnType>;
|
|
16
17
|
publicSpotGetMarketHistoryCandles(params?: {}): Promise<implicitReturnType>;
|
|
17
18
|
publicSpotGetPublicLoanCoinInfos(params?: {}): Promise<implicitReturnType>;
|
|
18
19
|
publicSpotGetPublicLoanHourInterest(params?: {}): Promise<implicitReturnType>;
|
|
@@ -36,6 +37,7 @@ interface Exchange {
|
|
|
36
37
|
publicMixGetMarketHistoryCandles(params?: {}): Promise<implicitReturnType>;
|
|
37
38
|
publicMixGetMarketHistoryIndexCandles(params?: {}): Promise<implicitReturnType>;
|
|
38
39
|
publicMixGetMarketHistoryMarkCandles(params?: {}): Promise<implicitReturnType>;
|
|
40
|
+
publicMixGetMarketMergeDepth(params?: {}): Promise<implicitReturnType>;
|
|
39
41
|
publicMarginGetCrossPublicInterestRateAndLimit(params?: {}): Promise<implicitReturnType>;
|
|
40
42
|
publicMarginGetIsolatedPublicInterestRateAndLimit(params?: {}): Promise<implicitReturnType>;
|
|
41
43
|
publicMarginGetCrossPublicTierData(params?: {}): Promise<implicitReturnType>;
|
package/js/src/binance.js
CHANGED
|
@@ -109,6 +109,7 @@ export default class binance extends Exchange {
|
|
|
109
109
|
'fetchTransactionFees': true,
|
|
110
110
|
'fetchTransactions': false,
|
|
111
111
|
'fetchTransfers': true,
|
|
112
|
+
'fetchUnderlyingAssets': false,
|
|
112
113
|
'fetchVolatilityHistory': false,
|
|
113
114
|
'fetchWithdrawal': false,
|
|
114
115
|
'fetchWithdrawals': true,
|
package/js/src/bitget.js
CHANGED
|
@@ -150,6 +150,7 @@ export default class bitget extends Exchange {
|
|
|
150
150
|
'market/candles': 1,
|
|
151
151
|
'market/depth': 1,
|
|
152
152
|
'market/spot-vip-level': 2,
|
|
153
|
+
'market/merge-depth': 1,
|
|
153
154
|
'market/history-candles': 1,
|
|
154
155
|
'public/loan/coinInfos': 2,
|
|
155
156
|
'public/loan/hour-interest': 2, // 10 times/1s (IP) => 20/10 = 2
|
|
@@ -177,6 +178,7 @@ export default class bitget extends Exchange {
|
|
|
177
178
|
'market/history-candles': 1,
|
|
178
179
|
'market/history-index-candles': 1,
|
|
179
180
|
'market/history-mark-candles': 1,
|
|
181
|
+
'market/merge-depth': 1,
|
|
180
182
|
},
|
|
181
183
|
},
|
|
182
184
|
'margin': {
|
package/js/src/bybit.js
CHANGED
package/js/src/cryptocom.js
CHANGED
|
@@ -86,6 +86,7 @@ export default class cryptocom extends Exchange {
|
|
|
86
86
|
'fetchTransactionFees': false,
|
|
87
87
|
'fetchTransactions': false,
|
|
88
88
|
'fetchTransfers': true,
|
|
89
|
+
'fetchUnderlyingAssets': false,
|
|
89
90
|
'fetchVolatilityHistory': false,
|
|
90
91
|
'fetchWithdrawals': true,
|
|
91
92
|
'reduceMargin': false,
|
package/js/src/delta.js
CHANGED
|
@@ -73,6 +73,7 @@ export default class delta extends Exchange {
|
|
|
73
73
|
'fetchTrades': true,
|
|
74
74
|
'fetchTransfer': undefined,
|
|
75
75
|
'fetchTransfers': undefined,
|
|
76
|
+
'fetchUnderlyingAssets': false,
|
|
76
77
|
'fetchVolatilityHistory': false,
|
|
77
78
|
'fetchWithdrawal': undefined,
|
|
78
79
|
'fetchWithdrawals': undefined,
|
package/js/src/deribit.js
CHANGED