vestig 0.11.4 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/README.md +95 -2
  2. package/dist/config.d.ts.map +1 -1
  3. package/dist/config.js +4 -0
  4. package/dist/config.js.map +1 -1
  5. package/dist/index.d.ts +9 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +7 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/logger.d.ts +85 -0
  10. package/dist/logger.d.ts.map +1 -1
  11. package/dist/logger.js +209 -2
  12. package/dist/logger.js.map +1 -1
  13. package/dist/metrics/index.d.ts +2 -0
  14. package/dist/metrics/index.d.ts.map +1 -0
  15. package/dist/metrics/index.js +2 -0
  16. package/dist/metrics/index.js.map +1 -0
  17. package/dist/metrics/prometheus.d.ts +109 -0
  18. package/dist/metrics/prometheus.d.ts.map +1 -0
  19. package/dist/metrics/prometheus.js +162 -0
  20. package/dist/metrics/prometheus.js.map +1 -0
  21. package/dist/sampling/index.d.ts +2 -0
  22. package/dist/sampling/index.d.ts.map +1 -1
  23. package/dist/sampling/index.js +2 -0
  24. package/dist/sampling/index.js.map +1 -1
  25. package/dist/sampling/tail.d.ts +76 -0
  26. package/dist/sampling/tail.d.ts.map +1 -0
  27. package/dist/sampling/tail.js +138 -0
  28. package/dist/sampling/tail.js.map +1 -0
  29. package/dist/transports/batch.d.ts +2 -0
  30. package/dist/transports/batch.d.ts.map +1 -1
  31. package/dist/transports/batch.js +13 -3
  32. package/dist/transports/batch.js.map +1 -1
  33. package/dist/transports/file.d.ts +14 -1
  34. package/dist/transports/file.d.ts.map +1 -1
  35. package/dist/transports/file.js +59 -4
  36. package/dist/transports/file.js.map +1 -1
  37. package/dist/transports/http.d.ts +29 -1
  38. package/dist/transports/http.d.ts.map +1 -1
  39. package/dist/transports/http.js +63 -6
  40. package/dist/transports/http.js.map +1 -1
  41. package/dist/transports/sentry.d.ts +83 -0
  42. package/dist/transports/sentry.d.ts.map +1 -0
  43. package/dist/transports/sentry.js +283 -0
  44. package/dist/transports/sentry.js.map +1 -0
  45. package/dist/types.d.ts +149 -2
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/utils/buffer.d.ts +33 -1
  48. package/dist/utils/buffer.d.ts.map +1 -1
  49. package/dist/utils/buffer.js +40 -2
  50. package/dist/utils/buffer.js.map +1 -1
  51. package/dist/utils/dedupe.d.ts +80 -0
  52. package/dist/utils/dedupe.d.ts.map +1 -0
  53. package/dist/utils/dedupe.js +173 -0
  54. package/dist/utils/dedupe.js.map +1 -0
  55. package/dist/utils/sanitize.d.ts +23 -1
  56. package/dist/utils/sanitize.d.ts.map +1 -1
  57. package/dist/utils/sanitize.js +113 -8
  58. package/dist/utils/sanitize.js.map +1 -1
  59. package/dist/version.d.ts +1 -1
  60. package/dist/version.js +1 -1
  61. package/dist/wide-events/builder.d.ts +51 -0
  62. package/dist/wide-events/builder.d.ts.map +1 -0
  63. package/dist/wide-events/builder.js +177 -0
  64. package/dist/wide-events/builder.js.map +1 -0
  65. package/dist/wide-events/context.d.ts +57 -0
  66. package/dist/wide-events/context.d.ts.map +1 -0
  67. package/dist/wide-events/context.js +148 -0
  68. package/dist/wide-events/context.js.map +1 -0
  69. package/dist/wide-events/index.d.ts +6 -0
  70. package/dist/wide-events/index.d.ts.map +1 -0
  71. package/dist/wide-events/index.js +7 -0
  72. package/dist/wide-events/index.js.map +1 -0
  73. package/dist/wide-events/schemas/http.d.ts +179 -0
  74. package/dist/wide-events/schemas/http.d.ts.map +1 -0
  75. package/dist/wide-events/schemas/http.js +25 -0
  76. package/dist/wide-events/schemas/http.js.map +1 -0
  77. package/dist/wide-events/schemas/index.d.ts +5 -0
  78. package/dist/wide-events/schemas/index.d.ts.map +1 -0
  79. package/dist/wide-events/schemas/index.js +5 -0
  80. package/dist/wide-events/schemas/index.js.map +1 -0
  81. package/dist/wide-events/schemas/job.d.ts +130 -0
  82. package/dist/wide-events/schemas/job.d.ts.map +1 -0
  83. package/dist/wide-events/schemas/job.js +27 -0
  84. package/dist/wide-events/schemas/job.js.map +1 -0
  85. package/dist/wide-events/types.d.ts +216 -0
  86. package/dist/wide-events/types.d.ts.map +1 -0
  87. package/dist/wide-events/types.js +2 -0
  88. package/dist/wide-events/types.js.map +1 -0
  89. package/package.json +1 -1
@@ -24,6 +24,7 @@ export class BatchTransport {
24
24
  flushTimer = null;
25
25
  isFlushing = false;
26
26
  isDestroyed = false;
27
+ failedBatch = null;
27
28
  constructor(config) {
28
29
  this.config = {
29
30
  name: config.name,
@@ -74,12 +75,16 @@ export class BatchTransport {
74
75
  * Flush all buffered entries
75
76
  */
76
77
  async flush() {
77
- if (this.isFlushing || this.buffer.size === 0)
78
+ if (this.isFlushing || (this.buffer.size === 0 && !this.failedBatch))
78
79
  return;
79
80
  this.isFlushing = true;
80
81
  try {
81
- const entries = this.buffer.toArray();
82
+ // Include any previously failed batch entries
83
+ const failedEntries = this.failedBatch;
84
+ this.failedBatch = null;
85
+ const newEntries = this.buffer.toArray();
82
86
  this.buffer.clear();
87
+ const entries = failedEntries ? [...failedEntries, ...newEntries] : newEntries;
83
88
  await this.sendWithRetry(entries);
84
89
  }
85
90
  finally {
@@ -119,7 +124,11 @@ export class BatchTransport {
119
124
  }
120
125
  }
121
126
  }
122
- // All retries failed, call error handler
127
+ // All retries failed - store for retry on next flush
128
+ // This ensures entries aren't lost due to transient failures
129
+ // Note: Only ONE failed batch is retained to prevent unbounded growth
130
+ this.failedBatch = entries;
131
+ // Call error handler for logging/monitoring
123
132
  this.onSendError(lastError, entries);
124
133
  }
125
134
  /**
@@ -151,6 +160,7 @@ export class BatchTransport {
151
160
  buffered: stats.size,
152
161
  dropped: stats.dropped,
153
162
  isFlushing: this.isFlushing,
163
+ pendingRetry: this.failedBatch?.length ?? 0,
154
164
  };
155
165
  }
156
166
  }
@@ -1 +1 @@
1
- {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/transports/batch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../src/transports/batch.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { FileTransportConfig, LogEntry } from '../types';
1
+ import type { FileTransportConfig, LogEntry, RotationInterval } from '../types';
2
2
  import { BatchTransport } from './batch';
3
3
  /**
4
4
  * File transport for writing logs to disk
@@ -22,7 +22,9 @@ export declare class FileTransport extends BatchTransport {
22
22
  private readonly maxSize;
23
23
  private readonly maxFiles;
24
24
  private readonly compress;
25
+ private readonly rotateInterval;
25
26
  private currentSize;
27
+ private currentPeriod;
26
28
  private fd;
27
29
  private fs;
28
30
  private zlib;
@@ -41,6 +43,10 @@ export declare class FileTransport extends BatchTransport {
41
43
  protected send(entries: LogEntry[]): Promise<void>;
42
44
  /**
43
45
  * Rotate log files
46
+ *
47
+ * For size-based rotation: app.log -> app.log.1 -> app.log.2 -> ...
48
+ * For time-based rotation: app.log -> app.log.2026-01-04 -> app.log.2026-01-03 -> ...
49
+ * Combined: uses period suffix when available, then numeric index
44
50
  */
45
51
  private rotate;
46
52
  /**
@@ -55,5 +61,12 @@ export declare class FileTransport extends BatchTransport {
55
61
  * Get current file size
56
62
  */
57
63
  getCurrentSize(): number;
64
+ /**
65
+ * Get rotation configuration
66
+ */
67
+ getRotationConfig(): {
68
+ interval: RotationInterval;
69
+ currentPeriod: string;
70
+ };
58
71
  }
59
72
  //# sourceMappingURL=file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/transports/file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAWxC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAElC,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,EAAE,CAAiD;IAC3D,OAAO,CAAC,IAAI,CAA0C;gBAE1C,MAAM,EAAE,mBAAmB;IAiBvC;;OAEG;IACY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBpC;;OAEG;YACW,QAAQ;IAUtB;;OAEG;cACa,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxD;;OAEG;YACW,MAAM;IAsCpB;;OAEG;YACW,YAAY;IAW1B;;OAEG;IACY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC;;OAEG;IACH,cAAc,IAAI,MAAM;CAGxB"}
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/transports/file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAqCxC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IAEjD,OAAO,CAAC,WAAW,CAAI;IACvB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,EAAE,CAAiD;IAC3D,OAAO,CAAC,IAAI,CAA0C;gBAE1C,MAAM,EAAE,mBAAmB;IAkBvC;;OAEG;IACY,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBpC;;OAEG;YACW,QAAQ;IAetB;;OAEG;cACa,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxD;;;;;;OAMG;YACW,MAAM;IA2CpB;;OAEG;YACW,YAAY;IAW1B;;OAEG;IACY,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASvC;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,iBAAiB,IAAI;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;CAM1E"}
@@ -7,7 +7,31 @@ const DEFAULTS = {
7
7
  maxSize: 10 * 1024 * 1024, // 10MB
8
8
  maxFiles: 5,
9
9
  compress: false,
10
+ rotateInterval: 'none',
10
11
  };
12
+ /**
13
+ * Get the current period identifier for time-based rotation
14
+ */
15
+ function getCurrentPeriod(interval) {
16
+ const now = new Date();
17
+ switch (interval) {
18
+ case 'hourly':
19
+ return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}-${String(now.getHours()).padStart(2, '0')}`;
20
+ case 'daily':
21
+ return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')}`;
22
+ case 'weekly': {
23
+ // Get ISO week number
24
+ const d = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
25
+ const dayNum = d.getUTCDay() || 7;
26
+ d.setUTCDate(d.getUTCDate() + 4 - dayNum);
27
+ const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
28
+ const weekNum = Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);
29
+ return `${d.getUTCFullYear()}-W${String(weekNum).padStart(2, '0')}`;
30
+ }
31
+ default:
32
+ return '';
33
+ }
34
+ }
11
35
  /**
12
36
  * File transport for writing logs to disk
13
37
  *
@@ -30,7 +54,9 @@ export class FileTransport extends BatchTransport {
30
54
  maxSize;
31
55
  maxFiles;
32
56
  compress;
57
+ rotateInterval;
33
58
  currentSize = 0;
59
+ currentPeriod = '';
34
60
  fd = null;
35
61
  fs = null;
36
62
  zlib = null;
@@ -47,6 +73,7 @@ export class FileTransport extends BatchTransport {
47
73
  this.maxSize = config.maxSize ?? DEFAULTS.maxSize;
48
74
  this.maxFiles = config.maxFiles ?? DEFAULTS.maxFiles;
49
75
  this.compress = config.compress ?? DEFAULTS.compress;
76
+ this.rotateInterval = config.rotateInterval ?? DEFAULTS.rotateInterval;
50
77
  }
51
78
  /**
52
79
  * Initialize the file transport
@@ -77,6 +104,10 @@ export class FileTransport extends BatchTransport {
77
104
  // Get current file size
78
105
  const stats = await this.fd.stat();
79
106
  this.currentSize = stats.size;
107
+ // Initialize current period for time-based rotation
108
+ if (this.rotateInterval !== 'none') {
109
+ this.currentPeriod = getCurrentPeriod(this.rotateInterval);
110
+ }
80
111
  }
81
112
  /**
82
113
  * Send entries to the file
@@ -88,7 +119,15 @@ export class FileTransport extends BatchTransport {
88
119
  // Format entries as newline-delimited JSON
89
120
  const data = `${entries.map((e) => JSON.stringify(e)).join('\n')}\n`;
90
121
  const bytes = Buffer.byteLength(data, 'utf8');
91
- // Check if rotation needed
122
+ // Check if time-based rotation needed
123
+ if (this.rotateInterval !== 'none') {
124
+ const newPeriod = getCurrentPeriod(this.rotateInterval);
125
+ if (newPeriod !== this.currentPeriod) {
126
+ await this.rotate();
127
+ this.currentPeriod = newPeriod;
128
+ }
129
+ }
130
+ // Check if size-based rotation needed
92
131
  if (this.currentSize + bytes > this.maxSize) {
93
132
  await this.rotate();
94
133
  }
@@ -98,6 +137,10 @@ export class FileTransport extends BatchTransport {
98
137
  }
99
138
  /**
100
139
  * Rotate log files
140
+ *
141
+ * For size-based rotation: app.log -> app.log.1 -> app.log.2 -> ...
142
+ * For time-based rotation: app.log -> app.log.2026-01-04 -> app.log.2026-01-03 -> ...
143
+ * Combined: uses period suffix when available, then numeric index
101
144
  */
102
145
  async rotate() {
103
146
  if (!this.fd || !this.fs)
@@ -105,10 +148,13 @@ export class FileTransport extends BatchTransport {
105
148
  // Close current file
106
149
  await this.fd.close();
107
150
  this.fd = null;
151
+ // Determine the suffix for the rotated file
152
+ const periodSuffix = this.rotateInterval !== 'none' && this.currentPeriod ? `.${this.currentPeriod}` : '';
153
+ const compressSuffix = this.compress ? '.gz' : '';
108
154
  // Rotate existing files
109
155
  for (let i = this.maxFiles - 1; i >= 1; i--) {
110
- const oldPath = i === 1 ? this.path : `${this.path}.${i - 1}${this.compress ? '.gz' : ''}`;
111
- const newPath = `${this.path}.${i}${this.compress ? '.gz' : ''}`;
156
+ const oldPath = i === 1 ? this.path : `${this.path}${periodSuffix}.${i - 1}${compressSuffix}`;
157
+ const newPath = `${this.path}${periodSuffix}.${i}${compressSuffix}`;
112
158
  try {
113
159
  await this.fs.access(oldPath);
114
160
  if (i === 1 && this.compress) {
@@ -125,7 +171,7 @@ export class FileTransport extends BatchTransport {
125
171
  }
126
172
  }
127
173
  // Delete oldest file if it exists
128
- const oldestPath = `${this.path}.${this.maxFiles}${this.compress ? '.gz' : ''}`;
174
+ const oldestPath = `${this.path}${periodSuffix}.${this.maxFiles}${compressSuffix}`;
129
175
  try {
130
176
  await this.fs.unlink(oldestPath);
131
177
  }
@@ -163,5 +209,14 @@ export class FileTransport extends BatchTransport {
163
209
  getCurrentSize() {
164
210
  return this.currentSize;
165
211
  }
212
+ /**
213
+ * Get rotation configuration
214
+ */
215
+ getRotationConfig() {
216
+ return {
217
+ interval: this.rotateInterval,
218
+ currentPeriod: this.currentPeriod,
219
+ };
220
+ }
166
221
  }
167
222
  //# sourceMappingURL=file.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/transports/file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/transports/file.ts"],"names":[],"mappings":"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"}
@@ -28,6 +28,7 @@ export declare class HTTPTransport extends BatchTransport {
28
28
  private readonly headers;
29
29
  private readonly timeout;
30
30
  private readonly transform?;
31
+ private readonly keepAlive;
31
32
  constructor(config: HTTPTransportConfig);
32
33
  /**
33
34
  * Send entries to the configured URL
@@ -40,10 +41,37 @@ export declare class HTTPTransport extends BatchTransport {
40
41
  }
41
42
  /**
42
43
  * Custom error for HTTP transport failures
44
+ *
45
+ * Wraps all HTTP-related errors for consistent error handling.
46
+ * Status codes:
47
+ * - 0: Network error (no response received)
48
+ * - 408: Request timeout
49
+ * - 4xx/5xx: HTTP response errors
43
50
  */
44
51
  export declare class HTTPTransportError extends Error {
45
52
  readonly statusCode: number;
46
53
  readonly responseBody?: string | undefined;
47
- constructor(message: string, statusCode: number, responseBody?: string | undefined);
54
+ readonly cause?: Error | undefined;
55
+ constructor(message: string, statusCode: number, responseBody?: string | undefined, cause?: Error | undefined);
56
+ /**
57
+ * Whether this error represents a network failure (no response received)
58
+ */
59
+ get isNetworkError(): boolean;
60
+ /**
61
+ * Whether this error represents a timeout
62
+ */
63
+ get isTimeout(): boolean;
64
+ /**
65
+ * Whether this error represents a client error (4xx)
66
+ */
67
+ get isClientError(): boolean;
68
+ /**
69
+ * Whether this error represents a server error (5xx)
70
+ */
71
+ get isServerError(): boolean;
72
+ /**
73
+ * Whether the request should be retried (network errors, timeouts, 5xx)
74
+ */
75
+ get isRetryable(): boolean;
48
76
  }
49
77
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAaxC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAkC;gBAEjD,MAAM,EAAE,mBAAmB;IAcvC;;OAEG;cACa,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCxD;;OAEG;YACW,YAAY;CAO1B;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAG3B,UAAU,EAAE,MAAM;aAClB,YAAY,CAAC,EAAE,MAAM;gBAFrC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,YAAA;CAKtC"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAcxC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAc,SAAQ,cAAc;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAkC;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,MAAM,EAAE,mBAAmB;IAqBvC;;OAEG;cACa,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CxD;;OAEG;YACW,YAAY;CAO1B;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAG3B,UAAU,EAAE,MAAM;aAClB,YAAY,CAAC,EAAE,MAAM;aACnB,KAAK,CAAC,EAAE,KAAK;gBAH/B,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,YAAA,EACnB,KAAK,CAAC,EAAE,KAAK,YAAA;IAMhC;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;CACD"}
@@ -5,6 +5,7 @@ import { BatchTransport } from './batch';
5
5
  const DEFAULTS = {
6
6
  method: 'POST',
7
7
  timeout: 30000,
8
+ keepAlive: true,
8
9
  headers: {
9
10
  'Content-Type': 'application/json',
10
11
  },
@@ -37,6 +38,7 @@ export class HTTPTransport extends BatchTransport {
37
38
  headers;
38
39
  timeout;
39
40
  transform;
41
+ keepAlive;
40
42
  constructor(config) {
41
43
  super({
42
44
  ...config,
@@ -45,9 +47,15 @@ export class HTTPTransport extends BatchTransport {
45
47
  this.name = config.name ?? 'http';
46
48
  this.url = config.url;
47
49
  this.method = config.method ?? DEFAULTS.method;
48
- this.headers = { ...DEFAULTS.headers, ...config.headers };
49
50
  this.timeout = config.timeout ?? DEFAULTS.timeout;
50
51
  this.transform = config.transform;
52
+ this.keepAlive = config.keepAlive ?? DEFAULTS.keepAlive;
53
+ // Build headers with optional keep-alive
54
+ this.headers = {
55
+ ...DEFAULTS.headers,
56
+ ...(this.keepAlive ? { Connection: 'keep-alive' } : {}),
57
+ ...config.headers,
58
+ };
51
59
  }
52
60
  /**
53
61
  * Send entries to the configured URL
@@ -63,16 +71,27 @@ export class HTTPTransport extends BatchTransport {
63
71
  headers: this.headers,
64
72
  body,
65
73
  signal: controller.signal,
74
+ // Enable keepalive for browser page-unload scenarios
75
+ // This ensures the request completes even during navigation
76
+ keepalive: this.keepAlive,
66
77
  });
67
78
  if (!response.ok) {
68
79
  throw new HTTPTransportError(`HTTP ${response.status}: ${response.statusText}`, response.status, await this.safeReadBody(response));
69
80
  }
70
81
  }
71
82
  catch (err) {
72
- if (err instanceof Error && err.name === 'AbortError') {
73
- throw new HTTPTransportError(`Request timeout after ${this.timeout}ms`, 408);
83
+ // Wrap all errors in HTTPTransportError for consistency
84
+ if (err instanceof HTTPTransportError) {
85
+ throw err;
74
86
  }
75
- throw err;
87
+ if (err instanceof Error) {
88
+ if (err.name === 'AbortError') {
89
+ throw new HTTPTransportError(`Request timeout after ${this.timeout}ms`, 408);
90
+ }
91
+ // Network errors (ECONNREFUSED, DNS failures, etc.)
92
+ throw new HTTPTransportError(err.message, 0, undefined, err);
93
+ }
94
+ throw new HTTPTransportError(String(err), 0);
76
95
  }
77
96
  finally {
78
97
  clearTimeout(timeoutId);
@@ -92,15 +111,53 @@ export class HTTPTransport extends BatchTransport {
92
111
  }
93
112
  /**
94
113
  * Custom error for HTTP transport failures
114
+ *
115
+ * Wraps all HTTP-related errors for consistent error handling.
116
+ * Status codes:
117
+ * - 0: Network error (no response received)
118
+ * - 408: Request timeout
119
+ * - 4xx/5xx: HTTP response errors
95
120
  */
96
121
  export class HTTPTransportError extends Error {
97
122
  statusCode;
98
123
  responseBody;
99
- constructor(message, statusCode, responseBody) {
100
- super(message);
124
+ cause;
125
+ constructor(message, statusCode, responseBody, cause) {
126
+ super(message, cause ? { cause } : undefined);
101
127
  this.statusCode = statusCode;
102
128
  this.responseBody = responseBody;
129
+ this.cause = cause;
103
130
  this.name = 'HTTPTransportError';
104
131
  }
132
+ /**
133
+ * Whether this error represents a network failure (no response received)
134
+ */
135
+ get isNetworkError() {
136
+ return this.statusCode === 0;
137
+ }
138
+ /**
139
+ * Whether this error represents a timeout
140
+ */
141
+ get isTimeout() {
142
+ return this.statusCode === 408;
143
+ }
144
+ /**
145
+ * Whether this error represents a client error (4xx)
146
+ */
147
+ get isClientError() {
148
+ return this.statusCode >= 400 && this.statusCode < 500;
149
+ }
150
+ /**
151
+ * Whether this error represents a server error (5xx)
152
+ */
153
+ get isServerError() {
154
+ return this.statusCode >= 500 && this.statusCode < 600;
155
+ }
156
+ /**
157
+ * Whether the request should be retried (network errors, timeouts, 5xx)
158
+ */
159
+ get isRetryable() {
160
+ return this.isNetworkError || this.isTimeout || this.isServerError;
161
+ }
105
162
  }
106
163
  //# sourceMappingURL=http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import type { LogEntry, SentryTransportConfig } from '../types';
2
+ import { BatchTransport } from './batch';
3
+ /**
4
+ * Sentry transport for sending logs to Sentry
5
+ *
6
+ * Maps vestig log entries to Sentry events and sends them via
7
+ * Sentry's Store API. Supports environments, releases, tags,
8
+ * and automatic error extraction.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const transport = new SentryTransport({
13
+ * name: 'sentry',
14
+ * dsn: process.env.SENTRY_DSN,
15
+ * environment: 'production',
16
+ * release: 'my-app@1.2.3',
17
+ * tags: { team: 'backend' },
18
+ * })
19
+ *
20
+ * logger.addTransport(transport)
21
+ * logger.error('Database connection failed', { host: 'db-1' })
22
+ * ```
23
+ */
24
+ export declare class SentryTransport extends BatchTransport {
25
+ readonly name: string;
26
+ private readonly parsedDSN;
27
+ private readonly environment?;
28
+ private readonly release?;
29
+ private readonly service?;
30
+ private readonly serverName?;
31
+ private readonly tags?;
32
+ private readonly minLevel;
33
+ constructor(config: SentryTransportConfig);
34
+ /**
35
+ * Parse Sentry DSN into components
36
+ */
37
+ private parseDSN;
38
+ /**
39
+ * Build the Sentry store API URL
40
+ */
41
+ private getStoreUrl;
42
+ /**
43
+ * Check if a log entry should be sent based on minimum level
44
+ */
45
+ private shouldSend;
46
+ /**
47
+ * Send entries to Sentry
48
+ */
49
+ protected send(entries: LogEntry[]): Promise<void>;
50
+ /**
51
+ * Send a single event to Sentry
52
+ */
53
+ private sendEvent;
54
+ /**
55
+ * Build Sentry authentication header
56
+ */
57
+ private buildAuthHeader;
58
+ /**
59
+ * Transform a log entry to Sentry event format
60
+ */
61
+ private transformEntry;
62
+ /**
63
+ * Generate a random event ID (32 hex chars)
64
+ */
65
+ private generateEventId;
66
+ /**
67
+ * Parse stack trace into Sentry frame format
68
+ */
69
+ private parseStackTrace;
70
+ /**
71
+ * Safely read response body for error messages
72
+ */
73
+ private safeReadBody;
74
+ }
75
+ /**
76
+ * Custom error for Sentry transport failures
77
+ */
78
+ export declare class SentryTransportError extends Error {
79
+ readonly statusCode: number;
80
+ readonly responseBody?: string | undefined;
81
+ constructor(message: string, statusCode: number, responseBody?: string | undefined);
82
+ }
83
+ //# sourceMappingURL=sentry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../../src/transports/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAY,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAiCxC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAgB,SAAQ,cAAc;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAwB;IAC9C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,MAAM,EAAE,qBAAqB;IAmBzC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAiBhB;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;cACa,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBxD;;OAEG;YACW,SAAS;IAsBvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,cAAc;IA+EtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAevB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;YACW,YAAY;CAO1B;AAED;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aAG7B,UAAU,EAAE,MAAM;aAClB,YAAY,CAAC,EAAE,MAAM;gBAFrC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,YAAA;CAKtC"}