@tracekit/node-apm 1.5.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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":"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;AAGD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,aAAa;IAE5B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;IAEhC,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAGD,MAAM,WAAW,oBAAoB;IAEnC,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuBD,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;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAoB;IAGvC,OAAO,CAAC,mBAAmB,CAA+B;IAC1D,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,+BAA+B,CAAgB;IACvD,OAAO,CAAC,yBAAyB,CAAS;IAC1C,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,aAAa,CAA6B;IAGlD,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,gBAAgB,CAAiB;IAGzC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,kBAAkB,CAAgC;gBAE9C,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,aAAa;IAkB/F,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAK7C,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,YAAY;IAYpB,IAAI,IAAI,IAAI;IAeN,0BAA0B,CAC9B,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,GAClC,OAAO,CAAC,IAAI,CAAC;YA0BF,kBAAkB;IAmGhC,OAAO,CAAC,eAAe;YA+BT,sBAAsB;YAkEtB,UAAU;IAsExB,OAAO,CAAC,cAAc;IAkEtB,OAAO,CAAC,qBAAqB;YAqBf,sBAAsB;IAiCpC,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,wBAAwB;YAYlB,eAAe;IAsC7B,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,qBAAqB;CA8C9B"}
@@ -2,31 +2,101 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SnapshotClient = void 0;
4
4
  const express_1 = require("./middleware/express");
5
+ const DEFAULT_PII_PATTERNS = [
6
+ { pattern: /\b[A-Za-z0-9._%+\-]+@[A-Za-z0-9.\-]+\.[A-Za-z]{2,}\b/, marker: '[REDACTED:email]' },
7
+ { pattern: /\b\d{3}-\d{2}-\d{4}\b/, marker: '[REDACTED:ssn]' },
8
+ { pattern: /\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b/, marker: '[REDACTED:credit_card]' },
9
+ { pattern: /\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/, marker: '[REDACTED:phone]' },
10
+ { pattern: /AKIA[0-9A-Z]{16}/, marker: '[REDACTED:aws_key]' },
11
+ { pattern: /aws.{0,20}secret.{0,20}[A-Za-z0-9/+=]{40}/i, marker: '[REDACTED:aws_secret]' },
12
+ { pattern: /(?:bearer\s+)[A-Za-z0-9._~+/=\-]{20,}/i, marker: '[REDACTED:oauth_token]' },
13
+ { pattern: /sk_live_[0-9a-zA-Z]{10,}/, marker: '[REDACTED:stripe_key]' },
14
+ { pattern: /(?:password|passwd|pwd)\s*[=:]\s*["']?[^\s"']{6,}/i, marker: '[REDACTED:password]' },
15
+ { pattern: /eyJ[A-Za-z0-9_\-]+\.eyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+/, marker: '[REDACTED:jwt]' },
16
+ { pattern: /-----BEGIN (?:RSA |EC )?PRIVATE KEY-----/, marker: '[REDACTED:private_key]' },
17
+ { pattern: /(?:api[_\-]?key|apikey)\s*[:=]\s*["']?[A-Za-z0-9_\-]{20,}/i, marker: '[REDACTED:api_key]' },
18
+ ];
19
+ const SENSITIVE_NAME_PATTERN = /(?:^|[^a-zA-Z])(password|passwd|pwd|secret|token|key|credential|api_key|apikey)(?:[^a-zA-Z]|$)/i;
5
20
  class SnapshotClient {
6
- constructor(apiKey, baseURL, serviceName) {
21
+ constructor(apiKey, baseURL, serviceName, captureConfig) {
7
22
  this.breakpointsCache = new Map();
8
23
  this.registrationCache = new Set();
24
+ this.circuitBreakerState = 'closed';
25
+ this.circuitBreakerOpenedAt = null;
26
+ this.circuitBreakerFailureTimestamps = [];
27
+ this.pendingEvents = [];
28
+ this.killSwitchActive = false;
29
+ this.normalPollMs = 30000;
30
+ this.killSwitchPollMs = 60000;
31
+ this.sseEndpoint = null;
32
+ this.sseActive = false;
33
+ this.sseAbortController = null;
9
34
  this.apiKey = apiKey;
10
35
  this.baseURL = baseURL;
11
36
  this.serviceName = serviceName;
37
+ this.captureConfig = captureConfig || {};
38
+ this.piiPatterns = [
39
+ ...DEFAULT_PII_PATTERNS,
40
+ ...(this.captureConfig.piiPatterns || []),
41
+ ];
42
+ const cbConfig = this.captureConfig.circuitBreaker || {};
43
+ this.circuitBreakerMaxFailures = cbConfig.maxFailures ?? 3;
44
+ this.circuitBreakerWindowMs = cbConfig.windowMs ?? 60000;
45
+ this.circuitBreakerCooldownMs = cbConfig.cooldownMs ?? 300000;
46
+ }
47
+ setCaptureConfig(config) {
48
+ this.captureConfig = config;
12
49
  }
13
50
  start() {
14
51
  this.fetchActiveBreakpoints();
15
- this.pollInterval = setInterval(() => this.fetchActiveBreakpoints(), 30000);
52
+ this.schedulePoll();
16
53
  console.log(`📸 TraceKit Snapshot Client started for service: ${this.serviceName}`);
17
54
  }
55
+ schedulePoll() {
56
+ if (this.pollInterval) {
57
+ clearInterval(this.pollInterval);
58
+ }
59
+ const interval = this.killSwitchActive ? this.killSwitchPollMs : this.normalPollMs;
60
+ this.pollInterval = setInterval(() => this.fetchActiveBreakpoints(), interval);
61
+ }
18
62
  stop() {
19
63
  if (this.pollInterval) {
20
64
  clearInterval(this.pollInterval);
21
65
  this.pollInterval = undefined;
22
66
  }
67
+ if (this.sseAbortController) {
68
+ this.sseAbortController.abort();
69
+ this.sseAbortController = null;
70
+ }
71
+ this.sseActive = false;
23
72
  console.log('📸 TraceKit Snapshot Client stopped');
24
73
  }
25
74
  async checkAndCaptureWithContext(label, variables = {}) {
75
+ if (this.killSwitchActive) {
76
+ return;
77
+ }
78
+ try {
79
+ if (this.captureConfig.captureTimeout && this.captureConfig.captureTimeout > 0) {
80
+ return await Promise.race([
81
+ this._doCheckAndCapture(label, variables),
82
+ new Promise((_, reject) => setTimeout(() => reject(new Error('capture timeout')), this.captureConfig.captureTimeout)),
83
+ ]);
84
+ }
85
+ await this._doCheckAndCapture(label, variables);
86
+ }
87
+ catch (error) {
88
+ if (this.captureConfig.debug) {
89
+ console.error('TraceKit: error in checkAndCaptureWithContext:', error);
90
+ }
91
+ }
92
+ }
93
+ async _doCheckAndCapture(label, variables) {
26
94
  const stack = new Error().stack || '';
27
95
  const caller = this.parseStackTrace(stack);
28
96
  if (!caller) {
29
- console.warn('⚠️ Could not detect caller location');
97
+ if (this.captureConfig.debug) {
98
+ console.warn('TraceKit: could not detect caller location');
99
+ }
30
100
  return;
31
101
  }
32
102
  const { file, line, functionName } = caller;
@@ -56,8 +126,23 @@ class SnapshotClient {
56
126
  if (breakpoint.max_captures > 0 && breakpoint.capture_count >= breakpoint.max_captures) {
57
127
  return;
58
128
  }
129
+ if (this.captureConfig.captureDepth && this.captureConfig.captureDepth > 0) {
130
+ variables = this.limitDepth(variables, 0, this.captureConfig.captureDepth);
131
+ }
59
132
  const requestContext = this.extractRequestContext();
60
133
  const securityScan = this.scanForSecurityIssues(variables);
134
+ const serializedVars = this.safeSerialize(securityScan.variables);
135
+ let finalVariables = securityScan.variables;
136
+ if (this.captureConfig.maxPayload && this.captureConfig.maxPayload > 0) {
137
+ const payloadSize = new TextEncoder().encode(serializedVars).length;
138
+ if (payloadSize > this.captureConfig.maxPayload) {
139
+ finalVariables = {
140
+ _truncated: true,
141
+ _payload_size: payloadSize,
142
+ _max_payload: this.captureConfig.maxPayload,
143
+ };
144
+ }
145
+ }
61
146
  const snapshot = {
62
147
  breakpoint_id: breakpoint.id,
63
148
  service_name: this.serviceName,
@@ -65,7 +150,7 @@ class SnapshotClient {
65
150
  function_name: functionName,
66
151
  label,
67
152
  line_number: line,
68
- variables: securityScan.variables,
153
+ variables: finalVariables,
69
154
  security_flags: securityScan.flags,
70
155
  stack_trace: stack,
71
156
  request_context: requestContext,
@@ -89,22 +174,176 @@ class SnapshotClient {
89
174
  async fetchActiveBreakpoints() {
90
175
  try {
91
176
  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
- });
177
+ const events = this.pendingEvents.splice(0);
178
+ let response;
179
+ if (events.length > 0) {
180
+ response = await fetch(url, {
181
+ method: 'POST',
182
+ headers: {
183
+ 'X-API-Key': this.apiKey,
184
+ 'Content-Type': 'application/json',
185
+ },
186
+ body: JSON.stringify({ events }),
187
+ });
188
+ }
189
+ else {
190
+ response = await fetch(url, {
191
+ headers: {
192
+ 'X-API-Key': this.apiKey,
193
+ },
194
+ });
195
+ }
97
196
  if (!response.ok) {
98
197
  throw new Error(`HTTP ${response.status}`);
99
198
  }
100
199
  const data = await response.json();
101
- this.updateBreakpointCache(data.breakpoints || []);
200
+ const newKillState = data.kill_switch === true;
201
+ if (newKillState && !this.killSwitchActive) {
202
+ console.log('TraceKit: Code monitoring disabled by server kill switch. Polling at reduced frequency.');
203
+ }
204
+ else if (!newKillState && this.killSwitchActive) {
205
+ console.log('TraceKit: Code monitoring re-enabled by server.');
206
+ }
207
+ if (newKillState !== this.killSwitchActive) {
208
+ this.killSwitchActive = newKillState;
209
+ this.schedulePoll();
210
+ }
211
+ if (this.killSwitchActive && this.sseActive && this.sseAbortController) {
212
+ this.sseAbortController.abort();
213
+ this.sseActive = false;
214
+ console.log('TraceKit: SSE connection closed due to kill switch');
215
+ }
216
+ const breakpoints = data.breakpoints || [];
217
+ if (data.sse_endpoint && !this.sseActive && !this.killSwitchActive && breakpoints.length > 0) {
218
+ this.sseEndpoint = data.sse_endpoint;
219
+ this.connectSSE(data.sse_endpoint);
220
+ }
221
+ this.updateBreakpointCache(breakpoints);
102
222
  this.lastFetch = new Date();
103
223
  }
104
224
  catch (error) {
105
225
  console.error('⚠️ Failed to fetch breakpoints:', error);
106
226
  }
107
227
  }
228
+ async connectSSE(endpoint) {
229
+ try {
230
+ const fullURL = `${this.baseURL}${endpoint}`;
231
+ this.sseAbortController = new AbortController();
232
+ const response = await fetch(fullURL, {
233
+ headers: {
234
+ 'X-API-Key': this.apiKey,
235
+ 'Accept': 'text/event-stream',
236
+ },
237
+ signal: this.sseAbortController.signal,
238
+ });
239
+ if (!response.ok) {
240
+ console.warn(`TraceKit: SSE endpoint returned ${response.status}, falling back to polling`);
241
+ this.sseActive = false;
242
+ return;
243
+ }
244
+ this.sseActive = true;
245
+ console.log('TraceKit: SSE connection established for real-time breakpoint updates');
246
+ const reader = response.body?.getReader();
247
+ if (!reader) {
248
+ this.sseActive = false;
249
+ return;
250
+ }
251
+ const decoder = new TextDecoder();
252
+ let buffer = '';
253
+ let eventType = '';
254
+ let dataBuffer = '';
255
+ while (true) {
256
+ const { done, value } = await reader.read();
257
+ if (done)
258
+ break;
259
+ buffer += decoder.decode(value, { stream: true });
260
+ const lines = buffer.split('\n');
261
+ buffer = lines.pop() || '';
262
+ for (const line of lines) {
263
+ if (line.startsWith('event:')) {
264
+ eventType = line.slice(6).trim();
265
+ }
266
+ else if (line.startsWith('data:')) {
267
+ if (dataBuffer)
268
+ dataBuffer += '\n';
269
+ dataBuffer += line.slice(5).trim();
270
+ }
271
+ else if (line === '') {
272
+ if (eventType && dataBuffer) {
273
+ this.handleSSEEvent(eventType, dataBuffer);
274
+ }
275
+ eventType = '';
276
+ dataBuffer = '';
277
+ }
278
+ }
279
+ }
280
+ console.log('TraceKit: SSE connection closed, falling back to polling');
281
+ }
282
+ catch (error) {
283
+ if (error?.name !== 'AbortError') {
284
+ console.warn('TraceKit: SSE connection lost, falling back to polling:', error?.message);
285
+ }
286
+ }
287
+ finally {
288
+ this.sseActive = false;
289
+ }
290
+ }
291
+ handleSSEEvent(eventType, data) {
292
+ try {
293
+ switch (eventType) {
294
+ case 'init': {
295
+ const initData = JSON.parse(data);
296
+ this.updateBreakpointCache(initData.breakpoints);
297
+ this.killSwitchActive = initData.kill_switch;
298
+ if (this.killSwitchActive && this.sseAbortController) {
299
+ this.sseAbortController.abort();
300
+ }
301
+ console.log(`TraceKit: SSE init received, ${initData.breakpoints.length} breakpoints loaded`);
302
+ break;
303
+ }
304
+ case 'breakpoint_created':
305
+ case 'breakpoint_updated': {
306
+ const bp = JSON.parse(data);
307
+ if (bp.label && bp.function_name) {
308
+ const labelKey = `${bp.function_name}:${bp.label}`;
309
+ this.breakpointsCache.set(labelKey, bp);
310
+ }
311
+ const lineKey = `${bp.file_path}:${bp.line_number}`;
312
+ this.breakpointsCache.set(lineKey, bp);
313
+ console.log(`TraceKit: SSE breakpoint ${eventType}: ${bp.id}`);
314
+ break;
315
+ }
316
+ case 'breakpoint_deleted': {
317
+ const deleteData = JSON.parse(data);
318
+ for (const [key, bp] of this.breakpointsCache.entries()) {
319
+ if (bp.id === deleteData.id) {
320
+ this.breakpointsCache.delete(key);
321
+ }
322
+ }
323
+ console.log(`TraceKit: SSE breakpoint deleted: ${deleteData.id}`);
324
+ break;
325
+ }
326
+ case 'kill_switch': {
327
+ const ksData = JSON.parse(data);
328
+ this.killSwitchActive = ksData.enabled;
329
+ if (ksData.enabled) {
330
+ console.log('TraceKit: Kill switch enabled via SSE, closing connection');
331
+ if (this.sseAbortController) {
332
+ this.sseAbortController.abort();
333
+ }
334
+ }
335
+ break;
336
+ }
337
+ case 'heartbeat':
338
+ break;
339
+ default:
340
+ console.warn(`TraceKit: unknown SSE event type: ${eventType}`);
341
+ }
342
+ }
343
+ catch (error) {
344
+ console.error(`TraceKit: error handling SSE event ${eventType}:`, error);
345
+ }
346
+ }
108
347
  updateBreakpointCache(breakpoints) {
109
348
  this.breakpointsCache.clear();
110
349
  for (const bp of breakpoints) {
@@ -144,7 +383,50 @@ class SnapshotClient {
144
383
  return null;
145
384
  }
146
385
  }
386
+ shouldAllow() {
387
+ if (this.circuitBreakerState === 'closed') {
388
+ return true;
389
+ }
390
+ if (this.circuitBreakerOpenedAt !== null) {
391
+ const elapsed = Date.now() - this.circuitBreakerOpenedAt;
392
+ if (elapsed >= this.circuitBreakerCooldownMs) {
393
+ this.circuitBreakerState = 'closed';
394
+ this.circuitBreakerFailureTimestamps = [];
395
+ this.circuitBreakerOpenedAt = null;
396
+ console.log('TraceKit: Code monitoring resumed');
397
+ return true;
398
+ }
399
+ }
400
+ return false;
401
+ }
402
+ recordFailure() {
403
+ const now = Date.now();
404
+ this.circuitBreakerFailureTimestamps.push(now);
405
+ const cutoff = now - this.circuitBreakerWindowMs;
406
+ this.circuitBreakerFailureTimestamps = this.circuitBreakerFailureTimestamps.filter(ts => ts > cutoff);
407
+ if (this.circuitBreakerFailureTimestamps.length >= this.circuitBreakerMaxFailures &&
408
+ this.circuitBreakerState === 'closed') {
409
+ this.circuitBreakerState = 'open';
410
+ this.circuitBreakerOpenedAt = now;
411
+ console.warn(`TraceKit: Code monitoring paused (${this.circuitBreakerMaxFailures} capture failures in ${this.circuitBreakerWindowMs / 1000}s). Auto-resumes in ${this.circuitBreakerCooldownMs / 60000} min.`);
412
+ return true;
413
+ }
414
+ return false;
415
+ }
416
+ queueCircuitBreakerEvent() {
417
+ this.pendingEvents.push({
418
+ type: 'circuit_breaker_tripped',
419
+ service_name: this.serviceName,
420
+ failure_count: this.circuitBreakerMaxFailures,
421
+ window_seconds: this.circuitBreakerWindowMs / 1000,
422
+ cooldown_seconds: this.circuitBreakerCooldownMs / 1000,
423
+ timestamp: new Date().toISOString(),
424
+ });
425
+ }
147
426
  async captureSnapshot(snapshot) {
427
+ if (!this.shouldAllow()) {
428
+ return;
429
+ }
148
430
  try {
149
431
  const response = await fetch(`${this.baseURL}/sdk/snapshots/capture`, {
150
432
  method: 'POST',
@@ -154,7 +436,13 @@ class SnapshotClient {
154
436
  },
155
437
  body: JSON.stringify(snapshot),
156
438
  });
157
- if (!response.ok) {
439
+ if (response.status >= 500) {
440
+ console.error('⚠️ Failed to capture snapshot:', response.status);
441
+ if (this.recordFailure()) {
442
+ this.queueCircuitBreakerEvent();
443
+ }
444
+ }
445
+ else if (!response.ok) {
158
446
  console.error('⚠️ Failed to capture snapshot:', response.status);
159
447
  }
160
448
  else {
@@ -163,6 +451,9 @@ class SnapshotClient {
163
451
  }
164
452
  catch (error) {
165
453
  console.error('⚠️ Failed to capture snapshot:', error);
454
+ if (this.recordFailure()) {
455
+ this.queueCircuitBreakerEvent();
456
+ }
166
457
  }
167
458
  }
168
459
  extractRequestContext() {
@@ -172,43 +463,86 @@ class SnapshotClient {
172
463
  const sanitized = {};
173
464
  for (const [key, value] of Object.entries(variables)) {
174
465
  try {
175
- JSON.stringify(value);
466
+ this.safeSerialize(value);
176
467
  sanitized[key] = value;
177
468
  }
178
469
  catch {
179
- sanitized[key] = `[${typeof value}]`;
470
+ sanitized[key] = `[unserializable:${typeof value}]`;
180
471
  }
181
472
  }
182
473
  return sanitized;
183
474
  }
475
+ safeSerialize(value) {
476
+ const seen = new WeakSet();
477
+ return JSON.stringify(value, (_key, val) => {
478
+ if (typeof val === 'object' && val !== null) {
479
+ if (seen.has(val)) {
480
+ return '[circular reference]';
481
+ }
482
+ seen.add(val);
483
+ }
484
+ return val;
485
+ });
486
+ }
487
+ limitDepth(obj, currentDepth, maxDepth) {
488
+ if (currentDepth >= maxDepth) {
489
+ return { _truncated: true, _depth: currentDepth };
490
+ }
491
+ const result = {};
492
+ for (const [key, value] of Object.entries(obj)) {
493
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
494
+ result[key] = this.limitDepth(value, currentDepth + 1, maxDepth);
495
+ }
496
+ else if (Array.isArray(value)) {
497
+ result[key] = this.limitDepthArray(value, currentDepth + 1, maxDepth);
498
+ }
499
+ else {
500
+ result[key] = value;
501
+ }
502
+ }
503
+ return result;
504
+ }
505
+ limitDepthArray(arr, currentDepth, maxDepth) {
506
+ if (currentDepth >= maxDepth) {
507
+ return { _truncated: true, _depth: currentDepth, _length: arr.length };
508
+ }
509
+ return arr.map((item) => {
510
+ if (item && typeof item === 'object' && !Array.isArray(item)) {
511
+ return this.limitDepth(item, currentDepth + 1, maxDepth);
512
+ }
513
+ else if (Array.isArray(item)) {
514
+ return this.limitDepthArray(item, currentDepth + 1, maxDepth);
515
+ }
516
+ return item;
517
+ });
518
+ }
184
519
  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
- };
520
+ if (this.captureConfig.piiScrubbing === false) {
521
+ return { variables, flags: [] };
522
+ }
191
523
  const securityFlags = [];
192
524
  const sanitized = this.sanitizeVariables(variables);
193
525
  for (const [name, value] of Object.entries(variables)) {
194
- if (/password|secret|token|key|credential/i.test(name)) {
526
+ if (SENSITIVE_NAME_PATTERN.test(name)) {
195
527
  securityFlags.push({
196
528
  type: 'sensitive_variable_name',
197
529
  severity: 'medium',
198
530
  variable: name,
199
531
  });
200
- sanitized[name] = '[REDACTED]';
532
+ sanitized[name] = '[REDACTED:sensitive_name]';
201
533
  continue;
202
534
  }
203
- const serialized = JSON.stringify(value);
204
- for (const [type, pattern] of Object.entries(sensitivePatterns)) {
535
+ const serialized = this.safeSerialize(value);
536
+ let flagged = false;
537
+ for (const { pattern, marker } of this.piiPatterns) {
205
538
  if (pattern.test(serialized)) {
206
539
  securityFlags.push({
207
- type: `sensitive_data_${type}`,
540
+ type: `sensitive_data_${marker}`,
208
541
  severity: 'high',
209
542
  variable: name,
210
543
  });
211
- sanitized[name] = '[REDACTED]';
544
+ sanitized[name] = marker;
545
+ flagged = true;
212
546
  break;
213
547
  }
214
548
  }
@@ -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.1",
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
  },