@spottoai/types-package 1.0.2-beta.346 → 1.0.2-beta.348

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 (48) hide show
  1. package/README.md +15 -0
  2. package/dist/aws/index.d.ts +4 -0
  3. package/dist/aws/index.d.ts.map +1 -1
  4. package/dist/aws/index.js +3 -0
  5. package/dist/aws/index.js.map +1 -1
  6. package/dist/aws/pluginPublicArtifactValidationHelpers.d.ts.map +1 -1
  7. package/dist/aws/pluginPublicArtifactValidationHelpers.js +2 -2
  8. package/dist/aws/pluginPublicArtifactValidationHelpers.js.map +1 -1
  9. package/dist/aws/portalPublicArtifactEvidenceValidation.d.ts.map +1 -1
  10. package/dist/aws/portalPublicArtifactEvidenceValidation.js +75 -1
  11. package/dist/aws/portalPublicArtifactEvidenceValidation.js.map +1 -1
  12. package/dist/aws/portalPublicArtifactHistoryTypes.d.ts +6 -1
  13. package/dist/aws/portalPublicArtifactHistoryTypes.d.ts.map +1 -1
  14. package/dist/aws/portalPublicArtifactHistoryTypes.js +6 -0
  15. package/dist/aws/portalPublicArtifactHistoryTypes.js.map +1 -1
  16. package/dist/aws/portalPublicArtifacts.d.ts +29 -1
  17. package/dist/aws/portalPublicArtifacts.d.ts.map +1 -1
  18. package/dist/aws/portalPublicArtifacts.js.map +1 -1
  19. package/dist/aws/portalRelationshipPublicArtifactValidation.d.ts +4 -0
  20. package/dist/aws/portalRelationshipPublicArtifactValidation.d.ts.map +1 -0
  21. package/dist/aws/portalRelationshipPublicArtifactValidation.js +338 -0
  22. package/dist/aws/portalRelationshipPublicArtifactValidation.js.map +1 -0
  23. package/dist/aws/portalRelationshipPublicArtifacts.d.ts +196 -0
  24. package/dist/aws/portalRelationshipPublicArtifacts.d.ts.map +1 -0
  25. package/dist/aws/portalRelationshipPublicArtifacts.js +63 -0
  26. package/dist/aws/portalRelationshipPublicArtifacts.js.map +1 -0
  27. package/dist/aws/portalRelationshipResourceNodeTypes.d.ts +269 -0
  28. package/dist/aws/portalRelationshipResourceNodeTypes.d.ts.map +1 -0
  29. package/dist/aws/portalRelationshipResourceNodeTypes.js +3 -0
  30. package/dist/aws/portalRelationshipResourceNodeTypes.js.map +1 -0
  31. package/dist/aws/portalRelationshipResourceNodeValidation.d.ts +2 -0
  32. package/dist/aws/portalRelationshipResourceNodeValidation.d.ts.map +1 -0
  33. package/dist/aws/portalRelationshipResourceNodeValidation.js +372 -0
  34. package/dist/aws/portalRelationshipResourceNodeValidation.js.map +1 -0
  35. package/dist/aws/publicArtifacts.d.ts +1 -31
  36. package/dist/aws/publicArtifacts.d.ts.map +1 -1
  37. package/dist/aws/publicArtifacts.js.map +1 -1
  38. package/dist/azure/commitmentsPlanning.d.ts +72 -19
  39. package/dist/azure/commitmentsPlanning.d.ts.map +1 -1
  40. package/dist/common/index.d.ts +1 -0
  41. package/dist/common/index.d.ts.map +1 -1
  42. package/dist/common/index.js +1 -0
  43. package/dist/common/index.js.map +1 -1
  44. package/dist/common/relationships.d.ts +8 -0
  45. package/dist/common/relationships.d.ts.map +1 -0
  46. package/dist/common/relationships.js +3 -0
  47. package/dist/common/relationships.js.map +1 -0
  48. package/package.json +3 -2
@@ -0,0 +1,338 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateAwsPortalRelationshipArtifact = validateAwsPortalRelationshipArtifact;
4
+ const portalRelationshipPublicArtifacts_1 = require("./portalRelationshipPublicArtifacts");
5
+ const portalRelationshipResourceNodeValidation_1 = require("./portalRelationshipResourceNodeValidation");
6
+ const portalPublicArtifactEvidenceValidation_1 = require("./portalPublicArtifactEvidenceValidation");
7
+ const portalPublicArtifactValidationCommon_1 = require("./portalPublicArtifactValidationCommon");
8
+ const pluginPublicArtifactValidationHelpers_1 = require("./pluginPublicArtifactValidationHelpers");
9
+ const CURRENT_KEYS = [
10
+ 'schemaVersion',
11
+ 'portalSchemaVersion',
12
+ 'relationshipSchemaVersion',
13
+ 'provider',
14
+ 'accountId',
15
+ 'artifactType',
16
+ 'artifactGeneration',
17
+ 'generatedAt',
18
+ 'logicalName',
19
+ 'source',
20
+ 'scope',
21
+ 'currency',
22
+ 'currencySymbol',
23
+ 'nodes',
24
+ 'edges',
25
+ 'unresolved',
26
+ 'coverage',
27
+ 'costOverlay',
28
+ 'stats',
29
+ ];
30
+ /** Validates one untrusted, lossless AWS relationship Portal artifact. */
31
+ function validateAwsPortalRelationshipArtifact(value) {
32
+ const artifact = (0, portalPublicArtifactValidationCommon_1.asRecord)(value, 'artifact');
33
+ const { accountId, portalGeneratedAt, bodyGeneratedAt } = (0, portalPublicArtifactValidationCommon_1.validatePortalEnvelope)(artifact, 'relationships', CURRENT_KEYS);
34
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(artifact.relationshipSchemaVersion, portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_SCHEMA_VERSION, 'artifact.relationshipSchemaVersion');
35
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(artifact.logicalName, portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_LOGICAL_NAME, 'artifact.logicalName');
36
+ validateSource(artifact.source, bodyGeneratedAt, portalGeneratedAt);
37
+ const regions = validateScope(artifact.scope, accountId);
38
+ const regionSet = new Set(regions);
39
+ if (artifact.currency !== undefined)
40
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(artifact.currency, 'artifact.currency');
41
+ if (artifact.currencySymbol !== undefined)
42
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(artifact.currencySymbol, 'artifact.currencySymbol');
43
+ const nodes = validateNodes(artifact.nodes, accountId, regions, regionSet);
44
+ validateEdges(artifact.edges, nodes);
45
+ validateUnresolved(artifact.unresolved, nodes);
46
+ validateCoverage(artifact.coverage, regions, portalGeneratedAt);
47
+ const matchedBillingNodeCount = artifact.costOverlay === undefined
48
+ ? undefined
49
+ : validateCostOverlay(artifact.costOverlay, accountId, regions, portalGeneratedAt, nodes.resourceCount);
50
+ if (nodes.billingNodeCount > 0 && matchedBillingNodeCount === undefined)
51
+ throw new Error('artifact.costOverlay is required when resource nodes contain billing.');
52
+ if (matchedBillingNodeCount !== undefined && matchedBillingNodeCount !== nodes.billingNodeCount)
53
+ throw new Error('artifact.costOverlay matched count must equal resource nodes containing billing.');
54
+ validateStats(artifact.stats, asArray(artifact.nodes, 'artifact.nodes').length, asArray(artifact.edges, 'artifact.edges').length, asArray(artifact.unresolved, 'artifact.unresolved').length);
55
+ (0, portalPublicArtifactValidationCommon_1.assertPublicJson)(artifact, 'artifact');
56
+ return value;
57
+ }
58
+ function validateSource(value, bodyGeneratedAt, portalGeneratedAt) {
59
+ const source = (0, portalPublicArtifactValidationCommon_1.asRecord)(value, 'artifact.source');
60
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(source, ['artifactType', 'artifactVersion', 'generatedAt'], 'artifact.source');
61
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(source.artifactType, 'relationship-graph', 'artifact.source.artifactType');
62
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(source.artifactVersion, 1, 'artifact.source.artifactVersion');
63
+ const generatedAt = (0, portalPublicArtifactValidationCommon_1.isoTimestamp)(source.generatedAt, 'artifact.source.generatedAt');
64
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(generatedAt, bodyGeneratedAt, 'artifact.source.generatedAt');
65
+ if (Date.parse(generatedAt) > Date.parse(portalGeneratedAt))
66
+ throw new Error('artifact.source generation cannot exceed Portal output.');
67
+ }
68
+ function validateScope(value, accountId) {
69
+ const scope = (0, portalPublicArtifactValidationCommon_1.asRecord)(value, 'artifact.scope');
70
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(scope, ['provider', 'accountId', 'resourceRegions'], 'artifact.scope');
71
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(scope.provider, 'aws', 'artifact.scope.provider');
72
+ (0, pluginPublicArtifactValidationHelpers_1.assertAccount)(scope.accountId, accountId, 'artifact.scope.accountId');
73
+ return (0, portalPublicArtifactValidationCommon_1.regionArray)(scope.resourceRegions, 'artifact.scope.resourceRegions');
74
+ }
75
+ function validateNodes(value, accountId, regions, regionSet) {
76
+ const nodes = asArray(value, 'artifact.nodes');
77
+ const byId = new Map();
78
+ const regionNodes = [];
79
+ let accountNodeCount = 0;
80
+ let resourceCount = 0;
81
+ let billingNodeCount = 0;
82
+ nodes.forEach((entry, index) => {
83
+ const field = `artifact.nodes[${index}]`;
84
+ const node = (0, portalPublicArtifactValidationCommon_1.asRecord)(entry, field);
85
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(node, ['id', 'kind', 'data'], field);
86
+ const id = (0, portalPublicArtifactValidationCommon_1.requiredString)(node.id, `${field}.id`);
87
+ if (byId.has(id))
88
+ throw new Error('artifact node ids must be unique.');
89
+ const kind = (0, portalPublicArtifactValidationCommon_1.requiredEnum)(node.kind, ['account', 'region', 'resource', 'synthetic'], `${field}.kind`);
90
+ const data = (0, portalPublicArtifactValidationCommon_1.asRecord)(node.data, `${field}.data`);
91
+ validateNodeBinding(data, accountId, `${field}.data`);
92
+ if (kind === 'account') {
93
+ accountNodeCount += 1;
94
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(data, ['provider', 'accountId', 'displayName'], `${field}.data`);
95
+ if (data.displayName !== undefined)
96
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(data.displayName, `${field}.data.displayName`);
97
+ }
98
+ else if (kind === 'region') {
99
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(data, ['provider', 'accountId', 'resourceRegion', 'displayName'], `${field}.data`);
100
+ const region = validateNodeRegion(data, regionSet, `${field}.data`);
101
+ regionNodes.push(region);
102
+ if (data.displayName !== undefined)
103
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(data.displayName, `${field}.data.displayName`);
104
+ }
105
+ else if (kind === 'synthetic') {
106
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(data, ['provider', 'accountId', 'resourceRegion', 'syntheticType', 'identifier', 'displayName'], `${field}.data`);
107
+ const resourceRegion = validateNodeRegion(data, regionSet, `${field}.data`);
108
+ (0, portalPublicArtifactValidationCommon_1.requiredEnum)(data.syntheticType, portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_SYNTHETIC_TYPES, `${field}.data.syntheticType`);
109
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(data.identifier, `${field}.data.identifier`);
110
+ if (data.displayName !== undefined)
111
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(data.displayName, `${field}.data.displayName`);
112
+ byId.set(id, { kind, resourceRegion });
113
+ return;
114
+ }
115
+ else {
116
+ (0, portalRelationshipResourceNodeValidation_1.validateAwsPortalRelationshipResourceNode)(data, accountId, regionSet, `${field}.data`);
117
+ resourceCount += 1;
118
+ if (data.billing !== undefined)
119
+ billingNodeCount += 1;
120
+ byId.set(id, { kind, resourceRegion: String(data.resourceRegion) });
121
+ return;
122
+ }
123
+ byId.set(id, kind === 'region' ? { kind, resourceRegion: String(data.resourceRegion) } : { kind });
124
+ });
125
+ if (accountNodeCount !== 1)
126
+ throw new Error('artifact must contain exactly one account node.');
127
+ (0, portalPublicArtifactValidationCommon_1.assertUnique)(regionNodes, 'artifact Region nodes');
128
+ assertExactRegionSet(regionNodes, regions, 'artifact Region nodes');
129
+ return { byId, resourceCount, billingNodeCount };
130
+ }
131
+ function validateNodeBinding(data, accountId, field) {
132
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(data.provider, 'aws', `${field}.provider`);
133
+ (0, pluginPublicArtifactValidationHelpers_1.assertAccount)(data.accountId, accountId, `${field}.accountId`);
134
+ }
135
+ function validateNodeRegion(data, regions, field) {
136
+ const region = (0, portalPublicArtifactValidationCommon_1.requiredString)(data.resourceRegion, `${field}.resourceRegion`);
137
+ if (!regions.has(region))
138
+ throw new Error(`${field}.resourceRegion is outside artifact scope.`);
139
+ return region;
140
+ }
141
+ const STRUCTURAL_RELATIONSHIPS = {
142
+ 'account-region': ['region', 'account'],
143
+ 'region-resource': ['resource', 'region'],
144
+ 'region-topology': ['synthetic', 'region'],
145
+ };
146
+ function validateEdges(value, nodes) {
147
+ const edges = asArray(value, 'artifact.edges');
148
+ const ids = new Set();
149
+ const structuralParents = new Map();
150
+ edges.forEach((entry, index) => {
151
+ const field = `artifact.edges[${index}]`;
152
+ const edge = (0, portalPublicArtifactValidationCommon_1.asRecord)(entry, field);
153
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(edge, ['id', 'from', 'to', 'kind', 'relationshipTypes', 'confidence', 'evidence'], field);
154
+ const id = (0, portalPublicArtifactValidationCommon_1.requiredString)(edge.id, `${field}.id`);
155
+ if (ids.has(id))
156
+ throw new Error('artifact edge ids must be unique.');
157
+ ids.add(id);
158
+ const from = (0, portalPublicArtifactValidationCommon_1.requiredString)(edge.from, `${field}.from`);
159
+ const to = (0, portalPublicArtifactValidationCommon_1.requiredString)(edge.to, `${field}.to`);
160
+ const fromNode = nodes.byId.get(from);
161
+ const toNode = nodes.byId.get(to);
162
+ if (!fromNode || !toNode)
163
+ throw new Error(`${field} references a missing node.`);
164
+ if (from === to)
165
+ throw new Error(`${field} must not be a self edge.`);
166
+ const kind = (0, portalPublicArtifactValidationCommon_1.requiredEnum)(edge.kind, ['contains', 'depends_on'], `${field}.kind`);
167
+ const relationshipTypes = nonEmptyStringEnumArray(edge.relationshipTypes, portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_TYPES, `${field}.relationshipTypes`);
168
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(edge.confidence, 'high', `${field}.confidence`);
169
+ validateEdgeEvidence(edge.evidence, `${field}.evidence`);
170
+ const structuralTypes = relationshipTypes.filter(isStructuralRelationship);
171
+ if (structuralTypes.length > 0) {
172
+ if (kind !== 'contains' || structuralTypes.length !== relationshipTypes.length)
173
+ throw new Error(`${field} structural relationship types require a contains edge.`);
174
+ structuralTypes.forEach(type => validateContainmentDirection(type, fromNode.kind, toNode.kind, field));
175
+ structuralParents.set(from, (structuralParents.get(from) ?? 0) + 1);
176
+ }
177
+ else {
178
+ if (kind !== 'depends_on')
179
+ throw new Error(`${field} dependency relationship types require a depends_on edge.`);
180
+ if (fromNode.kind !== 'resource' || (toNode.kind !== 'resource' && toNode.kind !== 'synthetic'))
181
+ throw new Error(`${field} dependency edges must connect a resource to a resource or synthetic node.`);
182
+ if (fromNode.resourceRegion !== toNode.resourceRegion)
183
+ throw new Error(`${field} dependency edge crosses resource Regions.`);
184
+ }
185
+ });
186
+ nodes.byId.forEach((node, id) => {
187
+ const expected = node.kind === 'account' ? 0 : 1;
188
+ if ((structuralParents.get(id) ?? 0) !== expected)
189
+ throw new Error(`artifact node ${id} must have exactly ${expected} structural parent edge${expected === 1 ? '' : 's'}.`);
190
+ });
191
+ }
192
+ function isStructuralRelationship(value) {
193
+ return value in STRUCTURAL_RELATIONSHIPS;
194
+ }
195
+ function validateEdgeEvidence(value, field) {
196
+ const evidence = asArray(value, field, true);
197
+ evidence.forEach((entry, index) => {
198
+ const itemField = `${field}[${index}]`;
199
+ const item = (0, portalPublicArtifactValidationCommon_1.asRecord)(entry, itemField);
200
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(item, ['method', 'sourceFamily', 'field', 'matchedValue'], itemField);
201
+ (0, portalPublicArtifactValidationCommon_1.requiredEnum)(item.method, ['field-derived', 'field-reference', 'persisted-inventory', 'request-scope'], `${itemField}.method`);
202
+ (0, portalPublicArtifactValidationCommon_1.requiredEnum)(item.sourceFamily, [...portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_DISCOVERY_FAMILIES, 'graph-scope'], `${itemField}.sourceFamily`);
203
+ if (item.field !== undefined)
204
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(item.field, `${itemField}.field`);
205
+ if (item.matchedValue !== undefined)
206
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(item.matchedValue, `${itemField}.matchedValue`);
207
+ });
208
+ }
209
+ function validateContainmentDirection(relationshipType, fromKind, toKind, field) {
210
+ const [expectedFrom, expectedTo] = STRUCTURAL_RELATIONSHIPS[relationshipType];
211
+ if (fromKind !== expectedFrom || toKind !== expectedTo)
212
+ throw new Error(`${field} ${relationshipType} containment must point child to parent.`);
213
+ }
214
+ function validateUnresolved(value, nodes) {
215
+ const expectedFamilies = [
216
+ 'ec2-instance',
217
+ 'vpc',
218
+ 'subnet',
219
+ 'internet-gateway',
220
+ 'virtual-private-gateway',
221
+ 'security-group',
222
+ 'rds-db-cluster',
223
+ 'rds-db-instance',
224
+ ];
225
+ asArray(value, 'artifact.unresolved').forEach((entry, index) => {
226
+ const field = `artifact.unresolved[${index}]`;
227
+ const unresolved = (0, portalPublicArtifactValidationCommon_1.asRecord)(entry, field);
228
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(unresolved, ['sourceNodeId', 'relationshipType', 'sourceFamily', 'field', 'matchedValue', 'expectedTargetFamily'], field);
229
+ const sourceNodeId = (0, portalPublicArtifactValidationCommon_1.requiredString)(unresolved.sourceNodeId, `${field}.sourceNodeId`);
230
+ if (!nodes.byId.has(sourceNodeId))
231
+ throw new Error(`${field}.sourceNodeId references a missing node.`);
232
+ (0, portalPublicArtifactValidationCommon_1.requiredEnum)(unresolved.relationshipType, portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_TYPES, `${field}.relationshipType`);
233
+ (0, portalPublicArtifactValidationCommon_1.requiredEnum)(unresolved.sourceFamily, portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_DISCOVERY_FAMILIES, `${field}.sourceFamily`);
234
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(unresolved.field, `${field}.field`);
235
+ (0, portalPublicArtifactValidationCommon_1.requiredString)(unresolved.matchedValue, `${field}.matchedValue`);
236
+ (0, portalPublicArtifactValidationCommon_1.requiredEnum)(unresolved.expectedTargetFamily, expectedFamilies, `${field}.expectedTargetFamily`);
237
+ });
238
+ }
239
+ function validateCoverage(value, regions, portalGeneratedAt) {
240
+ const coverage = (0, portalPublicArtifactValidationCommon_1.asRecord)(value, 'artifact.coverage');
241
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(coverage, ['families'], 'artifact.coverage');
242
+ const familyNames = [];
243
+ asArray(coverage.families, 'artifact.coverage.families').forEach((entry, index) => {
244
+ const field = `artifact.coverage.families[${index}]`;
245
+ const family = (0, portalPublicArtifactValidationCommon_1.asRecord)(entry, field);
246
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(family, ['family', 'resourceRegions', 'status', 'lastSuccessfulRefreshAt', 'emptyScope', 'reason'], field);
247
+ const familyName = (0, portalPublicArtifactValidationCommon_1.requiredEnum)(family.family, portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_DISCOVERY_FAMILIES, `${field}.family`);
248
+ familyNames.push(familyName);
249
+ const familyRegions = (0, portalPublicArtifactValidationCommon_1.regionArray)(family.resourceRegions, `${field}.resourceRegions`);
250
+ assertExactRegionSet(familyRegions, regions, `${field}.resourceRegions`);
251
+ const status = (0, portalPublicArtifactValidationCommon_1.requiredEnum)(family.status, ['available', 'incomplete'], `${field}.status`);
252
+ if (status === 'available') {
253
+ const refreshedAt = (0, portalPublicArtifactValidationCommon_1.isoTimestamp)(family.lastSuccessfulRefreshAt, `${field}.lastSuccessfulRefreshAt`);
254
+ if (Date.parse(refreshedAt) > Date.parse(portalGeneratedAt))
255
+ throw new Error(`${field}.lastSuccessfulRefreshAt cannot exceed Portal output.`);
256
+ (0, portalPublicArtifactValidationCommon_1.requiredBoolean)(family.emptyScope, `${field}.emptyScope`);
257
+ if (family.reason !== undefined)
258
+ throw new Error(`${field}.reason is not allowed for available coverage.`);
259
+ }
260
+ else {
261
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(family.reason, 'source-refresh-incomplete', `${field}.reason`);
262
+ if (family.lastSuccessfulRefreshAt !== undefined || family.emptyScope !== undefined)
263
+ throw new Error(`${field} incomplete coverage cannot claim successful refresh evidence.`);
264
+ }
265
+ });
266
+ (0, portalPublicArtifactValidationCommon_1.assertUnique)(familyNames, 'artifact.coverage family identities');
267
+ if (familyNames.length !== portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_DISCOVERY_FAMILIES.length ||
268
+ portalRelationshipPublicArtifacts_1.AWS_PORTAL_RELATIONSHIP_DISCOVERY_FAMILIES.some(family => !familyNames.includes(family)))
269
+ throw new Error('artifact.coverage must declare every relationship family.');
270
+ }
271
+ function validateCostOverlay(value, accountId, regions, portalGeneratedAt, resourceNodeCount) {
272
+ const overlay = (0, portalPublicArtifactValidationCommon_1.asRecord)(value, 'artifact.costOverlay');
273
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(overlay, ['source', 'coverage', 'billing'], 'artifact.costOverlay');
274
+ const source = (0, portalPublicArtifactValidationCommon_1.asRecord)(overlay.source, 'artifact.costOverlay.source');
275
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(source, ['artifactType', 'logicalName', 'artifactGeneration', 'sha256', 'scope'], 'artifact.costOverlay.source');
276
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(source.artifactType, 'resource-collection', 'artifact.costOverlay.source.artifactType');
277
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(source.logicalName, 'resources.json.gz', 'artifact.costOverlay.source.logicalName');
278
+ const generation = (0, portalPublicArtifactValidationCommon_1.validateGeneration)(source.artifactGeneration, 'artifact.costOverlay.source.artifactGeneration');
279
+ if (Date.parse(generation.generatedAt) > Date.parse(portalGeneratedAt))
280
+ throw new Error('artifact.costOverlay source cannot exceed Portal output.');
281
+ (0, pluginPublicArtifactValidationHelpers_1.sha256)(source.sha256, 'artifact.costOverlay.source.sha256');
282
+ const sourceScope = (0, portalPublicArtifactValidationCommon_1.validateResourceScope)(source.scope, accountId, 'artifact.costOverlay.source.scope');
283
+ assertExactRegionSet(sourceScope.resourceRegions, regions, 'artifact.costOverlay.source.scope.resourceRegions');
284
+ const coverage = (0, portalPublicArtifactValidationCommon_1.asRecord)(overlay.coverage, 'artifact.costOverlay.coverage');
285
+ const coverageKeys = ['totalResourceCount', 'billedResourceCount', 'matchedResourceNodeCount', 'unmatchedBillingExpenseCount'];
286
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(coverage, coverageKeys, 'artifact.costOverlay.coverage');
287
+ coverageKeys.forEach(key => (0, portalPublicArtifactValidationCommon_1.nonNegativeInteger)(coverage[key], `artifact.costOverlay.coverage.${key}`));
288
+ if (Number(coverage.billedResourceCount) > Number(coverage.totalResourceCount))
289
+ throw new Error('artifact.costOverlay billed count exceeds resource count.');
290
+ if (Number(coverage.matchedResourceNodeCount) > Number(coverage.billedResourceCount))
291
+ throw new Error('artifact.costOverlay matched count exceeds billed count.');
292
+ if (Number(coverage.matchedResourceNodeCount) > resourceNodeCount)
293
+ throw new Error('artifact.costOverlay matched count exceeds graph resource node count.');
294
+ (0, portalPublicArtifactEvidenceValidation_1.validateAwsPortalBillingBlock)(overlay.billing, 'artifact.costOverlay.billing', sourceScope.billing, accountId, false);
295
+ return Number(coverage.matchedResourceNodeCount);
296
+ }
297
+ function validateStats(value, nodeCount, edgeCount, unresolvedCount) {
298
+ const stats = (0, portalPublicArtifactValidationCommon_1.asRecord)(value, 'artifact.stats');
299
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(stats, ['totalNodes', 'totalEdges', 'unresolvedCount', 'truncated', 'truncation', 'buildMs', 'snapshotBytes'], 'artifact.stats');
300
+ (0, portalPublicArtifactValidationCommon_1.nonNegativeInteger)(stats.totalNodes, 'artifact.stats.totalNodes');
301
+ (0, portalPublicArtifactValidationCommon_1.nonNegativeInteger)(stats.totalEdges, 'artifact.stats.totalEdges');
302
+ (0, portalPublicArtifactValidationCommon_1.nonNegativeInteger)(stats.unresolvedCount, 'artifact.stats.unresolvedCount');
303
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(stats.totalNodes, nodeCount, 'artifact.stats.totalNodes');
304
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(stats.totalEdges, edgeCount, 'artifact.stats.totalEdges');
305
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(stats.unresolvedCount, unresolvedCount, 'artifact.stats.unresolvedCount');
306
+ const truncated = (0, portalPublicArtifactValidationCommon_1.requiredBoolean)(stats.truncated, 'artifact.stats.truncated');
307
+ if (truncated) {
308
+ const truncation = (0, portalPublicArtifactValidationCommon_1.asRecord)(stats.truncation, 'artifact.stats.truncation');
309
+ (0, portalPublicArtifactValidationCommon_1.assertExactKeys)(truncation, ['reason', 'edgesDroppedCount', 'unresolvedDroppedCount', 'tagsRemovedFromNodeCount'], 'artifact.stats.truncation');
310
+ (0, portalPublicArtifactValidationCommon_1.assertValue)(truncation.reason, 'snapshot-size-limit', 'artifact.stats.truncation.reason');
311
+ const dropped = ['edgesDroppedCount', 'unresolvedDroppedCount', 'tagsRemovedFromNodeCount'].map(key => (0, portalPublicArtifactValidationCommon_1.nonNegativeInteger)(truncation[key], `artifact.stats.truncation.${key}`));
312
+ if (dropped.every(count => count === 0))
313
+ throw new Error('artifact.stats.truncation must report at least one omitted item.');
314
+ }
315
+ else if (stats.truncation !== undefined) {
316
+ throw new Error('artifact.stats.truncation is only allowed when truncated is true.');
317
+ }
318
+ if (stats.buildMs !== undefined)
319
+ (0, portalPublicArtifactValidationCommon_1.nonNegativeInteger)(stats.buildMs, 'artifact.stats.buildMs');
320
+ if (stats.snapshotBytes !== undefined)
321
+ (0, portalPublicArtifactValidationCommon_1.nonNegativeInteger)(stats.snapshotBytes, 'artifact.stats.snapshotBytes');
322
+ }
323
+ function assertExactRegionSet(actual, expected, field) {
324
+ const actualSet = new Set(actual);
325
+ if (actualSet.size !== expected.length || expected.some(region => !actualSet.has(region)))
326
+ throw new Error(`${field} must exactly match artifact scope Regions.`);
327
+ }
328
+ function nonEmptyStringEnumArray(value, allowed, field) {
329
+ const values = asArray(value, field, true).map((entry, index) => (0, portalPublicArtifactValidationCommon_1.requiredEnum)(entry, allowed, `${field}[${index}]`));
330
+ (0, portalPublicArtifactValidationCommon_1.assertUnique)(values, field);
331
+ return values;
332
+ }
333
+ function asArray(value, field, nonEmpty = false) {
334
+ if (!Array.isArray(value) || (nonEmpty && value.length === 0))
335
+ throw new Error(`${field} must be ${nonEmpty ? 'a non-empty' : 'an'} array.`);
336
+ return value;
337
+ }
338
+ //# sourceMappingURL=portalRelationshipPublicArtifactValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portalRelationshipPublicArtifactValidation.js","sourceRoot":"","sources":["../../src/aws/portalRelationshipPublicArtifactValidation.ts"],"names":[],"mappings":";;AAmDA,sFA8BC;AAjFD,2FAO6C;AAC7C,yGAAuG;AACvG,qGAAyF;AACzF,iGAegD;AAChD,mGAAgF;AAEhF,MAAM,YAAY,GAAG;IACnB,eAAe;IACf,qBAAqB;IACrB,2BAA2B;IAC3B,UAAU;IACV,WAAW;IACX,cAAc;IACd,oBAAoB;IACpB,aAAa;IACb,aAAa;IACb,QAAQ;IACR,OAAO;IACP,UAAU;IACV,gBAAgB;IAChB,OAAO;IACP,OAAO;IACP,YAAY;IACZ,UAAU;IACV,aAAa;IACb,OAAO;CACC,CAAC;AAEX,0EAA0E;AAC1E,SAAgB,qCAAqC,CAAC,KAAc;IAClE,MAAM,QAAQ,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,eAAe,EAAE,GAAG,IAAA,6DAAsB,EAAC,QAAQ,EAAE,eAAe,EAAE,YAAY,CAAC,CAAC;IAC1H,IAAA,kDAAW,EAAC,QAAQ,CAAC,yBAAyB,EAAE,0EAAsC,EAAE,oCAAoC,CAAC,CAAC;IAC9H,IAAA,kDAAW,EAAC,QAAQ,CAAC,WAAW,EAAE,wEAAoC,EAAE,sBAAsB,CAAC,CAAC;IAChG,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS;QAAE,IAAA,qDAAc,EAAC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;IAC5F,IAAI,QAAQ,CAAC,cAAc,KAAK,SAAS;QAAE,IAAA,qDAAc,EAAC,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAC;IAC9G,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAC3E,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACrC,kBAAkB,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAChE,MAAM,uBAAuB,GAC3B,QAAQ,CAAC,WAAW,KAAK,SAAS;QAChC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,mBAAmB,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5G,IAAI,KAAK,CAAC,gBAAgB,GAAG,CAAC,IAAI,uBAAuB,KAAK,SAAS;QACrE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,IAAI,uBAAuB,KAAK,SAAS,IAAI,uBAAuB,KAAK,KAAK,CAAC,gBAAgB;QAC7F,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;IACtG,aAAa,CACX,QAAQ,CAAC,KAAK,EACd,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,MAAM,EAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,MAAM,EAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC,MAAM,CAC3D,CAAC;IACF,IAAA,uDAAgB,EAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvC,OAAO,KAAsC,CAAC;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc,EAAE,eAAuB,EAAE,iBAAyB;IACxF,MAAM,MAAM,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAClD,IAAA,sDAAe,EAAC,MAAM,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,iBAAiB,CAAC,CAAC;IAC/F,IAAA,kDAAW,EAAC,MAAM,CAAC,YAAY,EAAE,oBAAoB,EAAE,8BAA8B,CAAC,CAAC;IACvF,IAAA,kDAAW,EAAC,MAAM,CAAC,eAAe,EAAE,CAAC,EAAE,iCAAiC,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,IAAA,mDAAY,EAAC,MAAM,CAAC,WAAW,EAAE,6BAA6B,CAAC,CAAC;IACpF,IAAA,kDAAW,EAAC,WAAW,EAAE,eAAe,EAAE,6BAA6B,CAAC,CAAC;IACzE,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAC1I,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,SAAiB;IACtD,MAAM,KAAK,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAChD,IAAA,sDAAe,EAAC,KAAK,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACvF,IAAA,kDAAW,EAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,yBAAyB,CAAC,CAAC;IAC9D,IAAA,qDAAa,EAAC,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;IACtE,OAAO,IAAA,kDAAW,EAAC,KAAK,CAAC,eAAe,EAAE,gCAAgC,CAAC,CAAC;AAC9E,CAAC;AAaD,SAAS,aAAa,CAAC,KAAc,EAAE,SAAiB,EAAE,OAAiB,EAAE,SAA8B;IACzG,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC9C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,kBAAkB,KAAK,GAAG,CAAC;QACzC,MAAM,IAAI,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpC,IAAA,sDAAe,EAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,IAAA,qDAAc,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;QAClD,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvE,MAAM,IAAI,GAAG,IAAA,mDAAY,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QACtG,MAAM,IAAI,GAAG,IAAA,+CAAQ,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QAClD,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QACtD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,gBAAgB,IAAI,CAAC,CAAC;YACtB,IAAA,sDAAe,EAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;YACjF,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,IAAA,qDAAc,EAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,mBAAmB,CAAC,CAAC;QACpG,CAAC;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAA,sDAAe,EAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,aAAa,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;YACnG,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;YACpE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,IAAA,qDAAc,EAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,mBAAmB,CAAC,CAAC;QACpG,CAAC;aAAM,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YAChC,IAAA,sDAAe,EAAC,IAAI,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;YAClI,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;YAC5E,IAAA,mDAAY,EAAC,IAAI,CAAC,aAAa,EAAE,2EAAuC,EAAE,GAAG,KAAK,qBAAqB,CAAC,CAAC;YACzG,IAAA,qDAAc,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,kBAAkB,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;gBAAE,IAAA,qDAAc,EAAC,IAAI,CAAC,WAAW,EAAE,GAAG,KAAK,mBAAmB,CAAC,CAAC;YAClG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;YACvC,OAAO;QACT,CAAC;aAAM,CAAC;YACN,IAAA,oFAAyC,EAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;YACvF,aAAa,IAAI,CAAC,CAAC;YACnB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;gBAAE,gBAAgB,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACpE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACrG,CAAC,CAAC,CAAC;IACH,IAAI,gBAAgB,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC/F,IAAA,mDAAY,EAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IACnD,oBAAoB,CAAC,WAAW,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC;IACpE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA6B,EAAE,SAAiB,EAAE,KAAa;IAC1F,IAAA,kDAAW,EAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;IACvD,IAAA,qDAAa,EAAC,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,YAAY,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,kBAAkB,CAAC,IAA6B,EAAE,OAA4B,EAAE,KAAa;IACpG,MAAM,MAAM,GAAG,IAAA,qDAAc,EAAC,IAAI,CAAC,cAAc,EAAE,GAAG,KAAK,iBAAiB,CAAC,CAAC;IAC9E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4CAA4C,CAAC,CAAC;IAChG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,wBAAwB,GAAG;IAC/B,gBAAgB,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;IACvC,iBAAiB,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;IACzC,iBAAiB,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC;CAClC,CAAC;AAEX,SAAS,aAAa,CAAC,KAAc,EAAE,KAAqB;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,kBAAkB,KAAK,GAAG,CAAC;QACzC,MAAM,IAAI,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACpC,IAAA,sDAAe,EAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1G,MAAM,EAAE,GAAG,IAAA,qDAAc,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;QAClD,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACtE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACZ,MAAM,IAAI,GAAG,IAAA,qDAAc,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QACxD,MAAM,EAAE,GAAG,IAAA,qDAAc,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,KAAK,KAAK,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;QACjF,IAAI,IAAI,KAAK,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2BAA2B,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,IAAA,mDAAY,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;QAClF,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,IAAI,CAAC,iBAAiB,EAAE,iEAA6B,EAAE,GAAG,KAAK,oBAAoB,CAAC,CAAC;QACvI,IAAA,kDAAW,EAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,KAAK,aAAa,CAAC,CAAC;QAC5D,oBAAoB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;QACzD,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QAC3E,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,IAAI,IAAI,KAAK,UAAU,IAAI,eAAe,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;gBAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,yDAAyD,CAAC,CAAC;YACrF,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,4BAA4B,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACvG,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,KAAK,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,2DAA2D,CAAC,CAAC;YAChH,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC;gBAC7F,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4EAA4E,CAAC,CAAC;YACxG,IAAI,QAAQ,CAAC,cAAc,KAAK,MAAM,CAAC,cAAc;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,4CAA4C,CAAC,CAAC;QAC/H,CAAC;IACH,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ;YAC/C,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,QAAQ,0BAA0B,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7H,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,KAAa;IAC7C,OAAO,KAAK,IAAI,wBAAwB,CAAC;AAC3C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc,EAAE,KAAa;IACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,SAAS,GAAG,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC;QACvC,MAAM,IAAI,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACxC,IAAA,sDAAe,EAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC;QACtF,IAAA,mDAAY,EAAC,IAAI,CAAC,MAAM,EAAE,CAAC,eAAe,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,eAAe,CAAC,EAAE,GAAG,SAAS,SAAS,CAAC,CAAC;QAC/H,IAAA,mDAAY,EAAC,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,8EAA0C,EAAE,aAAa,CAAC,EAAE,GAAG,SAAS,eAAe,CAAC,CAAC;QAC7H,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,IAAA,qDAAc,EAAC,IAAI,CAAC,KAAK,EAAE,GAAG,SAAS,QAAQ,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;YAAE,IAAA,qDAAc,EAAC,IAAI,CAAC,YAAY,EAAE,GAAG,SAAS,eAAe,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B,CACnC,gBAAuD,EACvD,QAAgB,EAChB,MAAc,EACd,KAAa;IAEb,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IAC9E,IAAI,QAAQ,KAAK,YAAY,IAAI,MAAM,KAAK,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,gBAAgB,0CAA0C,CAAC,CAAC;AAClJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,KAAqB;IAC/D,MAAM,gBAAgB,GAAG;QACvB,cAAc;QACd,KAAK;QACL,QAAQ;QACR,kBAAkB;QAClB,yBAAyB;QACzB,gBAAgB;QAChB,gBAAgB;QAChB,iBAAiB;KACT,CAAC;IACX,OAAO,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,uBAAuB,KAAK,GAAG,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1C,IAAA,sDAAe,EAAC,UAAU,EAAE,CAAC,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,sBAAsB,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1I,MAAM,YAAY,GAAG,IAAA,qDAAc,EAAC,UAAU,CAAC,YAAY,EAAE,GAAG,KAAK,eAAe,CAAC,CAAC;QACtF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,0CAA0C,CAAC,CAAC;QACvG,IAAA,mDAAY,EAAC,UAAU,CAAC,gBAAgB,EAAE,iEAA6B,EAAE,GAAG,KAAK,mBAAmB,CAAC,CAAC;QACtG,IAAA,mDAAY,EAAC,UAAU,CAAC,YAAY,EAAE,8EAA0C,EAAE,GAAG,KAAK,eAAe,CAAC,CAAC;QAC3G,IAAA,qDAAc,EAAC,UAAU,CAAC,KAAK,EAAE,GAAG,KAAK,QAAQ,CAAC,CAAC;QACnD,IAAA,qDAAc,EAAC,UAAU,CAAC,YAAY,EAAE,GAAG,KAAK,eAAe,CAAC,CAAC;QACjE,IAAA,mDAAY,EAAC,UAAU,CAAC,oBAAoB,EAAE,gBAAgB,EAAE,GAAG,KAAK,uBAAuB,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,OAAiB,EAAE,iBAAyB;IACpF,MAAM,QAAQ,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACtD,IAAA,sDAAe,EAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChF,MAAM,KAAK,GAAG,8BAA8B,KAAK,GAAG,CAAC;QACrD,MAAM,MAAM,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,IAAA,sDAAe,EAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QAC3H,MAAM,UAAU,GAAG,IAAA,mDAAY,EAAC,MAAM,CAAC,MAAM,EAAE,8EAA0C,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC;QAC9G,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,MAAM,aAAa,GAAG,IAAA,kDAAW,EAAC,MAAM,CAAC,eAAe,EAAE,GAAG,KAAK,kBAAkB,CAAC,CAAC;QACtF,oBAAoB,CAAC,aAAa,EAAE,OAAO,EAAE,GAAG,KAAK,kBAAkB,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAA,mDAAY,EAAC,MAAM,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC;QAC3F,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,MAAM,WAAW,GAAG,IAAA,mDAAY,EAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,KAAK,0BAA0B,CAAC,CAAC;YACrG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,uDAAuD,CAAC,CAAC;YAC9I,IAAA,sDAAe,EAAC,MAAM,CAAC,UAAU,EAAE,GAAG,KAAK,aAAa,CAAC,CAAC;YAC1D,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,gDAAgD,CAAC,CAAC;QAC7G,CAAC;aAAM,CAAC;YACN,IAAA,kDAAW,EAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC;YAC3E,IAAI,MAAM,CAAC,uBAAuB,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS;gBACjF,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,gEAAgE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAA,mDAAY,EAAC,WAAW,EAAE,qCAAqC,CAAC,CAAC;IACjE,IACE,WAAW,CAAC,MAAM,KAAK,8EAA0C,CAAC,MAAM;QACxE,8EAA0C,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAExF,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc,EAAE,SAAiB,EAAE,OAAiB,EAAE,iBAAyB,EAAE,iBAAyB;IACrI,MAAM,OAAO,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC;IACxD,IAAA,sDAAe,EAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,sBAAsB,CAAC,CAAC;IACpF,MAAM,MAAM,GAAG,IAAA,+CAAQ,EAAC,OAAO,CAAC,MAAM,EAAE,6BAA6B,CAAC,CAAC;IACvE,IAAA,sDAAe,EAAC,MAAM,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,oBAAoB,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,6BAA6B,CAAC,CAAC;IACjI,IAAA,kDAAW,EAAC,MAAM,CAAC,YAAY,EAAE,qBAAqB,EAAE,0CAA0C,CAAC,CAAC;IACpG,IAAA,kDAAW,EAAC,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,yCAAyC,CAAC,CAAC;IAChG,MAAM,UAAU,GAAG,IAAA,yDAAkB,EAAC,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC,CAAC;IACnH,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACpJ,IAAA,8CAAM,EAAC,MAAM,CAAC,MAAM,EAAE,oCAAoC,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,IAAA,4DAAqB,EAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,mCAAmC,CAAC,CAAC;IACxG,oBAAoB,CAAC,WAAW,CAAC,eAAe,EAAE,OAAO,EAAE,mDAAmD,CAAC,CAAC;IAChH,MAAM,QAAQ,GAAG,IAAA,+CAAQ,EAAC,OAAO,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,CAAC,oBAAoB,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,8BAA8B,CAAU,CAAC;IACxI,IAAA,sDAAe,EAAC,QAAQ,EAAE,YAAY,EAAE,+BAA+B,CAAC,CAAC;IACzE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,yDAAkB,EAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,iCAAiC,GAAG,EAAE,CAAC,CAAC,CAAC;IACvG,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,IAAI,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,IAAI,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,GAAG,iBAAiB;QAC/D,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,IAAA,sEAA6B,EAAC,OAAO,CAAC,OAAO,EAAE,8BAA8B,EAAE,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACtH,OAAO,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,SAAiB,EAAE,SAAiB,EAAE,eAAuB;IAClG,MAAM,KAAK,GAAG,IAAA,+CAAQ,EAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAChD,IAAA,sDAAe,EAAC,KAAK,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACjJ,IAAA,yDAAkB,EAAC,KAAK,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;IAClE,IAAA,yDAAkB,EAAC,KAAK,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;IAClE,IAAA,yDAAkB,EAAC,KAAK,CAAC,eAAe,EAAE,gCAAgC,CAAC,CAAC;IAC5E,IAAA,kDAAW,EAAC,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,2BAA2B,CAAC,CAAC;IACtE,IAAA,kDAAW,EAAC,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,2BAA2B,CAAC,CAAC;IACtE,IAAA,kDAAW,EAAC,KAAK,CAAC,eAAe,EAAE,eAAe,EAAE,gCAAgC,CAAC,CAAC;IACtF,MAAM,SAAS,GAAG,IAAA,sDAAe,EAAC,KAAK,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAC/E,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,IAAA,+CAAQ,EAAC,KAAK,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QAC3E,IAAA,sDAAe,EAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,0BAA0B,CAAC,EAAE,2BAA2B,CAAC,CAAC;QAChJ,IAAA,kDAAW,EAAC,UAAU,CAAC,MAAM,EAAE,qBAAqB,EAAE,kCAAkC,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,CAAC,mBAAmB,EAAE,wBAAwB,EAAE,0BAA0B,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACpG,IAAA,yDAAkB,EAAC,UAAU,CAAC,GAAG,CAAC,EAAE,6BAA6B,GAAG,EAAE,CAAC,CACxE,CAAC;QACF,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IAC/H,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,IAAA,yDAAkB,EAAC,KAAK,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC;IAC7F,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAE,IAAA,yDAAkB,EAAC,KAAK,CAAC,aAAa,EAAE,8BAA8B,CAAC,CAAC;AACjH,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAgB,EAAE,QAAkB,EAAE,KAAa;IAC/E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,IAAI,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvF,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,6CAA6C,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,uBAAuB,CAA6B,KAAc,EAAE,OAAyB,EAAE,KAAa;IACnH,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAA,mDAAY,EAAC,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACrH,IAAA,mDAAY,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,KAAc,EAAE,KAAa,EAAE,QAAQ,GAAG,KAAK;IAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;IAC7I,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,196 @@
1
+ import type { ArtifactGeneration } from '../common/artifactGeneration';
2
+ import type { RelationshipSnapshotCostOverlay, RelationshipSnapshotEdge, RelationshipSnapshotStats, UnresolvedRelationshipReference } from '../azure/relationships';
3
+ import type { AwsPublicArtifactEnvelope, AwsPublicArtifactForbiddenCredentialFields } from './publicArtifacts';
4
+ import type { AwsPortalResourceCollectionBody, AwsPortalResourceCollectionScope } from './portalPublicArtifacts';
5
+ import type { AwsPortalRelationshipResourceNodeData } from './portalRelationshipResourceNodeTypes';
6
+ export declare const AWS_PORTAL_RELATIONSHIP_LOGICAL_NAME: "relationships.json.gz";
7
+ export declare const AWS_PORTAL_RELATIONSHIP_SCHEMA_VERSION: 2;
8
+ export declare const AWS_PORTAL_RELATIONSHIP_DISCOVERY_FAMILIES: readonly ["ec2-instance", "ebs-volume", "vpc", "subnet", "route-table", "internet-gateway", "virtual-private-gateway", "network-interface", "nat-gateway", "security-group", "rds-db-cluster", "rds-db-instance", "load-balancer-v2", "classic-load-balancer", "elasticache-cache-cluster", "elasticache-serverless-cache", "efs-file-system"];
9
+ export declare const AWS_PORTAL_RELATIONSHIP_SYNTHETIC_TYPES: readonly ["vpc", "subnet", "availability-zone", "db-subnet-group", "db-cluster", "elasticache-replication-group", "elasticache-global-datastore", "kms-key", "snapshot"];
10
+ export declare const AWS_PORTAL_RELATIONSHIP_TYPES: readonly ["account-region", "region-resource", "region-topology", "vpc-membership", "subnet-membership", "availability-zone-placement", "kms-key-encryption", "ebs-snapshot-origin", "db-subnet-group-membership", "elasticache-replication-group-membership", "elasticache-global-datastore-membership", "security-group-association", "classic-load-balancer-registration", "ebs-attachment", "network-interface-attachment", "route-table-association", "gateway-route-table-association", "route-propagation-source", "rds-read-replica", "db-cluster-membership", "db-cluster-member", "security-group-peer-reference"];
11
+ export declare const AWS_PORTAL_RELATIONSHIP_CONFIDENCE_SCORES: {
12
+ readonly high: 1;
13
+ };
14
+ export type AwsPortalRelationshipDiscoveryFamily = (typeof AWS_PORTAL_RELATIONSHIP_DISCOVERY_FAMILIES)[number];
15
+ export type AwsPortalRelationshipSyntheticType = (typeof AWS_PORTAL_RELATIONSHIP_SYNTHETIC_TYPES)[number];
16
+ export type AwsPortalRelationshipType = (typeof AWS_PORTAL_RELATIONSHIP_TYPES)[number];
17
+ export type AwsPortalRelationshipEdgeConfidence = keyof typeof AWS_PORTAL_RELATIONSHIP_CONFIDENCE_SCORES;
18
+ export type AwsPortalRelationshipEvidenceMethod = 'field-derived' | 'field-reference' | 'persisted-inventory' | 'request-scope';
19
+ export interface AwsPortalRelationshipScope<AccountId extends string = string> {
20
+ provider: 'aws';
21
+ accountId: AccountId;
22
+ resourceRegions: string[];
23
+ }
24
+ interface AwsPortalRelationshipFamilyCoverageBase {
25
+ family: AwsPortalRelationshipDiscoveryFamily;
26
+ resourceRegions: string[];
27
+ }
28
+ export type AwsPortalRelationshipFamilyCoverage = (AwsPortalRelationshipFamilyCoverageBase & {
29
+ status: 'available';
30
+ lastSuccessfulRefreshAt: string;
31
+ emptyScope: boolean;
32
+ reason?: never;
33
+ }) | (AwsPortalRelationshipFamilyCoverageBase & {
34
+ status: 'incomplete';
35
+ lastSuccessfulRefreshAt?: never;
36
+ emptyScope?: never;
37
+ reason: 'source-refresh-incomplete';
38
+ });
39
+ interface AwsPortalRelationshipNodeDataBase<AccountId extends string> extends AwsPublicArtifactForbiddenCredentialFields {
40
+ provider: 'aws';
41
+ accountId: AccountId;
42
+ }
43
+ export type AwsPortalRelationshipAccountNodeData<AccountId extends string = string> = AwsPortalRelationshipNodeDataBase<AccountId> & {
44
+ displayName?: string;
45
+ };
46
+ export type AwsPortalRelationshipRegionNodeData<AccountId extends string = string> = AwsPortalRelationshipNodeDataBase<AccountId> & {
47
+ resourceRegion: string;
48
+ displayName?: string;
49
+ };
50
+ export type AwsPortalRelationshipSyntheticNodeData<AccountId extends string = string> = AwsPortalRelationshipNodeDataBase<AccountId> & {
51
+ resourceRegion: string;
52
+ syntheticType: AwsPortalRelationshipSyntheticType;
53
+ identifier: string;
54
+ displayName?: string;
55
+ };
56
+ export type AwsPortalRelationshipNode<AccountId extends string = string> = {
57
+ id: string;
58
+ kind: 'account';
59
+ data: AwsPortalRelationshipAccountNodeData<AccountId>;
60
+ } | {
61
+ id: string;
62
+ kind: 'region';
63
+ data: AwsPortalRelationshipRegionNodeData<AccountId>;
64
+ } | {
65
+ id: string;
66
+ kind: 'resource';
67
+ data: AwsPortalRelationshipResourceNodeData<AccountId>;
68
+ } | {
69
+ id: string;
70
+ kind: 'synthetic';
71
+ data: AwsPortalRelationshipSyntheticNodeData<AccountId>;
72
+ };
73
+ export type AwsPortalRelationshipNodeKind = AwsPortalRelationshipNode['kind'];
74
+ export type AwsPortalRelationshipNodeData<AccountId extends string = string> = AwsPortalRelationshipNode<AccountId>['data'];
75
+ /** @deprecated Reduced Azure-derived shape retained only for explicit migration from the former declaration. */
76
+ export type AwsPortalRelationshipLegacyNodeData<AccountId extends string = string> = AwsPublicArtifactForbiddenCredentialFields & {
77
+ accountId: AccountId;
78
+ region?: string;
79
+ name?: string;
80
+ type?: string;
81
+ location?: string;
82
+ tags?: Record<string, string>;
83
+ placeholder?: boolean;
84
+ displayName?: string;
85
+ icon?: string;
86
+ label1?: string;
87
+ label2?: string;
88
+ label3?: string;
89
+ resourceGroup?: never;
90
+ properties?: never;
91
+ };
92
+ /** @deprecated Use `AwsPortalRelationshipNode` in new producers and consumers. */
93
+ export interface AwsPortalRelationshipLegacyNode<AccountId extends string = string> {
94
+ id: string;
95
+ kind: 'account' | 'region' | 'resource' | 'location' | 'availabilityZone';
96
+ data: AwsPortalRelationshipLegacyNodeData<AccountId>;
97
+ cost?: RelationshipSnapshotCostOverlay;
98
+ }
99
+ export type AwsPortalRelationshipEdgeKind = 'contains' | 'depends_on';
100
+ export interface AwsPortalRelationshipEdgeEvidence {
101
+ method: AwsPortalRelationshipEvidenceMethod;
102
+ sourceFamily: AwsPortalRelationshipDiscoveryFamily | 'graph-scope';
103
+ field?: string;
104
+ matchedValue?: string;
105
+ }
106
+ /** `contains` edges point from the child to its parent. */
107
+ export interface AwsPortalRelationshipEdge {
108
+ id: string;
109
+ from: string;
110
+ to: string;
111
+ kind: AwsPortalRelationshipEdgeKind;
112
+ relationshipTypes: [AwsPortalRelationshipType, ...AwsPortalRelationshipType[]];
113
+ confidence: AwsPortalRelationshipEdgeConfidence;
114
+ evidence: [AwsPortalRelationshipEdgeEvidence, ...AwsPortalRelationshipEdgeEvidence[]];
115
+ }
116
+ export interface AwsPortalRelationshipUnresolvedReference {
117
+ sourceNodeId: string;
118
+ relationshipType: AwsPortalRelationshipType;
119
+ sourceFamily: AwsPortalRelationshipDiscoveryFamily;
120
+ field: string;
121
+ matchedValue: string;
122
+ expectedTargetFamily: 'ec2-instance' | 'vpc' | 'subnet' | 'internet-gateway' | 'virtual-private-gateway' | 'security-group' | 'rds-db-cluster' | 'rds-db-instance';
123
+ }
124
+ export interface AwsPortalRelationshipCostOverlay<AccountId extends string = string> {
125
+ source: {
126
+ artifactType: 'resource-collection';
127
+ logicalName: 'resources.json.gz';
128
+ artifactGeneration: ArtifactGeneration;
129
+ sha256: string;
130
+ scope: AwsPortalResourceCollectionScope<AccountId>;
131
+ };
132
+ coverage: {
133
+ totalResourceCount: number;
134
+ billedResourceCount: number;
135
+ matchedResourceNodeCount: number;
136
+ unmatchedBillingExpenseCount: number;
137
+ };
138
+ billing: AwsPortalResourceCollectionBody<AccountId>['coverage']['billing'];
139
+ }
140
+ interface AwsPortalRelationshipStatsBase {
141
+ totalNodes: number;
142
+ totalEdges: number;
143
+ unresolvedCount: number;
144
+ buildMs?: number;
145
+ snapshotBytes?: number;
146
+ }
147
+ export type AwsPortalRelationshipStats = AwsPortalRelationshipStatsBase & ({
148
+ truncated: false;
149
+ truncation?: never;
150
+ } | {
151
+ truncated: true;
152
+ truncation: {
153
+ reason: 'snapshot-size-limit';
154
+ edgesDroppedCount: number;
155
+ unresolvedDroppedCount: number;
156
+ tagsRemovedFromNodeCount: number;
157
+ };
158
+ });
159
+ export type AwsPortalRelationshipArtifactV2<AccountId extends string = string, RunId extends string = string> = AwsPublicArtifactEnvelope<'relationships', AccountId, RunId> & {
160
+ portalSchemaVersion: 1;
161
+ relationshipSchemaVersion: typeof AWS_PORTAL_RELATIONSHIP_SCHEMA_VERSION;
162
+ logicalName: typeof AWS_PORTAL_RELATIONSHIP_LOGICAL_NAME;
163
+ generatedAt: string;
164
+ source: {
165
+ artifactType: 'relationship-graph';
166
+ artifactVersion: 1;
167
+ generatedAt: string;
168
+ };
169
+ scope: AwsPortalRelationshipScope<AccountId>;
170
+ currency?: string;
171
+ currencySymbol?: string;
172
+ nodes: AwsPortalRelationshipNode<AccountId>[];
173
+ edges: AwsPortalRelationshipEdge[];
174
+ unresolved: AwsPortalRelationshipUnresolvedReference[];
175
+ coverage: {
176
+ families: AwsPortalRelationshipFamilyCoverage[];
177
+ };
178
+ costOverlay?: AwsPortalRelationshipCostOverlay<AccountId>;
179
+ stats: AwsPortalRelationshipStats;
180
+ };
181
+ /** @deprecated Former reduced declaration; it has no qualified Portal v2 wire metadata. */
182
+ export type AwsPortalRelationshipArtifactV1<AccountId extends string = string, RunId extends string = string> = AwsPublicArtifactEnvelope<'relationships', AccountId, RunId> & {
183
+ generatedAt: string;
184
+ currency?: string;
185
+ currencySymbol?: string;
186
+ nodes: AwsPortalRelationshipLegacyNode<AccountId>[];
187
+ edges: RelationshipSnapshotEdge[];
188
+ unresolved: UnresolvedRelationshipReference[];
189
+ stats: RelationshipSnapshotStats;
190
+ };
191
+ /** @deprecated Use the versioned `AwsPortalRelationshipArtifactV1` name when migrating legacy declarations. */
192
+ export type AwsPortalRelationshipLegacyArtifact<AccountId extends string = string, RunId extends string = string> = AwsPortalRelationshipArtifactV1<AccountId, RunId>;
193
+ /** Current lossless AWS relationship artifact. */
194
+ export type AwsPortalRelationshipArtifact<AccountId extends string = string, RunId extends string = string> = AwsPortalRelationshipArtifactV2<AccountId, RunId>;
195
+ export {};
196
+ //# sourceMappingURL=portalRelationshipPublicArtifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portalRelationshipPublicArtifacts.d.ts","sourceRoot":"","sources":["../../src/aws/portalRelationshipPublicArtifacts.ts"],"names":[],"mappings":"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"}