@pioneer-platform/markets 8.3.5 → 8.3.7
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/lib/index.js +173 -22
- package/package.json +2 -1
package/lib/index.js
CHANGED
|
@@ -6,6 +6,17 @@
|
|
|
6
6
|
https://www.coingecko.com/api/documentations/v3
|
|
7
7
|
|
|
8
8
|
*/
|
|
9
|
+
var __assign = (this && this.__assign) || function () {
|
|
10
|
+
__assign = Object.assign || function(t) {
|
|
11
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
12
|
+
s = arguments[i];
|
|
13
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
14
|
+
t[p] = s[p];
|
|
15
|
+
}
|
|
16
|
+
return t;
|
|
17
|
+
};
|
|
18
|
+
return __assign.apply(this, arguments);
|
|
19
|
+
};
|
|
9
20
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
10
21
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
11
22
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -44,6 +55,8 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
44
55
|
};
|
|
45
56
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
57
|
var TAG = " | market-module | ";
|
|
58
|
+
// @ts-ignore
|
|
59
|
+
var pioneer_discovery_1 = require("@pioneer-platform/pioneer-discovery");
|
|
47
60
|
var Axios = require('axios');
|
|
48
61
|
var https = require('https');
|
|
49
62
|
var axios = Axios.create({
|
|
@@ -71,6 +84,7 @@ axiosRetry(axios, {
|
|
|
71
84
|
});
|
|
72
85
|
var log = require('@pioneer-platform/loggerdog')();
|
|
73
86
|
var _c = require("@pioneer-platform/pioneer-coins"), getExplorerAddressUrl = _c.getExplorerAddressUrl, needsMemoByNetwork = _c.needsMemoByNetwork, COIN_MAP_LONG = _c.COIN_MAP_LONG;
|
|
87
|
+
var _d = require('@pioneer-platform/default-redis'), subscriber = _d.subscriber, publisher = _d.publisher, redis = _d.redis, redisQueue = _d.redisQueue;
|
|
74
88
|
var URL_COINCAP = "https://api.coincap.io/v2/";
|
|
75
89
|
var URL_COINGECKO = "https://api.coingecko.com/api/v3/";
|
|
76
90
|
var COINGECKO_API_KEY = process.env['COINGECKO_API_KEY'];
|
|
@@ -92,6 +106,9 @@ module.exports = {
|
|
|
92
106
|
getRatePro: function () {
|
|
93
107
|
return get_pro_rate();
|
|
94
108
|
},
|
|
109
|
+
updateCache: function () {
|
|
110
|
+
return update_cache();
|
|
111
|
+
},
|
|
95
112
|
getPrice: function (asset) {
|
|
96
113
|
return get_price(asset);
|
|
97
114
|
},
|
|
@@ -102,9 +119,142 @@ module.exports = {
|
|
|
102
119
|
return build_balances(marketInfoCoinCap, marketInfoCoinGecko, pubkeys);
|
|
103
120
|
}
|
|
104
121
|
};
|
|
122
|
+
var update_cache = function () {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
124
|
+
var tag, entries, url, result, allCoinsArray, _loop_1, i, limit, totalAssets, totalPages, page, url_1, result_1, allCoinsArray_2, _loop_2, _i, allCoinsArray_1, coin, e_1;
|
|
125
|
+
return __generator(this, function (_a) {
|
|
126
|
+
switch (_a.label) {
|
|
127
|
+
case 0:
|
|
128
|
+
tag = TAG + ' | update_cache | ';
|
|
129
|
+
_a.label = 1;
|
|
130
|
+
case 1:
|
|
131
|
+
_a.trys.push([1, 16, , 17]);
|
|
132
|
+
entries = Object.entries(pioneer_discovery_1.assetData).map(function (_a) {
|
|
133
|
+
var caip = _a[0], asset = _a[1];
|
|
134
|
+
return (__assign(__assign({}, asset), { caip: caip }));
|
|
135
|
+
});
|
|
136
|
+
url = URL_COINCAP + 'assets?limit=2000';
|
|
137
|
+
log.debug(tag, "url: ", url);
|
|
138
|
+
return [4 /*yield*/, axios({
|
|
139
|
+
url: url,
|
|
140
|
+
method: 'GET'
|
|
141
|
+
})
|
|
142
|
+
//parse into keys array off ticker
|
|
143
|
+
];
|
|
144
|
+
case 2:
|
|
145
|
+
result = _a.sent();
|
|
146
|
+
allCoinsArray = result.data.data;
|
|
147
|
+
log.debug(tag, "allCoinsArray: ", allCoinsArray.length);
|
|
148
|
+
_loop_1 = function (i) {
|
|
149
|
+
var entry, assetsMatchSymbol, j, asset, key, result_2;
|
|
150
|
+
return __generator(this, function (_b) {
|
|
151
|
+
switch (_b.label) {
|
|
152
|
+
case 0:
|
|
153
|
+
entry = allCoinsArray[i];
|
|
154
|
+
assetsMatchSymbol = entries.filter(function (asset) { return asset.symbol === entry.symbol; });
|
|
155
|
+
j = 0;
|
|
156
|
+
_b.label = 1;
|
|
157
|
+
case 1:
|
|
158
|
+
if (!(j < assetsMatchSymbol.length)) return [3 /*break*/, 4];
|
|
159
|
+
asset = assetsMatchSymbol[j];
|
|
160
|
+
key = "coincap:" + asset.caip;
|
|
161
|
+
return [4 /*yield*/, redis.setex(key, 3600, JSON.stringify(entry))];
|
|
162
|
+
case 2:
|
|
163
|
+
result_2 = _b.sent();
|
|
164
|
+
log.debug(tag, "saved: " + key + " result: ", result_2);
|
|
165
|
+
_b.label = 3;
|
|
166
|
+
case 3:
|
|
167
|
+
j++;
|
|
168
|
+
return [3 /*break*/, 1];
|
|
169
|
+
case 4: return [2 /*return*/];
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
i = 0;
|
|
174
|
+
_a.label = 3;
|
|
175
|
+
case 3:
|
|
176
|
+
if (!(i < allCoinsArray.length)) return [3 /*break*/, 6];
|
|
177
|
+
return [5 /*yield**/, _loop_1(i)];
|
|
178
|
+
case 4:
|
|
179
|
+
_a.sent();
|
|
180
|
+
_a.label = 5;
|
|
181
|
+
case 5:
|
|
182
|
+
i++;
|
|
183
|
+
return [3 /*break*/, 3];
|
|
184
|
+
case 6:
|
|
185
|
+
limit = 250;
|
|
186
|
+
totalAssets = 2000;
|
|
187
|
+
totalPages = Math.ceil(totalAssets / limit);
|
|
188
|
+
page = 1;
|
|
189
|
+
_a.label = 7;
|
|
190
|
+
case 7:
|
|
191
|
+
if (!(page <= totalPages)) return [3 /*break*/, 15];
|
|
192
|
+
url_1 = "".concat(URL_COINGECKO, "coins/markets?vs_currency=usd&order=market_cap_desc&per_page=").concat(limit, "&page=").concat(page, "&sparkline=false");
|
|
193
|
+
log.debug(tag, "Fetching URL: ", url_1);
|
|
194
|
+
return [4 /*yield*/, axios.get(url_1)];
|
|
195
|
+
case 8:
|
|
196
|
+
result_1 = _a.sent();
|
|
197
|
+
allCoinsArray_2 = result_1.data;
|
|
198
|
+
log.debug(tag, "Fetched ".concat(allCoinsArray_2.length, " coins for page ").concat(page));
|
|
199
|
+
_loop_2 = function (coin) {
|
|
200
|
+
var matchingAssets, _c, matchingAssets_1, matchingAsset, key;
|
|
201
|
+
return __generator(this, function (_d) {
|
|
202
|
+
switch (_d.label) {
|
|
203
|
+
case 0:
|
|
204
|
+
matchingAssets = entries.filter(function (asset) { return asset.symbol === coin.symbol.toUpperCase(); });
|
|
205
|
+
_c = 0, matchingAssets_1 = matchingAssets;
|
|
206
|
+
_d.label = 1;
|
|
207
|
+
case 1:
|
|
208
|
+
if (!(_c < matchingAssets_1.length)) return [3 /*break*/, 4];
|
|
209
|
+
matchingAsset = matchingAssets_1[_c];
|
|
210
|
+
key = "coingecko:".concat(matchingAsset.caip);
|
|
211
|
+
return [4 /*yield*/, redis.setex(key, 3600, JSON.stringify(coin))];
|
|
212
|
+
case 2:
|
|
213
|
+
_d.sent();
|
|
214
|
+
log.debug(tag, "Saved ".concat(coin.symbol, " under ").concat(key));
|
|
215
|
+
_d.label = 3;
|
|
216
|
+
case 3:
|
|
217
|
+
_c++;
|
|
218
|
+
return [3 /*break*/, 1];
|
|
219
|
+
case 4: return [2 /*return*/];
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
};
|
|
223
|
+
_i = 0, allCoinsArray_1 = allCoinsArray_2;
|
|
224
|
+
_a.label = 9;
|
|
225
|
+
case 9:
|
|
226
|
+
if (!(_i < allCoinsArray_1.length)) return [3 /*break*/, 12];
|
|
227
|
+
coin = allCoinsArray_1[_i];
|
|
228
|
+
return [5 /*yield**/, _loop_2(coin)];
|
|
229
|
+
case 10:
|
|
230
|
+
_a.sent();
|
|
231
|
+
_a.label = 11;
|
|
232
|
+
case 11:
|
|
233
|
+
_i++;
|
|
234
|
+
return [3 /*break*/, 9];
|
|
235
|
+
case 12:
|
|
236
|
+
if (!(page < totalPages)) return [3 /*break*/, 14];
|
|
237
|
+
log.debug(tag, "Waiting 10 seconds before next query...");
|
|
238
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 30000); })];
|
|
239
|
+
case 13:
|
|
240
|
+
_a.sent();
|
|
241
|
+
_a.label = 14;
|
|
242
|
+
case 14:
|
|
243
|
+
page++;
|
|
244
|
+
return [3 /*break*/, 7];
|
|
245
|
+
case 15: return [3 /*break*/, 17];
|
|
246
|
+
case 16:
|
|
247
|
+
e_1 = _a.sent();
|
|
248
|
+
log.error(e_1);
|
|
249
|
+
return [3 /*break*/, 17];
|
|
250
|
+
case 17: return [2 /*return*/];
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
};
|
|
105
255
|
var get_pro_rate = function () {
|
|
106
256
|
return __awaiter(this, void 0, void 0, function () {
|
|
107
|
-
var url, ratePro,
|
|
257
|
+
var url, ratePro, e_2;
|
|
108
258
|
return __generator(this, function (_a) {
|
|
109
259
|
switch (_a.label) {
|
|
110
260
|
case 0:
|
|
@@ -115,8 +265,8 @@ var get_pro_rate = function () {
|
|
|
115
265
|
ratePro = _a.sent();
|
|
116
266
|
return [2 /*return*/, ratePro.data];
|
|
117
267
|
case 2:
|
|
118
|
-
|
|
119
|
-
console.error(
|
|
268
|
+
e_2 = _a.sent();
|
|
269
|
+
console.error(e_2);
|
|
120
270
|
return [2 /*return*/, undefined];
|
|
121
271
|
case 3: return [2 /*return*/];
|
|
122
272
|
}
|
|
@@ -125,7 +275,7 @@ var get_pro_rate = function () {
|
|
|
125
275
|
};
|
|
126
276
|
var build_balances = function (marketInfoCoinCap, marketInfoCoinGecko, pubkeys) {
|
|
127
277
|
return __awaiter(this, void 0, void 0, function () {
|
|
128
|
-
var tag, valuesUsd, totalValueUsd, outputBalances, unknownTokens, unPricedTokens, proRate, i, entry, ethToUsdRate,
|
|
278
|
+
var tag, valuesUsd, totalValueUsd, outputBalances, unknownTokens, unPricedTokens, proRate, i, entry, ethToUsdRate, proUsdRate, coincap, coingecko, priceUsd, balance, valueUsd, e_3;
|
|
129
279
|
return __generator(this, function (_a) {
|
|
130
280
|
switch (_a.label) {
|
|
131
281
|
case 0:
|
|
@@ -168,9 +318,10 @@ var build_balances = function (marketInfoCoinCap, marketInfoCoinGecko, pubkeys)
|
|
|
168
318
|
console.log("proRate: ", proRate);
|
|
169
319
|
ethToUsdRate = marketInfoCoinCap['ETH'].priceUsd || marketInfoCoinGecko['ETH'].current_price;
|
|
170
320
|
console.log("ethToUsdRate: ", ethToUsdRate);
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
321
|
+
proUsdRate = (1 / proRate) * ethToUsdRate;
|
|
322
|
+
redis.set('proUsdRate');
|
|
323
|
+
console.log("proToUsdRate: ", proUsdRate);
|
|
324
|
+
entry.priceUsd = proUsdRate;
|
|
174
325
|
//TODO get rate in USD
|
|
175
326
|
entry.rank = 10;
|
|
176
327
|
entry.alias = [];
|
|
@@ -181,8 +332,8 @@ var build_balances = function (marketInfoCoinCap, marketInfoCoinGecko, pubkeys)
|
|
|
181
332
|
else {
|
|
182
333
|
coincap = marketInfoCoinCap[entry.ticker];
|
|
183
334
|
coingecko = marketInfoCoinGecko[entry.ticker];
|
|
184
|
-
// log.
|
|
185
|
-
// log.
|
|
335
|
+
// log.debug("coincap: ",coincap)
|
|
336
|
+
// log.debug("coingecko: ",coingecko)
|
|
186
337
|
if (!coincap && !coingecko) {
|
|
187
338
|
console.error("unknown token! ", entry.symbol);
|
|
188
339
|
unknownTokens.push(entry);
|
|
@@ -388,9 +539,9 @@ var build_balances = function (marketInfoCoinCap, marketInfoCoinGecko, pubkeys)
|
|
|
388
539
|
}
|
|
389
540
|
return [2 /*return*/, { outputBalances: outputBalances, unPricedTokens: unPricedTokens, unknownTokens: unknownTokens, total: totalValueUsd }];
|
|
390
541
|
case 7:
|
|
391
|
-
|
|
392
|
-
console.error(tag, 'Error: ',
|
|
393
|
-
throw
|
|
542
|
+
e_3 = _a.sent();
|
|
543
|
+
console.error(tag, 'Error: ', e_3);
|
|
544
|
+
throw e_3;
|
|
394
545
|
case 8: return [2 /*return*/];
|
|
395
546
|
}
|
|
396
547
|
});
|
|
@@ -398,7 +549,7 @@ var build_balances = function (marketInfoCoinCap, marketInfoCoinGecko, pubkeys)
|
|
|
398
549
|
};
|
|
399
550
|
var get_assets_coincap = function () {
|
|
400
551
|
return __awaiter(this, void 0, void 0, function () {
|
|
401
|
-
var tag, output, url, result, allCoinsArray, i, coinInfo,
|
|
552
|
+
var tag, output, url, result, allCoinsArray, i, coinInfo, e_4;
|
|
402
553
|
return __generator(this, function (_a) {
|
|
403
554
|
switch (_a.label) {
|
|
404
555
|
case 0:
|
|
@@ -427,7 +578,7 @@ var get_assets_coincap = function () {
|
|
|
427
578
|
log.debug('result: ', output);
|
|
428
579
|
return [2 /*return*/, output];
|
|
429
580
|
case 3:
|
|
430
|
-
|
|
581
|
+
e_4 = _a.sent();
|
|
431
582
|
//handle error gracefully
|
|
432
583
|
return [2 /*return*/, {}];
|
|
433
584
|
case 4: return [2 /*return*/];
|
|
@@ -437,7 +588,7 @@ var get_assets_coincap = function () {
|
|
|
437
588
|
};
|
|
438
589
|
var get_assets_coingecko = function (limit, skip) {
|
|
439
590
|
return __awaiter(this, void 0, void 0, function () {
|
|
440
|
-
var tag, output, url, result, allCoinsArray, i, coinInfo,
|
|
591
|
+
var tag, output, url, result, allCoinsArray, i, coinInfo, e_5;
|
|
441
592
|
return __generator(this, function (_a) {
|
|
442
593
|
switch (_a.label) {
|
|
443
594
|
case 0:
|
|
@@ -470,7 +621,7 @@ var get_assets_coingecko = function (limit, skip) {
|
|
|
470
621
|
log.debug('result: ', output);
|
|
471
622
|
return [2 /*return*/, output];
|
|
472
623
|
case 3:
|
|
473
|
-
|
|
624
|
+
e_5 = _a.sent();
|
|
474
625
|
//handle error gracefully
|
|
475
626
|
return [2 /*return*/, {}];
|
|
476
627
|
case 4: return [2 /*return*/];
|
|
@@ -480,7 +631,7 @@ var get_assets_coingecko = function (limit, skip) {
|
|
|
480
631
|
};
|
|
481
632
|
var get_prices_in_quote = function (assets, quote) {
|
|
482
633
|
return __awaiter(this, void 0, void 0, function () {
|
|
483
|
-
var tag, data,
|
|
634
|
+
var tag, data, e_6;
|
|
484
635
|
return __generator(this, function (_a) {
|
|
485
636
|
switch (_a.label) {
|
|
486
637
|
case 0:
|
|
@@ -493,8 +644,8 @@ var get_prices_in_quote = function (assets, quote) {
|
|
|
493
644
|
data = (_a.sent()).data;
|
|
494
645
|
return [2 /*return*/, data];
|
|
495
646
|
case 3:
|
|
496
|
-
|
|
497
|
-
log.error(tag, "e: ",
|
|
647
|
+
e_6 = _a.sent();
|
|
648
|
+
log.error(tag, "e: ", e_6);
|
|
498
649
|
return [3 /*break*/, 4];
|
|
499
650
|
case 4: return [2 /*return*/];
|
|
500
651
|
}
|
|
@@ -504,7 +655,7 @@ var get_prices_in_quote = function (assets, quote) {
|
|
|
504
655
|
var get_price = function (asset) {
|
|
505
656
|
var _a, _b, _c, _d;
|
|
506
657
|
return __awaiter(this, void 0, void 0, function () {
|
|
507
|
-
var tag, data, currency, marketData,
|
|
658
|
+
var tag, data, currency, marketData, e_7;
|
|
508
659
|
return __generator(this, function (_e) {
|
|
509
660
|
switch (_e.label) {
|
|
510
661
|
case 0:
|
|
@@ -527,8 +678,8 @@ var get_price = function (asset) {
|
|
|
527
678
|
icon: (_d = data === null || data === void 0 ? void 0 : data.image) === null || _d === void 0 ? void 0 : _d.large
|
|
528
679
|
}];
|
|
529
680
|
case 3:
|
|
530
|
-
|
|
531
|
-
log.error(tag, "e: ",
|
|
681
|
+
e_7 = _e.sent();
|
|
682
|
+
log.error(tag, "e: ", e_7);
|
|
532
683
|
return [3 /*break*/, 4];
|
|
533
684
|
case 4: return [2 /*return*/];
|
|
534
685
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pioneer-platform/markets",
|
|
3
|
-
"version": "8.3.
|
|
3
|
+
"version": "8.3.7",
|
|
4
4
|
"main": "./lib/index.js",
|
|
5
5
|
"types": "./lib/index.d.ts",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"@pioneer-platform/loggerdog": "^8.3.1",
|
|
8
|
+
"@pioneer-platform/pioneer-discovery": "^0.0.7",
|
|
8
9
|
"@pioneer-platform/pioneer-types": "^8.3.1",
|
|
9
10
|
"axios": "^1.3.4",
|
|
10
11
|
"axios-retry": "^3.2.0",
|