@scoutflo/topology-contracts 0.7.15 → 0.7.17

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.
@@ -50,23 +50,47 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
50
50
  sourcePath: z.ZodString;
51
51
  confidence: z.ZodNumber;
52
52
  kind: z.ZodEnum<["label", "tag", "annotation", "provider_identity", "resource_hint", "text_derived", "time", "rule", "query", "trace", "metric", "log"]>;
53
+ rawValue: z.ZodOptional<z.ZodUnknown>;
54
+ normalizedValue: z.ZodOptional<z.ZodString>;
55
+ namespace: z.ZodOptional<z.ZodString>;
56
+ provider: z.ZodOptional<z.ZodString>;
57
+ observedAt: z.ZodOptional<z.ZodString>;
58
+ schemaVersion: z.ZodOptional<z.ZodString>;
53
59
  }, "strip", z.ZodTypeAny, {
54
60
  value: string;
55
61
  key: string;
56
62
  sourcePath: string;
57
63
  confidence: number;
58
64
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
65
+ rawValue?: unknown;
66
+ normalizedValue?: string | undefined;
67
+ namespace?: string | undefined;
68
+ provider?: string | undefined;
69
+ observedAt?: string | undefined;
70
+ schemaVersion?: string | undefined;
59
71
  }, {
60
72
  value: string;
61
73
  key: string;
62
74
  sourcePath: string;
63
75
  confidence: number;
64
76
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
77
+ rawValue?: unknown;
78
+ normalizedValue?: string | undefined;
79
+ namespace?: string | undefined;
80
+ provider?: string | undefined;
81
+ observedAt?: string | undefined;
82
+ schemaVersion?: string | undefined;
65
83
  }>, "many">>;
84
+ provider: z.ZodOptional<z.ZodString>;
85
+ observedAt: z.ZodOptional<z.ZodString>;
86
+ occurredAt: z.ZodOptional<z.ZodString>;
87
+ capturedAt: z.ZodOptional<z.ZodString>;
66
88
  }, "strip", z.ZodTypeAny, {
67
89
  type: string;
68
90
  ref: string;
69
91
  sourcePath?: string | undefined;
92
+ provider?: string | undefined;
93
+ observedAt?: string | undefined;
70
94
  summary?: string | undefined;
71
95
  facts?: {
72
96
  value: string;
@@ -74,11 +98,21 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
74
98
  sourcePath: string;
75
99
  confidence: number;
76
100
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
101
+ rawValue?: unknown;
102
+ normalizedValue?: string | undefined;
103
+ namespace?: string | undefined;
104
+ provider?: string | undefined;
105
+ observedAt?: string | undefined;
106
+ schemaVersion?: string | undefined;
77
107
  }[] | undefined;
108
+ occurredAt?: string | undefined;
109
+ capturedAt?: string | undefined;
78
110
  }, {
79
111
  type: string;
80
112
  ref: string;
81
113
  sourcePath?: string | undefined;
114
+ provider?: string | undefined;
115
+ observedAt?: string | undefined;
82
116
  summary?: string | undefined;
83
117
  facts?: {
84
118
  value: string;
@@ -86,7 +120,15 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
86
120
  sourcePath: string;
87
121
  confidence: number;
88
122
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
123
+ rawValue?: unknown;
124
+ normalizedValue?: string | undefined;
125
+ namespace?: string | undefined;
126
+ provider?: string | undefined;
127
+ observedAt?: string | undefined;
128
+ schemaVersion?: string | undefined;
89
129
  }[] | undefined;
130
+ occurredAt?: string | undefined;
131
+ capturedAt?: string | undefined;
90
132
  }>, "many">;
91
133
  decision: z.ZodEnum<["ready", "warning_only", "ambiguous", "blocked", "degraded", "unresolved"]>;
92
134
  diagnostics: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -154,23 +196,47 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
154
196
  sourcePath: z.ZodString;
155
197
  confidence: z.ZodNumber;
156
198
  kind: z.ZodEnum<["label", "tag", "annotation", "provider_identity", "resource_hint", "text_derived", "time", "rule", "query", "trace", "metric", "log"]>;
199
+ rawValue: z.ZodOptional<z.ZodUnknown>;
200
+ normalizedValue: z.ZodOptional<z.ZodString>;
201
+ namespace: z.ZodOptional<z.ZodString>;
202
+ provider: z.ZodOptional<z.ZodString>;
203
+ observedAt: z.ZodOptional<z.ZodString>;
204
+ schemaVersion: z.ZodOptional<z.ZodString>;
157
205
  }, "strip", z.ZodTypeAny, {
158
206
  value: string;
159
207
  key: string;
160
208
  sourcePath: string;
161
209
  confidence: number;
162
210
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
211
+ rawValue?: unknown;
212
+ normalizedValue?: string | undefined;
213
+ namespace?: string | undefined;
214
+ provider?: string | undefined;
215
+ observedAt?: string | undefined;
216
+ schemaVersion?: string | undefined;
163
217
  }, {
164
218
  value: string;
165
219
  key: string;
166
220
  sourcePath: string;
167
221
  confidence: number;
168
222
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
223
+ rawValue?: unknown;
224
+ normalizedValue?: string | undefined;
225
+ namespace?: string | undefined;
226
+ provider?: string | undefined;
227
+ observedAt?: string | undefined;
228
+ schemaVersion?: string | undefined;
169
229
  }>, "many">>;
230
+ provider: z.ZodOptional<z.ZodString>;
231
+ observedAt: z.ZodOptional<z.ZodString>;
232
+ occurredAt: z.ZodOptional<z.ZodString>;
233
+ capturedAt: z.ZodOptional<z.ZodString>;
170
234
  }, "strip", z.ZodTypeAny, {
171
235
  type: string;
172
236
  ref: string;
173
237
  sourcePath?: string | undefined;
238
+ provider?: string | undefined;
239
+ observedAt?: string | undefined;
174
240
  summary?: string | undefined;
175
241
  facts?: {
176
242
  value: string;
@@ -178,11 +244,21 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
178
244
  sourcePath: string;
179
245
  confidence: number;
180
246
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
247
+ rawValue?: unknown;
248
+ normalizedValue?: string | undefined;
249
+ namespace?: string | undefined;
250
+ provider?: string | undefined;
251
+ observedAt?: string | undefined;
252
+ schemaVersion?: string | undefined;
181
253
  }[] | undefined;
254
+ occurredAt?: string | undefined;
255
+ capturedAt?: string | undefined;
182
256
  }, {
183
257
  type: string;
184
258
  ref: string;
185
259
  sourcePath?: string | undefined;
260
+ provider?: string | undefined;
261
+ observedAt?: string | undefined;
186
262
  summary?: string | undefined;
187
263
  facts?: {
188
264
  value: string;
@@ -190,7 +266,15 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
190
266
  sourcePath: string;
191
267
  confidence: number;
192
268
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
269
+ rawValue?: unknown;
270
+ normalizedValue?: string | undefined;
271
+ namespace?: string | undefined;
272
+ provider?: string | undefined;
273
+ observedAt?: string | undefined;
274
+ schemaVersion?: string | undefined;
193
275
  }[] | undefined;
276
+ occurredAt?: string | undefined;
277
+ capturedAt?: string | undefined;
194
278
  }>, "many">;
195
279
  decision: z.ZodEnum<["ready", "warning_only", "ambiguous", "blocked", "degraded", "unresolved"]>;
196
280
  diagnostics: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -258,23 +342,47 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
258
342
  sourcePath: z.ZodString;
259
343
  confidence: z.ZodNumber;
260
344
  kind: z.ZodEnum<["label", "tag", "annotation", "provider_identity", "resource_hint", "text_derived", "time", "rule", "query", "trace", "metric", "log"]>;
345
+ rawValue: z.ZodOptional<z.ZodUnknown>;
346
+ normalizedValue: z.ZodOptional<z.ZodString>;
347
+ namespace: z.ZodOptional<z.ZodString>;
348
+ provider: z.ZodOptional<z.ZodString>;
349
+ observedAt: z.ZodOptional<z.ZodString>;
350
+ schemaVersion: z.ZodOptional<z.ZodString>;
261
351
  }, "strip", z.ZodTypeAny, {
262
352
  value: string;
263
353
  key: string;
264
354
  sourcePath: string;
265
355
  confidence: number;
266
356
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
357
+ rawValue?: unknown;
358
+ normalizedValue?: string | undefined;
359
+ namespace?: string | undefined;
360
+ provider?: string | undefined;
361
+ observedAt?: string | undefined;
362
+ schemaVersion?: string | undefined;
267
363
  }, {
268
364
  value: string;
269
365
  key: string;
270
366
  sourcePath: string;
271
367
  confidence: number;
272
368
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
369
+ rawValue?: unknown;
370
+ normalizedValue?: string | undefined;
371
+ namespace?: string | undefined;
372
+ provider?: string | undefined;
373
+ observedAt?: string | undefined;
374
+ schemaVersion?: string | undefined;
273
375
  }>, "many">>;
376
+ provider: z.ZodOptional<z.ZodString>;
377
+ observedAt: z.ZodOptional<z.ZodString>;
378
+ occurredAt: z.ZodOptional<z.ZodString>;
379
+ capturedAt: z.ZodOptional<z.ZodString>;
274
380
  }, "strip", z.ZodTypeAny, {
275
381
  type: string;
276
382
  ref: string;
277
383
  sourcePath?: string | undefined;
384
+ provider?: string | undefined;
385
+ observedAt?: string | undefined;
278
386
  summary?: string | undefined;
279
387
  facts?: {
280
388
  value: string;
@@ -282,11 +390,21 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
282
390
  sourcePath: string;
283
391
  confidence: number;
284
392
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
393
+ rawValue?: unknown;
394
+ normalizedValue?: string | undefined;
395
+ namespace?: string | undefined;
396
+ provider?: string | undefined;
397
+ observedAt?: string | undefined;
398
+ schemaVersion?: string | undefined;
285
399
  }[] | undefined;
400
+ occurredAt?: string | undefined;
401
+ capturedAt?: string | undefined;
286
402
  }, {
287
403
  type: string;
288
404
  ref: string;
289
405
  sourcePath?: string | undefined;
406
+ provider?: string | undefined;
407
+ observedAt?: string | undefined;
290
408
  summary?: string | undefined;
291
409
  facts?: {
292
410
  value: string;
@@ -294,7 +412,15 @@ export declare const topologyCorrelationCandidateSchema: z.ZodObject<{
294
412
  sourcePath: string;
295
413
  confidence: number;
296
414
  kind: "label" | "tag" | "annotation" | "provider_identity" | "resource_hint" | "text_derived" | "time" | "rule" | "query" | "trace" | "metric" | "log";
415
+ rawValue?: unknown;
416
+ normalizedValue?: string | undefined;
417
+ namespace?: string | undefined;
418
+ provider?: string | undefined;
419
+ observedAt?: string | undefined;
420
+ schemaVersion?: string | undefined;
297
421
  }[] | undefined;
422
+ occurredAt?: string | undefined;
423
+ capturedAt?: string | undefined;
298
424
  }>, "many">;
299
425
  decision: z.ZodEnum<["ready", "warning_only", "ambiguous", "blocked", "degraded", "unresolved"]>;
300
426
  diagnostics: z.ZodOptional<z.ZodArray<z.ZodObject<{
@@ -0,0 +1,14 @@
1
+ import { type SupportedCorrelationSignalCategory } from './connectionContractV1';
2
+ export type CorrelationClaimLayer = 'identity' | 'scope' | 'diagnostic';
3
+ export type CorrelationIdentityScope = 'universal' | 'contract_scoped';
4
+ export type DiagnosticCorrelationClaimCategory = 'release' | 'version' | 'deployment_revision' | 'commit_sha';
5
+ export type CorrelationClaimCategory = SupportedCorrelationSignalCategory | DiagnosticCorrelationClaimCategory;
6
+ export interface CorrelationClaimProjection {
7
+ category: CorrelationClaimCategory;
8
+ layer: CorrelationClaimLayer;
9
+ scoring: boolean;
10
+ identity_scope?: CorrelationIdentityScope;
11
+ }
12
+ export declare function claimProjectionForPath(path: string[]): CorrelationClaimProjection | undefined;
13
+ export declare function scoringCorrelationCategoryForPath(path: string[]): SupportedCorrelationSignalCategory | undefined;
14
+ export declare function scoringCorrelationCategoriesForKey(key: string): SupportedCorrelationSignalCategory[];
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.claimProjectionForPath = claimProjectionForPath;
4
+ exports.scoringCorrelationCategoryForPath = scoringCorrelationCategoryForPath;
5
+ exports.scoringCorrelationCategoriesForKey = scoringCorrelationCategoriesForKey;
6
+ const connectionContractV1_1 = require("./connectionContractV1");
7
+ const SCORING_CATEGORY_SET = new Set(connectionContractV1_1.SUPPORTED_CORRELATION_SIGNAL_CATEGORIES);
8
+ const UNIVERSAL_IDENTITY_CATEGORIES = new Set([
9
+ 'service',
10
+ 'namespace',
11
+ 'workload',
12
+ 'cluster',
13
+ 'pod',
14
+ 'container',
15
+ 'app',
16
+ ]);
17
+ const CONTRACT_SCOPED_IDENTITY_CATEGORIES = new Set(['project', 'repository', 'space']);
18
+ const SCOPE_CATEGORIES = new Set(['environment', 'team']);
19
+ function normalizePathToken(value) {
20
+ return value
21
+ .trim()
22
+ .replace(/\[(\w+)\]/g, '.$1')
23
+ .replace(/^labels[._:-]/i, 'labels.')
24
+ .replace(/^tags[._:-]/i, 'tags.')
25
+ .toLowerCase();
26
+ }
27
+ function normalizedPath(path) {
28
+ return path.map(normalizePathToken).join('.');
29
+ }
30
+ function compactPath(value) {
31
+ return value.replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '');
32
+ }
33
+ function normalizedKey(key) {
34
+ return key
35
+ .trim()
36
+ .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
37
+ .replace(/\[(\w+)\]/g, '.$1')
38
+ .replace(/^\$+/, '')
39
+ .replace(/^labels[._:-]/i, '')
40
+ .replace(/^tags[._:-]/i, '')
41
+ .replace(/^metric[._:-]/i, '')
42
+ .replace(/^(attributes[._:-])+/i, '')
43
+ .replace(/^resource[_\s-]?attributes[._:-]/i, '')
44
+ .replace(/^resource[_\s-]?attr[._:-]/i, 'resource_attr:')
45
+ .toLowerCase();
46
+ }
47
+ function projectionForScoringCategory(category) {
48
+ if (UNIVERSAL_IDENTITY_CATEGORIES.has(category)) {
49
+ return {
50
+ category,
51
+ layer: 'identity',
52
+ identity_scope: 'universal',
53
+ scoring: true,
54
+ };
55
+ }
56
+ if (CONTRACT_SCOPED_IDENTITY_CATEGORIES.has(category)) {
57
+ return {
58
+ category,
59
+ layer: 'identity',
60
+ identity_scope: 'contract_scoped',
61
+ scoring: true,
62
+ };
63
+ }
64
+ if (SCOPE_CATEGORIES.has(category)) {
65
+ return {
66
+ category,
67
+ layer: 'scope',
68
+ scoring: true,
69
+ };
70
+ }
71
+ return {
72
+ category,
73
+ layer: 'diagnostic',
74
+ scoring: true,
75
+ };
76
+ }
77
+ function scoringCategoryForNormalizedPath(dotPath, compactLast, compact) {
78
+ if ([
79
+ 'service',
80
+ 'service_name',
81
+ 'job',
82
+ 'labels.service',
83
+ 'service.name',
84
+ 'otel.service.name',
85
+ 'resource.service.name',
86
+ 'resource_attr:service.name',
87
+ ].includes(dotPath) ||
88
+ ['service', 'service_name'].includes(compactLast)) {
89
+ return 'service';
90
+ }
91
+ if ([
92
+ 'app',
93
+ 'application',
94
+ 'application_name',
95
+ 'labels.app',
96
+ 'labels.app.kubernetes.io/name',
97
+ 'labels.app.kubernetes.io.name',
98
+ 'labels.app_kubernetes_io_name',
99
+ 'app.kubernetes.io/name',
100
+ 'app.kubernetes.io.name',
101
+ 'app_kubernetes_io_name',
102
+ ].includes(dotPath) ||
103
+ ['app', 'application', 'application_name'].includes(compactLast)) {
104
+ return 'app';
105
+ }
106
+ if (compact.includes('namespace') || dotPath === 'k8s.namespace.name' || dotPath === 'resource_attr:k8s.namespace.name') {
107
+ return 'namespace';
108
+ }
109
+ if (compactLast === 'pod' ||
110
+ compactLast === 'pods' ||
111
+ compactLast === 'pod_name' ||
112
+ compactLast === 'pod_names' ||
113
+ dotPath === 'k8s.pod.name' ||
114
+ dotPath === 'resource_attr:k8s.pod.name') {
115
+ return 'pod';
116
+ }
117
+ if (compactLast.includes('container')) {
118
+ return 'container';
119
+ }
120
+ if (compactLast === 'cluster' ||
121
+ compactLast === 'cluster_name' ||
122
+ compactLast === 'cluster_id' ||
123
+ compactLast === 'kubernetes_cluster' ||
124
+ compactLast === 'kubernetes_cluster_name' ||
125
+ compactLast === 'k8s_cluster' ||
126
+ dotPath === 'k8s.cluster.name' ||
127
+ dotPath === 'resource_attr:k8s.cluster.name') {
128
+ return 'cluster';
129
+ }
130
+ if ([
131
+ 'deployment',
132
+ 'deployment_name',
133
+ 'deployments',
134
+ 'workload',
135
+ 'workload_name',
136
+ 'workloads',
137
+ 'statefulset',
138
+ 'statefulset_name',
139
+ 'daemonset',
140
+ 'daemonset_name',
141
+ ].includes(compactLast) ||
142
+ dotPath === 'k8s.deployment.name' ||
143
+ dotPath === 'resource_attr:k8s.deployment.name') {
144
+ return 'workload';
145
+ }
146
+ if (['env', 'environment', 'environment_name', 'stage'].includes(compactLast) ||
147
+ dotPath === 'deployment.environment' ||
148
+ dotPath === 'resource_attr:deployment.environment') {
149
+ return 'environment';
150
+ }
151
+ if (['team', 'team_name', 'owner_team', 'owner'].includes(compactLast) || dotPath === 'owner.team') {
152
+ return 'team';
153
+ }
154
+ if (['project', 'project_key', 'project_slug', 'project_name'].includes(compactLast)) {
155
+ return 'project';
156
+ }
157
+ if (['repo', 'repository', 'repo_slug', 'repository_slug', 'repository_name', 'scm_repository'].includes(compactLast)) {
158
+ return 'repository';
159
+ }
160
+ if (['space', 'space_key', 'space_slug'].includes(compactLast)) {
161
+ return 'space';
162
+ }
163
+ return undefined;
164
+ }
165
+ function diagnosticCategoryForNormalizedPath(dotPath, compactLast) {
166
+ if (['release', 'release_name'].includes(compactLast)) {
167
+ return 'release';
168
+ }
169
+ if (['version', 'app_version', 'image_tag'].includes(compactLast) || dotPath === 'release.version') {
170
+ return 'version';
171
+ }
172
+ if (['deployment_revision', 'revision', 'rollout_revision'].includes(compactLast)) {
173
+ return 'deployment_revision';
174
+ }
175
+ if (['commit', 'commit_sha', 'git_sha', 'sha'].includes(compactLast)) {
176
+ return 'commit_sha';
177
+ }
178
+ return undefined;
179
+ }
180
+ function claimProjectionForPath(path) {
181
+ if (path.length === 0) {
182
+ return undefined;
183
+ }
184
+ const dotPath = normalizedPath(path);
185
+ const last = normalizePathToken(path[path.length - 1] || '');
186
+ const compact = compactPath(dotPath);
187
+ const compactLast = compactPath(last);
188
+ const scoringCategory = scoringCategoryForNormalizedPath(dotPath, compactLast, compact);
189
+ if (scoringCategory) {
190
+ return projectionForScoringCategory(scoringCategory);
191
+ }
192
+ const diagnosticCategory = diagnosticCategoryForNormalizedPath(dotPath, compactLast);
193
+ if (diagnosticCategory) {
194
+ return {
195
+ category: diagnosticCategory,
196
+ layer: 'diagnostic',
197
+ scoring: false,
198
+ };
199
+ }
200
+ return undefined;
201
+ }
202
+ function scoringCorrelationCategoryForPath(path) {
203
+ const projection = claimProjectionForPath(path);
204
+ return projection?.scoring && SCORING_CATEGORY_SET.has(projection.category)
205
+ ? projection.category
206
+ : undefined;
207
+ }
208
+ function scoringCorrelationCategoriesForKey(key) {
209
+ const normalized = normalizedKey(key);
210
+ const compact = compactPath(normalized);
211
+ const categories = new Set();
212
+ const add = (category) => categories.add(category);
213
+ const isPresenceKey = compact.includes('labelpresent') || compact.includes('annotationpresent');
214
+ const isAnnotationKey = compact.includes('_annotation_') || compact.includes('_annotations_');
215
+ if (compact.includes('namespace') ||
216
+ normalized === 'k8s.namespace.name' ||
217
+ normalized === 'resource_attr:k8s.namespace.name' ||
218
+ normalized === 'destination.namespace' ||
219
+ normalized === 'destination_namespace') {
220
+ add('namespace');
221
+ }
222
+ if (!isPresenceKey &&
223
+ (compact === 'container' ||
224
+ compact === 'container_name' ||
225
+ compact.endsWith('_container_name') ||
226
+ normalized === 'k8s.container.name' ||
227
+ normalized === 'resource_attr:k8s.container.name')) {
228
+ add('container');
229
+ }
230
+ if (compact.includes('cluster') || normalized === 'k8s.cluster.name' || normalized === 'resource_attr:k8s.cluster.name') {
231
+ add('cluster');
232
+ }
233
+ const isKubernetesAppLabel = compact.endsWith('_label_app') ||
234
+ compact.endsWith('_label_app_kubernetes_io_name') ||
235
+ compact.includes('_label_app_kubernetes_io_name') ||
236
+ normalized === 'app.kubernetes.io/name' ||
237
+ normalized === 'app_kubernetes_io_name' ||
238
+ normalized === 'labels.app' ||
239
+ normalized === 'labels.app.kubernetes.io/name' ||
240
+ normalized === 'labels.app_kubernetes_io_name' ||
241
+ normalized === 'app';
242
+ if (!isPresenceKey &&
243
+ !isAnnotationKey &&
244
+ (compact.includes('deployment') ||
245
+ compact.includes('workload') ||
246
+ compact.includes('pod_controller_name') ||
247
+ (compact.includes('statefulset') && !compact.includes('pod_name')) ||
248
+ compact.includes('daemonset') ||
249
+ normalized === 'k8s.deployment.name' ||
250
+ normalized === 'resource_attr:k8s.deployment.name' ||
251
+ isKubernetesAppLabel)) {
252
+ add('workload');
253
+ }
254
+ if (!isPresenceKey && !isAnnotationKey && isKubernetesAppLabel) {
255
+ add('app');
256
+ }
257
+ if (!isPresenceKey &&
258
+ !isAnnotationKey &&
259
+ !compact.includes('_label_') &&
260
+ !compact.includes('container') &&
261
+ !compact.includes('controller') &&
262
+ (compact === 'pod' ||
263
+ compact === 'pod_name' ||
264
+ compact.endsWith('_pod_name') ||
265
+ normalized === 'k8s.pod.name' ||
266
+ normalized === 'resource_attr:k8s.pod.name')) {
267
+ add('pod');
268
+ }
269
+ if (!isPresenceKey &&
270
+ !isAnnotationKey &&
271
+ (compact === 'service' ||
272
+ compact === 'service_name' ||
273
+ compact.endsWith('_service_name') ||
274
+ compact.endsWith('_service_summary') ||
275
+ normalized === 'service.name' ||
276
+ normalized === 'otel.service.name' ||
277
+ normalized === 'service.summary' ||
278
+ normalized === 'service_object.name' ||
279
+ normalized === 'service_object.summary' ||
280
+ normalized === 'resource.service.name' ||
281
+ normalized === 'resource_attr:service.name' ||
282
+ normalized === 'app.kubernetes.io/name' ||
283
+ normalized === 'app_kubernetes_io_name' ||
284
+ normalized === 'app' ||
285
+ normalized === 'application' ||
286
+ normalized === 'application_name' ||
287
+ normalized === 'job')) {
288
+ add('service');
289
+ }
290
+ if (normalized === 'env' ||
291
+ compact.includes('environment') ||
292
+ normalized === 'deployment.environment' ||
293
+ normalized === 'resource_attr:deployment.environment') {
294
+ add('environment');
295
+ }
296
+ if (compact === 'team' ||
297
+ compact === 'team_name' ||
298
+ compact.endsWith('_team_name') ||
299
+ normalized === 'team.name' ||
300
+ normalized === 'team.summary' ||
301
+ normalized === 'service_object.team_name' ||
302
+ compact.includes('owner_team')) {
303
+ add('team');
304
+ }
305
+ if (compact === 'project' ||
306
+ compact === 'project_key' ||
307
+ compact === 'project_slug' ||
308
+ compact.endsWith('_project_key') ||
309
+ compact.endsWith('_project_slug') ||
310
+ normalized === 'project.key' ||
311
+ normalized === 'project.slug') {
312
+ add('project');
313
+ }
314
+ if (compact === 'repo' ||
315
+ compact === 'repository' ||
316
+ compact === 'repo_slug' ||
317
+ compact === 'repository_slug' ||
318
+ normalized === 'repository.slug') {
319
+ add('repository');
320
+ }
321
+ if (compact === 'space' || compact === 'space_key') {
322
+ add('space');
323
+ }
324
+ return Array.from(categories);
325
+ }
326
+ //# sourceMappingURL=claimProjection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claimProjection.js","sourceRoot":"","sources":["../../../src/correlation/claimProjection.ts"],"names":[],"mappings":"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"}