ccxt 4.1.100 → 4.2.2
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 +1384 -1215
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/binance.js +1 -0
- package/dist/cjs/src/bingx.js +76 -37
- package/dist/cjs/src/bitget.js +11 -6
- package/dist/cjs/src/bitstamp.js +37 -13
- package/dist/cjs/src/cex.js +6 -5
- package/dist/cjs/src/deribit.js +38 -26
- package/dist/cjs/src/kucoinfutures.js +9 -4
- package/dist/cjs/src/lykke.js +14 -3
- package/dist/cjs/src/poloniexfutures.js +22 -11
- package/dist/cjs/src/pro/binance.js +24 -21
- package/dist/cjs/src/pro/bitmart.js +85 -50
- package/dist/cjs/src/pro/bybit.js +7 -2
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/abstract/bingx.d.ts +2 -0
- package/js/src/binance.js +1 -0
- package/js/src/bingx.js +76 -37
- package/js/src/bitget.js +11 -6
- package/js/src/bitstamp.js +37 -13
- package/js/src/cex.js +6 -5
- package/js/src/deribit.js +38 -26
- package/js/src/kucoinfutures.js +9 -4
- package/js/src/lykke.js +14 -3
- package/js/src/poloniexfutures.js +22 -11
- package/js/src/pro/binance.js +24 -21
- package/js/src/pro/bitmart.js +85 -50
- package/js/src/pro/bybit.js +7 -2
- package/package.json +1 -1
- package/skip-tests.json +2 -1
package/dist/ccxt.browser.js
CHANGED
|
@@ -1376,6 +1376,22 @@ class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchang
|
|
|
1376
1376
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
|
|
1377
1377
|
|
|
1378
1378
|
|
|
1379
|
+
/***/ }),
|
|
1380
|
+
|
|
1381
|
+
/***/ 5224:
|
|
1382
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
1383
|
+
|
|
1384
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1385
|
+
/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
1386
|
+
/* harmony export */ });
|
|
1387
|
+
/* harmony import */ var _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
|
|
1388
|
+
// -------------------------------------------------------------------------------
|
|
1389
|
+
|
|
1390
|
+
class Exchange extends _base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e {
|
|
1391
|
+
}
|
|
1392
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Exchange);
|
|
1393
|
+
|
|
1394
|
+
|
|
1379
1395
|
/***/ }),
|
|
1380
1396
|
|
|
1381
1397
|
/***/ 3565:
|
|
@@ -18711,6 +18727,7 @@ class binance extends _abstract_binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
18711
18727
|
'-4046': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.AuthenticationError,
|
|
18712
18728
|
'-4047': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
|
|
18713
18729
|
'-4054': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
|
|
18730
|
+
'-4164': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder,
|
|
18714
18731
|
'-5001': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest,
|
|
18715
18732
|
'-5002': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
|
|
18716
18733
|
'-5003': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InsufficientFunds,
|
|
@@ -27155,6 +27172,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
27155
27172
|
'trade/query': 3,
|
|
27156
27173
|
'trade/openOrders': 3,
|
|
27157
27174
|
'trade/historyOrders': 3,
|
|
27175
|
+
'user/commissionRate': 3,
|
|
27158
27176
|
'account/balance': 3,
|
|
27159
27177
|
},
|
|
27160
27178
|
'post': {
|
|
@@ -27162,6 +27180,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
27162
27180
|
'trade/cancel': 3,
|
|
27163
27181
|
'trade/batchOrders': 3,
|
|
27164
27182
|
'trade/cancelOrders': 3,
|
|
27183
|
+
'trade/cancelOpenOrders': 3,
|
|
27165
27184
|
},
|
|
27166
27185
|
},
|
|
27167
27186
|
},
|
|
@@ -28352,22 +28371,30 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
28352
28371
|
// }
|
|
28353
28372
|
//
|
|
28354
28373
|
const marketId = this.safeString(ticker, 'symbol');
|
|
28355
|
-
// const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
|
|
28356
28374
|
const lastQty = this.safeString(ticker, 'lastQty');
|
|
28357
28375
|
// in spot markets, lastQty is not present
|
|
28358
28376
|
// it's (bad, but) the only way we can check the tickers origin
|
|
28359
28377
|
const type = (lastQty === undefined) ? 'spot' : 'swap';
|
|
28360
|
-
|
|
28378
|
+
market = this.safeMarket(marketId, market, undefined, type);
|
|
28379
|
+
const symbol = market['symbol'];
|
|
28361
28380
|
const open = this.safeString(ticker, 'openPrice');
|
|
28362
28381
|
const high = this.safeString(ticker, 'highPrice');
|
|
28363
28382
|
const low = this.safeString(ticker, 'lowPrice');
|
|
28364
28383
|
const close = this.safeString(ticker, 'lastPrice');
|
|
28365
28384
|
const quoteVolume = this.safeString(ticker, 'quoteVolume');
|
|
28366
28385
|
const baseVolume = this.safeString(ticker, 'volume');
|
|
28386
|
+
let percentage = undefined;
|
|
28387
|
+
let change = undefined;
|
|
28388
|
+
if (market['swap']) {
|
|
28389
|
+
// right now only swap uses the 24h change, spot will be added soon
|
|
28390
|
+
percentage = this.safeString(ticker, 'priceChangePercent');
|
|
28391
|
+
change = this.safeString(ticker, 'priceChange');
|
|
28392
|
+
}
|
|
28367
28393
|
// let percentage = this.safeString (ticker, 'priceChangePercent');
|
|
28368
28394
|
// if (percentage !== undefined) {
|
|
28369
28395
|
// percentage = percentage.replace ('%', '');
|
|
28370
28396
|
// } similarly to change, it's not ccxt's percentage because it does priceChange/open, and priceChange is high-low
|
|
28397
|
+
// const change = this.safeString (ticker, 'priceChange'); // this is not ccxt's change because it does high-low instead of last-open
|
|
28371
28398
|
const ts = this.safeInteger(ticker, 'closeTime');
|
|
28372
28399
|
const datetime = this.iso8601(ts);
|
|
28373
28400
|
const bid = this.safeString(ticker, 'bidPrice');
|
|
@@ -28389,8 +28416,8 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
28389
28416
|
'close': close,
|
|
28390
28417
|
'last': undefined,
|
|
28391
28418
|
'previousClose': undefined,
|
|
28392
|
-
'change':
|
|
28393
|
-
'percentage':
|
|
28419
|
+
'change': change,
|
|
28420
|
+
'percentage': percentage,
|
|
28394
28421
|
'average': undefined,
|
|
28395
28422
|
'baseVolume': baseVolume,
|
|
28396
28423
|
'quoteVolume': quoteVolume,
|
|
@@ -29241,6 +29268,7 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
29241
29268
|
* @method
|
|
29242
29269
|
* @name bingx#cancelAllOrders
|
|
29243
29270
|
* @description cancel all open orders
|
|
29271
|
+
* @see https://bingx-api.github.io/docs/#/en-us/spot/trade-api.html#Cancel%20orders%20by%20symbol
|
|
29244
29272
|
* @see https://bingx-api.github.io/docs/#/swapV2/trade-api.html#Cancel%20All%20Orders
|
|
29245
29273
|
* @param {string} [symbol] unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
|
|
29246
29274
|
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
@@ -29251,42 +29279,70 @@ class bingx extends _abstract_bingx_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
29251
29279
|
}
|
|
29252
29280
|
await this.loadMarkets();
|
|
29253
29281
|
const market = this.market(symbol);
|
|
29254
|
-
if (market['type'] !== 'swap') {
|
|
29255
|
-
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' cancelAllOrders is only supported for swap markets.');
|
|
29256
|
-
}
|
|
29257
29282
|
const request = {
|
|
29258
29283
|
'symbol': market['id'],
|
|
29259
29284
|
};
|
|
29260
|
-
|
|
29261
|
-
|
|
29262
|
-
|
|
29263
|
-
|
|
29264
|
-
|
|
29265
|
-
|
|
29266
|
-
|
|
29267
|
-
|
|
29268
|
-
|
|
29269
|
-
|
|
29270
|
-
|
|
29271
|
-
|
|
29272
|
-
|
|
29273
|
-
|
|
29274
|
-
|
|
29275
|
-
|
|
29276
|
-
|
|
29277
|
-
|
|
29278
|
-
|
|
29279
|
-
|
|
29280
|
-
|
|
29281
|
-
|
|
29282
|
-
|
|
29283
|
-
|
|
29284
|
-
|
|
29285
|
-
|
|
29286
|
-
|
|
29287
|
-
|
|
29288
|
-
|
|
29289
|
-
|
|
29285
|
+
let response = undefined;
|
|
29286
|
+
if (market['spot']) {
|
|
29287
|
+
response = await this.spotV1PrivatePostTradeCancelOpenOrders(this.extend(request, params));
|
|
29288
|
+
//
|
|
29289
|
+
// {
|
|
29290
|
+
// "code": 0,
|
|
29291
|
+
// "msg": "",
|
|
29292
|
+
// "debugMsg": "",
|
|
29293
|
+
// "data": {
|
|
29294
|
+
// "orders": [{
|
|
29295
|
+
// "symbol": "ADA-USDT",
|
|
29296
|
+
// "orderId": 1740659971369992192,
|
|
29297
|
+
// "transactTime": 1703840651730,
|
|
29298
|
+
// "price": 5,
|
|
29299
|
+
// "stopPrice": 0,
|
|
29300
|
+
// "origQty": 10,
|
|
29301
|
+
// "executedQty": 0,
|
|
29302
|
+
// "cummulativeQuoteQty": 0,
|
|
29303
|
+
// "status": "CANCELED",
|
|
29304
|
+
// "type": "LIMIT",
|
|
29305
|
+
// "side": "SELL"
|
|
29306
|
+
// }]
|
|
29307
|
+
// }
|
|
29308
|
+
// }
|
|
29309
|
+
//
|
|
29310
|
+
}
|
|
29311
|
+
else if (market['swap']) {
|
|
29312
|
+
response = await this.swapV2PrivateDeleteTradeAllOpenOrders(this.extend(request, params));
|
|
29313
|
+
//
|
|
29314
|
+
// {
|
|
29315
|
+
// "code": 0,
|
|
29316
|
+
// "msg": "",
|
|
29317
|
+
// "data": {
|
|
29318
|
+
// "success": [
|
|
29319
|
+
// {
|
|
29320
|
+
// "symbol": "LINK-USDT",
|
|
29321
|
+
// "orderId": 1597783835095859200,
|
|
29322
|
+
// "side": "BUY",
|
|
29323
|
+
// "positionSide": "LONG",
|
|
29324
|
+
// "type": "TRIGGER_LIMIT",
|
|
29325
|
+
// "origQty": "5.0",
|
|
29326
|
+
// "price": "9.0000",
|
|
29327
|
+
// "executedQty": "0.0",
|
|
29328
|
+
// "avgPrice": "0.0000",
|
|
29329
|
+
// "cumQuote": "0",
|
|
29330
|
+
// "stopPrice": "9.5000",
|
|
29331
|
+
// "profit": "",
|
|
29332
|
+
// "commission": "",
|
|
29333
|
+
// "status": "NEW",
|
|
29334
|
+
// "time": 1669776326000,
|
|
29335
|
+
// "updateTime": 1669776326000
|
|
29336
|
+
// }
|
|
29337
|
+
// ],
|
|
29338
|
+
// "failed": null
|
|
29339
|
+
// }
|
|
29340
|
+
// }
|
|
29341
|
+
//
|
|
29342
|
+
}
|
|
29343
|
+
else {
|
|
29344
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest(this.id + ' cancelAllOrders is only supported for spot and swap markets.');
|
|
29345
|
+
}
|
|
29290
29346
|
return response;
|
|
29291
29347
|
}
|
|
29292
29348
|
async cancelOrders(ids, symbol = undefined, params = {}) {
|
|
@@ -43654,14 +43710,13 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
|
|
|
43654
43710
|
// "1399132.341"
|
|
43655
43711
|
// ]
|
|
43656
43712
|
//
|
|
43657
|
-
const volumeIndex = (market['inverse']) ? 6 : 5;
|
|
43658
43713
|
return [
|
|
43659
43714
|
this.safeInteger(ohlcv, 0),
|
|
43660
43715
|
this.safeNumber(ohlcv, 1),
|
|
43661
43716
|
this.safeNumber(ohlcv, 2),
|
|
43662
43717
|
this.safeNumber(ohlcv, 3),
|
|
43663
43718
|
this.safeNumber(ohlcv, 4),
|
|
43664
|
-
this.safeNumber(ohlcv,
|
|
43719
|
+
this.safeNumber(ohlcv, 5),
|
|
43665
43720
|
];
|
|
43666
43721
|
}
|
|
43667
43722
|
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
@@ -43969,10 +44024,16 @@ class bitget extends _abstract_bitget_js__WEBPACK_IMPORTED_MODULE_0__/* ["defaul
|
|
|
43969
44024
|
// Use transferable instead of available for swap and margin https://github.com/ccxt/ccxt/pull/19127
|
|
43970
44025
|
const spotAccountFree = this.safeString(entry, 'available');
|
|
43971
44026
|
const contractAccountFree = this.safeString(entry, 'maxTransferOut');
|
|
43972
|
-
|
|
43973
|
-
|
|
43974
|
-
|
|
43975
|
-
|
|
44027
|
+
if (contractAccountFree !== undefined) {
|
|
44028
|
+
account['free'] = contractAccountFree;
|
|
44029
|
+
account['total'] = this.safeString(entry, 'accountEquity');
|
|
44030
|
+
}
|
|
44031
|
+
else {
|
|
44032
|
+
account['free'] = spotAccountFree;
|
|
44033
|
+
const frozen = this.safeString(entry, 'frozen');
|
|
44034
|
+
const locked = this.safeString(entry, 'locked');
|
|
44035
|
+
account['used'] = _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringAdd(frozen, locked);
|
|
44036
|
+
}
|
|
43976
44037
|
}
|
|
43977
44038
|
result[code] = account;
|
|
43978
44039
|
}
|
|
@@ -67109,6 +67170,12 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
|
|
|
67109
67170
|
* @method
|
|
67110
67171
|
* @name bitstamp#createOrder
|
|
67111
67172
|
* @description create a trade order
|
|
67173
|
+
* @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantBuyOrder
|
|
67174
|
+
* @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketBuyOrder
|
|
67175
|
+
* @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitBuyOrder
|
|
67176
|
+
* @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenInstantSellOrder
|
|
67177
|
+
* @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenMarketSellOrder
|
|
67178
|
+
* @see https://www.bitstamp.net/api/#tag/Orders/operation/OpenLimitSellOrder
|
|
67112
67179
|
* @param {string} symbol unified symbol of the market to create an order in
|
|
67113
67180
|
* @param {string} type 'market' or 'limit'
|
|
67114
67181
|
* @param {string} side 'buy' or 'sell'
|
|
@@ -67119,27 +67186,42 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
|
|
|
67119
67186
|
*/
|
|
67120
67187
|
await this.loadMarkets();
|
|
67121
67188
|
const market = this.market(symbol);
|
|
67122
|
-
let method = 'privatePost' + this.capitalize(side);
|
|
67123
67189
|
const request = {
|
|
67124
67190
|
'pair': market['id'],
|
|
67125
67191
|
'amount': this.amountToPrecision(symbol, amount),
|
|
67126
67192
|
};
|
|
67193
|
+
const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
|
|
67194
|
+
if (clientOrderId !== undefined) {
|
|
67195
|
+
request['client_order_id'] = clientOrderId;
|
|
67196
|
+
params = this.omit(params, ['clientOrderId']);
|
|
67197
|
+
}
|
|
67198
|
+
let response = undefined;
|
|
67199
|
+
const capitalizedSide = this.capitalize(side);
|
|
67127
67200
|
if (type === 'market') {
|
|
67128
|
-
|
|
67201
|
+
if (capitalizedSide === 'Buy') {
|
|
67202
|
+
response = await this.privatePostBuyMarketPair(this.extend(request, params));
|
|
67203
|
+
}
|
|
67204
|
+
else {
|
|
67205
|
+
response = await this.privatePostSellMarketPair(this.extend(request, params));
|
|
67206
|
+
}
|
|
67129
67207
|
}
|
|
67130
67208
|
else if (type === 'instant') {
|
|
67131
|
-
|
|
67209
|
+
if (capitalizedSide === 'Buy') {
|
|
67210
|
+
response = await this.privatePostBuyInstantPair(this.extend(request, params));
|
|
67211
|
+
}
|
|
67212
|
+
else {
|
|
67213
|
+
response = await this.privatePostSellInstantPair(this.extend(request, params));
|
|
67214
|
+
}
|
|
67132
67215
|
}
|
|
67133
67216
|
else {
|
|
67134
67217
|
request['price'] = this.priceToPrecision(symbol, price);
|
|
67218
|
+
if (capitalizedSide === 'Buy') {
|
|
67219
|
+
response = await this.privatePostBuyPair(this.extend(request, params));
|
|
67220
|
+
}
|
|
67221
|
+
else {
|
|
67222
|
+
response = await this.privatePostSellPair(this.extend(request, params));
|
|
67223
|
+
}
|
|
67135
67224
|
}
|
|
67136
|
-
method += 'Pair';
|
|
67137
|
-
const clientOrderId = this.safeString2(params, 'client_order_id', 'clientOrderId');
|
|
67138
|
-
if (clientOrderId !== undefined) {
|
|
67139
|
-
request['client_order_id'] = clientOrderId;
|
|
67140
|
-
params = this.omit(params, ['client_order_id', 'clientOrderId']);
|
|
67141
|
-
}
|
|
67142
|
-
const response = await this[method](this.extend(request, params));
|
|
67143
67225
|
const order = this.parseOrder(response, market);
|
|
67144
67226
|
order['type'] = type;
|
|
67145
67227
|
return order;
|
|
@@ -67172,13 +67254,16 @@ class bitstamp extends _abstract_bitstamp_js__WEBPACK_IMPORTED_MODULE_0__/* ["de
|
|
|
67172
67254
|
await this.loadMarkets();
|
|
67173
67255
|
let market = undefined;
|
|
67174
67256
|
const request = {};
|
|
67175
|
-
let
|
|
67257
|
+
let response = undefined;
|
|
67176
67258
|
if (symbol !== undefined) {
|
|
67177
67259
|
market = this.market(symbol);
|
|
67178
67260
|
request['pair'] = market['id'];
|
|
67179
|
-
|
|
67261
|
+
response = await this.privatePostCancelAllOrdersPair(this.extend(request, params));
|
|
67180
67262
|
}
|
|
67181
|
-
|
|
67263
|
+
else {
|
|
67264
|
+
response = await this.privatePostCancelAllOrders(this.extend(request, params));
|
|
67265
|
+
}
|
|
67266
|
+
return response;
|
|
67182
67267
|
}
|
|
67183
67268
|
parseOrderStatus(status) {
|
|
67184
67269
|
const statuses = {
|
|
@@ -86375,14 +86460,16 @@ class cex extends _abstract_cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
86375
86460
|
*/
|
|
86376
86461
|
await this.loadMarkets();
|
|
86377
86462
|
const request = {};
|
|
86378
|
-
let method = 'privatePostOpenOrders';
|
|
86379
86463
|
let market = undefined;
|
|
86464
|
+
let orders = undefined;
|
|
86380
86465
|
if (symbol !== undefined) {
|
|
86381
86466
|
market = this.market(symbol);
|
|
86382
86467
|
request['pair'] = market['id'];
|
|
86383
|
-
|
|
86468
|
+
orders = await this.privatePostOpenOrdersPair(this.extend(request, params));
|
|
86469
|
+
}
|
|
86470
|
+
else {
|
|
86471
|
+
orders = await this.privatePostOpenOrders(this.extend(request, params));
|
|
86384
86472
|
}
|
|
86385
|
-
const orders = await this[method](this.extend(request, params));
|
|
86386
86473
|
for (let i = 0; i < orders.length; i++) {
|
|
86387
86474
|
orders[i] = this.extend(orders[i], { 'status': 'open' });
|
|
86388
86475
|
}
|
|
@@ -86404,10 +86491,9 @@ class cex extends _abstract_cex_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
86404
86491
|
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ArgumentsRequired(this.id + ' fetchClosedOrders() requires a symbol argument');
|
|
86405
86492
|
}
|
|
86406
86493
|
await this.loadMarkets();
|
|
86407
|
-
const method = 'privatePostArchivedOrdersPair';
|
|
86408
86494
|
const market = this.market(symbol);
|
|
86409
86495
|
const request = { 'pair': market['id'] };
|
|
86410
|
-
const response = await this
|
|
86496
|
+
const response = await this.privatePostArchivedOrdersPair(this.extend(request, params));
|
|
86411
86497
|
return this.parseOrders(response, market, since, limit);
|
|
86412
86498
|
}
|
|
86413
86499
|
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
@@ -114988,14 +115074,19 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
114988
115074
|
'instrument_name': market['id'],
|
|
114989
115075
|
'include_old': true,
|
|
114990
115076
|
};
|
|
114991
|
-
const method = (since === undefined) ? 'publicGetGetLastTradesByInstrument' : 'publicGetGetLastTradesByInstrumentAndTime';
|
|
114992
115077
|
if (since !== undefined) {
|
|
114993
115078
|
request['start_timestamp'] = since;
|
|
114994
115079
|
}
|
|
114995
115080
|
if (limit !== undefined) {
|
|
114996
115081
|
request['count'] = Math.min(limit, 1000); // default 10
|
|
114997
115082
|
}
|
|
114998
|
-
|
|
115083
|
+
let response = undefined;
|
|
115084
|
+
if (since === undefined) {
|
|
115085
|
+
response = await this.publicGetGetLastTradesByInstrument(this.extend(request, params));
|
|
115086
|
+
}
|
|
115087
|
+
else {
|
|
115088
|
+
response = await this.publicGetGetLastTradesByInstrumentAndTime(this.extend(request, params));
|
|
115089
|
+
}
|
|
114999
115090
|
//
|
|
115000
115091
|
// {
|
|
115001
115092
|
// "jsonrpc":"2.0",
|
|
@@ -115492,9 +115583,14 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
115492
115583
|
request['time_in_force'] = 'fill_or_kill';
|
|
115493
115584
|
}
|
|
115494
115585
|
}
|
|
115495
|
-
const method = 'privateGet' + this.capitalize(side);
|
|
115496
115586
|
params = this.omit(params, ['timeInForce', 'stopLossPrice', 'takeProfitPrice', 'postOnly', 'reduceOnly']);
|
|
115497
|
-
|
|
115587
|
+
let response = undefined;
|
|
115588
|
+
if (this.capitalize(side) === 'Buy') {
|
|
115589
|
+
response = await this.privateGetBuy(this.extend(request, params));
|
|
115590
|
+
}
|
|
115591
|
+
else {
|
|
115592
|
+
response = await this.privateGetSell(this.extend(request, params));
|
|
115593
|
+
}
|
|
115498
115594
|
//
|
|
115499
115595
|
// {
|
|
115500
115596
|
// "jsonrpc": "2.0",
|
|
@@ -115609,16 +115705,15 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
115609
115705
|
*/
|
|
115610
115706
|
await this.loadMarkets();
|
|
115611
115707
|
const request = {};
|
|
115612
|
-
let
|
|
115708
|
+
let response = undefined;
|
|
115613
115709
|
if (symbol === undefined) {
|
|
115614
|
-
|
|
115710
|
+
response = await this.privateGetCancelAll(this.extend(request, params));
|
|
115615
115711
|
}
|
|
115616
115712
|
else {
|
|
115617
|
-
method = 'privateGetCancelAllByInstrument';
|
|
115618
115713
|
const market = this.market(symbol);
|
|
115619
115714
|
request['instrument_name'] = market['id'];
|
|
115715
|
+
response = await this.privateGetCancelAllByInstrument(this.extend(request, params));
|
|
115620
115716
|
}
|
|
115621
|
-
const response = await this[method](this.extend(request, params));
|
|
115622
115717
|
return response;
|
|
115623
115718
|
}
|
|
115624
115719
|
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
@@ -115635,19 +115730,18 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
115635
115730
|
await this.loadMarkets();
|
|
115636
115731
|
const request = {};
|
|
115637
115732
|
let market = undefined;
|
|
115638
|
-
let
|
|
115733
|
+
let response = undefined;
|
|
115639
115734
|
if (symbol === undefined) {
|
|
115640
115735
|
const code = this.codeFromOptions('fetchOpenOrders', params);
|
|
115641
115736
|
const currency = this.currency(code);
|
|
115642
115737
|
request['currency'] = currency['id'];
|
|
115643
|
-
|
|
115738
|
+
response = await this.privateGetGetOpenOrdersByCurrency(this.extend(request, params));
|
|
115644
115739
|
}
|
|
115645
115740
|
else {
|
|
115646
115741
|
market = this.market(symbol);
|
|
115647
115742
|
request['instrument_name'] = market['id'];
|
|
115648
|
-
|
|
115743
|
+
response = await this.privateGetGetOpenOrdersByInstrument(this.extend(request, params));
|
|
115649
115744
|
}
|
|
115650
|
-
const response = await this[method](this.extend(request, params));
|
|
115651
115745
|
const result = this.safeValue(response, 'result', []);
|
|
115652
115746
|
return this.parseOrders(result, market, since, limit);
|
|
115653
115747
|
}
|
|
@@ -115665,19 +115759,18 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
115665
115759
|
await this.loadMarkets();
|
|
115666
115760
|
const request = {};
|
|
115667
115761
|
let market = undefined;
|
|
115668
|
-
let
|
|
115762
|
+
let response = undefined;
|
|
115669
115763
|
if (symbol === undefined) {
|
|
115670
115764
|
const code = this.codeFromOptions('fetchClosedOrders', params);
|
|
115671
115765
|
const currency = this.currency(code);
|
|
115672
115766
|
request['currency'] = currency['id'];
|
|
115673
|
-
|
|
115767
|
+
response = await this.privateGetGetOrderHistoryByCurrency(this.extend(request, params));
|
|
115674
115768
|
}
|
|
115675
115769
|
else {
|
|
115676
115770
|
market = this.market(symbol);
|
|
115677
115771
|
request['instrument_name'] = market['id'];
|
|
115678
|
-
|
|
115772
|
+
response = await this.privateGetGetOrderHistoryByInstrument(this.extend(request, params));
|
|
115679
115773
|
}
|
|
115680
|
-
const response = await this[method](this.extend(request, params));
|
|
115681
115774
|
const result = this.safeValue(response, 'result', []);
|
|
115682
115775
|
return this.parseOrders(result, market, since, limit);
|
|
115683
115776
|
}
|
|
@@ -115750,34 +115843,33 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
115750
115843
|
'include_old': true,
|
|
115751
115844
|
};
|
|
115752
115845
|
let market = undefined;
|
|
115753
|
-
|
|
115846
|
+
if (limit !== undefined) {
|
|
115847
|
+
request['count'] = limit; // default 10
|
|
115848
|
+
}
|
|
115849
|
+
let response = undefined;
|
|
115754
115850
|
if (symbol === undefined) {
|
|
115755
115851
|
const code = this.codeFromOptions('fetchMyTrades', params);
|
|
115756
115852
|
const currency = this.currency(code);
|
|
115757
115853
|
request['currency'] = currency['id'];
|
|
115758
115854
|
if (since === undefined) {
|
|
115759
|
-
|
|
115855
|
+
response = await this.privateGetGetUserTradesByCurrency(this.extend(request, params));
|
|
115760
115856
|
}
|
|
115761
115857
|
else {
|
|
115762
|
-
method = 'privateGetGetUserTradesByCurrencyAndTime';
|
|
115763
115858
|
request['start_timestamp'] = since;
|
|
115859
|
+
response = await this.privateGetGetUserTradesByCurrencyAndTime(this.extend(request, params));
|
|
115764
115860
|
}
|
|
115765
115861
|
}
|
|
115766
115862
|
else {
|
|
115767
115863
|
market = this.market(symbol);
|
|
115768
115864
|
request['instrument_name'] = market['id'];
|
|
115769
115865
|
if (since === undefined) {
|
|
115770
|
-
|
|
115866
|
+
response = await this.privateGetGetUserTradesByInstrument(this.extend(request, params));
|
|
115771
115867
|
}
|
|
115772
115868
|
else {
|
|
115773
|
-
method = 'privateGetGetUserTradesByInstrumentAndTime';
|
|
115774
115869
|
request['start_timestamp'] = since;
|
|
115870
|
+
response = await this.privateGetGetUserTradesByInstrumentAndTime(this.extend(request, params));
|
|
115775
115871
|
}
|
|
115776
115872
|
}
|
|
115777
|
-
if (limit !== undefined) {
|
|
115778
|
-
request['count'] = limit; // default 10
|
|
115779
|
-
}
|
|
115780
|
-
const response = await this[method](this.extend(request, params));
|
|
115781
115873
|
//
|
|
115782
115874
|
// {
|
|
115783
115875
|
// "jsonrpc": "2.0",
|
|
@@ -116311,7 +116403,13 @@ class deribit extends _abstract_deribit_js__WEBPACK_IMPORTED_MODULE_0__/* ["defa
|
|
|
116311
116403
|
const transferOptions = this.safeValue(this.options, 'transfer', {});
|
|
116312
116404
|
method = this.safeString(transferOptions, 'method', 'privateGetSubmitTransferToSubaccount');
|
|
116313
116405
|
}
|
|
116314
|
-
|
|
116406
|
+
let response = undefined;
|
|
116407
|
+
if (method === 'privateGetSubmitTransferToUser') {
|
|
116408
|
+
response = await this.privateGetSubmitTransferToUser(this.extend(request, params));
|
|
116409
|
+
}
|
|
116410
|
+
else {
|
|
116411
|
+
response = await this.privateGetSubmitTransferToSubaccount(this.extend(request, params));
|
|
116412
|
+
}
|
|
116315
116413
|
//
|
|
116316
116414
|
// {
|
|
116317
116415
|
// "jsonrpc": "2.0",
|
|
@@ -164355,14 +164453,18 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
|
|
|
164355
164453
|
const cancelExist = this.safeValue(order, 'cancelExist', false);
|
|
164356
164454
|
let status = isActive ? 'open' : 'closed';
|
|
164357
164455
|
status = cancelExist ? 'canceled' : status;
|
|
164358
|
-
|
|
164359
|
-
|
|
164360
|
-
|
|
164361
|
-
|
|
164456
|
+
let fee = undefined;
|
|
164457
|
+
if (feeCost !== undefined) {
|
|
164458
|
+
fee = {
|
|
164459
|
+
'currency': feeCurrency,
|
|
164460
|
+
'cost': feeCost,
|
|
164461
|
+
};
|
|
164462
|
+
}
|
|
164362
164463
|
const clientOrderId = this.safeString(order, 'clientOid');
|
|
164363
164464
|
const timeInForce = this.safeString(order, 'timeInForce');
|
|
164364
164465
|
const stopPrice = this.safeNumber(order, 'stopPrice');
|
|
164365
164466
|
const postOnly = this.safeValue(order, 'postOnly');
|
|
164467
|
+
const reduceOnly = this.safeValue(order, 'reduceOnly');
|
|
164366
164468
|
const lastUpdateTimestamp = this.safeInteger(order, 'updatedAt');
|
|
164367
164469
|
return this.safeOrder({
|
|
164368
164470
|
'id': orderId,
|
|
@@ -164371,6 +164473,7 @@ class kucoinfutures extends _abstract_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_
|
|
|
164371
164473
|
'type': type,
|
|
164372
164474
|
'timeInForce': timeInForce,
|
|
164373
164475
|
'postOnly': postOnly,
|
|
164476
|
+
'reduceOnly': reduceOnly,
|
|
164374
164477
|
'side': side,
|
|
164375
164478
|
'amount': amount,
|
|
164376
164479
|
'price': price,
|
|
@@ -173122,7 +173225,13 @@ class lykke extends _abstract_lykke_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
173122
173225
|
};
|
|
173123
173226
|
// publicGetTickers or publicGetPrices
|
|
173124
173227
|
const method = this.safeString(this.options, 'fetchTickerMethod', 'publicGetTickers');
|
|
173125
|
-
|
|
173228
|
+
let response = undefined;
|
|
173229
|
+
if (method === 'publicGetPrices') {
|
|
173230
|
+
response = await this.publicGetPrices(this.extend(request, params));
|
|
173231
|
+
}
|
|
173232
|
+
else {
|
|
173233
|
+
response = await this.publicGetTickers(this.extend(request, params));
|
|
173234
|
+
}
|
|
173126
173235
|
const ticker = this.safeValue(response, 'payload', []);
|
|
173127
173236
|
//
|
|
173128
173237
|
// publicGetTickers
|
|
@@ -173476,8 +173585,13 @@ class lykke extends _abstract_lykke_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
173476
173585
|
if (type === 'limit') {
|
|
173477
173586
|
query['price'] = parseFloat(this.priceToPrecision(market['symbol'], price));
|
|
173478
173587
|
}
|
|
173479
|
-
|
|
173480
|
-
|
|
173588
|
+
let result = undefined;
|
|
173589
|
+
if (this.capitalize(type) === 'Market') {
|
|
173590
|
+
result = await this.privatePostOrdersMarket(this.extend(query, params));
|
|
173591
|
+
}
|
|
173592
|
+
else {
|
|
173593
|
+
result = await this.privatePostOrdersLimit(this.extend(query, params));
|
|
173594
|
+
}
|
|
173481
173595
|
//
|
|
173482
173596
|
// market
|
|
173483
173597
|
//
|
|
@@ -205871,9 +205985,15 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
|
|
|
205871
205985
|
if (symbol !== undefined) {
|
|
205872
205986
|
request['symbol'] = this.marketId(symbol);
|
|
205873
205987
|
}
|
|
205874
|
-
const stop = this.
|
|
205875
|
-
|
|
205876
|
-
|
|
205988
|
+
const stop = this.safeValue2(params, 'stop', 'trigger');
|
|
205989
|
+
params = this.omit(params, ['stop', 'trigger']);
|
|
205990
|
+
let response = undefined;
|
|
205991
|
+
if (stop) {
|
|
205992
|
+
response = await this.privateDeleteStopOrders(this.extend(request, params));
|
|
205993
|
+
}
|
|
205994
|
+
else {
|
|
205995
|
+
response = await this.privateDeleteOrders(this.extend(request, params));
|
|
205996
|
+
}
|
|
205877
205997
|
//
|
|
205878
205998
|
// {
|
|
205879
205999
|
// "code": "200000",
|
|
@@ -205935,9 +206055,9 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
|
|
|
205935
206055
|
* @returns An [array of order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
205936
206056
|
*/
|
|
205937
206057
|
await this.loadMarkets();
|
|
205938
|
-
const stop = this.
|
|
206058
|
+
const stop = this.safeValue2(params, 'stop', 'trigger');
|
|
205939
206059
|
const until = this.safeInteger2(params, 'until', 'till');
|
|
205940
|
-
params = this.omit(params, ['stop', 'until', 'till']);
|
|
206060
|
+
params = this.omit(params, ['triger', 'stop', 'until', 'till']);
|
|
205941
206061
|
if (status === 'closed') {
|
|
205942
206062
|
status = 'done';
|
|
205943
206063
|
}
|
|
@@ -205959,8 +206079,13 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
|
|
|
205959
206079
|
if (until !== undefined) {
|
|
205960
206080
|
request['endAt'] = until;
|
|
205961
206081
|
}
|
|
205962
|
-
|
|
205963
|
-
|
|
206082
|
+
let response = undefined;
|
|
206083
|
+
if (stop) {
|
|
206084
|
+
response = await this.privateGetStopOrders(this.extend(request, params));
|
|
206085
|
+
}
|
|
206086
|
+
else {
|
|
206087
|
+
response = await this.privateGetOrders(this.extend(request, params));
|
|
206088
|
+
}
|
|
205964
206089
|
//
|
|
205965
206090
|
// {
|
|
205966
206091
|
// "code": "200000",
|
|
@@ -206070,20 +206195,20 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
|
|
|
206070
206195
|
*/
|
|
206071
206196
|
await this.loadMarkets();
|
|
206072
206197
|
const request = {};
|
|
206073
|
-
let
|
|
206198
|
+
let response = undefined;
|
|
206074
206199
|
if (id === undefined) {
|
|
206075
206200
|
const clientOrderId = this.safeString2(params, 'clientOid', 'clientOrderId');
|
|
206076
206201
|
if (clientOrderId === undefined) {
|
|
206077
206202
|
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.InvalidOrder(this.id + ' fetchOrder() requires parameter id or params.clientOid');
|
|
206078
206203
|
}
|
|
206079
206204
|
request['clientOid'] = clientOrderId;
|
|
206080
|
-
method = 'privateGetOrdersByClientOid';
|
|
206081
206205
|
params = this.omit(params, ['clientOid', 'clientOrderId']);
|
|
206206
|
+
response = await this.privateGetClientOrderIdClientOid(this.extend(request, params));
|
|
206082
206207
|
}
|
|
206083
206208
|
else {
|
|
206084
206209
|
request['order-id'] = id;
|
|
206210
|
+
response = await this.privateGetOrdersOrderId(this.extend(request, params));
|
|
206085
206211
|
}
|
|
206086
|
-
const response = await this[method](this.extend(request, params));
|
|
206087
206212
|
//
|
|
206088
206213
|
// {
|
|
206089
206214
|
// "code": "200000",
|
|
@@ -206403,7 +206528,7 @@ class poloniexfutures extends _abstract_poloniexfutures_js__WEBPACK_IMPORTED_MOD
|
|
|
206403
206528
|
const version = this.safeString(params, 'version', defaultVersion);
|
|
206404
206529
|
const tail = '/api/' + version + '/' + this.implodeParams(path, params);
|
|
206405
206530
|
url += tail;
|
|
206406
|
-
const query = this.omit(params, path);
|
|
206531
|
+
const query = this.omit(params, this.extractParams(path));
|
|
206407
206532
|
const queryLength = Object.keys(query).length;
|
|
206408
206533
|
if (api === 'public') {
|
|
206409
206534
|
if (queryLength) {
|
|
@@ -209319,25 +209444,27 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
209319
209444
|
const listenKeyRefreshRate = this.safeInteger(this.options, 'listenKeyRefreshRate', 1200000);
|
|
209320
209445
|
const delay = this.sum(listenKeyRefreshRate, 10000);
|
|
209321
209446
|
if (time - lastAuthenticatedTime > delay) {
|
|
209322
|
-
let
|
|
209447
|
+
let response = undefined;
|
|
209323
209448
|
if (type === 'future') {
|
|
209324
|
-
|
|
209449
|
+
response = await this.fapiPrivatePostListenKey(query);
|
|
209325
209450
|
}
|
|
209326
209451
|
else if (type === 'delivery') {
|
|
209327
|
-
|
|
209452
|
+
response = await this.dapiPrivatePostListenKey(query);
|
|
209328
209453
|
}
|
|
209329
209454
|
else if (type === 'margin' && isCrossMargin) {
|
|
209330
|
-
|
|
209455
|
+
response = await this.sapiPostUserDataStream(query);
|
|
209331
209456
|
}
|
|
209332
209457
|
else if (isIsolatedMargin) {
|
|
209333
|
-
method = 'sapiPostUserDataStreamIsolated';
|
|
209334
209458
|
if (symbol === undefined) {
|
|
209335
209459
|
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_1__.ArgumentsRequired(this.id + ' authenticate() requires a symbol argument for isolated margin mode');
|
|
209336
209460
|
}
|
|
209337
209461
|
const marketId = this.marketId(symbol);
|
|
209338
209462
|
query = this.extend(query, { 'symbol': marketId });
|
|
209463
|
+
response = await this.sapiPostUserDataStreamIsolated(query);
|
|
209464
|
+
}
|
|
209465
|
+
else {
|
|
209466
|
+
response = await this.publicPostUserDataStream(query);
|
|
209339
209467
|
}
|
|
209340
|
-
const response = await this[method](query);
|
|
209341
209468
|
this.options[type] = this.extend(options, {
|
|
209342
209469
|
'listenKey': this.safeString(response, 'listenKey'),
|
|
209343
209470
|
'lastAuthenticatedTime': time,
|
|
@@ -209363,26 +209490,27 @@ class binance extends _binance_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
209363
209490
|
// A network error happened: we can't renew a listen key that does not exist.
|
|
209364
209491
|
return;
|
|
209365
209492
|
}
|
|
209366
|
-
let method = 'publicPutUserDataStream';
|
|
209367
209493
|
const request = {};
|
|
209368
209494
|
const symbol = this.safeString(params, 'symbol');
|
|
209369
209495
|
const sendParams = this.omit(params, ['type', 'symbol']);
|
|
209370
|
-
if (type === 'future') {
|
|
209371
|
-
method = 'fapiPrivatePutListenKey';
|
|
209372
|
-
}
|
|
209373
|
-
else if (type === 'delivery') {
|
|
209374
|
-
method = 'dapiPrivatePutListenKey';
|
|
209375
|
-
}
|
|
209376
|
-
else {
|
|
209377
|
-
request['listenKey'] = listenKey;
|
|
209378
|
-
if (type === 'margin') {
|
|
209379
|
-
request['symbol'] = symbol;
|
|
209380
|
-
method = 'sapiPutUserDataStream';
|
|
209381
|
-
}
|
|
209382
|
-
}
|
|
209383
209496
|
const time = this.milliseconds();
|
|
209384
209497
|
try {
|
|
209385
|
-
|
|
209498
|
+
if (type === 'future') {
|
|
209499
|
+
await this.fapiPrivatePutListenKey(this.extend(request, sendParams));
|
|
209500
|
+
}
|
|
209501
|
+
else if (type === 'delivery') {
|
|
209502
|
+
await this.dapiPrivatePutListenKey(this.extend(request, sendParams));
|
|
209503
|
+
}
|
|
209504
|
+
else {
|
|
209505
|
+
request['listenKey'] = listenKey;
|
|
209506
|
+
if (type === 'margin') {
|
|
209507
|
+
request['symbol'] = symbol;
|
|
209508
|
+
await this.sapiPutUserDataStream(this.extend(request, sendParams));
|
|
209509
|
+
}
|
|
209510
|
+
else {
|
|
209511
|
+
await this.publicPutUserDataStream(this.extend(request, sendParams));
|
|
209512
|
+
}
|
|
209513
|
+
}
|
|
209386
209514
|
}
|
|
209387
209515
|
catch (error) {
|
|
209388
209516
|
const url = this.urls['api']['ws'][type] + '/' + this.options[type]['listenKey'];
|
|
@@ -215711,7 +215839,7 @@ class bitmart extends _bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
215711
215839
|
'awaitBalanceSnapshot': false, // whether to wait for the balance snapshot before providing updates
|
|
215712
215840
|
},
|
|
215713
215841
|
'watchOrderBook': {
|
|
215714
|
-
'depth': '
|
|
215842
|
+
'depth': 'depth/increase100', // depth/increase100, depth5, depth20, depth50
|
|
215715
215843
|
},
|
|
215716
215844
|
'ws': {
|
|
215717
215845
|
'inflate': true,
|
|
@@ -216729,6 +216857,7 @@ class bitmart extends _bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
216729
216857
|
* @method
|
|
216730
216858
|
* @name bitmart#watchOrderBook
|
|
216731
216859
|
* @see https://developer-pro.bitmart.com/en/spot/#public-depth-all-channel
|
|
216860
|
+
* @see https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
|
|
216732
216861
|
* @see https://developer-pro.bitmart.com/en/futures/#public-depth-channel
|
|
216733
216862
|
* @description watches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
216734
216863
|
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
@@ -216738,11 +216867,14 @@ class bitmart extends _bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
216738
216867
|
*/
|
|
216739
216868
|
await this.loadMarkets();
|
|
216740
216869
|
const options = this.safeValue(this.options, 'watchOrderBook', {});
|
|
216741
|
-
|
|
216870
|
+
let depth = this.safeString(options, 'depth', 'depth/increase100');
|
|
216742
216871
|
symbol = this.symbol(symbol);
|
|
216743
216872
|
const market = this.market(symbol);
|
|
216744
216873
|
let type = 'spot';
|
|
216745
216874
|
[type, params] = this.handleMarketTypeAndParams('watchOrderBook', market, params);
|
|
216875
|
+
if (type === 'swap' && depth === 'depth/increase100') {
|
|
216876
|
+
depth = 'depth50';
|
|
216877
|
+
}
|
|
216746
216878
|
const orderbook = await this.subscribe(depth, symbol, type, params);
|
|
216747
216879
|
return orderbook.limit();
|
|
216748
216880
|
}
|
|
@@ -216791,46 +216923,72 @@ class bitmart extends _bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
216791
216923
|
}
|
|
216792
216924
|
handleOrderBook(client, message) {
|
|
216793
216925
|
//
|
|
216794
|
-
// spot
|
|
216795
|
-
//
|
|
216796
|
-
//
|
|
216797
|
-
//
|
|
216798
|
-
//
|
|
216799
|
-
//
|
|
216800
|
-
//
|
|
216801
|
-
//
|
|
216802
|
-
//
|
|
216803
|
-
//
|
|
216804
|
-
//
|
|
216805
|
-
//
|
|
216806
|
-
//
|
|
216926
|
+
// spot depth-all
|
|
216927
|
+
// {
|
|
216928
|
+
// "data": [
|
|
216929
|
+
// {
|
|
216930
|
+
// "asks": [
|
|
216931
|
+
// [ '46828.38', "0.21847" ],
|
|
216932
|
+
// [ '46830.68', "0.08232" ],
|
|
216933
|
+
// ...
|
|
216934
|
+
// ],
|
|
216935
|
+
// "bids": [
|
|
216936
|
+
// [ '46820.78', "0.00444" ],
|
|
216937
|
+
// [ '46814.33', "0.00234" ],
|
|
216938
|
+
// ...
|
|
216939
|
+
// ],
|
|
216940
|
+
// "ms_t": 1631044962431,
|
|
216941
|
+
// "symbol": "BTC_USDT"
|
|
216942
|
+
// }
|
|
216943
|
+
// ],
|
|
216944
|
+
// "table": "spot/depth5"
|
|
216945
|
+
// }
|
|
216946
|
+
// spot increse depth snapshot
|
|
216947
|
+
// {
|
|
216948
|
+
// "data":[
|
|
216949
|
+
// {
|
|
216950
|
+
// "asks":[
|
|
216951
|
+
// [
|
|
216952
|
+
// "43652.52",
|
|
216953
|
+
// "0.02039"
|
|
216807
216954
|
// ],
|
|
216808
|
-
//
|
|
216809
|
-
//
|
|
216810
|
-
//
|
|
216811
|
-
//
|
|
216812
|
-
//
|
|
216813
|
-
//
|
|
216955
|
+
// ...
|
|
216956
|
+
// ],
|
|
216957
|
+
// "bids":[
|
|
216958
|
+
// [
|
|
216959
|
+
// "43652.51",
|
|
216960
|
+
// "0.00500"
|
|
216961
|
+
// ],
|
|
216962
|
+
// ...
|
|
216963
|
+
// ],
|
|
216964
|
+
// "ms_t":1703376836487,
|
|
216965
|
+
// "symbol":"BTC_USDT",
|
|
216966
|
+
// "type":"snapshot", // or update
|
|
216967
|
+
// "version":2141731
|
|
216968
|
+
// }
|
|
216969
|
+
// ],
|
|
216970
|
+
// "table":"spot/depth/increase100"
|
|
216971
|
+
// }
|
|
216814
216972
|
// swap
|
|
216815
|
-
//
|
|
216816
|
-
//
|
|
216817
|
-
//
|
|
216818
|
-
//
|
|
216819
|
-
//
|
|
216820
|
-
//
|
|
216821
|
-
//
|
|
216822
|
-
//
|
|
216823
|
-
//
|
|
216824
|
-
//
|
|
216825
|
-
//
|
|
216826
|
-
//
|
|
216827
|
-
//
|
|
216828
|
-
//
|
|
216829
|
-
//
|
|
216830
|
-
//
|
|
216831
|
-
//
|
|
216832
|
-
//
|
|
216833
|
-
//
|
|
216973
|
+
// {
|
|
216974
|
+
// "group":"futures/depth50:BTCUSDT",
|
|
216975
|
+
// "data":{
|
|
216976
|
+
// "symbol":"BTCUSDT",
|
|
216977
|
+
// "way":1,
|
|
216978
|
+
// "depths":[
|
|
216979
|
+
// {
|
|
216980
|
+
// "price":"39509.8",
|
|
216981
|
+
// "vol":"2379"
|
|
216982
|
+
// },
|
|
216983
|
+
// {
|
|
216984
|
+
// "price":"39509.6",
|
|
216985
|
+
// "vol":"6815"
|
|
216986
|
+
// },
|
|
216987
|
+
// ...
|
|
216988
|
+
// ],
|
|
216989
|
+
// "ms_t":1701566021194
|
|
216990
|
+
// }
|
|
216991
|
+
// }
|
|
216834
216992
|
//
|
|
216835
216993
|
const data = this.safeValue(message, 'data');
|
|
216836
216994
|
if (data === undefined) {
|
|
@@ -216839,12 +216997,16 @@ class bitmart extends _bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
216839
216997
|
const depths = this.safeValue(data, 'depths');
|
|
216840
216998
|
const isSpot = (depths === undefined);
|
|
216841
216999
|
const table = this.safeString2(message, 'table', 'group');
|
|
216842
|
-
|
|
216843
|
-
const
|
|
216844
|
-
let
|
|
216845
|
-
|
|
216846
|
-
|
|
216847
|
-
|
|
217000
|
+
// find limit subscribed to
|
|
217001
|
+
const limitsToCheck = ['100', '50', '20', '10', '5'];
|
|
217002
|
+
let limit = 0;
|
|
217003
|
+
for (let i = 0; i < limitsToCheck.length; i++) {
|
|
217004
|
+
const limitString = limitsToCheck[i];
|
|
217005
|
+
if (table.indexOf(limitString) >= 0) {
|
|
217006
|
+
limit = this.parseToInt(limitString);
|
|
217007
|
+
break;
|
|
217008
|
+
}
|
|
217009
|
+
}
|
|
216848
217010
|
if (isSpot) {
|
|
216849
217011
|
for (let i = 0; i < data.length; i++) {
|
|
216850
217012
|
const update = data[i];
|
|
@@ -216856,7 +217018,10 @@ class bitmart extends _bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
216856
217018
|
orderbook['symbol'] = symbol;
|
|
216857
217019
|
this.orderbooks[symbol] = orderbook;
|
|
216858
217020
|
}
|
|
216859
|
-
|
|
217021
|
+
const type = this.safeValue(update, 'type');
|
|
217022
|
+
if ((type === 'snapshot') || (!(table.indexOf('increase') >= 0))) {
|
|
217023
|
+
orderbook.reset({});
|
|
217024
|
+
}
|
|
216860
217025
|
this.handleOrderBookMessage(client, update, orderbook);
|
|
216861
217026
|
const timestamp = this.safeInteger(update, 'ms_t');
|
|
216862
217027
|
orderbook['timestamp'] = timestamp;
|
|
@@ -217048,9 +217213,7 @@ class bitmart extends _bitmart_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */
|
|
|
217048
217213
|
}
|
|
217049
217214
|
else {
|
|
217050
217215
|
const methods = {
|
|
217051
|
-
'
|
|
217052
|
-
'depth20': this.handleOrderBook,
|
|
217053
|
-
'depth50': this.handleOrderBook,
|
|
217216
|
+
'depth': this.handleOrderBook,
|
|
217054
217217
|
'ticker': this.handleTicker,
|
|
217055
217218
|
'trade': this.handleTrade,
|
|
217056
217219
|
'kline': this.handleOHLCV,
|
|
@@ -223804,10 +223967,15 @@ class bybit extends _bybit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
|
223804
223967
|
}
|
|
223805
223968
|
const trades = this.myTrades;
|
|
223806
223969
|
const symbols = {};
|
|
223807
|
-
const method = spot ? 'parseWsTrade' : 'parseTrade';
|
|
223808
223970
|
for (let i = 0; i < data.length; i++) {
|
|
223809
223971
|
const rawTrade = data[i];
|
|
223810
|
-
|
|
223972
|
+
let parsed = undefined;
|
|
223973
|
+
if (spot) {
|
|
223974
|
+
parsed = this.parseWsTrade(rawTrade);
|
|
223975
|
+
}
|
|
223976
|
+
else {
|
|
223977
|
+
parsed = this.parseTrade(rawTrade);
|
|
223978
|
+
}
|
|
223811
223979
|
const symbol = parsed['symbol'];
|
|
223812
223980
|
symbols[symbol] = true;
|
|
223813
223981
|
trades.append(parsed);
|
|
@@ -283061,6 +283229,752 @@ class yobit extends _abstract_yobit_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"
|
|
|
283061
283229
|
}
|
|
283062
283230
|
|
|
283063
283231
|
|
|
283232
|
+
/***/ }),
|
|
283233
|
+
|
|
283234
|
+
/***/ 5934:
|
|
283235
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
283236
|
+
|
|
283237
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
283238
|
+
/* harmony export */ Z: () => (/* binding */ zaif)
|
|
283239
|
+
/* harmony export */ });
|
|
283240
|
+
/* harmony import */ var _abstract_zaif_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5224);
|
|
283241
|
+
/* harmony import */ var _base_errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6689);
|
|
283242
|
+
/* harmony import */ var _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2194);
|
|
283243
|
+
/* harmony import */ var _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9292);
|
|
283244
|
+
/* harmony import */ var _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7110);
|
|
283245
|
+
// ---------------------------------------------------------------------------
|
|
283246
|
+
|
|
283247
|
+
|
|
283248
|
+
|
|
283249
|
+
|
|
283250
|
+
|
|
283251
|
+
// ---------------------------------------------------------------------------
|
|
283252
|
+
/**
|
|
283253
|
+
* @class zaif
|
|
283254
|
+
* @augments Exchange
|
|
283255
|
+
*/
|
|
283256
|
+
class zaif extends _abstract_zaif_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z {
|
|
283257
|
+
describe() {
|
|
283258
|
+
return this.deepExtend(super.describe(), {
|
|
283259
|
+
'id': 'zaif',
|
|
283260
|
+
'name': 'Zaif',
|
|
283261
|
+
'countries': ['JP'],
|
|
283262
|
+
// 10 requests per second = 1000ms / 10 = 100ms between requests (public market endpoints)
|
|
283263
|
+
'rateLimit': 100,
|
|
283264
|
+
'version': '1',
|
|
283265
|
+
'has': {
|
|
283266
|
+
'CORS': undefined,
|
|
283267
|
+
'spot': true,
|
|
283268
|
+
'margin': undefined,
|
|
283269
|
+
'swap': false,
|
|
283270
|
+
'future': false,
|
|
283271
|
+
'option': false,
|
|
283272
|
+
'cancelOrder': true,
|
|
283273
|
+
'createMarketOrder': false,
|
|
283274
|
+
'createOrder': true,
|
|
283275
|
+
'fetchBalance': true,
|
|
283276
|
+
'fetchClosedOrders': true,
|
|
283277
|
+
'fetchFundingHistory': false,
|
|
283278
|
+
'fetchFundingRate': false,
|
|
283279
|
+
'fetchFundingRateHistory': false,
|
|
283280
|
+
'fetchFundingRates': false,
|
|
283281
|
+
'fetchIndexOHLCV': false,
|
|
283282
|
+
'fetchMarkets': true,
|
|
283283
|
+
'fetchMarkOHLCV': false,
|
|
283284
|
+
'fetchOpenInterestHistory': false,
|
|
283285
|
+
'fetchOpenOrders': true,
|
|
283286
|
+
'fetchOrderBook': true,
|
|
283287
|
+
'fetchPremiumIndexOHLCV': false,
|
|
283288
|
+
'fetchTicker': true,
|
|
283289
|
+
'fetchTrades': true,
|
|
283290
|
+
'fetchTradingFee': false,
|
|
283291
|
+
'fetchTradingFees': false,
|
|
283292
|
+
'withdraw': true,
|
|
283293
|
+
},
|
|
283294
|
+
'urls': {
|
|
283295
|
+
'logo': 'https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg',
|
|
283296
|
+
'api': {
|
|
283297
|
+
'rest': 'https://api.zaif.jp',
|
|
283298
|
+
},
|
|
283299
|
+
'www': 'https://zaif.jp',
|
|
283300
|
+
'doc': [
|
|
283301
|
+
'https://techbureau-api-document.readthedocs.io/ja/latest/index.html',
|
|
283302
|
+
'https://corp.zaif.jp/api-docs',
|
|
283303
|
+
'https://corp.zaif.jp/api-docs/api_links',
|
|
283304
|
+
'https://www.npmjs.com/package/zaif.jp',
|
|
283305
|
+
'https://github.com/you21979/node-zaif',
|
|
283306
|
+
],
|
|
283307
|
+
'fees': 'https://zaif.jp/fee?lang=en',
|
|
283308
|
+
},
|
|
283309
|
+
'fees': {
|
|
283310
|
+
'trading': {
|
|
283311
|
+
'percentage': true,
|
|
283312
|
+
'taker': this.parseNumber('0.001'),
|
|
283313
|
+
'maker': this.parseNumber('0'),
|
|
283314
|
+
},
|
|
283315
|
+
},
|
|
283316
|
+
'api': {
|
|
283317
|
+
'public': {
|
|
283318
|
+
'get': {
|
|
283319
|
+
'depth/{pair}': 1,
|
|
283320
|
+
'currencies/{pair}': 1,
|
|
283321
|
+
'currencies/all': 1,
|
|
283322
|
+
'currency_pairs/{pair}': 1,
|
|
283323
|
+
'currency_pairs/all': 1,
|
|
283324
|
+
'last_price/{pair}': 1,
|
|
283325
|
+
'ticker/{pair}': 1,
|
|
283326
|
+
'trades/{pair}': 1,
|
|
283327
|
+
},
|
|
283328
|
+
},
|
|
283329
|
+
'private': {
|
|
283330
|
+
'post': {
|
|
283331
|
+
'active_orders': 5,
|
|
283332
|
+
'cancel_order': 5,
|
|
283333
|
+
'deposit_history': 5,
|
|
283334
|
+
'get_id_info': 5,
|
|
283335
|
+
'get_info': 10,
|
|
283336
|
+
'get_info2': 5,
|
|
283337
|
+
'get_personal_info': 5,
|
|
283338
|
+
'trade': 5,
|
|
283339
|
+
'trade_history': 50,
|
|
283340
|
+
'withdraw': 5,
|
|
283341
|
+
'withdraw_history': 5,
|
|
283342
|
+
},
|
|
283343
|
+
},
|
|
283344
|
+
'ecapi': {
|
|
283345
|
+
'post': {
|
|
283346
|
+
'createInvoice': 1,
|
|
283347
|
+
'getInvoice': 1,
|
|
283348
|
+
'getInvoiceIdsByOrderNumber': 1,
|
|
283349
|
+
'cancelInvoice': 1,
|
|
283350
|
+
},
|
|
283351
|
+
},
|
|
283352
|
+
'tlapi': {
|
|
283353
|
+
'post': {
|
|
283354
|
+
'get_positions': 66,
|
|
283355
|
+
'position_history': 66,
|
|
283356
|
+
'active_positions': 5,
|
|
283357
|
+
'create_position': 33,
|
|
283358
|
+
'change_position': 33,
|
|
283359
|
+
'cancel_position': 33, // 3 in 10 seconds
|
|
283360
|
+
},
|
|
283361
|
+
},
|
|
283362
|
+
'fapi': {
|
|
283363
|
+
'get': {
|
|
283364
|
+
'groups/{group_id}': 1,
|
|
283365
|
+
'last_price/{group_id}/{pair}': 1,
|
|
283366
|
+
'ticker/{group_id}/{pair}': 1,
|
|
283367
|
+
'trades/{group_id}/{pair}': 1,
|
|
283368
|
+
'depth/{group_id}/{pair}': 1,
|
|
283369
|
+
},
|
|
283370
|
+
},
|
|
283371
|
+
},
|
|
283372
|
+
'options': {},
|
|
283373
|
+
'precisionMode': _base_functions_number_js__WEBPACK_IMPORTED_MODULE_1__/* .TICK_SIZE */ .sh,
|
|
283374
|
+
'exceptions': {
|
|
283375
|
+
'exact': {
|
|
283376
|
+
'unsupported currency_pair': _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.BadRequest, // {"error": "unsupported currency_pair"}
|
|
283377
|
+
},
|
|
283378
|
+
'broad': {},
|
|
283379
|
+
},
|
|
283380
|
+
});
|
|
283381
|
+
}
|
|
283382
|
+
async fetchMarkets(params = {}) {
|
|
283383
|
+
/**
|
|
283384
|
+
* @method
|
|
283385
|
+
* @name zaif#fetchMarkets
|
|
283386
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id12
|
|
283387
|
+
* @description retrieves data on all markets for zaif
|
|
283388
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283389
|
+
* @returns {object[]} an array of objects representing market data
|
|
283390
|
+
*/
|
|
283391
|
+
const markets = await this.publicGetCurrencyPairsAll(params);
|
|
283392
|
+
//
|
|
283393
|
+
// [
|
|
283394
|
+
// {
|
|
283395
|
+
// "aux_unit_point": 0,
|
|
283396
|
+
// "item_japanese": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3",
|
|
283397
|
+
// "aux_unit_step": 5.0,
|
|
283398
|
+
// "description": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059",
|
|
283399
|
+
// "item_unit_min": 0.001,
|
|
283400
|
+
// "event_number": 0,
|
|
283401
|
+
// "currency_pair": "btc_jpy",
|
|
283402
|
+
// "is_token": false,
|
|
283403
|
+
// "aux_unit_min": 5.0,
|
|
283404
|
+
// "aux_japanese": "\u65e5\u672c\u5186",
|
|
283405
|
+
// "id": 1,
|
|
283406
|
+
// "item_unit_step": 0.0001,
|
|
283407
|
+
// "name": "BTC/JPY",
|
|
283408
|
+
// "seq": 0,
|
|
283409
|
+
// "title": "BTC/JPY"
|
|
283410
|
+
// }
|
|
283411
|
+
// ]
|
|
283412
|
+
//
|
|
283413
|
+
return this.parseMarkets(markets);
|
|
283414
|
+
}
|
|
283415
|
+
parseMarket(market) {
|
|
283416
|
+
const id = this.safeString(market, 'currency_pair');
|
|
283417
|
+
const name = this.safeString(market, 'name');
|
|
283418
|
+
const [baseId, quoteId] = name.split('/');
|
|
283419
|
+
const base = this.safeCurrencyCode(baseId);
|
|
283420
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
283421
|
+
const symbol = base + '/' + quote;
|
|
283422
|
+
return {
|
|
283423
|
+
'id': id,
|
|
283424
|
+
'symbol': symbol,
|
|
283425
|
+
'base': base,
|
|
283426
|
+
'quote': quote,
|
|
283427
|
+
'settle': undefined,
|
|
283428
|
+
'baseId': baseId,
|
|
283429
|
+
'quoteId': quoteId,
|
|
283430
|
+
'settleId': undefined,
|
|
283431
|
+
'type': 'spot',
|
|
283432
|
+
'spot': true,
|
|
283433
|
+
'margin': undefined,
|
|
283434
|
+
'swap': false,
|
|
283435
|
+
'future': false,
|
|
283436
|
+
'option': false,
|
|
283437
|
+
'active': undefined,
|
|
283438
|
+
'contract': false,
|
|
283439
|
+
'linear': undefined,
|
|
283440
|
+
'inverse': undefined,
|
|
283441
|
+
'contractSize': undefined,
|
|
283442
|
+
'expiry': undefined,
|
|
283443
|
+
'expiryDatetime': undefined,
|
|
283444
|
+
'strike': undefined,
|
|
283445
|
+
'optionType': undefined,
|
|
283446
|
+
'precision': {
|
|
283447
|
+
'amount': this.safeNumber(market, 'item_unit_step'),
|
|
283448
|
+
'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'aux_unit_point'))),
|
|
283449
|
+
},
|
|
283450
|
+
'limits': {
|
|
283451
|
+
'leverage': {
|
|
283452
|
+
'min': undefined,
|
|
283453
|
+
'max': undefined,
|
|
283454
|
+
},
|
|
283455
|
+
'amount': {
|
|
283456
|
+
'min': this.safeNumber(market, 'item_unit_min'),
|
|
283457
|
+
'max': undefined,
|
|
283458
|
+
},
|
|
283459
|
+
'price': {
|
|
283460
|
+
'min': this.safeNumber(market, 'aux_unit_min'),
|
|
283461
|
+
'max': undefined,
|
|
283462
|
+
},
|
|
283463
|
+
'cost': {
|
|
283464
|
+
'min': undefined,
|
|
283465
|
+
'max': undefined,
|
|
283466
|
+
},
|
|
283467
|
+
},
|
|
283468
|
+
'created': undefined,
|
|
283469
|
+
'info': market,
|
|
283470
|
+
};
|
|
283471
|
+
}
|
|
283472
|
+
parseBalance(response) {
|
|
283473
|
+
const balances = this.safeValue(response, 'return', {});
|
|
283474
|
+
const deposit = this.safeValue(balances, 'deposit');
|
|
283475
|
+
const result = {
|
|
283476
|
+
'info': response,
|
|
283477
|
+
'timestamp': undefined,
|
|
283478
|
+
'datetime': undefined,
|
|
283479
|
+
};
|
|
283480
|
+
const funds = this.safeValue(balances, 'funds', {});
|
|
283481
|
+
const currencyIds = Object.keys(funds);
|
|
283482
|
+
for (let i = 0; i < currencyIds.length; i++) {
|
|
283483
|
+
const currencyId = currencyIds[i];
|
|
283484
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
283485
|
+
const balance = this.safeString(funds, currencyId);
|
|
283486
|
+
const account = this.account();
|
|
283487
|
+
account['free'] = balance;
|
|
283488
|
+
account['total'] = balance;
|
|
283489
|
+
if (deposit !== undefined) {
|
|
283490
|
+
if (currencyId in deposit) {
|
|
283491
|
+
account['total'] = this.safeString(deposit, currencyId);
|
|
283492
|
+
}
|
|
283493
|
+
}
|
|
283494
|
+
result[code] = account;
|
|
283495
|
+
}
|
|
283496
|
+
return this.safeBalance(result);
|
|
283497
|
+
}
|
|
283498
|
+
async fetchBalance(params = {}) {
|
|
283499
|
+
/**
|
|
283500
|
+
* @method
|
|
283501
|
+
* @name zaif#fetchBalance
|
|
283502
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id10
|
|
283503
|
+
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
283504
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283505
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
283506
|
+
*/
|
|
283507
|
+
await this.loadMarkets();
|
|
283508
|
+
const response = await this.privatePostGetInfo(params);
|
|
283509
|
+
return this.parseBalance(response);
|
|
283510
|
+
}
|
|
283511
|
+
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
283512
|
+
/**
|
|
283513
|
+
* @method
|
|
283514
|
+
* @name zaif#fetchOrderBook
|
|
283515
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id34
|
|
283516
|
+
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
283517
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
283518
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
283519
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283520
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
283521
|
+
*/
|
|
283522
|
+
await this.loadMarkets();
|
|
283523
|
+
const market = this.market(symbol);
|
|
283524
|
+
const request = {
|
|
283525
|
+
'pair': market['id'],
|
|
283526
|
+
};
|
|
283527
|
+
const response = await this.publicGetDepthPair(this.extend(request, params));
|
|
283528
|
+
return this.parseOrderBook(response, market['symbol']);
|
|
283529
|
+
}
|
|
283530
|
+
parseTicker(ticker, market = undefined) {
|
|
283531
|
+
//
|
|
283532
|
+
// {
|
|
283533
|
+
// "last": 9e-08,
|
|
283534
|
+
// "high": 1e-07,
|
|
283535
|
+
// "low": 9e-08,
|
|
283536
|
+
// "vwap": 0.0,
|
|
283537
|
+
// "volume": 135250.0,
|
|
283538
|
+
// "bid": 9e-08,
|
|
283539
|
+
// "ask": 1e-07
|
|
283540
|
+
// }
|
|
283541
|
+
//
|
|
283542
|
+
const symbol = this.safeSymbol(undefined, market);
|
|
283543
|
+
const vwap = this.safeString(ticker, 'vwap');
|
|
283544
|
+
const baseVolume = this.safeString(ticker, 'volume');
|
|
283545
|
+
const quoteVolume = _base_Precise_js__WEBPACK_IMPORTED_MODULE_3__/* .Precise */ .O.stringMul(baseVolume, vwap);
|
|
283546
|
+
const last = this.safeString(ticker, 'last');
|
|
283547
|
+
return this.safeTicker({
|
|
283548
|
+
'symbol': symbol,
|
|
283549
|
+
'timestamp': undefined,
|
|
283550
|
+
'datetime': undefined,
|
|
283551
|
+
'high': this.safeString(ticker, 'high'),
|
|
283552
|
+
'low': this.safeString(ticker, 'low'),
|
|
283553
|
+
'bid': this.safeString(ticker, 'bid'),
|
|
283554
|
+
'bidVolume': undefined,
|
|
283555
|
+
'ask': this.safeString(ticker, 'ask'),
|
|
283556
|
+
'askVolume': undefined,
|
|
283557
|
+
'vwap': vwap,
|
|
283558
|
+
'open': undefined,
|
|
283559
|
+
'close': last,
|
|
283560
|
+
'last': last,
|
|
283561
|
+
'previousClose': undefined,
|
|
283562
|
+
'change': undefined,
|
|
283563
|
+
'percentage': undefined,
|
|
283564
|
+
'average': undefined,
|
|
283565
|
+
'baseVolume': baseVolume,
|
|
283566
|
+
'quoteVolume': quoteVolume,
|
|
283567
|
+
'info': ticker,
|
|
283568
|
+
}, market);
|
|
283569
|
+
}
|
|
283570
|
+
async fetchTicker(symbol, params = {}) {
|
|
283571
|
+
/**
|
|
283572
|
+
* @method
|
|
283573
|
+
* @name zaif#fetchTicker
|
|
283574
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id22
|
|
283575
|
+
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
283576
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
283577
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283578
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
283579
|
+
*/
|
|
283580
|
+
await this.loadMarkets();
|
|
283581
|
+
const market = this.market(symbol);
|
|
283582
|
+
const request = {
|
|
283583
|
+
'pair': market['id'],
|
|
283584
|
+
};
|
|
283585
|
+
const ticker = await this.publicGetTickerPair(this.extend(request, params));
|
|
283586
|
+
//
|
|
283587
|
+
// {
|
|
283588
|
+
// "last": 9e-08,
|
|
283589
|
+
// "high": 1e-07,
|
|
283590
|
+
// "low": 9e-08,
|
|
283591
|
+
// "vwap": 0.0,
|
|
283592
|
+
// "volume": 135250.0,
|
|
283593
|
+
// "bid": 9e-08,
|
|
283594
|
+
// "ask": 1e-07
|
|
283595
|
+
// }
|
|
283596
|
+
//
|
|
283597
|
+
return this.parseTicker(ticker, market);
|
|
283598
|
+
}
|
|
283599
|
+
parseTrade(trade, market = undefined) {
|
|
283600
|
+
//
|
|
283601
|
+
// fetchTrades (public)
|
|
283602
|
+
//
|
|
283603
|
+
// {
|
|
283604
|
+
// "date": 1648559414,
|
|
283605
|
+
// "price": 5880375.0,
|
|
283606
|
+
// "amount": 0.017,
|
|
283607
|
+
// "tid": 176126557,
|
|
283608
|
+
// "currency_pair": "btc_jpy",
|
|
283609
|
+
// "trade_type": "ask"
|
|
283610
|
+
// }
|
|
283611
|
+
//
|
|
283612
|
+
let side = this.safeString(trade, 'trade_type');
|
|
283613
|
+
side = (side === 'bid') ? 'buy' : 'sell';
|
|
283614
|
+
const timestamp = this.safeTimestamp(trade, 'date');
|
|
283615
|
+
const id = this.safeString2(trade, 'id', 'tid');
|
|
283616
|
+
const priceString = this.safeString(trade, 'price');
|
|
283617
|
+
const amountString = this.safeString(trade, 'amount');
|
|
283618
|
+
const marketId = this.safeString(trade, 'currency_pair');
|
|
283619
|
+
const symbol = this.safeSymbol(marketId, market, '_');
|
|
283620
|
+
return this.safeTrade({
|
|
283621
|
+
'id': id,
|
|
283622
|
+
'info': trade,
|
|
283623
|
+
'timestamp': timestamp,
|
|
283624
|
+
'datetime': this.iso8601(timestamp),
|
|
283625
|
+
'symbol': symbol,
|
|
283626
|
+
'type': undefined,
|
|
283627
|
+
'side': side,
|
|
283628
|
+
'order': undefined,
|
|
283629
|
+
'takerOrMaker': undefined,
|
|
283630
|
+
'price': priceString,
|
|
283631
|
+
'amount': amountString,
|
|
283632
|
+
'cost': undefined,
|
|
283633
|
+
'fee': undefined,
|
|
283634
|
+
}, market);
|
|
283635
|
+
}
|
|
283636
|
+
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
283637
|
+
/**
|
|
283638
|
+
* @method
|
|
283639
|
+
* @name zaif#fetchTrades
|
|
283640
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id28
|
|
283641
|
+
* @description get the list of most recent trades for a particular symbol
|
|
283642
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
283643
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
283644
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
283645
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283646
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
283647
|
+
*/
|
|
283648
|
+
await this.loadMarkets();
|
|
283649
|
+
const market = this.market(symbol);
|
|
283650
|
+
const request = {
|
|
283651
|
+
'pair': market['id'],
|
|
283652
|
+
};
|
|
283653
|
+
let response = await this.publicGetTradesPair(this.extend(request, params));
|
|
283654
|
+
//
|
|
283655
|
+
// [
|
|
283656
|
+
// {
|
|
283657
|
+
// "date": 1648559414,
|
|
283658
|
+
// "price": 5880375.0,
|
|
283659
|
+
// "amount": 0.017,
|
|
283660
|
+
// "tid": 176126557,
|
|
283661
|
+
// "currency_pair": "btc_jpy",
|
|
283662
|
+
// "trade_type": "ask"
|
|
283663
|
+
// }, ...
|
|
283664
|
+
// ]
|
|
283665
|
+
//
|
|
283666
|
+
const numTrades = response.length;
|
|
283667
|
+
if (numTrades === 1) {
|
|
283668
|
+
const firstTrade = response[0];
|
|
283669
|
+
if (!Object.keys(firstTrade).length) {
|
|
283670
|
+
response = [];
|
|
283671
|
+
}
|
|
283672
|
+
}
|
|
283673
|
+
return this.parseTrades(response, market, since, limit);
|
|
283674
|
+
}
|
|
283675
|
+
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
283676
|
+
/**
|
|
283677
|
+
* @method
|
|
283678
|
+
* @name zaif#createOrder
|
|
283679
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id23
|
|
283680
|
+
* @description create a trade order
|
|
283681
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
283682
|
+
* @param {string} type must be 'limit'
|
|
283683
|
+
* @param {string} side 'buy' or 'sell'
|
|
283684
|
+
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
283685
|
+
* @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
|
|
283686
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283687
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
283688
|
+
*/
|
|
283689
|
+
await this.loadMarkets();
|
|
283690
|
+
if (type !== 'limit') {
|
|
283691
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' createOrder() allows limit orders only');
|
|
283692
|
+
}
|
|
283693
|
+
const market = this.market(symbol);
|
|
283694
|
+
const request = {
|
|
283695
|
+
'currency_pair': market['id'],
|
|
283696
|
+
'action': (side === 'buy') ? 'bid' : 'ask',
|
|
283697
|
+
'amount': amount,
|
|
283698
|
+
'price': price,
|
|
283699
|
+
};
|
|
283700
|
+
const response = await this.privatePostTrade(this.extend(request, params));
|
|
283701
|
+
return this.safeOrder({
|
|
283702
|
+
'info': response,
|
|
283703
|
+
'id': response['return']['order_id'].toString(),
|
|
283704
|
+
}, market);
|
|
283705
|
+
}
|
|
283706
|
+
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
283707
|
+
/**
|
|
283708
|
+
* @method
|
|
283709
|
+
* @name zaif#cancelOrder
|
|
283710
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id37
|
|
283711
|
+
* @description cancels an open order
|
|
283712
|
+
* @param {string} id order id
|
|
283713
|
+
* @param {string} symbol not used by zaif cancelOrder ()
|
|
283714
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283715
|
+
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
283716
|
+
*/
|
|
283717
|
+
const request = {
|
|
283718
|
+
'order_id': id,
|
|
283719
|
+
};
|
|
283720
|
+
return await this.privatePostCancelOrder(this.extend(request, params));
|
|
283721
|
+
}
|
|
283722
|
+
parseOrder(order, market = undefined) {
|
|
283723
|
+
//
|
|
283724
|
+
// {
|
|
283725
|
+
// "currency_pair": "btc_jpy",
|
|
283726
|
+
// "action": "ask",
|
|
283727
|
+
// "amount": 0.03,
|
|
283728
|
+
// "price": 56000,
|
|
283729
|
+
// "timestamp": 1402021125,
|
|
283730
|
+
// "comment" : "demo"
|
|
283731
|
+
// }
|
|
283732
|
+
//
|
|
283733
|
+
let side = this.safeString(order, 'action');
|
|
283734
|
+
side = (side === 'bid') ? 'buy' : 'sell';
|
|
283735
|
+
const timestamp = this.safeTimestamp(order, 'timestamp');
|
|
283736
|
+
const marketId = this.safeString(order, 'currency_pair');
|
|
283737
|
+
const symbol = this.safeSymbol(marketId, market, '_');
|
|
283738
|
+
const price = this.safeString(order, 'price');
|
|
283739
|
+
const amount = this.safeString(order, 'amount');
|
|
283740
|
+
const id = this.safeString(order, 'id');
|
|
283741
|
+
return this.safeOrder({
|
|
283742
|
+
'id': id,
|
|
283743
|
+
'clientOrderId': undefined,
|
|
283744
|
+
'timestamp': timestamp,
|
|
283745
|
+
'datetime': this.iso8601(timestamp),
|
|
283746
|
+
'lastTradeTimestamp': undefined,
|
|
283747
|
+
'status': 'open',
|
|
283748
|
+
'symbol': symbol,
|
|
283749
|
+
'type': 'limit',
|
|
283750
|
+
'timeInForce': undefined,
|
|
283751
|
+
'postOnly': undefined,
|
|
283752
|
+
'side': side,
|
|
283753
|
+
'price': price,
|
|
283754
|
+
'stopPrice': undefined,
|
|
283755
|
+
'triggerPrice': undefined,
|
|
283756
|
+
'cost': undefined,
|
|
283757
|
+
'amount': amount,
|
|
283758
|
+
'filled': undefined,
|
|
283759
|
+
'remaining': undefined,
|
|
283760
|
+
'trades': undefined,
|
|
283761
|
+
'fee': undefined,
|
|
283762
|
+
'info': order,
|
|
283763
|
+
'average': undefined,
|
|
283764
|
+
}, market);
|
|
283765
|
+
}
|
|
283766
|
+
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
283767
|
+
/**
|
|
283768
|
+
* @method
|
|
283769
|
+
* @name zaif#fetchOpenOrders
|
|
283770
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id28
|
|
283771
|
+
* @description fetch all unfilled currently open orders
|
|
283772
|
+
* @param {string} symbol unified market symbol
|
|
283773
|
+
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
283774
|
+
* @param {int} [limit] the maximum number of open orders structures to retrieve
|
|
283775
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283776
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
283777
|
+
*/
|
|
283778
|
+
await this.loadMarkets();
|
|
283779
|
+
let market = undefined;
|
|
283780
|
+
const request = {
|
|
283781
|
+
// 'is_token': false,
|
|
283782
|
+
// 'is_token_both': false,
|
|
283783
|
+
};
|
|
283784
|
+
if (symbol !== undefined) {
|
|
283785
|
+
market = this.market(symbol);
|
|
283786
|
+
request['currency_pair'] = market['id'];
|
|
283787
|
+
}
|
|
283788
|
+
const response = await this.privatePostActiveOrders(this.extend(request, params));
|
|
283789
|
+
return this.parseOrders(response['return'], market, since, limit);
|
|
283790
|
+
}
|
|
283791
|
+
async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
283792
|
+
/**
|
|
283793
|
+
* @method
|
|
283794
|
+
* @name zaif#fetchClosedOrders
|
|
283795
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id24
|
|
283796
|
+
* @description fetches information on multiple closed orders made by the user
|
|
283797
|
+
* @param {string} symbol unified market symbol of the market orders were made in
|
|
283798
|
+
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
283799
|
+
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
283800
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283801
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
283802
|
+
*/
|
|
283803
|
+
await this.loadMarkets();
|
|
283804
|
+
let market = undefined;
|
|
283805
|
+
const request = {
|
|
283806
|
+
// 'from': 0,
|
|
283807
|
+
// 'count': 1000,
|
|
283808
|
+
// 'from_id': 0,
|
|
283809
|
+
// 'end_id': 1000,
|
|
283810
|
+
// 'order': 'DESC',
|
|
283811
|
+
// 'since': 1503821051,
|
|
283812
|
+
// 'end': 1503821051,
|
|
283813
|
+
// 'is_token': false,
|
|
283814
|
+
};
|
|
283815
|
+
if (symbol !== undefined) {
|
|
283816
|
+
market = this.market(symbol);
|
|
283817
|
+
request['currency_pair'] = market['id'];
|
|
283818
|
+
}
|
|
283819
|
+
const response = await this.privatePostTradeHistory(this.extend(request, params));
|
|
283820
|
+
return this.parseOrders(response['return'], market, since, limit);
|
|
283821
|
+
}
|
|
283822
|
+
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
283823
|
+
/**
|
|
283824
|
+
* @method
|
|
283825
|
+
* @name zaif#withdraw
|
|
283826
|
+
* @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id41
|
|
283827
|
+
* @description make a withdrawal
|
|
283828
|
+
* @param {string} code unified currency code
|
|
283829
|
+
* @param {float} amount the amount to withdraw
|
|
283830
|
+
* @param {string} address the address to withdraw to
|
|
283831
|
+
* @param {string} tag
|
|
283832
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
283833
|
+
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
283834
|
+
*/
|
|
283835
|
+
[tag, params] = this.handleWithdrawTagAndParams(tag, params);
|
|
283836
|
+
this.checkAddress(address);
|
|
283837
|
+
await this.loadMarkets();
|
|
283838
|
+
const currency = this.currency(code);
|
|
283839
|
+
if (code === 'JPY') {
|
|
283840
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(this.id + ' withdraw() does not allow ' + code + ' withdrawals');
|
|
283841
|
+
}
|
|
283842
|
+
const request = {
|
|
283843
|
+
'currency': currency['id'],
|
|
283844
|
+
'amount': amount,
|
|
283845
|
+
'address': address,
|
|
283846
|
+
// 'message': 'Hi!', // XEM and others
|
|
283847
|
+
// 'opt_fee': 0.003, // BTC and MONA only
|
|
283848
|
+
};
|
|
283849
|
+
if (tag !== undefined) {
|
|
283850
|
+
request['message'] = tag;
|
|
283851
|
+
}
|
|
283852
|
+
const result = await this.privatePostWithdraw(this.extend(request, params));
|
|
283853
|
+
//
|
|
283854
|
+
// {
|
|
283855
|
+
// "success": 1,
|
|
283856
|
+
// "return": {
|
|
283857
|
+
// "id": 23634,
|
|
283858
|
+
// "fee": 0.001,
|
|
283859
|
+
// "txid":,
|
|
283860
|
+
// "funds": {
|
|
283861
|
+
// "jpy": 15320,
|
|
283862
|
+
// "btc": 1.392,
|
|
283863
|
+
// "xem": 100.2,
|
|
283864
|
+
// "mona": 2600
|
|
283865
|
+
// }
|
|
283866
|
+
// }
|
|
283867
|
+
// }
|
|
283868
|
+
//
|
|
283869
|
+
const returnData = this.safeValue(result, 'return');
|
|
283870
|
+
return this.parseTransaction(returnData, currency);
|
|
283871
|
+
}
|
|
283872
|
+
parseTransaction(transaction, currency = undefined) {
|
|
283873
|
+
//
|
|
283874
|
+
// {
|
|
283875
|
+
// "id": 23634,
|
|
283876
|
+
// "fee": 0.001,
|
|
283877
|
+
// "txid":,
|
|
283878
|
+
// "funds": {
|
|
283879
|
+
// "jpy": 15320,
|
|
283880
|
+
// "btc": 1.392,
|
|
283881
|
+
// "xem": 100.2,
|
|
283882
|
+
// "mona": 2600
|
|
283883
|
+
// }
|
|
283884
|
+
// }
|
|
283885
|
+
//
|
|
283886
|
+
currency = this.safeCurrency(undefined, currency);
|
|
283887
|
+
let fee = undefined;
|
|
283888
|
+
const feeCost = this.safeValue(transaction, 'fee');
|
|
283889
|
+
if (feeCost !== undefined) {
|
|
283890
|
+
fee = {
|
|
283891
|
+
'cost': feeCost,
|
|
283892
|
+
'currency': currency['code'],
|
|
283893
|
+
};
|
|
283894
|
+
}
|
|
283895
|
+
return {
|
|
283896
|
+
'id': this.safeString(transaction, 'id'),
|
|
283897
|
+
'txid': this.safeString(transaction, 'txid'),
|
|
283898
|
+
'timestamp': undefined,
|
|
283899
|
+
'datetime': undefined,
|
|
283900
|
+
'network': undefined,
|
|
283901
|
+
'addressFrom': undefined,
|
|
283902
|
+
'address': undefined,
|
|
283903
|
+
'addressTo': undefined,
|
|
283904
|
+
'amount': undefined,
|
|
283905
|
+
'type': undefined,
|
|
283906
|
+
'currency': currency['code'],
|
|
283907
|
+
'status': undefined,
|
|
283908
|
+
'updated': undefined,
|
|
283909
|
+
'tagFrom': undefined,
|
|
283910
|
+
'tag': undefined,
|
|
283911
|
+
'tagTo': undefined,
|
|
283912
|
+
'comment': undefined,
|
|
283913
|
+
'internal': undefined,
|
|
283914
|
+
'fee': fee,
|
|
283915
|
+
'info': transaction,
|
|
283916
|
+
};
|
|
283917
|
+
}
|
|
283918
|
+
customNonce() {
|
|
283919
|
+
const num = (this.milliseconds() / 1000).toString();
|
|
283920
|
+
const nonce = parseFloat(num);
|
|
283921
|
+
return nonce.toFixed(8);
|
|
283922
|
+
}
|
|
283923
|
+
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
283924
|
+
let url = this.urls['api']['rest'] + '/';
|
|
283925
|
+
if (api === 'public') {
|
|
283926
|
+
url += 'api/' + this.version + '/' + this.implodeParams(path, params);
|
|
283927
|
+
}
|
|
283928
|
+
else if (api === 'fapi') {
|
|
283929
|
+
url += 'fapi/' + this.version + '/' + this.implodeParams(path, params);
|
|
283930
|
+
}
|
|
283931
|
+
else {
|
|
283932
|
+
this.checkRequiredCredentials();
|
|
283933
|
+
if (api === 'ecapi') {
|
|
283934
|
+
url += 'ecapi';
|
|
283935
|
+
}
|
|
283936
|
+
else if (api === 'tlapi') {
|
|
283937
|
+
url += 'tlapi';
|
|
283938
|
+
}
|
|
283939
|
+
else {
|
|
283940
|
+
url += 'tapi';
|
|
283941
|
+
}
|
|
283942
|
+
const nonce = this.customNonce();
|
|
283943
|
+
body = this.urlencode(this.extend({
|
|
283944
|
+
'method': path,
|
|
283945
|
+
'nonce': nonce,
|
|
283946
|
+
}, params));
|
|
283947
|
+
headers = {
|
|
283948
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
283949
|
+
'Key': this.apiKey,
|
|
283950
|
+
'Sign': this.hmac(this.encode(body), this.encode(this.secret), _static_dependencies_noble_hashes_sha512_js__WEBPACK_IMPORTED_MODULE_4__/* .sha512 */ .o),
|
|
283951
|
+
};
|
|
283952
|
+
}
|
|
283953
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
283954
|
+
}
|
|
283955
|
+
handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
283956
|
+
if (response === undefined) {
|
|
283957
|
+
return undefined;
|
|
283958
|
+
}
|
|
283959
|
+
//
|
|
283960
|
+
// {"error": "unsupported currency_pair"}
|
|
283961
|
+
//
|
|
283962
|
+
const feedback = this.id + ' ' + body;
|
|
283963
|
+
const error = this.safeString(response, 'error');
|
|
283964
|
+
if (error !== undefined) {
|
|
283965
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
|
|
283966
|
+
this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
|
|
283967
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback); // unknown message
|
|
283968
|
+
}
|
|
283969
|
+
const success = this.safeValue(response, 'success', true);
|
|
283970
|
+
if (!success) {
|
|
283971
|
+
throw new _base_errors_js__WEBPACK_IMPORTED_MODULE_2__.ExchangeError(feedback);
|
|
283972
|
+
}
|
|
283973
|
+
return undefined;
|
|
283974
|
+
}
|
|
283975
|
+
}
|
|
283976
|
+
|
|
283977
|
+
|
|
283064
283978
|
/***/ }),
|
|
283065
283979
|
|
|
283066
283980
|
/***/ 5140:
|
|
@@ -290104,751 +291018,6 @@ YAHOO.lang = {
|
|
|
290104
291018
|
}
|
|
290105
291019
|
};
|
|
290106
291020
|
|
|
290107
|
-
/***/ }),
|
|
290108
|
-
|
|
290109
|
-
/***/ 7558:
|
|
290110
|
-
/***/ (() => {
|
|
290111
|
-
|
|
290112
|
-
|
|
290113
|
-
// ---------------------------------------------------------------------------
|
|
290114
|
-
var __importDefault = (undefined && undefined.__importDefault) || function (mod) {
|
|
290115
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
290116
|
-
};
|
|
290117
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
290118
|
-
const zaif_js_1 = __importDefault(require("./abstract/zaif.js"));
|
|
290119
|
-
const errors_js_1 = require("./base/errors.js");
|
|
290120
|
-
const Precise_js_1 = require("./base/Precise.js");
|
|
290121
|
-
const number_js_1 = require("./base/functions/number.js");
|
|
290122
|
-
const sha512_js_1 = require("./static_dependencies/noble-hashes/sha512.js");
|
|
290123
|
-
// ---------------------------------------------------------------------------
|
|
290124
|
-
/**
|
|
290125
|
-
* @class zaif
|
|
290126
|
-
* @extends Exchange
|
|
290127
|
-
*/
|
|
290128
|
-
class zaif extends zaif_js_1.default {
|
|
290129
|
-
describe() {
|
|
290130
|
-
return this.deepExtend(super.describe(), {
|
|
290131
|
-
'id': 'zaif',
|
|
290132
|
-
'name': 'Zaif',
|
|
290133
|
-
'countries': ['JP'],
|
|
290134
|
-
// 10 requests per second = 1000ms / 10 = 100ms between requests (public market endpoints)
|
|
290135
|
-
'rateLimit': 100,
|
|
290136
|
-
'version': '1',
|
|
290137
|
-
'has': {
|
|
290138
|
-
'CORS': undefined,
|
|
290139
|
-
'spot': true,
|
|
290140
|
-
'margin': undefined,
|
|
290141
|
-
'swap': false,
|
|
290142
|
-
'future': false,
|
|
290143
|
-
'option': false,
|
|
290144
|
-
'cancelOrder': true,
|
|
290145
|
-
'createMarketOrder': false,
|
|
290146
|
-
'createOrder': true,
|
|
290147
|
-
'fetchBalance': true,
|
|
290148
|
-
'fetchClosedOrders': true,
|
|
290149
|
-
'fetchFundingHistory': false,
|
|
290150
|
-
'fetchFundingRate': false,
|
|
290151
|
-
'fetchFundingRateHistory': false,
|
|
290152
|
-
'fetchFundingRates': false,
|
|
290153
|
-
'fetchIndexOHLCV': false,
|
|
290154
|
-
'fetchMarkets': true,
|
|
290155
|
-
'fetchMarkOHLCV': false,
|
|
290156
|
-
'fetchOpenInterestHistory': false,
|
|
290157
|
-
'fetchOpenOrders': true,
|
|
290158
|
-
'fetchOrderBook': true,
|
|
290159
|
-
'fetchPremiumIndexOHLCV': false,
|
|
290160
|
-
'fetchTicker': true,
|
|
290161
|
-
'fetchTrades': true,
|
|
290162
|
-
'fetchTradingFee': false,
|
|
290163
|
-
'fetchTradingFees': false,
|
|
290164
|
-
'withdraw': true,
|
|
290165
|
-
},
|
|
290166
|
-
'urls': {
|
|
290167
|
-
'logo': 'https://user-images.githubusercontent.com/1294454/27766927-39ca2ada-5eeb-11e7-972f-1b4199518ca6.jpg',
|
|
290168
|
-
'api': {
|
|
290169
|
-
'rest': 'https://api.zaif.jp',
|
|
290170
|
-
},
|
|
290171
|
-
'www': 'https://zaif.jp',
|
|
290172
|
-
'doc': [
|
|
290173
|
-
'https://techbureau-api-document.readthedocs.io/ja/latest/index.html',
|
|
290174
|
-
'https://corp.zaif.jp/api-docs',
|
|
290175
|
-
'https://corp.zaif.jp/api-docs/api_links',
|
|
290176
|
-
'https://www.npmjs.com/package/zaif.jp',
|
|
290177
|
-
'https://github.com/you21979/node-zaif',
|
|
290178
|
-
],
|
|
290179
|
-
'fees': 'https://zaif.jp/fee?lang=en',
|
|
290180
|
-
},
|
|
290181
|
-
'fees': {
|
|
290182
|
-
'trading': {
|
|
290183
|
-
'percentage': true,
|
|
290184
|
-
'taker': this.parseNumber('0.001'),
|
|
290185
|
-
'maker': this.parseNumber('0'),
|
|
290186
|
-
},
|
|
290187
|
-
},
|
|
290188
|
-
'api': {
|
|
290189
|
-
'public': {
|
|
290190
|
-
'get': {
|
|
290191
|
-
'depth/{pair}': 1,
|
|
290192
|
-
'currencies/{pair}': 1,
|
|
290193
|
-
'currencies/all': 1,
|
|
290194
|
-
'currency_pairs/{pair}': 1,
|
|
290195
|
-
'currency_pairs/all': 1,
|
|
290196
|
-
'last_price/{pair}': 1,
|
|
290197
|
-
'ticker/{pair}': 1,
|
|
290198
|
-
'trades/{pair}': 1,
|
|
290199
|
-
},
|
|
290200
|
-
},
|
|
290201
|
-
'private': {
|
|
290202
|
-
'post': {
|
|
290203
|
-
'active_orders': 5,
|
|
290204
|
-
'cancel_order': 5,
|
|
290205
|
-
'deposit_history': 5,
|
|
290206
|
-
'get_id_info': 5,
|
|
290207
|
-
'get_info': 10,
|
|
290208
|
-
'get_info2': 5,
|
|
290209
|
-
'get_personal_info': 5,
|
|
290210
|
-
'trade': 5,
|
|
290211
|
-
'trade_history': 50,
|
|
290212
|
-
'withdraw': 5,
|
|
290213
|
-
'withdraw_history': 5,
|
|
290214
|
-
},
|
|
290215
|
-
},
|
|
290216
|
-
'ecapi': {
|
|
290217
|
-
'post': {
|
|
290218
|
-
'createInvoice': 1,
|
|
290219
|
-
'getInvoice': 1,
|
|
290220
|
-
'getInvoiceIdsByOrderNumber': 1,
|
|
290221
|
-
'cancelInvoice': 1,
|
|
290222
|
-
},
|
|
290223
|
-
},
|
|
290224
|
-
'tlapi': {
|
|
290225
|
-
'post': {
|
|
290226
|
-
'get_positions': 66,
|
|
290227
|
-
'position_history': 66,
|
|
290228
|
-
'active_positions': 5,
|
|
290229
|
-
'create_position': 33,
|
|
290230
|
-
'change_position': 33,
|
|
290231
|
-
'cancel_position': 33, // 3 in 10 seconds
|
|
290232
|
-
},
|
|
290233
|
-
},
|
|
290234
|
-
'fapi': {
|
|
290235
|
-
'get': {
|
|
290236
|
-
'groups/{group_id}': 1,
|
|
290237
|
-
'last_price/{group_id}/{pair}': 1,
|
|
290238
|
-
'ticker/{group_id}/{pair}': 1,
|
|
290239
|
-
'trades/{group_id}/{pair}': 1,
|
|
290240
|
-
'depth/{group_id}/{pair}': 1,
|
|
290241
|
-
},
|
|
290242
|
-
},
|
|
290243
|
-
},
|
|
290244
|
-
'options': {},
|
|
290245
|
-
'precisionMode': number_js_1.TICK_SIZE,
|
|
290246
|
-
'exceptions': {
|
|
290247
|
-
'exact': {
|
|
290248
|
-
'unsupported currency_pair': errors_js_1.BadRequest, // {"error": "unsupported currency_pair"}
|
|
290249
|
-
},
|
|
290250
|
-
'broad': {},
|
|
290251
|
-
},
|
|
290252
|
-
});
|
|
290253
|
-
}
|
|
290254
|
-
async fetchMarkets(params = {}) {
|
|
290255
|
-
/**
|
|
290256
|
-
* @method
|
|
290257
|
-
* @name zaif#fetchMarkets
|
|
290258
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id12
|
|
290259
|
-
* @description retrieves data on all markets for zaif
|
|
290260
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290261
|
-
* @returns {object[]} an array of objects representing market data
|
|
290262
|
-
*/
|
|
290263
|
-
const markets = await this.publicGetCurrencyPairsAll(params);
|
|
290264
|
-
//
|
|
290265
|
-
// [
|
|
290266
|
-
// {
|
|
290267
|
-
// "aux_unit_point": 0,
|
|
290268
|
-
// "item_japanese": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3",
|
|
290269
|
-
// "aux_unit_step": 5.0,
|
|
290270
|
-
// "description": "\u30d3\u30c3\u30c8\u30b3\u30a4\u30f3\u30fb\u65e5\u672c\u5186\u306e\u53d6\u5f15\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059",
|
|
290271
|
-
// "item_unit_min": 0.001,
|
|
290272
|
-
// "event_number": 0,
|
|
290273
|
-
// "currency_pair": "btc_jpy",
|
|
290274
|
-
// "is_token": false,
|
|
290275
|
-
// "aux_unit_min": 5.0,
|
|
290276
|
-
// "aux_japanese": "\u65e5\u672c\u5186",
|
|
290277
|
-
// "id": 1,
|
|
290278
|
-
// "item_unit_step": 0.0001,
|
|
290279
|
-
// "name": "BTC/JPY",
|
|
290280
|
-
// "seq": 0,
|
|
290281
|
-
// "title": "BTC/JPY"
|
|
290282
|
-
// }
|
|
290283
|
-
// ]
|
|
290284
|
-
//
|
|
290285
|
-
return this.parseMarkets(markets);
|
|
290286
|
-
}
|
|
290287
|
-
parseMarket(market) {
|
|
290288
|
-
const id = this.safeString(market, 'currency_pair');
|
|
290289
|
-
const name = this.safeString(market, 'name');
|
|
290290
|
-
const [baseId, quoteId] = name.split('/');
|
|
290291
|
-
const base = this.safeCurrencyCode(baseId);
|
|
290292
|
-
const quote = this.safeCurrencyCode(quoteId);
|
|
290293
|
-
const symbol = base + '/' + quote;
|
|
290294
|
-
return {
|
|
290295
|
-
'id': id,
|
|
290296
|
-
'symbol': symbol,
|
|
290297
|
-
'base': base,
|
|
290298
|
-
'quote': quote,
|
|
290299
|
-
'settle': undefined,
|
|
290300
|
-
'baseId': baseId,
|
|
290301
|
-
'quoteId': quoteId,
|
|
290302
|
-
'settleId': undefined,
|
|
290303
|
-
'type': 'spot',
|
|
290304
|
-
'spot': true,
|
|
290305
|
-
'margin': undefined,
|
|
290306
|
-
'swap': false,
|
|
290307
|
-
'future': false,
|
|
290308
|
-
'option': false,
|
|
290309
|
-
'active': undefined,
|
|
290310
|
-
'contract': false,
|
|
290311
|
-
'linear': undefined,
|
|
290312
|
-
'inverse': undefined,
|
|
290313
|
-
'contractSize': undefined,
|
|
290314
|
-
'expiry': undefined,
|
|
290315
|
-
'expiryDatetime': undefined,
|
|
290316
|
-
'strike': undefined,
|
|
290317
|
-
'optionType': undefined,
|
|
290318
|
-
'precision': {
|
|
290319
|
-
'amount': this.safeNumber(market, 'item_unit_step'),
|
|
290320
|
-
'price': this.parseNumber(this.parsePrecision(this.safeString(market, 'aux_unit_point'))),
|
|
290321
|
-
},
|
|
290322
|
-
'limits': {
|
|
290323
|
-
'leverage': {
|
|
290324
|
-
'min': undefined,
|
|
290325
|
-
'max': undefined,
|
|
290326
|
-
},
|
|
290327
|
-
'amount': {
|
|
290328
|
-
'min': this.safeNumber(market, 'item_unit_min'),
|
|
290329
|
-
'max': undefined,
|
|
290330
|
-
},
|
|
290331
|
-
'price': {
|
|
290332
|
-
'min': this.safeNumber(market, 'aux_unit_min'),
|
|
290333
|
-
'max': undefined,
|
|
290334
|
-
},
|
|
290335
|
-
'cost': {
|
|
290336
|
-
'min': undefined,
|
|
290337
|
-
'max': undefined,
|
|
290338
|
-
},
|
|
290339
|
-
},
|
|
290340
|
-
'created': undefined,
|
|
290341
|
-
'info': market,
|
|
290342
|
-
};
|
|
290343
|
-
}
|
|
290344
|
-
parseBalance(response) {
|
|
290345
|
-
const balances = this.safeValue(response, 'return', {});
|
|
290346
|
-
const deposit = this.safeValue(balances, 'deposit');
|
|
290347
|
-
const result = {
|
|
290348
|
-
'info': response,
|
|
290349
|
-
'timestamp': undefined,
|
|
290350
|
-
'datetime': undefined,
|
|
290351
|
-
};
|
|
290352
|
-
const funds = this.safeValue(balances, 'funds', {});
|
|
290353
|
-
const currencyIds = Object.keys(funds);
|
|
290354
|
-
for (let i = 0; i < currencyIds.length; i++) {
|
|
290355
|
-
const currencyId = currencyIds[i];
|
|
290356
|
-
const code = this.safeCurrencyCode(currencyId);
|
|
290357
|
-
const balance = this.safeString(funds, currencyId);
|
|
290358
|
-
const account = this.account();
|
|
290359
|
-
account['free'] = balance;
|
|
290360
|
-
account['total'] = balance;
|
|
290361
|
-
if (deposit !== undefined) {
|
|
290362
|
-
if (currencyId in deposit) {
|
|
290363
|
-
account['total'] = this.safeString(deposit, currencyId);
|
|
290364
|
-
}
|
|
290365
|
-
}
|
|
290366
|
-
result[code] = account;
|
|
290367
|
-
}
|
|
290368
|
-
return this.safeBalance(result);
|
|
290369
|
-
}
|
|
290370
|
-
async fetchBalance(params = {}) {
|
|
290371
|
-
/**
|
|
290372
|
-
* @method
|
|
290373
|
-
* @name zaif#fetchBalance
|
|
290374
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id10
|
|
290375
|
-
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
290376
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290377
|
-
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
290378
|
-
*/
|
|
290379
|
-
await this.loadMarkets();
|
|
290380
|
-
const response = await this.privatePostGetInfo(params);
|
|
290381
|
-
return this.parseBalance(response);
|
|
290382
|
-
}
|
|
290383
|
-
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
290384
|
-
/**
|
|
290385
|
-
* @method
|
|
290386
|
-
* @name zaif#fetchOrderBook
|
|
290387
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id34
|
|
290388
|
-
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
290389
|
-
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
290390
|
-
* @param {int} [limit] the maximum amount of order book entries to return
|
|
290391
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290392
|
-
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
290393
|
-
*/
|
|
290394
|
-
await this.loadMarkets();
|
|
290395
|
-
const market = this.market(symbol);
|
|
290396
|
-
const request = {
|
|
290397
|
-
'pair': market['id'],
|
|
290398
|
-
};
|
|
290399
|
-
const response = await this.publicGetDepthPair(this.extend(request, params));
|
|
290400
|
-
return this.parseOrderBook(response, market['symbol']);
|
|
290401
|
-
}
|
|
290402
|
-
parseTicker(ticker, market = undefined) {
|
|
290403
|
-
//
|
|
290404
|
-
// {
|
|
290405
|
-
// "last": 9e-08,
|
|
290406
|
-
// "high": 1e-07,
|
|
290407
|
-
// "low": 9e-08,
|
|
290408
|
-
// "vwap": 0.0,
|
|
290409
|
-
// "volume": 135250.0,
|
|
290410
|
-
// "bid": 9e-08,
|
|
290411
|
-
// "ask": 1e-07
|
|
290412
|
-
// }
|
|
290413
|
-
//
|
|
290414
|
-
const symbol = this.safeSymbol(undefined, market);
|
|
290415
|
-
const timestamp = this.milliseconds();
|
|
290416
|
-
const vwap = this.safeString(ticker, 'vwap');
|
|
290417
|
-
const baseVolume = this.safeString(ticker, 'volume');
|
|
290418
|
-
const quoteVolume = Precise_js_1.Precise.stringMul(baseVolume, vwap);
|
|
290419
|
-
const last = this.safeString(ticker, 'last');
|
|
290420
|
-
return this.safeTicker({
|
|
290421
|
-
'symbol': symbol,
|
|
290422
|
-
'timestamp': timestamp,
|
|
290423
|
-
'datetime': this.iso8601(timestamp),
|
|
290424
|
-
'high': this.safeString(ticker, 'high'),
|
|
290425
|
-
'low': this.safeString(ticker, 'low'),
|
|
290426
|
-
'bid': this.safeString(ticker, 'bid'),
|
|
290427
|
-
'bidVolume': undefined,
|
|
290428
|
-
'ask': this.safeString(ticker, 'ask'),
|
|
290429
|
-
'askVolume': undefined,
|
|
290430
|
-
'vwap': vwap,
|
|
290431
|
-
'open': undefined,
|
|
290432
|
-
'close': last,
|
|
290433
|
-
'last': last,
|
|
290434
|
-
'previousClose': undefined,
|
|
290435
|
-
'change': undefined,
|
|
290436
|
-
'percentage': undefined,
|
|
290437
|
-
'average': undefined,
|
|
290438
|
-
'baseVolume': baseVolume,
|
|
290439
|
-
'quoteVolume': quoteVolume,
|
|
290440
|
-
'info': ticker,
|
|
290441
|
-
}, market);
|
|
290442
|
-
}
|
|
290443
|
-
async fetchTicker(symbol, params = {}) {
|
|
290444
|
-
/**
|
|
290445
|
-
* @method
|
|
290446
|
-
* @name zaif#fetchTicker
|
|
290447
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id22
|
|
290448
|
-
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
290449
|
-
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
290450
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290451
|
-
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
290452
|
-
*/
|
|
290453
|
-
await this.loadMarkets();
|
|
290454
|
-
const market = this.market(symbol);
|
|
290455
|
-
const request = {
|
|
290456
|
-
'pair': market['id'],
|
|
290457
|
-
};
|
|
290458
|
-
const ticker = await this.publicGetTickerPair(this.extend(request, params));
|
|
290459
|
-
//
|
|
290460
|
-
// {
|
|
290461
|
-
// "last": 9e-08,
|
|
290462
|
-
// "high": 1e-07,
|
|
290463
|
-
// "low": 9e-08,
|
|
290464
|
-
// "vwap": 0.0,
|
|
290465
|
-
// "volume": 135250.0,
|
|
290466
|
-
// "bid": 9e-08,
|
|
290467
|
-
// "ask": 1e-07
|
|
290468
|
-
// }
|
|
290469
|
-
//
|
|
290470
|
-
return this.parseTicker(ticker, market);
|
|
290471
|
-
}
|
|
290472
|
-
parseTrade(trade, market = undefined) {
|
|
290473
|
-
//
|
|
290474
|
-
// fetchTrades (public)
|
|
290475
|
-
//
|
|
290476
|
-
// {
|
|
290477
|
-
// "date": 1648559414,
|
|
290478
|
-
// "price": 5880375.0,
|
|
290479
|
-
// "amount": 0.017,
|
|
290480
|
-
// "tid": 176126557,
|
|
290481
|
-
// "currency_pair": "btc_jpy",
|
|
290482
|
-
// "trade_type": "ask"
|
|
290483
|
-
// }
|
|
290484
|
-
//
|
|
290485
|
-
let side = this.safeString(trade, 'trade_type');
|
|
290486
|
-
side = (side === 'bid') ? 'buy' : 'sell';
|
|
290487
|
-
const timestamp = this.safeTimestamp(trade, 'date');
|
|
290488
|
-
const id = this.safeString2(trade, 'id', 'tid');
|
|
290489
|
-
const priceString = this.safeString(trade, 'price');
|
|
290490
|
-
const amountString = this.safeString(trade, 'amount');
|
|
290491
|
-
const marketId = this.safeString(trade, 'currency_pair');
|
|
290492
|
-
const symbol = this.safeSymbol(marketId, market, '_');
|
|
290493
|
-
return this.safeTrade({
|
|
290494
|
-
'id': id,
|
|
290495
|
-
'info': trade,
|
|
290496
|
-
'timestamp': timestamp,
|
|
290497
|
-
'datetime': this.iso8601(timestamp),
|
|
290498
|
-
'symbol': symbol,
|
|
290499
|
-
'type': undefined,
|
|
290500
|
-
'side': side,
|
|
290501
|
-
'order': undefined,
|
|
290502
|
-
'takerOrMaker': undefined,
|
|
290503
|
-
'price': priceString,
|
|
290504
|
-
'amount': amountString,
|
|
290505
|
-
'cost': undefined,
|
|
290506
|
-
'fee': undefined,
|
|
290507
|
-
}, market);
|
|
290508
|
-
}
|
|
290509
|
-
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
290510
|
-
/**
|
|
290511
|
-
* @method
|
|
290512
|
-
* @name zaif#fetchTrades
|
|
290513
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/PublicAPI.html#id28
|
|
290514
|
-
* @description get the list of most recent trades for a particular symbol
|
|
290515
|
-
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
290516
|
-
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
290517
|
-
* @param {int} [limit] the maximum amount of trades to fetch
|
|
290518
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290519
|
-
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
290520
|
-
*/
|
|
290521
|
-
await this.loadMarkets();
|
|
290522
|
-
const market = this.market(symbol);
|
|
290523
|
-
const request = {
|
|
290524
|
-
'pair': market['id'],
|
|
290525
|
-
};
|
|
290526
|
-
let response = await this.publicGetTradesPair(this.extend(request, params));
|
|
290527
|
-
//
|
|
290528
|
-
// [
|
|
290529
|
-
// {
|
|
290530
|
-
// "date": 1648559414,
|
|
290531
|
-
// "price": 5880375.0,
|
|
290532
|
-
// "amount": 0.017,
|
|
290533
|
-
// "tid": 176126557,
|
|
290534
|
-
// "currency_pair": "btc_jpy",
|
|
290535
|
-
// "trade_type": "ask"
|
|
290536
|
-
// }, ...
|
|
290537
|
-
// ]
|
|
290538
|
-
//
|
|
290539
|
-
const numTrades = response.length;
|
|
290540
|
-
if (numTrades === 1) {
|
|
290541
|
-
const firstTrade = response[0];
|
|
290542
|
-
if (!Object.keys(firstTrade).length) {
|
|
290543
|
-
response = [];
|
|
290544
|
-
}
|
|
290545
|
-
}
|
|
290546
|
-
return this.parseTrades(response, market, since, limit);
|
|
290547
|
-
}
|
|
290548
|
-
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
290549
|
-
/**
|
|
290550
|
-
* @method
|
|
290551
|
-
* @name zaif#createOrder
|
|
290552
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id23
|
|
290553
|
-
* @description create a trade order
|
|
290554
|
-
* @param {string} symbol unified symbol of the market to create an order in
|
|
290555
|
-
* @param {string} type must be 'limit'
|
|
290556
|
-
* @param {string} side 'buy' or 'sell'
|
|
290557
|
-
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
290558
|
-
* @param {float} [price] the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
|
|
290559
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290560
|
-
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
290561
|
-
*/
|
|
290562
|
-
await this.loadMarkets();
|
|
290563
|
-
if (type !== 'limit') {
|
|
290564
|
-
throw new errors_js_1.ExchangeError(this.id + ' createOrder() allows limit orders only');
|
|
290565
|
-
}
|
|
290566
|
-
const market = this.market(symbol);
|
|
290567
|
-
const request = {
|
|
290568
|
-
'currency_pair': market['id'],
|
|
290569
|
-
'action': (side === 'buy') ? 'bid' : 'ask',
|
|
290570
|
-
'amount': amount,
|
|
290571
|
-
'price': price,
|
|
290572
|
-
};
|
|
290573
|
-
const response = await this.privatePostTrade(this.extend(request, params));
|
|
290574
|
-
return this.safeOrder({
|
|
290575
|
-
'info': response,
|
|
290576
|
-
'id': response['return']['order_id'].toString(),
|
|
290577
|
-
}, market);
|
|
290578
|
-
}
|
|
290579
|
-
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
290580
|
-
/**
|
|
290581
|
-
* @method
|
|
290582
|
-
* @name zaif#cancelOrder
|
|
290583
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id37
|
|
290584
|
-
* @description cancels an open order
|
|
290585
|
-
* @param {string} id order id
|
|
290586
|
-
* @param {string} symbol not used by zaif cancelOrder ()
|
|
290587
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290588
|
-
* @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
290589
|
-
*/
|
|
290590
|
-
const request = {
|
|
290591
|
-
'order_id': id,
|
|
290592
|
-
};
|
|
290593
|
-
return await this.privatePostCancelOrder(this.extend(request, params));
|
|
290594
|
-
}
|
|
290595
|
-
parseOrder(order, market = undefined) {
|
|
290596
|
-
//
|
|
290597
|
-
// {
|
|
290598
|
-
// "currency_pair": "btc_jpy",
|
|
290599
|
-
// "action": "ask",
|
|
290600
|
-
// "amount": 0.03,
|
|
290601
|
-
// "price": 56000,
|
|
290602
|
-
// "timestamp": 1402021125,
|
|
290603
|
-
// "comment" : "demo"
|
|
290604
|
-
// }
|
|
290605
|
-
//
|
|
290606
|
-
let side = this.safeString(order, 'action');
|
|
290607
|
-
side = (side === 'bid') ? 'buy' : 'sell';
|
|
290608
|
-
const timestamp = this.safeTimestamp(order, 'timestamp');
|
|
290609
|
-
const marketId = this.safeString(order, 'currency_pair');
|
|
290610
|
-
const symbol = this.safeSymbol(marketId, market, '_');
|
|
290611
|
-
const price = this.safeString(order, 'price');
|
|
290612
|
-
const amount = this.safeString(order, 'amount');
|
|
290613
|
-
const id = this.safeString(order, 'id');
|
|
290614
|
-
return this.safeOrder({
|
|
290615
|
-
'id': id,
|
|
290616
|
-
'clientOrderId': undefined,
|
|
290617
|
-
'timestamp': timestamp,
|
|
290618
|
-
'datetime': this.iso8601(timestamp),
|
|
290619
|
-
'lastTradeTimestamp': undefined,
|
|
290620
|
-
'status': 'open',
|
|
290621
|
-
'symbol': symbol,
|
|
290622
|
-
'type': 'limit',
|
|
290623
|
-
'timeInForce': undefined,
|
|
290624
|
-
'postOnly': undefined,
|
|
290625
|
-
'side': side,
|
|
290626
|
-
'price': price,
|
|
290627
|
-
'stopPrice': undefined,
|
|
290628
|
-
'triggerPrice': undefined,
|
|
290629
|
-
'cost': undefined,
|
|
290630
|
-
'amount': amount,
|
|
290631
|
-
'filled': undefined,
|
|
290632
|
-
'remaining': undefined,
|
|
290633
|
-
'trades': undefined,
|
|
290634
|
-
'fee': undefined,
|
|
290635
|
-
'info': order,
|
|
290636
|
-
'average': undefined,
|
|
290637
|
-
}, market);
|
|
290638
|
-
}
|
|
290639
|
-
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
290640
|
-
/**
|
|
290641
|
-
* @method
|
|
290642
|
-
* @name zaif#fetchOpenOrders
|
|
290643
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/MarginTradingAPI.html#id28
|
|
290644
|
-
* @description fetch all unfilled currently open orders
|
|
290645
|
-
* @param {string} symbol unified market symbol
|
|
290646
|
-
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
290647
|
-
* @param {int} [limit] the maximum number of open orders structures to retrieve
|
|
290648
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290649
|
-
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
290650
|
-
*/
|
|
290651
|
-
await this.loadMarkets();
|
|
290652
|
-
let market = undefined;
|
|
290653
|
-
const request = {
|
|
290654
|
-
// 'is_token': false,
|
|
290655
|
-
// 'is_token_both': false,
|
|
290656
|
-
};
|
|
290657
|
-
if (symbol !== undefined) {
|
|
290658
|
-
market = this.market(symbol);
|
|
290659
|
-
request['currency_pair'] = market['id'];
|
|
290660
|
-
}
|
|
290661
|
-
const response = await this.privatePostActiveOrders(this.extend(request, params));
|
|
290662
|
-
return this.parseOrders(response['return'], market, since, limit);
|
|
290663
|
-
}
|
|
290664
|
-
async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
290665
|
-
/**
|
|
290666
|
-
* @method
|
|
290667
|
-
* @name zaif#fetchClosedOrders
|
|
290668
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id24
|
|
290669
|
-
* @description fetches information on multiple closed orders made by the user
|
|
290670
|
-
* @param {string} symbol unified market symbol of the market orders were made in
|
|
290671
|
-
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
290672
|
-
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
290673
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290674
|
-
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
290675
|
-
*/
|
|
290676
|
-
await this.loadMarkets();
|
|
290677
|
-
let market = undefined;
|
|
290678
|
-
const request = {
|
|
290679
|
-
// 'from': 0,
|
|
290680
|
-
// 'count': 1000,
|
|
290681
|
-
// 'from_id': 0,
|
|
290682
|
-
// 'end_id': 1000,
|
|
290683
|
-
// 'order': 'DESC',
|
|
290684
|
-
// 'since': 1503821051,
|
|
290685
|
-
// 'end': 1503821051,
|
|
290686
|
-
// 'is_token': false,
|
|
290687
|
-
};
|
|
290688
|
-
if (symbol !== undefined) {
|
|
290689
|
-
market = this.market(symbol);
|
|
290690
|
-
request['currency_pair'] = market['id'];
|
|
290691
|
-
}
|
|
290692
|
-
const response = await this.privatePostTradeHistory(this.extend(request, params));
|
|
290693
|
-
return this.parseOrders(response['return'], market, since, limit);
|
|
290694
|
-
}
|
|
290695
|
-
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
290696
|
-
/**
|
|
290697
|
-
* @method
|
|
290698
|
-
* @name zaif#withdraw
|
|
290699
|
-
* @see https://zaif-api-document.readthedocs.io/ja/latest/TradingAPI.html#id41
|
|
290700
|
-
* @description make a withdrawal
|
|
290701
|
-
* @param {string} code unified currency code
|
|
290702
|
-
* @param {float} amount the amount to withdraw
|
|
290703
|
-
* @param {string} address the address to withdraw to
|
|
290704
|
-
* @param {string} tag
|
|
290705
|
-
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
290706
|
-
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
290707
|
-
*/
|
|
290708
|
-
[tag, params] = this.handleWithdrawTagAndParams(tag, params);
|
|
290709
|
-
this.checkAddress(address);
|
|
290710
|
-
await this.loadMarkets();
|
|
290711
|
-
const currency = this.currency(code);
|
|
290712
|
-
if (code === 'JPY') {
|
|
290713
|
-
throw new errors_js_1.ExchangeError(this.id + ' withdraw() does not allow ' + code + ' withdrawals');
|
|
290714
|
-
}
|
|
290715
|
-
const request = {
|
|
290716
|
-
'currency': currency['id'],
|
|
290717
|
-
'amount': amount,
|
|
290718
|
-
'address': address,
|
|
290719
|
-
// 'message': 'Hi!', // XEM and others
|
|
290720
|
-
// 'opt_fee': 0.003, // BTC and MONA only
|
|
290721
|
-
};
|
|
290722
|
-
if (tag !== undefined) {
|
|
290723
|
-
request['message'] = tag;
|
|
290724
|
-
}
|
|
290725
|
-
const result = await this.privatePostWithdraw(this.extend(request, params));
|
|
290726
|
-
//
|
|
290727
|
-
// {
|
|
290728
|
-
// "success": 1,
|
|
290729
|
-
// "return": {
|
|
290730
|
-
// "id": 23634,
|
|
290731
|
-
// "fee": 0.001,
|
|
290732
|
-
// "txid":,
|
|
290733
|
-
// "funds": {
|
|
290734
|
-
// "jpy": 15320,
|
|
290735
|
-
// "btc": 1.392,
|
|
290736
|
-
// "xem": 100.2,
|
|
290737
|
-
// "mona": 2600
|
|
290738
|
-
// }
|
|
290739
|
-
// }
|
|
290740
|
-
// }
|
|
290741
|
-
//
|
|
290742
|
-
const returnData = this.safeValue(result, 'return');
|
|
290743
|
-
return this.parseTransaction(returnData, currency);
|
|
290744
|
-
}
|
|
290745
|
-
parseTransaction(transaction, currency = undefined) {
|
|
290746
|
-
//
|
|
290747
|
-
// {
|
|
290748
|
-
// "id": 23634,
|
|
290749
|
-
// "fee": 0.001,
|
|
290750
|
-
// "txid":,
|
|
290751
|
-
// "funds": {
|
|
290752
|
-
// "jpy": 15320,
|
|
290753
|
-
// "btc": 1.392,
|
|
290754
|
-
// "xem": 100.2,
|
|
290755
|
-
// "mona": 2600
|
|
290756
|
-
// }
|
|
290757
|
-
// }
|
|
290758
|
-
//
|
|
290759
|
-
currency = this.safeCurrency(undefined, currency);
|
|
290760
|
-
let fee = undefined;
|
|
290761
|
-
const feeCost = this.safeValue(transaction, 'fee');
|
|
290762
|
-
if (feeCost !== undefined) {
|
|
290763
|
-
fee = {
|
|
290764
|
-
'cost': feeCost,
|
|
290765
|
-
'currency': currency['code'],
|
|
290766
|
-
};
|
|
290767
|
-
}
|
|
290768
|
-
return {
|
|
290769
|
-
'id': this.safeString(transaction, 'id'),
|
|
290770
|
-
'txid': this.safeString(transaction, 'txid'),
|
|
290771
|
-
'timestamp': undefined,
|
|
290772
|
-
'datetime': undefined,
|
|
290773
|
-
'network': undefined,
|
|
290774
|
-
'addressFrom': undefined,
|
|
290775
|
-
'address': undefined,
|
|
290776
|
-
'addressTo': undefined,
|
|
290777
|
-
'amount': undefined,
|
|
290778
|
-
'type': undefined,
|
|
290779
|
-
'currency': currency['code'],
|
|
290780
|
-
'status': undefined,
|
|
290781
|
-
'updated': undefined,
|
|
290782
|
-
'tagFrom': undefined,
|
|
290783
|
-
'tag': undefined,
|
|
290784
|
-
'tagTo': undefined,
|
|
290785
|
-
'comment': undefined,
|
|
290786
|
-
'internal': undefined,
|
|
290787
|
-
'fee': fee,
|
|
290788
|
-
'info': transaction,
|
|
290789
|
-
};
|
|
290790
|
-
}
|
|
290791
|
-
customNonce() {
|
|
290792
|
-
const num = (this.milliseconds() / 1000).toString();
|
|
290793
|
-
const nonce = parseFloat(num);
|
|
290794
|
-
return nonce.toFixed(8);
|
|
290795
|
-
}
|
|
290796
|
-
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
290797
|
-
let url = this.urls['api']['rest'] + '/';
|
|
290798
|
-
if (api === 'public') {
|
|
290799
|
-
url += 'api/' + this.version + '/' + this.implodeParams(path, params);
|
|
290800
|
-
}
|
|
290801
|
-
else if (api === 'fapi') {
|
|
290802
|
-
url += 'fapi/' + this.version + '/' + this.implodeParams(path, params);
|
|
290803
|
-
}
|
|
290804
|
-
else {
|
|
290805
|
-
this.checkRequiredCredentials();
|
|
290806
|
-
if (api === 'ecapi') {
|
|
290807
|
-
url += 'ecapi';
|
|
290808
|
-
}
|
|
290809
|
-
else if (api === 'tlapi') {
|
|
290810
|
-
url += 'tlapi';
|
|
290811
|
-
}
|
|
290812
|
-
else {
|
|
290813
|
-
url += 'tapi';
|
|
290814
|
-
}
|
|
290815
|
-
const nonce = this.customNonce();
|
|
290816
|
-
body = this.urlencode(this.extend({
|
|
290817
|
-
'method': path,
|
|
290818
|
-
'nonce': nonce,
|
|
290819
|
-
}, params));
|
|
290820
|
-
headers = {
|
|
290821
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
290822
|
-
'Key': this.apiKey,
|
|
290823
|
-
'Sign': this.hmac(this.encode(body), this.encode(this.secret), sha512_js_1.sha512),
|
|
290824
|
-
};
|
|
290825
|
-
}
|
|
290826
|
-
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
290827
|
-
}
|
|
290828
|
-
handleErrors(httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
290829
|
-
if (response === undefined) {
|
|
290830
|
-
return undefined;
|
|
290831
|
-
}
|
|
290832
|
-
//
|
|
290833
|
-
// {"error": "unsupported currency_pair"}
|
|
290834
|
-
//
|
|
290835
|
-
const feedback = this.id + ' ' + body;
|
|
290836
|
-
const error = this.safeString(response, 'error');
|
|
290837
|
-
if (error !== undefined) {
|
|
290838
|
-
this.throwExactlyMatchedException(this.exceptions['exact'], error, feedback);
|
|
290839
|
-
this.throwBroadlyMatchedException(this.exceptions['broad'], error, feedback);
|
|
290840
|
-
throw new errors_js_1.ExchangeError(feedback); // unknown message
|
|
290841
|
-
}
|
|
290842
|
-
const success = this.safeValue(response, 'success', true);
|
|
290843
|
-
if (!success) {
|
|
290844
|
-
throw new errors_js_1.ExchangeError(feedback);
|
|
290845
|
-
}
|
|
290846
|
-
return undefined;
|
|
290847
|
-
}
|
|
290848
|
-
}
|
|
290849
|
-
exports.default = zaif;
|
|
290850
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemFpZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInphaWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLCtFQUErRTs7Ozs7QUFFL0UsaUVBQTBDO0FBQzFDLGdEQUE2RDtBQUM3RCxrREFBNEM7QUFDNUMsMERBQXVEO0FBQ3ZELDRFQUFzRTtBQUd0RSwrRUFBK0U7QUFFL0U7OztHQUdHO0FBQ0gsTUFBcUIsSUFBSyxTQUFRLGlCQUFRO0lBQ3RDLFFBQVE7UUFDSixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRyxFQUFFO1lBQ3ZDLElBQUksRUFBRSxNQUFNO1lBQ1osTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsQ0FBRSxJQUFJLENBQUU7WUFDckIsMEZBQTBGO1lBQzFGLFdBQVcsRUFBRSxHQUFHO1lBQ2hCLFNBQVMsRUFBRSxHQUFHO1lBQ2QsS0FBSyxFQUFFO2dCQUNILE1BQU0sRUFBRSxTQUFTO2dCQUNqQixNQUFNLEVBQUUsSUFBSTtnQkFDWixRQUFRLEVBQUUsU0FBUztnQkFDbkIsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLG1CQUFtQixFQUFFLEtBQUs7Z0JBQzFCLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixjQUFjLEVBQUUsSUFBSTtnQkFDcEIsbUJBQW1CLEVBQUUsSUFBSTtnQkFDekIscUJBQXFCLEVBQUUsS0FBSztnQkFDNUIsa0JBQWtCLEVBQUUsS0FBSztnQkFDekIseUJBQXlCLEVBQUUsS0FBSztnQkFDaEMsbUJBQW1CLEVBQUUsS0FBSztnQkFDMUIsaUJBQWlCLEVBQUUsS0FBSztnQkFDeEIsY0FBYyxFQUFFLElBQUk7Z0JBQ3BCLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLDBCQUEwQixFQUFFLEtBQUs7Z0JBQ2pDLGlCQUFpQixFQUFFLElBQUk7Z0JBQ3ZCLGdCQUFn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QVMsRUFBRTtZQUNyQixJQUFJLENBQUMsNEJBQTRCLENBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLDRCQUE0QixDQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzlFLE1BQU0sSUFBSSx5QkFBYSxDQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsa0JBQWtCO1NBQ3pEO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixNQUFNLElBQUkseUJBQWEsQ0FBRSxRQUFRLENBQUMsQ0FBQztTQUN0QztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7Q0FDSjtBQWp1QkQsdUJBaXVCQyIsInNvdXJjZXNDb250ZW50IjpbIlxuLy8gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbXBvcnQgRXhjaGFuZ2UgZnJvbSAnLi9hYnN0cmFjdC96YWlmLmpzJztcbmltcG9ydCB7IEV4Y2hhbmdlRXJyb3IsIEJhZFJlcXVlc3QgfSBmcm9tICcuL2Jhc2UvZXJyb3JzLmpzJztcbmltcG9ydCB7IFByZWNpc2UgfSBmcm9tICcuL2Jhc2UvUHJlY2lzZS5qcyc7XG5pbXBvcnQgeyBUSUNLX1NJWkUgfSBmcm9tICcuL2Jhc2UvZnVuY3Rpb25zL251bWJlci5qcyc7XG5pbXBvcnQgeyBzaGE1MTIgfSBmcm9tICcuL3N0YXRpY19kZXBlbmRlbmNpZXMvbm9ibGUtaGFzaGVzL3NoYTUxMi5qcyc7XG5pbXBvcnQgeyBCYWxhbmNlcywgQ3VycmVuY3ksIEludCwgTWFya2V0LCBPcmRlciwgT3JkZXJCb29rLCBPcmRlclNpZGUsIE9yZGVyVHlwZSwgU3RyLCBUaWNrZXIsIFRyYWRlLCBUcmFuc2FjdGlvbiB9IGZyb20gJy4vYmFzZS90eXBlcy5qcyc7XG5cbi8vICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBAY2xhc3MgemFpZlxuICogQGV4dGVuZHMgRXhjaGFuZ2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgemFpZiBleHRlbmRzIEV4Y2hhbmdlIHtcbiAgICBkZXNjcmliZSAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZXBFeHRlbmQgKHN1cGVyLmRlc2NyaWJlICgpLCB7XG4gICAgICAgICAgICAnaWQnOiAnemFpZicsXG4gICAgICAgICAgICAnbmFtZSc6ICdaYWlmJyxcbiAgICAgICAgICAgICdjb3VudHJpZXMnOiBbICdKUCcgXSxcbiAgICAgICAgICAgIC8vIDEwIHJlcXVlc3RzIHBlciBzZWNvbmQgPSAxMDAwbXMgLyAxMCA9IDEwMG1zIGJldHdlZW4gcmVxdWVzdHMgKHB1YmxpYyBtYXJrZXQgZW5kcG9pbnRzKVxuICAgICAgICAgICAgJ3JhdGVMaW1pdCc6IDEwMCxcbiAgICAgICAgICAgICd2ZXJzaW9uJzogJzEnLFxuICAgICAgICAgICAgJ2hhcyc6IHtcbiAgICAgICAgICAgICAgICAnQ09SUyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAnc3BvdCc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ21hcmdpbic6IHVuZGVmaW5lZCwgLy8gaGFzIGJ1dCB1bmltcGxlbWVudGVkXG4gICAgICAgICAgICAgICAgJ3N3YXAnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZnV0dXJlJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ29wdGlvbic6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdjYW5jZWxPcmRlcic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZU1hcmtldE9yZGVyJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2NyZWF0ZU9yZGVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hCYWxhbmNlJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hDbG9zZWRPcmRlcnMnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaEZ1bmRpbmdIaXN0b3J5JzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoRnVuZGluZ1JhdGUnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hGdW5kaW5nUmF0ZUhpc3RvcnknOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hGdW5kaW5nUmF0ZXMnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hJbmRleE9ITENWJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoTWFya2V0cyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoTWFya09ITENWJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ2ZldGNoT3BlbkludGVyZXN0SGlzdG9yeSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdmZXRjaE9wZW5PcmRlcnMnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaE9yZGVyQm9vayc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoUHJlbWl1bUluZGV4T0hMQ1YnOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAnZmV0Y2hUaWNrZXInOiB0cnVlLFxuICAgICAgICAgICAgICAgICdmZXRjaFRyYWRlcyc6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2ZldGNoVHJhZGluZ0ZlZSc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICdmZXRjaFRyYWRpbmdGZWVzJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgJ3dpdGhkcmF3JzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAndXJscyc6IHtcbiAgICAgICAgICAgICAgICAnbG9nbyc6ICdodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xMjk0NDU0LzI3NzY2OTI3LTM5Y2EyYWRhLTVlZWItMTFlNy05NzJmLTFiNDE5OTUxOGNhNi5qcGcnLFxuICAgICAgICAgICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAgICAgICAgICdyZXN0JzogJ2h0dHBzOi8vYXBpLnphaWYuanAnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ3d3dyc6ICdodHRwczovL3phaWYuanAnLFxuICAgICAgICAgICAgICAgICdkb2MnOiBbXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3RlY2hidXJlYXUtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9pbmRleC5odG1sJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vY29ycC56YWlmLmpwL2FwaS1kb2NzL2FwaV9saW5rcycsXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS96YWlmLmpwJyxcbiAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS95b3UyMTk3OS9ub2RlLXphaWYnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgJ2ZlZXMnOiAnaHR0cHM6Ly96YWlmLmpwL2ZlZT9sYW5nPWVuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnZmVlcyc6IHtcbiAgICAgICAgICAgICAgICAndHJhZGluZyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAndGFrZXInOiB0aGlzLnBhcnNlTnVtYmVyICgnMC4wMDEnKSxcbiAgICAgICAgICAgICAgICAgICAgJ21ha2VyJzogdGhpcy5wYXJzZU51bWJlciAoJzAnKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdhcGknOiB7XG4gICAgICAgICAgICAgICAgJ3B1YmxpYyc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ2dldCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZXB0aC97cGFpcn0nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnJlbmNpZXMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW5jaWVzL2FsbCc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAnY3VycmVuY3lfcGFpcnMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjdXJyZW5jeV9wYWlycy9hbGwnOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2xhc3RfcHJpY2Uve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aWNrZXIve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFkZXMve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICdwcml2YXRlJzoge1xuICAgICAgICAgICAgICAgICAgICAncG9zdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhY3RpdmVfb3JkZXJzJzogNSwgLy8gMTAgaW4gNSBzZWNvbmRzID0gMiBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDIgPSA1XG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX29yZGVyJzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdkZXBvc2l0X2hpc3RvcnknOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9pZF9pbmZvJzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfaW5mbyc6IDEwLCAvLyAxMCBpbiAxMCBzZWNvbmRzID0gMSBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDEgPSAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9pbmZvMic6IDUsIC8vIDIwIGluIDEwIHNlY29uZHMgPSAyIHBlciBzZWNvbmQgPT4gY29zdCA9IDEwIC8gMiA9IDVcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfcGVyc29uYWxfaW5mbyc6IDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHJhZGUnOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYWRlX2hpc3RvcnknOiA1MCwgLy8gMTIgaW4gNjAgc2Vjb25kcyA9IDAuMiBwZXIgc2Vjb25kID0+IGNvc3QgPSAxMCAvIDAuMiA9IDUwXG4gICAgICAgICAgICAgICAgICAgICAgICAnd2l0aGRyYXcnOiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGhkcmF3X2hpc3RvcnknOiA1LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2VjYXBpJzoge1xuICAgICAgICAgICAgICAgICAgICAncG9zdCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVJbnZvaWNlJzogMSwgLy8gdW52ZXJpZmllZFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEludm9pY2UnOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2dldEludm9pY2VJZHNCeU9yZGVyTnVtYmVyJzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjYW5jZWxJbnZvaWNlJzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICd0bGFwaSc6IHtcbiAgICAgICAgICAgICAgICAgICAgJ3Bvc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3Bvc2l0aW9ucyc6IDY2LCAvLyAxMCBpbiA2MCBzZWNvbmRzID0gMC4xNjYgcGVyIHNlY29uZCA9PiBjb3N0ID0gMTAgLyAwLjE2NiA9IDY2XG4gICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb25faGlzdG9yeSc6IDY2LCAvLyAxMCBpbiA2MCBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAnYWN0aXZlX3Bvc2l0aW9ucyc6IDUsIC8vIDIwIGluIDEwIHNlY29uZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGVfcG9zaXRpb24nOiAzMywgLy8gMyBpbiAxMCBzZWNvbmRzID0gMC4zIHBlciBzZWNvbmQgPT4gY29zdCA9IDEwIC8gMC4zID0gMzNcbiAgICAgICAgICAgICAgICAgICAgICAgICdjaGFuZ2VfcG9zaXRpb24nOiAzMywgLy8gMyBpbiAxMCBzZWNvbmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAnY2FuY2VsX3Bvc2l0aW9uJzogMzMsIC8vIDMgaW4gMTAgc2Vjb25kc1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2ZhcGknOiB7XG4gICAgICAgICAgICAgICAgICAgICdnZXQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXBzL3tncm91cF9pZH0nOiAxLCAvLyB0ZXN0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAnbGFzdF9wcmljZS97Z3JvdXBfaWR9L3twYWlyfSc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAndGlja2VyL3tncm91cF9pZH0ve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd0cmFkZXMve2dyb3VwX2lkfS97cGFpcn0nOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcHRoL3tncm91cF9pZH0ve3BhaXJ9JzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdvcHRpb25zJzoge1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICdwcmVjaXNpb25Nb2RlJzogVElDS19TSVpFLFxuICAgICAgICAgICAgJ2V4Y2VwdGlvbnMnOiB7XG4gICAgICAgICAgICAgICAgJ2V4YWN0Jzoge1xuICAgICAgICAgICAgICAgICAgICAndW5zdXBwb3J0ZWQgY3VycmVuY3lfcGFpcic6IEJhZFJlcXVlc3QsIC8vIHtcImVycm9yXCI6IFwidW5zdXBwb3J0ZWQgY3VycmVuY3lfcGFpclwifVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Jyb2FkJzoge1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE1hcmtldHMgKHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hNYXJrZXRzXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvUHVibGljQVBJLmh0bWwjaWQxMlxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gcmV0cmlldmVzIGRhdGEgb24gYWxsIG1hcmtldHMgZm9yIHphaWZcbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIGV4dHJhIHBhcmFtZXRlcnMgc3BlY2lmaWMgdG8gdGhlIGV4Y2hhbmdlIEFQSSBlbmRwb2ludFxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0W119IGFuIGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIG1hcmtldCBkYXRhXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBtYXJrZXRzID0gYXdhaXQgdGhpcy5wdWJsaWNHZXRDdXJyZW5jeVBhaXJzQWxsIChwYXJhbXMpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgW1xuICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJhdXhfdW5pdF9wb2ludFwiOiAwLFxuICAgICAgICAvLyAgICAgICAgICAgICBcIml0ZW1famFwYW5lc2VcIjogXCJcXHUzMGQzXFx1MzBjM1xcdTMwYzhcXHUzMGIzXFx1MzBhNFxcdTMwZjNcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJhdXhfdW5pdF9zdGVwXCI6IDUuMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJkZXNjcmlwdGlvblwiOiBcIlxcdTMwZDNcXHUzMGMzXFx1MzBjOFxcdTMwYjNcXHUzMGE0XFx1MzBmM1xcdTMwZmJcXHU2NWU1XFx1NjcyY1xcdTUxODZcXHUzMDZlXFx1NTNkNlxcdTVmMTVcXHUzMDkyXFx1ODg0Y1xcdTMwNDZcXHUzMDUzXFx1MzA2OFxcdTMwNGNcXHUzMDY3XFx1MzA0ZFxcdTMwN2VcXHUzMDU5XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaXRlbV91bml0X21pblwiOiAwLjAwMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJldmVudF9udW1iZXJcIjogMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJjdXJyZW5jeV9wYWlyXCI6IFwiYnRjX2pweVwiLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImlzX3Rva2VuXCI6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImF1eF91bml0X21pblwiOiA1LjAsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiYXV4X2phcGFuZXNlXCI6IFwiXFx1NjVlNVxcdTY3MmNcXHU1MTg2XCIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaWRcIjogMSxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJpdGVtX3VuaXRfc3RlcFwiOiAwLjAwMDEsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwibmFtZVwiOiBcIkJUQy9KUFlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJzZXFcIjogMCxcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIkJUQy9KUFlcIlxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIF1cbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VNYXJrZXRzIChtYXJrZXRzKTtcbiAgICB9XG5cbiAgICBwYXJzZU1hcmtldCAobWFya2V0KTogTWFya2V0IHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnNhZmVTdHJpbmcgKG1hcmtldCwgJ2N1cnJlbmN5X3BhaXInKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2FmZVN0cmluZyAobWFya2V0LCAnbmFtZScpO1xuICAgICAgICBjb25zdCBbIGJhc2VJZCwgcXVvdGVJZCBdID0gbmFtZS5zcGxpdCAoJy8nKTtcbiAgICAgICAgY29uc3QgYmFzZSA9IHRoaXMuc2FmZUN1cnJlbmN5Q29kZSAoYmFzZUlkKTtcbiAgICAgICAgY29uc3QgcXVvdGUgPSB0aGlzLnNhZmVDdXJyZW5jeUNvZGUgKHF1b3RlSWQpO1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBiYXNlICsgJy8nICsgcXVvdGU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiBpZCxcbiAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAnYmFzZSc6IGJhc2UsXG4gICAgICAgICAgICAncXVvdGUnOiBxdW90ZSxcbiAgICAgICAgICAgICdzZXR0bGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYmFzZUlkJzogYmFzZUlkLFxuICAgICAgICAgICAgJ3F1b3RlSWQnOiBxdW90ZUlkLFxuICAgICAgICAgICAgJ3NldHRsZUlkJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3R5cGUnOiAnc3BvdCcsXG4gICAgICAgICAgICAnc3BvdCc6IHRydWUsXG4gICAgICAgICAgICAnbWFyZ2luJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3N3YXAnOiBmYWxzZSxcbiAgICAgICAgICAgICdmdXR1cmUnOiBmYWxzZSxcbiAgICAgICAgICAgICdvcHRpb24nOiBmYWxzZSxcbiAgICAgICAgICAgICdhY3RpdmUnOiB1bmRlZmluZWQsIC8vIGNhbiB0cmFkZSBvciBub3RcbiAgICAgICAgICAgICdjb250cmFjdCc6IGZhbHNlLFxuICAgICAgICAgICAgJ2xpbmVhcic6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbnZlcnNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2NvbnRyYWN0U2l6ZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdleHBpcnknOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZXhwaXJ5RGF0ZXRpbWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc3RyaWtlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ29wdGlvblR5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncHJlY2lzaW9uJzoge1xuICAgICAgICAgICAgICAgICdhbW91bnQnOiB0aGlzLnNhZmVOdW1iZXIgKG1hcmtldCwgJ2l0ZW1fdW5pdF9zdGVwJyksXG4gICAgICAgICAgICAgICAgJ3ByaWNlJzogdGhpcy5wYXJzZU51bWJlciAodGhpcy5wYXJzZVByZWNpc2lvbiAodGhpcy5zYWZlU3RyaW5nIChtYXJrZXQsICdhdXhfdW5pdF9wb2ludCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ2xpbWl0cyc6IHtcbiAgICAgICAgICAgICAgICAnbGV2ZXJhZ2UnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnYW1vdW50Jzoge1xuICAgICAgICAgICAgICAgICAgICAnbWluJzogdGhpcy5zYWZlTnVtYmVyIChtYXJrZXQsICdpdGVtX3VuaXRfbWluJyksXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAncHJpY2UnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB0aGlzLnNhZmVOdW1iZXIgKG1hcmtldCwgJ2F1eF91bml0X21pbicpLFxuICAgICAgICAgICAgICAgICAgICAnbWF4JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ2Nvc3QnOiB7XG4gICAgICAgICAgICAgICAgICAgICdtaW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICdtYXgnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnY3JlYXRlZCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbmZvJzogbWFya2V0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHBhcnNlQmFsYW5jZSAocmVzcG9uc2UpOiBCYWxhbmNlcyB7XG4gICAgICAgIGNvbnN0IGJhbGFuY2VzID0gdGhpcy5zYWZlVmFsdWUgKHJlc3BvbnNlLCAncmV0dXJuJywge30pO1xuICAgICAgICBjb25zdCBkZXBvc2l0ID0gdGhpcy5zYWZlVmFsdWUgKGJhbGFuY2VzLCAnZGVwb3NpdCcpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ3RpbWVzdGFtcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdkYXRldGltZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZnVuZHMgPSB0aGlzLnNhZmVWYWx1ZSAoYmFsYW5jZXMsICdmdW5kcycsIHt9KTtcbiAgICAgICAgY29uc3QgY3VycmVuY3lJZHMgPSBPYmplY3Qua2V5cyAoZnVuZHMpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbmN5SWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW5jeUlkID0gY3VycmVuY3lJZHNbaV07XG4gICAgICAgICAgICBjb25zdCBjb2RlID0gdGhpcy5zYWZlQ3VycmVuY3lDb2RlIChjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLnNhZmVTdHJpbmcgKGZ1bmRzLCBjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgIGNvbnN0IGFjY291bnQgPSB0aGlzLmFjY291bnQgKCk7XG4gICAgICAgICAgICBhY2NvdW50WydmcmVlJ10gPSBiYWxhbmNlO1xuICAgICAgICAgICAgYWNjb3VudFsndG90YWwnXSA9IGJhbGFuY2U7XG4gICAgICAgICAgICBpZiAoZGVwb3NpdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbmN5SWQgaW4gZGVwb3NpdCkge1xuICAgICAgICAgICAgICAgICAgICBhY2NvdW50Wyd0b3RhbCddID0gdGhpcy5zYWZlU3RyaW5nIChkZXBvc2l0LCBjdXJyZW5jeUlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRbY29kZV0gPSBhY2NvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVCYWxhbmNlIChyZXN1bHQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoQmFsYW5jZSAocGFyYW1zID0ge30pOiBQcm9taXNlPEJhbGFuY2VzPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hCYWxhbmNlXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvVHJhZGluZ0FQSS5odG1sI2lkMTBcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIHF1ZXJ5IGZvciBiYWxhbmNlIGFuZCBnZXQgdGhlIGFtb3VudCBvZiBmdW5kcyBhdmFpbGFibGUgZm9yIHRyYWRpbmcgb3IgZnVuZHMgbG9ja2VkIGluIG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGEgW2JhbGFuY2Ugc3RydWN0dXJlXXtAbGluayBodHRwczovL2RvY3MuY2N4dC5jb20vIy8/aWQ9YmFsYW5jZS1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RHZXRJbmZvIChwYXJhbXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUJhbGFuY2UgKHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBhc3luYyBmZXRjaE9yZGVyQm9vayAoc3ltYm9sOiBzdHJpbmcsIGxpbWl0OiBJbnQgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KTogUHJvbWlzZTxPcmRlckJvb2s+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaE9yZGVyQm9va1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1B1YmxpY0FQSS5odG1sI2lkMzRcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGZldGNoZXMgaW5mb3JtYXRpb24gb24gb3BlbiBvcmRlcnMgd2l0aCBiaWQgKGJ1eSkgYW5kIGFzayAoc2VsbCkgcHJpY2VzLCB2b2x1bWVzIGFuZCBvdGhlciBkYXRhXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgdW5pZmllZCBzeW1ib2wgb2YgdGhlIG1hcmtldCB0byBmZXRjaCB0aGUgb3JkZXIgYm9vayBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtsaW1pdF0gdGhlIG1heGltdW0gYW1vdW50IG9mIG9yZGVyIGJvb2sgZW50cmllcyB0byByZXR1cm5cbiAgICAgICAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIGV4dHJhIHBhcmFtZXRlcnMgc3BlY2lmaWMgdG8gdGhlIGV4Y2hhbmdlIEFQSSBlbmRwb2ludFxuICAgICAgICAgKiBAcmV0dXJucyB7b2JqZWN0fSBBIGRpY3Rpb25hcnkgb2YgW29yZGVyIGJvb2sgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPW9yZGVyLWJvb2stc3RydWN0dXJlfSBpbmRleGVkIGJ5IG1hcmtldCBzeW1ib2xzXG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHVibGljR2V0RGVwdGhQYWlyICh0aGlzLmV4dGVuZCAocmVxdWVzdCwgcGFyYW1zKSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlT3JkZXJCb29rIChyZXNwb25zZSwgbWFya2V0WydzeW1ib2wnXSk7XG4gICAgfVxuXG4gICAgcGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBUaWNrZXIge1xuICAgICAgICAvL1xuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBcImxhc3RcIjogOWUtMDgsXG4gICAgICAgIC8vICAgICBcImhpZ2hcIjogMWUtMDcsXG4gICAgICAgIC8vICAgICBcImxvd1wiOiA5ZS0wOCxcbiAgICAgICAgLy8gICAgIFwidndhcFwiOiAwLjAsXG4gICAgICAgIC8vICAgICBcInZvbHVtZVwiOiAxMzUyNTAuMCxcbiAgICAgICAgLy8gICAgIFwiYmlkXCI6IDllLTA4LFxuICAgICAgICAvLyAgICAgXCJhc2tcIjogMWUtMDdcbiAgICAgICAgLy8gfVxuICAgICAgICAvL1xuICAgICAgICBjb25zdCBzeW1ib2wgPSB0aGlzLnNhZmVTeW1ib2wgKHVuZGVmaW5lZCwgbWFya2V0KTtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5taWxsaXNlY29uZHMgKCk7XG4gICAgICAgIGNvbnN0IHZ3YXAgPSB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ3Z3YXAnKTtcbiAgICAgICAgY29uc3QgYmFzZVZvbHVtZSA9IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAndm9sdW1lJyk7XG4gICAgICAgIGNvbnN0IHF1b3RlVm9sdW1lID0gUHJlY2lzZS5zdHJpbmdNdWwgKGJhc2VWb2x1bWUsIHZ3YXApO1xuICAgICAgICBjb25zdCBsYXN0ID0gdGhpcy5zYWZlU3RyaW5nICh0aWNrZXIsICdsYXN0Jyk7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVUaWNrZXIgKHtcbiAgICAgICAgICAgICdzeW1ib2wnOiBzeW1ib2wsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2hpZ2gnOiB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ2hpZ2gnKSxcbiAgICAgICAgICAgICdsb3cnOiB0aGlzLnNhZmVTdHJpbmcgKHRpY2tlciwgJ2xvdycpLFxuICAgICAgICAgICAgJ2JpZCc6IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAnYmlkJyksXG4gICAgICAgICAgICAnYmlkVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Fzayc6IHRoaXMuc2FmZVN0cmluZyAodGlja2VyLCAnYXNrJyksXG4gICAgICAgICAgICAnYXNrVm9sdW1lJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Z3YXAnOiB2d2FwLFxuICAgICAgICAgICAgJ29wZW4nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2xvc2UnOiBsYXN0LFxuICAgICAgICAgICAgJ2xhc3QnOiBsYXN0LFxuICAgICAgICAgICAgJ3ByZXZpb3VzQ2xvc2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY2hhbmdlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3BlcmNlbnRhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnYXZlcmFnZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdiYXNlVm9sdW1lJzogYmFzZVZvbHVtZSxcbiAgICAgICAgICAgICdxdW90ZVZvbHVtZSc6IHF1b3RlVm9sdW1lLFxuICAgICAgICAgICAgJ2luZm8nOiB0aWNrZXIsXG4gICAgICAgIH0sIG1hcmtldCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hUaWNrZXIgKHN5bWJvbDogc3RyaW5nLCBwYXJhbXMgPSB7fSk6IFByb21pc2U8VGlja2VyPiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjZmV0Y2hUaWNrZXJcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9QdWJsaWNBUEkuaHRtbCNpZDIyXG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBmZXRjaGVzIGEgcHJpY2UgdGlja2VyLCBhIHN0YXRpc3RpY2FsIGNhbGN1bGF0aW9uIHdpdGggdGhlIGluZm9ybWF0aW9uIGNhbGN1bGF0ZWQgb3ZlciB0aGUgcGFzdCAyNCBob3VycyBmb3IgYSBzcGVjaWZpYyBtYXJrZXRcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGZldGNoIHRoZSB0aWNrZXIgZm9yXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gYSBbdGlja2VyIHN0cnVjdHVyZV17QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPXRpY2tlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0aWNrZXIgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRpY2tlclBhaXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8ge1xuICAgICAgICAvLyAgICAgXCJsYXN0XCI6IDllLTA4LFxuICAgICAgICAvLyAgICAgXCJoaWdoXCI6IDFlLTA3LFxuICAgICAgICAvLyAgICAgXCJsb3dcIjogOWUtMDgsXG4gICAgICAgIC8vICAgICBcInZ3YXBcIjogMC4wLFxuICAgICAgICAvLyAgICAgXCJ2b2x1bWVcIjogMTM1MjUwLjAsXG4gICAgICAgIC8vICAgICBcImJpZFwiOiA5ZS0wOCxcbiAgICAgICAgLy8gICAgIFwiYXNrXCI6IDFlLTA3XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy9cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUaWNrZXIgKHRpY2tlciwgbWFya2V0KTtcbiAgICB9XG5cbiAgICBwYXJzZVRyYWRlICh0cmFkZSwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBUcmFkZSB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vIGZldGNoVHJhZGVzIChwdWJsaWMpXG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICAge1xuICAgICAgICAvLyAgICAgICAgICBcImRhdGVcIjogMTY0ODU1OTQxNCxcbiAgICAgICAgLy8gICAgICAgICAgXCJwcmljZVwiOiA1ODgwMzc1LjAsXG4gICAgICAgIC8vICAgICAgICAgIFwiYW1vdW50XCI6IDAuMDE3LFxuICAgICAgICAvLyAgICAgICAgICBcInRpZFwiOiAxNzYxMjY1NTcsXG4gICAgICAgIC8vICAgICAgICAgIFwiY3VycmVuY3lfcGFpclwiOiBcImJ0Y19qcHlcIixcbiAgICAgICAgLy8gICAgICAgICAgXCJ0cmFkZV90eXBlXCI6IFwiYXNrXCJcbiAgICAgICAgLy8gICAgICB9XG4gICAgICAgIC8vXG4gICAgICAgIGxldCBzaWRlID0gdGhpcy5zYWZlU3RyaW5nICh0cmFkZSwgJ3RyYWRlX3R5cGUnKTtcbiAgICAgICAgc2lkZSA9IChzaWRlID09PSAnYmlkJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5zYWZlVGltZXN0YW1wICh0cmFkZSwgJ2RhdGUnKTtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLnNhZmVTdHJpbmcyICh0cmFkZSwgJ2lkJywgJ3RpZCcpO1xuICAgICAgICBjb25zdCBwcmljZVN0cmluZyA9IHRoaXMuc2FmZVN0cmluZyAodHJhZGUsICdwcmljZScpO1xuICAgICAgICBjb25zdCBhbW91bnRTdHJpbmcgPSB0aGlzLnNhZmVTdHJpbmcgKHRyYWRlLCAnYW1vdW50Jyk7XG4gICAgICAgIGNvbnN0IG1hcmtldElkID0gdGhpcy5zYWZlU3RyaW5nICh0cmFkZSwgJ2N1cnJlbmN5X3BhaXInKTtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gdGhpcy5zYWZlU3ltYm9sIChtYXJrZXRJZCwgbWFya2V0LCAnXycpO1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlVHJhZGUgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgJ2luZm8nOiB0cmFkZSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB0aGlzLmlzbzg2MDEgKHRpbWVzdGFtcCksXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnc2lkZSc6IHNpZGUsXG4gICAgICAgICAgICAnb3JkZXInOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFrZXJPck1ha2VyJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2VTdHJpbmcsXG4gICAgICAgICAgICAnYW1vdW50JzogYW1vdW50U3RyaW5nLFxuICAgICAgICAgICAgJ2Nvc3QnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZmVlJzogdW5kZWZpbmVkLFxuICAgICAgICB9LCBtYXJrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoVHJhZGVzIChzeW1ib2w6IHN0cmluZywgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPFRyYWRlW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaFRyYWRlc1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1B1YmxpY0FQSS5odG1sI2lkMjhcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIGdldCB0aGUgbGlzdCBvZiBtb3N0IHJlY2VudCB0cmFkZXMgZm9yIGEgcGFydGljdWxhciBzeW1ib2xcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGZldGNoIHRyYWRlcyBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtzaW5jZV0gdGltZXN0YW1wIGluIG1zIG9mIHRoZSBlYXJsaWVzdCB0cmFkZSB0byBmZXRjaFxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW2xpbWl0XSB0aGUgbWF4aW11bSBhbW91bnQgb2YgdHJhZGVzIHRvIGZldGNoXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge1RyYWRlW119IGEgbGlzdCBvZiBbdHJhZGUgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPXB1YmxpYy10cmFkZXN9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBjb25zdCBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdwYWlyJzogbWFya2V0WydpZCddLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnB1YmxpY0dldFRyYWRlc1BhaXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgICBbXG4gICAgICAgIC8vICAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwiZGF0ZVwiOiAxNjQ4NTU5NDE0LFxuICAgICAgICAvLyAgICAgICAgICAgICAgXCJwcmljZVwiOiA1ODgwMzc1LjAsXG4gICAgICAgIC8vICAgICAgICAgICAgICBcImFtb3VudFwiOiAwLjAxNyxcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwidGlkXCI6IDE3NjEyNjU1NyxcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwiY3VycmVuY3lfcGFpclwiOiBcImJ0Y19qcHlcIixcbiAgICAgICAgLy8gICAgICAgICAgICAgIFwidHJhZGVfdHlwZVwiOiBcImFza1wiXG4gICAgICAgIC8vICAgICAgICAgIH0sIC4uLlxuICAgICAgICAvLyAgICAgIF1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgbnVtVHJhZGVzID0gcmVzcG9uc2UubGVuZ3RoO1xuICAgICAgICBpZiAobnVtVHJhZGVzID09PSAxKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFRyYWRlID0gcmVzcG9uc2VbMF07XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzIChmaXJzdFRyYWRlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVHJhZGVzIChyZXNwb25zZSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZU9yZGVyIChzeW1ib2w6IHN0cmluZywgdHlwZTogT3JkZXJUeXBlLCBzaWRlOiBPcmRlclNpZGUsIGFtb3VudCwgcHJpY2UgPSB1bmRlZmluZWQsIHBhcmFtcyA9IHt9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWV0aG9kXG4gICAgICAgICAqIEBuYW1lIHphaWYjY3JlYXRlT3JkZXJcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9NYXJnaW5UcmFkaW5nQVBJLmh0bWwjaWQyM1xuICAgICAgICAgKiBAZGVzY3JpcHRpb24gY3JlYXRlIGEgdHJhZGUgb3JkZXJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHN5bWJvbCB1bmlmaWVkIHN5bWJvbCBvZiB0aGUgbWFya2V0IHRvIGNyZWF0ZSBhbiBvcmRlciBpblxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBtdXN0IGJlICdsaW1pdCdcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHNpZGUgJ2J1eScgb3IgJ3NlbGwnXG4gICAgICAgICAqIEBwYXJhbSB7ZmxvYXR9IGFtb3VudCBob3cgbXVjaCBvZiBjdXJyZW5jeSB5b3Ugd2FudCB0byB0cmFkZSBpbiB1bml0cyBvZiBiYXNlIGN1cnJlbmN5XG4gICAgICAgICAqIEBwYXJhbSB7ZmxvYXR9IFtwcmljZV0gdGhlIHByaWNlIGF0IHdoaWNoIHRoZSBvcmRlciBpcyB0byBiZSBmdWxsZmlsbGVkLCBpbiB1bml0cyBvZiB0aGUgcXVvdGUgY3VycmVuY3ksIGlnbm9yZWQgaW4gbWFya2V0IG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IGFuIFtvcmRlciBzdHJ1Y3R1cmVde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBpZiAodHlwZSAhPT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIGNyZWF0ZU9yZGVyKCkgYWxsb3dzIGxpbWl0IG9yZGVycyBvbmx5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWFya2V0ID0gdGhpcy5tYXJrZXQgKHN5bWJvbCk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAnY3VycmVuY3lfcGFpcic6IG1hcmtldFsnaWQnXSxcbiAgICAgICAgICAgICdhY3Rpb24nOiAoc2lkZSA9PT0gJ2J1eScpID8gJ2JpZCcgOiAnYXNrJyxcbiAgICAgICAgICAgICdhbW91bnQnOiBhbW91bnQsXG4gICAgICAgICAgICAncHJpY2UnOiBwcmljZSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0VHJhZGUgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZU9yZGVyICh7XG4gICAgICAgICAgICAnaW5mbyc6IHJlc3BvbnNlLFxuICAgICAgICAgICAgJ2lkJzogcmVzcG9uc2VbJ3JldHVybiddWydvcmRlcl9pZCddLnRvU3RyaW5nICgpLFxuICAgICAgICB9LCBtYXJrZXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNhbmNlbE9yZGVyIChpZDogc3RyaW5nLCBzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNjYW5jZWxPcmRlclxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1RyYWRpbmdBUEkuaHRtbCNpZDM3XG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBjYW5jZWxzIGFuIG9wZW4gb3JkZXJcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIG9yZGVyIGlkXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzeW1ib2wgbm90IHVzZWQgYnkgemFpZiBjYW5jZWxPcmRlciAoKVxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtvYmplY3R9IEFuIFtvcmRlciBzdHJ1Y3R1cmVde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgJ29yZGVyX2lkJzogaWQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByaXZhdGVQb3N0Q2FuY2VsT3JkZXIgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICB9XG5cbiAgICBwYXJzZU9yZGVyIChvcmRlciwgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQpOiBPcmRlciB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgXCJjdXJyZW5jeV9wYWlyXCI6IFwiYnRjX2pweVwiLFxuICAgICAgICAvLyAgICAgICAgIFwiYWN0aW9uXCI6IFwiYXNrXCIsXG4gICAgICAgIC8vICAgICAgICAgXCJhbW91bnRcIjogMC4wMyxcbiAgICAgICAgLy8gICAgICAgICBcInByaWNlXCI6IDU2MDAwLFxuICAgICAgICAvLyAgICAgICAgIFwidGltZXN0YW1wXCI6IDE0MDIwMjExMjUsXG4gICAgICAgIC8vICAgICAgICAgXCJjb21tZW50XCIgOiBcImRlbW9cIlxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBsZXQgc2lkZSA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdhY3Rpb24nKTtcbiAgICAgICAgc2lkZSA9IChzaWRlID09PSAnYmlkJykgPyAnYnV5JyA6ICdzZWxsJztcbiAgICAgICAgY29uc3QgdGltZXN0YW1wID0gdGhpcy5zYWZlVGltZXN0YW1wIChvcmRlciwgJ3RpbWVzdGFtcCcpO1xuICAgICAgICBjb25zdCBtYXJrZXRJZCA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdjdXJyZW5jeV9wYWlyJyk7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IHRoaXMuc2FmZVN5bWJvbCAobWFya2V0SWQsIG1hcmtldCwgJ18nKTtcbiAgICAgICAgY29uc3QgcHJpY2UgPSB0aGlzLnNhZmVTdHJpbmcgKG9yZGVyLCAncHJpY2UnKTtcbiAgICAgICAgY29uc3QgYW1vdW50ID0gdGhpcy5zYWZlU3RyaW5nIChvcmRlciwgJ2Ftb3VudCcpO1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuc2FmZVN0cmluZyAob3JkZXIsICdpZCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlT3JkZXIgKHtcbiAgICAgICAgICAgICdpZCc6IGlkLFxuICAgICAgICAgICAgJ2NsaWVudE9yZGVySWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGltZXN0YW1wJzogdGltZXN0YW1wLFxuICAgICAgICAgICAgJ2RhdGV0aW1lJzogdGhpcy5pc284NjAxICh0aW1lc3RhbXApLFxuICAgICAgICAgICAgJ2xhc3RUcmFkZVRpbWVzdGFtcCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdzdGF0dXMnOiAnb3BlbicsXG4gICAgICAgICAgICAnc3ltYm9sJzogc3ltYm9sLFxuICAgICAgICAgICAgJ3R5cGUnOiAnbGltaXQnLFxuICAgICAgICAgICAgJ3RpbWVJbkZvcmNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3Bvc3RPbmx5JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3NpZGUnOiBzaWRlLFxuICAgICAgICAgICAgJ3ByaWNlJzogcHJpY2UsXG4gICAgICAgICAgICAnc3RvcFByaWNlJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RyaWdnZXJQcmljZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjb3N0JzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdmaWxsZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAncmVtYWluaW5nJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3RyYWRlcyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmZWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnaW5mbyc6IG9yZGVyLFxuICAgICAgICAgICAgJ2F2ZXJhZ2UnOiB1bmRlZmluZWQsXG4gICAgICAgIH0sIG1hcmtldCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZmV0Y2hPcGVuT3JkZXJzIChzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPE9yZGVyW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaE9wZW5PcmRlcnNcbiAgICAgICAgICogQHNlZSBodHRwczovL3phaWYtYXBpLWRvY3VtZW50LnJlYWR0aGVkb2NzLmlvL2phL2xhdGVzdC9NYXJnaW5UcmFkaW5nQVBJLmh0bWwjaWQyOFxuICAgICAgICAgKiBAZGVzY3JpcHRpb24gZmV0Y2ggYWxsIHVuZmlsbGVkIGN1cnJlbnRseSBvcGVuIG9yZGVyc1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIHVuaWZpZWQgbWFya2V0IHN5bWJvbFxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW3NpbmNlXSB0aGUgZWFybGllc3QgdGltZSBpbiBtcyB0byBmZXRjaCBvcGVuIG9yZGVycyBmb3JcbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtsaW1pdF0gdGhlIG1heGltdW0gbnVtYmVyIG9mICBvcGVuIG9yZGVycyBzdHJ1Y3R1cmVzIHRvIHJldHJpZXZlXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge09yZGVyW119IGEgbGlzdCBvZiBbb3JkZXIgc3RydWN0dXJlc117QGxpbmsgaHR0cHM6Ly9kb2NzLmNjeHQuY29tLyMvP2lkPW9yZGVyLXN0cnVjdHVyZX1cbiAgICAgICAgICovXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGxldCBtYXJrZXQ6IE1hcmtldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIC8vICdpc190b2tlbic6IGZhbHNlLFxuICAgICAgICAgICAgLy8gJ2lzX3Rva2VuX2JvdGgnOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ2N1cnJlbmN5X3BhaXInXSA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RBY3RpdmVPcmRlcnMgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlcnMgKHJlc3BvbnNlWydyZXR1cm4nXSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIGZldGNoQ2xvc2VkT3JkZXJzIChzeW1ib2w6IFN0ciA9IHVuZGVmaW5lZCwgc2luY2U6IEludCA9IHVuZGVmaW5lZCwgbGltaXQ6IEludCA9IHVuZGVmaW5lZCwgcGFyYW1zID0ge30pOiBQcm9taXNlPE9yZGVyW10+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZXRob2RcbiAgICAgICAgICogQG5hbWUgemFpZiNmZXRjaENsb3NlZE9yZGVyc1xuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vemFpZi1hcGktZG9jdW1lbnQucmVhZHRoZWRvY3MuaW8vamEvbGF0ZXN0L1RyYWRpbmdBUEkuaHRtbCNpZDI0XG4gICAgICAgICAqIEBkZXNjcmlwdGlvbiBmZXRjaGVzIGluZm9ybWF0aW9uIG9uIG11bHRpcGxlIGNsb3NlZCBvcmRlcnMgbWFkZSBieSB0aGUgdXNlclxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3ltYm9sIHVuaWZpZWQgbWFya2V0IHN5bWJvbCBvZiB0aGUgbWFya2V0IG9yZGVycyB3ZXJlIG1hZGUgaW5cbiAgICAgICAgICogQHBhcmFtIHtpbnR9IFtzaW5jZV0gdGhlIGVhcmxpZXN0IHRpbWUgaW4gbXMgdG8gZmV0Y2ggb3JkZXJzIGZvclxuICAgICAgICAgKiBAcGFyYW0ge2ludH0gW2xpbWl0XSB0aGUgbWF4aW11bSBudW1iZXIgb2YgIG9yZGUgc3RydWN0dXJlcyB0byByZXRyaWV2ZVxuICAgICAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gZXh0cmEgcGFyYW1ldGVycyBzcGVjaWZpYyB0byB0aGUgZXhjaGFuZ2UgQVBJIGVuZHBvaW50XG4gICAgICAgICAqIEByZXR1cm5zIHtPcmRlcltdfSBhIGxpc3Qgb2YgW29yZGVyIHN0cnVjdHVyZXNde0BsaW5rIGh0dHBzOi8vZG9jcy5jY3h0LmNvbS8jLz9pZD1vcmRlci1zdHJ1Y3R1cmV9XG4gICAgICAgICAqL1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYXJrZXRzICgpO1xuICAgICAgICBsZXQgbWFya2V0OiBNYXJrZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAvLyAnZnJvbSc6IDAsXG4gICAgICAgICAgICAvLyAnY291bnQnOiAxMDAwLFxuICAgICAgICAgICAgLy8gJ2Zyb21faWQnOiAwLFxuICAgICAgICAgICAgLy8gJ2VuZF9pZCc6IDEwMDAsXG4gICAgICAgICAgICAvLyAnb3JkZXInOiAnREVTQycsXG4gICAgICAgICAgICAvLyAnc2luY2UnOiAxNTAzODIxMDUxLFxuICAgICAgICAgICAgLy8gJ2VuZCc6IDE1MDM4MjEwNTEsXG4gICAgICAgICAgICAvLyAnaXNfdG9rZW4nOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXJrZXQgPSB0aGlzLm1hcmtldCAoc3ltYm9sKTtcbiAgICAgICAgICAgIHJlcXVlc3RbJ2N1cnJlbmN5X3BhaXInXSA9IG1hcmtldFsnaWQnXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucHJpdmF0ZVBvc3RUcmFkZUhpc3RvcnkgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VPcmRlcnMgKHJlc3BvbnNlWydyZXR1cm4nXSwgbWFya2V0LCBzaW5jZSwgbGltaXQpO1xuICAgIH1cblxuICAgIGFzeW5jIHdpdGhkcmF3IChjb2RlOiBzdHJpbmcsIGFtb3VudCwgYWRkcmVzcywgdGFnID0gdW5kZWZpbmVkLCBwYXJhbXMgPSB7fSkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1ldGhvZFxuICAgICAgICAgKiBAbmFtZSB6YWlmI3dpdGhkcmF3XG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly96YWlmLWFwaS1kb2N1bWVudC5yZWFkdGhlZG9jcy5pby9qYS9sYXRlc3QvVHJhZGluZ0FQSS5odG1sI2lkNDFcbiAgICAgICAgICogQGRlc2NyaXB0aW9uIG1ha2UgYSB3aXRoZHJhd2FsXG4gICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIHVuaWZpZWQgY3VycmVuY3kgY29kZVxuICAgICAgICAgKiBAcGFyYW0ge2Zsb2F0fSBhbW91bnQgdGhlIGFtb3VudCB0byB3aXRoZHJhd1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYWRkcmVzcyB0aGUgYWRkcmVzcyB0byB3aXRoZHJhdyB0b1xuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG4gICAgICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBleHRyYSBwYXJhbWV0ZXJzIHNwZWNpZmljIHRvIHRoZSBleGNoYW5nZSBBUEkgZW5kcG9pbnRcbiAgICAgICAgICogQHJldHVybnMge29iamVjdH0gYSBbdHJhbnNhY3Rpb24gc3RydWN0dXJlXXtAbGluayBodHRwczovL2RvY3MuY2N4dC5jb20vIy8/aWQ9dHJhbnNhY3Rpb24tc3RydWN0dXJlfVxuICAgICAgICAgKi9cbiAgICAgICAgWyB0YWcsIHBhcmFtcyBdID0gdGhpcy5oYW5kbGVXaXRoZHJhd1RhZ0FuZFBhcmFtcyAodGFnLCBwYXJhbXMpO1xuICAgICAgICB0aGlzLmNoZWNrQWRkcmVzcyAoYWRkcmVzcyk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1hcmtldHMgKCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbmN5ID0gdGhpcy5jdXJyZW5jeSAoY29kZSk7XG4gICAgICAgIGlmIChjb2RlID09PSAnSlBZJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2hhbmdlRXJyb3IgKHRoaXMuaWQgKyAnIHdpdGhkcmF3KCkgZG9lcyBub3QgYWxsb3cgJyArIGNvZGUgKyAnIHdpdGhkcmF3YWxzJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5WydpZCddLFxuICAgICAgICAgICAgJ2Ftb3VudCc6IGFtb3VudCxcbiAgICAgICAgICAgICdhZGRyZXNzJzogYWRkcmVzcyxcbiAgICAgICAgICAgIC8vICdtZXNzYWdlJzogJ0hpIScsIC8vIFhFTSBhbmQgb3RoZXJzXG4gICAgICAgICAgICAvLyAnb3B0X2ZlZSc6IDAuMDAzLCAvLyBCVEMgYW5kIE1PTkEgb25seVxuICAgICAgICB9O1xuICAgICAgICBpZiAodGFnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3RbJ21lc3NhZ2UnXSA9IHRhZztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnByaXZhdGVQb3N0V2l0aGRyYXcgKHRoaXMuZXh0ZW5kIChyZXF1ZXN0LCBwYXJhbXMpKTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAgIHtcbiAgICAgICAgLy8gICAgICAgICBcInN1Y2Nlc3NcIjogMSxcbiAgICAgICAgLy8gICAgICAgICBcInJldHVyblwiOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwiaWRcIjogMjM2MzQsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiZmVlXCI6IDAuMDAxLFxuICAgICAgICAvLyAgICAgICAgICAgICBcInR4aWRcIjosXG4gICAgICAgIC8vICAgICAgICAgICAgIFwiZnVuZHNcIjoge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJqcHlcIjogMTUzMjAsXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBcImJ0Y1wiOiAxLjM5MixcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIFwieGVtXCI6IDEwMC4yLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgXCJtb25hXCI6IDI2MDBcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgcmV0dXJuRGF0YSA9IHRoaXMuc2FmZVZhbHVlIChyZXN1bHQsICdyZXR1cm4nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUcmFuc2FjdGlvbiAocmV0dXJuRGF0YSwgY3VycmVuY3kpO1xuICAgIH1cblxuICAgIHBhcnNlVHJhbnNhY3Rpb24gKHRyYW5zYWN0aW9uLCBjdXJyZW5jeTogQ3VycmVuY3kgPSB1bmRlZmluZWQpOiBUcmFuc2FjdGlvbiB7XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgXCJpZFwiOiAyMzYzNCxcbiAgICAgICAgLy8gICAgICAgICBcImZlZVwiOiAwLjAwMSxcbiAgICAgICAgLy8gICAgICAgICBcInR4aWRcIjosXG4gICAgICAgIC8vICAgICAgICAgXCJmdW5kc1wiOiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIFwianB5XCI6IDE1MzIwLFxuICAgICAgICAvLyAgICAgICAgICAgICBcImJ0Y1wiOiAxLjM5MixcbiAgICAgICAgLy8gICAgICAgICAgICAgXCJ4ZW1cIjogMTAwLjIsXG4gICAgICAgIC8vICAgICAgICAgICAgIFwibW9uYVwiOiAyNjAwXG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBjdXJyZW5jeSA9IHRoaXMuc2FmZUN1cnJlbmN5ICh1bmRlZmluZWQsIGN1cnJlbmN5KTtcbiAgICAgICAgbGV0IGZlZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmVlQ29zdCA9IHRoaXMuc2FmZVZhbHVlICh0cmFuc2FjdGlvbiwgJ2ZlZScpO1xuICAgICAgICBpZiAoZmVlQ29zdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmZWUgPSB7XG4gICAgICAgICAgICAgICAgJ2Nvc3QnOiBmZWVDb3N0LFxuICAgICAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5Wydjb2RlJ10sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnaWQnOiB0aGlzLnNhZmVTdHJpbmcgKHRyYW5zYWN0aW9uLCAnaWQnKSxcbiAgICAgICAgICAgICd0eGlkJzogdGhpcy5zYWZlU3RyaW5nICh0cmFuc2FjdGlvbiwgJ3R4aWQnKSxcbiAgICAgICAgICAgICd0aW1lc3RhbXAnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnZGF0ZXRpbWUnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnbmV0d29yayc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhZGRyZXNzRnJvbSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhZGRyZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ2FkZHJlc3NUbyc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdhbW91bnQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndHlwZSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdjdXJyZW5jeSc6IGN1cnJlbmN5Wydjb2RlJ10sXG4gICAgICAgICAgICAnc3RhdHVzJzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgJ3VwZGF0ZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFnRnJvbSc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICd0YWcnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAndGFnVG8nOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAnY29tbWVudCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdpbnRlcm5hbCc6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICdmZWUnOiBmZWUsXG4gICAgICAgICAgICAnaW5mbyc6IHRyYW5zYWN0aW9uLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGN1c3RvbU5vbmNlICgpIHtcbiAgICAgICAgY29uc3QgbnVtID0gKHRoaXMubWlsbGlzZWNvbmRzICgpIC8gMTAwMCkudG9TdHJpbmcgKCk7XG4gICAgICAgIGNvbnN0IG5vbmNlID0gcGFyc2VGbG9hdCAobnVtKTtcbiAgICAgICAgcmV0dXJuIG5vbmNlLnRvRml4ZWQgKDgpO1xuICAgIH1cblxuICAgIHNpZ24gKHBhdGgsIGFwaSA9ICdwdWJsaWMnLCBtZXRob2QgPSAnR0VUJywgcGFyYW1zID0ge30sIGhlYWRlcnMgPSB1bmRlZmluZWQsIGJvZHkgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHVybCA9IHRoaXMudXJsc1snYXBpJ11bJ3Jlc3QnXSArICcvJztcbiAgICAgICAgaWYgKGFwaSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgICAgIHVybCArPSAnYXBpLycgKyB0aGlzLnZlcnNpb24gKyAnLycgKyB0aGlzLmltcGxvZGVQYXJhbXMgKHBhdGgsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoYXBpID09PSAnZmFwaScpIHtcbiAgICAgICAgICAgIHVybCArPSAnZmFwaS8nICsgdGhpcy52ZXJzaW9uICsgJy8nICsgdGhpcy5pbXBsb2RlUGFyYW1zIChwYXRoLCBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja1JlcXVpcmVkQ3JlZGVudGlhbHMgKCk7XG4gICAgICAgICAgICBpZiAoYXBpID09PSAnZWNhcGknKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICdlY2FwaSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFwaSA9PT0gJ3RsYXBpJykge1xuICAgICAgICAgICAgICAgIHVybCArPSAndGxhcGknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJ3RhcGknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgbm9uY2UgPSB0aGlzLmN1c3RvbU5vbmNlICgpO1xuICAgICAgICAgICAgYm9keSA9IHRoaXMudXJsZW5jb2RlICh0aGlzLmV4dGVuZCAoe1xuICAgICAgICAgICAgICAgICdtZXRob2QnOiBwYXRoLFxuICAgICAgICAgICAgICAgICdub25jZSc6IG5vbmNlLFxuICAgICAgICAgICAgfSwgcGFyYW1zKSk7XG4gICAgICAgICAgICBoZWFkZXJzID0ge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICAgICAgICAnS2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgICAgICAgJ1NpZ24nOiB0aGlzLmhtYWMgKHRoaXMuZW5jb2RlIChib2R5KSwgdGhpcy5lbmNvZGUgKHRoaXMuc2VjcmV0KSwgc2hhNTEyKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgJ3VybCc6IHVybCwgJ21ldGhvZCc6IG1ldGhvZCwgJ2JvZHknOiBib2R5LCAnaGVhZGVycyc6IGhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcnMgKGh0dHBDb2RlLCByZWFzb24sIHVybCwgbWV0aG9kLCBoZWFkZXJzLCBib2R5LCByZXNwb25zZSwgcmVxdWVzdEhlYWRlcnMsIHJlcXVlc3RCb2R5KSB7XG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vXG4gICAgICAgIC8vICAgICB7XCJlcnJvclwiOiBcInVuc3VwcG9ydGVkIGN1cnJlbmN5X3BhaXJcIn1cbiAgICAgICAgLy9cbiAgICAgICAgY29uc3QgZmVlZGJhY2sgPSB0aGlzLmlkICsgJyAnICsgYm9keTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnNhZmVTdHJpbmcgKHJlc3BvbnNlLCAnZXJyb3InKTtcbiAgICAgICAgaWYgKGVycm9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGhyb3dFeGFjdGx5TWF0Y2hlZEV4Y2VwdGlvbiAodGhpcy5leGNlcHRpb25zWydleGFjdCddLCBlcnJvciwgZmVlZGJhY2spO1xuICAgICAgICAgICAgdGhpcy50aHJvd0Jyb2FkbHlNYXRjaGVkRXhjZXB0aW9uICh0aGlzLmV4Y2VwdGlvbnNbJ2Jyb2FkJ10sIGVycm9yLCBmZWVkYmFjayk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXhjaGFuZ2VFcnJvciAoZmVlZGJhY2spOyAvLyB1bmtub3duIG1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5zYWZlVmFsdWUgKHJlc3BvbnNlLCAnc3VjY2VzcycsIHRydWUpO1xuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFeGNoYW5nZUVycm9yIChmZWVkYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXX0=
|
|
290851
|
-
|
|
290852
291021
|
/***/ })
|
|
290853
291022
|
|
|
290854
291023
|
/******/ });
|
|
@@ -290957,212 +291126,212 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
290957
291126
|
/* harmony export */ Precise: () => (/* reexport safe */ _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__.O),
|
|
290958
291127
|
/* harmony export */ RateLimitExceeded: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.RateLimitExceeded),
|
|
290959
291128
|
/* harmony export */ RequestTimeout: () => (/* reexport safe */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__.RequestTimeout),
|
|
290960
|
-
/* harmony export */ ace: () => (/* reexport safe */
|
|
290961
|
-
/* harmony export */ alpaca: () => (/* reexport safe */
|
|
290962
|
-
/* harmony export */ ascendex: () => (/* reexport safe */
|
|
290963
|
-
/* harmony export */ bequant: () => (/* reexport safe */
|
|
290964
|
-
/* harmony export */ bigone: () => (/* reexport safe */
|
|
290965
|
-
/* harmony export */ binance: () => (/* reexport safe */
|
|
290966
|
-
/* harmony export */ binancecoinm: () => (/* reexport safe */
|
|
290967
|
-
/* harmony export */ binanceus: () => (/* reexport safe */
|
|
290968
|
-
/* harmony export */ binanceusdm: () => (/* reexport safe */
|
|
290969
|
-
/* harmony export */ bingx: () => (/* reexport safe */
|
|
290970
|
-
/* harmony export */ bit2c: () => (/* reexport safe */
|
|
290971
|
-
/* harmony export */ bitbank: () => (/* reexport safe */
|
|
290972
|
-
/* harmony export */ bitbay: () => (/* reexport safe */
|
|
290973
|
-
/* harmony export */ bitbns: () => (/* reexport safe */
|
|
290974
|
-
/* harmony export */ bitcoincom: () => (/* reexport safe */
|
|
290975
|
-
/* harmony export */ bitfinex: () => (/* reexport safe */
|
|
290976
|
-
/* harmony export */ bitfinex2: () => (/* reexport safe */
|
|
290977
|
-
/* harmony export */ bitflyer: () => (/* reexport safe */
|
|
290978
|
-
/* harmony export */ bitforex: () => (/* reexport safe */
|
|
290979
|
-
/* harmony export */ bitget: () => (/* reexport safe */
|
|
290980
|
-
/* harmony export */ bithumb: () => (/* reexport safe */
|
|
290981
|
-
/* harmony export */ bitmart: () => (/* reexport safe */
|
|
290982
|
-
/* harmony export */ bitmex: () => (/* reexport safe */
|
|
290983
|
-
/* harmony export */ bitopro: () => (/* reexport safe */
|
|
290984
|
-
/* harmony export */ bitpanda: () => (/* reexport safe */
|
|
290985
|
-
/* harmony export */ bitrue: () => (/* reexport safe */
|
|
290986
|
-
/* harmony export */ bitso: () => (/* reexport safe */
|
|
290987
|
-
/* harmony export */ bitstamp: () => (/* reexport safe */
|
|
290988
|
-
/* harmony export */ bitteam: () => (/* reexport safe */
|
|
290989
|
-
/* harmony export */ bitvavo: () => (/* reexport safe */
|
|
290990
|
-
/* harmony export */ bl3p: () => (/* reexport safe */
|
|
290991
|
-
/* harmony export */ blockchaincom: () => (/* reexport safe */
|
|
290992
|
-
/* harmony export */ btcalpha: () => (/* reexport safe */
|
|
290993
|
-
/* harmony export */ btcbox: () => (/* reexport safe */
|
|
290994
|
-
/* harmony export */ btcmarkets: () => (/* reexport safe */
|
|
290995
|
-
/* harmony export */ btcturk: () => (/* reexport safe */
|
|
290996
|
-
/* harmony export */ bybit: () => (/* reexport safe */
|
|
290997
|
-
/* harmony export */ cex: () => (/* reexport safe */
|
|
290998
|
-
/* harmony export */ coinbase: () => (/* reexport safe */
|
|
290999
|
-
/* harmony export */ coinbasepro: () => (/* reexport safe */
|
|
291000
|
-
/* harmony export */ coincheck: () => (/* reexport safe */
|
|
291001
|
-
/* harmony export */ coinex: () => (/* reexport safe */
|
|
291002
|
-
/* harmony export */ coinlist: () => (/* reexport safe */
|
|
291003
|
-
/* harmony export */ coinmate: () => (/* reexport safe */
|
|
291004
|
-
/* harmony export */ coinone: () => (/* reexport safe */
|
|
291005
|
-
/* harmony export */ coinsph: () => (/* reexport safe */
|
|
291006
|
-
/* harmony export */ coinspot: () => (/* reexport safe */
|
|
291007
|
-
/* harmony export */ cryptocom: () => (/* reexport safe */
|
|
291008
|
-
/* harmony export */ currencycom: () => (/* reexport safe */
|
|
291129
|
+
/* harmony export */ ace: () => (/* reexport safe */ _src_ace_js__WEBPACK_IMPORTED_MODULE_1__.Z),
|
|
291130
|
+
/* harmony export */ alpaca: () => (/* reexport safe */ _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__.Z),
|
|
291131
|
+
/* harmony export */ ascendex: () => (/* reexport safe */ _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__.Z),
|
|
291132
|
+
/* harmony export */ bequant: () => (/* reexport safe */ _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__.Z),
|
|
291133
|
+
/* harmony export */ bigone: () => (/* reexport safe */ _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__.Z),
|
|
291134
|
+
/* harmony export */ binance: () => (/* reexport safe */ _src_binance_js__WEBPACK_IMPORTED_MODULE_6__.Z),
|
|
291135
|
+
/* harmony export */ binancecoinm: () => (/* reexport safe */ _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__.Z),
|
|
291136
|
+
/* harmony export */ binanceus: () => (/* reexport safe */ _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__.Z),
|
|
291137
|
+
/* harmony export */ binanceusdm: () => (/* reexport safe */ _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__.Z),
|
|
291138
|
+
/* harmony export */ bingx: () => (/* reexport safe */ _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__.Z),
|
|
291139
|
+
/* harmony export */ bit2c: () => (/* reexport safe */ _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__.Z),
|
|
291140
|
+
/* harmony export */ bitbank: () => (/* reexport safe */ _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__.Z),
|
|
291141
|
+
/* harmony export */ bitbay: () => (/* reexport safe */ _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__.Z),
|
|
291142
|
+
/* harmony export */ bitbns: () => (/* reexport safe */ _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__.Z),
|
|
291143
|
+
/* harmony export */ bitcoincom: () => (/* reexport safe */ _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__.Z),
|
|
291144
|
+
/* harmony export */ bitfinex: () => (/* reexport safe */ _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__.Z),
|
|
291145
|
+
/* harmony export */ bitfinex2: () => (/* reexport safe */ _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__.Z),
|
|
291146
|
+
/* harmony export */ bitflyer: () => (/* reexport safe */ _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__.Z),
|
|
291147
|
+
/* harmony export */ bitforex: () => (/* reexport safe */ _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__.Z),
|
|
291148
|
+
/* harmony export */ bitget: () => (/* reexport safe */ _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__.Z),
|
|
291149
|
+
/* harmony export */ bithumb: () => (/* reexport safe */ _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__.Z),
|
|
291150
|
+
/* harmony export */ bitmart: () => (/* reexport safe */ _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__.Z),
|
|
291151
|
+
/* harmony export */ bitmex: () => (/* reexport safe */ _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__.Z),
|
|
291152
|
+
/* harmony export */ bitopro: () => (/* reexport safe */ _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__.Z),
|
|
291153
|
+
/* harmony export */ bitpanda: () => (/* reexport safe */ _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__.Z),
|
|
291154
|
+
/* harmony export */ bitrue: () => (/* reexport safe */ _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__.Z),
|
|
291155
|
+
/* harmony export */ bitso: () => (/* reexport safe */ _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__.Z),
|
|
291156
|
+
/* harmony export */ bitstamp: () => (/* reexport safe */ _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__.Z),
|
|
291157
|
+
/* harmony export */ bitteam: () => (/* reexport safe */ _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__.Z),
|
|
291158
|
+
/* harmony export */ bitvavo: () => (/* reexport safe */ _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__.Z),
|
|
291159
|
+
/* harmony export */ bl3p: () => (/* reexport safe */ _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__.Z),
|
|
291160
|
+
/* harmony export */ blockchaincom: () => (/* reexport safe */ _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__.Z),
|
|
291161
|
+
/* harmony export */ btcalpha: () => (/* reexport safe */ _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__.Z),
|
|
291162
|
+
/* harmony export */ btcbox: () => (/* reexport safe */ _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__.Z),
|
|
291163
|
+
/* harmony export */ btcmarkets: () => (/* reexport safe */ _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__.Z),
|
|
291164
|
+
/* harmony export */ btcturk: () => (/* reexport safe */ _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__.Z),
|
|
291165
|
+
/* harmony export */ bybit: () => (/* reexport safe */ _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__.Z),
|
|
291166
|
+
/* harmony export */ cex: () => (/* reexport safe */ _src_cex_js__WEBPACK_IMPORTED_MODULE_38__.Z),
|
|
291167
|
+
/* harmony export */ coinbase: () => (/* reexport safe */ _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__.Z),
|
|
291168
|
+
/* harmony export */ coinbasepro: () => (/* reexport safe */ _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__.Z),
|
|
291169
|
+
/* harmony export */ coincheck: () => (/* reexport safe */ _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__.Z),
|
|
291170
|
+
/* harmony export */ coinex: () => (/* reexport safe */ _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__.Z),
|
|
291171
|
+
/* harmony export */ coinlist: () => (/* reexport safe */ _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__.Z),
|
|
291172
|
+
/* harmony export */ coinmate: () => (/* reexport safe */ _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__.Z),
|
|
291173
|
+
/* harmony export */ coinone: () => (/* reexport safe */ _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__.Z),
|
|
291174
|
+
/* harmony export */ coinsph: () => (/* reexport safe */ _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__.Z),
|
|
291175
|
+
/* harmony export */ coinspot: () => (/* reexport safe */ _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__.Z),
|
|
291176
|
+
/* harmony export */ cryptocom: () => (/* reexport safe */ _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__.Z),
|
|
291177
|
+
/* harmony export */ currencycom: () => (/* reexport safe */ _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__.Z),
|
|
291009
291178
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
|
|
291010
|
-
/* harmony export */ delta: () => (/* reexport safe */
|
|
291011
|
-
/* harmony export */ deribit: () => (/* reexport safe */
|
|
291012
|
-
/* harmony export */ digifinex: () => (/* reexport safe */
|
|
291179
|
+
/* harmony export */ delta: () => (/* reexport safe */ _src_delta_js__WEBPACK_IMPORTED_MODULE_50__.Z),
|
|
291180
|
+
/* harmony export */ deribit: () => (/* reexport safe */ _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__.Z),
|
|
291181
|
+
/* harmony export */ digifinex: () => (/* reexport safe */ _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__.Z),
|
|
291013
291182
|
/* harmony export */ errors: () => (/* reexport module object */ _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__),
|
|
291014
291183
|
/* harmony export */ exchanges: () => (/* binding */ exchanges),
|
|
291015
|
-
/* harmony export */ exmo: () => (/* reexport safe */
|
|
291016
|
-
/* harmony export */ fmfwio: () => (/* reexport safe */
|
|
291184
|
+
/* harmony export */ exmo: () => (/* reexport safe */ _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__.Z),
|
|
291185
|
+
/* harmony export */ fmfwio: () => (/* reexport safe */ _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__.Z),
|
|
291017
291186
|
/* harmony export */ functions: () => (/* reexport module object */ _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__),
|
|
291018
|
-
/* harmony export */ gate: () => (/* reexport safe */
|
|
291019
|
-
/* harmony export */ gateio: () => (/* reexport safe */
|
|
291020
|
-
/* harmony export */ gemini: () => (/* reexport safe */
|
|
291021
|
-
/* harmony export */ hitbtc: () => (/* reexport safe */
|
|
291022
|
-
/* harmony export */ hitbtc3: () => (/* reexport safe */
|
|
291023
|
-
/* harmony export */ hollaex: () => (/* reexport safe */
|
|
291024
|
-
/* harmony export */ htx: () => (/* reexport safe */
|
|
291025
|
-
/* harmony export */ huobi: () => (/* reexport safe */
|
|
291026
|
-
/* harmony export */ huobijp: () => (/* reexport safe */
|
|
291027
|
-
/* harmony export */ idex: () => (/* reexport safe */
|
|
291028
|
-
/* harmony export */ independentreserve: () => (/* reexport safe */
|
|
291029
|
-
/* harmony export */ indodax: () => (/* reexport safe */
|
|
291030
|
-
/* harmony export */ kraken: () => (/* reexport safe */
|
|
291031
|
-
/* harmony export */ krakenfutures: () => (/* reexport safe */
|
|
291032
|
-
/* harmony export */ kucoin: () => (/* reexport safe */
|
|
291033
|
-
/* harmony export */ kucoinfutures: () => (/* reexport safe */
|
|
291034
|
-
/* harmony export */ kuna: () => (/* reexport safe */
|
|
291035
|
-
/* harmony export */ latoken: () => (/* reexport safe */
|
|
291036
|
-
/* harmony export */ lbank: () => (/* reexport safe */
|
|
291037
|
-
/* harmony export */ luno: () => (/* reexport safe */
|
|
291038
|
-
/* harmony export */ lykke: () => (/* reexport safe */
|
|
291039
|
-
/* harmony export */ mercado: () => (/* reexport safe */
|
|
291040
|
-
/* harmony export */ mexc: () => (/* reexport safe */
|
|
291041
|
-
/* harmony export */ ndax: () => (/* reexport safe */
|
|
291042
|
-
/* harmony export */ novadax: () => (/* reexport safe */
|
|
291043
|
-
/* harmony export */ oceanex: () => (/* reexport safe */
|
|
291044
|
-
/* harmony export */ okcoin: () => (/* reexport safe */
|
|
291045
|
-
/* harmony export */ okx: () => (/* reexport safe */
|
|
291046
|
-
/* harmony export */ p2b: () => (/* reexport safe */
|
|
291047
|
-
/* harmony export */ paymium: () => (/* reexport safe */
|
|
291048
|
-
/* harmony export */ phemex: () => (/* reexport safe */
|
|
291049
|
-
/* harmony export */ poloniex: () => (/* reexport safe */
|
|
291050
|
-
/* harmony export */ poloniexfutures: () => (/* reexport safe */
|
|
291187
|
+
/* harmony export */ gate: () => (/* reexport safe */ _src_gate_js__WEBPACK_IMPORTED_MODULE_55__.Z),
|
|
291188
|
+
/* harmony export */ gateio: () => (/* reexport safe */ _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__.Z),
|
|
291189
|
+
/* harmony export */ gemini: () => (/* reexport safe */ _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__.Z),
|
|
291190
|
+
/* harmony export */ hitbtc: () => (/* reexport safe */ _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__.Z),
|
|
291191
|
+
/* harmony export */ hitbtc3: () => (/* reexport safe */ _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__.Z),
|
|
291192
|
+
/* harmony export */ hollaex: () => (/* reexport safe */ _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__.Z),
|
|
291193
|
+
/* harmony export */ htx: () => (/* reexport safe */ _src_htx_js__WEBPACK_IMPORTED_MODULE_61__.Z),
|
|
291194
|
+
/* harmony export */ huobi: () => (/* reexport safe */ _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__.Z),
|
|
291195
|
+
/* harmony export */ huobijp: () => (/* reexport safe */ _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__.Z),
|
|
291196
|
+
/* harmony export */ idex: () => (/* reexport safe */ _src_idex_js__WEBPACK_IMPORTED_MODULE_64__.Z),
|
|
291197
|
+
/* harmony export */ independentreserve: () => (/* reexport safe */ _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__.Z),
|
|
291198
|
+
/* harmony export */ indodax: () => (/* reexport safe */ _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__.Z),
|
|
291199
|
+
/* harmony export */ kraken: () => (/* reexport safe */ _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__.Z),
|
|
291200
|
+
/* harmony export */ krakenfutures: () => (/* reexport safe */ _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__.Z),
|
|
291201
|
+
/* harmony export */ kucoin: () => (/* reexport safe */ _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__.Z),
|
|
291202
|
+
/* harmony export */ kucoinfutures: () => (/* reexport safe */ _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__.Z),
|
|
291203
|
+
/* harmony export */ kuna: () => (/* reexport safe */ _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__.Z),
|
|
291204
|
+
/* harmony export */ latoken: () => (/* reexport safe */ _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__.Z),
|
|
291205
|
+
/* harmony export */ lbank: () => (/* reexport safe */ _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__.Z),
|
|
291206
|
+
/* harmony export */ luno: () => (/* reexport safe */ _src_luno_js__WEBPACK_IMPORTED_MODULE_74__.Z),
|
|
291207
|
+
/* harmony export */ lykke: () => (/* reexport safe */ _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__.Z),
|
|
291208
|
+
/* harmony export */ mercado: () => (/* reexport safe */ _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__.Z),
|
|
291209
|
+
/* harmony export */ mexc: () => (/* reexport safe */ _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__.Z),
|
|
291210
|
+
/* harmony export */ ndax: () => (/* reexport safe */ _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__.Z),
|
|
291211
|
+
/* harmony export */ novadax: () => (/* reexport safe */ _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__.Z),
|
|
291212
|
+
/* harmony export */ oceanex: () => (/* reexport safe */ _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__.Z),
|
|
291213
|
+
/* harmony export */ okcoin: () => (/* reexport safe */ _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__.Z),
|
|
291214
|
+
/* harmony export */ okx: () => (/* reexport safe */ _src_okx_js__WEBPACK_IMPORTED_MODULE_82__.Z),
|
|
291215
|
+
/* harmony export */ p2b: () => (/* reexport safe */ _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__.Z),
|
|
291216
|
+
/* harmony export */ paymium: () => (/* reexport safe */ _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__.Z),
|
|
291217
|
+
/* harmony export */ phemex: () => (/* reexport safe */ _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__.Z),
|
|
291218
|
+
/* harmony export */ poloniex: () => (/* reexport safe */ _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__.Z),
|
|
291219
|
+
/* harmony export */ poloniexfutures: () => (/* reexport safe */ _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__.Z),
|
|
291051
291220
|
/* harmony export */ pro: () => (/* binding */ pro),
|
|
291052
|
-
/* harmony export */ probit: () => (/* reexport safe */
|
|
291053
|
-
/* harmony export */ timex: () => (/* reexport safe */
|
|
291054
|
-
/* harmony export */ tokocrypto: () => (/* reexport safe */
|
|
291055
|
-
/* harmony export */ upbit: () => (/* reexport safe */
|
|
291221
|
+
/* harmony export */ probit: () => (/* reexport safe */ _src_probit_js__WEBPACK_IMPORTED_MODULE_88__.Z),
|
|
291222
|
+
/* harmony export */ timex: () => (/* reexport safe */ _src_timex_js__WEBPACK_IMPORTED_MODULE_89__.Z),
|
|
291223
|
+
/* harmony export */ tokocrypto: () => (/* reexport safe */ _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__.Z),
|
|
291224
|
+
/* harmony export */ upbit: () => (/* reexport safe */ _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__.Z),
|
|
291056
291225
|
/* harmony export */ version: () => (/* binding */ version),
|
|
291057
|
-
/* harmony export */ wavesexchange: () => (/* reexport safe */
|
|
291058
|
-
/* harmony export */ wazirx: () => (/* reexport safe */
|
|
291059
|
-
/* harmony export */ whitebit: () => (/* reexport safe */
|
|
291060
|
-
/* harmony export */ woo: () => (/* reexport safe */
|
|
291061
|
-
/* harmony export */ yobit: () => (/* reexport safe */
|
|
291062
|
-
/* harmony export */ zaif: () => (/* reexport safe */
|
|
291226
|
+
/* harmony export */ wavesexchange: () => (/* reexport safe */ _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__.Z),
|
|
291227
|
+
/* harmony export */ wazirx: () => (/* reexport safe */ _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__.Z),
|
|
291228
|
+
/* harmony export */ whitebit: () => (/* reexport safe */ _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__.Z),
|
|
291229
|
+
/* harmony export */ woo: () => (/* reexport safe */ _src_woo_js__WEBPACK_IMPORTED_MODULE_95__.Z),
|
|
291230
|
+
/* harmony export */ yobit: () => (/* reexport safe */ _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__.Z),
|
|
291231
|
+
/* harmony export */ zaif: () => (/* reexport safe */ _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__.Z),
|
|
291063
291232
|
/* harmony export */ zonda: () => (/* reexport safe */ _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__.Z)
|
|
291064
291233
|
/* harmony export */ });
|
|
291065
291234
|
/* harmony import */ var _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3043);
|
|
291066
291235
|
/* harmony import */ var _src_base_Precise_js__WEBPACK_IMPORTED_MODULE_155__ = __webpack_require__(2194);
|
|
291067
291236
|
/* harmony import */ var _src_base_functions_js__WEBPACK_IMPORTED_MODULE_156__ = __webpack_require__(7100);
|
|
291068
291237
|
/* harmony import */ var _src_base_errors_js__WEBPACK_IMPORTED_MODULE_157__ = __webpack_require__(6689);
|
|
291069
|
-
/* harmony import */ var
|
|
291070
|
-
/* harmony import */ var
|
|
291071
|
-
/* harmony import */ var
|
|
291072
|
-
/* harmony import */ var
|
|
291073
|
-
/* harmony import */ var
|
|
291074
|
-
/* harmony import */ var
|
|
291075
|
-
/* harmony import */ var
|
|
291076
|
-
/* harmony import */ var
|
|
291077
|
-
/* harmony import */ var
|
|
291078
|
-
/* harmony import */ var
|
|
291079
|
-
/* harmony import */ var
|
|
291080
|
-
/* harmony import */ var
|
|
291081
|
-
/* harmony import */ var
|
|
291082
|
-
/* harmony import */ var
|
|
291083
|
-
/* harmony import */ var
|
|
291084
|
-
/* harmony import */ var
|
|
291085
|
-
/* harmony import */ var
|
|
291086
|
-
/* harmony import */ var
|
|
291087
|
-
/* harmony import */ var
|
|
291088
|
-
/* harmony import */ var
|
|
291089
|
-
/* harmony import */ var
|
|
291090
|
-
/* harmony import */ var
|
|
291091
|
-
/* harmony import */ var
|
|
291092
|
-
/* harmony import */ var
|
|
291093
|
-
/* harmony import */ var
|
|
291094
|
-
/* harmony import */ var
|
|
291095
|
-
/* harmony import */ var
|
|
291096
|
-
/* harmony import */ var
|
|
291097
|
-
/* harmony import */ var
|
|
291098
|
-
/* harmony import */ var
|
|
291099
|
-
/* harmony import */ var
|
|
291100
|
-
/* harmony import */ var
|
|
291101
|
-
/* harmony import */ var
|
|
291102
|
-
/* harmony import */ var
|
|
291103
|
-
/* harmony import */ var
|
|
291104
|
-
/* harmony import */ var
|
|
291105
|
-
/* harmony import */ var
|
|
291106
|
-
/* harmony import */ var
|
|
291107
|
-
/* harmony import */ var
|
|
291108
|
-
/* harmony import */ var
|
|
291109
|
-
/* harmony import */ var
|
|
291110
|
-
/* harmony import */ var
|
|
291111
|
-
/* harmony import */ var
|
|
291112
|
-
/* harmony import */ var
|
|
291113
|
-
/* harmony import */ var
|
|
291114
|
-
/* harmony import */ var
|
|
291115
|
-
/* harmony import */ var
|
|
291116
|
-
/* harmony import */ var
|
|
291117
|
-
/* harmony import */ var
|
|
291118
|
-
/* harmony import */ var
|
|
291119
|
-
/* harmony import */ var
|
|
291120
|
-
/* harmony import */ var
|
|
291121
|
-
/* harmony import */ var
|
|
291122
|
-
/* harmony import */ var
|
|
291123
|
-
/* harmony import */ var
|
|
291124
|
-
/* harmony import */ var
|
|
291125
|
-
/* harmony import */ var
|
|
291126
|
-
/* harmony import */ var
|
|
291127
|
-
/* harmony import */ var
|
|
291128
|
-
/* harmony import */ var
|
|
291129
|
-
/* harmony import */ var
|
|
291130
|
-
/* harmony import */ var
|
|
291131
|
-
/* harmony import */ var
|
|
291132
|
-
/* harmony import */ var
|
|
291133
|
-
/* harmony import */ var
|
|
291134
|
-
/* harmony import */ var
|
|
291135
|
-
/* harmony import */ var
|
|
291136
|
-
/* harmony import */ var
|
|
291137
|
-
/* harmony import */ var
|
|
291138
|
-
/* harmony import */ var
|
|
291139
|
-
/* harmony import */ var
|
|
291140
|
-
/* harmony import */ var
|
|
291141
|
-
/* harmony import */ var
|
|
291142
|
-
/* harmony import */ var
|
|
291143
|
-
/* harmony import */ var
|
|
291144
|
-
/* harmony import */ var
|
|
291145
|
-
/* harmony import */ var
|
|
291146
|
-
/* harmony import */ var
|
|
291147
|
-
/* harmony import */ var
|
|
291148
|
-
/* harmony import */ var
|
|
291149
|
-
/* harmony import */ var
|
|
291150
|
-
/* harmony import */ var
|
|
291151
|
-
/* harmony import */ var
|
|
291152
|
-
/* harmony import */ var
|
|
291153
|
-
/* harmony import */ var
|
|
291154
|
-
/* harmony import */ var
|
|
291155
|
-
/* harmony import */ var
|
|
291156
|
-
/* harmony import */ var
|
|
291157
|
-
/* harmony import */ var
|
|
291158
|
-
/* harmony import */ var
|
|
291159
|
-
/* harmony import */ var
|
|
291160
|
-
/* harmony import */ var
|
|
291161
|
-
/* harmony import */ var
|
|
291162
|
-
/* harmony import */ var
|
|
291163
|
-
/* harmony import */ var
|
|
291164
|
-
/* harmony import */ var
|
|
291165
|
-
/* harmony import */ var
|
|
291238
|
+
/* harmony import */ var _src_ace_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9869);
|
|
291239
|
+
/* harmony import */ var _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5660);
|
|
291240
|
+
/* harmony import */ var _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9612);
|
|
291241
|
+
/* harmony import */ var _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(2049);
|
|
291242
|
+
/* harmony import */ var _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7679);
|
|
291243
|
+
/* harmony import */ var _src_binance_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(9987);
|
|
291244
|
+
/* harmony import */ var _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9212);
|
|
291245
|
+
/* harmony import */ var _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(2723);
|
|
291246
|
+
/* harmony import */ var _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(3254);
|
|
291247
|
+
/* harmony import */ var _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(7960);
|
|
291248
|
+
/* harmony import */ var _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(7691);
|
|
291249
|
+
/* harmony import */ var _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(7820);
|
|
291250
|
+
/* harmony import */ var _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(668);
|
|
291251
|
+
/* harmony import */ var _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(7790);
|
|
291252
|
+
/* harmony import */ var _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(1819);
|
|
291253
|
+
/* harmony import */ var _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(6537);
|
|
291254
|
+
/* harmony import */ var _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(730);
|
|
291255
|
+
/* harmony import */ var _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(8429);
|
|
291256
|
+
/* harmony import */ var _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(2035);
|
|
291257
|
+
/* harmony import */ var _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(9051);
|
|
291258
|
+
/* harmony import */ var _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(5305);
|
|
291259
|
+
/* harmony import */ var _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(3718);
|
|
291260
|
+
/* harmony import */ var _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(7077);
|
|
291261
|
+
/* harmony import */ var _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(172);
|
|
291262
|
+
/* harmony import */ var _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(2737);
|
|
291263
|
+
/* harmony import */ var _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(854);
|
|
291264
|
+
/* harmony import */ var _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(4388);
|
|
291265
|
+
/* harmony import */ var _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(4667);
|
|
291266
|
+
/* harmony import */ var _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(8994);
|
|
291267
|
+
/* harmony import */ var _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(9943);
|
|
291268
|
+
/* harmony import */ var _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(9476);
|
|
291269
|
+
/* harmony import */ var _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(182);
|
|
291270
|
+
/* harmony import */ var _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(6246);
|
|
291271
|
+
/* harmony import */ var _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(7796);
|
|
291272
|
+
/* harmony import */ var _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(1776);
|
|
291273
|
+
/* harmony import */ var _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(6304);
|
|
291274
|
+
/* harmony import */ var _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(3527);
|
|
291275
|
+
/* harmony import */ var _src_cex_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(6445);
|
|
291276
|
+
/* harmony import */ var _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(437);
|
|
291277
|
+
/* harmony import */ var _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(8856);
|
|
291278
|
+
/* harmony import */ var _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(2117);
|
|
291279
|
+
/* harmony import */ var _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(332);
|
|
291280
|
+
/* harmony import */ var _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(3623);
|
|
291281
|
+
/* harmony import */ var _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(9816);
|
|
291282
|
+
/* harmony import */ var _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(7811);
|
|
291283
|
+
/* harmony import */ var _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(5782);
|
|
291284
|
+
/* harmony import */ var _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(7794);
|
|
291285
|
+
/* harmony import */ var _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(9129);
|
|
291286
|
+
/* harmony import */ var _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(3214);
|
|
291287
|
+
/* harmony import */ var _src_delta_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(1753);
|
|
291288
|
+
/* harmony import */ var _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(24);
|
|
291289
|
+
/* harmony import */ var _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(8846);
|
|
291290
|
+
/* harmony import */ var _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(1729);
|
|
291291
|
+
/* harmony import */ var _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(5788);
|
|
291292
|
+
/* harmony import */ var _src_gate_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(7290);
|
|
291293
|
+
/* harmony import */ var _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(7036);
|
|
291294
|
+
/* harmony import */ var _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(6743);
|
|
291295
|
+
/* harmony import */ var _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(4714);
|
|
291296
|
+
/* harmony import */ var _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(4815);
|
|
291297
|
+
/* harmony import */ var _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(8422);
|
|
291298
|
+
/* harmony import */ var _src_htx_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(5939);
|
|
291299
|
+
/* harmony import */ var _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(8146);
|
|
291300
|
+
/* harmony import */ var _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(7034);
|
|
291301
|
+
/* harmony import */ var _src_idex_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(8232);
|
|
291302
|
+
/* harmony import */ var _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(9570);
|
|
291303
|
+
/* harmony import */ var _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(1605);
|
|
291304
|
+
/* harmony import */ var _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(9922);
|
|
291305
|
+
/* harmony import */ var _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(4470);
|
|
291306
|
+
/* harmony import */ var _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(3583);
|
|
291307
|
+
/* harmony import */ var _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(1924);
|
|
291308
|
+
/* harmony import */ var _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(7732);
|
|
291309
|
+
/* harmony import */ var _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(2545);
|
|
291310
|
+
/* harmony import */ var _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(3944);
|
|
291311
|
+
/* harmony import */ var _src_luno_js__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(1758);
|
|
291312
|
+
/* harmony import */ var _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(3803);
|
|
291313
|
+
/* harmony import */ var _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(9013);
|
|
291314
|
+
/* harmony import */ var _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(6641);
|
|
291315
|
+
/* harmony import */ var _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(4531);
|
|
291316
|
+
/* harmony import */ var _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(2449);
|
|
291317
|
+
/* harmony import */ var _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(6749);
|
|
291318
|
+
/* harmony import */ var _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(3007);
|
|
291319
|
+
/* harmony import */ var _src_okx_js__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(4042);
|
|
291320
|
+
/* harmony import */ var _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(2466);
|
|
291321
|
+
/* harmony import */ var _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(7082);
|
|
291322
|
+
/* harmony import */ var _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(79);
|
|
291323
|
+
/* harmony import */ var _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(8891);
|
|
291324
|
+
/* harmony import */ var _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(6877);
|
|
291325
|
+
/* harmony import */ var _src_probit_js__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(3657);
|
|
291326
|
+
/* harmony import */ var _src_timex_js__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(1067);
|
|
291327
|
+
/* harmony import */ var _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(5261);
|
|
291328
|
+
/* harmony import */ var _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(7584);
|
|
291329
|
+
/* harmony import */ var _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(3853);
|
|
291330
|
+
/* harmony import */ var _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(6536);
|
|
291331
|
+
/* harmony import */ var _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(5467);
|
|
291332
|
+
/* harmony import */ var _src_woo_js__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(517);
|
|
291333
|
+
/* harmony import */ var _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(3850);
|
|
291334
|
+
/* harmony import */ var _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(5934);
|
|
291166
291335
|
/* harmony import */ var _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(5140);
|
|
291167
291336
|
/* harmony import */ var _src_pro_alpaca_js__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(2467);
|
|
291168
291337
|
/* harmony import */ var _src_pro_ascendex_js__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(2383);
|
|
@@ -291254,7 +291423,7 @@ SOFTWARE.
|
|
|
291254
291423
|
|
|
291255
291424
|
//-----------------------------------------------------------------------------
|
|
291256
291425
|
// this is updated by vss.js when building
|
|
291257
|
-
const version = '4.
|
|
291426
|
+
const version = '4.2.2';
|
|
291258
291427
|
_src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion = version;
|
|
291259
291428
|
//-----------------------------------------------------------------------------
|
|
291260
291429
|
|
|
@@ -291413,103 +291582,103 @@ _src_base_Exchange_js__WEBPACK_IMPORTED_MODULE_0__/* .Exchange */ .e.ccxtVersion
|
|
|
291413
291582
|
|
|
291414
291583
|
|
|
291415
291584
|
const exchanges = {
|
|
291416
|
-
'ace':
|
|
291417
|
-
'alpaca':
|
|
291418
|
-
'ascendex':
|
|
291419
|
-
'bequant':
|
|
291420
|
-
'bigone':
|
|
291421
|
-
'binance':
|
|
291422
|
-
'binancecoinm':
|
|
291423
|
-
'binanceus':
|
|
291424
|
-
'binanceusdm':
|
|
291425
|
-
'bingx':
|
|
291426
|
-
'bit2c':
|
|
291427
|
-
'bitbank':
|
|
291428
|
-
'bitbay':
|
|
291429
|
-
'bitbns':
|
|
291430
|
-
'bitcoincom':
|
|
291431
|
-
'bitfinex':
|
|
291432
|
-
'bitfinex2':
|
|
291433
|
-
'bitflyer':
|
|
291434
|
-
'bitforex':
|
|
291435
|
-
'bitget':
|
|
291436
|
-
'bithumb':
|
|
291437
|
-
'bitmart':
|
|
291438
|
-
'bitmex':
|
|
291439
|
-
'bitopro':
|
|
291440
|
-
'bitpanda':
|
|
291441
|
-
'bitrue':
|
|
291442
|
-
'bitso':
|
|
291443
|
-
'bitstamp':
|
|
291444
|
-
'bitteam':
|
|
291445
|
-
'bitvavo':
|
|
291446
|
-
'bl3p':
|
|
291447
|
-
'blockchaincom':
|
|
291448
|
-
'btcalpha':
|
|
291449
|
-
'btcbox':
|
|
291450
|
-
'btcmarkets':
|
|
291451
|
-
'btcturk':
|
|
291452
|
-
'bybit':
|
|
291453
|
-
'cex':
|
|
291454
|
-
'coinbase':
|
|
291455
|
-
'coinbasepro':
|
|
291456
|
-
'coincheck':
|
|
291457
|
-
'coinex':
|
|
291458
|
-
'coinlist':
|
|
291459
|
-
'coinmate':
|
|
291460
|
-
'coinone':
|
|
291461
|
-
'coinsph':
|
|
291462
|
-
'coinspot':
|
|
291463
|
-
'cryptocom':
|
|
291464
|
-
'currencycom':
|
|
291465
|
-
'delta':
|
|
291466
|
-
'deribit':
|
|
291467
|
-
'digifinex':
|
|
291468
|
-
'exmo':
|
|
291469
|
-
'fmfwio':
|
|
291470
|
-
'gate':
|
|
291471
|
-
'gateio':
|
|
291472
|
-
'gemini':
|
|
291473
|
-
'hitbtc':
|
|
291474
|
-
'hitbtc3':
|
|
291475
|
-
'hollaex':
|
|
291476
|
-
'htx':
|
|
291477
|
-
'huobi':
|
|
291478
|
-
'huobijp':
|
|
291479
|
-
'idex':
|
|
291480
|
-
'independentreserve':
|
|
291481
|
-
'indodax':
|
|
291482
|
-
'kraken':
|
|
291483
|
-
'krakenfutures':
|
|
291484
|
-
'kucoin':
|
|
291485
|
-
'kucoinfutures':
|
|
291486
|
-
'kuna':
|
|
291487
|
-
'latoken':
|
|
291488
|
-
'lbank':
|
|
291489
|
-
'luno':
|
|
291490
|
-
'lykke':
|
|
291491
|
-
'mercado':
|
|
291492
|
-
'mexc':
|
|
291493
|
-
'ndax':
|
|
291494
|
-
'novadax':
|
|
291495
|
-
'oceanex':
|
|
291496
|
-
'okcoin':
|
|
291497
|
-
'okx':
|
|
291498
|
-
'p2b':
|
|
291499
|
-
'paymium':
|
|
291500
|
-
'phemex':
|
|
291501
|
-
'poloniex':
|
|
291502
|
-
'poloniexfutures':
|
|
291503
|
-
'probit':
|
|
291504
|
-
'timex':
|
|
291505
|
-
'tokocrypto':
|
|
291506
|
-
'upbit':
|
|
291507
|
-
'wavesexchange':
|
|
291508
|
-
'wazirx':
|
|
291509
|
-
'whitebit':
|
|
291510
|
-
'woo':
|
|
291511
|
-
'yobit':
|
|
291512
|
-
'zaif':
|
|
291585
|
+
'ace': _src_ace_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,
|
|
291586
|
+
'alpaca': _src_alpaca_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z,
|
|
291587
|
+
'ascendex': _src_ascendex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,
|
|
291588
|
+
'bequant': _src_bequant_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z,
|
|
291589
|
+
'bigone': _src_bigone_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z,
|
|
291590
|
+
'binance': _src_binance_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z,
|
|
291591
|
+
'binancecoinm': _src_binancecoinm_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z,
|
|
291592
|
+
'binanceus': _src_binanceus_js__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z,
|
|
291593
|
+
'binanceusdm': _src_binanceusdm_js__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z,
|
|
291594
|
+
'bingx': _src_bingx_js__WEBPACK_IMPORTED_MODULE_10__/* ["default"] */ .Z,
|
|
291595
|
+
'bit2c': _src_bit2c_js__WEBPACK_IMPORTED_MODULE_11__/* ["default"] */ .Z,
|
|
291596
|
+
'bitbank': _src_bitbank_js__WEBPACK_IMPORTED_MODULE_12__/* ["default"] */ .Z,
|
|
291597
|
+
'bitbay': _src_bitbay_js__WEBPACK_IMPORTED_MODULE_13__/* ["default"] */ .Z,
|
|
291598
|
+
'bitbns': _src_bitbns_js__WEBPACK_IMPORTED_MODULE_14__/* ["default"] */ .Z,
|
|
291599
|
+
'bitcoincom': _src_bitcoincom_js__WEBPACK_IMPORTED_MODULE_15__/* ["default"] */ .Z,
|
|
291600
|
+
'bitfinex': _src_bitfinex_js__WEBPACK_IMPORTED_MODULE_16__/* ["default"] */ .Z,
|
|
291601
|
+
'bitfinex2': _src_bitfinex2_js__WEBPACK_IMPORTED_MODULE_17__/* ["default"] */ .Z,
|
|
291602
|
+
'bitflyer': _src_bitflyer_js__WEBPACK_IMPORTED_MODULE_18__/* ["default"] */ .Z,
|
|
291603
|
+
'bitforex': _src_bitforex_js__WEBPACK_IMPORTED_MODULE_19__/* ["default"] */ .Z,
|
|
291604
|
+
'bitget': _src_bitget_js__WEBPACK_IMPORTED_MODULE_20__/* ["default"] */ .Z,
|
|
291605
|
+
'bithumb': _src_bithumb_js__WEBPACK_IMPORTED_MODULE_21__/* ["default"] */ .Z,
|
|
291606
|
+
'bitmart': _src_bitmart_js__WEBPACK_IMPORTED_MODULE_22__/* ["default"] */ .Z,
|
|
291607
|
+
'bitmex': _src_bitmex_js__WEBPACK_IMPORTED_MODULE_23__/* ["default"] */ .Z,
|
|
291608
|
+
'bitopro': _src_bitopro_js__WEBPACK_IMPORTED_MODULE_24__/* ["default"] */ .Z,
|
|
291609
|
+
'bitpanda': _src_bitpanda_js__WEBPACK_IMPORTED_MODULE_25__/* ["default"] */ .Z,
|
|
291610
|
+
'bitrue': _src_bitrue_js__WEBPACK_IMPORTED_MODULE_26__/* ["default"] */ .Z,
|
|
291611
|
+
'bitso': _src_bitso_js__WEBPACK_IMPORTED_MODULE_27__/* ["default"] */ .Z,
|
|
291612
|
+
'bitstamp': _src_bitstamp_js__WEBPACK_IMPORTED_MODULE_28__/* ["default"] */ .Z,
|
|
291613
|
+
'bitteam': _src_bitteam_js__WEBPACK_IMPORTED_MODULE_29__/* ["default"] */ .Z,
|
|
291614
|
+
'bitvavo': _src_bitvavo_js__WEBPACK_IMPORTED_MODULE_30__/* ["default"] */ .Z,
|
|
291615
|
+
'bl3p': _src_bl3p_js__WEBPACK_IMPORTED_MODULE_31__/* ["default"] */ .Z,
|
|
291616
|
+
'blockchaincom': _src_blockchaincom_js__WEBPACK_IMPORTED_MODULE_32__/* ["default"] */ .Z,
|
|
291617
|
+
'btcalpha': _src_btcalpha_js__WEBPACK_IMPORTED_MODULE_33__/* ["default"] */ .Z,
|
|
291618
|
+
'btcbox': _src_btcbox_js__WEBPACK_IMPORTED_MODULE_34__/* ["default"] */ .Z,
|
|
291619
|
+
'btcmarkets': _src_btcmarkets_js__WEBPACK_IMPORTED_MODULE_35__/* ["default"] */ .Z,
|
|
291620
|
+
'btcturk': _src_btcturk_js__WEBPACK_IMPORTED_MODULE_36__/* ["default"] */ .Z,
|
|
291621
|
+
'bybit': _src_bybit_js__WEBPACK_IMPORTED_MODULE_37__/* ["default"] */ .Z,
|
|
291622
|
+
'cex': _src_cex_js__WEBPACK_IMPORTED_MODULE_38__/* ["default"] */ .Z,
|
|
291623
|
+
'coinbase': _src_coinbase_js__WEBPACK_IMPORTED_MODULE_39__/* ["default"] */ .Z,
|
|
291624
|
+
'coinbasepro': _src_coinbasepro_js__WEBPACK_IMPORTED_MODULE_40__/* ["default"] */ .Z,
|
|
291625
|
+
'coincheck': _src_coincheck_js__WEBPACK_IMPORTED_MODULE_41__/* ["default"] */ .Z,
|
|
291626
|
+
'coinex': _src_coinex_js__WEBPACK_IMPORTED_MODULE_42__/* ["default"] */ .Z,
|
|
291627
|
+
'coinlist': _src_coinlist_js__WEBPACK_IMPORTED_MODULE_43__/* ["default"] */ .Z,
|
|
291628
|
+
'coinmate': _src_coinmate_js__WEBPACK_IMPORTED_MODULE_44__/* ["default"] */ .Z,
|
|
291629
|
+
'coinone': _src_coinone_js__WEBPACK_IMPORTED_MODULE_45__/* ["default"] */ .Z,
|
|
291630
|
+
'coinsph': _src_coinsph_js__WEBPACK_IMPORTED_MODULE_46__/* ["default"] */ .Z,
|
|
291631
|
+
'coinspot': _src_coinspot_js__WEBPACK_IMPORTED_MODULE_47__/* ["default"] */ .Z,
|
|
291632
|
+
'cryptocom': _src_cryptocom_js__WEBPACK_IMPORTED_MODULE_48__/* ["default"] */ .Z,
|
|
291633
|
+
'currencycom': _src_currencycom_js__WEBPACK_IMPORTED_MODULE_49__/* ["default"] */ .Z,
|
|
291634
|
+
'delta': _src_delta_js__WEBPACK_IMPORTED_MODULE_50__/* ["default"] */ .Z,
|
|
291635
|
+
'deribit': _src_deribit_js__WEBPACK_IMPORTED_MODULE_51__/* ["default"] */ .Z,
|
|
291636
|
+
'digifinex': _src_digifinex_js__WEBPACK_IMPORTED_MODULE_52__/* ["default"] */ .Z,
|
|
291637
|
+
'exmo': _src_exmo_js__WEBPACK_IMPORTED_MODULE_53__/* ["default"] */ .Z,
|
|
291638
|
+
'fmfwio': _src_fmfwio_js__WEBPACK_IMPORTED_MODULE_54__/* ["default"] */ .Z,
|
|
291639
|
+
'gate': _src_gate_js__WEBPACK_IMPORTED_MODULE_55__/* ["default"] */ .Z,
|
|
291640
|
+
'gateio': _src_gateio_js__WEBPACK_IMPORTED_MODULE_56__/* ["default"] */ .Z,
|
|
291641
|
+
'gemini': _src_gemini_js__WEBPACK_IMPORTED_MODULE_57__/* ["default"] */ .Z,
|
|
291642
|
+
'hitbtc': _src_hitbtc_js__WEBPACK_IMPORTED_MODULE_58__/* ["default"] */ .Z,
|
|
291643
|
+
'hitbtc3': _src_hitbtc3_js__WEBPACK_IMPORTED_MODULE_59__/* ["default"] */ .Z,
|
|
291644
|
+
'hollaex': _src_hollaex_js__WEBPACK_IMPORTED_MODULE_60__/* ["default"] */ .Z,
|
|
291645
|
+
'htx': _src_htx_js__WEBPACK_IMPORTED_MODULE_61__/* ["default"] */ .Z,
|
|
291646
|
+
'huobi': _src_huobi_js__WEBPACK_IMPORTED_MODULE_62__/* ["default"] */ .Z,
|
|
291647
|
+
'huobijp': _src_huobijp_js__WEBPACK_IMPORTED_MODULE_63__/* ["default"] */ .Z,
|
|
291648
|
+
'idex': _src_idex_js__WEBPACK_IMPORTED_MODULE_64__/* ["default"] */ .Z,
|
|
291649
|
+
'independentreserve': _src_independentreserve_js__WEBPACK_IMPORTED_MODULE_65__/* ["default"] */ .Z,
|
|
291650
|
+
'indodax': _src_indodax_js__WEBPACK_IMPORTED_MODULE_66__/* ["default"] */ .Z,
|
|
291651
|
+
'kraken': _src_kraken_js__WEBPACK_IMPORTED_MODULE_67__/* ["default"] */ .Z,
|
|
291652
|
+
'krakenfutures': _src_krakenfutures_js__WEBPACK_IMPORTED_MODULE_68__/* ["default"] */ .Z,
|
|
291653
|
+
'kucoin': _src_kucoin_js__WEBPACK_IMPORTED_MODULE_69__/* ["default"] */ .Z,
|
|
291654
|
+
'kucoinfutures': _src_kucoinfutures_js__WEBPACK_IMPORTED_MODULE_70__/* ["default"] */ .Z,
|
|
291655
|
+
'kuna': _src_kuna_js__WEBPACK_IMPORTED_MODULE_71__/* ["default"] */ .Z,
|
|
291656
|
+
'latoken': _src_latoken_js__WEBPACK_IMPORTED_MODULE_72__/* ["default"] */ .Z,
|
|
291657
|
+
'lbank': _src_lbank_js__WEBPACK_IMPORTED_MODULE_73__/* ["default"] */ .Z,
|
|
291658
|
+
'luno': _src_luno_js__WEBPACK_IMPORTED_MODULE_74__/* ["default"] */ .Z,
|
|
291659
|
+
'lykke': _src_lykke_js__WEBPACK_IMPORTED_MODULE_75__/* ["default"] */ .Z,
|
|
291660
|
+
'mercado': _src_mercado_js__WEBPACK_IMPORTED_MODULE_76__/* ["default"] */ .Z,
|
|
291661
|
+
'mexc': _src_mexc_js__WEBPACK_IMPORTED_MODULE_77__/* ["default"] */ .Z,
|
|
291662
|
+
'ndax': _src_ndax_js__WEBPACK_IMPORTED_MODULE_78__/* ["default"] */ .Z,
|
|
291663
|
+
'novadax': _src_novadax_js__WEBPACK_IMPORTED_MODULE_79__/* ["default"] */ .Z,
|
|
291664
|
+
'oceanex': _src_oceanex_js__WEBPACK_IMPORTED_MODULE_80__/* ["default"] */ .Z,
|
|
291665
|
+
'okcoin': _src_okcoin_js__WEBPACK_IMPORTED_MODULE_81__/* ["default"] */ .Z,
|
|
291666
|
+
'okx': _src_okx_js__WEBPACK_IMPORTED_MODULE_82__/* ["default"] */ .Z,
|
|
291667
|
+
'p2b': _src_p2b_js__WEBPACK_IMPORTED_MODULE_83__/* ["default"] */ .Z,
|
|
291668
|
+
'paymium': _src_paymium_js__WEBPACK_IMPORTED_MODULE_84__/* ["default"] */ .Z,
|
|
291669
|
+
'phemex': _src_phemex_js__WEBPACK_IMPORTED_MODULE_85__/* ["default"] */ .Z,
|
|
291670
|
+
'poloniex': _src_poloniex_js__WEBPACK_IMPORTED_MODULE_86__/* ["default"] */ .Z,
|
|
291671
|
+
'poloniexfutures': _src_poloniexfutures_js__WEBPACK_IMPORTED_MODULE_87__/* ["default"] */ .Z,
|
|
291672
|
+
'probit': _src_probit_js__WEBPACK_IMPORTED_MODULE_88__/* ["default"] */ .Z,
|
|
291673
|
+
'timex': _src_timex_js__WEBPACK_IMPORTED_MODULE_89__/* ["default"] */ .Z,
|
|
291674
|
+
'tokocrypto': _src_tokocrypto_js__WEBPACK_IMPORTED_MODULE_90__/* ["default"] */ .Z,
|
|
291675
|
+
'upbit': _src_upbit_js__WEBPACK_IMPORTED_MODULE_91__/* ["default"] */ .Z,
|
|
291676
|
+
'wavesexchange': _src_wavesexchange_js__WEBPACK_IMPORTED_MODULE_92__/* ["default"] */ .Z,
|
|
291677
|
+
'wazirx': _src_wazirx_js__WEBPACK_IMPORTED_MODULE_93__/* ["default"] */ .Z,
|
|
291678
|
+
'whitebit': _src_whitebit_js__WEBPACK_IMPORTED_MODULE_94__/* ["default"] */ .Z,
|
|
291679
|
+
'woo': _src_woo_js__WEBPACK_IMPORTED_MODULE_95__/* ["default"] */ .Z,
|
|
291680
|
+
'yobit': _src_yobit_js__WEBPACK_IMPORTED_MODULE_96__/* ["default"] */ .Z,
|
|
291681
|
+
'zaif': _src_zaif_js__WEBPACK_IMPORTED_MODULE_97__/* ["default"] */ .Z,
|
|
291513
291682
|
'zonda': _src_zonda_js__WEBPACK_IMPORTED_MODULE_98__/* ["default"] */ .Z,
|
|
291514
291683
|
};
|
|
291515
291684
|
const pro = {
|