n8n-mcp 2.13.2 → 2.14.0

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 (59) hide show
  1. package/README.md +45 -0
  2. package/data/nodes.db +0 -0
  3. package/dist/mcp/handlers-n8n-manager.d.ts.map +1 -1
  4. package/dist/mcp/handlers-n8n-manager.js +6 -0
  5. package/dist/mcp/handlers-n8n-manager.js.map +1 -1
  6. package/dist/mcp/index.js +32 -0
  7. package/dist/mcp/index.js.map +1 -1
  8. package/dist/mcp/server.d.ts +2 -0
  9. package/dist/mcp/server.d.ts.map +1 -1
  10. package/dist/mcp/server.js +56 -19
  11. package/dist/mcp/server.js.map +1 -1
  12. package/dist/services/config-validator.d.ts +1 -0
  13. package/dist/services/config-validator.d.ts.map +1 -1
  14. package/dist/services/config-validator.js.map +1 -1
  15. package/dist/telemetry/batch-processor.d.ts +32 -0
  16. package/dist/telemetry/batch-processor.d.ts.map +1 -0
  17. package/dist/telemetry/batch-processor.js +266 -0
  18. package/dist/telemetry/batch-processor.js.map +1 -0
  19. package/dist/telemetry/config-manager.d.ts +28 -0
  20. package/dist/telemetry/config-manager.d.ts.map +1 -0
  21. package/dist/telemetry/config-manager.js +211 -0
  22. package/dist/telemetry/config-manager.js.map +1 -0
  23. package/dist/telemetry/event-tracker.d.ts +58 -0
  24. package/dist/telemetry/event-tracker.d.ts.map +1 -0
  25. package/dist/telemetry/event-tracker.js +295 -0
  26. package/dist/telemetry/event-tracker.js.map +1 -0
  27. package/dist/telemetry/event-validator.d.ts +78 -0
  28. package/dist/telemetry/event-validator.d.ts.map +1 -0
  29. package/dist/telemetry/event-validator.js +204 -0
  30. package/dist/telemetry/event-validator.js.map +1 -0
  31. package/dist/telemetry/index.d.ts +5 -0
  32. package/dist/telemetry/index.d.ts.map +1 -0
  33. package/dist/telemetry/index.js +11 -0
  34. package/dist/telemetry/index.js.map +1 -0
  35. package/dist/telemetry/performance-monitor.d.ts +113 -0
  36. package/dist/telemetry/performance-monitor.d.ts.map +1 -0
  37. package/dist/telemetry/performance-monitor.js +208 -0
  38. package/dist/telemetry/performance-monitor.js.map +1 -0
  39. package/dist/telemetry/rate-limiter.d.ts +30 -0
  40. package/dist/telemetry/rate-limiter.d.ts.map +1 -0
  41. package/dist/telemetry/rate-limiter.js +103 -0
  42. package/dist/telemetry/rate-limiter.js.map +1 -0
  43. package/dist/telemetry/telemetry-error.d.ts +44 -0
  44. package/dist/telemetry/telemetry-error.d.ts.map +1 -0
  45. package/dist/telemetry/telemetry-error.js +153 -0
  46. package/dist/telemetry/telemetry-error.js.map +1 -0
  47. package/dist/telemetry/telemetry-manager.d.ts +127 -0
  48. package/dist/telemetry/telemetry-manager.d.ts.map +1 -0
  49. package/dist/telemetry/telemetry-manager.js +182 -0
  50. package/dist/telemetry/telemetry-manager.js.map +1 -0
  51. package/dist/telemetry/telemetry-types.d.ts +69 -0
  52. package/dist/telemetry/telemetry-types.d.ts.map +1 -0
  53. package/dist/telemetry/telemetry-types.js +29 -0
  54. package/dist/telemetry/telemetry-types.js.map +1 -0
  55. package/dist/telemetry/workflow-sanitizer.d.ts +33 -0
  56. package/dist/telemetry/workflow-sanitizer.d.ts.map +1 -0
  57. package/dist/telemetry/workflow-sanitizer.js +190 -0
  58. package/dist/telemetry/workflow-sanitizer.js.map +1 -0
  59. package/package.json +2 -1
@@ -0,0 +1,113 @@
1
+ export declare class TelemetryPerformanceMonitor {
2
+ private metrics;
3
+ private operationTimers;
4
+ private readonly maxMetrics;
5
+ private startupTime;
6
+ private operationCounts;
7
+ startOperation(operation: string): void;
8
+ endOperation(operation: string): number;
9
+ private recordMetric;
10
+ private captureMemoryUsage;
11
+ getStatistics(): {
12
+ totalOperations: number;
13
+ averageDuration: number;
14
+ slowOperations: number;
15
+ operationsByType: {};
16
+ memoryUsage: {
17
+ heapUsed: number;
18
+ heapTotal: number;
19
+ external: number;
20
+ } | undefined;
21
+ uptimeMs: number;
22
+ overhead: {
23
+ percentage: number;
24
+ totalMs: number;
25
+ };
26
+ operationsInLastMinute?: undefined;
27
+ } | {
28
+ totalOperations: number;
29
+ operationsInLastMinute: number;
30
+ averageDuration: number;
31
+ slowOperations: number;
32
+ operationsByType: Record<string, {
33
+ count: number;
34
+ avgDuration: number;
35
+ }>;
36
+ memoryUsage: {
37
+ heapUsed: number;
38
+ heapTotal: number;
39
+ external: number;
40
+ } | undefined;
41
+ uptimeMs: number;
42
+ overhead: {
43
+ percentage: number;
44
+ totalMs: number;
45
+ };
46
+ };
47
+ getDetailedReport(): {
48
+ summary: {
49
+ totalOperations: number;
50
+ averageDuration: number;
51
+ slowOperations: number;
52
+ operationsByType: {};
53
+ memoryUsage: {
54
+ heapUsed: number;
55
+ heapTotal: number;
56
+ external: number;
57
+ } | undefined;
58
+ uptimeMs: number;
59
+ overhead: {
60
+ percentage: number;
61
+ totalMs: number;
62
+ };
63
+ operationsInLastMinute?: undefined;
64
+ } | {
65
+ totalOperations: number;
66
+ operationsInLastMinute: number;
67
+ averageDuration: number;
68
+ slowOperations: number;
69
+ operationsByType: Record<string, {
70
+ count: number;
71
+ avgDuration: number;
72
+ }>;
73
+ memoryUsage: {
74
+ heapUsed: number;
75
+ heapTotal: number;
76
+ external: number;
77
+ } | undefined;
78
+ uptimeMs: number;
79
+ overhead: {
80
+ percentage: number;
81
+ totalMs: number;
82
+ };
83
+ };
84
+ percentiles: {
85
+ p50: number;
86
+ p75: number;
87
+ p90: number;
88
+ p95: number;
89
+ p99: number;
90
+ };
91
+ topSlowOperations: {
92
+ operation: string;
93
+ duration: number;
94
+ timestamp: number;
95
+ }[];
96
+ memoryTrend: {
97
+ trend: string;
98
+ delta: number;
99
+ };
100
+ recommendations: string[];
101
+ };
102
+ private calculatePercentiles;
103
+ private percentile;
104
+ private getTopSlowOperations;
105
+ private getMemoryTrend;
106
+ private generateRecommendations;
107
+ reset(): void;
108
+ getTelemetryOverhead(): {
109
+ percentage: number;
110
+ impact: 'minimal' | 'low' | 'moderate' | 'high';
111
+ };
112
+ }
113
+ //# sourceMappingURL=performance-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-monitor.d.ts","sourceRoot":"","sources":["../../src/telemetry/performance-monitor.ts"],"names":[],"mappings":"AAkBA,qBAAa,2BAA2B;IACtC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,eAAe,CAAkC;IAKzD,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOvC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IA8BvC,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,kBAAkB;IAe1B,aAAa;;;;;;;;;;;;;;;;;;;;;;mBA0BqC,MAAM;yBAAe,MAAM;;;;;;;;;;;;;IAwC7E,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;uBAxCiC,MAAM;6BAAe,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAwD7E,OAAO,CAAC,oBAAoB;IAsB5B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,uBAAuB;IAmC/B,KAAK,IAAI,IAAI;IAUb,oBAAoB,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAA;KAAE;CAYhG"}
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TelemetryPerformanceMonitor = void 0;
4
+ const logger_1 = require("../utils/logger");
5
+ class TelemetryPerformanceMonitor {
6
+ constructor() {
7
+ this.metrics = [];
8
+ this.operationTimers = new Map();
9
+ this.maxMetrics = 1000;
10
+ this.startupTime = Date.now();
11
+ this.operationCounts = new Map();
12
+ }
13
+ startOperation(operation) {
14
+ this.operationTimers.set(operation, performance.now());
15
+ }
16
+ endOperation(operation) {
17
+ const startTime = this.operationTimers.get(operation);
18
+ if (!startTime) {
19
+ logger_1.logger.debug(`No start time found for operation: ${operation}`);
20
+ return 0;
21
+ }
22
+ const duration = performance.now() - startTime;
23
+ this.operationTimers.delete(operation);
24
+ const metric = {
25
+ operation,
26
+ duration,
27
+ timestamp: Date.now(),
28
+ memory: this.captureMemoryUsage()
29
+ };
30
+ this.recordMetric(metric);
31
+ const count = this.operationCounts.get(operation) || 0;
32
+ this.operationCounts.set(operation, count + 1);
33
+ return duration;
34
+ }
35
+ recordMetric(metric) {
36
+ this.metrics.push(metric);
37
+ if (this.metrics.length > this.maxMetrics) {
38
+ this.metrics.shift();
39
+ }
40
+ if (metric.duration > 100) {
41
+ logger_1.logger.debug(`Slow telemetry operation: ${metric.operation} took ${metric.duration.toFixed(2)}ms`);
42
+ }
43
+ }
44
+ captureMemoryUsage() {
45
+ if (typeof process !== 'undefined' && process.memoryUsage) {
46
+ const usage = process.memoryUsage();
47
+ return {
48
+ heapUsed: Math.round(usage.heapUsed / 1024 / 1024),
49
+ heapTotal: Math.round(usage.heapTotal / 1024 / 1024),
50
+ external: Math.round(usage.external / 1024 / 1024)
51
+ };
52
+ }
53
+ return undefined;
54
+ }
55
+ getStatistics() {
56
+ const now = Date.now();
57
+ const recentMetrics = this.metrics.filter(m => now - m.timestamp < 60000);
58
+ if (recentMetrics.length === 0) {
59
+ return {
60
+ totalOperations: 0,
61
+ averageDuration: 0,
62
+ slowOperations: 0,
63
+ operationsByType: {},
64
+ memoryUsage: this.captureMemoryUsage(),
65
+ uptimeMs: now - this.startupTime,
66
+ overhead: {
67
+ percentage: 0,
68
+ totalMs: 0
69
+ }
70
+ };
71
+ }
72
+ const durations = recentMetrics.map(m => m.duration);
73
+ const totalDuration = durations.reduce((a, b) => a + b, 0);
74
+ const avgDuration = totalDuration / durations.length;
75
+ const slowOps = durations.filter(d => d > 50).length;
76
+ const operationsByType = {};
77
+ const typeGroups = new Map();
78
+ for (const metric of recentMetrics) {
79
+ const type = metric.operation;
80
+ if (!typeGroups.has(type)) {
81
+ typeGroups.set(type, []);
82
+ }
83
+ typeGroups.get(type).push(metric.duration);
84
+ }
85
+ for (const [type, durations] of typeGroups.entries()) {
86
+ const sum = durations.reduce((a, b) => a + b, 0);
87
+ operationsByType[type] = {
88
+ count: durations.length,
89
+ avgDuration: Math.round(sum / durations.length * 100) / 100
90
+ };
91
+ }
92
+ const estimatedOverheadPercentage = Math.min(5, avgDuration / 10);
93
+ return {
94
+ totalOperations: this.operationCounts.size,
95
+ operationsInLastMinute: recentMetrics.length,
96
+ averageDuration: Math.round(avgDuration * 100) / 100,
97
+ slowOperations: slowOps,
98
+ operationsByType,
99
+ memoryUsage: this.captureMemoryUsage(),
100
+ uptimeMs: now - this.startupTime,
101
+ overhead: {
102
+ percentage: estimatedOverheadPercentage,
103
+ totalMs: totalDuration
104
+ }
105
+ };
106
+ }
107
+ getDetailedReport() {
108
+ const stats = this.getStatistics();
109
+ const percentiles = this.calculatePercentiles();
110
+ return {
111
+ summary: stats,
112
+ percentiles,
113
+ topSlowOperations: this.getTopSlowOperations(5),
114
+ memoryTrend: this.getMemoryTrend(),
115
+ recommendations: this.generateRecommendations(stats, percentiles)
116
+ };
117
+ }
118
+ calculatePercentiles() {
119
+ const recentDurations = this.metrics
120
+ .filter(m => Date.now() - m.timestamp < 60000)
121
+ .map(m => m.duration)
122
+ .sort((a, b) => a - b);
123
+ if (recentDurations.length === 0) {
124
+ return { p50: 0, p75: 0, p90: 0, p95: 0, p99: 0 };
125
+ }
126
+ return {
127
+ p50: this.percentile(recentDurations, 0.5),
128
+ p75: this.percentile(recentDurations, 0.75),
129
+ p90: this.percentile(recentDurations, 0.9),
130
+ p95: this.percentile(recentDurations, 0.95),
131
+ p99: this.percentile(recentDurations, 0.99)
132
+ };
133
+ }
134
+ percentile(sorted, p) {
135
+ const index = Math.ceil(sorted.length * p) - 1;
136
+ return Math.round(sorted[Math.max(0, index)] * 100) / 100;
137
+ }
138
+ getTopSlowOperations(n) {
139
+ return [...this.metrics]
140
+ .sort((a, b) => b.duration - a.duration)
141
+ .slice(0, n)
142
+ .map(m => ({
143
+ operation: m.operation,
144
+ duration: Math.round(m.duration * 100) / 100,
145
+ timestamp: m.timestamp
146
+ }));
147
+ }
148
+ getMemoryTrend() {
149
+ const metricsWithMemory = this.metrics.filter(m => m.memory);
150
+ if (metricsWithMemory.length < 2) {
151
+ return { trend: 'stable', delta: 0 };
152
+ }
153
+ const recent = metricsWithMemory.slice(-10);
154
+ const first = recent[0].memory;
155
+ const last = recent[recent.length - 1].memory;
156
+ const delta = last.heapUsed - first.heapUsed;
157
+ let trend;
158
+ if (delta > 5)
159
+ trend = 'increasing';
160
+ else if (delta < -5)
161
+ trend = 'decreasing';
162
+ else
163
+ trend = 'stable';
164
+ return { trend, delta };
165
+ }
166
+ generateRecommendations(stats, percentiles) {
167
+ const recommendations = [];
168
+ if (stats.averageDuration > 50) {
169
+ recommendations.push('Consider batching more events to reduce overhead');
170
+ }
171
+ if (stats.slowOperations > stats.operationsInLastMinute * 0.1) {
172
+ recommendations.push('Many slow operations detected - investigate network latency');
173
+ }
174
+ if (percentiles.p99 > 200) {
175
+ recommendations.push('P99 latency is high - consider implementing local queue persistence');
176
+ }
177
+ const memoryTrend = this.getMemoryTrend();
178
+ if (memoryTrend.trend === 'increasing' && memoryTrend.delta > 10) {
179
+ recommendations.push('Memory usage is increasing - check for memory leaks');
180
+ }
181
+ if (stats.operationsInLastMinute > 1000) {
182
+ recommendations.push('High telemetry volume - ensure rate limiting is effective');
183
+ }
184
+ return recommendations;
185
+ }
186
+ reset() {
187
+ this.metrics = [];
188
+ this.operationTimers.clear();
189
+ this.operationCounts.clear();
190
+ this.startupTime = Date.now();
191
+ }
192
+ getTelemetryOverhead() {
193
+ const stats = this.getStatistics();
194
+ const percentage = stats.overhead.percentage;
195
+ let impact;
196
+ if (percentage < 1)
197
+ impact = 'minimal';
198
+ else if (percentage < 3)
199
+ impact = 'low';
200
+ else if (percentage < 5)
201
+ impact = 'moderate';
202
+ else
203
+ impact = 'high';
204
+ return { percentage, impact };
205
+ }
206
+ }
207
+ exports.TelemetryPerformanceMonitor = TelemetryPerformanceMonitor;
208
+ //# sourceMappingURL=performance-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"performance-monitor.js","sourceRoot":"","sources":["../../src/telemetry/performance-monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export declare class TelemetryRateLimiter {
2
+ private eventTimestamps;
3
+ private windowMs;
4
+ private maxEvents;
5
+ private droppedEventsCount;
6
+ private lastWarningTime;
7
+ private readonly WARNING_INTERVAL;
8
+ private readonly MAX_ARRAY_SIZE;
9
+ constructor(windowMs?: number, maxEvents?: number);
10
+ allow(): boolean;
11
+ wouldAllow(): boolean;
12
+ getStats(): {
13
+ currentEvents: number;
14
+ maxEvents: number;
15
+ windowMs: number;
16
+ droppedEvents: number;
17
+ utilizationPercent: number;
18
+ remainingCapacity: number;
19
+ arraySize: number;
20
+ maxArraySize: number;
21
+ memoryUsagePercent: number;
22
+ };
23
+ reset(): void;
24
+ private cleanupOldTimestamps;
25
+ private handleRateLimitHit;
26
+ getDroppedEventsCount(): number;
27
+ getTimeUntilCapacity(): number;
28
+ updateLimits(windowMs?: number, maxEvents?: number): void;
29
+ }
30
+ //# sourceMappingURL=rate-limiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../src/telemetry/rate-limiter.ts"],"names":[],"mappings":"AAQA,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,eAAe,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;gBAGrC,QAAQ,GAAE,MAA2C,EACrD,SAAS,GAAE,MAA+C;IAU5D,KAAK,IAAI,OAAO;IAqBhB,UAAU,IAAI,OAAO;IASrB,QAAQ;;;;;;;;;;;IAoBR,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,oBAAoB;IA+B5B,OAAO,CAAC,kBAAkB;IAiB1B,qBAAqB,IAAI,MAAM;IAQ/B,oBAAoB,IAAI,MAAM;IAkB9B,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;CAU1D"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TelemetryRateLimiter = void 0;
4
+ const telemetry_types_1 = require("./telemetry-types");
5
+ const logger_1 = require("../utils/logger");
6
+ class TelemetryRateLimiter {
7
+ constructor(windowMs = telemetry_types_1.TELEMETRY_CONFIG.RATE_LIMIT_WINDOW, maxEvents = telemetry_types_1.TELEMETRY_CONFIG.RATE_LIMIT_MAX_EVENTS) {
8
+ this.eventTimestamps = [];
9
+ this.droppedEventsCount = 0;
10
+ this.lastWarningTime = 0;
11
+ this.WARNING_INTERVAL = 60000;
12
+ this.MAX_ARRAY_SIZE = 1000;
13
+ this.windowMs = windowMs;
14
+ this.maxEvents = maxEvents;
15
+ }
16
+ allow() {
17
+ const now = Date.now();
18
+ this.cleanupOldTimestamps(now);
19
+ if (this.eventTimestamps.length >= this.maxEvents) {
20
+ this.handleRateLimitHit(now);
21
+ return false;
22
+ }
23
+ this.eventTimestamps.push(now);
24
+ return true;
25
+ }
26
+ wouldAllow() {
27
+ const now = Date.now();
28
+ this.cleanupOldTimestamps(now);
29
+ return this.eventTimestamps.length < this.maxEvents;
30
+ }
31
+ getStats() {
32
+ const now = Date.now();
33
+ this.cleanupOldTimestamps(now);
34
+ return {
35
+ currentEvents: this.eventTimestamps.length,
36
+ maxEvents: this.maxEvents,
37
+ windowMs: this.windowMs,
38
+ droppedEvents: this.droppedEventsCount,
39
+ utilizationPercent: Math.round((this.eventTimestamps.length / this.maxEvents) * 100),
40
+ remainingCapacity: Math.max(0, this.maxEvents - this.eventTimestamps.length),
41
+ arraySize: this.eventTimestamps.length,
42
+ maxArraySize: this.MAX_ARRAY_SIZE,
43
+ memoryUsagePercent: Math.round((this.eventTimestamps.length / this.MAX_ARRAY_SIZE) * 100)
44
+ };
45
+ }
46
+ reset() {
47
+ this.eventTimestamps = [];
48
+ this.droppedEventsCount = 0;
49
+ this.lastWarningTime = 0;
50
+ }
51
+ cleanupOldTimestamps(now) {
52
+ const windowStart = now - this.windowMs;
53
+ let i = 0;
54
+ while (i < this.eventTimestamps.length && this.eventTimestamps[i] < windowStart) {
55
+ i++;
56
+ }
57
+ if (i > 0) {
58
+ this.eventTimestamps.splice(0, i);
59
+ }
60
+ if (this.eventTimestamps.length > this.MAX_ARRAY_SIZE) {
61
+ const excess = this.eventTimestamps.length - this.MAX_ARRAY_SIZE;
62
+ this.eventTimestamps.splice(0, excess);
63
+ if (now - this.lastWarningTime > this.WARNING_INTERVAL) {
64
+ logger_1.logger.debug(`Telemetry rate limiter array trimmed: removed ${excess} oldest timestamps to prevent memory leak. ` +
65
+ `Array size: ${this.eventTimestamps.length}/${this.MAX_ARRAY_SIZE}`);
66
+ this.lastWarningTime = now;
67
+ }
68
+ }
69
+ }
70
+ handleRateLimitHit(now) {
71
+ this.droppedEventsCount++;
72
+ if (now - this.lastWarningTime > this.WARNING_INTERVAL) {
73
+ const stats = this.getStats();
74
+ logger_1.logger.debug(`Telemetry rate limit reached: ${stats.currentEvents}/${stats.maxEvents} events in ${stats.windowMs}ms window. ` +
75
+ `Total dropped: ${stats.droppedEvents}`);
76
+ this.lastWarningTime = now;
77
+ }
78
+ }
79
+ getDroppedEventsCount() {
80
+ return this.droppedEventsCount;
81
+ }
82
+ getTimeUntilCapacity() {
83
+ const now = Date.now();
84
+ this.cleanupOldTimestamps(now);
85
+ if (this.eventTimestamps.length < this.maxEvents) {
86
+ return 0;
87
+ }
88
+ const oldestRelevant = this.eventTimestamps[this.eventTimestamps.length - this.maxEvents];
89
+ const timeUntilExpiry = Math.max(0, (oldestRelevant + this.windowMs) - now);
90
+ return timeUntilExpiry;
91
+ }
92
+ updateLimits(windowMs, maxEvents) {
93
+ if (windowMs !== undefined && windowMs > 0) {
94
+ this.windowMs = windowMs;
95
+ }
96
+ if (maxEvents !== undefined && maxEvents > 0) {
97
+ this.maxEvents = maxEvents;
98
+ }
99
+ logger_1.logger.debug(`Rate limiter updated: ${this.maxEvents} events per ${this.windowMs}ms`);
100
+ }
101
+ }
102
+ exports.TelemetryRateLimiter = TelemetryRateLimiter;
103
+ //# sourceMappingURL=rate-limiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/telemetry/rate-limiter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { TelemetryErrorType, TelemetryErrorContext } from './telemetry-types';
2
+ export { TelemetryErrorType, TelemetryErrorContext } from './telemetry-types';
3
+ export declare class TelemetryError extends Error {
4
+ readonly type: TelemetryErrorType;
5
+ readonly context?: Record<string, any>;
6
+ readonly timestamp: number;
7
+ readonly retryable: boolean;
8
+ constructor(type: TelemetryErrorType, message: string, context?: Record<string, any>, retryable?: boolean);
9
+ toContext(): TelemetryErrorContext;
10
+ log(): void;
11
+ }
12
+ export declare class TelemetryCircuitBreaker {
13
+ private failureCount;
14
+ private lastFailureTime;
15
+ private state;
16
+ private readonly failureThreshold;
17
+ private readonly resetTimeout;
18
+ private readonly halfOpenRequests;
19
+ private halfOpenCount;
20
+ constructor(failureThreshold?: number, resetTimeout?: number, halfOpenRequests?: number);
21
+ shouldAllow(): boolean;
22
+ recordSuccess(): void;
23
+ recordFailure(error?: Error): void;
24
+ getState(): {
25
+ state: string;
26
+ failureCount: number;
27
+ canRetry: boolean;
28
+ };
29
+ reset(): void;
30
+ }
31
+ export declare class TelemetryErrorAggregator {
32
+ private errors;
33
+ private errorDetails;
34
+ private readonly maxDetails;
35
+ record(error: TelemetryError): void;
36
+ getStats(): {
37
+ totalErrors: number;
38
+ errorsByType: Record<string, number>;
39
+ mostCommonError?: string;
40
+ recentErrors: TelemetryErrorContext[];
41
+ };
42
+ reset(): void;
43
+ }
44
+ //# sourceMappingURL=telemetry-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-error.d.ts","sourceRoot":"","sources":["../../src/telemetry/telemetry-error.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI9E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE9E,qBAAa,cAAe,SAAQ,KAAK;IACvC,SAAgB,IAAI,EAAE,kBAAkB,CAAC;IACzC,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,SAAS,EAAE,OAAO,CAAC;gBAGjC,IAAI,EAAE,kBAAkB,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,SAAS,GAAE,OAAe;IAgB5B,SAAS,IAAI,qBAAqB;IAalC,GAAG,IAAI,IAAI;CAaZ;AAKD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,KAAK,CAA6C;IAE1D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,aAAa,CAAa;gBAGhC,gBAAgB,GAAE,MAAU,EAC5B,YAAY,GAAE,MAAc,EAC5B,gBAAgB,GAAE,MAAU;IAU9B,WAAW,IAAI,OAAO;IAiCtB,aAAa,IAAI,IAAI;IAiBrB,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI;IAqBlC,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE;IAWtE,KAAK,IAAI,IAAI;CAMd;AAKD,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAK1C,MAAM,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAenC,QAAQ,IAAI;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,qBAAqB,EAAE,CAAC;KACvC;IA2BD,KAAK,IAAI,IAAI;CAId"}