@pioneer-platform/markets 8.41.0 → 8.45.1

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.
@@ -1,5 +1,5 @@
1
1
 
2
2
  
3
- > @pioneer-platform/markets@8.41.0 build /Users/highlander/WebstormProjects/keepkey-stack/projects/pioneer/modules/intergrations/markets
3
+ > @pioneer-platform/markets@8.45.1 build /Users/highlander/WebstormProjects/keepkey-stack/projects/pioneer/modules/intergrations/markets
4
4
  > tsc -p .
5
5
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,56 @@
1
1
  # @pioneer-platform/markets
2
2
 
3
+ ## 8.45.1
4
+
5
+ ### Patch Changes
6
+
7
+ - fix(cache-worker): fix balance module import and initialization
8
+ - Updated dependencies
9
+ - @pioneer-platform/pioneer-discovery@8.45.1
10
+
11
+ ## 8.45.0
12
+
13
+ ### Minor Changes
14
+
15
+ - feat: remove Discord dependency and alerts integration
16
+ - Eliminated dependency on @pioneer-platform/pioneer-server/services/discord-notifier.service
17
+ - Replaced Discord alerts with console logging for rate limits and metrics
18
+ - Disabled automatic hourly metrics reporting (metrics still collected and available via API)
19
+ - Reduced external dependencies and improved module standalone compatibility
20
+
21
+ ## 8.44.0
22
+
23
+ ### Minor Changes
24
+
25
+ - chore: feat(e2e): add blue API support to swap roundtrip tests
26
+
27
+ ### Patch Changes
28
+
29
+ - Updated dependencies
30
+ - @pioneer-platform/pioneer-discovery@8.44.0
31
+
32
+ ## 8.43.0
33
+
34
+ ### Minor Changes
35
+
36
+ - feat(e2e): add blue API support to swap roundtrip tests
37
+
38
+ ### Patch Changes
39
+
40
+ - Updated dependencies
41
+ - @pioneer-platform/pioneer-discovery@8.43.0
42
+
43
+ ## 8.42.0
44
+
45
+ ### Minor Changes
46
+
47
+ - feat(swaps): make GetPendingSwap idempotent with auto-backfill
48
+
49
+ ### Patch Changes
50
+
51
+ - Updated dependencies
52
+ - @pioneer-platform/pioneer-discovery@8.42.0
53
+
3
54
  ## 8.41.0
4
55
 
5
56
  ### Minor Changes
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Generate and send hourly metrics report
2
+ * Generate and log hourly metrics report
3
3
  */
4
4
  export declare function sendHourlyMetricsReport(): Promise<void>;
5
5
  /**
@@ -16,5 +16,6 @@ export declare function getUnpriceableTokens(limit?: number): Promise<string[]>;
16
16
  export declare function clearUnpriceableToken(caip: string): Promise<boolean>;
17
17
  /**
18
18
  * Start hourly reporting (call this on module initialization)
19
+ * Note: This function is kept for backwards compatibility but no longer starts automatic reporting
19
20
  */
20
21
  export declare function startHourlyReporting(): void;
@@ -2,8 +2,8 @@
2
2
  /*
3
3
  API Metrics Reporter
4
4
 
5
- Collects and reports API usage metrics to Discord via alerts bridge
6
- Runs hourly to track pricing API health and usage
5
+ Collects and reports API usage metrics via logging
6
+ Tracks pricing API health and usage
7
7
  */
8
8
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9
9
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -51,9 +51,8 @@ var log = require('@pioneer-platform/loggerdog')();
51
51
  var redis = require('@pioneer-platform/default-redis').redis;
52
52
  var axios = require('axios');
53
53
  var TAG = ' | api-metrics-reporter | ';
54
- // Discord webhook via alerts bridge
55
- var ALERTS_BRIDGE_URL = process.env.ALERTS_BRIDGE_URL || 'http://localhost:9000/api/v1/alert';
56
- var ALERTS_ENABLED = process.env.ALERTS_ENABLED !== 'false';
54
+ // Metrics logging (Discord integration removed)
55
+ var METRICS_ENABLED = process.env.METRICS_ENABLED !== 'false';
57
56
  // Redis keys
58
57
  var REDIS_API_METRICS_KEY = 'markets:api_metrics';
59
58
  var REDIS_UNPRICEABLE_SET = 'markets:unpriceable_tokens';
@@ -80,58 +79,40 @@ function getHealthEmoji(successRate) {
80
79
  return '🔴';
81
80
  }
82
81
  /**
83
- * Send alert to Discord via alerts bridge
82
+ * Log metrics report to console
84
83
  */
85
- function sendDiscordAlert(title_1, message_1) {
86
- return __awaiter(this, arguments, void 0, function (title, message, level) {
87
- var tag, error_1;
88
- if (level === void 0) { level = 'info'; }
89
- return __generator(this, function (_a) {
90
- switch (_a.label) {
91
- case 0:
92
- tag = TAG + 'sendDiscordAlert | ';
93
- if (!ALERTS_ENABLED) {
94
- log.debug(tag, 'Alerts disabled, skipping Discord notification');
95
- return [2 /*return*/];
96
- }
97
- _a.label = 1;
98
- case 1:
99
- _a.trys.push([1, 3, , 4]);
100
- return [4 /*yield*/, axios.post(ALERTS_BRIDGE_URL, {
101
- service: 'pioneer-markets',
102
- level: level,
103
- title: title,
104
- message: message,
105
- timestamp: new Date().toISOString()
106
- }, {
107
- timeout: 5000
108
- })];
109
- case 2:
110
- _a.sent();
111
- log.info(tag, "Sent Discord alert: ".concat(title));
112
- return [3 /*break*/, 4];
113
- case 3:
114
- error_1 = _a.sent();
115
- log.error(tag, "Failed to send Discord alert: ".concat(error_1.message));
116
- return [3 /*break*/, 4];
117
- case 4: return [2 /*return*/];
118
- }
119
- });
120
- });
84
+ function logMetricsReport(title, message, level) {
85
+ if (level === void 0) { level = 'info'; }
86
+ var tag = TAG + 'logMetricsReport | ';
87
+ if (!METRICS_ENABLED) {
88
+ log.debug(tag, 'Metrics logging disabled');
89
+ return;
90
+ }
91
+ // Log the report based on level
92
+ switch (level) {
93
+ case 'error':
94
+ log.error(tag, "".concat(title, ": ").concat(message));
95
+ break;
96
+ case 'warn':
97
+ log.warn(tag, "".concat(title, ": ").concat(message));
98
+ break;
99
+ default:
100
+ log.info(tag, "".concat(title, ": ").concat(message));
101
+ }
121
102
  }
122
103
  /**
123
- * Generate and send hourly metrics report
104
+ * Generate and log hourly metrics report
124
105
  */
125
106
  function sendHourlyMetricsReport() {
126
107
  return __awaiter(this, void 0, void 0, function () {
127
- var tag, lastReport, now, timeSinceLastReport, oneHour, metricsData, metrics, unpriceableCount, totalSuccess, totalFailures, criticalErrors, apiReport, _i, _a, _b, api, stats, success, failures, total, rate, totalRate, reportMessage, _c, apiReport_1, api, _d, criticalErrors_1, error, level, error_2;
108
+ var tag, lastReport, now, timeSinceLastReport, oneHour, metricsData, metrics, unpriceableCount, totalSuccess, totalFailures, criticalErrors, apiReport, _i, _a, _b, api, stats, success, failures, total, rate, totalRate, reportMessage, _c, apiReport_1, api, _d, criticalErrors_1, error, level, error_1;
128
109
  return __generator(this, function (_e) {
129
110
  switch (_e.label) {
130
111
  case 0:
131
112
  tag = TAG + 'sendHourlyMetricsReport | ';
132
113
  _e.label = 1;
133
114
  case 1:
134
- _e.trys.push([1, 8, , 9]);
115
+ _e.trys.push([1, 7, , 8]);
135
116
  return [4 /*yield*/, redis.get(REDIS_LAST_REPORT_KEY)];
136
117
  case 2:
137
118
  lastReport = _e.sent();
@@ -215,28 +196,25 @@ function sendHourlyMetricsReport() {
215
196
  reportMessage += "".concat(unpriceableCount, " tokens marked as unpriceable (likely scam/spam)\n");
216
197
  }
217
198
  level = criticalErrors.length > 0 ? 'warn' : 'info';
218
- // Send to Discord
219
- return [4 /*yield*/, sendDiscordAlert("Pricing API Metrics - ".concat(new Date().toLocaleString()), reportMessage, level)];
220
- case 5:
221
- // Send to Discord
222
- _e.sent();
199
+ // Log metrics report
200
+ logMetricsReport("Pricing API Metrics - ".concat(new Date().toLocaleString()), reportMessage, level);
223
201
  // Update last report timestamp
224
202
  return [4 /*yield*/, redis.set(REDIS_LAST_REPORT_KEY, now.toString())];
225
- case 6:
203
+ case 5:
226
204
  // Update last report timestamp
227
205
  _e.sent();
228
206
  // Reset metrics for next hour
229
207
  return [4 /*yield*/, redis.del(REDIS_API_METRICS_KEY)];
230
- case 7:
208
+ case 6:
231
209
  // Reset metrics for next hour
232
210
  _e.sent();
233
- log.info(tag, "Sent hourly metrics report - Overall: ".concat(totalRate, "%, Alerts: ").concat(criticalErrors.length));
234
- return [3 /*break*/, 9];
235
- case 8:
236
- error_2 = _e.sent();
237
- log.error(tag, "Error generating metrics report:", error_2);
238
- return [3 /*break*/, 9];
239
- case 9: return [2 /*return*/];
211
+ log.info(tag, "Generated metrics report - Overall: ".concat(totalRate, "%, Issues: ").concat(criticalErrors.length));
212
+ return [3 /*break*/, 8];
213
+ case 7:
214
+ error_1 = _e.sent();
215
+ log.error(tag, "Error generating metrics report:", error_1);
216
+ return [3 /*break*/, 8];
217
+ case 8: return [2 /*return*/];
240
218
  }
241
219
  });
242
220
  });
@@ -246,7 +224,7 @@ function sendHourlyMetricsReport() {
246
224
  */
247
225
  function getCurrentMetrics() {
248
226
  return __awaiter(this, void 0, void 0, function () {
249
- var tag, metricsData, unpriceableCount, metrics, error_3;
227
+ var tag, metricsData, unpriceableCount, metrics, error_2;
250
228
  return __generator(this, function (_a) {
251
229
  switch (_a.label) {
252
230
  case 0:
@@ -273,8 +251,8 @@ function getCurrentMetrics() {
273
251
  timestamp: new Date().toISOString()
274
252
  }];
275
253
  case 4:
276
- error_3 = _a.sent();
277
- log.error(tag, "Error getting metrics:", error_3);
254
+ error_2 = _a.sent();
255
+ log.error(tag, "Error getting metrics:", error_2);
278
256
  return [2 /*return*/, { error: 'Failed to retrieve metrics' }];
279
257
  case 5: return [2 /*return*/];
280
258
  }
@@ -286,7 +264,7 @@ function getCurrentMetrics() {
286
264
  */
287
265
  function getUnpriceableTokens() {
288
266
  return __awaiter(this, arguments, void 0, function (limit) {
289
- var tag, tokens, error_4;
267
+ var tag, tokens, error_3;
290
268
  if (limit === void 0) { limit = 100; }
291
269
  return __generator(this, function (_a) {
292
270
  switch (_a.label) {
@@ -300,8 +278,8 @@ function getUnpriceableTokens() {
300
278
  tokens = _a.sent();
301
279
  return [2 /*return*/, tokens.slice(0, limit)];
302
280
  case 3:
303
- error_4 = _a.sent();
304
- log.error(tag, "Error getting unpriceable tokens:", error_4);
281
+ error_3 = _a.sent();
282
+ log.error(tag, "Error getting unpriceable tokens:", error_3);
305
283
  return [2 /*return*/, []];
306
284
  case 4: return [2 /*return*/];
307
285
  }
@@ -313,7 +291,7 @@ function getUnpriceableTokens() {
313
291
  */
314
292
  function clearUnpriceableToken(caip) {
315
293
  return __awaiter(this, void 0, void 0, function () {
316
- var tag, error_5;
294
+ var tag, error_4;
317
295
  return __generator(this, function (_a) {
318
296
  switch (_a.label) {
319
297
  case 0:
@@ -327,8 +305,8 @@ function clearUnpriceableToken(caip) {
327
305
  log.info(tag, "Removed ".concat(caip, " from unpriceable list"));
328
306
  return [2 /*return*/, true];
329
307
  case 3:
330
- error_5 = _a.sent();
331
- log.error(tag, "Error clearing unpriceable token:", error_5);
308
+ error_4 = _a.sent();
309
+ log.error(tag, "Error clearing unpriceable token:", error_4);
332
310
  return [2 /*return*/, false];
333
311
  case 4: return [2 /*return*/];
334
312
  }
@@ -337,20 +315,10 @@ function clearUnpriceableToken(caip) {
337
315
  }
338
316
  /**
339
317
  * Start hourly reporting (call this on module initialization)
318
+ * Note: This function is kept for backwards compatibility but no longer starts automatic reporting
340
319
  */
341
320
  function startHourlyReporting() {
342
321
  var tag = TAG + 'startHourlyReporting | ';
343
- // Send initial report after 5 minutes
344
- setTimeout(function () {
345
- sendHourlyMetricsReport().catch(function (err) {
346
- log.error(tag, 'Error in initial metrics report:', err);
347
- });
348
- }, 5 * 60 * 1000);
349
- // Then send every hour
350
- setInterval(function () {
351
- sendHourlyMetricsReport().catch(function (err) {
352
- log.error(tag, 'Error in hourly metrics report:', err);
353
- });
354
- }, 60 * 60 * 1000);
355
- log.info(tag, '✅ Hourly metrics reporting started');
322
+ log.info(tag, '⚠️ Hourly metrics reporting disabled (Discord dependency removed)');
323
+ log.info(tag, 'Metrics are still collected and available via getCurrentMetrics()');
356
324
  }
package/lib/index.js CHANGED
@@ -162,8 +162,7 @@ module.exports = {
162
162
  COINGECKO_API_KEY = settings.apiKey;
163
163
  }
164
164
  //if(!COINGECKO_API_KEY) throw Error("api key required! set env COINGECKO_API_KEY")
165
- // Start hourly metrics reporting to Discord
166
- (0, api_metrics_reporter_1.startHourlyReporting)();
165
+ // Note: Hourly metrics reporting removed (Discord dependency eliminated)
167
166
  },
168
167
  // NEW: CAIP-first individual asset price lookup
169
168
  getAssetPriceByCaip: function (caip, returnSource) {
@@ -1049,7 +1048,7 @@ var trackAPIMetric = function (api, success, error) {
1049
1048
  */
1050
1049
  var get_price_from_coingecko = function (coingeckoId) {
1051
1050
  return __awaiter(this, void 0, void 0, function () {
1052
- var tag, startTime, hasTokens, url, headers, response, responseTime, price, error_3, responseTime, status_3, wasRateLimited, discordNotifier, importError_1, alertError_1;
1051
+ var tag, startTime, hasTokens, url, headers, response, responseTime, price, error_3, responseTime, status_3, wasRateLimited;
1053
1052
  var _a;
1054
1053
  return __generator(this, function (_b) {
1055
1054
  switch (_b.label) {
@@ -1077,7 +1076,7 @@ var get_price_from_coingecko = function (coingeckoId) {
1077
1076
  _b.label = 3;
1078
1077
  case 3: return [2 /*return*/, 0]; // Don't call API if no tokens!
1079
1078
  case 4:
1080
- _b.trys.push([4, 11, , 24]);
1079
+ _b.trys.push([4, 11, , 14]);
1081
1080
  url = "".concat(URL_COINGECKO, "simple/price?ids=").concat(coingeckoId, "&vs_currencies=usd");
1082
1081
  log.debug(tag, "Fetching from CoinGecko: ".concat(url));
1083
1082
  headers = {};
@@ -1145,41 +1144,15 @@ var get_price_from_coingecko = function (coingeckoId) {
1145
1144
  _b.sent();
1146
1145
  _b.label = 13;
1147
1146
  case 13:
1148
- if (!wasRateLimited) return [3 /*break*/, 22];
1149
- log.warn(tag, "CoinGecko rate limit (".concat(status_3, ") for ").concat(coingeckoId));
1150
- _b.label = 14;
1151
- case 14:
1152
- _b.trys.push([14, 20, , 21]);
1153
- if (!(typeof require !== 'undefined')) return [3 /*break*/, 19];
1154
- _b.label = 15;
1155
- case 15:
1156
- _b.trys.push([15, 18, , 19]);
1157
- discordNotifier = require('@pioneer-platform/pioneer-server/services/discord-notifier.service').discordNotifier;
1158
- if (!(discordNotifier && discordNotifier.isEnabled())) return [3 /*break*/, 17];
1159
- return [4 /*yield*/, discordNotifier.sendRateLimitAlert('CoinGecko', status_3, {
1160
- endpoint: '/simple/price',
1161
- asset: coingeckoId
1162
- })];
1163
- case 16:
1164
- _b.sent();
1165
- _b.label = 17;
1166
- case 17: return [3 /*break*/, 19];
1167
- case 18:
1168
- importError_1 = _b.sent();
1169
- // Server context not available - running standalone, skip alert
1170
- log.debug(tag, 'Discord notifier not available (standalone mode)');
1171
- return [3 /*break*/, 19];
1172
- case 19: return [3 /*break*/, 21];
1173
- case 20:
1174
- alertError_1 = _b.sent();
1175
- log.debug(tag, 'Failed to send rate limit alert:', alertError_1);
1176
- return [3 /*break*/, 21];
1177
- case 21: return [3 /*break*/, 23];
1178
- case 22:
1179
- log.debug(tag, "CoinGecko error for ".concat(coingeckoId, ": ").concat(error_3.message));
1180
- _b.label = 23;
1181
- case 23: return [2 /*return*/, 0];
1182
- case 24: return [2 /*return*/];
1147
+ if (wasRateLimited) {
1148
+ log.warn(tag, "CoinGecko rate limit (".concat(status_3, ") for ").concat(coingeckoId));
1149
+ // Note: Rate limit alerting removed (Discord dependency eliminated)
1150
+ }
1151
+ else {
1152
+ log.debug(tag, "CoinGecko error for ".concat(coingeckoId, ": ").concat(error_3.message));
1153
+ }
1154
+ return [2 /*return*/, 0];
1155
+ case 14: return [2 /*return*/];
1183
1156
  }
1184
1157
  });
1185
1158
  });
@@ -1239,7 +1212,7 @@ var get_price_from_coingecko_contract = function (contractAddress_1) {
1239
1212
  */
1240
1213
  var get_price_from_coinmarketcap = function (symbol) {
1241
1214
  return __awaiter(this, void 0, void 0, function () {
1242
- var tag, startTime, hasTokens, url, response, responseTime, coinData, priceData, price, error_5, responseTime, status_5, wasRateLimited, discordNotifier, importError_2, alertError_2;
1215
+ var tag, startTime, hasTokens, url, response, responseTime, coinData, priceData, price, error_5, responseTime, status_5, wasRateLimited;
1243
1216
  var _a, _b, _c;
1244
1217
  return __generator(this, function (_d) {
1245
1218
  switch (_d.label) {
@@ -1271,7 +1244,7 @@ var get_price_from_coinmarketcap = function (symbol) {
1271
1244
  _d.label = 3;
1272
1245
  case 3: return [2 /*return*/, 0];
1273
1246
  case 4:
1274
- _d.trys.push([4, 14, , 27]);
1247
+ _d.trys.push([4, 14, , 17]);
1275
1248
  url = "".concat(URL_COINMARKETCAP, "cryptocurrency/quotes/latest?symbol=").concat(symbol, "&convert=USD");
1276
1249
  log.debug(tag, "Fetching from CoinMarketCap: ".concat(url));
1277
1250
  return [4 /*yield*/, axios.get(url, {
@@ -1360,41 +1333,15 @@ var get_price_from_coinmarketcap = function (symbol) {
1360
1333
  _d.sent();
1361
1334
  _d.label = 16;
1362
1335
  case 16:
1363
- if (!wasRateLimited) return [3 /*break*/, 25];
1364
- log.warn(tag, "CoinMarketCap rate limit (".concat(status_5, ") for ").concat(symbol));
1365
- _d.label = 17;
1366
- case 17:
1367
- _d.trys.push([17, 23, , 24]);
1368
- if (!(typeof require !== 'undefined')) return [3 /*break*/, 22];
1369
- _d.label = 18;
1370
- case 18:
1371
- _d.trys.push([18, 21, , 22]);
1372
- discordNotifier = require('@pioneer-platform/pioneer-server/services/discord-notifier.service').discordNotifier;
1373
- if (!(discordNotifier && discordNotifier.isEnabled())) return [3 /*break*/, 20];
1374
- return [4 /*yield*/, discordNotifier.sendRateLimitAlert('CoinMarketCap', status_5, {
1375
- endpoint: '/cryptocurrency/quotes/latest',
1376
- symbol: symbol
1377
- })];
1378
- case 19:
1379
- _d.sent();
1380
- _d.label = 20;
1381
- case 20: return [3 /*break*/, 22];
1382
- case 21:
1383
- importError_2 = _d.sent();
1384
- // Server context not available - running standalone, skip alert
1385
- log.debug(tag, 'Discord notifier not available (standalone mode)');
1386
- return [3 /*break*/, 22];
1387
- case 22: return [3 /*break*/, 24];
1388
- case 23:
1389
- alertError_2 = _d.sent();
1390
- log.debug(tag, 'Failed to send rate limit alert:', alertError_2);
1391
- return [3 /*break*/, 24];
1392
- case 24: return [3 /*break*/, 26];
1393
- case 25:
1394
- log.debug(tag, "CoinMarketCap error for ".concat(symbol, ": ").concat(error_5.message));
1395
- _d.label = 26;
1396
- case 26: return [2 /*return*/, 0];
1397
- case 27: return [2 /*return*/];
1336
+ if (wasRateLimited) {
1337
+ log.warn(tag, "CoinMarketCap rate limit (".concat(status_5, ") for ").concat(symbol));
1338
+ // Note: Rate limit alerting removed (Discord dependency eliminated)
1339
+ }
1340
+ else {
1341
+ log.debug(tag, "CoinMarketCap error for ".concat(symbol, ": ").concat(error_5.message));
1342
+ }
1343
+ return [2 /*return*/, 0];
1344
+ case 17: return [2 /*return*/];
1398
1345
  }
1399
1346
  });
1400
1347
  });
@@ -1405,7 +1352,7 @@ var get_price_from_coinmarketcap = function (symbol) {
1405
1352
  */
1406
1353
  var get_price_from_coincap = function (symbol) {
1407
1354
  return __awaiter(this, void 0, void 0, function () {
1408
- var tag, startTime, hasTokens, url, response, responseTime, price, error_6, responseTime, status_6, wasRateLimited, discordNotifier, importError_3, alertError_3;
1355
+ var tag, startTime, hasTokens, url, response, responseTime, price, error_6, responseTime, status_6, wasRateLimited;
1409
1356
  var _a;
1410
1357
  return __generator(this, function (_b) {
1411
1358
  switch (_b.label) {
@@ -1437,7 +1384,7 @@ var get_price_from_coincap = function (symbol) {
1437
1384
  _b.label = 3;
1438
1385
  case 3: return [2 /*return*/, 0];
1439
1386
  case 4:
1440
- _b.trys.push([4, 11, , 24]);
1387
+ _b.trys.push([4, 11, , 14]);
1441
1388
  url = "".concat(URL_COINCAP, "assets/").concat(symbol);
1442
1389
  log.debug(tag, "Fetching from CoinCap: ".concat(url));
1443
1390
  return [4 /*yield*/, axios.get(url, {
@@ -1506,41 +1453,15 @@ var get_price_from_coincap = function (symbol) {
1506
1453
  _b.sent();
1507
1454
  _b.label = 13;
1508
1455
  case 13:
1509
- if (!wasRateLimited) return [3 /*break*/, 22];
1510
- log.warn(tag, "CoinCap rate limit (".concat(status_6, ") for ").concat(symbol));
1511
- _b.label = 14;
1512
- case 14:
1513
- _b.trys.push([14, 20, , 21]);
1514
- if (!(typeof require !== 'undefined')) return [3 /*break*/, 19];
1515
- _b.label = 15;
1516
- case 15:
1517
- _b.trys.push([15, 18, , 19]);
1518
- discordNotifier = require('@pioneer-platform/pioneer-server/services/discord-notifier.service').discordNotifier;
1519
- if (!(discordNotifier && discordNotifier.isEnabled())) return [3 /*break*/, 17];
1520
- return [4 /*yield*/, discordNotifier.sendRateLimitAlert('CoinCap', status_6, {
1521
- endpoint: '/assets',
1522
- symbol: symbol
1523
- })];
1524
- case 16:
1525
- _b.sent();
1526
- _b.label = 17;
1527
- case 17: return [3 /*break*/, 19];
1528
- case 18:
1529
- importError_3 = _b.sent();
1530
- // Server context not available - running standalone, skip alert
1531
- log.debug(tag, 'Discord notifier not available (standalone mode)');
1532
- return [3 /*break*/, 19];
1533
- case 19: return [3 /*break*/, 21];
1534
- case 20:
1535
- alertError_3 = _b.sent();
1536
- log.debug(tag, 'Failed to send rate limit alert:', alertError_3);
1537
- return [3 /*break*/, 21];
1538
- case 21: return [3 /*break*/, 23];
1539
- case 22:
1540
- log.debug(tag, "CoinCap error for ".concat(symbol, ": ").concat(error_6.message));
1541
- _b.label = 23;
1542
- case 23: return [2 /*return*/, 0];
1543
- case 24: return [2 /*return*/];
1456
+ if (wasRateLimited) {
1457
+ log.warn(tag, "CoinCap rate limit (".concat(status_6, ") for ").concat(symbol));
1458
+ // Note: Rate limit alerting removed (Discord dependency eliminated)
1459
+ }
1460
+ else {
1461
+ log.debug(tag, "CoinCap error for ".concat(symbol, ": ").concat(error_6.message));
1462
+ }
1463
+ return [2 /*return*/, 0];
1464
+ case 14: return [2 /*return*/];
1544
1465
  }
1545
1466
  });
1546
1467
  });
@@ -1,4 +1,3 @@
1
- import { Db } from 'mongodb';
2
1
  export interface APICallLog {
3
2
  apiName: string;
4
3
  endpoint?: string;
@@ -24,7 +23,7 @@ export declare class MetricsLogger {
24
23
  private db;
25
24
  private logsCollection;
26
25
  private enabled;
27
- constructor(db: Db);
26
+ constructor(db: any);
28
27
  /**
29
28
  * Enable/disable logging (for performance testing)
30
29
  */
@@ -53,6 +53,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
53
53
  };
54
54
  Object.defineProperty(exports, "__esModule", { value: true });
55
55
  exports.MetricsLogger = void 0;
56
+ // Types are from default-mongo-v2 via dependency injection
56
57
  var log = require('@pioneer-platform/loggerdog')();
57
58
  var TAG = ' | MetricsLogger | ';
58
59
  var MetricsLogger = /** @class */ (function () {
@@ -1,9 +1,8 @@
1
- import { Db } from 'mongodb';
2
1
  export declare class TokenBucketManager {
3
2
  private buckets;
4
3
  private db;
5
4
  private initialized;
6
- constructor(db: Db);
5
+ constructor(db: any);
7
6
  /**
8
7
  * Initialize all API buckets
9
8
  */
@@ -43,6 +43,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
43
43
  };
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.TokenBucketManager = void 0;
46
+ // Types are from default-mongo-v2 via dependency injection
46
47
  var token_bucket_1 = require("./token-bucket");
47
48
  var log = require('@pioneer-platform/loggerdog')();
48
49
  var TAG = ' | TokenBucketManager | ';
@@ -1,4 +1,3 @@
1
- import { Db } from 'mongodb';
2
1
  export interface TokenBucketConfig {
3
2
  apiName: string;
4
3
  capacity: number;
@@ -33,7 +32,7 @@ export declare class TokenBucket {
33
32
  private cachedTokens;
34
33
  private lastSync;
35
34
  private syncInterval;
36
- constructor(config: TokenBucketConfig, db: Db);
35
+ constructor(config: TokenBucketConfig, db: any);
37
36
  /**
38
37
  * Initialize bucket (call on startup)
39
38
  */
@@ -46,6 +46,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  };
47
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
48
  exports.TokenBucket = void 0;
49
+ // Types are from default-mongo-v2 via dependency injection
49
50
  var log = require('@pioneer-platform/loggerdog')();
50
51
  var TAG = ' | TokenBucket | ';
51
52
  var TokenBucket = /** @class */ (function () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pioneer-platform/markets",
3
- "version": "8.41.0",
3
+ "version": "8.45.1",
4
4
  "main": "./lib/index.js",
5
5
  "types": "./lib/index.d.ts",
6
6
  "dependencies": {
@@ -12,11 +12,11 @@
12
12
  "dotenv": "^8.2.0",
13
13
  "node-schedule": "^2.1.1",
14
14
  "@pioneer-platform/default-mongo-v2": "1.16.0",
15
- "@pioneer-platform/loggerdog": "8.11.0",
16
15
  "@pioneer-platform/default-redis": "8.11.7",
17
- "@pioneer-platform/pioneer-discovery": "8.41.0",
18
- "@pioneer-platform/pioneer-coins": "9.20.0",
19
- "@pioneer-platform/pioneer-types": "8.19.3"
16
+ "@pioneer-platform/loggerdog": "8.11.0",
17
+ "@pioneer-platform/pioneer-types": "8.19.3",
18
+ "@pioneer-platform/pioneer-discovery": "8.45.1",
19
+ "@pioneer-platform/pioneer-coins": "9.20.0"
20
20
  },
21
21
  "devDependencies": {
22
22
  "@types/jest": "^25.2.3",
package/tsconfig.json CHANGED
@@ -2,12 +2,19 @@
2
2
  "compilerOptions": {
3
3
  "target": "es5",
4
4
  "module": "commonjs",
5
- "lib": ["es6", "es2015", "dom"],
5
+ "lib": [
6
+ "es6",
7
+ "es2015",
8
+ "dom"
9
+ ],
6
10
  "declaration": true,
7
11
  "outDir": "lib",
8
12
  "rootDir": "src",
9
13
  "strict": true,
10
- "types": ["node"],
11
- "esModuleInterop": true
14
+ "types": [
15
+ "node"
16
+ ],
17
+ "esModuleInterop": true,
18
+ "skipLibCheck": true
12
19
  }
13
20
  }