@mecanizou/telemetry-hub 1.0.0 → 1.0.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.
Files changed (89) hide show
  1. package/.github/workflows/pull_request.yml +32 -32
  2. package/.github/workflows/release.yml +129 -129
  3. package/.prettierignore +4 -4
  4. package/DOCS_GUIDE.md +151 -0
  5. package/README.md +248 -0
  6. package/dist/check-if-is-working.js +1 -1
  7. package/dist/core/index.d.ts +2 -0
  8. package/dist/core/index.js +6 -0
  9. package/dist/core/logger.d.ts +13 -0
  10. package/dist/core/logger.js +123 -0
  11. package/dist/core/types.d.ts +43 -0
  12. package/dist/core/types.js +3 -0
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.js +2 -2
  15. package/dist/services/index.d.ts +1 -0
  16. package/dist/services/index.js +18 -0
  17. package/dist/services/telemetry/config.d.ts +20 -0
  18. package/dist/services/telemetry/config.js +113 -0
  19. package/dist/services/telemetry/external-service.d.ts +20 -0
  20. package/dist/services/telemetry/external-service.js +69 -0
  21. package/dist/services/telemetry/index.d.ts +3 -0
  22. package/dist/services/telemetry/index.js +20 -0
  23. package/dist/services/telemetry/sync-log-record-processor.d.ts +11 -0
  24. package/dist/services/telemetry/sync-log-record-processor.js +74 -0
  25. package/dist/sst/index.d.ts +1 -0
  26. package/dist/sst/index.js +18 -0
  27. package/dist/sst/middy/index.d.ts +1 -0
  28. package/dist/sst/middy/index.js +18 -0
  29. package/dist/sst/middy/middleware.d.ts +5 -0
  30. package/dist/sst/middy/middleware.js +172 -0
  31. package/dist/sst/telemetry.d.ts +3 -0
  32. package/dist/sst/telemetry.js +111 -0
  33. package/dist/telemetry/core/__tests__/logger-types.test.d.ts +1 -0
  34. package/dist/telemetry/core/__tests__/logger-types.test.js +325 -0
  35. package/dist/telemetry/core/__tests__/logger.test.d.ts +1 -0
  36. package/dist/telemetry/core/__tests__/logger.test.js +337 -0
  37. package/dist/telemetry/core/__tests__/tracer.test.d.ts +1 -0
  38. package/dist/telemetry/core/__tests__/tracer.test.js +330 -0
  39. package/dist/telemetry/core/index.d.ts +4 -0
  40. package/dist/telemetry/core/index.js +8 -0
  41. package/dist/telemetry/core/logger-types.d.ts +43 -0
  42. package/dist/telemetry/core/logger-types.js +3 -0
  43. package/dist/telemetry/core/logger.d.ts +13 -0
  44. package/dist/telemetry/core/logger.js +123 -0
  45. package/dist/telemetry/core/tracer-types.d.ts +50 -0
  46. package/dist/telemetry/core/tracer-types.js +3 -0
  47. package/dist/telemetry/core/tracer.d.ts +10 -0
  48. package/dist/telemetry/core/tracer.js +114 -0
  49. package/dist/telemetry/index.d.ts +3 -0
  50. package/dist/telemetry/index.js +20 -0
  51. package/dist/telemetry/sst/__tests__/telemetry.test.d.ts +1 -0
  52. package/dist/telemetry/sst/__tests__/telemetry.test.js +138 -0
  53. package/dist/telemetry/sst/index.d.ts +1 -0
  54. package/dist/telemetry/sst/index.js +18 -0
  55. package/dist/telemetry/sst/middy/index.d.ts +1 -0
  56. package/dist/telemetry/sst/middy/index.js +18 -0
  57. package/dist/telemetry/sst/middy/middleware.d.ts +5 -0
  58. package/dist/telemetry/sst/middy/middleware.js +157 -0
  59. package/dist/telemetry/sst/telemetry.d.ts +4 -0
  60. package/dist/telemetry/sst/telemetry.js +121 -0
  61. package/dist/telemetry/tsed/__tests__/config.test.d.ts +1 -0
  62. package/dist/telemetry/tsed/__tests__/config.test.js +146 -0
  63. package/dist/telemetry/tsed/__tests__/service.test.d.ts +1 -0
  64. package/dist/telemetry/tsed/__tests__/service.test.js +63 -0
  65. package/dist/telemetry/tsed/config.d.ts +26 -0
  66. package/dist/telemetry/tsed/config.js +166 -0
  67. package/dist/telemetry/tsed/index.d.ts +4 -0
  68. package/dist/telemetry/tsed/index.js +21 -0
  69. package/dist/telemetry/tsed/log-telemetry.d.ts +1 -0
  70. package/dist/telemetry/tsed/log-telemetry.js +196 -0
  71. package/dist/telemetry/tsed/service.d.ts +26 -0
  72. package/dist/telemetry/tsed/service.js +150 -0
  73. package/dist/telemetry/tsed/sync-log-record-processor.d.ts +11 -0
  74. package/dist/telemetry/tsed/sync-log-record-processor.js +74 -0
  75. package/dist/telemetry.d.ts +1 -0
  76. package/dist/telemetry.js +81 -0
  77. package/dist/tsed/config.d.ts +20 -0
  78. package/dist/tsed/config.js +113 -0
  79. package/dist/tsed/index.d.ts +3 -0
  80. package/dist/tsed/index.js +20 -0
  81. package/dist/tsed/log-telemetry.d.ts +1 -0
  82. package/dist/tsed/log-telemetry.js +81 -0
  83. package/dist/tsed/service.d.ts +24 -0
  84. package/dist/tsed/service.js +131 -0
  85. package/dist/tsed/sync-log-record-processor.d.ts +11 -0
  86. package/dist/tsed/sync-log-record-processor.js +74 -0
  87. package/package.json +72 -56
  88. package/release.config.js +23 -23
  89. package/vitest.config.ts +22 -0
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TelemetryProvider = void 0;
13
+ const sdk_logs_1 = require("@opentelemetry/sdk-logs");
14
+ const exporter_logs_otlp_http_1 = require("@opentelemetry/exporter-logs-otlp-http");
15
+ const resources_1 = require("@opentelemetry/resources");
16
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
17
+ const sync_log_record_processor_1 = require("./sync-log-record-processor");
18
+ class TelemetryProvider {
19
+ constructor() {
20
+ this.loggerProvider = null;
21
+ this.initialized = false;
22
+ if (!this.initialized && process.env.OTEL_EXPORTER_OTLP_ENDPOINT) {
23
+ const serviceName = process.env.SERVICE_NAME || 'unknown-service';
24
+ const serviceStage = process.env.STAGE;
25
+ this.initialize({
26
+ endpoint: process.env.OTEL_EXPORTER_OTLP_ENDPOINT || '',
27
+ username: process.env.OTEL_EXPORTER_OTLP_USER || '',
28
+ password: process.env.OTEL_EXPORTER_OTLP_PASS || '',
29
+ serviceName: `${serviceName}-${serviceStage}`,
30
+ serviceVersion: process.env.npm_package_version || '1.0.0',
31
+ enabled: process.env.OTEL_ENABLED !== 'false',
32
+ });
33
+ }
34
+ }
35
+ initialize(config) {
36
+ if (this.initialized) {
37
+ return;
38
+ }
39
+ if (config.enabled === false) {
40
+ console.log('[Telemetry] OpenTelemetry is disabled');
41
+ return;
42
+ }
43
+ if (!config.endpoint || !config.username || !config.password) {
44
+ if (process.env.NODE_ENV !== 'test' &&
45
+ process.env.OTEL_EXPORTER_OTLP_ENDPOINT) {
46
+ console.error('[Telemetry] Missing required configuration');
47
+ }
48
+ return;
49
+ }
50
+ try {
51
+ const resource = (0, resources_1.resourceFromAttributes)({
52
+ [semantic_conventions_1.ATTR_SERVICE_NAME]: config.serviceName || 'unknown-service',
53
+ [semantic_conventions_1.ATTR_SERVICE_VERSION]: config.serviceVersion || '1.0.0',
54
+ });
55
+ const logExporter = new exporter_logs_otlp_http_1.OTLPLogExporter({
56
+ url: `${config.endpoint}/v1/logs`,
57
+ headers: {
58
+ Authorization: `Basic ${Buffer.from(`${config.username}:${config.password}`).toString('base64')}`,
59
+ },
60
+ timeoutMillis: 5000,
61
+ concurrencyLimit: 1,
62
+ });
63
+ const syncProcessor = new sync_log_record_processor_1.SyncLogRecordProcessor(logExporter);
64
+ this.loggerProvider = new sdk_logs_1.LoggerProvider({
65
+ resource,
66
+ processors: [syncProcessor],
67
+ });
68
+ this.initialized = true;
69
+ console.log('[Telemetry] OpenTelemetry initialized successfully');
70
+ }
71
+ catch (error) {
72
+ console.error('[Telemetry] Failed to initialize OpenTelemetry:', error);
73
+ }
74
+ }
75
+ getLoggerProvider() {
76
+ return this.loggerProvider;
77
+ }
78
+ isInitialized() {
79
+ return this.initialized;
80
+ }
81
+ forceFlush() {
82
+ return __awaiter(this, void 0, void 0, function* () {
83
+ if (!this.loggerProvider) {
84
+ console.warn('[Telemetry] forceFlush called but loggerProvider is null');
85
+ return;
86
+ }
87
+ try {
88
+ const startTime = Date.now();
89
+ console.log('[Telemetry] Starting forceFlush...');
90
+ yield this.loggerProvider.forceFlush();
91
+ const duration = Date.now() - startTime;
92
+ console.log(`[Telemetry] forceFlush completed successfully in ${duration}ms`);
93
+ }
94
+ catch (error) {
95
+ console.error('[Telemetry] Failed to force flush logs:', error);
96
+ throw error;
97
+ }
98
+ });
99
+ }
100
+ shutdown() {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ if (this.loggerProvider) {
103
+ yield this.loggerProvider.shutdown();
104
+ this.initialized = false;
105
+ }
106
+ });
107
+ }
108
+ $onDestroy() {
109
+ return this.shutdown();
110
+ }
111
+ }
112
+ exports.TelemetryProvider = TelemetryProvider;
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3RlbGVtZXRyeS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQXlEO0FBQ3pELG9GQUF5RTtBQUN6RSx3REFBa0U7QUFDbEUsOEVBRzZDO0FBQzdDLDJFQUFxRTtBQVdyRSxNQUFhLGlCQUFpQjtJQUk1QjtRQUhRLG1CQUFjLEdBQTBCLElBQUksQ0FBQztRQUM3QyxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUkxQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFDakUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksaUJBQWlCLENBQUM7WUFDbEUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDdkMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsSUFBSSxFQUFFO2dCQUN2RCxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFO2dCQUNuRCxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsSUFBSSxFQUFFO2dCQUNuRCxXQUFXLEVBQUUsR0FBRyxXQUFXLElBQUksWUFBWSxFQUFFO2dCQUM3QyxjQUFjLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxPQUFPO2dCQUMxRCxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEtBQUssT0FBTzthQUM5QyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxNQUF1QjtRQUN2QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNy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O0tBQUE7SUFFWSxRQUFROztZQUNuQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztLQUFBO0lBRUQsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLENBQUM7Q0FDRjtBQTFIRCw4Q0EwSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMb2dnZXJQcm92aWRlciB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzJztcclxuaW1wb3J0IHsgT1RMUExvZ0V4cG9ydGVyIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWh0dHAnO1xyXG5pbXBvcnQgeyByZXNvdXJjZUZyb21BdHRyaWJ1dGVzIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvcmVzb3VyY2VzJztcclxuaW1wb3J0IHtcclxuICBBVFRSX1NFUlZJQ0VfTkFNRSxcclxuICBBVFRSX1NFUlZJQ0VfVkVSU0lPTixcclxufSBmcm9tICdAb3BlbnRlbGVtZXRyeS9zZW1hbnRpYy1jb252ZW50aW9ucyc7XHJcbmltcG9ydCB7IFN5bmNMb2dSZWNvcmRQcm9jZXNzb3IgfSBmcm9tICcuL3N5bmMtbG9nLXJlY29yZC1wcm9jZXNzb3InO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUZWxlbWV0cnlDb25maWcge1xyXG4gIGVuZHBvaW50OiBzdHJpbmc7XHJcbiAgdXNlcm5hbWU6IHN0cmluZztcclxuICBwYXNzd29yZDogc3RyaW5nO1xyXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xyXG4gIHNlcnZpY2VWZXJzaW9uPzogc3RyaW5nO1xyXG4gIGVuYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGVsZW1ldHJ5UHJvdmlkZXIge1xyXG4gIHByaXZhdGUgbG9nZ2VyUHJvdmlkZXI6IExvZ2dlclByb3ZpZGVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIC8vIEF1dG8taW5pdGlhbGl6ZSBzeW5jaHJvbm91c2x5IHdpdGggZW52aXJvbm1lbnQgdmFyaWFibGVzXHJcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQgJiYgcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UKSB7XHJcbiAgICAgIGNvbnN0IHNlcnZpY2VOYW1lID0gcHJvY2Vzcy5lbnYuU0VSVklDRV9OQU1FIHx8ICd1bmtub3duLXNlcnZpY2UnO1xyXG4gICAgICBjb25zdCBzZXJ2aWNlU3RhZ2UgPSBwcm9jZXNzLmVudi5TVEFHRTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplKHtcclxuICAgICAgICBlbmRwb2ludDogcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX0VORFBPSU5UIHx8ICcnLFxyXG4gICAgICAgIHVzZXJuYW1lOiBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfVVNFUiB8fCAnJyxcclxuICAgICAgICBwYXNzd29yZDogcHJvY2Vzcy5lbnYuT1RFTF9FWFBPUlRFUl9PVExQX1BBU1MgfHwgJycsXHJcbiAgICAgICAgc2VydmljZU5hbWU6IGAke3NlcnZpY2VOYW1lfS0ke3NlcnZpY2VTdGFnZX1gLFxyXG4gICAgICAgIHNlcnZpY2VWZXJzaW9uOiBwcm9jZXNzLmVudi5ucG1fcGFja2FnZV92ZXJzaW9uIHx8ICcxLjAuMCcsXHJcbiAgICAgICAgZW5hYmxlZDogcHJvY2Vzcy5lbnYuT1RFTF9FTkFCTEVEICE9PSAnZmFsc2UnLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0aWFsaXplKGNvbmZpZzogVGVsZW1ldHJ5Q29uZmlnKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZy5lbmFibGVkID09PSBmYWxzZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnW1RlbGVtZXRyeV0gT3BlblRlbGVtZXRyeSBpcyBkaXNhYmxlZCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFjb25maWcuZW5kcG9pbnQgfHwgIWNvbmZpZy51c2VybmFtZSB8fCAhY29uZmlnLnBhc3N3b3JkKSB7XHJcbiAgICAgIC8vIE7Do28gbG9nYXIgZXJybyBzZSBlc3RpdmVybW9zIGVtIG1vZG8gZGUgYnVpbGRcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiZcclxuICAgICAgICBwcm9jZXNzLmVudi5PVEVMX0VYUE9SVEVSX09UTFBfRU5EUE9JTlRcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignW1RlbGVtZXRyeV0gTWlzc2luZyByZXF1aXJlZCBjb25maWd1cmF0aW9uJyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIC8vIENyZWF0ZSByZXNvdXJjZSB3aXRoIHNlcnZpY2UgaW5mb3JtYXRpb25cclxuICAgICAgY29uc3QgcmVzb3VyY2UgPSByZXNvdXJjZUZyb21BdHRyaWJ1dGVzKHtcclxuICAgICAgICBbQVRUUl9TRVJWSUNFX05BTUVdOiBjb25maWcuc2VydmljZU5hbWUgfHwgJ3Vua25vd24tc2VydmljZScsXHJcbiAgICAgICAgW0FUVFJfU0VSVklDRV9WRVJTSU9OXTogY29uZmlnLnNlcnZpY2VWZXJzaW9uIHx8ICcxLjAuMCcsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gQ3JlYXRlIE9UTFAgZXhwb3J0ZXIgd2l0aCBhdXRoZW50aWNhdGlvbiBhbmQgdGltZW91dCBjb25maWd1cmF0aW9uXHJcbiAgICAgIGNvbnN0IGxvZ0V4cG9ydGVyID0gbmV3IE9UTFBMb2dFeHBvcnRlcih7XHJcbiAgICAgICAgdXJsOiBgJHtjb25maWcuZW5kcG9pbnR9L3YxL2xvZ3NgLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgIEF1dGhvcml6YXRpb246IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke2NvbmZpZy51c2VybmFtZX06JHtjb25maWcucGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aW1lb3V0TWlsbGlzOiA1MDAwLCAvLyA1IHNlY29uZCB0aW1lb3V0IGZvciBleHBvcnRzXHJcbiAgICAgICAgY29uY3VycmVuY3lMaW1pdDogMSwgLy8gUHJvY2VzcyBvbmUgZXhwb3J0IGF0IGEgdGltZVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIFVzZSBjdXN0b20gU3luY0xvZ1JlY29yZFByb2Nlc3NvciBpbnN0ZWFkIG9mIFNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvclxyXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYXN5bmMgSFRUUCBleHBvcnQgaXMgcHJvcGVybHkgYXdhaXRlZCBpbiBMYW1iZGFcclxuICAgICAgLy8gZW52aXJvbm1lbnRzIHdoZXJlIGV4ZWN1dGlvbiBjb250ZXh0IGZyZWV6ZXMgYWZ0ZXIgaGFuZGxlciByZXR1cm5zXHJcbiAgICAgIGNvbnN0IHN5bmNQcm9jZXNzb3IgPSBuZXcgU3luY0xvZ1JlY29yZFByb2Nlc3Nvcihsb2dFeHBvcnRlcik7XHJcblxyXG4gICAgICAvLyBDcmVhdGUgbG9nZ2VyIHByb3ZpZGVyIHdpdGggcmVzb3VyY2UgYW5kIHByb2Nlc3NvcnNcclxuICAgICAgdGhpcy5sb2dnZXJQcm92aWRlciA9IG5ldyBMb2dnZXJQcm92aWRlcih7XHJcbiAgICAgICAgcmVzb3VyY2UsXHJcbiAgICAgICAgcHJvY2Vzc29yczogW3N5bmNQcm9jZXNzb3JdLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICBjb25zb2xlLmxvZygnW1RlbGVtZXRyeV0gT3BlblRlbGVtZXRyeSBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHknKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUZWxlbWV0cnldIEZhaWxlZCB0byBpbml0aWFsaXplIE9wZW5UZWxlbWV0cnk6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldExvZ2dlclByb3ZpZGVyKCk6IExvZ2dlclByb3ZpZGVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2dnZXJQcm92aWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5pdGlhbGl6ZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JjZSBmbHVzaCBhbGwgcGVuZGluZyBsb2dzIHRvIGVuc3VyZSB0aGV5IGFyZSBzZW50IGJlZm9yZSBMYW1iZGEgZnJlZXplc1xyXG4gICAqIFRoaXMgaXMgY3JpdGljYWwgaW4gQVdTIExhbWJkYSBlbnZpcm9ubWVudHMgd2hlcmUgZXhlY3V0aW9uIGNvbnRleHQgZnJlZXplc1xyXG4gICAqIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBoYW5kbGVyIHJldHVybnMsIHBvdGVudGlhbGx5IGJlZm9yZSBhc3luYyBIVFRQIHJlcXVlc3RzIGNvbXBsZXRlXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIGZvcmNlRmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMubG9nZ2VyUHJvdmlkZXIpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdbVGVsZW1ldHJ5XSBmb3JjZUZsdXNoIGNhbGxlZCBidXQgbG9nZ2VyUHJvdmlkZXIgaXMgbnVsbCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcclxuICAgICAgY29uc29sZS5sb2coJ1tUZWxlbWV0cnldIFN0YXJ0aW5nIGZvcmNlRmx1c2guLi4nKTtcclxuXHJcbiAgICAgIC8vIGZvcmNlRmx1c2ggZW5zdXJlcyBhbGwgcGVuZGluZyBsb2dzIGFyZSBleHBvcnRlZCBpbW1lZGlhdGVseVxyXG4gICAgICBhd2FpdCB0aGlzLmxvZ2dlclByb3ZpZGVyLmZvcmNlRmx1c2goKTtcclxuXHJcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgYFtUZWxlbWV0cnldIGZvcmNlRmx1c2ggY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBpbiAke2R1cmF0aW9ufW1zYFxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignW1RlbGVtZXRyeV0gRmFpbGVkIHRvIGZvcmNlIGZsdXNoIGxvZ3M6JywgZXJyb3IpO1xyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLmxvZ2dlclByb3ZpZGVyKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubG9nZ2VyUHJvdmlkZXIuc2h1dGRvd24oKTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgJG9uRGVzdHJveSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLnNodXRkb3duKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { TelemetryProvider } from './config';
2
+ export interface ErrorLogData {
3
+ error: Error;
4
+ context?: Record<string, any>;
5
+ accountUserUid?: string;
6
+ accountUid?: string;
7
+ requestId?: string;
8
+ endpoint?: string;
9
+ method?: string;
10
+ controller?: string;
11
+ controllerMethod?: string;
12
+ applicationUid?: string;
13
+ awsRequestId?: string;
14
+ }
15
+ export declare class TelemetryService {
16
+ private readonly telemetryProvider;
17
+ constructor(telemetryProvider: TelemetryProvider);
18
+ logError(data: ErrorLogData): Promise<void>;
19
+ logException(error: Error, context?: Record<string, any>): Promise<void>;
20
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TelemetryService = void 0;
13
+ const api_logs_1 = require("@opentelemetry/api-logs");
14
+ class TelemetryService {
15
+ constructor(telemetryProvider) {
16
+ this.telemetryProvider = telemetryProvider;
17
+ }
18
+ logError(data) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ if (!this.telemetryProvider.isInitialized()) {
21
+ return;
22
+ }
23
+ const loggerProvider = this.telemetryProvider.getLoggerProvider();
24
+ if (!loggerProvider) {
25
+ return;
26
+ }
27
+ try {
28
+ const logger = loggerProvider.getLogger('cart-service-error-logger', '1.0.0');
29
+ const logRecord = {
30
+ severityNumber: api_logs_1.SeverityNumber.ERROR,
31
+ severityText: 'ERROR',
32
+ body: data.error.message,
33
+ attributes: {
34
+ 'error.type': data.error.name,
35
+ 'error.message': data.error.message,
36
+ 'error.stack': data.error.stack || '',
37
+ 'service.name': 'cart-service',
38
+ 'accountUser.uid': data.accountUserUid || 'not provided',
39
+ 'account.uid': data.accountUid || 'not provided',
40
+ 'application.uid': data.applicationUid || 'not provided',
41
+ 'request.id': data.requestId || 'not provided',
42
+ 'aws.request.id': data.awsRequestId || 'not provided',
43
+ 'http.endpoint': data.endpoint || 'not provided',
44
+ 'http.method': data.method || 'not provided',
45
+ 'controller.name': data.controller || 'not provided',
46
+ 'controller.method': data.controllerMethod || 'not provided',
47
+ 'error.context': JSON.stringify(data.context) || 'not provided',
48
+ timestamp: new Date().toISOString(),
49
+ },
50
+ };
51
+ logger.emit(logRecord);
52
+ yield this.telemetryProvider.forceFlush();
53
+ }
54
+ catch (error) {
55
+ console.error('[TelemetryService] Failed to log error:', error);
56
+ }
57
+ });
58
+ }
59
+ logException(error, context) {
60
+ return __awaiter(this, void 0, void 0, function* () {
61
+ yield this.logError({
62
+ error,
63
+ context,
64
+ });
65
+ });
66
+ }
67
+ }
68
+ exports.TelemetryService = TelemetryService;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90ZWxlbWV0cnkvZXh0ZXJuYWwtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzREFBeUQ7QUFpQnpELE1BQWEsZ0JBQWdCO0lBQzNCLFlBQTZCLGlCQUFvQztRQUFwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO0lBQUcsQ0FBQztJQUV4RCxRQUFRLENBQUMsSUFBa0I7O1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztnQkFDNUMsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNsRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3BCLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQ3JDLDJCQUEyQixFQUMzQixPQUFPLENBQ1IsQ0FBQztnQkFFRixNQUFNLFNBQVMsR0FBRztvQkFDaEIsY0FBYyxFQUFFLHlCQUFjLENBQUMsS0FBSztvQkFDcEMsWUFBWSxFQUFFLE9BQU87b0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87b0JBQ3hCLFVBQVUsRUFBRTt3QkFDVixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO3dCQUM3QixlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPO3dCQUNuQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRTt3QkFDckMsY0FBYyxFQUFFLGNBQWM7d0JBQzlCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxjQUFjLElBQUksY0FBYzt3QkFDeEQsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksY0FBYzt3QkFDaEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxjQUFjO3dCQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxjQUFjO3dCQUM5QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsWUFBWSxJQUFJLGNBQWM7d0JBQ3JELGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLGNBQWM7d0JBQ2hELGFBQWEsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLGNBQWM7d0JBQzVDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksY0FBYzt3QkFDcEQsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLGNBQWM7d0JBQzVELGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxjQUFjO3dCQUMvRCxTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7cUJBQ3BDO2lCQUNGLENBQUM7Z0JBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFLdkIsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUMsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsRSxDQUFDO1FBQ0gsQ0FBQztLQUFBO0lBRVksWUFBWSxDQUN2QixLQUFZLEVBQ1osT0FBNkI7O1lBRTdCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDbEIsS0FBSztnQkFDTCxPQUFPO2FBQ1IsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0NBQ0Y7QUEvREQsNENBK0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2V2ZXJpdHlOdW1iZXIgfSBmcm9tICdAb3BlbnRlbGVtZXRyeS9hcGktbG9ncyc7XHJcbmltcG9ydCB7IFRlbGVtZXRyeVByb3ZpZGVyIH0gZnJvbSAnLi9jb25maWcnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFcnJvckxvZ0RhdGEge1xyXG4gIGVycm9yOiBFcnJvcjtcclxuICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PjtcclxuICBhY2NvdW50VXNlclVpZD86IHN0cmluZztcclxuICBhY2NvdW50VWlkPzogc3RyaW5nO1xyXG4gIHJlcXVlc3RJZD86IHN0cmluZztcclxuICBlbmRwb2ludD86IHN0cmluZztcclxuICBtZXRob2Q/OiBzdHJpbmc7XHJcbiAgY29udHJvbGxlcj86IHN0cmluZztcclxuICBjb250cm9sbGVyTWV0aG9kPzogc3RyaW5nO1xyXG4gIGFwcGxpY2F0aW9uVWlkPzogc3RyaW5nO1xyXG4gIGF3c1JlcXVlc3RJZD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFRlbGVtZXRyeVNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdGVsZW1ldHJ5UHJvdmlkZXI6IFRlbGVtZXRyeVByb3ZpZGVyKSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9nRXJyb3IoZGF0YTogRXJyb3JMb2dEYXRhKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMudGVsZW1ldHJ5UHJvdmlkZXIuaXNJbml0aWFsaXplZCgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsb2dnZXJQcm92aWRlciA9IHRoaXMudGVsZW1ldHJ5UHJvdmlkZXIuZ2V0TG9nZ2VyUHJvdmlkZXIoKTtcclxuICAgIGlmICghbG9nZ2VyUHJvdmlkZXIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGxvZ2dlciA9IGxvZ2dlclByb3ZpZGVyLmdldExvZ2dlcihcclxuICAgICAgICAnY2FydC1zZXJ2aWNlLWVycm9yLWxvZ2dlcicsXHJcbiAgICAgICAgJzEuMC4wJ1xyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgbG9nUmVjb3JkID0ge1xyXG4gICAgICAgIHNldmVyaXR5TnVtYmVyOiBTZXZlcml0eU51bWJlci5FUlJPUixcclxuICAgICAgICBzZXZlcml0eVRleHQ6ICdFUlJPUicsXHJcbiAgICAgICAgYm9keTogZGF0YS5lcnJvci5tZXNzYWdlLFxyXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICdlcnJvci50eXBlJzogZGF0YS5lcnJvci5uYW1lLFxyXG4gICAgICAgICAgJ2Vycm9yLm1lc3NhZ2UnOiBkYXRhLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAnZXJyb3Iuc3RhY2snOiBkYXRhLmVycm9yLnN0YWNrIHx8ICcnLFxyXG4gICAgICAgICAgJ3NlcnZpY2UubmFtZSc6ICdjYXJ0LXNlcnZpY2UnLFxyXG4gICAgICAgICAgJ2FjY291bnRVc2VyLnVpZCc6IGRhdGEuYWNjb3VudFVzZXJVaWQgfHwgJ25vdCBwcm92aWRlZCcsXHJcbiAgICAgICAgICAnYWNjb3VudC51aWQnOiBkYXRhLmFjY291bnRVaWQgfHwgJ25vdCBwcm92aWRlZCcsXHJcbiAgICAgICAgICAnYXBwbGljYXRpb24udWlkJzogZGF0YS5hcHBsaWNhdGlvblVpZCB8fCAnbm90IHByb3ZpZGVkJyxcclxuICAgICAgICAgICdyZXF1ZXN0LmlkJzogZGF0YS5yZXF1ZXN0SWQgfHwgJ25vdCBwcm92aWRlZCcsXHJcbiAgICAgICAgICAnYXdzLnJlcXVlc3QuaWQnOiBkYXRhLmF3c1JlcXVlc3RJZCB8fCAnbm90IHByb3ZpZGVkJyxcclxuICAgICAgICAgICdodHRwLmVuZHBvaW50JzogZGF0YS5lbmRwb2ludCB8fCAnbm90IHByb3ZpZGVkJyxcclxuICAgICAgICAgICdodHRwLm1ldGhvZCc6IGRhdGEubWV0aG9kIHx8ICdub3QgcHJvdmlkZWQnLFxyXG4gICAgICAgICAgJ2NvbnRyb2xsZXIubmFtZSc6IGRhdGEuY29udHJvbGxlciB8fCAnbm90IHByb3ZpZGVkJyxcclxuICAgICAgICAgICdjb250cm9sbGVyLm1ldGhvZCc6IGRhdGEuY29udHJvbGxlck1ldGhvZCB8fCAnbm90IHByb3ZpZGVkJyxcclxuICAgICAgICAgICdlcnJvci5jb250ZXh0JzogSlNPTi5zdHJpbmdpZnkoZGF0YS5jb250ZXh0KSB8fCAnbm90IHByb3ZpZGVkJyxcclxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBsb2dnZXIuZW1pdChsb2dSZWNvcmQpO1xyXG5cclxuICAgICAgLy8gQ1JJVElDQUw6IEZvcmNlIGZsdXNoIHRvIGVuc3VyZSBsb2cgaXMgc2VudCBiZWZvcmUgTGFtYmRhIGZyZWV6ZXNcclxuICAgICAgLy8gV2l0aG91dCB0aGlzLCB0aGUgYXN5bmMgSFRUUCByZXF1ZXN0IG1heSBub3QgY29tcGxldGUgYmVmb3JlXHJcbiAgICAgIC8vIHRoZSBMYW1iZGEgZXhlY3V0aW9uIGNvbnRleHQgZnJlZXplc1xyXG4gICAgICBhd2FpdCB0aGlzLnRlbGVtZXRyeVByb3ZpZGVyLmZvcmNlRmx1c2goKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUZWxlbWV0cnlTZXJ2aWNlXSBGYWlsZWQgdG8gbG9nIGVycm9yOicsIGVycm9yKTtcclxuICAgICAgLy8gRG9uJ3QgcmUtdGhyb3cgdG8gYXZvaWQgYnJlYWtpbmcgdGhlIGFwcGxpY2F0aW9uIGZsb3dcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2dFeGNlcHRpb24oXHJcbiAgICBlcnJvcjogRXJyb3IsXHJcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgYW55PlxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgdGhpcy5sb2dFcnJvcih7XHJcbiAgICAgIGVycm9yLFxyXG4gICAgICBjb250ZXh0LFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './config';
2
+ export * from './external-service';
3
+ export * from '../../telemetry';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./config"), exports);
18
+ __exportStar(require("./external-service"), exports);
19
+ __exportStar(require("../../telemetry"), exports);
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvdGVsZW1ldHJ5L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIscURBQW1DO0FBQ25DLGtEQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29uZmlnJztcclxuZXhwb3J0ICogZnJvbSAnLi9leHRlcm5hbC1zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi4vLi4vdGVsZW1ldHJ5JztcclxuIl19
@@ -0,0 +1,11 @@
1
+ import { LogRecordProcessor, ReadableLogRecord } from '@opentelemetry/sdk-logs';
2
+ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
3
+ import { Context } from '@opentelemetry/api';
4
+ export declare class SyncLogRecordProcessor implements LogRecordProcessor {
5
+ private readonly exporter;
6
+ private readonly pendingExports;
7
+ constructor(exporter: OTLPLogExporter);
8
+ onEmit(logRecord: ReadableLogRecord, _context?: Context): void;
9
+ forceFlush(): Promise<void>;
10
+ shutdown(): Promise<void>;
11
+ }
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SyncLogRecordProcessor = void 0;
13
+ class SyncLogRecordProcessor {
14
+ constructor(exporter) {
15
+ this.pendingExports = [];
16
+ this.exporter = exporter;
17
+ }
18
+ onEmit(logRecord, _context) {
19
+ const exportPromise = new Promise((resolve, reject) => {
20
+ this.exporter.export([logRecord], (result) => {
21
+ if (result.code === 0) {
22
+ resolve();
23
+ }
24
+ else {
25
+ console.error('[SyncLogRecordProcessor] Export failed:', result.error);
26
+ reject(result.error instanceof Error
27
+ ? result.error
28
+ : new Error(String(result.error)));
29
+ }
30
+ });
31
+ })
32
+ .then(() => {
33
+ const index = this.pendingExports.indexOf(exportPromise);
34
+ if (index > -1) {
35
+ this.pendingExports.splice(index, 1);
36
+ }
37
+ })
38
+ .catch((error) => {
39
+ console.error('[SyncLogRecordProcessor] Export error:', error);
40
+ const index = this.pendingExports.indexOf(exportPromise);
41
+ if (index > -1) {
42
+ this.pendingExports.splice(index, 1);
43
+ }
44
+ });
45
+ this.pendingExports.push(exportPromise);
46
+ }
47
+ forceFlush() {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ console.log(`[SyncLogRecordProcessor] forceFlush called with ${this.pendingExports.length} pending exports`);
50
+ if (this.pendingExports.length === 0) {
51
+ console.log('[SyncLogRecordProcessor] No pending exports to flush');
52
+ return;
53
+ }
54
+ try {
55
+ yield Promise.all(this.pendingExports);
56
+ console.log('[SyncLogRecordProcessor] All pending exports completed');
57
+ }
58
+ catch (error) {
59
+ console.error('[SyncLogRecordProcessor] Error during forceFlush:', error);
60
+ throw error;
61
+ }
62
+ });
63
+ }
64
+ shutdown() {
65
+ return __awaiter(this, void 0, void 0, function* () {
66
+ console.log('[SyncLogRecordProcessor] Shutting down...');
67
+ yield this.forceFlush();
68
+ yield this.exporter.shutdown();
69
+ console.log('[SyncLogRecordProcessor] Shutdown complete');
70
+ });
71
+ }
72
+ }
73
+ exports.SyncLogRecordProcessor = SyncLogRecordProcessor;
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1sb2ctcmVjb3JkLXByb2Nlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy90ZWxlbWV0cnkvc3luYy1sb2ctcmVjb3JkLXByb2Nlc3Nvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFZQSxNQUFhLHNCQUFzQjtJQUlqQyxZQUFZLFFBQXlCO1FBRnBCLG1CQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUdwRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQTRCLEVBQUUsUUFBa0I7UUFJckQsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUMzQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUM7cUJBQU0sQ0FBQztvQkFDTixPQUFPLENBQUMsS0FBSyxDQUNYLHlDQUF5QyxFQUN6QyxNQUFNLENBQUMsS0FBSyxDQUNiLENBQUM7b0JBQ0YsTUFBTSxDQUNKLE1BQU0sQ0FBQyxLQUFLLFlBQVksS0FBSzt3QkFDM0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO3dCQUNkLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3BDLENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDO2FBQ0MsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNULE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFjLEVBQUUsRUFBRTtZQUN4QixPQUFPLENBQUMsS0FBSyxDQUFDLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3pELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFSyxVQUFVOztZQUNkLE9BQU8sQ0FBQyxHQUFHLENBQ1QsbURBQW1ELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxrQkFBa0IsQ0FDaEcsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztnQkFDcEUsT0FBTztZQUNULENBQUM7WUFFRCxJQUFJLENBQUM7Z0JBRUgsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsbURBQW1ELEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzFFLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7S0FBQTtJQUVLLFFBQVE7O1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7UUFDNUQsQ0FBQztLQUFBO0NBQ0Y7QUF4RUQsd0RBd0VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nUmVjb3JkUHJvY2Vzc29yLCBSZWFkYWJsZUxvZ1JlY29yZCB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L3Nkay1sb2dzJztcclxuaW1wb3J0IHsgT1RMUExvZ0V4cG9ydGVyIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvZXhwb3J0ZXItbG9ncy1vdGxwLWh0dHAnO1xyXG5pbXBvcnQgeyBDb250ZXh0IH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcclxuXHJcbi8qKlxyXG4gKiBDdXN0b20gTG9nUmVjb3JkUHJvY2Vzc29yIHRoYXQgZW5zdXJlcyBzeW5jaHJvbm91cyBleHBvcnQgZm9yIEFXUyBMYW1iZGFcclxuICpcclxuICogVGhpcyBwcm9jZXNzb3Igd3JhcHMgdGhlIE9UTFAgZXhwb3J0ZXIgYW5kIGVuc3VyZXMgdGhhdCBsb2dzIGFyZSBhY3R1YWxseVxyXG4gKiBleHBvcnRlZCBzeW5jaHJvbm91c2x5IGJ5IGltbWVkaWF0ZWx5IGNhbGxpbmcgZXhwb3J0KCkgYW5kIHdhaXRpbmcgZm9yIGl0XHJcbiAqIHRvIGNvbXBsZXRlLCByYXRoZXIgdGhhbiByZWx5aW5nIG9uIFNpbXBsZUxvZ1JlY29yZFByb2Nlc3NvciB3aGljaCBtYXkgbm90XHJcbiAqIHByb3Blcmx5IGF3YWl0IHRoZSBhc3luYyBIVFRQIHJlcXVlc3QgaW4gTGFtYmRhIGVudmlyb25tZW50cy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBTeW5jTG9nUmVjb3JkUHJvY2Vzc29yIGltcGxlbWVudHMgTG9nUmVjb3JkUHJvY2Vzc29yIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGV4cG9ydGVyOiBPVExQTG9nRXhwb3J0ZXI7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBwZW5kaW5nRXhwb3J0czogUHJvbWlzZTx2b2lkPltdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKGV4cG9ydGVyOiBPVExQTG9nRXhwb3J0ZXIpIHtcclxuICAgIHRoaXMuZXhwb3J0ZXIgPSBleHBvcnRlcjtcclxuICB9XHJcblxyXG4gIG9uRW1pdChsb2dSZWNvcmQ6IFJlYWRhYmxlTG9nUmVjb3JkLCBfY29udGV4dD86IENvbnRleHQpOiB2b2lkIHtcclxuICAgIC8vIEV4cG9ydCBpbW1lZGlhdGVseSBhbmQgdHJhY2sgdGhlIHByb21pc2VcclxuICAgIC8vIFRoZSBleHBvcnQgbWV0aG9kIHJldHVybnMgdm9pZCwgYnV0IGludGVybmFsbHkgdHJpZ2dlcnMgYXN5bmMgSFRUUCByZXF1ZXN0XHJcbiAgICAvLyBXZSBuZWVkIHRvIHdyYXAgaXQgdG8gdHJhY2sgY29tcGxldGlvblxyXG4gICAgY29uc3QgZXhwb3J0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5leHBvcnRlci5leHBvcnQoW2xvZ1JlY29yZF0sIChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LmNvZGUgPT09IDApIHtcclxuICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgJ1tTeW5jTG9nUmVjb3JkUHJvY2Vzc29yXSBFeHBvcnQgZmFpbGVkOicsXHJcbiAgICAgICAgICAgIHJlc3VsdC5lcnJvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHJlamVjdChcclxuICAgICAgICAgICAgcmVzdWx0LmVycm9yIGluc3RhbmNlb2YgRXJyb3JcclxuICAgICAgICAgICAgICA/IHJlc3VsdC5lcnJvclxyXG4gICAgICAgICAgICAgIDogbmV3IEVycm9yKFN0cmluZyhyZXN1bHQuZXJyb3IpKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSlcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wZW5kaW5nRXhwb3J0cy5pbmRleE9mKGV4cG9ydFByb21pc2UpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnBlbmRpbmdFeHBvcnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignW1N5bmNMb2dSZWNvcmRQcm9jZXNzb3JdIEV4cG9ydCBlcnJvcjonLCBlcnJvcik7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBlbmRpbmdFeHBvcnRzLmluZGV4T2YoZXhwb3J0UHJvbWlzZSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ0V4cG9ydHMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGVuZGluZ0V4cG9ydHMucHVzaChleHBvcnRQcm9taXNlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGZvcmNlRmx1c2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zb2xlLmxvZyhcclxuICAgICAgYFtTeW5jTG9nUmVjb3JkUHJvY2Vzc29yXSBmb3JjZUZsdXNoIGNhbGxlZCB3aXRoICR7dGhpcy5wZW5kaW5nRXhwb3J0cy5sZW5ndGh9IHBlbmRpbmcgZXhwb3J0c2BcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMucGVuZGluZ0V4cG9ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdbU3luY0xvZ1JlY29yZFByb2Nlc3Nvcl0gTm8gcGVuZGluZyBleHBvcnRzIHRvIGZsdXNoJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyBXYWl0IGZvciBhbGwgcGVuZGluZyBleHBvcnRzIHRvIGNvbXBsZXRlXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMucGVuZGluZ0V4cG9ydHMpO1xyXG4gICAgICBjb25zb2xlLmxvZygnW1N5bmNMb2dSZWNvcmRQcm9jZXNzb3JdIEFsbCBwZW5kaW5nIGV4cG9ydHMgY29tcGxldGVkJyk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdbU3luY0xvZ1JlY29yZFByb2Nlc3Nvcl0gRXJyb3IgZHVyaW5nIGZvcmNlRmx1c2g6JywgZXJyb3IpO1xyXG4gICAgICB0aHJvdyBlcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHNodXRkb3duKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc29sZS5sb2coJ1tTeW5jTG9nUmVjb3JkUHJvY2Vzc29yXSBTaHV0dGluZyBkb3duLi4uJyk7XHJcbiAgICBhd2FpdCB0aGlzLmZvcmNlRmx1c2goKTtcclxuICAgIGF3YWl0IHRoaXMuZXhwb3J0ZXIuc2h1dGRvd24oKTtcclxuICAgIGNvbnNvbGUubG9nKCdbU3luY0xvZ1JlY29yZFByb2Nlc3Nvcl0gU2h1dGRvd24gY29tcGxldGUnKTtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1 @@
1
+ export * from './middy';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./middy"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVsZW1ldHJ5L3NzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMENBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9taWRkeSc7XHJcbiJdfQ==
@@ -0,0 +1 @@
1
+ export * from './middleware';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./middleware"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVsZW1ldHJ5L3NzdC9taWRkeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9taWRkbGV3YXJlJztcclxuIl19
@@ -0,0 +1,5 @@
1
+ import middy from '@middy/core';
2
+ interface MiddyMiddlewareOptions {
3
+ }
4
+ export declare const middyMiddleware: (options?: MiddyMiddlewareOptions) => middy.MiddlewareObj;
5
+ export {};
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.middyMiddleware = void 0;
13
+ const api_1 = require("@opentelemetry/api");
14
+ const telemetry_1 = require("../telemetry");
15
+ const perf_hooks_1 = require("perf_hooks");
16
+ const middyMiddleware = (options) => ({
17
+ before: (request) => __awaiter(void 0, void 0, void 0, function* () {
18
+ const startTime = perf_hooks_1.performance.now();
19
+ const { context: lambdaContext } = request;
20
+ const functionName = lambdaContext.functionName;
21
+ const invocationId = lambdaContext.awsRequestId;
22
+ const serviceName = process.env.SERVICE_NAME || 'search-engine';
23
+ const event = request.event;
24
+ const queryStringParameters = (event === null || event === void 0 ? void 0 : event.queryStringParameters) || {};
25
+ const origin = queryStringParameters.origin || 'unknown';
26
+ let stage = process.env.STAGE || 'development';
27
+ if (stage === 'prod')
28
+ stage = 'production';
29
+ const tracer = api_1.trace.getTracer(serviceName);
30
+ const meter = api_1.metrics.getMeter(origin);
31
+ const span = tracer.startSpan(functionName, {
32
+ kind: 1,
33
+ attributes: {
34
+ 'faas.name': functionName,
35
+ 'faas.invocation_id': invocationId,
36
+ origin,
37
+ 'service.name': serviceName,
38
+ 'deployment.environment.name': stage,
39
+ },
40
+ });
41
+ const executionTimeHistogram = meter.createHistogram('lambda_execution_duration', {
42
+ description: 'Tempo total de execução do Lambda em ms',
43
+ unit: 'ms',
44
+ valueType: api_1.ValueType.DOUBLE,
45
+ });
46
+ const successCounter = meter.createCounter('total_successful_purchases', {
47
+ description: 'Total de compras bem-sucedidas',
48
+ });
49
+ const failureCounter = meter.createCounter('total_failed_purchases', {
50
+ description: 'Total de compras com falha',
51
+ });
52
+ request.context.otel = {
53
+ span,
54
+ meter,
55
+ executionTimeHistogram,
56
+ successCounter,
57
+ failureCounter,
58
+ startTime,
59
+ };
60
+ }),
61
+ after: (request) => __awaiter(void 0, void 0, void 0, function* () {
62
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
63
+ const otelData = request.context.otel;
64
+ if (!otelData)
65
+ return;
66
+ const event = request.event;
67
+ const queryStringParameters = (event === null || event === void 0 ? void 0 : event.queryStringParameters) || {};
68
+ const origin = queryStringParameters.origin || 'unknown';
69
+ const { span, successCounter, executionTimeHistogram, startTime } = otelData;
70
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
71
+ span.setAttribute('execution.success', true);
72
+ successCounter.add(1, {
73
+ origin,
74
+ 'faas.name': ((_a = span.attributes) === null || _a === void 0 ? void 0 : _a['faas.name']) || 'unknown',
75
+ 'service.name': ((_b = span.attributes) === null || _b === void 0 ? void 0 : _b['service.name']) || 'search-engine',
76
+ 'deployment.environment.name': (_c = span.attributes) === null || _c === void 0 ? void 0 : _c['deployment.environment.name'],
77
+ });
78
+ const durationMs = perf_hooks_1.performance.now() - startTime;
79
+ executionTimeHistogram.record(durationMs, {
80
+ origin: ((_d = span.attributes) === null || _d === void 0 ? void 0 : _d['origin']) || 'unknown',
81
+ status: 'success',
82
+ 'faas.name': ((_e = span.attributes) === null || _e === void 0 ? void 0 : _e['faas.name']) || 'unknown',
83
+ 'service.name': ((_f = span.attributes) === null || _f === void 0 ? void 0 : _f['service.name']) || 'search-engine',
84
+ 'deployment.environment.name': (_g = span.attributes) === null || _g === void 0 ? void 0 : _g['deployment.environment.name'],
85
+ });
86
+ const standardLogger = (0, telemetry_1.getStandardLogger)();
87
+ let stage = process.env.STAGE || 'development';
88
+ if (stage === 'prod')
89
+ stage = 'production';
90
+ yield standardLogger.logInfo({
91
+ message: 'Request completed successfully',
92
+ serviceName: ((_h = span.attributes) === null || _h === void 0 ? void 0 : _h['service.name']) || 'sst-service',
93
+ environment: stage,
94
+ execution: {
95
+ functionName: (_j = span.attributes) === null || _j === void 0 ? void 0 : _j['faas.name'],
96
+ invocationId: (_k = span.attributes) === null || _k === void 0 ? void 0 : _k['faas.invocation_id'],
97
+ origin,
98
+ },
99
+ performance: {
100
+ durationMs,
101
+ success: true,
102
+ },
103
+ });
104
+ span.end();
105
+ yield (0, telemetry_1.forceFlush)();
106
+ }),
107
+ onError: (request) => __awaiter(void 0, void 0, void 0, function* () {
108
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
109
+ const otelData = request.context.otel;
110
+ if (!otelData)
111
+ return;
112
+ const event = request.event;
113
+ const queryStringParameters = (event === null || event === void 0 ? void 0 : event.queryStringParameters) || {};
114
+ const origin = queryStringParameters.origin || 'unknown';
115
+ const { span, failureCounter, executionTimeHistogram, startTime } = otelData;
116
+ const error = request.error;
117
+ span.recordException(error);
118
+ span.setStatus({
119
+ code: api_1.SpanStatusCode.ERROR,
120
+ message: (error === null || error === void 0 ? void 0 : error.message) || 'Unknown error',
121
+ });
122
+ span.setAttribute('execution.success', false);
123
+ span.setAttribute('error.type', ((_a = error === null || error === void 0 ? void 0 : error.constructor) === null || _a === void 0 ? void 0 : _a.name) || 'UnknownError');
124
+ span.setAttribute('deployment.environment.name', ((_b = span.attributes) === null || _b === void 0 ? void 0 : _b['deployment.environment.name']) || 'development');
125
+ span.setAttribute('service.name', ((_c = span.attributes) === null || _c === void 0 ? void 0 : _c['service.name']) || 'providers-purchase-integrator');
126
+ span.setAttribute('faas.name', ((_d = span.attributes) === null || _d === void 0 ? void 0 : _d['faas.name']) || 'unknown');
127
+ span.setAttribute('origin', origin);
128
+ span.setAttribute('faas.invocation_id', (_e = span.attributes) === null || _e === void 0 ? void 0 : _e['faas.invocation_id']);
129
+ failureCounter.add(1, {
130
+ origin,
131
+ error_type: ((_f = error === null || error === void 0 ? void 0 : error.constructor) === null || _f === void 0 ? void 0 : _f.name) || 'UnknownError',
132
+ 'faas.name': ((_g = span.attributes) === null || _g === void 0 ? void 0 : _g['faas.name']) || 'unknown',
133
+ 'service.name': ((_h = span.attributes) === null || _h === void 0 ? void 0 : _h['service.name']) || 'search-engine',
134
+ 'deployment.environment.name': (_j = span.attributes) === null || _j === void 0 ? void 0 : _j['deployment.environment.name'],
135
+ });
136
+ const durationMs = perf_hooks_1.performance.now() - startTime;
137
+ executionTimeHistogram.record(durationMs, {
138
+ origin: ((_k = span.attributes) === null || _k === void 0 ? void 0 : _k['origin']) || 'unknown',
139
+ status: 'error',
140
+ 'faas.name': ((_l = span.attributes) === null || _l === void 0 ? void 0 : _l['faas.name']) || 'unknown',
141
+ 'service.name': ((_m = span.attributes) === null || _m === void 0 ? void 0 : _m['service.name']) || 'search-engine',
142
+ 'deployment.environment.name': (_o = span.attributes) === null || _o === void 0 ? void 0 : _o['deployment.environment.name'],
143
+ });
144
+ const standardLogger = (0, telemetry_1.getStandardLogger)();
145
+ let stage = process.env.STAGE || 'development';
146
+ if (stage === 'prod')
147
+ stage = 'production';
148
+ yield standardLogger.logError({
149
+ message: (error === null || error === void 0 ? void 0 : error.message) || 'Unknown error occurred',
150
+ error: error || undefined,
151
+ serviceName: ((_p = span.attributes) === null || _p === void 0 ? void 0 : _p['service.name']) || 'sst-service',
152
+ environment: stage,
153
+ execution: {
154
+ functionName: (_q = span.attributes) === null || _q === void 0 ? void 0 : _q['faas.name'],
155
+ invocationId: (_r = span.attributes) === null || _r === void 0 ? void 0 : _r['faas.invocation_id'],
156
+ awsRequestId: (_s = span.attributes) === null || _s === void 0 ? void 0 : _s['faas.invocation_id'],
157
+ origin,
158
+ },
159
+ performance: {
160
+ durationMs,
161
+ success: false,
162
+ },
163
+ context: {
164
+ queryStringParameters,
165
+ },
166
+ });
167
+ span.end();
168
+ yield (0, telemetry_1.forceFlush)();
169
+ }),
170
+ });
171
+ exports.middyMiddleware = middyMiddleware;
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZWxlbWV0cnkvc3N0L21pZGR5L21pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQ0EsNENBQStFO0FBQy9FLDRDQUE2RDtBQUM3RCwyQ0FBeUM7QUFJbEMsTUFBTSxlQUFlLEdBQUcsQ0FDN0IsT0FBZ0MsRUFDWCxFQUFFLENBQUMsQ0FBQztJQUN6QixNQUFNLEVBQUUsQ0FBTyxPQUFPLEVBQUUsRUFBRTtRQUN4QixNQUFNLFNBQVMsR0FBRyx3QkFBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXBDLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzNDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxlQUFlLENBQUM7UUFDaEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQVksQ0FBQztRQUNuQyxNQUFNLHFCQUFxQixHQUFHLENBQUEsS0FBSyxhQUFMLEtBQUssdUJBQUwsS0FBSyxDQUFFLHFCQUFxQixLQUFJLEVBQUUsQ0FBQztRQUNqRSxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDO1FBQ3pELElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQztRQUMvQyxJQUFJLEtBQUssS0FBSyxNQUFNO1lBQUUsS0FBSyxHQUFHLFlBQVksQ0FBQztRQUUzQyxNQUFNLE1BQU0sR0FBRyxXQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLGFBQU8sQ0FBQyxRQUFRLENBQUMs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QUUsQ0FBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsT0FBTyxLQUFJLHdCQUF3QjtZQUNuRCxLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVM7WUFDekIsV0FBVyxFQUNULENBQUMsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRyxjQUFjLENBQVksS0FBSSxhQUFhO1lBQ2hFLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFNBQVMsRUFBRTtnQkFDVCxZQUFZLEVBQUUsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRyxXQUFXLENBQVc7Z0JBQ3RELFlBQVksRUFBRSxNQUFBLElBQUksQ0FBQyxVQUFVLDBDQUFHLG9CQUFvQixDQUFXO2dCQUMvRCxZQUFZLEVBQUUsTUFBQSxJQUFJLENBQUMsVUFBVSwwQ0FBRyxvQkFBb0IsQ0FBVztnQkFDL0QsTUFBTTthQUNQO1lBQ0QsV0FBVyxFQUFFO2dCQUNYLFVBQVU7Z0JBQ1YsT0FBTyxFQUFFLEtBQUs7YUFDZjtZQUNELE9BQU8sRUFBRTtnQkFDUCxxQkFBcUI7YUFDdEI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDWCxNQUFNLElBQUEsc0JBQVUsR0FBRSxDQUFDO0lBQ3JCLENBQUMsQ0FBQTtDQUNGLENBQUMsQ0FBQztBQW5NVSxRQUFBLGVBQWUsbUJBbU16QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtaWRkeSBmcm9tICdAbWlkZHkvY29yZSc7XHJcbmltcG9ydCB7IHRyYWNlLCBTcGFuU3RhdHVzQ29kZSwgbWV0cmljcywgVmFsdWVUeXBlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcclxuaW1wb3J0IHsgZm9yY2VGbHVzaCwgZ2V0U3RhbmRhcmRMb2dnZXIgfSBmcm9tICcuLi90ZWxlbWV0cnknO1xyXG5pbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ3BlcmZfaG9va3MnO1xyXG5cclxuaW50ZXJmYWNlIE1pZGR5TWlkZGxld2FyZU9wdGlvbnMge31cclxuXHJcbmV4cG9ydCBjb25zdCBtaWRkeU1pZGRsZXdhcmUgPSAoXHJcbiAgb3B0aW9ucz86IE1pZGR5TWlkZGxld2FyZU9wdGlvbnNcclxuKTogbWlkZHkuTWlkZGxld2FyZU9iaiA9PiAoe1xyXG4gIGJlZm9yZTogYXN5bmMgKHJlcXVlc3QpID0+IHtcclxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xyXG5cclxuICAgIGNvbnN0IHsgY29udGV4dDogbGFtYmRhQ29udGV4dCB9ID0gcmVxdWVzdDtcclxuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGxhbWJkYUNvbnRleHQuZnVuY3Rpb25OYW1lO1xyXG4gICAgY29uc3QgaW52b2NhdGlvbklkID0gbGFtYmRhQ29udGV4dC5hd3NSZXF1ZXN0SWQ7XHJcbiAgICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnc2VhcmNoLWVuZ2luZSc7XHJcbiAgICBjb25zdCBldmVudCA9IHJlcXVlc3QuZXZlbnQgYXMgYW55O1xyXG4gICAgY29uc3QgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzID0gZXZlbnQ/LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB8fCB7fTtcclxuICAgIGNvbnN0IG9yaWdpbiA9IHF1ZXJ5U3RyaW5nUGFyYW1ldGVycy5vcmlnaW4gfHwgJ3Vua25vd24nO1xyXG4gICAgbGV0IHN0YWdlID0gcHJvY2Vzcy5lbnYuU1RBR0UgfHwgJ2RldmVsb3BtZW50JztcclxuICAgIGlmIChzdGFnZSA9PT0gJ3Byb2QnKSBzdGFnZSA9ICdwcm9kdWN0aW9uJztcclxuXHJcbiAgICBjb25zdCB0cmFjZXIgPSB0cmFjZS5nZXRUcmFjZXIoc2VydmljZU5hbWUpO1xyXG4gICAgY29uc3QgbWV0ZXIgPSBtZXRyaWNzLmdldE1ldGVyKG9yaWdpbik7XHJcblxyXG4gICAgY29uc3Qgc3BhbiA9IHRyYWNlci5zdGFydFNwYW4oZnVuY3Rpb25OYW1lLCB7XHJcbiAgICAgIGtpbmQ6IDEsXHJcbiAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAnZmFhcy5uYW1lJzogZnVuY3Rpb25OYW1lLFxyXG4gICAgICAgICdmYWFzLmludm9jYXRpb25faWQnOiBpbnZvY2F0aW9uSWQsXHJcbiAgICAgICAgb3JpZ2luLFxyXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcclxuICAgICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJzogc3RhZ2UsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBleGVjdXRpb25UaW1lSGlzdG9ncmFtID0gbWV0ZXIuY3JlYXRlSGlzdG9ncmFtKFxyXG4gICAgICAnbGFtYmRhX2V4ZWN1dGlvbl9kdXJhdGlvbicsXHJcbiAgICAgIHtcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RlbXBvIHRvdGFsIGRlIGV4ZWN1w6fDo28gZG8gTGFtYmRhIGVtIG1zJyxcclxuICAgICAgICB1bml0OiAnbXMnLFxyXG4gICAgICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlLkRPVUJMRSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHN1Y2Nlc3NDb3VudGVyID0gbWV0ZXIuY3JlYXRlQ291bnRlcigndG90YWxfc3VjY2Vzc2Z1bF9wdXJjaGFzZXMnLCB7XHJcbiAgICAgIGRlc2NyaXB0aW9uOiAnVG90YWwgZGUgY29tcHJhcyBiZW0tc3VjZWRpZGFzJyxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgZmFpbHVyZUNvdW50ZXIgPSBtZXRlci5jcmVhdGVDb3VudGVyKCd0b3RhbF9mYWlsZWRfcHVyY2hhc2VzJywge1xyXG4gICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIGRlIGNvbXByYXMgY29tIGZhbGhhJyxcclxuICAgIH0pO1xyXG5cclxuICAgIChyZXF1ZXN0LmNvbnRleHQgYXMgYW55KS5vdGVsID0ge1xyXG4gICAgICBzcGFuLFxyXG4gICAgICBtZXRlcixcclxuICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSxcclxuICAgICAgc3VjY2Vzc0NvdW50ZXIsXHJcbiAgICAgIGZhaWx1cmVDb3VudGVyLFxyXG4gICAgICBzdGFydFRpbWUsXHJcbiAgICB9O1xyXG4gIH0sXHJcblxyXG4gIGFmdGVyOiBhc3luYyAocmVxdWVzdCkgPT4ge1xyXG4gICAgY29uc3Qgb3RlbERhdGEgPSAocmVxdWVzdC5jb250ZXh0IGFzIGFueSkub3RlbDtcclxuICAgIGlmICghb3RlbERhdGEpIHJldHVybjtcclxuICAgIGNvbnN0IGV2ZW50ID0gcmVxdWVzdC5ldmVudCBhcyBhbnk7XHJcblxyXG4gICAgY29uc3QgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzID0gZXZlbnQ/LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB8fCB7fTtcclxuICAgIGNvbnN0IG9yaWdpbiA9IHF1ZXJ5U3RyaW5nUGFyYW1ldGVycy5vcmlnaW4gfHwgJ3Vua25vd24nO1xyXG5cclxuICAgIGNvbnN0IHsgc3Bhbiwgc3VjY2Vzc0NvdW50ZXIsIGV4ZWN1dGlvblRpbWVIaXN0b2dyYW0sIHN0YXJ0VGltZSB9ID1cclxuICAgICAgb3RlbERhdGE7XHJcblxyXG4gICAgc3Bhbi5zZXRTdGF0dXMoeyBjb2RlOiBTcGFuU3RhdHVzQ29kZS5PSyB9KTtcclxuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdleGVjdXRpb24uc3VjY2VzcycsIHRydWUpO1xyXG4gICAgc3VjY2Vzc0NvdW50ZXIuYWRkKDEsIHtcclxuICAgICAgb3JpZ2luLFxyXG4gICAgICAnZmFhcy5uYW1lJzogc3Bhbi5hdHRyaWJ1dGVzPy5bJ2ZhYXMubmFtZSddIHx8ICd1bmtub3duJyxcclxuICAgICAgJ3NlcnZpY2UubmFtZSc6IHNwYW4uYXR0cmlidXRlcz8uWydzZXJ2aWNlLm5hbWUnXSB8fCAnc2VhcmNoLWVuZ2luZScsXHJcbiAgICAgICdkZXBsb3ltZW50LmVudmlyb25tZW50Lm5hbWUnOlxyXG4gICAgICAgIHNwYW4uYXR0cmlidXRlcz8uWydkZXBsb3ltZW50LmVudmlyb25tZW50Lm5hbWUnXSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcclxuXHJcbiAgICBleGVjdXRpb25UaW1lSGlzdG9ncmFtLnJlY29yZChkdXJhdGlvbk1zLCB7XHJcbiAgICAgIG9yaWdpbjogc3Bhbi5hdHRyaWJ1dGVzPy5bJ29yaWdpbiddIHx8ICd1bmtub3duJyxcclxuICAgICAgc3RhdHVzOiAnc3VjY2VzcycsXHJcbiAgICAgICdmYWFzLm5hbWUnOiBzcGFuLmF0dHJpYnV0ZXM/LlsnZmFhcy5uYW1lJ10gfHwgJ3Vua25vd24nLFxyXG4gICAgICAnc2VydmljZS5uYW1lJzogc3Bhbi5hdHRyaWJ1dGVzPy5bJ3NlcnZpY2UubmFtZSddIHx8ICdzZWFyY2gtZW5naW5lJyxcclxuICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6XHJcbiAgICAgICAgc3Bhbi5hdHRyaWJ1dGVzPy5bJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSddLFxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gTG9nIGVzdHJ1dHVyYWRvIGRlIHN1Y2Vzc29cclxuICAgIGNvbnN0IHN0YW5kYXJkTG9nZ2VyID0gZ2V0U3RhbmRhcmRMb2dnZXIoKTtcclxuICAgIGxldCBzdGFnZSA9IHByb2Nlc3MuZW52LlNUQUdFIHx8ICdkZXZlbG9wbWVudCc7XHJcbiAgICBpZiAoc3RhZ2UgPT09ICdwcm9kJykgc3RhZ2UgPSAncHJvZHVjdGlvbic7XHJcblxyXG4gICAgYXdhaXQgc3RhbmRhcmRMb2dnZXIubG9nSW5mbyh7XHJcbiAgICAgIG1lc3NhZ2U6ICdSZXF1ZXN0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknLFxyXG4gICAgICBzZXJ2aWNlTmFtZTpcclxuICAgICAgICAoc3Bhbi5hdHRyaWJ1dGVzPy5bJ3NlcnZpY2UubmFtZSddIGFzIHN0cmluZykgfHwgJ3NzdC1zZXJ2aWNlJyxcclxuICAgICAgZW52aXJvbm1lbnQ6IHN0YWdlLFxyXG4gICAgICBleGVjdXRpb246IHtcclxuICAgICAgICBmdW5jdGlvbk5hbWU6IHNwYW4uYXR0cmlidXRlcz8uWydmYWFzLm5hbWUnXSBhcyBzdHJpbmcsXHJcbiAgICAgICAgaW52b2NhdGlvbklkOiBzcGFuLmF0dHJpYnV0ZXM/LlsnZmFhcy5pbnZvY2F0aW9uX2lkJ10gYXMgc3RyaW5nLFxyXG4gICAgICAgIG9yaWdpbixcclxuICAgICAgfSxcclxuICAgICAgcGVyZm9ybWFuY2U6IHtcclxuICAgICAgICBkdXJhdGlvbk1zLFxyXG4gICAgICAgIHN1Y2Nlc3M6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBzcGFuLmVuZCgpO1xyXG4gICAgYXdhaXQgZm9yY2VGbHVzaCgpO1xyXG4gIH0sXHJcblxyXG4gIG9uRXJyb3I6IGFzeW5jIChyZXF1ZXN0KSA9PiB7XHJcbiAgICBjb25zdCBvdGVsRGF0YSA9IChyZXF1ZXN0LmNvbnRleHQgYXMgYW55KS5vdGVsO1xyXG4gICAgaWYgKCFvdGVsRGF0YSkgcmV0dXJuO1xyXG4gICAgY29uc3QgZXZlbnQgPSByZXF1ZXN0LmV2ZW50IGFzIGFueTtcclxuXHJcbiAgICBjb25zdCBxdWVyeVN0cmluZ1BhcmFtZXRlcnMgPSBldmVudD8ucXVlcnlTdHJpbmdQYXJhbWV0ZXJzIHx8IHt9O1xyXG4gICAgY29uc3Qgb3JpZ2luID0gcXVlcnlTdHJpbmdQYXJhbWV0ZXJzLm9yaWdpbiB8fCAndW5rbm93bic7XHJcblxyXG4gICAgY29uc3QgeyBzcGFuLCBmYWlsdXJlQ291bnRlciwgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSwgc3RhcnRUaW1lIH0gPVxyXG4gICAgICBvdGVsRGF0YTtcclxuICAgIGNvbnN0IGVycm9yID0gcmVxdWVzdC5lcnJvcjtcclxuXHJcbiAgICBzcGFuLnJlY29yZEV4Y2VwdGlvbihlcnJvcik7XHJcbiAgICBzcGFuLnNldFN0YXR1cyh7XHJcbiAgICAgIGNvZGU6IFNwYW5TdGF0dXNDb2RlLkVSUk9SLFxyXG4gICAgICBtZXNzYWdlOiBlcnJvcj8ubWVzc2FnZSB8fCAnVW5rbm93biBlcnJvcicsXHJcbiAgICB9KTtcclxuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdleGVjdXRpb24uc3VjY2VzcycsIGZhbHNlKTtcclxuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdlcnJvci50eXBlJywgZXJyb3I/LmNvbnN0cnVjdG9yPy5uYW1lIHx8ICdVbmtub3duRXJyb3InKTtcclxuICAgIHNwYW4uc2V0QXR0cmlidXRlKFxyXG4gICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJyxcclxuICAgICAgc3Bhbi5hdHRyaWJ1dGVzPy5bJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSddIHx8ICdkZXZlbG9wbWVudCdcclxuICAgICk7XHJcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShcclxuICAgICAgJ3NlcnZpY2UubmFtZScsXHJcbiAgICAgIHNwYW4uYXR0cmlidXRlcz8uWydzZXJ2aWNlLm5hbWUnXSB8fCAncHJvdmlkZXJzLXB1cmNoYXNlLWludGVncmF0b3InXHJcbiAgICApO1xyXG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2ZhYXMubmFtZScsIHNwYW4uYXR0cmlidXRlcz8uWydmYWFzLm5hbWUnXSB8fCAndW5rbm93bicpO1xyXG4gICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ29yaWdpbicsIG9yaWdpbik7XHJcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2ZhYXMuaW52b2NhdGlvbl9pZCcsXHJcbiAgICAgIHNwYW4uYXR0cmlidXRlcz8uWydmYWFzLmludm9jYXRpb25faWQnXVxyXG4gICAgKTtcclxuXHJcbiAgICBmYWlsdXJlQ291bnRlci5hZGQoMSwge1xyXG4gICAgICBvcmlnaW4sXHJcbiAgICAgIGVycm9yX3R5cGU6IGVycm9yPy5jb25zdHJ1Y3Rvcj8ubmFtZSB8fCAnVW5rbm93bkVycm9yJyxcclxuICAgICAgJ2ZhYXMubmFtZSc6IHNwYW4uYXR0cmlidXRlcz8uWydmYWFzLm5hbWUnXSB8fCAndW5rbm93bicsXHJcbiAgICAgICdzZXJ2aWNlLm5hbWUnOiBzcGFuLmF0dHJpYnV0ZXM/Llsnc2VydmljZS5uYW1lJ10gfHwgJ3NlYXJjaC1lbmdpbmUnLFxyXG4gICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJzpcclxuICAgICAgICBzcGFuLmF0dHJpYnV0ZXM/LlsnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJ10sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBkdXJhdGlvbk1zID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XHJcblxyXG4gICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbS5yZWNvcmQoZHVyYXRpb25Ncywge1xyXG4gICAgICBvcmlnaW46IHNwYW4uYXR0cmlidXRlcz8uWydvcmlnaW4nXSB8fCAndW5rbm93bicsXHJcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcclxuICAgICAgJ2ZhYXMubmFtZSc6IHNwYW4uYXR0cmlidXRlcz8uWydmYWFzLm5hbWUnXSB8fCAndW5rbm93bicsXHJcbiAgICAgICdzZXJ2aWNlLm5hbWUnOiBzcGFuLmF0dHJpYnV0ZXM/Llsnc2VydmljZS5uYW1lJ10gfHwgJ3NlYXJjaC1lbmdpbmUnLFxyXG4gICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJzpcclxuICAgICAgICBzcGFuLmF0dHJpYnV0ZXM/LlsnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJ10sXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBMb2cgZXN0cnV0dXJhZG8gZGUgZXJyb1xyXG4gICAgY29uc3Qgc3RhbmRhcmRMb2dnZXIgPSBnZXRTdGFuZGFyZExvZ2dlcigpO1xyXG4gICAgbGV0IHN0YWdlID0gcHJvY2Vzcy5lbnYuU1RBR0UgfHwgJ2RldmVsb3BtZW50JztcclxuICAgIGlmIChzdGFnZSA9PT0gJ3Byb2QnKSBzdGFnZSA9ICdwcm9kdWN0aW9uJztcclxuXHJcbiAgICBhd2FpdCBzdGFuZGFyZExvZ2dlci5sb2dFcnJvcih7XHJcbiAgICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkJyxcclxuICAgICAgZXJyb3I6IGVycm9yIHx8IHVuZGVmaW5lZCxcclxuICAgICAgc2VydmljZU5hbWU6XHJcbiAgICAgICAgKHNwYW4uYXR0cmlidXRlcz8uWydzZXJ2aWNlLm5hbWUnXSBhcyBzdHJpbmcpIHx8ICdzc3Qtc2VydmljZScsXHJcbiAgICAgIGVudmlyb25tZW50OiBzdGFnZSxcclxuICAgICAgZXhlY3V0aW9uOiB7XHJcbiAgICAgICAgZnVuY3Rpb25OYW1lOiBzcGFuLmF0dHJpYnV0ZXM/LlsnZmFhcy5uYW1lJ10gYXMgc3RyaW5nLFxyXG4gICAgICAgIGludm9jYXRpb25JZDogc3Bhbi5hdHRyaWJ1dGVzPy5bJ2ZhYXMuaW52b2NhdGlvbl9pZCddIGFzIHN0cmluZyxcclxuICAgICAgICBhd3NSZXF1ZXN0SWQ6IHNwYW4uYXR0cmlidXRlcz8uWydmYWFzLmludm9jYXRpb25faWQnXSBhcyBzdHJpbmcsXHJcbiAgICAgICAgb3JpZ2luLFxyXG4gICAgICB9LFxyXG4gICAgICBwZXJmb3JtYW5jZToge1xyXG4gICAgICAgIGR1cmF0aW9uTXMsXHJcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbnRleHQ6IHtcclxuICAgICAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnMsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBzcGFuLmVuZCgpO1xyXG4gICAgYXdhaXQgZm9yY2VGbHVzaCgpO1xyXG4gIH0sXHJcbn0pO1xyXG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { StandardLogger } from '../core';
2
+ export declare const getStandardLogger: () => StandardLogger;
3
+ export declare const forceFlush: () => Promise<void>;