vestig 0.11.5 → 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.
- package/README.md +95 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +9 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +85 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +209 -2
- package/dist/logger.js.map +1 -1
- package/dist/metrics/index.d.ts +2 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +2 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/prometheus.d.ts +109 -0
- package/dist/metrics/prometheus.d.ts.map +1 -0
- package/dist/metrics/prometheus.js +162 -0
- package/dist/metrics/prometheus.js.map +1 -0
- package/dist/sampling/index.d.ts +2 -0
- package/dist/sampling/index.d.ts.map +1 -1
- package/dist/sampling/index.js +2 -0
- package/dist/sampling/index.js.map +1 -1
- package/dist/sampling/tail.d.ts +76 -0
- package/dist/sampling/tail.d.ts.map +1 -0
- package/dist/sampling/tail.js +138 -0
- package/dist/sampling/tail.js.map +1 -0
- package/dist/transports/batch.d.ts +2 -0
- package/dist/transports/batch.d.ts.map +1 -1
- package/dist/transports/batch.js +13 -3
- package/dist/transports/batch.js.map +1 -1
- package/dist/transports/file.d.ts +14 -1
- package/dist/transports/file.d.ts.map +1 -1
- package/dist/transports/file.js +59 -4
- package/dist/transports/file.js.map +1 -1
- package/dist/transports/http.d.ts +29 -1
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +63 -6
- package/dist/transports/http.js.map +1 -1
- package/dist/transports/sentry.d.ts +83 -0
- package/dist/transports/sentry.d.ts.map +1 -0
- package/dist/transports/sentry.js +283 -0
- package/dist/transports/sentry.js.map +1 -0
- package/dist/types.d.ts +149 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/buffer.d.ts +33 -1
- package/dist/utils/buffer.d.ts.map +1 -1
- package/dist/utils/buffer.js +40 -2
- package/dist/utils/buffer.js.map +1 -1
- package/dist/utils/dedupe.d.ts +80 -0
- package/dist/utils/dedupe.d.ts.map +1 -0
- package/dist/utils/dedupe.js +173 -0
- package/dist/utils/dedupe.js.map +1 -0
- package/dist/utils/sanitize.d.ts +23 -1
- package/dist/utils/sanitize.d.ts.map +1 -1
- package/dist/utils/sanitize.js +113 -8
- package/dist/utils/sanitize.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/wide-events/builder.d.ts +51 -0
- package/dist/wide-events/builder.d.ts.map +1 -0
- package/dist/wide-events/builder.js +177 -0
- package/dist/wide-events/builder.js.map +1 -0
- package/dist/wide-events/context.d.ts +57 -0
- package/dist/wide-events/context.d.ts.map +1 -0
- package/dist/wide-events/context.js +148 -0
- package/dist/wide-events/context.js.map +1 -0
- package/dist/wide-events/index.d.ts +6 -0
- package/dist/wide-events/index.d.ts.map +1 -0
- package/dist/wide-events/index.js +7 -0
- package/dist/wide-events/index.js.map +1 -0
- package/dist/wide-events/schemas/http.d.ts +179 -0
- package/dist/wide-events/schemas/http.d.ts.map +1 -0
- package/dist/wide-events/schemas/http.js +25 -0
- package/dist/wide-events/schemas/http.js.map +1 -0
- package/dist/wide-events/schemas/index.d.ts +5 -0
- package/dist/wide-events/schemas/index.d.ts.map +1 -0
- package/dist/wide-events/schemas/index.js +5 -0
- package/dist/wide-events/schemas/index.js.map +1 -0
- package/dist/wide-events/schemas/job.d.ts +130 -0
- package/dist/wide-events/schemas/job.d.ts.map +1 -0
- package/dist/wide-events/schemas/job.js +27 -0
- package/dist/wide-events/schemas/job.js.map +1 -0
- package/dist/wide-events/types.d.ts +216 -0
- package/dist/wide-events/types.d.ts.map +1 -0
- package/dist/wide-events/types.js +2 -0
- package/dist/wide-events/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { BatchTransport } from './batch';
|
|
2
|
+
/**
|
|
3
|
+
* Sentry severity level mapping from vestig log levels
|
|
4
|
+
*/
|
|
5
|
+
const SENTRY_LEVELS = {
|
|
6
|
+
trace: 'debug',
|
|
7
|
+
debug: 'debug',
|
|
8
|
+
info: 'info',
|
|
9
|
+
warn: 'warning',
|
|
10
|
+
error: 'error',
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Sentry log level priority for filtering
|
|
14
|
+
*/
|
|
15
|
+
const LEVEL_PRIORITY = {
|
|
16
|
+
trace: 0,
|
|
17
|
+
debug: 1,
|
|
18
|
+
info: 2,
|
|
19
|
+
warn: 3,
|
|
20
|
+
error: 4,
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Sentry transport for sending logs to Sentry
|
|
24
|
+
*
|
|
25
|
+
* Maps vestig log entries to Sentry events and sends them via
|
|
26
|
+
* Sentry's Store API. Supports environments, releases, tags,
|
|
27
|
+
* and automatic error extraction.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const transport = new SentryTransport({
|
|
32
|
+
* name: 'sentry',
|
|
33
|
+
* dsn: process.env.SENTRY_DSN,
|
|
34
|
+
* environment: 'production',
|
|
35
|
+
* release: 'my-app@1.2.3',
|
|
36
|
+
* tags: { team: 'backend' },
|
|
37
|
+
* })
|
|
38
|
+
*
|
|
39
|
+
* logger.addTransport(transport)
|
|
40
|
+
* logger.error('Database connection failed', { host: 'db-1' })
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export class SentryTransport extends BatchTransport {
|
|
44
|
+
name;
|
|
45
|
+
parsedDSN;
|
|
46
|
+
environment;
|
|
47
|
+
release;
|
|
48
|
+
service;
|
|
49
|
+
serverName;
|
|
50
|
+
tags;
|
|
51
|
+
minLevel;
|
|
52
|
+
constructor(config) {
|
|
53
|
+
super({
|
|
54
|
+
...config,
|
|
55
|
+
name: config.name ?? 'sentry',
|
|
56
|
+
// Sentry recommends smaller batches for real-time alerting
|
|
57
|
+
batchSize: config.batchSize ?? 10,
|
|
58
|
+
flushInterval: config.flushInterval ?? 2000,
|
|
59
|
+
});
|
|
60
|
+
this.name = config.name ?? 'sentry';
|
|
61
|
+
this.parsedDSN = this.parseDSN(config.dsn);
|
|
62
|
+
this.environment = config.environment;
|
|
63
|
+
this.release = config.release;
|
|
64
|
+
this.service = config.service;
|
|
65
|
+
this.serverName = config.serverName;
|
|
66
|
+
this.tags = config.tags;
|
|
67
|
+
this.minLevel = config.minLevel ?? 'warn';
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Parse Sentry DSN into components
|
|
71
|
+
*/
|
|
72
|
+
parseDSN(dsn) {
|
|
73
|
+
try {
|
|
74
|
+
const url = new URL(dsn);
|
|
75
|
+
const publicKey = url.username;
|
|
76
|
+
const host = url.host;
|
|
77
|
+
const projectId = url.pathname.slice(1); // Remove leading slash
|
|
78
|
+
if (!publicKey || !projectId) {
|
|
79
|
+
throw new Error('Invalid DSN format');
|
|
80
|
+
}
|
|
81
|
+
return { publicKey, host, projectId };
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
throw new SentryTransportError(`Invalid Sentry DSN: ${dsn}`, 0);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build the Sentry store API URL
|
|
89
|
+
*/
|
|
90
|
+
getStoreUrl() {
|
|
91
|
+
const { host, projectId } = this.parsedDSN;
|
|
92
|
+
return `https://${host}/api/${projectId}/store/`;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if a log entry should be sent based on minimum level
|
|
96
|
+
*/
|
|
97
|
+
shouldSend(entry) {
|
|
98
|
+
return LEVEL_PRIORITY[entry.level] >= LEVEL_PRIORITY[this.minLevel];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Send entries to Sentry
|
|
102
|
+
*/
|
|
103
|
+
async send(entries) {
|
|
104
|
+
// Filter entries by minimum level
|
|
105
|
+
const filteredEntries = entries.filter((e) => this.shouldSend(e));
|
|
106
|
+
if (filteredEntries.length === 0) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Send each entry as a separate event (Sentry doesn't batch well)
|
|
110
|
+
const promises = filteredEntries.map((entry) => this.sendEvent(entry));
|
|
111
|
+
const results = await Promise.allSettled(promises);
|
|
112
|
+
// Check for failures
|
|
113
|
+
const failures = results.filter((r) => r.status === 'rejected');
|
|
114
|
+
if (failures.length > 0) {
|
|
115
|
+
const firstError = failures[0].reason;
|
|
116
|
+
throw firstError;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Send a single event to Sentry
|
|
121
|
+
*/
|
|
122
|
+
async sendEvent(entry) {
|
|
123
|
+
const event = this.transformEntry(entry);
|
|
124
|
+
const url = this.getStoreUrl();
|
|
125
|
+
const response = await fetch(url, {
|
|
126
|
+
method: 'POST',
|
|
127
|
+
headers: {
|
|
128
|
+
'Content-Type': 'application/json',
|
|
129
|
+
'X-Sentry-Auth': this.buildAuthHeader(),
|
|
130
|
+
},
|
|
131
|
+
body: JSON.stringify(event),
|
|
132
|
+
});
|
|
133
|
+
if (!response.ok) {
|
|
134
|
+
throw new SentryTransportError(`Sentry API error: ${response.status} ${response.statusText}`, response.status, await this.safeReadBody(response));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Build Sentry authentication header
|
|
139
|
+
*/
|
|
140
|
+
buildAuthHeader() {
|
|
141
|
+
const { publicKey } = this.parsedDSN;
|
|
142
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
143
|
+
return [
|
|
144
|
+
'Sentry sentry_version=7',
|
|
145
|
+
`sentry_timestamp=${timestamp}`,
|
|
146
|
+
`sentry_key=${publicKey}`,
|
|
147
|
+
'sentry_client=vestig/1.0.0',
|
|
148
|
+
].join(', ');
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Transform a log entry to Sentry event format
|
|
152
|
+
*/
|
|
153
|
+
transformEntry(entry) {
|
|
154
|
+
const event = {
|
|
155
|
+
event_id: this.generateEventId(),
|
|
156
|
+
timestamp: entry.timestamp,
|
|
157
|
+
platform: 'node',
|
|
158
|
+
level: SENTRY_LEVELS[entry.level],
|
|
159
|
+
logger: entry.namespace ?? 'vestig',
|
|
160
|
+
message: {
|
|
161
|
+
formatted: entry.message,
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
// Add environment
|
|
165
|
+
if (this.environment) {
|
|
166
|
+
event.environment = this.environment;
|
|
167
|
+
}
|
|
168
|
+
// Add release
|
|
169
|
+
if (this.release) {
|
|
170
|
+
event.release = this.release;
|
|
171
|
+
}
|
|
172
|
+
// Add server name
|
|
173
|
+
if (this.serverName) {
|
|
174
|
+
event.server_name = this.serverName;
|
|
175
|
+
}
|
|
176
|
+
// Build tags
|
|
177
|
+
const tags = {
|
|
178
|
+
runtime: entry.runtime,
|
|
179
|
+
...(this.tags ?? {}),
|
|
180
|
+
};
|
|
181
|
+
if (this.service) {
|
|
182
|
+
tags.service = this.service;
|
|
183
|
+
}
|
|
184
|
+
if (entry.namespace) {
|
|
185
|
+
tags.namespace = entry.namespace;
|
|
186
|
+
}
|
|
187
|
+
event.tags = tags;
|
|
188
|
+
// Add extra context from metadata
|
|
189
|
+
if (entry.metadata || entry.context) {
|
|
190
|
+
event.extra = {
|
|
191
|
+
...entry.metadata,
|
|
192
|
+
...entry.context,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
// Add error information as exception
|
|
196
|
+
if (entry.error) {
|
|
197
|
+
event.exception = {
|
|
198
|
+
values: [
|
|
199
|
+
{
|
|
200
|
+
type: entry.error.name,
|
|
201
|
+
value: entry.error.message,
|
|
202
|
+
stacktrace: entry.error.stack
|
|
203
|
+
? { frames: this.parseStackTrace(entry.error.stack) }
|
|
204
|
+
: undefined,
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
// Add trace context if available
|
|
210
|
+
if (entry.context?.traceId) {
|
|
211
|
+
event.contexts = {
|
|
212
|
+
trace: {
|
|
213
|
+
trace_id: String(entry.context.traceId),
|
|
214
|
+
span_id: entry.context.spanId ? String(entry.context.spanId) : undefined,
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return event;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Generate a random event ID (32 hex chars)
|
|
222
|
+
*/
|
|
223
|
+
generateEventId() {
|
|
224
|
+
const bytes = new Uint8Array(16);
|
|
225
|
+
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
226
|
+
crypto.getRandomValues(bytes);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
// Fallback for environments without crypto
|
|
230
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
231
|
+
bytes[i] = Math.floor(Math.random() * 256);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return Array.from(bytes)
|
|
235
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
236
|
+
.join('');
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Parse stack trace into Sentry frame format
|
|
240
|
+
*/
|
|
241
|
+
parseStackTrace(stack) {
|
|
242
|
+
const lines = stack.split('\n').slice(1); // Skip first line (error message)
|
|
243
|
+
const frames = [];
|
|
244
|
+
for (const line of lines) {
|
|
245
|
+
const match = line.match(/^\s*at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?/);
|
|
246
|
+
if (match?.[2] && match[3] && match[4]) {
|
|
247
|
+
frames.push({
|
|
248
|
+
function: match[1] || '<anonymous>',
|
|
249
|
+
filename: match[2],
|
|
250
|
+
lineno: Number.parseInt(match[3], 10),
|
|
251
|
+
colno: Number.parseInt(match[4], 10),
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Sentry expects frames in reverse order (most recent last)
|
|
256
|
+
return frames.reverse();
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Safely read response body for error messages
|
|
260
|
+
*/
|
|
261
|
+
async safeReadBody(response) {
|
|
262
|
+
try {
|
|
263
|
+
return await response.text();
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
return undefined;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Custom error for Sentry transport failures
|
|
272
|
+
*/
|
|
273
|
+
export class SentryTransportError extends Error {
|
|
274
|
+
statusCode;
|
|
275
|
+
responseBody;
|
|
276
|
+
constructor(message, statusCode, responseBody) {
|
|
277
|
+
super(message);
|
|
278
|
+
this.statusCode = statusCode;
|
|
279
|
+
this.responseBody = responseBody;
|
|
280
|
+
this.name = 'SentryTransportError';
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=sentry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../src/transports/sentry.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -87,6 +87,44 @@ export interface SanitizeConfig {
|
|
|
87
87
|
*/
|
|
88
88
|
export type SanitizePreset = 'none' | 'minimal' | 'default' | 'gdpr' | 'hipaa' | 'pci-dss';
|
|
89
89
|
export type { NamespaceSamplerConfig, ProbabilitySamplerConfig, RateLimitSamplerConfig, Sampler, SamplerConfig, SamplingConfig, } from './sampling/types';
|
|
90
|
+
/**
|
|
91
|
+
* Duplicate log suppression configuration
|
|
92
|
+
*
|
|
93
|
+
* When enabled, identical logs within a time window are suppressed.
|
|
94
|
+
* A summary log is emitted when the window expires showing how many
|
|
95
|
+
* duplicates were suppressed.
|
|
96
|
+
*/
|
|
97
|
+
export interface DedupeConfig {
|
|
98
|
+
/**
|
|
99
|
+
* Enable duplicate suppression (default: true when config provided)
|
|
100
|
+
*/
|
|
101
|
+
enabled?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Time window in milliseconds for suppression (default: 1000)
|
|
104
|
+
*
|
|
105
|
+
* Logs with the same signature within this window are deduplicated.
|
|
106
|
+
*/
|
|
107
|
+
windowMs?: number;
|
|
108
|
+
/**
|
|
109
|
+
* Maximum unique log signatures to track (default: 1000)
|
|
110
|
+
*
|
|
111
|
+
* When exceeded, oldest entries are evicted. This prevents
|
|
112
|
+
* unbounded memory growth from unique log messages.
|
|
113
|
+
*/
|
|
114
|
+
maxSize?: number;
|
|
115
|
+
/**
|
|
116
|
+
* Include level in deduplication key (default: true)
|
|
117
|
+
*
|
|
118
|
+
* When true, same message at different levels are treated as different.
|
|
119
|
+
*/
|
|
120
|
+
includeLevel?: boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Include namespace in deduplication key (default: true)
|
|
123
|
+
*
|
|
124
|
+
* When true, same message from different namespaces are treated as different.
|
|
125
|
+
*/
|
|
126
|
+
includeNamespace?: boolean;
|
|
127
|
+
}
|
|
90
128
|
/**
|
|
91
129
|
* Logger configuration options
|
|
92
130
|
*/
|
|
@@ -132,13 +170,66 @@ export interface LoggerConfig {
|
|
|
132
170
|
* ```
|
|
133
171
|
*/
|
|
134
172
|
sampling?: import('./sampling/types').SamplingConfig;
|
|
173
|
+
/**
|
|
174
|
+
* Duplicate log suppression configuration.
|
|
175
|
+
*
|
|
176
|
+
* Prevents flooding from identical repeated log messages.
|
|
177
|
+
*
|
|
178
|
+
* @example
|
|
179
|
+
* ```typescript
|
|
180
|
+
* // Suppress duplicates within 1 second (default)
|
|
181
|
+
* createLogger({ dedupe: { enabled: true } })
|
|
182
|
+
*
|
|
183
|
+
* // Custom window and size
|
|
184
|
+
* createLogger({
|
|
185
|
+
* dedupe: {
|
|
186
|
+
* enabled: true,
|
|
187
|
+
* windowMs: 5000, // 5 second window
|
|
188
|
+
* maxSize: 500 // Track up to 500 unique messages
|
|
189
|
+
* }
|
|
190
|
+
* })
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
dedupe?: DedupeConfig;
|
|
194
|
+
/**
|
|
195
|
+
* Tail sampling configuration for wide events.
|
|
196
|
+
*
|
|
197
|
+
* Tail sampling decides AFTER an operation completes whether to keep it,
|
|
198
|
+
* enabling 100% retention of errors/slow requests while sampling success.
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* // Keep all errors, sample 10% of successful requests
|
|
203
|
+
* createLogger({
|
|
204
|
+
* tailSampling: {
|
|
205
|
+
* enabled: true,
|
|
206
|
+
* alwaysKeepStatuses: ['error'],
|
|
207
|
+
* slowThresholdMs: 2000,
|
|
208
|
+
* successSampleRate: 0.1,
|
|
209
|
+
* }
|
|
210
|
+
* })
|
|
211
|
+
*
|
|
212
|
+
* // VIP users get 100% sampling
|
|
213
|
+
* createLogger({
|
|
214
|
+
* tailSampling: {
|
|
215
|
+
* enabled: true,
|
|
216
|
+
* vipUserIds: ['user-123', 'user-456'],
|
|
217
|
+
* vipTiers: ['enterprise', 'premium'],
|
|
218
|
+
* successSampleRate: 0.1,
|
|
219
|
+
* }
|
|
220
|
+
* })
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
tailSampling?: import('./wide-events/types').TailSamplingConfig;
|
|
135
224
|
}
|
|
136
225
|
/**
|
|
137
226
|
* Resolved logger configuration with all required fields populated.
|
|
138
|
-
* Note: `sampling`
|
|
227
|
+
* Note: `sampling`, `dedupe`, and `tailSampling` remain optional as they're disabled by default.
|
|
139
228
|
*/
|
|
140
|
-
export type ResolvedLoggerConfig = Required<Omit<LoggerConfig, 'sampling'>> & {
|
|
229
|
+
export type ResolvedLoggerConfig = Required<Omit<LoggerConfig, 'sampling' | 'dedupe' | 'tailSampling'>> & {
|
|
141
230
|
sampling?: import('./sampling/types').SamplingConfig;
|
|
231
|
+
dedupe?: DedupeConfig;
|
|
232
|
+
tailSampling?: import('./wide-events/types').TailSamplingConfig;
|
|
142
233
|
};
|
|
143
234
|
/**
|
|
144
235
|
* Base transport configuration
|
|
@@ -197,7 +288,17 @@ export interface HTTPTransportConfig extends BatchTransportConfig {
|
|
|
197
288
|
timeout?: number;
|
|
198
289
|
/** Transform entries before sending */
|
|
199
290
|
transform?: (entries: LogEntry[]) => unknown;
|
|
291
|
+
/**
|
|
292
|
+
* Enable keep-alive connections (default: true).
|
|
293
|
+
* When true, adds Connection: keep-alive header and enables
|
|
294
|
+
* the fetch keepalive option for browser page-unload scenarios.
|
|
295
|
+
*/
|
|
296
|
+
keepAlive?: boolean;
|
|
200
297
|
}
|
|
298
|
+
/**
|
|
299
|
+
* Rotation interval for time-based log rotation
|
|
300
|
+
*/
|
|
301
|
+
export type RotationInterval = 'hourly' | 'daily' | 'weekly' | 'none';
|
|
201
302
|
/**
|
|
202
303
|
* File transport configuration
|
|
203
304
|
*/
|
|
@@ -210,6 +311,8 @@ export interface FileTransportConfig extends BatchTransportConfig {
|
|
|
210
311
|
maxFiles?: number;
|
|
211
312
|
/** Compress rotated files with gzip (default: false) */
|
|
212
313
|
compress?: boolean;
|
|
314
|
+
/** Time-based rotation interval (default: 'none' - only size-based rotation) */
|
|
315
|
+
rotateInterval?: RotationInterval;
|
|
213
316
|
}
|
|
214
317
|
/**
|
|
215
318
|
* Datadog transport configuration
|
|
@@ -226,6 +329,31 @@ export interface DatadogTransportConfig extends BatchTransportConfig {
|
|
|
226
329
|
/** Additional tags */
|
|
227
330
|
tags?: string[];
|
|
228
331
|
}
|
|
332
|
+
/**
|
|
333
|
+
* Sentry transport configuration
|
|
334
|
+
*/
|
|
335
|
+
export interface SentryTransportConfig extends BatchTransportConfig {
|
|
336
|
+
/**
|
|
337
|
+
* Sentry DSN (Data Source Name)
|
|
338
|
+
* @example "https://abc123@o123456.ingest.sentry.io/1234567"
|
|
339
|
+
*/
|
|
340
|
+
dsn: string;
|
|
341
|
+
/** Environment name (e.g., 'production', 'staging') */
|
|
342
|
+
environment?: string;
|
|
343
|
+
/** Application release/version */
|
|
344
|
+
release?: string;
|
|
345
|
+
/** Service name (added as 'service' tag) */
|
|
346
|
+
service?: string;
|
|
347
|
+
/** Server name or hostname */
|
|
348
|
+
serverName?: string;
|
|
349
|
+
/** Additional tags (key-value pairs) */
|
|
350
|
+
tags?: Record<string, string>;
|
|
351
|
+
/**
|
|
352
|
+
* Minimum log level to send to Sentry (default: 'warn')
|
|
353
|
+
* Lower levels (trace, debug, info) are typically too verbose for Sentry
|
|
354
|
+
*/
|
|
355
|
+
minLevel?: LogLevel;
|
|
356
|
+
}
|
|
229
357
|
export type { Span, SpanCallback, SpanEvent, SpanOptions, SpanStatus, SpanSyncCallback, } from './tracing/types';
|
|
230
358
|
/**
|
|
231
359
|
* Logger interface
|
|
@@ -276,5 +404,24 @@ export interface Logger {
|
|
|
276
404
|
* @returns The result of the function
|
|
277
405
|
*/
|
|
278
406
|
spanSync<T>(name: string, fn: import('./tracing/types').SpanSyncCallback<T>, options?: import('./tracing/types').SpanOptions): T;
|
|
407
|
+
/**
|
|
408
|
+
* Emit a completed wide event through the logger's transports.
|
|
409
|
+
*
|
|
410
|
+
* Wide events are comprehensive, single-event records of complete
|
|
411
|
+
* operations (like HTTP requests or background jobs). They contain
|
|
412
|
+
* all relevant context for debugging and observability.
|
|
413
|
+
*
|
|
414
|
+
* @param event - The completed WideEvent to emit
|
|
415
|
+
*
|
|
416
|
+
* @example
|
|
417
|
+
* ```typescript
|
|
418
|
+
* const builder = createWideEvent({ type: 'http.request' });
|
|
419
|
+
* builder.set('http', 'method', 'POST');
|
|
420
|
+
* builder.set('user', 'id', userId);
|
|
421
|
+
* const wideEvent = builder.end({ status: 'success' });
|
|
422
|
+
* logger.emitWideEvent(wideEvent);
|
|
423
|
+
* ```
|
|
424
|
+
*/
|
|
425
|
+
emitWideEvent(event: import('./wide-events/types').WideEvent): void;
|
|
279
426
|
}
|
|
280
427
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/buffer.d.ts
CHANGED
|
@@ -7,8 +7,10 @@ export interface CircularBufferConfig {
|
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
9
|
* A memory-safe circular buffer for storing log entries
|
|
10
|
+
*
|
|
11
|
+
* Implements the Iterable protocol for use with for...of loops
|
|
10
12
|
*/
|
|
11
|
-
export declare class CircularBuffer<T> {
|
|
13
|
+
export declare class CircularBuffer<T> implements Iterable<T> {
|
|
12
14
|
private buffer;
|
|
13
15
|
private head;
|
|
14
16
|
private tail;
|
|
@@ -33,6 +35,36 @@ export declare class CircularBuffer<T> {
|
|
|
33
35
|
* Convert buffer to array (oldest first)
|
|
34
36
|
*/
|
|
35
37
|
toArray(): T[];
|
|
38
|
+
/**
|
|
39
|
+
* Iterator implementation for for...of loops
|
|
40
|
+
*
|
|
41
|
+
* Iterates from oldest to newest without removing items.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const buffer = new CircularBuffer<number>({ maxSize: 10 })
|
|
46
|
+
* buffer.push(1)
|
|
47
|
+
* buffer.push(2)
|
|
48
|
+
* buffer.push(3)
|
|
49
|
+
*
|
|
50
|
+
* for (const item of buffer) {
|
|
51
|
+
* console.log(item) // 1, 2, 3
|
|
52
|
+
* }
|
|
53
|
+
*
|
|
54
|
+
* // Spread operator
|
|
55
|
+
* const arr = [...buffer] // [1, 2, 3]
|
|
56
|
+
*
|
|
57
|
+
* // Array.from
|
|
58
|
+
* const arr2 = Array.from(buffer) // [1, 2, 3]
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
[Symbol.iterator](): Iterator<T>;
|
|
62
|
+
/**
|
|
63
|
+
* Returns an iterator over buffer values (oldest first)
|
|
64
|
+
*
|
|
65
|
+
* Alias for [Symbol.iterator]() for explicit usage.
|
|
66
|
+
*/
|
|
67
|
+
values(): IterableIterator<T>;
|
|
36
68
|
/**
|
|
37
69
|
* Clear the buffer
|
|
38
70
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CACnC;AAED
|
|
1
|
+
{"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CACnC;AAED;;;;GAIG;AACH,qBAAa,cAAc,CAAC,CAAC,CAAE,YAAW,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAsB;gBAElC,MAAM,EAAE,oBAAoB;IAMxC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAiBnB;;OAEG;IACH,KAAK,IAAI,CAAC,GAAG,SAAS;IAWtB;;OAEG;IACH,IAAI,IAAI,CAAC,GAAG,SAAS;IAKrB;;OAEG;IACH,OAAO,IAAI,CAAC,EAAE;IAQd;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACF,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC;IAWjC;;;;OAIG;IACH,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAI7B;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;CAQnF"}
|
package/dist/utils/buffer.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A memory-safe circular buffer for storing log entries
|
|
3
|
+
*
|
|
4
|
+
* Implements the Iterable protocol for use with for...of loops
|
|
3
5
|
*/
|
|
4
6
|
export class CircularBuffer {
|
|
5
7
|
buffer;
|
|
@@ -58,15 +60,51 @@ export class CircularBuffer {
|
|
|
58
60
|
*/
|
|
59
61
|
toArray() {
|
|
60
62
|
const result = [];
|
|
63
|
+
for (const item of this) {
|
|
64
|
+
result.push(item);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Iterator implementation for for...of loops
|
|
70
|
+
*
|
|
71
|
+
* Iterates from oldest to newest without removing items.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const buffer = new CircularBuffer<number>({ maxSize: 10 })
|
|
76
|
+
* buffer.push(1)
|
|
77
|
+
* buffer.push(2)
|
|
78
|
+
* buffer.push(3)
|
|
79
|
+
*
|
|
80
|
+
* for (const item of buffer) {
|
|
81
|
+
* console.log(item) // 1, 2, 3
|
|
82
|
+
* }
|
|
83
|
+
*
|
|
84
|
+
* // Spread operator
|
|
85
|
+
* const arr = [...buffer] // [1, 2, 3]
|
|
86
|
+
*
|
|
87
|
+
* // Array.from
|
|
88
|
+
* const arr2 = Array.from(buffer) // [1, 2, 3]
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
*[Symbol.iterator]() {
|
|
61
92
|
let index = this.head;
|
|
62
93
|
for (let i = 0; i < this.count; i++) {
|
|
63
94
|
const item = this.buffer[index];
|
|
64
95
|
if (item !== undefined) {
|
|
65
|
-
|
|
96
|
+
yield item;
|
|
66
97
|
}
|
|
67
98
|
index = (index + 1) % this.maxSize;
|
|
68
99
|
}
|
|
69
|
-
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Returns an iterator over buffer values (oldest first)
|
|
103
|
+
*
|
|
104
|
+
* Alias for [Symbol.iterator]() for explicit usage.
|
|
105
|
+
*/
|
|
106
|
+
values() {
|
|
107
|
+
return this[Symbol.iterator]();
|
|
70
108
|
}
|
|
71
109
|
/**
|
|
72
110
|
* Clear the buffer
|
package/dist/utils/buffer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"AAQA
|
|
1
|
+
{"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"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"}
|