nugi-ts-logs-sdk 1.0.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 +218 -0
- package/dist/adapters/common.d.ts +43 -0
- package/dist/adapters/common.d.ts.map +1 -0
- package/dist/adapters/common.js +153 -0
- package/dist/adapters/common.js.map +1 -0
- package/dist/adapters/express.d.ts +29 -0
- package/dist/adapters/express.d.ts.map +1 -0
- package/dist/adapters/express.js +62 -0
- package/dist/adapters/express.js.map +1 -0
- package/dist/adapters/fastify.d.ts +18 -0
- package/dist/adapters/fastify.d.ts.map +1 -0
- package/dist/adapters/fastify.js +78 -0
- package/dist/adapters/fastify.js.map +1 -0
- package/dist/adapters/nestjs.d.ts +93 -0
- package/dist/adapters/nestjs.d.ts.map +1 -0
- package/dist/adapters/nestjs.js +310 -0
- package/dist/adapters/nestjs.js.map +1 -0
- package/dist/client.d.ts +66 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +299 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +116 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +51 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +96 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumentation/db-error.d.ts +27 -0
- package/dist/instrumentation/db-error.d.ts.map +1 -0
- package/dist/instrumentation/db-error.js +153 -0
- package/dist/instrumentation/db-error.js.map +1 -0
- package/dist/instrumentation/query-capture.d.ts +39 -0
- package/dist/instrumentation/query-capture.d.ts.map +1 -0
- package/dist/instrumentation/query-capture.js +359 -0
- package/dist/instrumentation/query-capture.js.map +1 -0
- package/dist/internal/breadcrumbs.d.ts +32 -0
- package/dist/internal/breadcrumbs.d.ts.map +1 -0
- package/dist/internal/breadcrumbs.js +31 -0
- package/dist/internal/breadcrumbs.js.map +1 -0
- package/dist/internal/console-capture.d.ts +31 -0
- package/dist/internal/console-capture.d.ts.map +1 -0
- package/dist/internal/console-capture.js +113 -0
- package/dist/internal/console-capture.js.map +1 -0
- package/dist/internal/context.d.ts +21 -0
- package/dist/internal/context.d.ts.map +1 -0
- package/dist/internal/context.js +42 -0
- package/dist/internal/context.js.map +1 -0
- package/dist/internal/diagnostics.d.ts +9 -0
- package/dist/internal/diagnostics.d.ts.map +1 -0
- package/dist/internal/diagnostics.js +43 -0
- package/dist/internal/diagnostics.js.map +1 -0
- package/dist/internal/http-utils.d.ts +16 -0
- package/dist/internal/http-utils.d.ts.map +1 -0
- package/dist/internal/http-utils.js +81 -0
- package/dist/internal/http-utils.js.map +1 -0
- package/dist/internal/ids.d.ts +9 -0
- package/dist/internal/ids.d.ts.map +1 -0
- package/dist/internal/ids.js +34 -0
- package/dist/internal/ids.js.map +1 -0
- package/dist/internal/metadata.d.ts +4 -0
- package/dist/internal/metadata.d.ts.map +1 -0
- package/dist/internal/metadata.js +151 -0
- package/dist/internal/metadata.js.map +1 -0
- package/dist/internal/propagation.d.ts +30 -0
- package/dist/internal/propagation.d.ts.map +1 -0
- package/dist/internal/propagation.js +99 -0
- package/dist/internal/propagation.js.map +1 -0
- package/dist/internal/sanitize.d.ts +11 -0
- package/dist/internal/sanitize.d.ts.map +1 -0
- package/dist/internal/sanitize.js +77 -0
- package/dist/internal/sanitize.js.map +1 -0
- package/dist/internal/stacktrace.d.ts +29 -0
- package/dist/internal/stacktrace.d.ts.map +1 -0
- package/dist/internal/stacktrace.js +182 -0
- package/dist/internal/stacktrace.js.map +1 -0
- package/dist/signals/checkins.d.ts +28 -0
- package/dist/signals/checkins.d.ts.map +1 -0
- package/dist/signals/checkins.js +76 -0
- package/dist/signals/checkins.js.map +1 -0
- package/dist/signals/logger.d.ts +26 -0
- package/dist/signals/logger.d.ts.map +1 -0
- package/dist/signals/logger.js +63 -0
- package/dist/signals/logger.js.map +1 -0
- package/dist/signals/metrics.d.ts +58 -0
- package/dist/signals/metrics.d.ts.map +1 -0
- package/dist/signals/metrics.js +166 -0
- package/dist/signals/metrics.js.map +1 -0
- package/dist/signals/tracer.d.ts +77 -0
- package/dist/signals/tracer.d.ts.map +1 -0
- package/dist/signals/tracer.js +210 -0
- package/dist/signals/tracer.js.map +1 -0
- package/dist/transport/batcher.d.ts +31 -0
- package/dist/transport/batcher.d.ts.map +1 -0
- package/dist/transport/batcher.js +129 -0
- package/dist/transport/batcher.js.map +1 -0
- package/dist/transport/legacy-logs.d.ts +21 -0
- package/dist/transport/legacy-logs.d.ts.map +1 -0
- package/dist/transport/legacy-logs.js +61 -0
- package/dist/transport/legacy-logs.js.map +1 -0
- package/dist/transport/retry.d.ts +16 -0
- package/dist/transport/retry.d.ts.map +1 -0
- package/dist/transport/retry.js +43 -0
- package/dist/transport/retry.js.map +1 -0
- package/dist/transport/transport.d.ts +14 -0
- package/dist/transport/transport.d.ts.map +1 -0
- package/dist/transport/transport.js +70 -0
- package/dist/transport/transport.js.map +1 -0
- package/dist/types.d.ts +136 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/internal/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface SpanContext {
|
|
2
|
+
traceId: string;
|
|
3
|
+
spanId: string;
|
|
4
|
+
parentSpanId?: string;
|
|
5
|
+
/** Whether this trace is sampled (recorded/exported). */
|
|
6
|
+
sampled: boolean;
|
|
7
|
+
traceState?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare const TRACEPARENT_HEADER = "traceparent";
|
|
10
|
+
export declare const TRACESTATE_HEADER = "tracestate";
|
|
11
|
+
/** Parse an incoming traceparent header into its parts, if valid. */
|
|
12
|
+
export declare function parseTraceparent(header: string | undefined): {
|
|
13
|
+
traceId: string;
|
|
14
|
+
spanId: string;
|
|
15
|
+
sampled: boolean;
|
|
16
|
+
} | undefined;
|
|
17
|
+
/** Format a SpanContext as a traceparent header value. */
|
|
18
|
+
export declare function formatTraceparent(ctx: SpanContext): string;
|
|
19
|
+
/**
|
|
20
|
+
* Extract a parent SpanContext from inbound carrier headers. Returns undefined
|
|
21
|
+
* when no valid trace context is present (caller then starts a fresh trace).
|
|
22
|
+
*
|
|
23
|
+
* Supports W3C `traceparent` plus vendor fallbacks (`x-trace-id`, B3, ALB).
|
|
24
|
+
*/
|
|
25
|
+
export declare function extractContext(headers?: Record<string, unknown>): SpanContext | undefined;
|
|
26
|
+
/** Inject a SpanContext into an outbound carrier (e.g. outgoing HTTP headers). */
|
|
27
|
+
export declare function injectContext(ctx: SpanContext, carrier: Record<string, string>): Record<string, string>;
|
|
28
|
+
/** Create a brand-new root context. */
|
|
29
|
+
export declare function createRootContext(sampled: boolean): SpanContext;
|
|
30
|
+
//# sourceMappingURL=propagation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagation.d.ts","sourceRoot":"","sources":["../../src/internal/propagation.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAChD,eAAO,MAAM,iBAAiB,eAAe,CAAC;AAW9C,qEAAqE;AACrE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GACvD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACrD,SAAS,CAQZ;AAED,0DAA0D;AAC1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAG1D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACpC,WAAW,GAAG,SAAS,CAuCzB;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAIxB;AAED,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,WAAW,CAM/D"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// W3C Trace Context propagation (traceparent / tracestate).
|
|
3
|
+
// https://www.w3.org/TR/trace-context/
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.TRACESTATE_HEADER = exports.TRACEPARENT_HEADER = void 0;
|
|
6
|
+
exports.parseTraceparent = parseTraceparent;
|
|
7
|
+
exports.formatTraceparent = formatTraceparent;
|
|
8
|
+
exports.extractContext = extractContext;
|
|
9
|
+
exports.injectContext = injectContext;
|
|
10
|
+
exports.createRootContext = createRootContext;
|
|
11
|
+
const ids_1 = require("./ids");
|
|
12
|
+
exports.TRACEPARENT_HEADER = 'traceparent';
|
|
13
|
+
exports.TRACESTATE_HEADER = 'tracestate';
|
|
14
|
+
function headerValue(headers, name) {
|
|
15
|
+
const raw = headers[name] ?? headers[name.toLowerCase()];
|
|
16
|
+
const value = Array.isArray(raw) ? raw[0] : raw;
|
|
17
|
+
return typeof value === 'string' && value.length ? value : undefined;
|
|
18
|
+
}
|
|
19
|
+
/** Parse an incoming traceparent header into its parts, if valid. */
|
|
20
|
+
function parseTraceparent(header) {
|
|
21
|
+
if (!header)
|
|
22
|
+
return undefined;
|
|
23
|
+
const parts = header.trim().split('-');
|
|
24
|
+
if (parts.length < 4)
|
|
25
|
+
return undefined;
|
|
26
|
+
const [, traceId, spanId, flags] = parts;
|
|
27
|
+
if (!(0, ids_1.isValidTraceId)(traceId) || !(0, ids_1.isValidSpanId)(spanId))
|
|
28
|
+
return undefined;
|
|
29
|
+
const sampled = (parseInt(flags, 16) & 0x01) === 0x01;
|
|
30
|
+
return { traceId, spanId, sampled };
|
|
31
|
+
}
|
|
32
|
+
/** Format a SpanContext as a traceparent header value. */
|
|
33
|
+
function formatTraceparent(ctx) {
|
|
34
|
+
const flags = ctx.sampled ? '01' : '00';
|
|
35
|
+
return `00-${ctx.traceId}-${ctx.spanId}-${flags}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract a parent SpanContext from inbound carrier headers. Returns undefined
|
|
39
|
+
* when no valid trace context is present (caller then starts a fresh trace).
|
|
40
|
+
*
|
|
41
|
+
* Supports W3C `traceparent` plus vendor fallbacks (`x-trace-id`, B3, ALB).
|
|
42
|
+
*/
|
|
43
|
+
function extractContext(headers = {}) {
|
|
44
|
+
const parsed = parseTraceparent(headerValue(headers, exports.TRACEPARENT_HEADER));
|
|
45
|
+
if (parsed) {
|
|
46
|
+
return {
|
|
47
|
+
traceId: parsed.traceId,
|
|
48
|
+
// The inbound span id becomes our parent.
|
|
49
|
+
spanId: parsed.spanId,
|
|
50
|
+
parentSpanId: parsed.spanId,
|
|
51
|
+
sampled: parsed.sampled,
|
|
52
|
+
traceState: headerValue(headers, exports.TRACESTATE_HEADER),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
const vendorTrace = headerValue(headers, 'x-trace-id') ||
|
|
56
|
+
headerValue(headers, 'x-b3-traceid') ||
|
|
57
|
+
headerValue(headers, 'x-amzn-trace-id');
|
|
58
|
+
if (!vendorTrace)
|
|
59
|
+
return undefined;
|
|
60
|
+
let traceId = vendorTrace.replace(/[^a-fA-F0-9]/g, '').toLowerCase();
|
|
61
|
+
if (traceId.length > 32)
|
|
62
|
+
traceId = traceId.slice(0, 32);
|
|
63
|
+
if (traceId.length < 32)
|
|
64
|
+
traceId = traceId.padStart(32, '0');
|
|
65
|
+
if (!(0, ids_1.isValidTraceId)(traceId))
|
|
66
|
+
return undefined;
|
|
67
|
+
const vendorSpan = headerValue(headers, 'x-span-id') ||
|
|
68
|
+
headerValue(headers, 'x-b3-spanid') ||
|
|
69
|
+
(0, ids_1.generateSpanId)();
|
|
70
|
+
let spanId = vendorSpan.replace(/[^a-fA-F0-9]/g, '').toLowerCase();
|
|
71
|
+
if (spanId.length > 16)
|
|
72
|
+
spanId = spanId.slice(0, 16);
|
|
73
|
+
if (spanId.length < 16)
|
|
74
|
+
spanId = spanId.padStart(16, '0');
|
|
75
|
+
if (!(0, ids_1.isValidSpanId)(spanId))
|
|
76
|
+
spanId = (0, ids_1.generateSpanId)();
|
|
77
|
+
return {
|
|
78
|
+
traceId,
|
|
79
|
+
spanId,
|
|
80
|
+
parentSpanId: spanId,
|
|
81
|
+
sampled: true,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** Inject a SpanContext into an outbound carrier (e.g. outgoing HTTP headers). */
|
|
85
|
+
function injectContext(ctx, carrier) {
|
|
86
|
+
carrier[exports.TRACEPARENT_HEADER] = formatTraceparent(ctx);
|
|
87
|
+
if (ctx.traceState)
|
|
88
|
+
carrier[exports.TRACESTATE_HEADER] = ctx.traceState;
|
|
89
|
+
return carrier;
|
|
90
|
+
}
|
|
91
|
+
/** Create a brand-new root context. */
|
|
92
|
+
function createRootContext(sampled) {
|
|
93
|
+
return {
|
|
94
|
+
traceId: (0, ids_1.generateTraceId)(),
|
|
95
|
+
spanId: (0, ids_1.generateSpanId)(),
|
|
96
|
+
sampled,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=propagation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"propagation.js","sourceRoot":"","sources":["../../src/internal/propagation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const REDACTED = "[REDACTED]";
|
|
2
|
+
/**
|
|
3
|
+
* Deep-redact sensitive fields in an object/array. Returns a sanitized copy,
|
|
4
|
+
* never mutates input. Depth-limited and cycle-safe; never throws.
|
|
5
|
+
*
|
|
6
|
+
* @param extraKeys additional field names to redact (from the `redact` option).
|
|
7
|
+
*/
|
|
8
|
+
export declare function sanitizeBody(body: unknown, extraKeys?: string[], maxDepth?: number): unknown;
|
|
9
|
+
/** Sanitize headers: redact known auth headers and any sensitive-looking name. */
|
|
10
|
+
export declare function sanitizeHeaders(headers?: Record<string, unknown>, extraKeys?: string[]): Record<string, unknown>;
|
|
11
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/internal/sanitize.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,eAAe,CAAC;AAmBrC;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,OAAO,EACb,SAAS,GAAE,MAAM,EAAO,EACxB,QAAQ,SAAI,GACX,OAAO,CAMT;AA0BD,kFAAkF;AAClF,wBAAgB,eAAe,CAC7B,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,SAAS,GAAE,MAAM,EAAO,GACvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Redaction of sensitive data before it leaves the process. Applied to request/
|
|
3
|
+
// response bodies and captured headers. Built-in patterns are case-insensitive
|
|
4
|
+
// and substring-based (userPassword, access_token, x-api-key are caught).
|
|
5
|
+
// Callers may pass extra field names to redact (case-insensitive exact match),
|
|
6
|
+
// e.g. the SDK's `redact` config option.
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.REDACTED = void 0;
|
|
9
|
+
exports.sanitizeBody = sanitizeBody;
|
|
10
|
+
exports.sanitizeHeaders = sanitizeHeaders;
|
|
11
|
+
exports.REDACTED = '[REDACTED]';
|
|
12
|
+
const SENSITIVE_KEY_PATTERNS = [
|
|
13
|
+
'password', 'passwd', 'pwd', 'token', 'secret', 'apikey', 'api-key',
|
|
14
|
+
'authorization', 'auth', 'cookie', 'session', 'credential', 'private',
|
|
15
|
+
];
|
|
16
|
+
const SENSITIVE_HEADERS = [
|
|
17
|
+
'authorization', 'cookie', 'set-cookie', 'x-api-key',
|
|
18
|
+
'x-auth-token', 'proxy-authorization',
|
|
19
|
+
];
|
|
20
|
+
function isSensitiveKey(key, extraKeys) {
|
|
21
|
+
const lower = key.toLowerCase();
|
|
22
|
+
if (SENSITIVE_KEY_PATTERNS.some((p) => lower.includes(p)))
|
|
23
|
+
return true;
|
|
24
|
+
// User-provided fields match exactly (case-insensitive) to avoid over-redacting.
|
|
25
|
+
return extraKeys.some((k) => k.toLowerCase() === lower);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Deep-redact sensitive fields in an object/array. Returns a sanitized copy,
|
|
29
|
+
* never mutates input. Depth-limited and cycle-safe; never throws.
|
|
30
|
+
*
|
|
31
|
+
* @param extraKeys additional field names to redact (from the `redact` option).
|
|
32
|
+
*/
|
|
33
|
+
function sanitizeBody(body, extraKeys = [], maxDepth = 6) {
|
|
34
|
+
try {
|
|
35
|
+
return redact(body, extraKeys, maxDepth, new WeakSet());
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return body;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function redact(value, extraKeys, depth, seen) {
|
|
42
|
+
if (value === null || typeof value !== 'object')
|
|
43
|
+
return value;
|
|
44
|
+
if (depth <= 0)
|
|
45
|
+
return Array.isArray(value) ? '[Array]' : '[Object]';
|
|
46
|
+
if (seen.has(value))
|
|
47
|
+
return '[Circular]';
|
|
48
|
+
seen.add(value);
|
|
49
|
+
if (Array.isArray(value)) {
|
|
50
|
+
return value.map((item) => redact(item, extraKeys, depth - 1, seen));
|
|
51
|
+
}
|
|
52
|
+
const out = {};
|
|
53
|
+
for (const key of Object.keys(value)) {
|
|
54
|
+
out[key] = isSensitiveKey(key, extraKeys)
|
|
55
|
+
? exports.REDACTED
|
|
56
|
+
: redact(value[key], extraKeys, depth - 1, seen);
|
|
57
|
+
}
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
/** Sanitize headers: redact known auth headers and any sensitive-looking name. */
|
|
61
|
+
function sanitizeHeaders(headers = {}, extraKeys = []) {
|
|
62
|
+
try {
|
|
63
|
+
const out = {};
|
|
64
|
+
for (const key of Object.keys(headers)) {
|
|
65
|
+
const lower = key.toLowerCase();
|
|
66
|
+
out[key] =
|
|
67
|
+
SENSITIVE_HEADERS.includes(lower) || isSensitiveKey(key, extraKeys)
|
|
68
|
+
? exports.REDACTED
|
|
69
|
+
: headers[key];
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return {};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/internal/sanitize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Sentry-style stack frame with optional source context. */
|
|
2
|
+
export interface StackFrame {
|
|
3
|
+
filename: string;
|
|
4
|
+
absPath?: string;
|
|
5
|
+
function: string;
|
|
6
|
+
lineno?: number;
|
|
7
|
+
colno?: number;
|
|
8
|
+
inApp: boolean;
|
|
9
|
+
/** The source line that threw. */
|
|
10
|
+
contextLine?: string;
|
|
11
|
+
/** Lines immediately before contextLine. */
|
|
12
|
+
preContext?: string[];
|
|
13
|
+
/** Lines immediately after contextLine. */
|
|
14
|
+
postContext?: string[];
|
|
15
|
+
module?: string;
|
|
16
|
+
raw?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Parse a V8/Node stack string into structured frames.
|
|
20
|
+
* When `withSourceContext` is true (default), reads source files from disk
|
|
21
|
+
* and attaches pre_context / context_line / post_context (Sentry-style).
|
|
22
|
+
*/
|
|
23
|
+
export declare function buildStackFrames(stack?: string, options?: {
|
|
24
|
+
withSourceContext?: boolean;
|
|
25
|
+
}): StackFrame[];
|
|
26
|
+
export declare function isInApp(file: string): boolean;
|
|
27
|
+
/** Clear the source-file cache (useful in tests). */
|
|
28
|
+
export declare function clearStackSourceCache(): void;
|
|
29
|
+
//# sourceMappingURL=stacktrace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stacktrace.d.ts","sourceRoot":"","sources":["../../src/internal/stacktrace.ts"],"names":[],"mappings":"AAGA,6DAA6D;AAC7D,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAaD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC5C,UAAU,EAAE,CAkDd;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAO7C;AAgED,qDAAqD;AACrD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
|
|
@@ -0,0 +1,182 @@
|
|
|
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
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.buildStackFrames = buildStackFrames;
|
|
37
|
+
exports.isInApp = isInApp;
|
|
38
|
+
exports.clearStackSourceCache = clearStackSourceCache;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const AT_RE = /^\s*at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?\s*$/;
|
|
42
|
+
const AT_NOLOC_RE = /^\s*at\s+(.+?)\s*$/;
|
|
43
|
+
/** How many source lines to include above/below the crashing line. */
|
|
44
|
+
const CONTEXT_LINES = 7;
|
|
45
|
+
/** Cap frames we enrich with disk I/O so reporting stays fast. */
|
|
46
|
+
const MAX_CONTEXT_FRAMES = 40;
|
|
47
|
+
const fileCache = new Map();
|
|
48
|
+
/**
|
|
49
|
+
* Parse a V8/Node stack string into structured frames.
|
|
50
|
+
* When `withSourceContext` is true (default), reads source files from disk
|
|
51
|
+
* and attaches pre_context / context_line / post_context (Sentry-style).
|
|
52
|
+
*/
|
|
53
|
+
function buildStackFrames(stack, options = {}) {
|
|
54
|
+
if (!stack)
|
|
55
|
+
return [];
|
|
56
|
+
const withSourceContext = options.withSourceContext !== false;
|
|
57
|
+
const frames = [];
|
|
58
|
+
for (const line of stack.split('\n')) {
|
|
59
|
+
if (!line.trim().startsWith('at '))
|
|
60
|
+
continue;
|
|
61
|
+
const m = AT_RE.exec(line);
|
|
62
|
+
if (m) {
|
|
63
|
+
const [, fn, file, ln, col] = m;
|
|
64
|
+
frames.push({
|
|
65
|
+
function: fn || '<anonymous>',
|
|
66
|
+
filename: file,
|
|
67
|
+
absPath: file,
|
|
68
|
+
lineno: Number(ln),
|
|
69
|
+
colno: Number(col),
|
|
70
|
+
inApp: isInApp(file),
|
|
71
|
+
module: moduleFromPath(file),
|
|
72
|
+
raw: line.trim(),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
const nm = AT_NOLOC_RE.exec(line);
|
|
77
|
+
const file = nm?.[1] ?? line.trim();
|
|
78
|
+
frames.push({
|
|
79
|
+
function: '<anonymous>',
|
|
80
|
+
filename: file,
|
|
81
|
+
absPath: file,
|
|
82
|
+
inApp: isInApp(file),
|
|
83
|
+
module: moduleFromPath(file),
|
|
84
|
+
raw: line.trim(),
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (!withSourceContext)
|
|
89
|
+
return frames;
|
|
90
|
+
let enriched = 0;
|
|
91
|
+
for (const frame of frames) {
|
|
92
|
+
if (enriched >= MAX_CONTEXT_FRAMES)
|
|
93
|
+
break;
|
|
94
|
+
if (frame.lineno == null || !frame.absPath)
|
|
95
|
+
continue;
|
|
96
|
+
if (!looksLikeFilePath(frame.absPath))
|
|
97
|
+
continue;
|
|
98
|
+
const ctx = readSourceContext(frame.absPath, frame.lineno);
|
|
99
|
+
if (!ctx)
|
|
100
|
+
continue;
|
|
101
|
+
frame.preContext = ctx.preContext;
|
|
102
|
+
frame.contextLine = ctx.contextLine;
|
|
103
|
+
frame.postContext = ctx.postContext;
|
|
104
|
+
enriched += 1;
|
|
105
|
+
}
|
|
106
|
+
return frames;
|
|
107
|
+
}
|
|
108
|
+
function isInApp(file) {
|
|
109
|
+
if (!file)
|
|
110
|
+
return false;
|
|
111
|
+
if (file.startsWith('node:') || file.startsWith('internal/'))
|
|
112
|
+
return false;
|
|
113
|
+
if (file.includes(`${path.sep}node_modules${path.sep}`) || file.includes('/node_modules/')) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
return file.includes('/') || file.includes('\\');
|
|
117
|
+
}
|
|
118
|
+
function moduleFromPath(file) {
|
|
119
|
+
if (!file)
|
|
120
|
+
return undefined;
|
|
121
|
+
if (file.startsWith('node:'))
|
|
122
|
+
return file;
|
|
123
|
+
const parts = file.split(/[\\/]/);
|
|
124
|
+
const nm = parts.lastIndexOf('node_modules');
|
|
125
|
+
if (nm >= 0 && parts[nm + 1]) {
|
|
126
|
+
// @scope/pkg or pkg
|
|
127
|
+
if (parts[nm + 1].startsWith('@') && parts[nm + 2]) {
|
|
128
|
+
return `${parts[nm + 1]}/${parts[nm + 2]}`;
|
|
129
|
+
}
|
|
130
|
+
return parts[nm + 1];
|
|
131
|
+
}
|
|
132
|
+
return parts[parts.length - 1];
|
|
133
|
+
}
|
|
134
|
+
function looksLikeFilePath(file) {
|
|
135
|
+
if (file.startsWith('node:') || file.startsWith('internal/'))
|
|
136
|
+
return false;
|
|
137
|
+
// Native addons / eval frames
|
|
138
|
+
if (file.includes('native') && !file.includes(path.sep) && !file.includes('/'))
|
|
139
|
+
return false;
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
function readSourceContext(filePath, lineno) {
|
|
143
|
+
try {
|
|
144
|
+
let lines = fileCache.get(filePath);
|
|
145
|
+
if (lines === undefined) {
|
|
146
|
+
if (!fs.existsSync(filePath) || !fs.statSync(filePath).isFile()) {
|
|
147
|
+
fileCache.set(filePath, null);
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
// Cap file size — skip huge generated bundles.
|
|
151
|
+
const stat = fs.statSync(filePath);
|
|
152
|
+
if (stat.size > 2 * 1024 * 1024) {
|
|
153
|
+
fileCache.set(filePath, null);
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const raw = fs.readFileSync(filePath, 'utf8');
|
|
157
|
+
lines = raw.split(/\r?\n/);
|
|
158
|
+
fileCache.set(filePath, lines);
|
|
159
|
+
}
|
|
160
|
+
if (!lines || lines.length === 0)
|
|
161
|
+
return null;
|
|
162
|
+
const idx = lineno - 1;
|
|
163
|
+
if (idx < 0 || idx >= lines.length)
|
|
164
|
+
return null;
|
|
165
|
+
const start = Math.max(0, idx - CONTEXT_LINES);
|
|
166
|
+
const end = Math.min(lines.length - 1, idx + CONTEXT_LINES);
|
|
167
|
+
return {
|
|
168
|
+
preContext: lines.slice(start, idx),
|
|
169
|
+
contextLine: lines[idx] ?? '',
|
|
170
|
+
postContext: lines.slice(idx + 1, end + 1),
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
fileCache.set(filePath, null);
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/** Clear the source-file cache (useful in tests). */
|
|
179
|
+
function clearStackSourceCache() {
|
|
180
|
+
fileCache.clear();
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=stacktrace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stacktrace.js","sourceRoot":"","sources":["../../src/internal/stacktrace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/** Cron / heartbeat check-ins for monitor slugs. Fire-and-forget via fetch. */
|
|
2
|
+
export type CheckinStatus = 'ok' | 'error' | 'in_progress';
|
|
3
|
+
export interface CheckinsOptions {
|
|
4
|
+
/** Base endpoint, e.g. https://logs.example.com */
|
|
5
|
+
endpoint?: string;
|
|
6
|
+
apiKey: string;
|
|
7
|
+
appId: string;
|
|
8
|
+
requestTimeoutMs?: number;
|
|
9
|
+
onError?: (error: Error) => void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Derive the monitor check-in URL from a logs ingest URL or host base.
|
|
13
|
+
* typical: http://host/api/v1/logs → http://host/api/v1/monitors/checkins
|
|
14
|
+
* http://host → http://host/api/v1/monitors/checkins
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveCheckinUrl(endpointOrLogsUrl?: string): string | undefined;
|
|
17
|
+
export declare class Checkins {
|
|
18
|
+
private readonly options;
|
|
19
|
+
private readonly url?;
|
|
20
|
+
private readonly timeoutMs;
|
|
21
|
+
constructor(options: CheckinsOptions);
|
|
22
|
+
/** Record a cron monitor check-in. `slug` must match the monitor config. */
|
|
23
|
+
capture(slug: string, status?: CheckinStatus, message?: string): void;
|
|
24
|
+
ok(slug: string, message?: string): void;
|
|
25
|
+
error(slug: string, message?: string): void;
|
|
26
|
+
private emit;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=checkins.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkins.d.ts","sourceRoot":"","sources":["../../src/signals/checkins.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAE/E,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,OAAO,GAAG,aAAa,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhF;AAED,qBAAa,QAAQ;IAIP,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEN,OAAO,EAAE,eAAe;IAKrD,4EAA4E;IAC5E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,aAAoB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3E,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAIxC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;YAI7B,IAAI;CAqCnB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Cron / heartbeat check-ins for monitor slugs. Fire-and-forget via fetch. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Checkins = void 0;
|
|
5
|
+
exports.resolveCheckinUrl = resolveCheckinUrl;
|
|
6
|
+
/**
|
|
7
|
+
* Derive the monitor check-in URL from a logs ingest URL or host base.
|
|
8
|
+
* typical: http://host/api/v1/logs → http://host/api/v1/monitors/checkins
|
|
9
|
+
* http://host → http://host/api/v1/monitors/checkins
|
|
10
|
+
*/
|
|
11
|
+
function resolveCheckinUrl(endpointOrLogsUrl) {
|
|
12
|
+
if (!endpointOrLogsUrl)
|
|
13
|
+
return undefined;
|
|
14
|
+
const cleaned = endpointOrLogsUrl.replace(/\/$/, '');
|
|
15
|
+
if (/\/logs\/?$/i.test(cleaned)) {
|
|
16
|
+
return cleaned.replace(/\/logs\/?$/i, '/monitors/checkins');
|
|
17
|
+
}
|
|
18
|
+
if (/\/api\/v1$/i.test(cleaned)) {
|
|
19
|
+
return `${cleaned}/monitors/checkins`;
|
|
20
|
+
}
|
|
21
|
+
return `${cleaned}/api/v1/monitors/checkins`;
|
|
22
|
+
}
|
|
23
|
+
class Checkins {
|
|
24
|
+
constructor(options) {
|
|
25
|
+
this.options = options;
|
|
26
|
+
this.url = resolveCheckinUrl(options.endpoint);
|
|
27
|
+
this.timeoutMs = options.requestTimeoutMs ?? 5000;
|
|
28
|
+
}
|
|
29
|
+
/** Record a cron monitor check-in. `slug` must match the monitor config. */
|
|
30
|
+
capture(slug, status = 'ok', message) {
|
|
31
|
+
void this.emit(slug, status, message);
|
|
32
|
+
}
|
|
33
|
+
ok(slug, message) {
|
|
34
|
+
void this.emit(slug, 'ok', message);
|
|
35
|
+
}
|
|
36
|
+
error(slug, message) {
|
|
37
|
+
void this.emit(slug, 'error', message);
|
|
38
|
+
}
|
|
39
|
+
async emit(slug, status, message) {
|
|
40
|
+
try {
|
|
41
|
+
if (!this.url || !slug || typeof slug !== 'string')
|
|
42
|
+
return;
|
|
43
|
+
const controller = new AbortController();
|
|
44
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
45
|
+
try {
|
|
46
|
+
await fetch(this.url, {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: {
|
|
49
|
+
'Content-Type': 'application/json',
|
|
50
|
+
'X-API-Key': this.options.apiKey,
|
|
51
|
+
},
|
|
52
|
+
body: JSON.stringify({
|
|
53
|
+
appId: this.options.appId,
|
|
54
|
+
slug,
|
|
55
|
+
status,
|
|
56
|
+
message,
|
|
57
|
+
}),
|
|
58
|
+
signal: controller.signal,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
clearTimeout(timer);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
try {
|
|
67
|
+
this.options.onError?.(err instanceof Error ? err : new Error(String(err)));
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
/* ignore */
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.Checkins = Checkins;
|
|
76
|
+
//# sourceMappingURL=checkins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkins.js","sourceRoot":"","sources":["../../src/signals/checkins.ts"],"names":[],"mappings":";AAAA,+EAA+E;;;AAkB/E,8CAUC;AAfD;;;;GAIG;AACH,SAAgB,iBAAiB,CAAC,iBAA0B;IAC1D,IAAI,CAAC,iBAAiB;QAAE,OAAO,SAAS,CAAC;IACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACrD,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,GAAG,OAAO,oBAAoB,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,OAAO,2BAA2B,CAAC;AAC/C,CAAC;AAED,MAAa,QAAQ;IAInB,YAA6B,OAAwB;QAAxB,YAAO,GAAP,OAAO,CAAiB;QACnD,IAAI,CAAC,GAAG,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;IACpD,CAAC;IAED,4EAA4E;IAC5E,OAAO,CAAC,IAAY,EAAE,SAAwB,IAAI,EAAE,OAAgB;QAClE,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,OAAgB;QAC/B,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,OAAgB;QAClC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAEO,KAAK,CAAC,IAAI,CAChB,IAAY,EACZ,MAAqB,EACrB,OAAgB;QAEhB,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,OAAO;YAC3D,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,CAAC;gBACH,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;oBACpB,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;qBACjC;oBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;wBACzB,IAAI;wBACJ,MAAM;wBACN,OAAO;qBACR,CAAC;oBACF,MAAM,EAAE,UAAU,CAAC,MAAM;iBAC1B,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CACpB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CACpD,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA3DD,4BA2DC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Attributes, Severity, TelemetryEvent } from '../types';
|
|
2
|
+
import { BreadcrumbBuffer } from '../internal/breadcrumbs';
|
|
3
|
+
export type EventSink = (event: TelemetryEvent) => void;
|
|
4
|
+
/**
|
|
5
|
+
* Structured logger. Every record is automatically correlated with the active
|
|
6
|
+
* trace/span (via AsyncLocalStorage) so logs join up with request spans. Each
|
|
7
|
+
* record is also recorded as a breadcrumb (when a buffer is provided) so it can
|
|
8
|
+
* travel with any subsequent error.
|
|
9
|
+
*/
|
|
10
|
+
export declare class Logger {
|
|
11
|
+
private readonly sink;
|
|
12
|
+
private readonly boundAttributes;
|
|
13
|
+
private readonly breadcrumbs?;
|
|
14
|
+
constructor(sink: EventSink, boundAttributes?: Attributes, breadcrumbs?: BreadcrumbBuffer | undefined);
|
|
15
|
+
/** Create a child logger with additional default attributes merged in. */
|
|
16
|
+
child(attributes: Attributes): Logger;
|
|
17
|
+
debug(message: string, attributes?: Attributes): void;
|
|
18
|
+
info(message: string, attributes?: Attributes): void;
|
|
19
|
+
warn(message: string, attributes?: Attributes): void;
|
|
20
|
+
error(message: string, attributes?: Attributes): void;
|
|
21
|
+
fatal(message: string, attributes?: Attributes): void;
|
|
22
|
+
log(level: Severity, message: string, attributes?: Attributes): void;
|
|
23
|
+
private write;
|
|
24
|
+
private mergeAttributes;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/signals/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;AAExD;;;;;GAKG;AACH,qBAAa,MAAM;IAEf,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAFZ,IAAI,EAAE,SAAS,EACf,eAAe,GAAE,UAAe,EAChC,WAAW,CAAC,EAAE,gBAAgB,YAAA;IAGjD,0EAA0E;IAC1E,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;IAIrC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAGrD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAGpD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAGpD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAGrD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAIrD,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI;IAIpE,OAAO,CAAC,KAAK;IAqBb,OAAO,CAAC,eAAe;CAMxB"}
|