@superblocksteam/telemetry 2.0.118-next.0 → 2.0.118-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/common/contracts/tier2-traces.d.ts +4 -4
- package/dist/common/contracts/tier2-traces.d.ts.map +1 -1
- package/dist/common/contracts/tier2-traces.js +9 -34
- package/dist/common/contracts/tier2-traces.js.map +1 -1
- package/dist/common/index.d.ts +0 -1
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +0 -1
- package/dist/common/index.js.map +1 -1
- package/dist/common/log-sanitizer.d.ts +9 -13
- package/dist/common/log-sanitizer.d.ts.map +1 -1
- package/dist/common/log-sanitizer.js +13 -32
- package/dist/common/log-sanitizer.js.map +1 -1
- package/dist/node/sanitizing-processor.d.ts +5 -16
- package/dist/node/sanitizing-processor.d.ts.map +1 -1
- package/dist/node/sanitizing-processor.js +13 -59
- package/dist/node/sanitizing-processor.js.map +1 -1
- package/dist-esm/common/contracts/tier2-traces.d.ts +4 -4
- package/dist-esm/common/contracts/tier2-traces.d.ts.map +1 -1
- package/dist-esm/common/contracts/tier2-traces.js +9 -34
- package/dist-esm/common/contracts/tier2-traces.js.map +1 -1
- package/dist-esm/common/index.d.ts +0 -1
- package/dist-esm/common/index.d.ts.map +1 -1
- package/dist-esm/common/index.js +0 -1
- package/dist-esm/common/index.js.map +1 -1
- package/dist-esm/common/log-sanitizer.d.ts +9 -13
- package/dist-esm/common/log-sanitizer.d.ts.map +1 -1
- package/dist-esm/common/log-sanitizer.js +13 -32
- package/dist-esm/common/log-sanitizer.js.map +1 -1
- package/dist-esm/node/sanitizing-processor.d.ts +5 -16
- package/dist-esm/node/sanitizing-processor.d.ts.map +1 -1
- package/dist-esm/node/sanitizing-processor.js +13 -59
- package/dist-esm/node/sanitizing-processor.js.map +1 -1
- package/package.json +7 -7
- package/dist/common/normalize-metric-path.d.ts +0 -9
- package/dist/common/normalize-metric-path.d.ts.map +0 -1
- package/dist/common/normalize-metric-path.js +0 -29
- package/dist/common/normalize-metric-path.js.map +0 -1
- package/dist-esm/common/normalize-metric-path.d.ts +0 -9
- package/dist-esm/common/normalize-metric-path.d.ts.map +0 -1
- package/dist-esm/common/normalize-metric-path.js +0 -26
- package/dist-esm/common/normalize-metric-path.js.map +0 -1
|
@@ -20,8 +20,6 @@ declare class NoopSpanProcessor implements SpanProcessor {
|
|
|
20
20
|
export declare const noopSpanProcessor: NoopSpanProcessor;
|
|
21
21
|
/** Logger interface for processor messages (e.g. queue full, export failure). */
|
|
22
22
|
interface SanitizingProcessorLogger {
|
|
23
|
-
debug?(obj: object, msg?: string): void;
|
|
24
|
-
debug?(msg: string): void;
|
|
25
23
|
error?(obj: object, msg?: string): void;
|
|
26
24
|
error?(msg: string): void;
|
|
27
25
|
warn(obj: object, msg?: string): void;
|
|
@@ -33,13 +31,8 @@ interface SanitizingProcessorLogger {
|
|
|
33
31
|
* CRITICAL: This processor owns the export path. The exporter is internal.
|
|
34
32
|
* For Tier 1: All spans passed to localProcessor (e.g. no-op or local collector).
|
|
35
33
|
* For Tier 2: Only contract-compliant spans, sanitized, then batched and exported.
|
|
36
|
-
*
|
|
37
|
-
* NOTE: The wrapped tier2Exporter must tolerate concurrent export() calls.
|
|
38
|
-
* The periodic timer and the batch-size trigger can both fire flushExports()
|
|
39
|
-
* in the same tick. OTLPTraceExporter is safe; custom exporters should verify.
|
|
40
34
|
*/
|
|
41
35
|
export declare class SanitizingSpanProcessor implements SpanProcessor {
|
|
42
|
-
private readonly exportTimeoutMs;
|
|
43
36
|
private readonly sanitizer;
|
|
44
37
|
private readonly localProcessor;
|
|
45
38
|
private readonly tier2Exporter;
|
|
@@ -47,19 +40,15 @@ export declare class SanitizingSpanProcessor implements SpanProcessor {
|
|
|
47
40
|
private pendingExports;
|
|
48
41
|
private exportTimer;
|
|
49
42
|
private droppedQueueFull;
|
|
50
|
-
|
|
51
|
-
private readonly inflight;
|
|
52
|
-
constructor(policyEvaluator: TelemetryPolicyEvaluator, localProcessor: SpanProcessor, tier2Exporter: SpanExporter | null, traceSanitizer: TraceSanitizer, logger: SanitizingProcessorLogger, exportTimeoutMs?: number);
|
|
43
|
+
constructor(policyEvaluator: TelemetryPolicyEvaluator, localProcessor: SpanProcessor, tier2Exporter: SpanExporter | null, traceSanitizer: TraceSanitizer, logger: SanitizingProcessorLogger);
|
|
53
44
|
onStart(span: Span, parentContext: Context): void;
|
|
54
45
|
onEnd(span: ReadableSpan): void;
|
|
55
|
-
/** Fire-and-forget batch flush — tracks the in-flight promise so shutdown/forceFlush can await it. */
|
|
56
|
-
private flushExports;
|
|
57
46
|
/**
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
47
|
+
* Sends at most one batch (up to BATCH_SIZE) to the tier-2 exporter.
|
|
48
|
+
* Does not wait for the export callback. Call in a loop when a full drain
|
|
49
|
+
* is required (e.g. shutdown, forceFlush).
|
|
61
50
|
*/
|
|
62
|
-
private
|
|
51
|
+
private flushExports;
|
|
63
52
|
shutdown(): Promise<void>;
|
|
64
53
|
forceFlush(): Promise<void>;
|
|
65
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizing-processor.d.ts","sourceRoot":"","sources":["../../src/node/sanitizing-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,aAAa,EACd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAO9D,iFAAiF;AACjF,cAAM,iBAAkB,YAAW,aAAa;IAC9C,OAAO,IAAI,IAAI;IACf,KAAK,IAAI,IAAI;IACP,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC;AAGzD,iFAAiF;AACjF,UAAU,yBAAyB;IACjC,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,
|
|
1
|
+
{"version":3,"file":"sanitizing-processor.d.ts","sourceRoot":"","sources":["../../src/node/sanitizing-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,aAAa,EACd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAO9D,iFAAiF;AACjF,cAAM,iBAAkB,YAAW,aAAa;IAC9C,OAAO,IAAI,IAAI;IACf,KAAK,IAAI,IAAI;IACP,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC;AAGzD,iFAAiF;AACjF,UAAU,yBAAyB;IACjC,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;GAMG;AACH,qBAAa,uBAAwB,YAAW,aAAa;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiB;IAC3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,gBAAgB,CAAS;gBAG/B,eAAe,EAAE,wBAAwB,EACzC,cAAc,EAAE,aAAa,EAC7B,aAAa,EAAE,YAAY,GAAG,IAAI,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,yBAAyB;IAoBnC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAIjD,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IA8B/B;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAkBd,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAczB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CASlC"}
|
|
@@ -26,13 +26,8 @@ const EXPORT_INTERVAL_MS = 5000;
|
|
|
26
26
|
* CRITICAL: This processor owns the export path. The exporter is internal.
|
|
27
27
|
* For Tier 1: All spans passed to localProcessor (e.g. no-op or local collector).
|
|
28
28
|
* For Tier 2: Only contract-compliant spans, sanitized, then batched and exported.
|
|
29
|
-
*
|
|
30
|
-
* NOTE: The wrapped tier2Exporter must tolerate concurrent export() calls.
|
|
31
|
-
* The periodic timer and the batch-size trigger can both fire flushExports()
|
|
32
|
-
* in the same tick. OTLPTraceExporter is safe; custom exporters should verify.
|
|
33
29
|
*/
|
|
34
30
|
export class SanitizingSpanProcessor {
|
|
35
|
-
exportTimeoutMs;
|
|
36
31
|
sanitizer;
|
|
37
32
|
localProcessor;
|
|
38
33
|
tier2Exporter;
|
|
@@ -40,10 +35,7 @@ export class SanitizingSpanProcessor {
|
|
|
40
35
|
pendingExports = [];
|
|
41
36
|
exportTimer = null;
|
|
42
37
|
droppedQueueFull = false;
|
|
43
|
-
|
|
44
|
-
inflight = new Set();
|
|
45
|
-
constructor(policyEvaluator, localProcessor, tier2Exporter, traceSanitizer, logger, exportTimeoutMs = 5000) {
|
|
46
|
-
this.exportTimeoutMs = exportTimeoutMs;
|
|
38
|
+
constructor(policyEvaluator, localProcessor, tier2Exporter, traceSanitizer, logger) {
|
|
47
39
|
this.sanitizer = traceSanitizer;
|
|
48
40
|
this.localProcessor = localProcessor;
|
|
49
41
|
this.logger = logger;
|
|
@@ -51,7 +43,7 @@ export class SanitizingSpanProcessor {
|
|
|
51
43
|
? tier2Exporter
|
|
52
44
|
: null;
|
|
53
45
|
if (this.tier2Exporter) {
|
|
54
|
-
this.exportTimer = setInterval(() => this.flushExports(
|
|
46
|
+
this.exportTimer = setInterval(() => this.flushExports(), EXPORT_INTERVAL_MS);
|
|
55
47
|
this.exportTimer.unref();
|
|
56
48
|
}
|
|
57
49
|
}
|
|
@@ -77,64 +69,28 @@ export class SanitizingSpanProcessor {
|
|
|
77
69
|
else {
|
|
78
70
|
this.pendingExports.push(sanitized);
|
|
79
71
|
if (this.pendingExports.length >= BATCH_SIZE) {
|
|
80
|
-
this.flushExports(
|
|
72
|
+
this.flushExports();
|
|
81
73
|
}
|
|
82
74
|
}
|
|
83
75
|
}
|
|
84
76
|
}
|
|
85
77
|
}
|
|
86
|
-
/** Fire-and-forget batch flush — tracks the in-flight promise so shutdown/forceFlush can await it. */
|
|
87
|
-
flushExports(phase) {
|
|
88
|
-
const p = this.flushExportsAsync(phase).finally(() => this.inflight.delete(p));
|
|
89
|
-
this.inflight.add(p);
|
|
90
|
-
}
|
|
91
78
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
79
|
+
* Sends at most one batch (up to BATCH_SIZE) to the tier-2 exporter.
|
|
80
|
+
* Does not wait for the export callback. Call in a loop when a full drain
|
|
81
|
+
* is required (e.g. shutdown, forceFlush).
|
|
95
82
|
*/
|
|
96
|
-
|
|
83
|
+
flushExports() {
|
|
97
84
|
if (!this.tier2Exporter || this.pendingExports.length === 0) {
|
|
98
|
-
return
|
|
85
|
+
return;
|
|
99
86
|
}
|
|
100
87
|
if (this.pendingExports.length < MAX_PENDING_EXPORTS) {
|
|
101
88
|
this.droppedQueueFull = false;
|
|
102
89
|
}
|
|
103
90
|
const batch = this.pendingExports.splice(0, BATCH_SIZE);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
this.logger.warn({
|
|
107
|
-
component: "SanitizingSpanProcessor",
|
|
108
|
-
batchSize: batch.length,
|
|
109
|
-
exportTimeoutMs: this.exportTimeoutMs,
|
|
110
|
-
phase,
|
|
111
|
-
}, "Tier 2 span export timed out");
|
|
112
|
-
resolve();
|
|
113
|
-
}, this.exportTimeoutMs).unref();
|
|
114
|
-
try {
|
|
115
|
-
this.tier2Exporter.export(batch, (result) => {
|
|
116
|
-
clearTimeout(timer);
|
|
117
|
-
if (result.code !== ExportResultCode.SUCCESS) {
|
|
118
|
-
this.logger.warn({
|
|
119
|
-
component: "SanitizingSpanProcessor",
|
|
120
|
-
err: result.error,
|
|
121
|
-
batchSize: batch.length,
|
|
122
|
-
}, "Tier 2 span export failed");
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
this.logger.debug?.({ component: "SanitizingSpanProcessor", batchSize: batch.length }, "Tier 2 span export succeeded");
|
|
126
|
-
}
|
|
127
|
-
resolve();
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
clearTimeout(timer);
|
|
132
|
-
this.logger.warn({
|
|
133
|
-
component: "SanitizingSpanProcessor",
|
|
134
|
-
err,
|
|
135
|
-
batchSize: batch.length,
|
|
136
|
-
}, "Tier 2 span export threw synchronously");
|
|
137
|
-
resolve();
|
|
91
|
+
this.tier2Exporter.export(batch, (result) => {
|
|
92
|
+
if (result.code !== ExportResultCode.SUCCESS) {
|
|
93
|
+
this.logger.warn({ component: "SanitizingSpanProcessor", err: result.error }, "Tier 2 span export failed");
|
|
138
94
|
}
|
|
139
95
|
});
|
|
140
96
|
}
|
|
@@ -144,9 +100,8 @@ export class SanitizingSpanProcessor {
|
|
|
144
100
|
this.exportTimer = null;
|
|
145
101
|
}
|
|
146
102
|
while (this.pendingExports.length > 0) {
|
|
147
|
-
|
|
103
|
+
this.flushExports();
|
|
148
104
|
}
|
|
149
|
-
await Promise.allSettled([...this.inflight]);
|
|
150
105
|
await this.localProcessor.shutdown();
|
|
151
106
|
if (this.tier2Exporter) {
|
|
152
107
|
await this.tier2Exporter.shutdown();
|
|
@@ -154,9 +109,8 @@ export class SanitizingSpanProcessor {
|
|
|
154
109
|
}
|
|
155
110
|
async forceFlush() {
|
|
156
111
|
while (this.pendingExports.length > 0) {
|
|
157
|
-
|
|
112
|
+
this.flushExports();
|
|
158
113
|
}
|
|
159
|
-
await Promise.allSettled([...this.inflight]);
|
|
160
114
|
await this.localProcessor.forceFlush();
|
|
161
115
|
if (this.tier2Exporter?.forceFlush) {
|
|
162
116
|
await this.tier2Exporter.forceFlush();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sanitizing-processor.js","sourceRoot":"","sources":["../../src/node/sanitizing-processor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAUvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,2GAA2G;AAC3G,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,iFAAiF;AACjF,MAAM,iBAAiB;IACrB,OAAO,KAAU,CAAC;IAClB,KAAK,KAAU,CAAC;IAChB,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAClC,KAAK,CAAC,UAAU,KAAmB,CAAC;CACrC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AACzD,MAAM,kBAAkB,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"sanitizing-processor.js","sourceRoot":"","sources":["../../src/node/sanitizing-processor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@superblocksteam/telemetry",
|
|
3
|
-
"version": "2.0.118-next.
|
|
3
|
+
"version": "2.0.118-next.1",
|
|
4
4
|
"description": "Superblocks Telemetry - Canonical OTEL bootstrap with tier-aware policy enforcement",
|
|
5
5
|
"license": "Superblocks Community Software License",
|
|
6
6
|
"repository": {
|
|
@@ -43,9 +43,6 @@
|
|
|
43
43
|
"require": "./dist/lint/index.js"
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
|
-
"publishConfig": {
|
|
47
|
-
"registry": "https://registry.npmjs.org"
|
|
48
|
-
},
|
|
49
46
|
"dependencies": {
|
|
50
47
|
"@opentelemetry/api": "^1.9.1",
|
|
51
48
|
"@opentelemetry/api-logs": "^0.214.0",
|
|
@@ -76,17 +73,20 @@
|
|
|
76
73
|
"globals": "^16.5.0",
|
|
77
74
|
"pino": "^8.0.0",
|
|
78
75
|
"premove": "^4.0.0",
|
|
79
|
-
"typescript": "^
|
|
76
|
+
"typescript": "^5.9.3",
|
|
80
77
|
"typescript-eslint": "^8.47.0",
|
|
81
78
|
"vitest": "^2.0.0",
|
|
82
|
-
"@superblocksteam/shared": "0.
|
|
79
|
+
"@superblocksteam/shared": "0.9586.8"
|
|
83
80
|
},
|
|
84
81
|
"peerDependencies": {
|
|
85
|
-
"@superblocksteam/shared": "0.
|
|
82
|
+
"@superblocksteam/shared": "0.9586.8"
|
|
86
83
|
},
|
|
87
84
|
"engines": {
|
|
88
85
|
"node": ">=24"
|
|
89
86
|
},
|
|
87
|
+
"publishConfig": {
|
|
88
|
+
"registry": "https://registry.npmjs.org"
|
|
89
|
+
},
|
|
90
90
|
"scripts": {
|
|
91
91
|
"build": "tsc --build && tsc --build tsconfig.browser.json",
|
|
92
92
|
"check": "npm run typecheck && npm run lint",
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Replaces known high-cardinality URL path segments with `#val` to prevent
|
|
3
|
-
* metric label cardinality explosion from customer-controlled identifiers.
|
|
4
|
-
*
|
|
5
|
-
* Example: `/api/v2/applications/#val/branches/feature-foo/commits`
|
|
6
|
-
* -> `/api/v2/applications/#val/branches/#val/commits`
|
|
7
|
-
*/
|
|
8
|
-
export declare function normalizeMetricPath(path: string): string;
|
|
9
|
-
//# sourceMappingURL=normalize-metric-path.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-metric-path.d.ts","sourceRoot":"","sources":["../../src/common/normalize-metric-path.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUxD"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.normalizeMetricPath = normalizeMetricPath;
|
|
4
|
-
const BRANCH_SEGMENT_PATTERN = /\/branches\/[^/]+/g;
|
|
5
|
-
const NORMALIZED_VALUE_SEGMENT_PATTERN = "(?:#val|_val)";
|
|
6
|
-
const APPLICATION_BUILD_DIRECTORY_HASH_PATTERN = new RegExp(`(\\/applications\\/${NORMALIZED_VALUE_SEGMENT_PATTERN})\\/[A-Za-z0-9._~%+=-]{16,}(\\/builds)(?=\\/|$)`, "g");
|
|
7
|
-
const API_BRANCH_FILE_PATH_PATTERN = new RegExp(`(\\/api\\/v3\\/apis\\/applications\\/${NORMALIZED_VALUE_SEGMENT_PATTERN}\\/branches\\/[^/]+)\\/.+$`);
|
|
8
|
-
const API_COMMIT_FILE_PATH_PATTERN = new RegExp(`(\\/api\\/v3\\/apis\\/applications\\/${NORMALIZED_VALUE_SEGMENT_PATTERN}\\/commits\\/${NORMALIZED_VALUE_SEGMENT_PATTERN})\\/.+$`);
|
|
9
|
-
const UNKNOWN_WELL_KNOWN_PATH_PATTERN = /^\/\.well-known\/(?!jwks\.json\/?$).+/;
|
|
10
|
-
const SCANNER_PROBE_PATH_PATTERN = /^\/(?:[^/]+\.php|\.env(?:[./].*)?|\.git(?:\/.*)?|wp-admin(?:\/.*)?)(?=\/|$)/i;
|
|
11
|
-
/**
|
|
12
|
-
* Replaces known high-cardinality URL path segments with `#val` to prevent
|
|
13
|
-
* metric label cardinality explosion from customer-controlled identifiers.
|
|
14
|
-
*
|
|
15
|
-
* Example: `/api/v2/applications/#val/branches/feature-foo/commits`
|
|
16
|
-
* -> `/api/v2/applications/#val/branches/#val/commits`
|
|
17
|
-
*/
|
|
18
|
-
function normalizeMetricPath(path) {
|
|
19
|
-
// API file-path patterns intentionally accept both raw and already-normalized
|
|
20
|
-
// branch segments; the final branch normalization keeps the output canonical.
|
|
21
|
-
return path
|
|
22
|
-
.replace(APPLICATION_BUILD_DIRECTORY_HASH_PATTERN, "$1/#val$2")
|
|
23
|
-
.replace(API_BRANCH_FILE_PATH_PATTERN, "$1/#val")
|
|
24
|
-
.replace(API_COMMIT_FILE_PATH_PATTERN, "$1/#val")
|
|
25
|
-
.replace(UNKNOWN_WELL_KNOWN_PATH_PATTERN, "/.well-known/#val")
|
|
26
|
-
.replace(SCANNER_PROBE_PATH_PATTERN, "/#val")
|
|
27
|
-
.replace(BRANCH_SEGMENT_PATTERN, "/branches/#val");
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=normalize-metric-path.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-metric-path.js","sourceRoot":"","sources":["../../src/common/normalize-metric-path.ts"],"names":[],"mappings":";;AAuBA,kDAUC;AAjCD,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AACpD,MAAM,gCAAgC,GAAG,eAAe,CAAC;AACzD,MAAM,wCAAwC,GAAG,IAAI,MAAM,CACzD,sBAAsB,gCAAgC,iDAAiD,EACvG,GAAG,CACJ,CAAC;AACF,MAAM,4BAA4B,GAAG,IAAI,MAAM,CAC7C,wCAAwC,gCAAgC,4BAA4B,CACrG,CAAC;AACF,MAAM,4BAA4B,GAAG,IAAI,MAAM,CAC7C,wCAAwC,gCAAgC,gBAAgB,gCAAgC,SAAS,CAClI,CAAC;AACF,MAAM,+BAA+B,GAAG,uCAAuC,CAAC;AAChF,MAAM,0BAA0B,GAC9B,8EAA8E,CAAC;AAEjF;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,8EAA8E;IAC9E,8EAA8E;IAC9E,OAAO,IAAI;SACR,OAAO,CAAC,wCAAwC,EAAE,WAAW,CAAC;SAC9D,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC;SAChD,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC;SAChD,OAAO,CAAC,+BAA+B,EAAE,mBAAmB,CAAC;SAC7D,OAAO,CAAC,0BAA0B,EAAE,OAAO,CAAC;SAC5C,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Replaces known high-cardinality URL path segments with `#val` to prevent
|
|
3
|
-
* metric label cardinality explosion from customer-controlled identifiers.
|
|
4
|
-
*
|
|
5
|
-
* Example: `/api/v2/applications/#val/branches/feature-foo/commits`
|
|
6
|
-
* -> `/api/v2/applications/#val/branches/#val/commits`
|
|
7
|
-
*/
|
|
8
|
-
export declare function normalizeMetricPath(path: string): string;
|
|
9
|
-
//# sourceMappingURL=normalize-metric-path.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-metric-path.d.ts","sourceRoot":"","sources":["../../src/common/normalize-metric-path.ts"],"names":[],"mappings":"AAgBA;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUxD"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
const BRANCH_SEGMENT_PATTERN = /\/branches\/[^/]+/g;
|
|
2
|
-
const NORMALIZED_VALUE_SEGMENT_PATTERN = "(?:#val|_val)";
|
|
3
|
-
const APPLICATION_BUILD_DIRECTORY_HASH_PATTERN = new RegExp(`(\\/applications\\/${NORMALIZED_VALUE_SEGMENT_PATTERN})\\/[A-Za-z0-9._~%+=-]{16,}(\\/builds)(?=\\/|$)`, "g");
|
|
4
|
-
const API_BRANCH_FILE_PATH_PATTERN = new RegExp(`(\\/api\\/v3\\/apis\\/applications\\/${NORMALIZED_VALUE_SEGMENT_PATTERN}\\/branches\\/[^/]+)\\/.+$`);
|
|
5
|
-
const API_COMMIT_FILE_PATH_PATTERN = new RegExp(`(\\/api\\/v3\\/apis\\/applications\\/${NORMALIZED_VALUE_SEGMENT_PATTERN}\\/commits\\/${NORMALIZED_VALUE_SEGMENT_PATTERN})\\/.+$`);
|
|
6
|
-
const UNKNOWN_WELL_KNOWN_PATH_PATTERN = /^\/\.well-known\/(?!jwks\.json\/?$).+/;
|
|
7
|
-
const SCANNER_PROBE_PATH_PATTERN = /^\/(?:[^/]+\.php|\.env(?:[./].*)?|\.git(?:\/.*)?|wp-admin(?:\/.*)?)(?=\/|$)/i;
|
|
8
|
-
/**
|
|
9
|
-
* Replaces known high-cardinality URL path segments with `#val` to prevent
|
|
10
|
-
* metric label cardinality explosion from customer-controlled identifiers.
|
|
11
|
-
*
|
|
12
|
-
* Example: `/api/v2/applications/#val/branches/feature-foo/commits`
|
|
13
|
-
* -> `/api/v2/applications/#val/branches/#val/commits`
|
|
14
|
-
*/
|
|
15
|
-
export function normalizeMetricPath(path) {
|
|
16
|
-
// API file-path patterns intentionally accept both raw and already-normalized
|
|
17
|
-
// branch segments; the final branch normalization keeps the output canonical.
|
|
18
|
-
return path
|
|
19
|
-
.replace(APPLICATION_BUILD_DIRECTORY_HASH_PATTERN, "$1/#val$2")
|
|
20
|
-
.replace(API_BRANCH_FILE_PATH_PATTERN, "$1/#val")
|
|
21
|
-
.replace(API_COMMIT_FILE_PATH_PATTERN, "$1/#val")
|
|
22
|
-
.replace(UNKNOWN_WELL_KNOWN_PATH_PATTERN, "/.well-known/#val")
|
|
23
|
-
.replace(SCANNER_PROBE_PATH_PATTERN, "/#val")
|
|
24
|
-
.replace(BRANCH_SEGMENT_PATTERN, "/branches/#val");
|
|
25
|
-
}
|
|
26
|
-
//# sourceMappingURL=normalize-metric-path.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"normalize-metric-path.js","sourceRoot":"","sources":["../../src/common/normalize-metric-path.ts"],"names":[],"mappings":"AAAA,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AACpD,MAAM,gCAAgC,GAAG,eAAe,CAAC;AACzD,MAAM,wCAAwC,GAAG,IAAI,MAAM,CACzD,sBAAsB,gCAAgC,iDAAiD,EACvG,GAAG,CACJ,CAAC;AACF,MAAM,4BAA4B,GAAG,IAAI,MAAM,CAC7C,wCAAwC,gCAAgC,4BAA4B,CACrG,CAAC;AACF,MAAM,4BAA4B,GAAG,IAAI,MAAM,CAC7C,wCAAwC,gCAAgC,gBAAgB,gCAAgC,SAAS,CAClI,CAAC;AACF,MAAM,+BAA+B,GAAG,uCAAuC,CAAC;AAChF,MAAM,0BAA0B,GAC9B,8EAA8E,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,8EAA8E;IAC9E,8EAA8E;IAC9E,OAAO,IAAI;SACR,OAAO,CAAC,wCAAwC,EAAE,WAAW,CAAC;SAC9D,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC;SAChD,OAAO,CAAC,4BAA4B,EAAE,SAAS,CAAC;SAChD,OAAO,CAAC,+BAA+B,EAAE,mBAAmB,CAAC;SAC7D,OAAO,CAAC,0BAA0B,EAAE,OAAO,CAAC;SAC5C,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;AACvD,CAAC"}
|