@superblocksteam/telemetry 2.0.118-next.0 → 2.0.118

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.
Files changed (41) hide show
  1. package/dist/common/contracts/tier2-traces.d.ts +4 -4
  2. package/dist/common/contracts/tier2-traces.d.ts.map +1 -1
  3. package/dist/common/contracts/tier2-traces.js +9 -34
  4. package/dist/common/contracts/tier2-traces.js.map +1 -1
  5. package/dist/common/index.d.ts +0 -1
  6. package/dist/common/index.d.ts.map +1 -1
  7. package/dist/common/index.js +0 -1
  8. package/dist/common/index.js.map +1 -1
  9. package/dist/common/log-sanitizer.d.ts +9 -13
  10. package/dist/common/log-sanitizer.d.ts.map +1 -1
  11. package/dist/common/log-sanitizer.js +13 -32
  12. package/dist/common/log-sanitizer.js.map +1 -1
  13. package/dist/node/sanitizing-processor.d.ts +5 -16
  14. package/dist/node/sanitizing-processor.d.ts.map +1 -1
  15. package/dist/node/sanitizing-processor.js +13 -59
  16. package/dist/node/sanitizing-processor.js.map +1 -1
  17. package/dist-esm/common/contracts/tier2-traces.d.ts +4 -4
  18. package/dist-esm/common/contracts/tier2-traces.d.ts.map +1 -1
  19. package/dist-esm/common/contracts/tier2-traces.js +9 -34
  20. package/dist-esm/common/contracts/tier2-traces.js.map +1 -1
  21. package/dist-esm/common/index.d.ts +0 -1
  22. package/dist-esm/common/index.d.ts.map +1 -1
  23. package/dist-esm/common/index.js +0 -1
  24. package/dist-esm/common/index.js.map +1 -1
  25. package/dist-esm/common/log-sanitizer.d.ts +9 -13
  26. package/dist-esm/common/log-sanitizer.d.ts.map +1 -1
  27. package/dist-esm/common/log-sanitizer.js +13 -32
  28. package/dist-esm/common/log-sanitizer.js.map +1 -1
  29. package/dist-esm/node/sanitizing-processor.d.ts +5 -16
  30. package/dist-esm/node/sanitizing-processor.d.ts.map +1 -1
  31. package/dist-esm/node/sanitizing-processor.js +13 -59
  32. package/dist-esm/node/sanitizing-processor.js.map +1 -1
  33. package/package.json +7 -7
  34. package/dist/common/normalize-metric-path.d.ts +0 -9
  35. package/dist/common/normalize-metric-path.d.ts.map +0 -1
  36. package/dist/common/normalize-metric-path.js +0 -29
  37. package/dist/common/normalize-metric-path.js.map +0 -1
  38. package/dist-esm/common/normalize-metric-path.d.ts +0 -9
  39. package/dist-esm/common/normalize-metric-path.d.ts.map +0 -1
  40. package/dist-esm/common/normalize-metric-path.js +0 -26
  41. 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
- /** Tracks in-flight fire-and-forget flushes so shutdown/forceFlush can await them. */
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
- * Awaitable batch flush for drain paths (shutdown, forceFlush).
59
- * Always resolves times out after exportTimeoutMs if the exporter
60
- * never calls its callback (e.g. broken socket, hung downstream).
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 flushExportsAsync;
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,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;AAKD;;;;;;;;;;GAUG;AACH,qBAAa,uBAAwB,YAAW,aAAa;IAiBzD,OAAO,CAAC,QAAQ,CAAC,eAAe;IAhBlC,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;IACjC,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;gBAGnD,eAAe,EAAE,wBAAwB,EACzC,cAAc,EAAE,aAAa,EAC7B,aAAa,EAAE,YAAY,GAAG,IAAI,EAClC,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,yBAAyB,EAChB,eAAe,SAAO;IAoBzC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,GAAG,IAAI;IAIjD,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IA8B/B,sGAAsG;IACtG,OAAO,CAAC,YAAY;IAOpB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAyDnB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAezB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAUlC"}
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
- /** Tracks in-flight fire-and-forget flushes so shutdown/forceFlush can await them. */
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("periodic"), EXPORT_INTERVAL_MS);
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("batch");
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
- * Awaitable batch flush for drain paths (shutdown, forceFlush).
93
- * Always resolves times out after exportTimeoutMs if the exporter
94
- * never calls its callback (e.g. broken socket, hung downstream).
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
- flushExportsAsync(phase) {
83
+ flushExports() {
97
84
  if (!this.tier2Exporter || this.pendingExports.length === 0) {
98
- return Promise.resolve();
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
- return new Promise((resolve) => {
105
- const timer = setTimeout(() => {
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
- await this.flushExportsAsync("shutdown");
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
- await this.flushExportsAsync("forceFlush");
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":"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"}
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.0",
3
+ "version": "2.0.118",
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": "^6.0.3",
76
+ "typescript": "^5.9.3",
80
77
  "typescript-eslint": "^8.47.0",
81
78
  "vitest": "^2.0.0",
82
- "@superblocksteam/shared": "0.9589.0"
79
+ "@superblocksteam/shared": "0.9586.8"
83
80
  },
84
81
  "peerDependencies": {
85
- "@superblocksteam/shared": "0.9589.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"}