@superblocksteam/telemetry 2.0.105 → 2.0.106-next.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/console-logging.d.ts +18 -0
- package/dist/browser/console-logging.d.ts.map +1 -0
- package/dist/browser/console-logging.js +32 -0
- package/dist/browser/console-logging.js.map +1 -0
- package/dist/browser/early-console-buffer.d.ts +39 -0
- package/dist/browser/early-console-buffer.d.ts.map +1 -0
- package/dist/browser/early-console-buffer.js +157 -0
- package/dist/browser/early-console-buffer.js.map +1 -0
- package/dist/browser/index.d.ts +7 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +22 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/init.d.ts +27 -3
- package/dist/browser/init.d.ts.map +1 -1
- package/dist/browser/init.js +159 -14
- package/dist/browser/init.js.map +1 -1
- package/dist/browser/instrumentations.d.ts +61 -0
- package/dist/browser/instrumentations.d.ts.map +1 -0
- package/dist/browser/instrumentations.js +84 -0
- package/dist/browser/instrumentations.js.map +1 -0
- package/dist/browser/logs.d.ts +52 -0
- package/dist/browser/logs.d.ts.map +1 -0
- package/dist/browser/logs.js +85 -0
- package/dist/browser/logs.js.map +1 -0
- package/dist/browser/metrics.d.ts +25 -0
- package/dist/browser/metrics.d.ts.map +1 -0
- package/dist/browser/metrics.js +37 -0
- package/dist/browser/metrics.js.map +1 -0
- package/dist/browser/sanitizer.d.ts +35 -0
- package/dist/browser/sanitizer.d.ts.map +1 -0
- package/dist/browser/sanitizer.js +211 -0
- package/dist/browser/sanitizer.js.map +1 -0
- package/dist/browser/traced-socket.d.ts +102 -0
- package/dist/browser/traced-socket.d.ts.map +1 -0
- package/dist/browser/traced-socket.js +186 -0
- package/dist/browser/traced-socket.js.map +1 -0
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +1 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/trace-sanitizer.d.ts.map +1 -1
- package/dist/common/trace-sanitizer.js +5 -2
- package/dist/common/trace-sanitizer.js.map +1 -1
- package/dist/common/traced-socket-types.d.ts +43 -0
- package/dist/common/traced-socket-types.d.ts.map +1 -0
- package/dist/common/traced-socket-types.js +17 -0
- package/dist/common/traced-socket-types.js.map +1 -0
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist-esm/browser/console-logging.d.ts +18 -0
- package/dist-esm/browser/console-logging.d.ts.map +1 -0
- package/dist-esm/browser/console-logging.js +27 -0
- package/dist-esm/browser/console-logging.js.map +1 -0
- package/dist-esm/browser/early-console-buffer.d.ts +39 -0
- package/dist-esm/browser/early-console-buffer.d.ts.map +1 -0
- package/dist-esm/browser/early-console-buffer.js +155 -0
- package/dist-esm/browser/early-console-buffer.js.map +1 -0
- package/dist-esm/browser/index.d.ts +7 -0
- package/dist-esm/browser/index.d.ts.map +1 -1
- package/dist-esm/browser/index.js +7 -0
- package/dist-esm/browser/index.js.map +1 -1
- package/dist-esm/browser/init.d.ts +27 -3
- package/dist-esm/browser/init.d.ts.map +1 -1
- package/dist-esm/browser/init.js +161 -16
- package/dist-esm/browser/init.js.map +1 -1
- package/dist-esm/browser/instrumentations.d.ts +61 -0
- package/dist-esm/browser/instrumentations.d.ts.map +1 -0
- package/dist-esm/browser/instrumentations.js +80 -0
- package/dist-esm/browser/instrumentations.js.map +1 -0
- package/dist-esm/browser/logs.d.ts +52 -0
- package/dist-esm/browser/logs.d.ts.map +1 -0
- package/dist-esm/browser/logs.js +78 -0
- package/dist-esm/browser/logs.js.map +1 -0
- package/dist-esm/browser/metrics.d.ts +25 -0
- package/dist-esm/browser/metrics.d.ts.map +1 -0
- package/dist-esm/browser/metrics.js +34 -0
- package/dist-esm/browser/metrics.js.map +1 -0
- package/dist-esm/browser/sanitizer.d.ts +35 -0
- package/dist-esm/browser/sanitizer.d.ts.map +1 -0
- package/dist-esm/browser/sanitizer.js +207 -0
- package/dist-esm/browser/sanitizer.js.map +1 -0
- package/dist-esm/browser/traced-socket.d.ts +102 -0
- package/dist-esm/browser/traced-socket.d.ts.map +1 -0
- package/dist-esm/browser/traced-socket.js +182 -0
- package/dist-esm/browser/traced-socket.js.map +1 -0
- package/dist-esm/common/index.d.ts +1 -0
- package/dist-esm/common/index.d.ts.map +1 -1
- package/dist-esm/common/index.js +1 -0
- package/dist-esm/common/index.js.map +1 -1
- package/dist-esm/common/trace-sanitizer.d.ts.map +1 -1
- package/dist-esm/common/trace-sanitizer.js +5 -2
- package/dist-esm/common/trace-sanitizer.js.map +1 -1
- package/dist-esm/common/traced-socket-types.d.ts +43 -0
- package/dist-esm/common/traced-socket-types.d.ts.map +1 -0
- package/dist-esm/common/traced-socket-types.js +16 -0
- package/dist-esm/common/traced-socket-types.js.map +1 -0
- package/dist-esm/types/index.d.ts +5 -1
- package/dist-esm/types/index.d.ts.map +1 -1
- package/package.json +5 -3
package/dist/browser/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/browser/init.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/browser/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Auto-Instrumentations Factory
|
|
3
|
+
*
|
|
4
|
+
* Creates and configures auto-instrumentations for browser telemetry.
|
|
5
|
+
* Handles XHR and Fetch requests with configurable URL filtering and
|
|
6
|
+
* trace context propagation.
|
|
7
|
+
*/
|
|
8
|
+
import type { Instrumentation } from "@opentelemetry/instrumentation";
|
|
9
|
+
/**
|
|
10
|
+
* Configuration for browser auto-instrumentations.
|
|
11
|
+
*/
|
|
12
|
+
export interface BrowserInstrumentationConfig {
|
|
13
|
+
/**
|
|
14
|
+
* URL patterns to inject traceparent header into.
|
|
15
|
+
* Only requests matching these patterns will have W3C trace context propagated.
|
|
16
|
+
* Defaults to empty (no cross-origin propagation).
|
|
17
|
+
*/
|
|
18
|
+
propagateTraceUrls?: RegExp[];
|
|
19
|
+
/**
|
|
20
|
+
* URL patterns to skip instrumenting entirely.
|
|
21
|
+
* Defaults to common static asset extensions.
|
|
22
|
+
*/
|
|
23
|
+
ignoreUrls?: RegExp[];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Create auto-instrumentations for browser telemetry.
|
|
27
|
+
*
|
|
28
|
+
* Returns an array containing XMLHttpRequestInstrumentation and optionally
|
|
29
|
+
* FetchInstrumentation (when the package is available).
|
|
30
|
+
*
|
|
31
|
+
* Both instrumentations use the provided ignoreUrls to filter out asset
|
|
32
|
+
* downloads, and propagate trace context only to URLs matching propagateTraceUrls.
|
|
33
|
+
*
|
|
34
|
+
* @param config - Optional instrumentation configuration
|
|
35
|
+
* @returns Array of configured Instrumentation instances
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* const instrumentations = createBrowserInstrumentations({
|
|
40
|
+
* propagateTraceUrls: [/https:\/\/api\.superblocks\.com/],
|
|
41
|
+
* ignoreUrls: [/\/static\//],
|
|
42
|
+
* });
|
|
43
|
+
* registerInstrumentations({ instrumentations });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function createBrowserInstrumentations(config?: BrowserInstrumentationConfig): Instrumentation[];
|
|
47
|
+
/**
|
|
48
|
+
* Register the StackContextManager for async context propagation in the browser.
|
|
49
|
+
*
|
|
50
|
+
* This must be called before using `context.with()` in browser environments.
|
|
51
|
+
* Without this, Redux middleware and other async code cannot thread trace
|
|
52
|
+
* context through async operations.
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* registerBrowserContextManager();
|
|
57
|
+
* // context.with() now works correctly in browser async flows
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function registerBrowserContextManager(): void;
|
|
61
|
+
//# sourceMappingURL=instrumentations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentations.d.ts","sourceRoot":"","sources":["../../src/browser/instrumentations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAWtE;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,CAAC,EAAE,4BAA4B,GACpC,eAAe,EAAE,CAiCnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,IAAI,IAAI,CAIpD"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser Auto-Instrumentations Factory
|
|
4
|
+
*
|
|
5
|
+
* Creates and configures auto-instrumentations for browser telemetry.
|
|
6
|
+
* Handles XHR and Fetch requests with configurable URL filtering and
|
|
7
|
+
* trace context propagation.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.createBrowserInstrumentations = createBrowserInstrumentations;
|
|
11
|
+
exports.registerBrowserContextManager = registerBrowserContextManager;
|
|
12
|
+
const api_1 = require("@opentelemetry/api");
|
|
13
|
+
const instrumentation_xml_http_request_1 = require("@opentelemetry/instrumentation-xml-http-request");
|
|
14
|
+
const sdk_trace_web_1 = require("@opentelemetry/sdk-trace-web");
|
|
15
|
+
/**
|
|
16
|
+
* Default regex for ignoring static asset URLs.
|
|
17
|
+
* These requests are not worth tracing and would create noise.
|
|
18
|
+
*/
|
|
19
|
+
const DEFAULT_IGNORE_URLS = /\.(js|css|png|jpg|jpeg|svg|gif|woff|woff2|ttf|eot|ico)$/;
|
|
20
|
+
/**
|
|
21
|
+
* Create auto-instrumentations for browser telemetry.
|
|
22
|
+
*
|
|
23
|
+
* Returns an array containing XMLHttpRequestInstrumentation and optionally
|
|
24
|
+
* FetchInstrumentation (when the package is available).
|
|
25
|
+
*
|
|
26
|
+
* Both instrumentations use the provided ignoreUrls to filter out asset
|
|
27
|
+
* downloads, and propagate trace context only to URLs matching propagateTraceUrls.
|
|
28
|
+
*
|
|
29
|
+
* @param config - Optional instrumentation configuration
|
|
30
|
+
* @returns Array of configured Instrumentation instances
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* const instrumentations = createBrowserInstrumentations({
|
|
35
|
+
* propagateTraceUrls: [/https:\/\/api\.superblocks\.com/],
|
|
36
|
+
* ignoreUrls: [/\/static\//],
|
|
37
|
+
* });
|
|
38
|
+
* registerInstrumentations({ instrumentations });
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
function createBrowserInstrumentations(config) {
|
|
42
|
+
const ignoreUrls = config?.ignoreUrls ?? [DEFAULT_IGNORE_URLS];
|
|
43
|
+
const propagateTraceHeaderCorsUrls = config?.propagateTraceUrls ?? [];
|
|
44
|
+
const instrumentations = [
|
|
45
|
+
new instrumentation_xml_http_request_1.XMLHttpRequestInstrumentation({
|
|
46
|
+
ignoreUrls,
|
|
47
|
+
propagateTraceHeaderCorsUrls,
|
|
48
|
+
}),
|
|
49
|
+
];
|
|
50
|
+
// Attempt to include FetchInstrumentation if available.
|
|
51
|
+
// This package may not be installed in all environments.
|
|
52
|
+
try {
|
|
53
|
+
const { FetchInstrumentation } =
|
|
54
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
55
|
+
require("@opentelemetry/instrumentation-fetch");
|
|
56
|
+
instrumentations.push(new FetchInstrumentation({
|
|
57
|
+
ignoreUrls,
|
|
58
|
+
propagateTraceHeaderCorsUrls,
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// FetchInstrumentation is not available; XHR instrumentation will be used alone.
|
|
63
|
+
}
|
|
64
|
+
return instrumentations;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Register the StackContextManager for async context propagation in the browser.
|
|
68
|
+
*
|
|
69
|
+
* This must be called before using `context.with()` in browser environments.
|
|
70
|
+
* Without this, Redux middleware and other async code cannot thread trace
|
|
71
|
+
* context through async operations.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* registerBrowserContextManager();
|
|
76
|
+
* // context.with() now works correctly in browser async flows
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
function registerBrowserContextManager() {
|
|
80
|
+
const contextManager = new sdk_trace_web_1.StackContextManager();
|
|
81
|
+
contextManager.enable();
|
|
82
|
+
api_1.context.setGlobalContextManager(contextManager);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=instrumentations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentations.js","sourceRoot":"","sources":["../../src/browser/instrumentations.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAoDH,sEAmCC;AAeD,sEAIC;AAxGD,4CAA6C;AAE7C,sGAAgG;AAChG,gEAAmE;AAEnE;;;GAGG;AACH,MAAM,mBAAmB,GACvB,yDAAyD,CAAC;AAmB5D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,SAAgB,6BAA6B,CAC3C,MAAqC;IAErC,MAAM,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,4BAA4B,GAAG,MAAM,EAAE,kBAAkB,IAAI,EAAE,CAAC;IAEtE,MAAM,gBAAgB,GAAsB;QAC1C,IAAI,gEAA6B,CAAC;YAChC,UAAU;YACV,4BAA4B;SAC7B,CAAC;KACH,CAAC;IAEF,wDAAwD;IACxD,yDAAyD;IACzD,IAAI,CAAC;QACH,MAAM,EAAE,oBAAoB,EAAE;QAC5B,iEAAiE;QACjE,OAAO,CAAC,sCAAsC,CAK7C,CAAC;QACJ,gBAAgB,CAAC,IAAI,CACnB,IAAI,oBAAoB,CAAC;YACvB,UAAU;YACV,4BAA4B;SAC7B,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,iFAAiF;IACnF,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAgB,6BAA6B;IAC3C,MAAM,cAAc,GAAG,IAAI,mCAAmB,EAAE,CAAC;IACjD,cAAc,CAAC,MAAM,EAAE,CAAC;IACxB,aAAO,CAAC,uBAAuB,CAAC,cAAc,CAAC,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Log Provider
|
|
3
|
+
*
|
|
4
|
+
* Initializes the OTel LoggerProvider for browser contexts. Pairs with the
|
|
5
|
+
* EarlyConsoleBuffer to ensure pre-init console messages are captured and
|
|
6
|
+
* forwarded to the OTLP endpoint.
|
|
7
|
+
*
|
|
8
|
+
* This is the ONLY approved way to init log telemetry in browser contexts.
|
|
9
|
+
*/
|
|
10
|
+
import { type Logger } from "@opentelemetry/api-logs";
|
|
11
|
+
export interface BrowserLogsConfig {
|
|
12
|
+
/** Full URL for the OTLP logs endpoint, e.g. "https://app.example.com/api/v1/logs" */
|
|
13
|
+
otlpUrl: string;
|
|
14
|
+
/** Logical service name recorded in every log record */
|
|
15
|
+
serviceName: string;
|
|
16
|
+
}
|
|
17
|
+
export interface BrowserLogsInstance {
|
|
18
|
+
/** Get a named Logger (uses serviceName when name is omitted) */
|
|
19
|
+
getLogger: (name?: string) => Logger;
|
|
20
|
+
/** Gracefully shut down the underlying LoggerProvider */
|
|
21
|
+
shutdown: () => Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Initialize the browser log provider.
|
|
25
|
+
*
|
|
26
|
+
* - Creates an OTLPLogExporter pointed at `config.otlpUrl`
|
|
27
|
+
* - Wraps it in a BatchLogRecordProcessor
|
|
28
|
+
* - Enables the EarlyConsoleBuffer so buffered pre-init console messages are
|
|
29
|
+
* flushed to OpenTelemetry immediately
|
|
30
|
+
*
|
|
31
|
+
* Calling this more than once returns the existing instance with a warning.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* import { initBrowserLogs } from '@superblocksteam/telemetry/browser';
|
|
36
|
+
*
|
|
37
|
+
* const logs = initBrowserLogs({
|
|
38
|
+
* otlpUrl: 'https://app.superblocks.com/api/v1/logs',
|
|
39
|
+
* serviceName: 'superblocks-ui',
|
|
40
|
+
* });
|
|
41
|
+
*
|
|
42
|
+
* const logger = logs.getLogger();
|
|
43
|
+
* logger.emit({ severityNumber: SeverityNumber.INFO, body: 'hello' });
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare function initBrowserLogs(config: BrowserLogsConfig): BrowserLogsInstance;
|
|
47
|
+
/**
|
|
48
|
+
* Reset the browser log provider singleton (for testing only).
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
export declare function resetBrowserLogs(): void;
|
|
52
|
+
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/browser/logs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAUtD,MAAM,WAAW,iBAAiB;IAChC,sFAAsF;IACtF,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,iEAAiE;IACjE,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,yDAAyD;IACzD,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAcD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,iBAAiB,GACxB,mBAAmB,CA8BrB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser Log Provider
|
|
4
|
+
*
|
|
5
|
+
* Initializes the OTel LoggerProvider for browser contexts. Pairs with the
|
|
6
|
+
* EarlyConsoleBuffer to ensure pre-init console messages are captured and
|
|
7
|
+
* forwarded to the OTLP endpoint.
|
|
8
|
+
*
|
|
9
|
+
* This is the ONLY approved way to init log telemetry in browser contexts.
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.initBrowserLogs = initBrowserLogs;
|
|
16
|
+
exports.resetBrowserLogs = resetBrowserLogs;
|
|
17
|
+
const exporter_logs_otlp_http_1 = require("@opentelemetry/exporter-logs-otlp-http");
|
|
18
|
+
const sdk_logs_1 = require("@opentelemetry/sdk-logs");
|
|
19
|
+
const early_console_buffer_js_1 = __importDefault(require("./early-console-buffer.js"));
|
|
20
|
+
const sanitizer_js_1 = require("./sanitizer.js");
|
|
21
|
+
// Singleton
|
|
22
|
+
let instance;
|
|
23
|
+
function validateConfig(config) {
|
|
24
|
+
if (!config.serviceName?.trim()) {
|
|
25
|
+
throw new Error("[Telemetry] serviceName is required and cannot be empty");
|
|
26
|
+
}
|
|
27
|
+
if (!config.otlpUrl?.trim()) {
|
|
28
|
+
throw new Error("[Telemetry] otlpUrl is required for browser logs");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the browser log provider.
|
|
33
|
+
*
|
|
34
|
+
* - Creates an OTLPLogExporter pointed at `config.otlpUrl`
|
|
35
|
+
* - Wraps it in a BatchLogRecordProcessor
|
|
36
|
+
* - Enables the EarlyConsoleBuffer so buffered pre-init console messages are
|
|
37
|
+
* flushed to OpenTelemetry immediately
|
|
38
|
+
*
|
|
39
|
+
* Calling this more than once returns the existing instance with a warning.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* import { initBrowserLogs } from '@superblocksteam/telemetry/browser';
|
|
44
|
+
*
|
|
45
|
+
* const logs = initBrowserLogs({
|
|
46
|
+
* otlpUrl: 'https://app.superblocks.com/api/v1/logs',
|
|
47
|
+
* serviceName: 'superblocks-ui',
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* const logger = logs.getLogger();
|
|
51
|
+
* logger.emit({ severityNumber: SeverityNumber.INFO, body: 'hello' });
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
function initBrowserLogs(config) {
|
|
55
|
+
validateConfig(config);
|
|
56
|
+
if (instance) {
|
|
57
|
+
console.warn("[Telemetry] Browser log provider already initialized");
|
|
58
|
+
return instance;
|
|
59
|
+
}
|
|
60
|
+
const exporter = new exporter_logs_otlp_http_1.OTLPLogExporter({ url: config.otlpUrl });
|
|
61
|
+
const sanitizer = (0, sanitizer_js_1.createSanitizingLogProcessor)();
|
|
62
|
+
const batchProcessor = new sdk_logs_1.BatchLogRecordProcessor(exporter);
|
|
63
|
+
const provider = new sdk_logs_1.LoggerProvider({
|
|
64
|
+
processors: [sanitizer, batchProcessor],
|
|
65
|
+
});
|
|
66
|
+
// Wire the EarlyConsoleBuffer so buffered pre-init logs are flushed now.
|
|
67
|
+
const otelLogger = provider.getLogger(config.serviceName, "1.0.0");
|
|
68
|
+
early_console_buffer_js_1.default.getInstance().enableOpenTelemetry(otelLogger);
|
|
69
|
+
instance = {
|
|
70
|
+
getLogger: (name) => provider.getLogger(name ?? config.serviceName, "1.0.0"),
|
|
71
|
+
shutdown: async () => {
|
|
72
|
+
await provider.shutdown();
|
|
73
|
+
instance = undefined;
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
return instance;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Reset the browser log provider singleton (for testing only).
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
function resetBrowserLogs() {
|
|
83
|
+
instance = undefined;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/browser/logs.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;AA6DH,0CAgCC;AAMD,4CAEC;AAlGD,oFAAyE;AACzE,sDAGiC;AAEjC,wFAA2D;AAC3D,iDAA8D;AAgB9D,YAAY;AACZ,IAAI,QAAyC,CAAC;AAE9C,SAAS,cAAc,CAAC,MAAyB;IAC/C,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAgB,eAAe,CAC7B,MAAyB;IAEzB,cAAc,CAAC,MAAM,CAAC,CAAC;IAEvB,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;QACrE,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,yCAAe,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,IAAA,2CAA4B,GAAE,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,kCAAuB,CAAC,QAAQ,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,IAAI,yBAAc,CAAC;QAClC,UAAU,EAAE,CAAC,SAAS,EAAE,cAAc,CAAC;KACxC,CAAC,CAAC;IAEH,yEAAyE;IACzE,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACnE,iCAAkB,CAAC,WAAW,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEjE,QAAQ,GAAG;QACT,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE,CAC3B,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC;QACzD,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAC1B,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;KACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB;IAC9B,QAAQ,GAAG,SAAS,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser Metrics Bootstrap
|
|
3
|
+
*
|
|
4
|
+
* Initializes a MeterProvider for browser contexts using OTLP HTTP export.
|
|
5
|
+
*/
|
|
6
|
+
import { type Meter } from "@opentelemetry/api";
|
|
7
|
+
export interface BrowserMetricsInstance {
|
|
8
|
+
getMeter: (name?: string) => Meter;
|
|
9
|
+
shutdown: () => Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export interface BrowserMetricsConfig {
|
|
12
|
+
/** Full URL for metrics endpoint (e.g. "http://localhost:4318/v1/metrics") */
|
|
13
|
+
otlpUrl: string;
|
|
14
|
+
serviceName: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Initialize browser metrics with a MeterProvider that exports via OTLP HTTP.
|
|
18
|
+
*
|
|
19
|
+
* Uses CUMULATIVE aggregation temporality, matching the existing UI pattern.
|
|
20
|
+
*
|
|
21
|
+
* @param config - Browser metrics configuration
|
|
22
|
+
* @returns Browser metrics instance with getMeter and shutdown
|
|
23
|
+
*/
|
|
24
|
+
export declare function initBrowserMetrics(config: BrowserMetricsConfig): BrowserMetricsInstance;
|
|
25
|
+
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/browser/metrics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAW,KAAK,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;IACnC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAoBxB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser Metrics Bootstrap
|
|
4
|
+
*
|
|
5
|
+
* Initializes a MeterProvider for browser contexts using OTLP HTTP export.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.initBrowserMetrics = initBrowserMetrics;
|
|
9
|
+
const api_1 = require("@opentelemetry/api");
|
|
10
|
+
const exporter_metrics_otlp_http_1 = require("@opentelemetry/exporter-metrics-otlp-http");
|
|
11
|
+
const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
|
|
12
|
+
/**
|
|
13
|
+
* Initialize browser metrics with a MeterProvider that exports via OTLP HTTP.
|
|
14
|
+
*
|
|
15
|
+
* Uses CUMULATIVE aggregation temporality, matching the existing UI pattern.
|
|
16
|
+
*
|
|
17
|
+
* @param config - Browser metrics configuration
|
|
18
|
+
* @returns Browser metrics instance with getMeter and shutdown
|
|
19
|
+
*/
|
|
20
|
+
function initBrowserMetrics(config) {
|
|
21
|
+
const exporter = new exporter_metrics_otlp_http_1.OTLPMetricExporter({
|
|
22
|
+
url: config.otlpUrl,
|
|
23
|
+
temporalityPreference: sdk_metrics_1.AggregationTemporality.CUMULATIVE,
|
|
24
|
+
});
|
|
25
|
+
const reader = new sdk_metrics_1.PeriodicExportingMetricReader({
|
|
26
|
+
exporter,
|
|
27
|
+
});
|
|
28
|
+
const provider = new sdk_metrics_1.MeterProvider({
|
|
29
|
+
readers: [reader],
|
|
30
|
+
});
|
|
31
|
+
api_1.metrics.setGlobalMeterProvider(provider);
|
|
32
|
+
return {
|
|
33
|
+
getMeter: (name) => provider.getMeter(name ?? config.serviceName),
|
|
34
|
+
shutdown: () => provider.shutdown(),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/browser/metrics.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AA6BH,gDAsBC;AAjDD,4CAAyD;AACzD,0FAA+E;AAC/E,4DAIoC;AAapC;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAChC,MAA4B;IAE5B,MAAM,QAAQ,GAAG,IAAI,+CAAkB,CAAC;QACtC,GAAG,EAAE,MAAM,CAAC,OAAO;QACnB,qBAAqB,EAAE,oCAAsB,CAAC,UAAU;KACzD,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,2CAA6B,CAAC;QAC/C,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,IAAI,2BAAa,CAAC;QACjC,OAAO,EAAE,CAAC,MAAM,CAAC;KAClB,CAAC,CAAC;IAEH,aAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAEzC,OAAO;QACL,QAAQ,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;QAC1E,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE;KACpC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser PII Sanitizing Processors
|
|
3
|
+
*
|
|
4
|
+
* Span and log processors that redact PII before export from the browser.
|
|
5
|
+
* Browser telemetry always runs in untrusted context, so aggressive sanitization
|
|
6
|
+
* is applied unconditionally.
|
|
7
|
+
*
|
|
8
|
+
* - SanitizingSpanProcessor: redacts sensitive span attributes and strips
|
|
9
|
+
* sensitive query params from URL attributes.
|
|
10
|
+
* - SanitizingLogProcessor: redacts sensitive log record attributes and
|
|
11
|
+
* replaces email-like patterns in log body text.
|
|
12
|
+
*/
|
|
13
|
+
import type { LogRecordProcessor } from "@opentelemetry/sdk-logs";
|
|
14
|
+
import type { SpanProcessor } from "@opentelemetry/sdk-trace-base";
|
|
15
|
+
export interface SanitizingConfig {
|
|
16
|
+
/** Additional attribute key patterns to redact */
|
|
17
|
+
additionalKeyPatterns?: RegExp[];
|
|
18
|
+
/** Additional URL param names to strip */
|
|
19
|
+
additionalSensitiveParams?: string[];
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a SpanProcessor that redacts PII from span attributes before export.
|
|
23
|
+
*
|
|
24
|
+
* @param config - Optional configuration for additional key patterns / URL params
|
|
25
|
+
* @returns A SpanProcessor suitable for use in a browser WebTracerProvider
|
|
26
|
+
*/
|
|
27
|
+
export declare function createSanitizingSpanProcessor(config?: SanitizingConfig): SpanProcessor;
|
|
28
|
+
/**
|
|
29
|
+
* Create a LogRecordProcessor that redacts PII from log records before export.
|
|
30
|
+
*
|
|
31
|
+
* @param config - Optional configuration for additional key patterns
|
|
32
|
+
* @returns A LogRecordProcessor suitable for use in a browser log provider
|
|
33
|
+
*/
|
|
34
|
+
export declare function createSanitizingLogProcessor(config?: SanitizingConfig): LogRecordProcessor;
|
|
35
|
+
//# sourceMappingURL=sanitizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.d.ts","sourceRoot":"","sources":["../../src/browser/sanitizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAGV,aAAa,EACd,MAAM,+BAA+B,CAAC;AAwDvC,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;IACjC,0CAA0C;IAC1C,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;CACtC;AAsKD;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,MAAM,CAAC,EAAE,gBAAgB,GACxB,aAAa,CAEf;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,CAAC,EAAE,gBAAgB,GACxB,kBAAkB,CAEpB"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser PII Sanitizing Processors
|
|
4
|
+
*
|
|
5
|
+
* Span and log processors that redact PII before export from the browser.
|
|
6
|
+
* Browser telemetry always runs in untrusted context, so aggressive sanitization
|
|
7
|
+
* is applied unconditionally.
|
|
8
|
+
*
|
|
9
|
+
* - SanitizingSpanProcessor: redacts sensitive span attributes and strips
|
|
10
|
+
* sensitive query params from URL attributes.
|
|
11
|
+
* - SanitizingLogProcessor: redacts sensitive log record attributes and
|
|
12
|
+
* replaces email-like patterns in log body text.
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.createSanitizingSpanProcessor = createSanitizingSpanProcessor;
|
|
16
|
+
exports.createSanitizingLogProcessor = createSanitizingLogProcessor;
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Constants
|
|
19
|
+
// ============================================================================
|
|
20
|
+
const REDACTED = "[REDACTED]";
|
|
21
|
+
const REDACTED_EMAIL = "[REDACTED_EMAIL]";
|
|
22
|
+
/**
|
|
23
|
+
* Attribute key substrings that indicate sensitive values.
|
|
24
|
+
* Case-insensitive matching is applied.
|
|
25
|
+
*/
|
|
26
|
+
const SENSITIVE_KEY_SUBSTRINGS = [
|
|
27
|
+
"email",
|
|
28
|
+
"token",
|
|
29
|
+
"secret",
|
|
30
|
+
"password",
|
|
31
|
+
"authorization",
|
|
32
|
+
"cookie",
|
|
33
|
+
"credential",
|
|
34
|
+
];
|
|
35
|
+
/**
|
|
36
|
+
* Attribute key patterns (regex) for additional well-known sensitive keys
|
|
37
|
+
* not covered by simple substring matching (e.g. api_key, x-api-key).
|
|
38
|
+
*/
|
|
39
|
+
const SENSITIVE_KEY_PATTERNS = [
|
|
40
|
+
/api[_\-.]?key/i,
|
|
41
|
+
/x[_\-.]?api[_\-.]?key/i,
|
|
42
|
+
];
|
|
43
|
+
/**
|
|
44
|
+
* URL query parameter names that should be stripped.
|
|
45
|
+
* Exact (case-insensitive) match against param name.
|
|
46
|
+
*/
|
|
47
|
+
const SENSITIVE_URL_PARAMS = [
|
|
48
|
+
"token",
|
|
49
|
+
"key",
|
|
50
|
+
"secret",
|
|
51
|
+
"password",
|
|
52
|
+
"code",
|
|
53
|
+
"state",
|
|
54
|
+
"auth",
|
|
55
|
+
];
|
|
56
|
+
/** URL attribute keys that receive query-param sanitization. */
|
|
57
|
+
const URL_ATTRIBUTE_KEYS = new Set(["http.url", "url.full"]);
|
|
58
|
+
/** Regex matching email-like patterns in log body text. */
|
|
59
|
+
const EMAIL_PATTERN = /[\w.+-]+@[\w.-]+(\.\w+)?/g;
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Helpers
|
|
62
|
+
// ============================================================================
|
|
63
|
+
/**
|
|
64
|
+
* Returns true if the attribute key is sensitive and its value should be
|
|
65
|
+
* replaced with [REDACTED].
|
|
66
|
+
*/
|
|
67
|
+
function isSensitiveKey(key, additionalPatterns) {
|
|
68
|
+
const lower = key.toLowerCase();
|
|
69
|
+
for (const substr of SENSITIVE_KEY_SUBSTRINGS) {
|
|
70
|
+
if (lower.includes(substr)) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
for (const pattern of SENSITIVE_KEY_PATTERNS) {
|
|
75
|
+
pattern.lastIndex = 0;
|
|
76
|
+
if (pattern.test(key)) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
for (const pattern of additionalPatterns) {
|
|
81
|
+
pattern.lastIndex = 0;
|
|
82
|
+
if (pattern.test(key)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Strips sensitive query parameters from a URL string.
|
|
90
|
+
* Sensitive param values are replaced with [REDACTED] (key is preserved).
|
|
91
|
+
*/
|
|
92
|
+
function sanitizeUrl(url, additionalParams) {
|
|
93
|
+
const qIdx = url.indexOf("?");
|
|
94
|
+
if (qIdx === -1) {
|
|
95
|
+
return url;
|
|
96
|
+
}
|
|
97
|
+
const base = url.slice(0, qIdx);
|
|
98
|
+
const query = url.slice(qIdx + 1);
|
|
99
|
+
const sensitiveSet = new Set([
|
|
100
|
+
...SENSITIVE_URL_PARAMS.map((p) => p.toLowerCase()),
|
|
101
|
+
...additionalParams.map((p) => p.toLowerCase()),
|
|
102
|
+
]);
|
|
103
|
+
const sanitizedParts = query.split("&").map((part) => {
|
|
104
|
+
const eqIdx = part.indexOf("=");
|
|
105
|
+
if (eqIdx === -1) {
|
|
106
|
+
return part;
|
|
107
|
+
}
|
|
108
|
+
const rawParamName = part.slice(0, eqIdx);
|
|
109
|
+
let paramName;
|
|
110
|
+
try {
|
|
111
|
+
paramName = decodeURIComponent(rawParamName).toLowerCase();
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
paramName = rawParamName.toLowerCase();
|
|
115
|
+
}
|
|
116
|
+
if (sensitiveSet.has(paramName)) {
|
|
117
|
+
return `${part.slice(0, eqIdx)}=${REDACTED}`;
|
|
118
|
+
}
|
|
119
|
+
return part;
|
|
120
|
+
});
|
|
121
|
+
return `${base}?${sanitizedParts.join("&")}`;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Sanitizes span/log attributes in-place. Sensitive keys get value [REDACTED];
|
|
125
|
+
* URL attributes get query-param sanitization.
|
|
126
|
+
*/
|
|
127
|
+
function sanitizeAttributes(attributes, additionalKeyPatterns, additionalSensitiveParams) {
|
|
128
|
+
for (const key of Object.keys(attributes)) {
|
|
129
|
+
if (URL_ATTRIBUTE_KEYS.has(key)) {
|
|
130
|
+
const val = attributes[key];
|
|
131
|
+
if (typeof val === "string") {
|
|
132
|
+
attributes[key] = sanitizeUrl(val, additionalSensitiveParams);
|
|
133
|
+
}
|
|
134
|
+
// URL attributes are handled; skip further key-based check
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (isSensitiveKey(key, additionalKeyPatterns)) {
|
|
138
|
+
attributes[key] = REDACTED;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// ============================================================================
|
|
143
|
+
// SanitizingSpanProcessor
|
|
144
|
+
// ============================================================================
|
|
145
|
+
class SanitizingSpanProcessor {
|
|
146
|
+
additionalKeyPatterns;
|
|
147
|
+
additionalSensitiveParams;
|
|
148
|
+
constructor(config = {}) {
|
|
149
|
+
this.additionalKeyPatterns = config.additionalKeyPatterns ?? [];
|
|
150
|
+
this.additionalSensitiveParams = config.additionalSensitiveParams ?? [];
|
|
151
|
+
}
|
|
152
|
+
onStart(_span, _parentContext) {
|
|
153
|
+
// Nothing to do at start; sanitization occurs at end when attributes are final.
|
|
154
|
+
}
|
|
155
|
+
onEnd(span) {
|
|
156
|
+
// ReadableSpan.attributes is typed as Attributes (readonly in API), but
|
|
157
|
+
// in practice the SDK implementation uses a mutable object. We cast to
|
|
158
|
+
// allow in-place mutation, which avoids allocating a new span wrapper.
|
|
159
|
+
const attrs = span.attributes;
|
|
160
|
+
sanitizeAttributes(attrs, this.additionalKeyPatterns, this.additionalSensitiveParams);
|
|
161
|
+
}
|
|
162
|
+
async shutdown() { }
|
|
163
|
+
async forceFlush() { }
|
|
164
|
+
}
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// SanitizingLogProcessor
|
|
167
|
+
// ============================================================================
|
|
168
|
+
class BrowserSanitizingLogProcessor {
|
|
169
|
+
additionalKeyPatterns;
|
|
170
|
+
constructor(config = {}) {
|
|
171
|
+
this.additionalKeyPatterns = config.additionalKeyPatterns ?? [];
|
|
172
|
+
}
|
|
173
|
+
onEmit(record, _context) {
|
|
174
|
+
// Sanitize attributes in-place
|
|
175
|
+
const attrs = record.attributes;
|
|
176
|
+
for (const key of Object.keys(attrs)) {
|
|
177
|
+
if (isSensitiveKey(key, this.additionalKeyPatterns)) {
|
|
178
|
+
attrs[key] = REDACTED;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Redact email-like patterns in string body
|
|
182
|
+
if (typeof record.body === "string") {
|
|
183
|
+
EMAIL_PATTERN.lastIndex = 0;
|
|
184
|
+
record.body = record.body.replace(EMAIL_PATTERN, REDACTED_EMAIL);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
async shutdown() { }
|
|
188
|
+
async forceFlush() { }
|
|
189
|
+
}
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// Factory functions
|
|
192
|
+
// ============================================================================
|
|
193
|
+
/**
|
|
194
|
+
* Create a SpanProcessor that redacts PII from span attributes before export.
|
|
195
|
+
*
|
|
196
|
+
* @param config - Optional configuration for additional key patterns / URL params
|
|
197
|
+
* @returns A SpanProcessor suitable for use in a browser WebTracerProvider
|
|
198
|
+
*/
|
|
199
|
+
function createSanitizingSpanProcessor(config) {
|
|
200
|
+
return new SanitizingSpanProcessor(config);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Create a LogRecordProcessor that redacts PII from log records before export.
|
|
204
|
+
*
|
|
205
|
+
* @param config - Optional configuration for additional key patterns
|
|
206
|
+
* @returns A LogRecordProcessor suitable for use in a browser log provider
|
|
207
|
+
*/
|
|
208
|
+
function createSanitizingLogProcessor(config) {
|
|
209
|
+
return new BrowserSanitizingLogProcessor(config);
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=sanitizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../src/browser/sanitizer.ts"],"names":[],"mappings":"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"}
|