@superblocksteam/telemetry 2.0.93-next.7 → 2.0.94-next.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 +59 -44
- package/dist/browser/index.d.ts +2 -2
- package/dist/browser/resilient-exporter.d.ts.map +1 -1
- package/dist/browser/resilient-exporter.js.map +1 -1
- package/dist/common/contracts/tier2-traces.d.ts +62 -50
- package/dist/common/contracts/tier2-traces.d.ts.map +1 -1
- package/dist/common/contracts/tier2-traces.js +484 -138
- package/dist/common/contracts/tier2-traces.js.map +1 -1
- package/dist/common/guardrails.d.ts +2 -2
- package/dist/common/guardrails.d.ts.map +1 -1
- package/dist/common/guardrails.js +7 -7
- package/dist/common/guardrails.js.map +1 -1
- package/dist/common/log-sanitizer.d.ts +88 -0
- package/dist/common/log-sanitizer.d.ts.map +1 -1
- package/dist/common/log-sanitizer.js +304 -6
- package/dist/common/log-sanitizer.js.map +1 -1
- package/dist/common/resource.d.ts +4 -1
- package/dist/common/resource.d.ts.map +1 -1
- package/dist/common/resource.js +4 -2
- package/dist/common/resource.js.map +1 -1
- package/dist/common/trace-sanitizer.d.ts +82 -0
- package/dist/common/trace-sanitizer.d.ts.map +1 -0
- package/dist/common/trace-sanitizer.js +230 -0
- package/dist/common/trace-sanitizer.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -8
- package/dist/index.js.map +1 -1
- package/dist/lint/forbidden-attributes.d.ts +2 -2
- package/dist/lint/forbidden-attributes.d.ts.map +1 -1
- package/dist/lint/forbidden-attributes.js +41 -40
- package/dist/lint/forbidden-attributes.js.map +1 -1
- package/dist/lint/index.d.ts +1 -1
- package/dist/llmobs/index.d.ts +2 -2
- package/dist/llmobs/tier1-exporter.d.ts +2 -2
- package/dist/llmobs/tier1-exporter.d.ts.map +1 -1
- package/dist/llmobs/tier1-exporter.js +17 -14
- package/dist/llmobs/tier1-exporter.js.map +1 -1
- package/dist/llmobs/tier2-summarizer.d.ts.map +1 -1
- package/dist/llmobs/tier2-summarizer.js +10 -4
- package/dist/llmobs/tier2-summarizer.js.map +1 -1
- package/dist/node/exporters/resilient-exporter.d.ts +14 -0
- package/dist/node/exporters/resilient-exporter.d.ts.map +1 -1
- package/dist/node/exporters/resilient-exporter.js +8 -1
- package/dist/node/exporters/resilient-exporter.js.map +1 -1
- package/dist/node/index.d.ts +2 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +7 -2
- package/dist/node/index.js.map +1 -1
- package/dist/node/init.d.ts.map +1 -1
- package/dist/node/init.js +61 -12
- package/dist/node/init.js.map +1 -1
- package/dist/node/log-processor.d.ts +41 -6
- package/dist/node/log-processor.d.ts.map +1 -1
- package/dist/node/log-processor.js +152 -61
- package/dist/node/log-processor.js.map +1 -1
- package/dist/node/metrics-client.d.ts.map +1 -1
- package/dist/node/metrics-client.js.map +1 -1
- package/dist/node/safe-logger.d.ts +55 -0
- package/dist/node/safe-logger.d.ts.map +1 -0
- package/dist/node/safe-logger.js +158 -0
- package/dist/node/safe-logger.js.map +1 -0
- package/dist/node/sanitizing-processor.d.ts +56 -0
- package/dist/node/sanitizing-processor.d.ts.map +1 -0
- package/dist/node/sanitizing-processor.js +124 -0
- package/dist/node/sanitizing-processor.js.map +1 -0
- package/dist/node/traced-socket.d.ts +47 -3
- package/dist/node/traced-socket.d.ts.map +1 -1
- package/dist/node/traced-socket.js +96 -19
- package/dist/node/traced-socket.js.map +1 -1
- package/dist/testing/in-memory-exporter.d.ts +3 -3
- package/dist/testing/in-memory-exporter.d.ts.map +1 -1
- package/dist/testing/in-memory-exporter.js +3 -1
- package/dist/testing/in-memory-exporter.js.map +1 -1
- package/dist/testing/index.d.ts +2 -2
- package/dist/types/index.d.ts +28 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist-esm/browser/index.d.ts +2 -2
- package/dist-esm/browser/index.js +2 -2
- package/dist-esm/browser/resilient-exporter.d.ts.map +1 -1
- package/dist-esm/browser/resilient-exporter.js.map +1 -1
- package/dist-esm/common/contracts/tier2-traces.d.ts +62 -50
- package/dist-esm/common/contracts/tier2-traces.d.ts.map +1 -1
- package/dist-esm/common/contracts/tier2-traces.js +480 -137
- package/dist-esm/common/contracts/tier2-traces.js.map +1 -1
- package/dist-esm/common/guardrails.d.ts +2 -2
- package/dist-esm/common/guardrails.d.ts.map +1 -1
- package/dist-esm/common/guardrails.js +9 -9
- package/dist-esm/common/guardrails.js.map +1 -1
- package/dist-esm/common/log-sanitizer.d.ts +88 -0
- package/dist-esm/common/log-sanitizer.d.ts.map +1 -1
- package/dist-esm/common/log-sanitizer.js +294 -5
- package/dist-esm/common/log-sanitizer.js.map +1 -1
- package/dist-esm/common/resource.d.ts +4 -1
- package/dist-esm/common/resource.d.ts.map +1 -1
- package/dist-esm/common/resource.js +3 -1
- package/dist-esm/common/resource.js.map +1 -1
- package/dist-esm/common/trace-sanitizer.d.ts +82 -0
- package/dist-esm/common/trace-sanitizer.d.ts.map +1 -0
- package/dist-esm/common/trace-sanitizer.js +226 -0
- package/dist-esm/common/trace-sanitizer.js.map +1 -0
- package/dist-esm/index.d.ts +2 -1
- package/dist-esm/index.d.ts.map +1 -1
- package/dist-esm/index.js +2 -1
- package/dist-esm/index.js.map +1 -1
- package/dist-esm/lint/forbidden-attributes.d.ts +2 -2
- package/dist-esm/lint/forbidden-attributes.d.ts.map +1 -1
- package/dist-esm/lint/forbidden-attributes.js +43 -42
- package/dist-esm/lint/forbidden-attributes.js.map +1 -1
- package/dist-esm/lint/index.d.ts +1 -1
- package/dist-esm/lint/index.js +1 -1
- package/dist-esm/llmobs/index.d.ts +2 -2
- package/dist-esm/llmobs/index.js +2 -2
- package/dist-esm/llmobs/tier1-exporter.d.ts +2 -2
- package/dist-esm/llmobs/tier1-exporter.d.ts.map +1 -1
- package/dist-esm/llmobs/tier1-exporter.js +18 -15
- package/dist-esm/llmobs/tier1-exporter.js.map +1 -1
- package/dist-esm/llmobs/tier2-summarizer.d.ts.map +1 -1
- package/dist-esm/llmobs/tier2-summarizer.js +10 -4
- package/dist-esm/llmobs/tier2-summarizer.js.map +1 -1
- package/dist-esm/node/exporters/resilient-exporter.d.ts +14 -0
- package/dist-esm/node/exporters/resilient-exporter.d.ts.map +1 -1
- package/dist-esm/node/exporters/resilient-exporter.js +8 -1
- package/dist-esm/node/exporters/resilient-exporter.js.map +1 -1
- package/dist-esm/node/index.d.ts +2 -1
- package/dist-esm/node/index.d.ts.map +1 -1
- package/dist-esm/node/index.js +2 -1
- package/dist-esm/node/index.js.map +1 -1
- package/dist-esm/node/init.d.ts.map +1 -1
- package/dist-esm/node/init.js +61 -12
- package/dist-esm/node/init.js.map +1 -1
- package/dist-esm/node/log-processor.d.ts +41 -6
- package/dist-esm/node/log-processor.d.ts.map +1 -1
- package/dist-esm/node/log-processor.js +151 -62
- package/dist-esm/node/log-processor.js.map +1 -1
- package/dist-esm/node/metrics-client.d.ts.map +1 -1
- package/dist-esm/node/metrics-client.js.map +1 -1
- package/dist-esm/node/safe-logger.d.ts +55 -0
- package/dist-esm/node/safe-logger.d.ts.map +1 -0
- package/dist-esm/node/safe-logger.js +154 -0
- package/dist-esm/node/safe-logger.js.map +1 -0
- package/dist-esm/node/sanitizing-processor.d.ts +56 -0
- package/dist-esm/node/sanitizing-processor.d.ts.map +1 -0
- package/dist-esm/node/sanitizing-processor.js +120 -0
- package/dist-esm/node/sanitizing-processor.js.map +1 -0
- package/dist-esm/node/traced-socket.d.ts +47 -3
- package/dist-esm/node/traced-socket.d.ts.map +1 -1
- package/dist-esm/node/traced-socket.js +96 -19
- package/dist-esm/node/traced-socket.js.map +1 -1
- package/dist-esm/testing/in-memory-exporter.d.ts +3 -3
- package/dist-esm/testing/in-memory-exporter.d.ts.map +1 -1
- package/dist-esm/testing/in-memory-exporter.js +4 -2
- package/dist-esm/testing/in-memory-exporter.js.map +1 -1
- package/dist-esm/testing/index.d.ts +2 -2
- package/dist-esm/testing/index.js +2 -2
- package/dist-esm/types/index.d.ts +28 -1
- package/dist-esm/types/index.d.ts.map +1 -1
- package/dist-esm/types/index.js +1 -1
- package/package.json +17 -18
package/README.md
CHANGED
|
@@ -6,33 +6,38 @@ Canonical telemetry bootstrap package for all Superblocks services. This package
|
|
|
6
6
|
|
|
7
7
|
This is the **ONLY approved way** to initialize OpenTelemetry in Superblocks services. Direct usage of `NodeSDK` or `WebTracerProvider` outside this package is prohibited.
|
|
8
8
|
|
|
9
|
+
- **Logging**: Policy-aware log export (severity filtering, sanitization). See [docs/LOGGING.md](docs/LOGGING.md) for what to log at each level and forbidden fields.
|
|
10
|
+
|
|
9
11
|
## Tiered Telemetry Model
|
|
10
12
|
|
|
11
|
-
| Tier
|
|
12
|
-
|
|
13
|
-
| **Tier 1** | Full fidelity debugging (code, prompts, stack traces)
|
|
14
|
-
| **Tier 2** | Sanitized operational telemetry (latency, errors, token usage) | Exported by default
|
|
15
|
-
| **Tier 3** | AI experience telemetry (prompts, responses, quality signals)
|
|
13
|
+
| Tier | Description | Egress |
|
|
14
|
+
| ---------- | -------------------------------------------------------------- | ----------------------- |
|
|
15
|
+
| **Tier 1** | Full fidelity debugging (code, prompts, stack traces) | Local only (cloud-prem) |
|
|
16
|
+
| **Tier 2** | Sanitized operational telemetry (latency, errors, token usage) | Exported by default |
|
|
17
|
+
| **Tier 3** | AI experience telemetry (prompts, responses, quality signals) | Exported by default |
|
|
16
18
|
|
|
17
19
|
## Usage
|
|
18
20
|
|
|
19
21
|
### Node.js Services
|
|
20
22
|
|
|
21
23
|
```typescript
|
|
22
|
-
import { initNodeTelemetry } from
|
|
23
|
-
import { getDefaultPolicy, DeploymentType } from
|
|
24
|
+
import { initNodeTelemetry } from "@superblocksteam/telemetry/node";
|
|
25
|
+
import { getDefaultPolicy, DeploymentType } from "@superblocksteam/shared";
|
|
24
26
|
|
|
25
27
|
const policy = getDefaultPolicy(DeploymentType.CLOUD_PREM);
|
|
26
28
|
|
|
27
|
-
const telemetry = initNodeTelemetry(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
const telemetry = initNodeTelemetry(
|
|
30
|
+
{
|
|
31
|
+
serviceName: "my-service",
|
|
32
|
+
serviceVersion: "1.0.0",
|
|
33
|
+
environment: process.env.NODE_ENV ?? "development",
|
|
34
|
+
otlpUrl: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,
|
|
35
|
+
},
|
|
36
|
+
policy,
|
|
37
|
+
);
|
|
33
38
|
|
|
34
39
|
// Graceful shutdown
|
|
35
|
-
process.on(
|
|
40
|
+
process.on("SIGTERM", async () => {
|
|
36
41
|
await telemetry.shutdown();
|
|
37
42
|
});
|
|
38
43
|
```
|
|
@@ -40,42 +45,45 @@ process.on('SIGTERM', async () => {
|
|
|
40
45
|
### Browser
|
|
41
46
|
|
|
42
47
|
```typescript
|
|
43
|
-
import { initBrowserTelemetry } from
|
|
44
|
-
import { getDefaultPolicy, DeploymentType } from
|
|
48
|
+
import { initBrowserTelemetry } from "@superblocksteam/telemetry/browser";
|
|
49
|
+
import { getDefaultPolicy, DeploymentType } from "@superblocksteam/shared";
|
|
45
50
|
|
|
46
51
|
const policy = getDefaultPolicy(DeploymentType.CLOUD);
|
|
47
52
|
|
|
48
|
-
initBrowserTelemetry(
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
initBrowserTelemetry(
|
|
54
|
+
{
|
|
55
|
+
serviceName: "superblocks-ui",
|
|
56
|
+
serviceVersion: "1.0.0",
|
|
57
|
+
environment: "production",
|
|
58
|
+
otlpUrl: "https://app.superblocks.com/api/v1/traces",
|
|
59
|
+
},
|
|
60
|
+
policy,
|
|
61
|
+
);
|
|
54
62
|
```
|
|
55
63
|
|
|
56
64
|
### Testing
|
|
57
65
|
|
|
58
66
|
```typescript
|
|
59
|
-
import { initTestTelemetry } from
|
|
67
|
+
import { initTestTelemetry } from "@superblocksteam/telemetry/testing";
|
|
60
68
|
|
|
61
|
-
describe(
|
|
69
|
+
describe("MyService", () => {
|
|
62
70
|
const { spanExporter, reset } = initTestTelemetry();
|
|
63
71
|
|
|
64
72
|
beforeEach(() => reset());
|
|
65
73
|
|
|
66
|
-
it(
|
|
74
|
+
it("creates expected spans", async () => {
|
|
67
75
|
await myService.doSomething();
|
|
68
76
|
|
|
69
77
|
const spans = spanExporter.getSpans();
|
|
70
78
|
expect(spans).toHaveLength(1);
|
|
71
|
-
expect(spans[0].name).toBe(
|
|
79
|
+
expect(spans[0].name).toBe("doSomething");
|
|
72
80
|
});
|
|
73
81
|
|
|
74
|
-
it(
|
|
82
|
+
it("does not leak Tier 1 data", async () => {
|
|
75
83
|
await myService.processWithSensitiveData();
|
|
76
84
|
|
|
77
|
-
spanExporter.assertNoAttribute(
|
|
78
|
-
spanExporter.assertNoAttribute(
|
|
85
|
+
spanExporter.assertNoAttribute("prompt", /.*/);
|
|
86
|
+
spanExporter.assertNoAttribute("code", /.*/);
|
|
79
87
|
});
|
|
80
88
|
});
|
|
81
89
|
```
|
|
@@ -85,30 +93,34 @@ describe('MyService', () => {
|
|
|
85
93
|
Use tier policy hints to inform the Collector how to route specific spans. This is useful when the SDK knows something the Collector can't infer from attributes alone.
|
|
86
94
|
|
|
87
95
|
```typescript
|
|
88
|
-
import { trace } from
|
|
89
|
-
import {
|
|
96
|
+
import { trace } from "@opentelemetry/api";
|
|
97
|
+
import {
|
|
98
|
+
markSensitive,
|
|
99
|
+
markForAIAnalysis,
|
|
100
|
+
markDebugOnly,
|
|
101
|
+
} from "@superblocksteam/telemetry";
|
|
90
102
|
|
|
91
|
-
const tracer = trace.getTracer(
|
|
103
|
+
const tracer = trace.getTracer("my-service");
|
|
92
104
|
|
|
93
105
|
// Span containing secrets — Tier 1 only, never exported
|
|
94
|
-
tracer.startActiveSpan(
|
|
106
|
+
tracer.startActiveSpan("decrypt_customer_secret", (span) => {
|
|
95
107
|
markSensitive(span);
|
|
96
108
|
// ... decrypt operation
|
|
97
109
|
span.end();
|
|
98
110
|
});
|
|
99
111
|
|
|
100
112
|
// GenAI span for quality analysis — include in Tier 3
|
|
101
|
-
tracer.startActiveSpan(
|
|
113
|
+
tracer.startActiveSpan("gen_ai.chat", (span) => {
|
|
102
114
|
markForAIAnalysis(span);
|
|
103
|
-
span.setAttribute(
|
|
115
|
+
span.setAttribute("gen_ai.system", "anthropic");
|
|
104
116
|
// ... LLM call
|
|
105
117
|
span.end();
|
|
106
118
|
});
|
|
107
119
|
|
|
108
120
|
// High-cardinality debug span — skip export (cost control)
|
|
109
|
-
tracer.startActiveSpan(
|
|
121
|
+
tracer.startActiveSpan("debug.cache_lookup", (span) => {
|
|
110
122
|
markDebugOnly(span);
|
|
111
|
-
span.setAttribute(
|
|
123
|
+
span.setAttribute("cache.key", cacheKey);
|
|
112
124
|
// ... lookup
|
|
113
125
|
span.end();
|
|
114
126
|
});
|
|
@@ -116,16 +128,19 @@ tracer.startActiveSpan('debug.cache_lookup', (span) => {
|
|
|
116
128
|
|
|
117
129
|
### Available Hints
|
|
118
130
|
|
|
119
|
-
| Helper
|
|
120
|
-
|
|
121
|
-
| `markSensitive(span)`
|
|
131
|
+
| Helper | Hint Value | Effect |
|
|
132
|
+
| ------------------------- | --------------- | -------------------------------- |
|
|
133
|
+
| `markSensitive(span)` | `tier1_only` | Tier 1 only, skip Tier 2/3 |
|
|
122
134
|
| `markForAIAnalysis(span)` | `include_tier3` | Include in Tier 3 (AI analytics) |
|
|
123
|
-
| `markDebugOnly(span)`
|
|
135
|
+
| `markDebugOnly(span)` | `skip_export` | Tier 1 only, skip all export |
|
|
124
136
|
|
|
125
137
|
You can also set hints directly:
|
|
126
138
|
|
|
127
139
|
```typescript
|
|
128
|
-
import {
|
|
140
|
+
import {
|
|
141
|
+
TIER_HINT_ATTRIBUTE,
|
|
142
|
+
TierPolicyHint,
|
|
143
|
+
} from "@superblocksteam/telemetry";
|
|
129
144
|
|
|
130
145
|
span.setAttribute(TIER_HINT_ATTRIBUTE, TierPolicyHint.TIER1_ONLY);
|
|
131
146
|
```
|
|
@@ -143,7 +158,7 @@ span.setAttribute(TIER_HINT_ATTRIBUTE, TierPolicyHint.TIER1_ONLY);
|
|
|
143
158
|
```
|
|
144
159
|
@superblocksteam/telemetry
|
|
145
160
|
├── /node # Node.js bootstrap (initNodeTelemetry)
|
|
146
|
-
├── /browser # Browser bootstrap (initBrowserTelemetry)
|
|
161
|
+
├── /browser # Browser bootstrap (initBrowserTelemetry)
|
|
147
162
|
├── /testing # Test utilities (in-memory exporters)
|
|
148
163
|
└── /common # Shared utilities (resource, router, sanitizer)
|
|
149
164
|
```
|
|
@@ -152,4 +167,4 @@ span.setAttribute(TIER_HINT_ATTRIBUTE, TierPolicyHint.TIER1_ONLY);
|
|
|
152
167
|
|
|
153
168
|
- [O11y Refactor Project](../../engineering/projects/o11y-refactor/README.md)
|
|
154
169
|
- [Telemetry Policy Schema](../../engineering/projects/o11y-refactor/epics/epic-a1-telemetry-policy.md)
|
|
155
|
-
- [Tier 2 Traces Contract](https://github.com/superblocksteam/engineering/blob/main/projects/o11y-refactor/contracts/tier2-traces.v0.
|
|
170
|
+
- [Tier 2 Traces Contract](https://github.com/superblocksteam/engineering/blob/main/projects/o11y-refactor/contracts/tier2-traces.v0.2.0.json)
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This is the ONLY approved way to initialize telemetry in browser contexts.
|
|
5
5
|
*/
|
|
6
|
-
export { initBrowserTelemetry, getBrowserTelemetryInstance, isBrowserTelemetryInitialized, resetBrowserTelemetry, getEnvironmentFromHostname, type BrowserTelemetryInstance, } from
|
|
7
|
-
export { getDefaultPolicy, DeploymentType } from
|
|
6
|
+
export { initBrowserTelemetry, getBrowserTelemetryInstance, isBrowserTelemetryInitialized, resetBrowserTelemetry, getEnvironmentFromHostname, type BrowserTelemetryInstance, } from "./init.js";
|
|
7
|
+
export { getDefaultPolicy, DeploymentType } from "../types/policy.js";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resilient-exporter.d.ts","sourceRoot":"","sources":["../../src/browser/resilient-exporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,MAAM,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"resilient-exporter.d.ts","sourceRoot":"","sources":["../../src/browser/resilient-exporter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAC;IACvB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,MAAM,CAAC,EAAE,CACP,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,SAAS,KAC/C,IAAI,CAAC;CACX;AAED;;;;;GAKG;AACH,qBAAa,wBAAyB,YAAW,YAAY;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAGb;IAEV,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,MAAM,EAAE,8BAA8B;IAOlD;;OAEG;IACH,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI;IAiDD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAGlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resilient-exporter.js","sourceRoot":"","sources":["../../src/browser/resilient-exporter.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAGH,8CAAqE;
|
|
1
|
+
{"version":3,"file":"resilient-exporter.js","sourceRoot":"","sources":["../../src/browser/resilient-exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,75 +1,87 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tier 2 Traces Contract
|
|
2
|
+
* Tier 2 Traces Contract (v0.2.0)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* -
|
|
6
|
-
* - Hashed attributes (pseudonymized by Collector)
|
|
7
|
-
* - Dropped attributes (removed by Collector)
|
|
8
|
-
* - Forbidden value patterns (for lint-time detection)
|
|
4
|
+
* Single source of truth for Tier 2 sanitized trace telemetry.
|
|
5
|
+
* Mirrors: engineering/projects/o11y-refactor/contracts/tier2-traces.v0.2.0.json
|
|
9
6
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
13
|
-
* -
|
|
7
|
+
* Used by:
|
|
8
|
+
* - trace-sanitizer (SDK: which spans/attributes to export)
|
|
9
|
+
* - lint/forbidden-attributes (ESLint)
|
|
10
|
+
* - guardrails (dev-time warnings)
|
|
14
11
|
* - Collector config generation
|
|
15
12
|
*
|
|
16
|
-
*
|
|
17
|
-
* Source of truth: engineering/projects/o11y-refactor/contracts/tier2-traces.v0.3.0.json
|
|
13
|
+
* "request handler *" is a local extension for Express instrumentation (not in JSON).
|
|
18
14
|
*/
|
|
15
|
+
import { DeploymentTypeEnum } from "@superblocksteam/shared";
|
|
16
|
+
export interface AttributeDefinition {
|
|
17
|
+
name: string;
|
|
18
|
+
allowedValues?: string[];
|
|
19
|
+
maxCardinality?: number;
|
|
20
|
+
type?: "string" | "number" | "boolean";
|
|
21
|
+
}
|
|
22
|
+
export type AllowedAttribute = string | AttributeDefinition;
|
|
23
|
+
export interface SpanDefinition {
|
|
24
|
+
name: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
allowedAttributes: AllowedAttribute[];
|
|
27
|
+
alwaysSample?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export declare function getAttributeName(attr: AllowedAttribute): string;
|
|
19
30
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* The Collector strips these entirely (not hashed, not present in Tier 2).
|
|
31
|
+
* Span patterns from tier2-traces.v0.2.0.json.
|
|
32
|
+
* Suffix wildcard only: "HTTP POST *" matches "HTTP POST /api/..." or "POST /api/...".
|
|
23
33
|
*/
|
|
24
|
-
export declare const
|
|
34
|
+
export declare const TIER_2_TRACE_CONTRACT: SpanDefinition[];
|
|
25
35
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* Hashes enable aggregate analysis without exposing plaintext identifiers.
|
|
29
|
-
*
|
|
30
|
-
* Mapping:
|
|
31
|
-
* user-email, user.email, etc. → user.hash
|
|
32
|
-
* organization-id, organization_id → organization.hash
|
|
33
|
-
* application-id, application_id → application.hash
|
|
34
|
-
* session.id → session.hash
|
|
35
|
-
* enduser.id → enduser.pseudo.id
|
|
36
|
+
* Cloud trace contract: match-all span name ("*") so no spans are dropped by name.
|
|
37
|
+
* Attribute allowlist is not used when attributeAllowlistPassthrough is true.
|
|
36
38
|
*/
|
|
37
|
-
export declare const
|
|
39
|
+
export declare const CLOUD_TRACE_CONTRACT: SpanDefinition[];
|
|
38
40
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
+
* Returns the trace contract (span definitions) for the given deployment type.
|
|
42
|
+
* Cloud: match-all so no traces are dropped by span name.
|
|
43
|
+
* Cloud-prem: Tier 2 contract (named spans only).
|
|
41
44
|
*/
|
|
45
|
+
export declare function getTraceContract(deploymentType: DeploymentTypeEnum): SpanDefinition[];
|
|
46
|
+
/** Forbidden in Tier 2 (forbiddenAttributes in contract). Collector strips these entirely. */
|
|
47
|
+
export declare const FORBIDDEN_TIER_2_SPAN_ATTRIBUTES: string[];
|
|
48
|
+
/** Hashed (keyed HMAC) for Tier 2 (hashedAttributes in contract). */
|
|
49
|
+
export declare const HASHED_TIER_2_SPAN_ATTRIBUTES: string[];
|
|
50
|
+
/** Dropped — high cardinality, no hash value (droppedAttributes in contract). */
|
|
51
|
+
export declare const DROPPED_HIGH_CARDINALITY_ATTRIBUTES: string[];
|
|
52
|
+
export declare const TIER2_FORBIDDEN_ATTRIBUTES: Set<string>;
|
|
53
|
+
export declare const TIER2_HASHED_ATTRIBUTES: Set<string>;
|
|
42
54
|
export declare const TIER2_DROPPED_ATTRIBUTES: Set<string>;
|
|
43
55
|
/**
|
|
44
|
-
*
|
|
56
|
+
* Attribute sets and contract options used by TraceSanitizer.
|
|
57
|
+
* Allows different rules per deployment type (e.g. cloud vs cloud-prem).
|
|
45
58
|
*/
|
|
46
|
-
export
|
|
59
|
+
export interface TraceSanitizerAttributeSets {
|
|
60
|
+
forbiddenAttributes: Set<string>;
|
|
61
|
+
droppedAttributes: Set<string>;
|
|
62
|
+
hashedAttributes: Set<string>;
|
|
63
|
+
/** Span definitions for name matching; cloud uses match-all ("*"). */
|
|
64
|
+
spanDefinitions: SpanDefinition[];
|
|
65
|
+
/** When true, span attributes are not filtered by allowedAttributes (pass-through). */
|
|
66
|
+
attributeAllowlistPassthrough: boolean;
|
|
67
|
+
}
|
|
47
68
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* IMPORTANT: Patterns should NOT use ^ and $ anchors so they match
|
|
52
|
-
* secrets embedded anywhere in a string (e.g., in query params, headers).
|
|
69
|
+
* Returns the Tier 2 trace attribute sets and contract options for the given deployment type.
|
|
70
|
+
* Cloud: relaxed policy (no attributes dropped/hashed), match-all span names, pass-through attributes.
|
|
71
|
+
* Cloud-prem: full Tier 2 contract (forbidden/dropped/hashed), named spans only, pass-through attributes.
|
|
53
72
|
*/
|
|
54
|
-
export declare
|
|
73
|
+
export declare function getTraceSanitizerAttributeSets(deploymentType: DeploymentTypeEnum): TraceSanitizerAttributeSets;
|
|
74
|
+
/** Spans that should ALWAYS be sampled (samplingPolicy.alwaysSampleSpans in contract). */
|
|
75
|
+
export declare const ALWAYS_SAMPLE_SPANS: Set<string>;
|
|
55
76
|
/**
|
|
56
|
-
*
|
|
77
|
+
* Patterns that indicate forbidden content in attribute values (e.g. secrets in strings).
|
|
78
|
+
* No ^/$ anchors so they match secrets embedded anywhere.
|
|
79
|
+
* It's not used by TraceSanitizer, only in guardrails.
|
|
57
80
|
*/
|
|
81
|
+
export declare const FORBIDDEN_VALUE_PATTERNS: RegExp[];
|
|
58
82
|
export declare function isForbiddenAttribute(name: string): boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Check if an attribute should be hashed in Tier 2.
|
|
61
|
-
*/
|
|
62
83
|
export declare function isHashedAttribute(name: string): boolean;
|
|
63
|
-
/**
|
|
64
|
-
* Check if an attribute should be dropped in Tier 2.
|
|
65
|
-
*/
|
|
66
84
|
export declare function isDroppedAttribute(name: string): boolean;
|
|
67
|
-
/**
|
|
68
|
-
* Check if a value contains forbidden patterns (like tokens, keys).
|
|
69
|
-
*/
|
|
70
85
|
export declare function containsForbiddenPattern(value: unknown): boolean;
|
|
71
|
-
/**
|
|
72
|
-
* Check if a span should always be sampled.
|
|
73
|
-
*/
|
|
74
86
|
export declare function shouldAlwaysSample(spanName: string): boolean;
|
|
75
87
|
//# sourceMappingURL=tier2-traces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tier2-traces.d.ts","sourceRoot":"","sources":["../../../src/common/contracts/tier2-traces.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tier2-traces.d.ts","sourceRoot":"","sources":["../../../src/common/contracts/tier2-traces.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAM7D,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAE5D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,cAAc,EAkWjD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,cAAc,EAEhD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,kBAAkB,GACjC,cAAc,EAAE,CAQlB;AAMD,8FAA8F;AAC9F,eAAO,MAAM,gCAAgC,EAAE,MAAM,EAmCpD,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,6BAA6B,EAAE,MAAM,EAAO,CAAC;AAE1D,iFAAiF;AACjF,eAAO,MAAM,mCAAmC,EAAE,MAAM,EAAqB,CAAC;AAM9E,eAAO,MAAM,0BAA0B,aAEtC,CAAC;AACF,eAAO,MAAM,uBAAuB,aAAyC,CAAC;AAC9E,eAAO,MAAM,wBAAwB,aAEpC,CAAC;AASF;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,sEAAsE;IACtE,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,uFAAuF;IACvF,6BAA6B,EAAE,OAAO,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,kBAAkB,GACjC,2BAA2B,CAsB7B;AAMD,0FAA0F;AAC1F,eAAO,MAAM,mBAAmB,aAA2B,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,UAQpC,CAAC;AAMF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGhE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5D"}
|