@pioneer-platform/markets 8.3.5 → 8.3.6

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.
Files changed (2) hide show
  1. package/lib/index.js +171 -20
  2. 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.info(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.info(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.info(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.info(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.info(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, e_1;
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
- e_1 = _a.sent();
119
- console.error(e_1);
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, proToUsdRate, coincap, coingecko, priceUsd, balance, valueUsd, e_2;
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
- proToUsdRate = (1 / proRate) * ethToUsdRate;
172
- console.log("proToUsdRate: ", proToUsdRate);
173
- entry.priceUsd = proToUsdRate;
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 = [];
@@ -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
- e_2 = _a.sent();
392
- console.error(tag, 'Error: ', e_2);
393
- throw e_2;
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, e_3;
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
- e_3 = _a.sent();
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, e_4;
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
- e_4 = _a.sent();
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, e_5;
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
- e_5 = _a.sent();
497
- log.error(tag, "e: ", e_5);
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, e_6;
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
- e_6 = _e.sent();
531
- log.error(tag, "e: ", e_6);
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.5",
3
+ "version": "8.3.6",
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",