@scoutflo/topology-contracts 0.7.14 → 0.7.16

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.
@@ -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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"}