@scoutflo/topology-contracts 0.7.22 → 0.7.24

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,55 @@
1
+ import { type TopologyProvider } from '../../providers';
2
+ import { type TopologyRelationType, type TopologyResourceType } from '../../topology';
3
+ import { type ConnectionContractStatus } from './status';
4
+ import { type ConnectionContractEndpoint, type ConnectionContractMetadata } from './types';
5
+ export type RelationshipAuthoringFieldType = 'string' | 'string[]' | 'number' | 'boolean' | 'object' | 'object[]';
6
+ export interface RelationshipAuthoringAttributeField {
7
+ readonly type: RelationshipAuthoringFieldType;
8
+ readonly required?: boolean;
9
+ readonly label?: string;
10
+ readonly description?: string;
11
+ readonly allowed_values?: readonly string[];
12
+ readonly default_value?: string | number | boolean | readonly string[];
13
+ }
14
+ export interface RelationshipAuthoringAttributeManifest {
15
+ readonly attribute_schema_key: string;
16
+ readonly title: string;
17
+ readonly description?: string;
18
+ readonly manually_authorable: boolean;
19
+ readonly fields: Readonly<Record<string, RelationshipAuthoringAttributeField>>;
20
+ }
21
+ export interface RelationshipAuthoringEndpointFilter {
22
+ readonly entity_type: 'service' | 'resource';
23
+ readonly resource_type?: TopologyResourceType;
24
+ readonly provider?: TopologyProvider | string;
25
+ readonly source_type?: string;
26
+ }
27
+ export interface RelationshipAuthoringContractFilter {
28
+ readonly from?: RelationshipAuthoringEndpointFilter;
29
+ readonly to?: RelationshipAuthoringEndpointFilter;
30
+ readonly relation?: TopologyRelationType | string;
31
+ readonly statuses?: readonly ConnectionContractStatus[];
32
+ }
33
+ export interface RelationshipAuthoringContract {
34
+ readonly key: string;
35
+ readonly version: string;
36
+ readonly status: ConnectionContractStatus;
37
+ readonly relation: TopologyRelationType;
38
+ readonly relation_class: ConnectionContractMetadata['relation_class'];
39
+ readonly attribute_schema_key: string;
40
+ readonly correlation_contract_key: string;
41
+ readonly correlation_contract_version: string;
42
+ readonly source_endpoint: ConnectionContractEndpoint;
43
+ readonly target_endpoint: ConnectionContractEndpoint;
44
+ readonly provider_family?: string;
45
+ readonly provider_category?: string;
46
+ readonly required_attribute_keys: readonly string[];
47
+ readonly attribute_manifest: RelationshipAuthoringAttributeManifest;
48
+ }
49
+ export declare const RELATIONSHIP_AUTHORING_ATTRIBUTE_MANIFESTS: Readonly<Record<string, RelationshipAuthoringAttributeManifest>>;
50
+ export declare const RELATIONSHIP_AUTHORING_ATTRIBUTE_SCHEMA_KEYS: string[];
51
+ export declare function getRelationshipAuthoringAttributeManifest(attributeSchemaKey: string | undefined): RelationshipAuthoringAttributeManifest | undefined;
52
+ export declare function relationshipAuthoringRequiredAttributeKeys(attributeSchemaKey: string): readonly string[];
53
+ export declare function defaultRelationshipAuthoringAttributes(contract: Pick<ConnectionContractMetadata, 'attribute_schema_key' | 'relation' | 'target_endpoint'>, overrides?: Record<string, unknown>): Record<string, unknown>;
54
+ export declare function listAuthorableRelationshipContracts(filter?: RelationshipAuthoringContractFilter): readonly RelationshipAuthoringContract[];
55
+ export declare function resolveAuthorableRelationshipContract(filter: RelationshipAuthoringContractFilter): RelationshipAuthoringContract | undefined;
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RELATIONSHIP_AUTHORING_ATTRIBUTE_SCHEMA_KEYS = exports.RELATIONSHIP_AUTHORING_ATTRIBUTE_MANIFESTS = void 0;
4
+ exports.getRelationshipAuthoringAttributeManifest = getRelationshipAuthoringAttributeManifest;
5
+ exports.relationshipAuthoringRequiredAttributeKeys = relationshipAuthoringRequiredAttributeKeys;
6
+ exports.defaultRelationshipAuthoringAttributes = defaultRelationshipAuthoringAttributes;
7
+ exports.listAuthorableRelationshipContracts = listAuthorableRelationshipContracts;
8
+ exports.resolveAuthorableRelationshipContract = resolveAuthorableRelationshipContract;
9
+ const providers_1 = require("../../providers");
10
+ const topology_1 = require("../../topology");
11
+ const status_1 = require("./status");
12
+ const types_1 = require("./types");
13
+ const registry_1 = require("./registry");
14
+ exports.RELATIONSHIP_AUTHORING_ATTRIBUTE_MANIFESTS = {
15
+ [types_1.STRUCTURAL_CONTAINMENT_ATTRIBUTE_SCHEMA_KEY]: {
16
+ attribute_schema_key: types_1.STRUCTURAL_CONTAINMENT_ATTRIBUTE_SCHEMA_KEY,
17
+ title: 'Structural containment',
18
+ description: 'Canonical parent/container relationship attributes.',
19
+ manually_authorable: true,
20
+ fields: {
21
+ relationship_kind: { type: 'string', required: true, default_value: 'structural_containment' },
22
+ basis: { type: 'string', required: true, default_value: 'explicit_user_assertion' },
23
+ from_role: { type: 'string', required: true, default_value: 'contained_resource' },
24
+ to_role: { type: 'string', required: true, default_value: 'container' },
25
+ native_reference_field: { type: 'string' },
26
+ },
27
+ },
28
+ [types_1.SELECTOR_ROUTING_ATTRIBUTE_SCHEMA_KEY]: {
29
+ attribute_schema_key: types_1.SELECTOR_ROUTING_ATTRIBUTE_SCHEMA_KEY,
30
+ title: 'Selector routing',
31
+ description: 'Kubernetes service selector to workload routing attributes.',
32
+ manually_authorable: true,
33
+ fields: {
34
+ relationship_kind: { type: 'string', required: true, default_value: 'selector_routing' },
35
+ basis: { type: 'string', required: true, default_value: 'label_match', allowed_values: ['label_match'] },
36
+ from_role: { type: 'string', required: true, default_value: 'service', allowed_values: ['service'] },
37
+ to_role: { type: 'string', required: true, default_value: 'workload', allowed_values: ['workload'] },
38
+ match_strategy: { type: 'string', required: true, default_value: 'label_selector', allowed_values: ['label_selector'] },
39
+ selector: { type: 'object', required: true },
40
+ namespace: { type: 'string' },
41
+ cluster_id: { type: 'string' },
42
+ },
43
+ },
44
+ [types_1.DEPLOYMENT_BINDING_ATTRIBUTE_SCHEMA_KEY]: {
45
+ attribute_schema_key: types_1.DEPLOYMENT_BINDING_ATTRIBUTE_SCHEMA_KEY,
46
+ title: 'Deployment binding',
47
+ description: 'Service to Kubernetes workload binding attributes.',
48
+ manually_authorable: true,
49
+ fields: {
50
+ relationship_kind: { type: 'string', required: true, default_value: 'deployment_binding' },
51
+ basis: {
52
+ type: 'string',
53
+ required: true,
54
+ default_value: 'manual_mapping',
55
+ allowed_values: ['workload_identity', 'telemetry_observation', 'manual_mapping', 'explicit_user_assertion'],
56
+ },
57
+ from_role: { type: 'string', required: true, default_value: 'service', allowed_values: ['service'] },
58
+ to_role: { type: 'string', required: true, default_value: 'workload', allowed_values: ['workload'] },
59
+ cluster_id: { type: 'string' },
60
+ namespace: { type: 'string' },
61
+ },
62
+ },
63
+ [types_1.OBSERVED_SERVICE_CALL_ATTRIBUTE_SCHEMA_KEY]: {
64
+ attribute_schema_key: types_1.OBSERVED_SERVICE_CALL_ATTRIBUTE_SCHEMA_KEY,
65
+ title: 'Observed service call',
66
+ description: 'Telemetry-observed service call attributes. Not manual-authorable.',
67
+ manually_authorable: false,
68
+ fields: {
69
+ relationship_kind: { type: 'string', required: true, default_value: 'observed_service_call' },
70
+ directionality: { type: 'string', required: true, allowed_values: ['directed', 'bidirectional'] },
71
+ basis: { type: 'string', required: true, default_value: 'telemetry_observation' },
72
+ from_role: { type: 'string', required: true, default_value: 'service' },
73
+ to_role: { type: 'string', required: true, default_value: 'service' },
74
+ edge_key: { type: 'string' },
75
+ source_edge_keys: { type: 'string[]' },
76
+ protocol: { type: 'string' },
77
+ sources: { type: 'string[]' },
78
+ metrics: { type: 'object' },
79
+ observed_directions: { type: 'object[]' },
80
+ kubernetes_cluster_root: { type: 'string' },
81
+ },
82
+ },
83
+ [types_1.OBSERVABILITY_BINDING_ATTRIBUTE_SCHEMA_KEY]: {
84
+ attribute_schema_key: types_1.OBSERVABILITY_BINDING_ATTRIBUTE_SCHEMA_KEY,
85
+ title: 'Observability binding',
86
+ description: 'Workload to observability tool binding attributes.',
87
+ manually_authorable: true,
88
+ fields: {
89
+ relationship_kind: { type: 'string', required: true, default_value: 'observability_binding' },
90
+ observed_service_id: { type: 'string', required: true },
91
+ observed_service_name: { type: 'string' },
92
+ signal_type: {
93
+ type: 'string',
94
+ required: true,
95
+ allowed_values: ['metrics', 'logs', 'traces', 'monitoring', 'errors'],
96
+ },
97
+ basis: {
98
+ type: 'string',
99
+ required: true,
100
+ default_value: 'manual_mapping',
101
+ allowed_values: ['correlation_match', 'manual_mapping', 'explicit_user_assertion'],
102
+ },
103
+ from_role: { type: 'string', required: true, default_value: 'workload', allowed_values: ['workload'] },
104
+ to_role: {
105
+ type: 'string',
106
+ required: true,
107
+ default_value: 'observability_tool',
108
+ allowed_values: ['observability_tool'],
109
+ },
110
+ match_strategy: { type: 'string' },
111
+ cluster_id: { type: 'string', required: true },
112
+ namespace: { type: 'string', required: true },
113
+ workload_name: { type: 'string', required: true },
114
+ workload_type: {
115
+ type: 'string',
116
+ required: true,
117
+ allowed_values: ['deployment', 'statefulset', 'daemonset', 'job', 'cronjob'],
118
+ },
119
+ project: { type: 'string' },
120
+ },
121
+ },
122
+ };
123
+ exports.RELATIONSHIP_AUTHORING_ATTRIBUTE_SCHEMA_KEYS = Object.keys(exports.RELATIONSHIP_AUTHORING_ATTRIBUTE_MANIFESTS);
124
+ function getRelationshipAuthoringAttributeManifest(attributeSchemaKey) {
125
+ if (!attributeSchemaKey) {
126
+ return undefined;
127
+ }
128
+ return exports.RELATIONSHIP_AUTHORING_ATTRIBUTE_MANIFESTS[attributeSchemaKey];
129
+ }
130
+ function relationshipAuthoringRequiredAttributeKeys(attributeSchemaKey) {
131
+ const manifest = getRelationshipAuthoringAttributeManifest(attributeSchemaKey);
132
+ if (!manifest) {
133
+ return [];
134
+ }
135
+ return Object.entries(manifest.fields)
136
+ .filter(([, field]) => field.required)
137
+ .map(([key]) => key);
138
+ }
139
+ function normalizedProvider(provider) {
140
+ if (!provider) {
141
+ return undefined;
142
+ }
143
+ const parsed = providers_1.topologyProviderSchema.safeParse(provider.trim().toLowerCase());
144
+ return parsed.success ? parsed.data : undefined;
145
+ }
146
+ function endpointResourceTypes(endpoint) {
147
+ if (endpoint.resource_types) {
148
+ return endpoint.resource_types;
149
+ }
150
+ return endpoint.resource_type ? [endpoint.resource_type] : [];
151
+ }
152
+ function endpointMatchesFilter(endpoint, filter) {
153
+ if (!filter) {
154
+ return true;
155
+ }
156
+ if (endpoint.entity_type !== filter.entity_type) {
157
+ return false;
158
+ }
159
+ if (filter.resource_type && !endpointResourceTypes(endpoint).includes(filter.resource_type)) {
160
+ return false;
161
+ }
162
+ const provider = normalizedProvider(filter.provider);
163
+ if (provider && endpoint.provider !== provider) {
164
+ return false;
165
+ }
166
+ if (filter.source_type && endpoint.source_type !== filter.source_type) {
167
+ return false;
168
+ }
169
+ return true;
170
+ }
171
+ function observabilitySignalType(contract) {
172
+ if (contract.attribute_schema_key !== types_1.OBSERVABILITY_BINDING_ATTRIBUTE_SCHEMA_KEY) {
173
+ return undefined;
174
+ }
175
+ if (contract.target_endpoint.provider === providers_1.TOPOLOGY_PROVIDER.SENTRY) {
176
+ return 'errors';
177
+ }
178
+ if (contract.relation === topology_1.TOPOLOGY_RELATION_TYPE.SENDS_METRICS_TO) {
179
+ return 'metrics';
180
+ }
181
+ if (contract.relation === topology_1.TOPOLOGY_RELATION_TYPE.SENDS_LOGS_TO) {
182
+ return 'logs';
183
+ }
184
+ if (contract.relation === topology_1.TOPOLOGY_RELATION_TYPE.SENDS_TRACES_TO) {
185
+ return 'traces';
186
+ }
187
+ if (contract.relation === topology_1.TOPOLOGY_RELATION_TYPE.MONITORED_BY) {
188
+ return 'monitoring';
189
+ }
190
+ return undefined;
191
+ }
192
+ function structuralRoleDefaults(contract) {
193
+ if (contract.attribute_schema_key !== types_1.STRUCTURAL_CONTAINMENT_ATTRIBUTE_SCHEMA_KEY) {
194
+ return undefined;
195
+ }
196
+ const targetResourceType = contract.target_endpoint.resource_type;
197
+ if (targetResourceType === 'aws_account') {
198
+ return { from_role: 'contained_resource', to_role: 'cloud_account' };
199
+ }
200
+ if (targetResourceType === 'vpc') {
201
+ return { from_role: 'contained_resource', to_role: 'network_container' };
202
+ }
203
+ if (targetResourceType === 'kubernetes_namespace') {
204
+ return { from_role: 'workload', to_role: 'namespace' };
205
+ }
206
+ if (targetResourceType === 'kubernetes_cluster') {
207
+ return { from_role: 'namespace', to_role: 'cluster' };
208
+ }
209
+ return undefined;
210
+ }
211
+ function defaultRelationshipAuthoringAttributes(contract, overrides = {}) {
212
+ const manifest = getRelationshipAuthoringAttributeManifest(contract.attribute_schema_key);
213
+ if (!manifest) {
214
+ return { ...overrides };
215
+ }
216
+ const defaults = {};
217
+ for (const [key, field] of Object.entries(manifest.fields)) {
218
+ if (field.default_value !== undefined) {
219
+ defaults[key] = field.default_value;
220
+ }
221
+ }
222
+ const signalType = observabilitySignalType(contract);
223
+ if (signalType) {
224
+ defaults['signal_type'] = signalType;
225
+ }
226
+ Object.assign(defaults, structuralRoleDefaults(contract));
227
+ return {
228
+ ...defaults,
229
+ ...overrides,
230
+ };
231
+ }
232
+ function toAuthoringContract(contract) {
233
+ const manifest = getRelationshipAuthoringAttributeManifest(contract.attribute_schema_key);
234
+ if (!manifest?.manually_authorable) {
235
+ return undefined;
236
+ }
237
+ return {
238
+ key: contract.key,
239
+ version: contract.version,
240
+ status: contract.status,
241
+ relation: contract.relation,
242
+ relation_class: contract.relation_class,
243
+ attribute_schema_key: contract.attribute_schema_key,
244
+ correlation_contract_key: contract.key,
245
+ correlation_contract_version: contract.version,
246
+ source_endpoint: contract.source_endpoint,
247
+ target_endpoint: contract.target_endpoint,
248
+ provider_family: contract.provider_family,
249
+ provider_category: contract.provider_category,
250
+ required_attribute_keys: relationshipAuthoringRequiredAttributeKeys(contract.attribute_schema_key),
251
+ attribute_manifest: manifest,
252
+ };
253
+ }
254
+ function listAuthorableRelationshipContracts(filter = {}) {
255
+ const statuses = new Set(filter.statuses || [status_1.CONNECTION_CONTRACT_STATUS.ACTIVE]);
256
+ const relation = typeof filter.relation === 'string' ? filter.relation : undefined;
257
+ return registry_1.CONNECTION_CONTRACT_REGISTRY
258
+ .filter((contract) => statuses.has(contract.status))
259
+ .filter((contract) => !relation || contract.relation === relation)
260
+ .filter((contract) => endpointMatchesFilter(contract.source_endpoint, filter.from))
261
+ .filter((contract) => endpointMatchesFilter(contract.target_endpoint, filter.to))
262
+ .map(toAuthoringContract)
263
+ .filter((contract) => Boolean(contract));
264
+ }
265
+ function resolveAuthorableRelationshipContract(filter) {
266
+ const matches = listAuthorableRelationshipContracts(filter);
267
+ return matches.length === 1 ? matches[0] : undefined;
268
+ }
269
+ //# sourceMappingURL=authoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../../../src/correlation/contracts/authoring.ts"],"names":[],"mappings":"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"}