flow-debugger 1.9.6 → 1.9.7
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.
- package/dashboard/app.js +505 -415
- package/dist/cjs/core/RootCause.js +199 -42
- package/dist/cjs/core/RootCause.js.map +1 -1
- package/dist/cjs/core/Timeline.js +56 -3
- package/dist/cjs/core/Timeline.js.map +1 -1
- package/dist/cjs/core/TraceEngine.js +22 -1
- package/dist/cjs/core/TraceEngine.js.map +1 -1
- package/dist/cjs/core/types.js +1 -0
- package/dist/cjs/core/types.js.map +1 -1
- package/dist/cjs/middleware/express.js +44 -19
- package/dist/cjs/middleware/express.js.map +1 -1
- package/dist/esm/core/RootCause.js +199 -42
- package/dist/esm/core/RootCause.js.map +1 -1
- package/dist/esm/core/Timeline.js +56 -3
- package/dist/esm/core/Timeline.js.map +1 -1
- package/dist/esm/core/TraceEngine.js +22 -1
- package/dist/esm/core/TraceEngine.js.map +1 -1
- package/dist/esm/core/types.js +1 -0
- package/dist/esm/core/types.js.map +1 -1
- package/dist/esm/middleware/express.js +44 -19
- package/dist/esm/middleware/express.js.map +1 -1
- package/dist/types/core/RootCause.d.ts +21 -7
- package/dist/types/core/RootCause.d.ts.map +1 -1
- package/dist/types/core/Timeline.d.ts +6 -1
- package/dist/types/core/Timeline.d.ts.map +1 -1
- package/dist/types/core/TraceEngine.d.ts +7 -0
- package/dist/types/core/TraceEngine.d.ts.map +1 -1
- package/dist/types/core/types.d.ts +7 -0
- package/dist/types/core/types.d.ts.map +1 -1
- package/dist/types/middleware/express.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -6,61 +6,173 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.detectRootCause = detectRootCause;
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Enhanced root cause detection with suggestions and detailed analysis.
|
|
10
10
|
*
|
|
11
11
|
* Algorithm:
|
|
12
|
-
* 1.
|
|
13
|
-
* 2.
|
|
14
|
-
* 3.
|
|
15
|
-
* 4.
|
|
12
|
+
* 1. Analyze error patterns (timeout, connection, validation, etc.)
|
|
13
|
+
* 2. Detect slow queries and bottlenecks
|
|
14
|
+
* 3. Identify memory/performance issues
|
|
15
|
+
* 4. Provide actionable suggestions
|
|
16
16
|
*/
|
|
17
17
|
function detectRootCause(steps, statusCode, config) {
|
|
18
18
|
if (steps.length === 0)
|
|
19
19
|
return null;
|
|
20
20
|
const slowThreshold = config.slowThreshold ?? 300;
|
|
21
|
+
const slowQueryThreshold = config.slowQueryThreshold ?? 300;
|
|
22
|
+
const result = {
|
|
23
|
+
cause: '',
|
|
24
|
+
step: '',
|
|
25
|
+
service: 'unknown',
|
|
26
|
+
confidence: 0,
|
|
27
|
+
suggestions: [],
|
|
28
|
+
contributingFactors: []
|
|
29
|
+
};
|
|
21
30
|
// 1. Look for timed-out steps (highest priority)
|
|
22
31
|
const timedOut = steps.find(s => s.status === 'timeout');
|
|
23
32
|
if (timedOut) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
33
|
+
result.cause = `${timedOut.name} timed out`;
|
|
34
|
+
result.step = timedOut.name;
|
|
35
|
+
result.service = timedOut.service;
|
|
36
|
+
result.confidence = 100;
|
|
37
|
+
result.suggestions = [
|
|
38
|
+
`Increase timeout for ${getServiceLabel(timedOut.service)} operations`,
|
|
39
|
+
`Check ${getServiceLabel(timedOut.service)} server load and connection pool`,
|
|
40
|
+
'Add retry logic with exponential backoff',
|
|
41
|
+
'Consider implementing circuit breaker pattern'
|
|
42
|
+
];
|
|
43
|
+
return result;
|
|
30
44
|
}
|
|
31
|
-
// 2.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
// 2. Analyze failed steps with detailed error detection
|
|
46
|
+
const failedSteps = steps.filter(s => s.status === 'error');
|
|
47
|
+
if (failedSteps.length > 0) {
|
|
48
|
+
const firstFailed = failedSteps[0];
|
|
49
|
+
const errorDetails = firstFailed.metadata?.errorDetails;
|
|
50
|
+
// ✅ Enhanced error pattern detection
|
|
51
|
+
if (errorDetails) {
|
|
52
|
+
const errorMessage = errorDetails.message?.toLowerCase() || '';
|
|
53
|
+
const errorCode = errorDetails.code;
|
|
54
|
+
// Database timeout
|
|
55
|
+
if (errorMessage.includes('timeout') || errorCode === 'ETIMEDOUT') {
|
|
56
|
+
result.cause = `Database timeout in ${firstFailed.name}`;
|
|
57
|
+
result.step = firstFailed.name;
|
|
58
|
+
result.service = firstFailed.service;
|
|
59
|
+
result.confidence = 90;
|
|
60
|
+
result.errorDetails = errorDetails;
|
|
61
|
+
result.suggestions = [
|
|
62
|
+
'Increase connection pool size',
|
|
63
|
+
'Add query timeout configuration',
|
|
64
|
+
'Check database server load and slow query logs',
|
|
65
|
+
'Add indexes to improve query performance',
|
|
66
|
+
'Consider query optimization or caching'
|
|
67
|
+
];
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
// Connection refused
|
|
71
|
+
if (errorCode === 'ECONNREFUSED') {
|
|
72
|
+
result.cause = `Service unavailable: ${getServiceLabel(firstFailed.service)} connection refused`;
|
|
73
|
+
result.step = firstFailed.name;
|
|
74
|
+
result.service = firstFailed.service;
|
|
75
|
+
result.confidence = 95;
|
|
76
|
+
result.errorDetails = errorDetails;
|
|
77
|
+
result.suggestions = [
|
|
78
|
+
`Check if ${getServiceLabel(firstFailed.service)} service is running`,
|
|
79
|
+
'Verify connection string and port configuration',
|
|
80
|
+
'Check firewall rules and network connectivity',
|
|
81
|
+
'Review service health and restart if necessary'
|
|
82
|
+
];
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
// Authentication/Authorization errors
|
|
86
|
+
if (errorCode === 'EAUTH' || errorCode === 'UNAUTHORIZED' || errorDetails.name === 'UnauthorizedError') {
|
|
87
|
+
result.cause = 'Authentication/Authorization failed';
|
|
88
|
+
result.step = firstFailed.name;
|
|
89
|
+
result.service = firstFailed.service;
|
|
90
|
+
result.confidence = 100;
|
|
91
|
+
result.errorDetails = errorDetails;
|
|
92
|
+
result.suggestions = [
|
|
93
|
+
'Verify API keys/tokens are valid and not expired',
|
|
94
|
+
'Check authentication middleware configuration',
|
|
95
|
+
'Review user permissions and roles',
|
|
96
|
+
'Ensure CORS policy allows the request origin'
|
|
97
|
+
];
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
// Validation errors
|
|
101
|
+
if (errorDetails.name === 'ValidationError' || errorCode === 'VALIDATION_ERROR') {
|
|
102
|
+
result.cause = 'Input validation failed';
|
|
103
|
+
result.step = firstFailed.name;
|
|
104
|
+
result.service = firstFailed.service;
|
|
105
|
+
result.confidence = 100;
|
|
106
|
+
result.errorDetails = errorDetails;
|
|
107
|
+
result.suggestions = [
|
|
108
|
+
`Fix validation error: ${errorDetails.message}`,
|
|
109
|
+
'Validate input data before sending to API',
|
|
110
|
+
'Check required fields and data types',
|
|
111
|
+
'Review schema validation rules'
|
|
112
|
+
];
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
// Memory issues
|
|
116
|
+
if (errorMessage.includes('memory') || errorCode === 'ENOMEM') {
|
|
117
|
+
result.cause = 'Memory exhausted';
|
|
118
|
+
result.step = firstFailed.name;
|
|
119
|
+
result.service = firstFailed.service;
|
|
120
|
+
result.confidence = 85;
|
|
121
|
+
result.errorDetails = errorDetails;
|
|
122
|
+
result.suggestions = [
|
|
123
|
+
'Increase Node.js memory limit (--max-old-space-size)',
|
|
124
|
+
'Check for memory leaks in application code',
|
|
125
|
+
'Optimize large data processing (use streams)',
|
|
126
|
+
'Implement pagination for large datasets',
|
|
127
|
+
'Monitor memory usage with profiling tools'
|
|
128
|
+
];
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
// Rate limiting
|
|
132
|
+
if (errorCode === 'ERATELIMIT' || statusCode === 429) {
|
|
133
|
+
result.cause = 'Rate limit exceeded';
|
|
134
|
+
result.step = firstFailed.name;
|
|
135
|
+
result.service = firstFailed.service;
|
|
136
|
+
result.confidence = 100;
|
|
137
|
+
result.errorDetails = errorDetails;
|
|
138
|
+
result.suggestions = [
|
|
139
|
+
'Implement request throttling',
|
|
140
|
+
'Add exponential backoff for retries',
|
|
141
|
+
'Cache frequently accessed data',
|
|
142
|
+
'Consider upgrading API plan for higher limits'
|
|
143
|
+
];
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
43
146
|
}
|
|
147
|
+
// Generic error fallback
|
|
148
|
+
result.cause = `${firstFailed.name} failed: ${firstFailed.error || 'unknown error'}`;
|
|
149
|
+
result.step = firstFailed.name;
|
|
150
|
+
result.service = firstFailed.service;
|
|
151
|
+
result.confidence = statusCode && statusCode >= 500 ? 90 : 80;
|
|
152
|
+
result.errorDetails = errorDetails;
|
|
153
|
+
result.suggestions = [
|
|
154
|
+
'Check error logs for more details',
|
|
155
|
+
'Review recent code changes',
|
|
156
|
+
'Verify external service status',
|
|
157
|
+
'Test with simplified input data'
|
|
158
|
+
];
|
|
159
|
+
return result;
|
|
44
160
|
}
|
|
45
|
-
// 3.
|
|
46
|
-
const failedStep = steps.find(s => s.status === 'error');
|
|
47
|
-
if (failedStep) {
|
|
48
|
-
return {
|
|
49
|
-
cause: `${failedStep.name} failed: ${failedStep.error || 'unknown error'}`,
|
|
50
|
-
step: failedStep.name,
|
|
51
|
-
service: failedStep.service,
|
|
52
|
-
confidence: statusCode && statusCode >= 400 ? 90 : 80,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
// 4. Look for slow steps
|
|
161
|
+
// 3. Analyze slow requests
|
|
56
162
|
const slowSteps = steps.filter(s => s.duration > slowThreshold);
|
|
57
163
|
if (slowSteps.length > 0) {
|
|
58
|
-
//
|
|
164
|
+
// Find the slowest step
|
|
59
165
|
const slowest = slowSteps.reduce((a, b) => (a.duration > b.duration ? a : b));
|
|
60
166
|
const totalDuration = steps.reduce((sum, s) => sum + s.duration, 0);
|
|
61
167
|
const ratio = slowest.duration / totalDuration;
|
|
168
|
+
// Add contributing factors
|
|
169
|
+
result.contributingFactors = slowSteps.map(s => ({
|
|
170
|
+
step: s.name,
|
|
171
|
+
duration: s.duration,
|
|
172
|
+
service: s.service
|
|
173
|
+
}));
|
|
62
174
|
// Confidence scales with how much the step dominates total time
|
|
63
|
-
let confidence = 50;
|
|
175
|
+
let confidence = 50;
|
|
64
176
|
if (ratio > 0.8)
|
|
65
177
|
confidence = 95;
|
|
66
178
|
else if (ratio > 0.6)
|
|
@@ -69,12 +181,57 @@ function detectRootCause(steps, statusCode, config) {
|
|
|
69
181
|
confidence = 70;
|
|
70
182
|
else if (ratio > 0.2)
|
|
71
183
|
confidence = 60;
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
184
|
+
result.cause = `Slow ${getServiceLabel(slowest.service)} query: ${slowest.name} (${Math.round(slowest.duration)}ms)`;
|
|
185
|
+
result.step = slowest.name;
|
|
186
|
+
result.service = slowest.service;
|
|
187
|
+
result.confidence = confidence;
|
|
188
|
+
// Generate suggestions based on service type
|
|
189
|
+
if (slowest.service === 'mongo') {
|
|
190
|
+
result.suggestions = [
|
|
191
|
+
`Add index to improve MongoDB query: ${slowest.name}`,
|
|
192
|
+
'Review query with MongoDB profiler',
|
|
193
|
+
'Consider covering indexes for frequently queried fields',
|
|
194
|
+
'Use projection to limit returned fields',
|
|
195
|
+
'Check for collection scans (COLLSCAN) in explain plan'
|
|
196
|
+
];
|
|
197
|
+
}
|
|
198
|
+
else if (slowest.service === 'mysql' || slowest.service === 'postgres') {
|
|
199
|
+
result.suggestions = [
|
|
200
|
+
`Add index to improve SQL query: ${slowest.name}`,
|
|
201
|
+
'Run EXPLAIN ANALYZE on the query',
|
|
202
|
+
'Check for full table scans',
|
|
203
|
+
'Consider query optimization or denormalization',
|
|
204
|
+
'Review connection pool configuration'
|
|
205
|
+
];
|
|
206
|
+
}
|
|
207
|
+
else if (slowest.service === 'redis') {
|
|
208
|
+
result.suggestions = [
|
|
209
|
+
`Optimize Redis operation: ${slowest.name}`,
|
|
210
|
+
'Check Redis memory usage and eviction policy',
|
|
211
|
+
'Use pipelining for multiple operations',
|
|
212
|
+
'Consider using Redis clusters for high load',
|
|
213
|
+
'Review key expiration policies'
|
|
214
|
+
];
|
|
215
|
+
}
|
|
216
|
+
else if (slowest.service === 'axios' || slowest.service === 'fetch') {
|
|
217
|
+
result.suggestions = [
|
|
218
|
+
`Optimize HTTP request: ${slowest.name}`,
|
|
219
|
+
'Add timeout configuration',
|
|
220
|
+
'Implement request caching',
|
|
221
|
+
'Use connection pooling',
|
|
222
|
+
'Check external API response times'
|
|
223
|
+
];
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
result.suggestions = [
|
|
227
|
+
`Optimize slow operation: ${slowest.name}`,
|
|
228
|
+
'Profile the code to identify bottlenecks',
|
|
229
|
+
'Consider caching results',
|
|
230
|
+
'Review algorithm complexity',
|
|
231
|
+
'Add performance monitoring'
|
|
232
|
+
];
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
78
235
|
}
|
|
79
236
|
return null;
|
|
80
237
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RootCause.js","sourceRoot":"","sources":["../../../src/core/RootCause.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,uCAAuC;AACvC,kEAAkE;AAClE,gEAAgE;;
|
|
1
|
+
{"version":3,"file":"RootCause.js","sourceRoot":"","sources":["../../../src/core/RootCause.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,9 +29,14 @@ const CYAN = '\x1b[36m';
|
|
|
29
29
|
* │ [0ms] Request start
|
|
30
30
|
* │ [2ms] DB find user ✔ (14ms) [mongo]
|
|
31
31
|
* │ [16ms] Redis cache ❌ (3ms) [redis]
|
|
32
|
+
* │ └─ Connection refused
|
|
32
33
|
* │ [20ms] Response 200
|
|
33
34
|
* │
|
|
34
|
-
* │
|
|
35
|
+
* │ 🔍 Root cause: Redis cache failed: connection refused
|
|
36
|
+
* │ Service: redis | Confidence: 95%
|
|
37
|
+
* │ 💡 Suggestions:
|
|
38
|
+
* │ 1. Check if Redis service is running
|
|
39
|
+
* │ 2. Verify connection string and port
|
|
35
40
|
* │ Classification: ERROR
|
|
36
41
|
* │ Total: 20ms
|
|
37
42
|
* └────────────────────────────────────────────────────
|
|
@@ -41,6 +46,10 @@ function renderTimeline(trace, logger = console.log) {
|
|
|
41
46
|
const divider = '─'.repeat(50);
|
|
42
47
|
lines.push('');
|
|
43
48
|
lines.push(`${CYAN}┌─── flow-debugger ── ${trace.traceId} ── ${trace.method} ${trace.endpoint} ───${RESET}`);
|
|
49
|
+
// Status line with emoji
|
|
50
|
+
const statusIcon = trace.classification === 'ERROR' || trace.classification === 'CRITICAL' ? '🔴' :
|
|
51
|
+
trace.classification === 'WARN' ? '🟡' : '🟢';
|
|
52
|
+
lines.push(`${DIM}│ ${statusIcon} Status: ${trace.statusCode || '—'} | Duration: ${Math.round(trace.totalDuration)}ms | Classification: ${trace.classification}${RESET}`);
|
|
44
53
|
lines.push(`${DIM}│ [0ms] Request start${RESET}`);
|
|
45
54
|
for (const step of trace.steps) {
|
|
46
55
|
const offset = Math.round(step.startTime);
|
|
@@ -51,8 +60,34 @@ function renderTimeline(trace, logger = console.log) {
|
|
|
51
60
|
const line = `│ [${offset}ms]${' '.repeat(Math.max(1, 5 - String(offset).length))}` +
|
|
52
61
|
`${levelColor}${step.name} ${icon} (${dur}ms)${RESET}${serviceTag}`;
|
|
53
62
|
lines.push(line);
|
|
63
|
+
// ✅ Enhanced error display with full details
|
|
54
64
|
if (step.error) {
|
|
55
65
|
lines.push(`│ ${DIM}└─ ${step.error}${RESET}`);
|
|
66
|
+
// Show error stack trace (first line only)
|
|
67
|
+
if (step.stackTrace) {
|
|
68
|
+
const stackLine = step.stackTrace.split('\n')[1]?.trim();
|
|
69
|
+
if (stackLine) {
|
|
70
|
+
lines.push(`│ ${DIM} at ${stackLine}${RESET}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Show error details from metadata
|
|
74
|
+
const errorDetails = step.metadata?.errorDetails;
|
|
75
|
+
if (errorDetails) {
|
|
76
|
+
if (errorDetails.code) {
|
|
77
|
+
lines.push(`│ ${DIM} Code: ${errorDetails.code}${RESET}`);
|
|
78
|
+
}
|
|
79
|
+
if (errorDetails.type) {
|
|
80
|
+
lines.push(`│ ${DIM} Type: ${errorDetails.type}${RESET}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// ✅ Show response body preview
|
|
85
|
+
if (step.name === 'Response Body' && step.metadata?.body) {
|
|
86
|
+
const bodyPreview = JSON.stringify(step.metadata.body).substring(0, 150);
|
|
87
|
+
lines.push(`│ ${LEVEL_COLORS.INFO}└─ Body: ${bodyPreview}...${RESET}`);
|
|
88
|
+
if (step.metadata.size) {
|
|
89
|
+
lines.push(`│ ${DIM} Size: ${step.metadata.size} bytes${RESET}`);
|
|
90
|
+
}
|
|
56
91
|
}
|
|
57
92
|
// Slow query warning
|
|
58
93
|
if (step.classification === 'WARN' && step.duration > 300) {
|
|
@@ -62,8 +97,26 @@ function renderTimeline(trace, logger = console.log) {
|
|
|
62
97
|
// Response line
|
|
63
98
|
lines.push(`${DIM}│ [${Math.round(trace.totalDuration)}ms]${' '.repeat(Math.max(1, 5 - String(Math.round(trace.totalDuration)).length))}Response ${trace.statusCode || '—'}${RESET}`);
|
|
64
99
|
lines.push('│');
|
|
65
|
-
// Root cause
|
|
66
|
-
if (trace.rootCause) {
|
|
100
|
+
// ✅ Enhanced Root cause with suggestions
|
|
101
|
+
if (trace.rootCause && 'suggestions' in trace.rootCause) {
|
|
102
|
+
const enhancedRc = trace.rootCause;
|
|
103
|
+
const rcColor = LEVEL_COLORS.ERROR;
|
|
104
|
+
lines.push(`${rcColor}│ 🔍 Root cause: ${enhancedRc.cause}${RESET}`);
|
|
105
|
+
lines.push(`${DIM}│ Service: ${enhancedRc.service} | Confidence: ${enhancedRc.confidence}%${RESET}`);
|
|
106
|
+
if (enhancedRc.suggestions && enhancedRc.suggestions.length > 0) {
|
|
107
|
+
lines.push(`${DIM}│ 💡 Suggestions:${RESET}`);
|
|
108
|
+
enhancedRc.suggestions.forEach((s, i) => {
|
|
109
|
+
lines.push(`${DIM}│ ${i + 1}. ${s}${RESET}`);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (enhancedRc.contributingFactors && enhancedRc.contributingFactors.length > 0) {
|
|
113
|
+
lines.push(`${DIM}│ Contributing factors:${RESET}`);
|
|
114
|
+
enhancedRc.contributingFactors.forEach((f) => {
|
|
115
|
+
lines.push(`${DIM}│ - ${f.step} (${f.duration}ms) [${f.service}]${RESET}`);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (trace.rootCause) {
|
|
67
120
|
const rcColor = LEVEL_COLORS.ERROR;
|
|
68
121
|
lines.push(`${rcColor}│ 🔍 Root cause: ${trace.rootCause.cause}${RESET}`);
|
|
69
122
|
lines.push(`${DIM}│ Service: ${trace.rootCause.service} | Confidence: ${trace.rootCause.confidence}%${RESET}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Timeline.js","sourceRoot":"","sources":["../../../src/core/Timeline.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,oCAAoC;AACpC,qDAAqD;AACrD,gEAAgE;;
|
|
1
|
+
{"version":3,"file":"Timeline.js","sourceRoot":"","sources":["../../../src/core/Timeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -110,6 +110,10 @@ class RequestTracer {
|
|
|
110
110
|
setRequestData(data) {
|
|
111
111
|
this.requestData = data;
|
|
112
112
|
}
|
|
113
|
+
/** ✅ NEW: Set response data (Phase 1) */
|
|
114
|
+
setResponseData(data) {
|
|
115
|
+
this.responseData = data;
|
|
116
|
+
}
|
|
113
117
|
/** Manually run & trace an async step */
|
|
114
118
|
async step(name, fn, options) {
|
|
115
119
|
const service = options?.service ?? 'internal';
|
|
@@ -137,6 +141,20 @@ class RequestTracer {
|
|
|
137
141
|
error = e.message;
|
|
138
142
|
stackTrace = e.stack;
|
|
139
143
|
const { file: errorFile, line: errorLine } = extractErrorLocation(stackTrace);
|
|
144
|
+
// ✅ ENHANCED ERROR CAPTURE (Phase 2)
|
|
145
|
+
const errorDetails = {
|
|
146
|
+
message: e.message,
|
|
147
|
+
stack: e.stack,
|
|
148
|
+
name: e.name,
|
|
149
|
+
code: e.code,
|
|
150
|
+
type: e.constructor.name,
|
|
151
|
+
timestamp: new Date().toISOString(),
|
|
152
|
+
context: {
|
|
153
|
+
endpoint: this.endpoint,
|
|
154
|
+
method: this.method,
|
|
155
|
+
environment: this.config.environment
|
|
156
|
+
}
|
|
157
|
+
};
|
|
140
158
|
// Re-throw so the caller can handle the error
|
|
141
159
|
const stepEnd = performance.now();
|
|
142
160
|
const duration = stepEnd - stepStart;
|
|
@@ -154,7 +172,10 @@ class RequestTracer {
|
|
|
154
172
|
stackTrace,
|
|
155
173
|
errorFile,
|
|
156
174
|
errorLine,
|
|
157
|
-
metadata:
|
|
175
|
+
metadata: {
|
|
176
|
+
...options?.metadata,
|
|
177
|
+
errorDetails // ✅ Store full error details
|
|
178
|
+
},
|
|
158
179
|
});
|
|
159
180
|
throw err;
|
|
160
181
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TraceEngine.js","sourceRoot":"","sources":["../../../src/core/TraceEngine.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,+BAA+B;AAC/B,oDAAoD;AACpD,gEAAgE;;;AAEhE,mCAAsC;AACtC,mCASiB;AACjB,6CAAuD;AACvD,2CAA8C;AAC9C,yCAA4C;AAE5C,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB,iCAAiC;AACjC,SAAS,eAAe;IACpB,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,SAAS,EAAE,CAAC;IACZ,OAAO,OAAO,EAAE,IAAI,IAAI,IAAI,SAAS,EAAE,CAAC;AAC5C,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,UAAmB;IAC7C,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,IAAI,CAAC;QACD,uBAAuB;QACvB,kCAAkC;QAClC,mBAAmB;QACnB,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QACtG,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAEvC,2CAA2C;YAC3C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,QAAQ,CAAC;YAE3D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC7C,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,sBAAsB;IAC1B,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAGD;;;;;;;;GAQG;AACH,MAAa,WAAY,SAAQ,qBAAY;IAGzC,YAAY,MAAuB;QAC/B,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,sBAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IACnD,CAAC;IAED,+BAA+B;IAC/B,YAAY,CAAC,KAA8B;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,SAAS;QACL,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,gCAAgC;IAChC,UAAU,CAAC,QAAgB,EAAE,MAAc;QACvC,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QACjF,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,+BAA+B;IAC/B,QAAQ,CAAC,KAAa,EAAE,IAAa;QACjC,IAAI,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,iCAAiC;QACrC,CAAC;IACL,CAAC;CACJ;AAhCD,kCAgCC;AAED;;;GAGG;AACH,MAAa,aAAa;
|
|
1
|
+
{"version":3,"file":"TraceEngine.js","sourceRoot":"","sources":["../../../src/core/TraceEngine.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/core/types.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,wCAAwC;AACxC,gEAAgE;;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/types.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,wCAAwC;AACxC,gEAAgE;;;AAyKnD,QAAA,cAAc,GAA6B;IACpD,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa;IAClD,aAAa,EAAE,GAAG;IAClB,kBAAkB,EAAE,GAAG;IACvB,cAAc,EAAE,KAAK;IACrB,YAAY,EAAE,CAAC;IACf,kBAAkB,EAAE,IAAI;IACxB,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;IACrB,qBAAqB,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM;IAC1C,kBAAkB,EAAE,KAAK;IACzB,mBAAmB,EAAE,IAAI,EAAE,yBAAyB;IACpD,MAAM,EAAE,OAAO,CAAC,GAAG;CACtB,CAAC"}
|
|
@@ -126,6 +126,31 @@ function flowDebugger(config) {
|
|
|
126
126
|
}
|
|
127
127
|
catch (_) { }
|
|
128
128
|
}
|
|
129
|
+
// ✅ CAPTURE RESPONSE BODY (NEW - Phase 1)
|
|
130
|
+
const originalJson = res.json;
|
|
131
|
+
const originalSend = res.send;
|
|
132
|
+
// Capture JSON responses
|
|
133
|
+
res.json = function (body) {
|
|
134
|
+
if (tracer && mergedConfig.captureResponseData) {
|
|
135
|
+
tracer.setResponseData({
|
|
136
|
+
body: body,
|
|
137
|
+
statusCode: res.statusCode,
|
|
138
|
+
size: JSON.stringify(body).length
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return originalJson.call(this, body);
|
|
142
|
+
};
|
|
143
|
+
// Capture text responses
|
|
144
|
+
res.send = function (body) {
|
|
145
|
+
if (tracer && mergedConfig.captureResponseData && typeof body === 'string') {
|
|
146
|
+
tracer.setResponseData({
|
|
147
|
+
body: body,
|
|
148
|
+
statusCode: res.statusCode,
|
|
149
|
+
size: body.length
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return originalSend.call(this, body);
|
|
153
|
+
};
|
|
129
154
|
// Hook into response finish
|
|
130
155
|
const originalEnd = res.end;
|
|
131
156
|
res.end = function (...args) {
|
|
@@ -322,25 +347,25 @@ function handleDebuggerRoute(req, res, next, analytics, config) {
|
|
|
322
347
|
}
|
|
323
348
|
/** Inline fallback dashboard if files aren't found */
|
|
324
349
|
function getInlineDashboard() {
|
|
325
|
-
return `<!DOCTYPE html>
|
|
326
|
-
<html lang="en">
|
|
327
|
-
<head>
|
|
328
|
-
<meta charset="UTF-8">
|
|
329
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
330
|
-
<title>Flow Debugger Dashboard</title>
|
|
331
|
-
<style>body{font-family:system-ui;background:#0a0a1a;color:#e0e0e0;padding:20px}
|
|
332
|
-
h1{color:#7c3aed}.card{background:#1a1a2e;border-radius:12px;padding:20px;margin:10px 0;border:1px solid #2a2a4a}</style>
|
|
333
|
-
</head>
|
|
334
|
-
<body>
|
|
335
|
-
<h1>🔍 Flow Debugger</h1>
|
|
336
|
-
<p>Dashboard files not found. API available at <a href="/__debugger" style="color:#7c3aed">/__debugger</a></p>
|
|
337
|
-
<div class="card" id="data">Loading...</div>
|
|
338
|
-
<script>
|
|
339
|
-
fetch('/__debugger').then(r=>r.json()).then(d=>{
|
|
340
|
-
document.getElementById('data').innerHTML='<pre>'+JSON.stringify(d,null,2)+'</pre>';
|
|
341
|
-
});
|
|
342
|
-
</script>
|
|
343
|
-
</body>
|
|
350
|
+
return `<!DOCTYPE html>
|
|
351
|
+
<html lang="en">
|
|
352
|
+
<head>
|
|
353
|
+
<meta charset="UTF-8">
|
|
354
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
355
|
+
<title>Flow Debugger Dashboard</title>
|
|
356
|
+
<style>body{font-family:system-ui;background:#0a0a1a;color:#e0e0e0;padding:20px}
|
|
357
|
+
h1{color:#7c3aed}.card{background:#1a1a2e;border-radius:12px;padding:20px;margin:10px 0;border:1px solid #2a2a4a}</style>
|
|
358
|
+
</head>
|
|
359
|
+
<body>
|
|
360
|
+
<h1>🔍 Flow Debugger</h1>
|
|
361
|
+
<p>Dashboard files not found. API available at <a href="/__debugger" style="color:#7c3aed">/__debugger</a></p>
|
|
362
|
+
<div class="card" id="data">Loading...</div>
|
|
363
|
+
<script>
|
|
364
|
+
fetch('/__debugger').then(r=>r.json()).then(d=>{
|
|
365
|
+
document.getElementById('data').innerHTML='<pre>'+JSON.stringify(d,null,2)+'</pre>';
|
|
366
|
+
});
|
|
367
|
+
</script>
|
|
368
|
+
</body>
|
|
344
369
|
</html>`;
|
|
345
370
|
}
|
|
346
371
|
//# sourceMappingURL=express.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/middleware/express.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,qCAAqC;AACrC,kEAAkE;AAClE,gEAAgE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDhE,
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/middleware/express.ts"],"names":[],"mappings":"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"}
|