flow-debugger 1.9.7 → 1.9.9

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 (78) hide show
  1. package/ENHANCED_OBSERVABILITY.md +835 -0
  2. package/IMPLEMENTATION_SUMMARY.md +466 -0
  3. package/README.md +147 -8
  4. package/bin/cli.js +1 -1
  5. package/dist/cjs/core/Alerting.js +310 -0
  6. package/dist/cjs/core/Alerting.js.map +1 -0
  7. package/dist/cjs/core/AnomalyDetection.js +223 -0
  8. package/dist/cjs/core/AnomalyDetection.js.map +1 -0
  9. package/dist/cjs/core/DependencyGraph.js +251 -0
  10. package/dist/cjs/core/DependencyGraph.js.map +1 -0
  11. package/dist/cjs/core/DistributedTracing.js +245 -0
  12. package/dist/cjs/core/DistributedTracing.js.map +1 -0
  13. package/dist/cjs/core/ErrorClustering.js +257 -0
  14. package/dist/cjs/core/ErrorClustering.js.map +1 -0
  15. package/dist/cjs/core/LogCorrelation.js +242 -0
  16. package/dist/cjs/core/LogCorrelation.js.map +1 -0
  17. package/dist/cjs/core/Metrics.js +301 -0
  18. package/dist/cjs/core/Metrics.js.map +1 -0
  19. package/dist/cjs/core/RootCause.js +107 -9
  20. package/dist/cjs/core/RootCause.js.map +1 -1
  21. package/dist/cjs/core/TrendAnalysis.js +254 -0
  22. package/dist/cjs/core/TrendAnalysis.js.map +1 -0
  23. package/dist/cjs/core/types.js +14 -0
  24. package/dist/cjs/core/types.js.map +1 -1
  25. package/dist/cjs/index.js +27 -1
  26. package/dist/cjs/index.js.map +1 -1
  27. package/dist/cjs/middleware/express.js +105 -4
  28. package/dist/cjs/middleware/express.js.map +1 -1
  29. package/dist/esm/core/Alerting.js +305 -0
  30. package/dist/esm/core/Alerting.js.map +1 -0
  31. package/dist/esm/core/AnomalyDetection.js +218 -0
  32. package/dist/esm/core/AnomalyDetection.js.map +1 -0
  33. package/dist/esm/core/DependencyGraph.js +246 -0
  34. package/dist/esm/core/DependencyGraph.js.map +1 -0
  35. package/dist/esm/core/DistributedTracing.js +240 -0
  36. package/dist/esm/core/DistributedTracing.js.map +1 -0
  37. package/dist/esm/core/ErrorClustering.js +252 -0
  38. package/dist/esm/core/ErrorClustering.js.map +1 -0
  39. package/dist/esm/core/LogCorrelation.js +236 -0
  40. package/dist/esm/core/LogCorrelation.js.map +1 -0
  41. package/dist/esm/core/Metrics.js +297 -0
  42. package/dist/esm/core/Metrics.js.map +1 -0
  43. package/dist/esm/core/RootCause.js +107 -9
  44. package/dist/esm/core/RootCause.js.map +1 -1
  45. package/dist/esm/core/TrendAnalysis.js +250 -0
  46. package/dist/esm/core/TrendAnalysis.js.map +1 -0
  47. package/dist/esm/core/types.js +14 -0
  48. package/dist/esm/core/types.js.map +1 -1
  49. package/dist/esm/index.js +10 -0
  50. package/dist/esm/index.js.map +1 -1
  51. package/dist/esm/middleware/express.js +105 -4
  52. package/dist/esm/middleware/express.js.map +1 -1
  53. package/dist/types/core/Alerting.d.ts +82 -0
  54. package/dist/types/core/Alerting.d.ts.map +1 -0
  55. package/dist/types/core/AnomalyDetection.d.ts +93 -0
  56. package/dist/types/core/AnomalyDetection.d.ts.map +1 -0
  57. package/dist/types/core/DependencyGraph.d.ts +65 -0
  58. package/dist/types/core/DependencyGraph.d.ts.map +1 -0
  59. package/dist/types/core/DistributedTracing.d.ts +92 -0
  60. package/dist/types/core/DistributedTracing.d.ts.map +1 -0
  61. package/dist/types/core/ErrorClustering.d.ts +70 -0
  62. package/dist/types/core/ErrorClustering.d.ts.map +1 -0
  63. package/dist/types/core/LogCorrelation.d.ts +73 -0
  64. package/dist/types/core/LogCorrelation.d.ts.map +1 -0
  65. package/dist/types/core/Metrics.d.ts +73 -0
  66. package/dist/types/core/Metrics.d.ts.map +1 -0
  67. package/dist/types/core/RootCause.d.ts +9 -5
  68. package/dist/types/core/RootCause.d.ts.map +1 -1
  69. package/dist/types/core/TrendAnalysis.d.ts +63 -0
  70. package/dist/types/core/TrendAnalysis.d.ts.map +1 -0
  71. package/dist/types/core/types.d.ts +200 -0
  72. package/dist/types/core/types.d.ts.map +1 -1
  73. package/dist/types/index.d.ts +9 -1
  74. package/dist/types/index.d.ts.map +1 -1
  75. package/dist/types/middleware/express.d.ts +12 -0
  76. package/dist/types/middleware/express.d.ts.map +1 -1
  77. package/package.json +3 -3
  78. package/test-results.json +1 -0
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────
3
+ // flow-debugger — Dependency Graph System
4
+ // Maps service dependencies and their health
5
+ // ─────────────────────────────────────────────────────────────
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DependencyGraphManager = void 0;
8
+ exports.visualizeDependencyGraph = visualizeDependencyGraph;
9
+ /**
10
+ * Dependency Graph Manager - Tracks service dependencies and relationships
11
+ */
12
+ class DependencyGraphManager {
13
+ constructor() {
14
+ this.nodes = new Map();
15
+ this.edges = new Map();
16
+ this.lastUpdated = new Date();
17
+ }
18
+ /**
19
+ * Process a trace and update dependency graph
20
+ */
21
+ processTrace(trace) {
22
+ // Create/update endpoint node
23
+ const endpointId = `${trace.method}:${trace.endpoint}`;
24
+ this.updateNode(endpointId, trace.endpoint, 'internal', {
25
+ avgLatency: trace.totalDuration,
26
+ errorRate: trace.classification === 'ERROR' || trace.classification === 'CRITICAL' ? 1 : 0,
27
+ requestCount: 1,
28
+ });
29
+ // Process each step
30
+ trace.steps.forEach(step => {
31
+ if (step.service !== 'internal') {
32
+ const serviceId = step.service;
33
+ this.updateNode(serviceId, this.getServiceName(step.service), step.service, {
34
+ avgLatency: step.duration,
35
+ errorRate: step.status === 'error' || step.status === 'timeout' ? 1 : 0,
36
+ requestCount: 1,
37
+ });
38
+ // Create/update edge from endpoint to service
39
+ this.updateEdge(endpointId, serviceId, {
40
+ callCount: 1,
41
+ avgLatency: step.duration,
42
+ errorCount: step.status === 'error' || step.status === 'timeout' ? 1 : 0,
43
+ });
44
+ }
45
+ });
46
+ this.lastUpdated = new Date();
47
+ }
48
+ /**
49
+ * Get the complete dependency graph
50
+ */
51
+ getGraph() {
52
+ return {
53
+ nodes: Array.from(this.nodes.values()),
54
+ edges: this.getAllEdges(),
55
+ updatedAt: this.lastUpdated,
56
+ };
57
+ }
58
+ /**
59
+ * Get node by ID
60
+ */
61
+ getNode(id) {
62
+ return this.nodes.get(id);
63
+ }
64
+ /**
65
+ * Get all nodes
66
+ */
67
+ getNodes() {
68
+ return Array.from(this.nodes.values());
69
+ }
70
+ /**
71
+ * Get edges for a node
72
+ */
73
+ getEdges(nodeId) {
74
+ const nodeEdges = this.edges.get(nodeId);
75
+ if (!nodeEdges)
76
+ return [];
77
+ return Array.from(nodeEdges.values());
78
+ }
79
+ /**
80
+ * Get all edges
81
+ */
82
+ getAllEdges() {
83
+ const allEdges = [];
84
+ this.edges.forEach((targetMap, sourceId) => {
85
+ targetMap.forEach(edge => {
86
+ allEdges.push({ ...edge, from: sourceId });
87
+ });
88
+ });
89
+ return allEdges;
90
+ }
91
+ /**
92
+ * Get critical path (highest latency chain)
93
+ */
94
+ getCriticalPath() {
95
+ const edges = this.getAllEdges();
96
+ if (edges.length === 0)
97
+ return null;
98
+ // Find root nodes (no incoming edges)
99
+ const targets = new Set(edges.map(e => e.to));
100
+ const roots = Array.from(this.nodes.keys()).filter(id => !targets.has(id));
101
+ if (roots.length === 0)
102
+ return null;
103
+ // DFS to find longest path
104
+ let maxPath = [];
105
+ let maxLatency = 0;
106
+ const dfs = (nodeId, path, latency) => {
107
+ path.push(nodeId);
108
+ latency += this.nodes.get(nodeId)?.avgLatency || 0;
109
+ const outgoing = this.getEdges(nodeId);
110
+ if (outgoing.length === 0) {
111
+ if (latency > maxLatency) {
112
+ maxLatency = latency;
113
+ maxPath = [...path];
114
+ }
115
+ }
116
+ else {
117
+ outgoing.forEach(edge => {
118
+ dfs(edge.to, path, latency + edge.avgLatency);
119
+ });
120
+ }
121
+ path.pop();
122
+ };
123
+ roots.forEach(root => dfs(root, [], 0));
124
+ return maxPath.length > 0 ? { path: maxPath, totalLatency: maxLatency } : null;
125
+ }
126
+ /**
127
+ * Get unhealthy dependencies
128
+ */
129
+ getUnhealthyDependencies() {
130
+ return Array.from(this.nodes.values()).filter(n => n.status !== 'healthy');
131
+ }
132
+ /**
133
+ * Get top slow dependencies
134
+ */
135
+ getTopSlowDependencies(limit = 10) {
136
+ return Array.from(this.nodes.values())
137
+ .sort((a, b) => b.avgLatency - a.avgLatency)
138
+ .slice(0, limit);
139
+ }
140
+ /**
141
+ * Get top error-prone dependencies
142
+ */
143
+ getTopErrorProneDependencies(limit = 10) {
144
+ return Array.from(this.nodes.values())
145
+ .filter(n => n.requestCount > 0)
146
+ .sort((a, b) => b.errorRate - a.errorRate)
147
+ .slice(0, limit);
148
+ }
149
+ /**
150
+ * Clear graph
151
+ */
152
+ clear() {
153
+ this.nodes.clear();
154
+ this.edges.clear();
155
+ }
156
+ updateNode(id, name, type, delta) {
157
+ const existing = this.nodes.get(id);
158
+ if (!existing) {
159
+ this.nodes.set(id, {
160
+ id,
161
+ name,
162
+ type,
163
+ status: 'healthy',
164
+ avgLatency: delta.avgLatency,
165
+ errorRate: delta.errorRate / delta.requestCount,
166
+ requestCount: delta.requestCount,
167
+ });
168
+ }
169
+ else {
170
+ // Exponential moving average
171
+ const alpha = 0.3;
172
+ existing.avgLatency = existing.avgLatency * (1 - alpha) + delta.avgLatency * alpha;
173
+ existing.requestCount += delta.requestCount;
174
+ const totalErrors = existing.errorRate * (existing.requestCount - delta.requestCount) + delta.errorRate;
175
+ existing.errorRate = totalErrors / existing.requestCount;
176
+ // Update status based on error rate
177
+ existing.status = this.calculateStatus(existing.errorRate);
178
+ }
179
+ }
180
+ updateEdge(from, to, delta) {
181
+ if (!this.edges.has(from)) {
182
+ this.edges.set(from, new Map());
183
+ }
184
+ const targetMap = this.edges.get(from);
185
+ const existing = targetMap.get(to);
186
+ if (!existing) {
187
+ targetMap.set(to, {
188
+ from,
189
+ to,
190
+ callCount: delta.callCount,
191
+ avgLatency: delta.avgLatency,
192
+ errorCount: delta.errorCount,
193
+ });
194
+ }
195
+ else {
196
+ // Exponential moving average
197
+ const alpha = 0.3;
198
+ existing.callCount += delta.callCount;
199
+ existing.avgLatency = existing.avgLatency * (1 - alpha) + delta.avgLatency * alpha;
200
+ existing.errorCount += delta.errorCount;
201
+ }
202
+ }
203
+ calculateStatus(errorRate) {
204
+ if (errorRate >= 0.5)
205
+ return 'down';
206
+ if (errorRate >= 0.1)
207
+ return 'degraded';
208
+ return 'healthy';
209
+ }
210
+ getServiceName(service) {
211
+ const names = {
212
+ mongo: 'MongoDB',
213
+ mysql: 'MySQL',
214
+ postgres: 'PostgreSQL',
215
+ redis: 'Redis',
216
+ axios: 'HTTP Client',
217
+ fetch: 'Fetch API',
218
+ stripe: 'Stripe',
219
+ razorpay: 'Razorpay',
220
+ sendgrid: 'SendGrid',
221
+ twilio: 'Twilio',
222
+ external: 'External API',
223
+ internal: 'Internal',
224
+ unknown: 'Unknown',
225
+ };
226
+ return names[service] || service;
227
+ }
228
+ }
229
+ exports.DependencyGraphManager = DependencyGraphManager;
230
+ /**
231
+ * Visualize dependency graph as ASCII (for console)
232
+ */
233
+ function visualizeDependencyGraph(graph) {
234
+ const lines = [];
235
+ lines.push('┌─ Dependency Graph ────────────────────────────┐');
236
+ graph.nodes.forEach(node => {
237
+ const statusIcon = node.status === 'healthy' ? '✔' : node.status === 'degraded' ? '⚠' : '✖';
238
+ lines.push(`│ ${statusIcon} ${node.name.padEnd(20)} ${node.avgLatency.toFixed(0)}ms ${(node.errorRate * 100).toFixed(1)}% errors`);
239
+ // Show outgoing edges
240
+ const edges = graph.edges.filter(e => e.from === node.id);
241
+ edges.forEach(edge => {
242
+ const targetNode = graph.nodes.find(n => n.id === edge.to);
243
+ if (targetNode) {
244
+ lines.push(`│ └─→ ${targetNode.name} (${edge.callCount} calls)`);
245
+ }
246
+ });
247
+ });
248
+ lines.push('└─────────────────────────────────────────────────┘');
249
+ return lines.join('\n');
250
+ }
251
+ //# sourceMappingURL=DependencyGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyGraph.js","sourceRoot":"","sources":["../../../src/core/DependencyGraph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────
3
+ // flow-debugger — Distributed Tracing (W3C Trace Context)
4
+ // Enables multi-service tracing with standard propagation
5
+ // ─────────────────────────────────────────────────────────────
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.SpanManager = exports.DistributedTracer = void 0;
8
+ /**
9
+ * W3C Trace Context implementation
10
+ * Format: traceparent: 00-{traceId}-{spanId}-{traceFlags}
11
+ * https://www.w3.org/TR/trace-context/
12
+ */
13
+ class DistributedTracer {
14
+ /**
15
+ * Generate a 128-bit trace ID (32 hex chars)
16
+ */
17
+ static generateTraceId() {
18
+ const high = this.randomHex(16);
19
+ const low = this.randomHex(16);
20
+ return high + low;
21
+ }
22
+ /**
23
+ * Generate a 64-bit span ID (16 hex chars)
24
+ */
25
+ static generateSpanId() {
26
+ return this.randomHex(16);
27
+ }
28
+ static randomHex(length) {
29
+ const bytes = new Uint8Array(length / 2);
30
+ crypto.getRandomValues(bytes);
31
+ return Array.from(bytes)
32
+ .map(b => b.toString(16).padStart(2, '0'))
33
+ .join('');
34
+ }
35
+ /**
36
+ * Create traceparent header from context
37
+ */
38
+ static createTraceparent(context) {
39
+ const traceFlags = context.sampled ? this.TRACE_FLAG_SAMPLED : this.TRACE_FLAG_NOT_SAMPLED;
40
+ return `${this.TRACEPARENT_VERSION}-${context.traceId}-${context.spanId}-${traceFlags}`;
41
+ }
42
+ /**
43
+ * Parse traceparent header into context
44
+ */
45
+ static parseTraceparent(traceparent) {
46
+ try {
47
+ const parts = traceparent.split('-');
48
+ if (parts.length !== 4)
49
+ return null;
50
+ const [version, traceId, spanId, traceFlags] = parts;
51
+ if (version !== '00')
52
+ return null;
53
+ return {
54
+ traceId,
55
+ spanId,
56
+ parentSpanId: undefined,
57
+ sampled: traceFlags === '01',
58
+ };
59
+ }
60
+ catch {
61
+ return null;
62
+ }
63
+ }
64
+ /**
65
+ * Create tracestate header for vendor-specific data
66
+ */
67
+ static createTracestate(vendorData) {
68
+ return Object.entries(vendorData)
69
+ .map(([key, value]) => `${key}=${value}`)
70
+ .join(',');
71
+ }
72
+ /**
73
+ * Parse tracestate header
74
+ */
75
+ static parseTracestate(tracestate) {
76
+ try {
77
+ return tracestate.split(',').reduce((acc, pair) => {
78
+ const [key, value] = pair.split('=');
79
+ if (key && value) {
80
+ acc[key.trim()] = value.trim();
81
+ }
82
+ return acc;
83
+ }, {});
84
+ }
85
+ catch {
86
+ return {};
87
+ }
88
+ }
89
+ /**
90
+ * Extract context from incoming headers
91
+ */
92
+ static extractContext(headers) {
93
+ const traceparent = headers['traceparent'] || headers['Traceparent'] || headers['TRACEPARENT'];
94
+ if (!traceparent || typeof traceparent !== 'string')
95
+ return null;
96
+ const context = this.parseTraceparent(traceparent);
97
+ if (!context)
98
+ return null;
99
+ // Extract tracestate if present
100
+ const tracestate = headers['tracestate'] || headers['Tracestate'] || headers['TRACESTATE'];
101
+ if (tracestate && typeof tracestate === 'string') {
102
+ context.tracestate = this.parseTracestate(tracestate);
103
+ }
104
+ return context;
105
+ }
106
+ /**
107
+ * Inject context into outgoing headers
108
+ */
109
+ static injectContext(context, headers) {
110
+ headers['traceparent'] = this.createTraceparent(context);
111
+ if (context.tracestate && Object.keys(context.tracestate).length > 0) {
112
+ headers['tracestate'] = this.createTracestate(context.tracestate);
113
+ }
114
+ }
115
+ /**
116
+ * Create a new span context for child operations
117
+ */
118
+ static createChildContext(parent) {
119
+ return {
120
+ traceId: parent.traceId,
121
+ spanId: this.generateSpanId(),
122
+ parentSpanId: parent.spanId,
123
+ sampled: parent.sampled,
124
+ tracestate: parent.tracestate ? { ...parent.tracestate } : undefined,
125
+ };
126
+ }
127
+ /**
128
+ * Create a root context for new traces
129
+ */
130
+ static createRootContext(sampled = true) {
131
+ return {
132
+ traceId: this.generateTraceId(),
133
+ spanId: this.generateSpanId(),
134
+ parentSpanId: undefined,
135
+ sampled,
136
+ };
137
+ }
138
+ }
139
+ exports.DistributedTracer = DistributedTracer;
140
+ DistributedTracer.TRACEPARENT_VERSION = '00';
141
+ DistributedTracer.TRACE_FLAG_SAMPLED = '01';
142
+ DistributedTracer.TRACE_FLAG_NOT_SAMPLED = '00';
143
+ /**
144
+ * Span manager for nested span tracking
145
+ */
146
+ class SpanManager {
147
+ constructor() {
148
+ this.spans = new Map();
149
+ }
150
+ /**
151
+ * Start a new span
152
+ */
153
+ startSpan(name, context, parentSpanId) {
154
+ const span = {
155
+ id: context.spanId,
156
+ traceId: context.traceId,
157
+ parentSpanId: parentSpanId || context.parentSpanId,
158
+ name,
159
+ startTime: performance.now(),
160
+ endTime: undefined,
161
+ duration: undefined,
162
+ status: 'pending',
163
+ attributes: {},
164
+ events: [],
165
+ context,
166
+ };
167
+ this.spans.set(span.id, span);
168
+ if (!this.rootSpanId && !parentSpanId) {
169
+ this.rootSpanId = span.id;
170
+ }
171
+ return span;
172
+ }
173
+ /**
174
+ * End a span
175
+ */
176
+ endSpan(spanId, status = 'success') {
177
+ const span = this.spans.get(spanId);
178
+ if (!span)
179
+ return null;
180
+ span.endTime = performance.now();
181
+ span.duration = span.endTime - span.startTime;
182
+ span.status = status;
183
+ return span;
184
+ }
185
+ /**
186
+ * Add attribute to a span
187
+ */
188
+ setAttribute(spanId, key, value) {
189
+ const span = this.spans.get(spanId);
190
+ if (span) {
191
+ span.attributes[key] = value;
192
+ }
193
+ }
194
+ /**
195
+ * Add event to a span
196
+ */
197
+ addEvent(spanId, name, attributes) {
198
+ const span = this.spans.get(spanId);
199
+ if (span) {
200
+ span.events.push({
201
+ name,
202
+ timestamp: performance.now(),
203
+ attributes,
204
+ });
205
+ }
206
+ }
207
+ /**
208
+ * Get span by ID
209
+ */
210
+ getSpan(spanId) {
211
+ return this.spans.get(spanId);
212
+ }
213
+ /**
214
+ * Get all spans in this trace
215
+ */
216
+ getAllSpans() {
217
+ return Array.from(this.spans.values());
218
+ }
219
+ /**
220
+ * Get span hierarchy (tree structure)
221
+ */
222
+ getSpanTree() {
223
+ const spans = this.getAllSpans();
224
+ const rootSpans = spans.filter(s => !s.parentSpanId);
225
+ const spanMap = new Map(spans.map(s => [s.id, { ...s, children: [] }]));
226
+ spans.forEach(span => {
227
+ if (span.parentSpanId) {
228
+ const parent = spanMap.get(span.parentSpanId);
229
+ if (parent) {
230
+ parent.children.push(spanMap.get(span.id));
231
+ }
232
+ }
233
+ });
234
+ return rootSpans.map(s => spanMap.get(s.id));
235
+ }
236
+ /**
237
+ * Clear all spans
238
+ */
239
+ clear() {
240
+ this.spans.clear();
241
+ this.rootSpanId = undefined;
242
+ }
243
+ }
244
+ exports.SpanManager = SpanManager;
245
+ //# sourceMappingURL=DistributedTracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DistributedTracing.js","sourceRoot":"","sources":["../../../src/core/DistributedTracing.ts"],"names":[],"mappings":"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"}