@tracekit/node-apm 1.5.0 → 1.6.2

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/README.md CHANGED
@@ -257,6 +257,72 @@ export class PaymentService {
257
257
 
258
258
  Get your API key at [https://app.tracekit.dev](https://app.tracekit.dev)
259
259
 
260
+ ### PII Scrubbing
261
+
262
+ The SDK automatically scans snapshot variables for sensitive data before sending to the backend. Enabled by default when code monitoring is active.
263
+
264
+ **Auto-detected patterns:** passwords, API keys, tokens, credit cards, emails, SSNs, JWTs, AWS keys, Stripe keys, private keys.
265
+
266
+ **Name-based redaction** — Variables with sensitive names are redacted as `[REDACTED:sensitive_name]`:
267
+
268
+ ```typescript
269
+ // Input: { password: 'hunter2', api_key: 'sk-abc123' }
270
+ // Output: { password: '[REDACTED:sensitive_name]', api_key: '[REDACTED:sensitive_name]' }
271
+ ```
272
+
273
+ Matched names: `password`, `passwd`, `pwd`, `secret`, `token`, `key`, `credential`, `api_key`, `apikey`. Uses letter-based boundaries (not `\b`) to correctly match names like `api_key` and `user_token`.
274
+
275
+ **Value-based redaction** — Values matching known patterns are redacted as `[REDACTED:type]`:
276
+
277
+ ```typescript
278
+ // Input: { card: '4111-1111-1111-1111' }
279
+ // Output: { card: '[REDACTED:credit_card]' }
280
+ ```
281
+
282
+ ### Kill Switch
283
+
284
+ Server-side toggle to disable code monitoring per service. Controlled entirely from the TraceKit dashboard or API — no code changes needed.
285
+
286
+ ```bash
287
+ # Disable code monitoring for a service
288
+ curl -X POST https://app.tracekit.dev/api/services/my-service/kill-switch \
289
+ -H "Content-Type: application/json" \
290
+ -d '{"enabled": true}'
291
+ ```
292
+
293
+ - When enabled, the SDK stops capturing snapshots immediately
294
+ - Polling frequency reduces to 60s
295
+ - When disabled, captures resume automatically
296
+
297
+ ### SSE Real-time Updates
298
+
299
+ The SDK auto-discovers an SSE endpoint from the poll response. Once connected, breakpoint changes (create/update/delete) and kill switch events are received instantly without waiting for the next poll cycle.
300
+
301
+ - Falls back to polling if the SSE connection fails
302
+ - Reconnects automatically on disconnect
303
+ - No configuration required — works out of the box when `enableCodeMonitoring` is `true`
304
+
305
+ ### Circuit Breaker
306
+
307
+ Protects the host application if the TraceKit backend becomes unreachable.
308
+
309
+ - After **3 capture failures** within **60 seconds**, code monitoring pauses automatically
310
+ - Resumes after a **5-minute** cooldown period
311
+ - Configurable at init:
312
+
313
+ ```typescript
314
+ tracekit.init({
315
+ apiKey: process.env.TRACEKIT_API_KEY!,
316
+ serviceName: 'my-app',
317
+ enableCodeMonitoring: true,
318
+ circuitBreaker: {
319
+ failureThreshold: 5, // failures before opening
320
+ failureWindowMs: 120_000, // window for counting failures (ms)
321
+ cooldownMs: 600_000, // wait before retrying (ms)
322
+ },
323
+ });
324
+ ```
325
+
260
326
  ## Metrics
261
327
 
262
328
  TraceKit APM includes a powerful metrics API for tracking application performance and business metrics.
@@ -1 +1 @@
1
- {"version":3,"file":"tracekit.interceptor.js","sourceRoot":"","sources":["../../src/nestjs/tracekit.interceptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracekit.interceptor.js","sourceRoot":"","sources":["../../src/nestjs/tracekit.interceptor.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,24 @@ export interface Snapshot {
31
31
  request_context?: Record<string, any>;
32
32
  captured_at: Date;
33
33
  }
34
+ export interface PIIPatternEntry {
35
+ pattern: RegExp;
36
+ marker: string;
37
+ }
38
+ export interface CaptureConfig {
39
+ captureDepth?: number;
40
+ maxPayload?: number;
41
+ captureTimeout?: number;
42
+ debug?: boolean;
43
+ piiScrubbing?: boolean;
44
+ piiPatterns?: PIIPatternEntry[];
45
+ circuitBreaker?: CircuitBreakerConfig;
46
+ }
47
+ export interface CircuitBreakerConfig {
48
+ maxFailures?: number;
49
+ windowMs?: number;
50
+ cooldownMs?: number;
51
+ }
34
52
  export declare class SnapshotClient {
35
53
  private apiKey;
36
54
  private baseURL;
@@ -39,17 +57,43 @@ export declare class SnapshotClient {
39
57
  private registrationCache;
40
58
  private pollInterval?;
41
59
  private lastFetch?;
42
- constructor(apiKey: string, baseURL: string, serviceName: string);
60
+ private captureConfig;
61
+ private piiPatterns;
62
+ private circuitBreakerState;
63
+ private circuitBreakerOpenedAt;
64
+ private circuitBreakerFailureTimestamps;
65
+ private circuitBreakerMaxFailures;
66
+ private circuitBreakerWindowMs;
67
+ private circuitBreakerCooldownMs;
68
+ private pendingEvents;
69
+ private killSwitchActive;
70
+ private normalPollMs;
71
+ private killSwitchPollMs;
72
+ private sseEndpoint;
73
+ private sseActive;
74
+ private sseAbortController;
75
+ constructor(apiKey: string, baseURL: string, serviceName: string, captureConfig?: CaptureConfig);
76
+ setCaptureConfig(config: CaptureConfig): void;
43
77
  start(): void;
78
+ private schedulePoll;
44
79
  stop(): void;
45
80
  checkAndCaptureWithContext(label: string, variables?: Record<string, any>): Promise<void>;
81
+ private _doCheckAndCapture;
46
82
  private parseStackTrace;
47
83
  private fetchActiveBreakpoints;
84
+ private connectSSE;
85
+ private handleSSEEvent;
48
86
  private updateBreakpointCache;
49
87
  private autoRegisterBreakpoint;
88
+ private shouldAllow;
89
+ private recordFailure;
90
+ private queueCircuitBreakerEvent;
50
91
  private captureSnapshot;
51
92
  private extractRequestContext;
52
93
  private sanitizeVariables;
94
+ private safeSerialize;
95
+ private limitDepth;
96
+ private limitDepthArray;
53
97
  private scanForSecurityIssues;
54
98
  }
55
99
  //# sourceMappingURL=snapshot-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-client.d.ts","sourceRoot":"","sources":["../src/snapshot-client.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,WAAW,EAAE,IAAI,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,YAAY,CAAC,CAAiB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAO;gBAEb,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAOhE,KAAK,IAAI,IAAI;IAUb,IAAI,IAAI,IAAI;IASN,0BAA0B,CAC9B,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAClC,OAAO,CAAC,IAAI,CAAC;IAyEhB,OAAO,CAAC,eAAe;YA+BT,sBAAsB;IAsBpC,OAAO,CAAC,qBAAqB;YAqBf,sBAAsB;YAiCtB,eAAe;IAsB7B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,qBAAqB;CA+C9B"}
1
+ {"version":3,"file":"snapshot-client.d.ts","sourceRoot":"","sources":["../src/snapshot-client.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1,136 @@
1
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.SnapshotClient = void 0;
37
+ const api = __importStar(require("@opentelemetry/api"));
4
38
  const express_1 = require("./middleware/express");
39
+ const DEFAULT_PII_PATTERNS = [
40
+ { pattern: /\b[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}\b/, marker: '[REDACTED:email]' },
41
+ { pattern: /\b\d{3}-\d{2}-\d{4}\b/, marker: '[REDACTED:ssn]' },
42
+ { pattern: /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/, marker: '[REDACTED:credit_card]' },
43
+ { pattern: /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/, marker: '[REDACTED:phone]' },
44
+ { pattern: /AKIA[0-9A-Z]{16}/, marker: '[REDACTED:aws_key]' },
45
+ { pattern: /aws.{0,20}secret.{0,20}[A-Za-z0-9/+=]{40}/i, marker: '[REDACTED:aws_secret]' },
46
+ { pattern: /(?:bearer\s+)[A-Za-z0-9._~+/=\-]{20,}/i, marker: '[REDACTED:oauth_token]' },
47
+ { pattern: /sk_live_[0-9a-zA-Z]{10,}/, marker: '[REDACTED:stripe_key]' },
48
+ { pattern: /(?:password|passwd|pwd)\s*[=:]\s*["']?[^\s"']{6,}/i, marker: '[REDACTED:password]' },
49
+ { pattern: /eyJ[A-Za-z0-9_\-]+\.eyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+/, marker: '[REDACTED:jwt]' },
50
+ { pattern: /-----BEGIN (?:RSA |EC )?PRIVATE KEY-----/, marker: '[REDACTED:private_key]' },
51
+ { pattern: /(?:api[_\-]?key|apikey)\s*[:=]\s*["']?[A-Za-z0-9_\-]{20,}/i, marker: '[REDACTED:api_key]' },
52
+ ];
53
+ const SENSITIVE_NAME_PATTERN = /(?:^|[^a-zA-Z])(password|passwd|pwd|secret|token|key|credential|api_key|apikey)(?:[^a-zA-Z]|$)/i;
5
54
  class SnapshotClient {
6
- constructor(apiKey, baseURL, serviceName) {
55
+ constructor(apiKey, baseURL, serviceName, captureConfig) {
7
56
  this.breakpointsCache = new Map();
8
57
  this.registrationCache = new Set();
58
+ this.circuitBreakerState = 'closed';
59
+ this.circuitBreakerOpenedAt = null;
60
+ this.circuitBreakerFailureTimestamps = [];
61
+ this.pendingEvents = [];
62
+ this.killSwitchActive = false;
63
+ this.normalPollMs = 30000;
64
+ this.killSwitchPollMs = 60000;
65
+ this.sseEndpoint = null;
66
+ this.sseActive = false;
67
+ this.sseAbortController = null;
9
68
  this.apiKey = apiKey;
10
69
  this.baseURL = baseURL;
11
70
  this.serviceName = serviceName;
71
+ this.captureConfig = captureConfig || {};
72
+ this.piiPatterns = [
73
+ ...DEFAULT_PII_PATTERNS,
74
+ ...(this.captureConfig.piiPatterns || []),
75
+ ];
76
+ const cbConfig = this.captureConfig.circuitBreaker || {};
77
+ this.circuitBreakerMaxFailures = cbConfig.maxFailures ?? 3;
78
+ this.circuitBreakerWindowMs = cbConfig.windowMs ?? 60000;
79
+ this.circuitBreakerCooldownMs = cbConfig.cooldownMs ?? 300000;
80
+ }
81
+ setCaptureConfig(config) {
82
+ this.captureConfig = config;
12
83
  }
13
84
  start() {
14
85
  this.fetchActiveBreakpoints();
15
- this.pollInterval = setInterval(() => this.fetchActiveBreakpoints(), 30000);
86
+ this.schedulePoll();
16
87
  console.log(`📸 TraceKit Snapshot Client started for service: ${this.serviceName}`);
17
88
  }
89
+ schedulePoll() {
90
+ if (this.pollInterval) {
91
+ clearInterval(this.pollInterval);
92
+ }
93
+ const interval = this.killSwitchActive ? this.killSwitchPollMs : this.normalPollMs;
94
+ this.pollInterval = setInterval(() => this.fetchActiveBreakpoints(), interval);
95
+ }
18
96
  stop() {
19
97
  if (this.pollInterval) {
20
98
  clearInterval(this.pollInterval);
21
99
  this.pollInterval = undefined;
22
100
  }
101
+ if (this.sseAbortController) {
102
+ this.sseAbortController.abort();
103
+ this.sseAbortController = null;
104
+ }
105
+ this.sseActive = false;
23
106
  console.log('📸 TraceKit Snapshot Client stopped');
24
107
  }
25
108
  async checkAndCaptureWithContext(label, variables = {}) {
109
+ if (this.killSwitchActive) {
110
+ return;
111
+ }
112
+ try {
113
+ if (this.captureConfig.captureTimeout && this.captureConfig.captureTimeout > 0) {
114
+ return await Promise.race([
115
+ this._doCheckAndCapture(label, variables),
116
+ new Promise((_, reject) => setTimeout(() => reject(new Error('capture timeout')), this.captureConfig.captureTimeout)),
117
+ ]);
118
+ }
119
+ await this._doCheckAndCapture(label, variables);
120
+ }
121
+ catch (error) {
122
+ if (this.captureConfig.debug) {
123
+ console.error('TraceKit: error in checkAndCaptureWithContext:', error);
124
+ }
125
+ }
126
+ }
127
+ async _doCheckAndCapture(label, variables) {
26
128
  const stack = new Error().stack || '';
27
129
  const caller = this.parseStackTrace(stack);
28
130
  if (!caller) {
29
- console.warn('⚠️ Could not detect caller location');
131
+ if (this.captureConfig.debug) {
132
+ console.warn('TraceKit: could not detect caller location');
133
+ }
30
134
  return;
31
135
  }
32
136
  const { file, line, functionName } = caller;
@@ -56,8 +160,33 @@ class SnapshotClient {
56
160
  if (breakpoint.max_captures > 0 && breakpoint.capture_count >= breakpoint.max_captures) {
57
161
  return;
58
162
  }
163
+ if (this.captureConfig.captureDepth && this.captureConfig.captureDepth > 0) {
164
+ variables = this.limitDepth(variables, 0, this.captureConfig.captureDepth);
165
+ }
59
166
  const requestContext = this.extractRequestContext();
60
167
  const securityScan = this.scanForSecurityIssues(variables);
168
+ const serializedVars = this.safeSerialize(securityScan.variables);
169
+ let finalVariables = securityScan.variables;
170
+ if (this.captureConfig.maxPayload && this.captureConfig.maxPayload > 0) {
171
+ const payloadSize = new TextEncoder().encode(serializedVars).length;
172
+ if (payloadSize > this.captureConfig.maxPayload) {
173
+ finalVariables = {
174
+ _truncated: true,
175
+ _payload_size: payloadSize,
176
+ _max_payload: this.captureConfig.maxPayload,
177
+ };
178
+ }
179
+ }
180
+ let traceId;
181
+ let spanId;
182
+ const activeSpan = api.trace.getActiveSpan();
183
+ if (activeSpan) {
184
+ const spanContext = activeSpan.spanContext();
185
+ if (spanContext && api.isSpanContextValid(spanContext) && (spanContext.traceFlags & api.TraceFlags.SAMPLED) !== 0) {
186
+ traceId = spanContext.traceId;
187
+ spanId = spanContext.spanId;
188
+ }
189
+ }
61
190
  const snapshot = {
62
191
  breakpoint_id: breakpoint.id,
63
192
  service_name: this.serviceName,
@@ -65,9 +194,11 @@ class SnapshotClient {
65
194
  function_name: functionName,
66
195
  label,
67
196
  line_number: line,
68
- variables: securityScan.variables,
197
+ variables: finalVariables,
69
198
  security_flags: securityScan.flags,
70
199
  stack_trace: stack,
200
+ trace_id: traceId,
201
+ span_id: spanId,
71
202
  request_context: requestContext,
72
203
  captured_at: new Date(),
73
204
  };
@@ -89,22 +220,176 @@ class SnapshotClient {
89
220
  async fetchActiveBreakpoints() {
90
221
  try {
91
222
  const url = `${this.baseURL}/sdk/snapshots/active/${this.serviceName}`;
92
- const response = await fetch(url, {
93
- headers: {
94
- 'X-API-Key': this.apiKey,
95
- },
96
- });
223
+ const events = this.pendingEvents.splice(0);
224
+ let response;
225
+ if (events.length > 0) {
226
+ response = await fetch(url, {
227
+ method: 'POST',
228
+ headers: {
229
+ 'X-API-Key': this.apiKey,
230
+ 'Content-Type': 'application/json',
231
+ },
232
+ body: JSON.stringify({ events }),
233
+ });
234
+ }
235
+ else {
236
+ response = await fetch(url, {
237
+ headers: {
238
+ 'X-API-Key': this.apiKey,
239
+ },
240
+ });
241
+ }
97
242
  if (!response.ok) {
98
243
  throw new Error(`HTTP ${response.status}`);
99
244
  }
100
245
  const data = await response.json();
101
- this.updateBreakpointCache(data.breakpoints || []);
246
+ const newKillState = data.kill_switch === true;
247
+ if (newKillState && !this.killSwitchActive) {
248
+ console.log('TraceKit: Code monitoring disabled by server kill switch. Polling at reduced frequency.');
249
+ }
250
+ else if (!newKillState && this.killSwitchActive) {
251
+ console.log('TraceKit: Code monitoring re-enabled by server.');
252
+ }
253
+ if (newKillState !== this.killSwitchActive) {
254
+ this.killSwitchActive = newKillState;
255
+ this.schedulePoll();
256
+ }
257
+ if (this.killSwitchActive && this.sseActive && this.sseAbortController) {
258
+ this.sseAbortController.abort();
259
+ this.sseActive = false;
260
+ console.log('TraceKit: SSE connection closed due to kill switch');
261
+ }
262
+ const breakpoints = data.breakpoints || [];
263
+ if (data.sse_endpoint && !this.sseActive && !this.killSwitchActive && breakpoints.length > 0) {
264
+ this.sseEndpoint = data.sse_endpoint;
265
+ this.connectSSE(data.sse_endpoint);
266
+ }
267
+ this.updateBreakpointCache(breakpoints);
102
268
  this.lastFetch = new Date();
103
269
  }
104
270
  catch (error) {
105
271
  console.error('⚠️ Failed to fetch breakpoints:', error);
106
272
  }
107
273
  }
274
+ async connectSSE(endpoint) {
275
+ try {
276
+ const fullURL = `${this.baseURL}${endpoint}`;
277
+ this.sseAbortController = new AbortController();
278
+ const response = await fetch(fullURL, {
279
+ headers: {
280
+ 'X-API-Key': this.apiKey,
281
+ 'Accept': 'text/event-stream',
282
+ },
283
+ signal: this.sseAbortController.signal,
284
+ });
285
+ if (!response.ok) {
286
+ console.warn(`TraceKit: SSE endpoint returned ${response.status}, falling back to polling`);
287
+ this.sseActive = false;
288
+ return;
289
+ }
290
+ this.sseActive = true;
291
+ console.log('TraceKit: SSE connection established for real-time breakpoint updates');
292
+ const reader = response.body?.getReader();
293
+ if (!reader) {
294
+ this.sseActive = false;
295
+ return;
296
+ }
297
+ const decoder = new TextDecoder();
298
+ let buffer = '';
299
+ let eventType = '';
300
+ let dataBuffer = '';
301
+ while (true) {
302
+ const { done, value } = await reader.read();
303
+ if (done)
304
+ break;
305
+ buffer += decoder.decode(value, { stream: true });
306
+ const lines = buffer.split('\n');
307
+ buffer = lines.pop() || '';
308
+ for (const line of lines) {
309
+ if (line.startsWith('event:')) {
310
+ eventType = line.slice(6).trim();
311
+ }
312
+ else if (line.startsWith('data:')) {
313
+ if (dataBuffer)
314
+ dataBuffer += '\n';
315
+ dataBuffer += line.slice(5).trim();
316
+ }
317
+ else if (line === '') {
318
+ if (eventType && dataBuffer) {
319
+ this.handleSSEEvent(eventType, dataBuffer);
320
+ }
321
+ eventType = '';
322
+ dataBuffer = '';
323
+ }
324
+ }
325
+ }
326
+ console.log('TraceKit: SSE connection closed, falling back to polling');
327
+ }
328
+ catch (error) {
329
+ if (error?.name !== 'AbortError') {
330
+ console.warn('TraceKit: SSE connection lost, falling back to polling:', error?.message);
331
+ }
332
+ }
333
+ finally {
334
+ this.sseActive = false;
335
+ }
336
+ }
337
+ handleSSEEvent(eventType, data) {
338
+ try {
339
+ switch (eventType) {
340
+ case 'init': {
341
+ const initData = JSON.parse(data);
342
+ this.updateBreakpointCache(initData.breakpoints);
343
+ this.killSwitchActive = initData.kill_switch;
344
+ if (this.killSwitchActive && this.sseAbortController) {
345
+ this.sseAbortController.abort();
346
+ }
347
+ console.log(`TraceKit: SSE init received, ${initData.breakpoints.length} breakpoints loaded`);
348
+ break;
349
+ }
350
+ case 'breakpoint_created':
351
+ case 'breakpoint_updated': {
352
+ const bp = JSON.parse(data);
353
+ if (bp.label && bp.function_name) {
354
+ const labelKey = `${bp.function_name}:${bp.label}`;
355
+ this.breakpointsCache.set(labelKey, bp);
356
+ }
357
+ const lineKey = `${bp.file_path}:${bp.line_number}`;
358
+ this.breakpointsCache.set(lineKey, bp);
359
+ console.log(`TraceKit: SSE breakpoint ${eventType}: ${bp.id}`);
360
+ break;
361
+ }
362
+ case 'breakpoint_deleted': {
363
+ const deleteData = JSON.parse(data);
364
+ for (const [key, bp] of this.breakpointsCache.entries()) {
365
+ if (bp.id === deleteData.id) {
366
+ this.breakpointsCache.delete(key);
367
+ }
368
+ }
369
+ console.log(`TraceKit: SSE breakpoint deleted: ${deleteData.id}`);
370
+ break;
371
+ }
372
+ case 'kill_switch': {
373
+ const ksData = JSON.parse(data);
374
+ this.killSwitchActive = ksData.enabled;
375
+ if (ksData.enabled) {
376
+ console.log('TraceKit: Kill switch enabled via SSE, closing connection');
377
+ if (this.sseAbortController) {
378
+ this.sseAbortController.abort();
379
+ }
380
+ }
381
+ break;
382
+ }
383
+ case 'heartbeat':
384
+ break;
385
+ default:
386
+ console.warn(`TraceKit: unknown SSE event type: ${eventType}`);
387
+ }
388
+ }
389
+ catch (error) {
390
+ console.error(`TraceKit: error handling SSE event ${eventType}:`, error);
391
+ }
392
+ }
108
393
  updateBreakpointCache(breakpoints) {
109
394
  this.breakpointsCache.clear();
110
395
  for (const bp of breakpoints) {
@@ -144,7 +429,50 @@ class SnapshotClient {
144
429
  return null;
145
430
  }
146
431
  }
432
+ shouldAllow() {
433
+ if (this.circuitBreakerState === 'closed') {
434
+ return true;
435
+ }
436
+ if (this.circuitBreakerOpenedAt !== null) {
437
+ const elapsed = Date.now() - this.circuitBreakerOpenedAt;
438
+ if (elapsed >= this.circuitBreakerCooldownMs) {
439
+ this.circuitBreakerState = 'closed';
440
+ this.circuitBreakerFailureTimestamps = [];
441
+ this.circuitBreakerOpenedAt = null;
442
+ console.log('TraceKit: Code monitoring resumed');
443
+ return true;
444
+ }
445
+ }
446
+ return false;
447
+ }
448
+ recordFailure() {
449
+ const now = Date.now();
450
+ this.circuitBreakerFailureTimestamps.push(now);
451
+ const cutoff = now - this.circuitBreakerWindowMs;
452
+ this.circuitBreakerFailureTimestamps = this.circuitBreakerFailureTimestamps.filter(ts => ts > cutoff);
453
+ if (this.circuitBreakerFailureTimestamps.length >= this.circuitBreakerMaxFailures &&
454
+ this.circuitBreakerState === 'closed') {
455
+ this.circuitBreakerState = 'open';
456
+ this.circuitBreakerOpenedAt = now;
457
+ console.warn(`TraceKit: Code monitoring paused (${this.circuitBreakerMaxFailures} capture failures in ${this.circuitBreakerWindowMs / 1000}s). Auto-resumes in ${this.circuitBreakerCooldownMs / 60000} min.`);
458
+ return true;
459
+ }
460
+ return false;
461
+ }
462
+ queueCircuitBreakerEvent() {
463
+ this.pendingEvents.push({
464
+ type: 'circuit_breaker_tripped',
465
+ service_name: this.serviceName,
466
+ failure_count: this.circuitBreakerMaxFailures,
467
+ window_seconds: this.circuitBreakerWindowMs / 1000,
468
+ cooldown_seconds: this.circuitBreakerCooldownMs / 1000,
469
+ timestamp: new Date().toISOString(),
470
+ });
471
+ }
147
472
  async captureSnapshot(snapshot) {
473
+ if (!this.shouldAllow()) {
474
+ return;
475
+ }
148
476
  try {
149
477
  const response = await fetch(`${this.baseURL}/sdk/snapshots/capture`, {
150
478
  method: 'POST',
@@ -154,7 +482,13 @@ class SnapshotClient {
154
482
  },
155
483
  body: JSON.stringify(snapshot),
156
484
  });
157
- if (!response.ok) {
485
+ if (response.status >= 500) {
486
+ console.error('⚠️ Failed to capture snapshot:', response.status);
487
+ if (this.recordFailure()) {
488
+ this.queueCircuitBreakerEvent();
489
+ }
490
+ }
491
+ else if (!response.ok) {
158
492
  console.error('⚠️ Failed to capture snapshot:', response.status);
159
493
  }
160
494
  else {
@@ -163,6 +497,9 @@ class SnapshotClient {
163
497
  }
164
498
  catch (error) {
165
499
  console.error('⚠️ Failed to capture snapshot:', error);
500
+ if (this.recordFailure()) {
501
+ this.queueCircuitBreakerEvent();
502
+ }
166
503
  }
167
504
  }
168
505
  extractRequestContext() {
@@ -172,43 +509,86 @@ class SnapshotClient {
172
509
  const sanitized = {};
173
510
  for (const [key, value] of Object.entries(variables)) {
174
511
  try {
175
- JSON.stringify(value);
512
+ this.safeSerialize(value);
176
513
  sanitized[key] = value;
177
514
  }
178
515
  catch {
179
- sanitized[key] = `[${typeof value}]`;
516
+ sanitized[key] = `[unserializable:${typeof value}]`;
180
517
  }
181
518
  }
182
519
  return sanitized;
183
520
  }
521
+ safeSerialize(value) {
522
+ const seen = new WeakSet();
523
+ return JSON.stringify(value, (_key, val) => {
524
+ if (typeof val === 'object' && val !== null) {
525
+ if (seen.has(val)) {
526
+ return '[circular reference]';
527
+ }
528
+ seen.add(val);
529
+ }
530
+ return val;
531
+ });
532
+ }
533
+ limitDepth(obj, currentDepth, maxDepth) {
534
+ if (currentDepth >= maxDepth) {
535
+ return { _truncated: true, _depth: currentDepth };
536
+ }
537
+ const result = {};
538
+ for (const [key, value] of Object.entries(obj)) {
539
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
540
+ result[key] = this.limitDepth(value, currentDepth + 1, maxDepth);
541
+ }
542
+ else if (Array.isArray(value)) {
543
+ result[key] = this.limitDepthArray(value, currentDepth + 1, maxDepth);
544
+ }
545
+ else {
546
+ result[key] = value;
547
+ }
548
+ }
549
+ return result;
550
+ }
551
+ limitDepthArray(arr, currentDepth, maxDepth) {
552
+ if (currentDepth >= maxDepth) {
553
+ return { _truncated: true, _depth: currentDepth, _length: arr.length };
554
+ }
555
+ return arr.map((item) => {
556
+ if (item && typeof item === 'object' && !Array.isArray(item)) {
557
+ return this.limitDepth(item, currentDepth + 1, maxDepth);
558
+ }
559
+ else if (Array.isArray(item)) {
560
+ return this.limitDepthArray(item, currentDepth + 1, maxDepth);
561
+ }
562
+ return item;
563
+ });
564
+ }
184
565
  scanForSecurityIssues(variables) {
185
- const sensitivePatterns = {
186
- password: /(?:password|passwd|pwd)\s*[=:]\s*["']?[^\s"']{6,}/i,
187
- api_key: /(?:api[_-]?key|apikey)\s*[=:]\s*["']?[A-Za-z0-9_-]{20,}/i,
188
- jwt: /eyJ[A-Za-z0-9_-]*\.eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9_-]*/,
189
- credit_card: /\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14})\b/,
190
- };
566
+ if (this.captureConfig.piiScrubbing === false) {
567
+ return { variables, flags: [] };
568
+ }
191
569
  const securityFlags = [];
192
570
  const sanitized = this.sanitizeVariables(variables);
193
571
  for (const [name, value] of Object.entries(variables)) {
194
- if (/password|secret|token|key|credential/i.test(name)) {
572
+ if (SENSITIVE_NAME_PATTERN.test(name)) {
195
573
  securityFlags.push({
196
574
  type: 'sensitive_variable_name',
197
575
  severity: 'medium',
198
576
  variable: name,
199
577
  });
200
- sanitized[name] = '[REDACTED]';
578
+ sanitized[name] = '[REDACTED:sensitive_name]';
201
579
  continue;
202
580
  }
203
- const serialized = JSON.stringify(value);
204
- for (const [type, pattern] of Object.entries(sensitivePatterns)) {
581
+ const serialized = this.safeSerialize(value);
582
+ let flagged = false;
583
+ for (const { pattern, marker } of this.piiPatterns) {
205
584
  if (pattern.test(serialized)) {
206
585
  securityFlags.push({
207
- type: `sensitive_data_${type}`,
586
+ type: `sensitive_data_${marker}`,
208
587
  severity: 'high',
209
588
  variable: name,
210
589
  });
211
- sanitized[name] = '[REDACTED]';
590
+ sanitized[name] = marker;
591
+ flagged = true;
212
592
  break;
213
593
  }
214
594
  }
@@ -1 +1 @@
1
- {"version":3,"file":"snapshot-client.js","sourceRoot":"","sources":["../src/snapshot-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshot-client.js","sourceRoot":"","sources":["../src/snapshot-client.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tracekit/node-apm",
3
- "version": "1.5.0",
3
+ "version": "1.6.2",
4
4
  "description": "TraceKit APM for Node.js - Zero-config distributed tracing and code monitoring for Express and NestJS",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -54,7 +54,8 @@
54
54
  "peerDependencies": {
55
55
  "@nestjs/common": "^10.0.0",
56
56
  "@nestjs/core": "^10.0.0",
57
- "express": "^4.18.0 || ^5.0.0"
57
+ "express": "^4.18.0 || ^5.0.0",
58
+ "rxjs": "^7.0.0"
58
59
  },
59
60
  "peerDependenciesMeta": {
60
61
  "express": {
@@ -65,6 +66,9 @@
65
66
  },
66
67
  "@nestjs/core": {
67
68
  "optional": true
69
+ },
70
+ "rxjs": {
71
+ "optional": true
68
72
  }
69
73
  },
70
74
  "devDependencies": {
@@ -75,6 +79,7 @@
75
79
  "@types/node": "^20.10.0",
76
80
  "express": "^4.18.0",
77
81
  "jest": "^30.2.0",
82
+ "rxjs": "^7.8.0",
78
83
  "ts-jest": "^29.4.6",
79
84
  "typescript": "^5.3.0"
80
85
  },