@robinmordasiewicz/f5xc-api-mcp 3.5.0 → 3.7.0
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.
- package/dist/generator/dependency-extractor.d.ts +103 -0
- package/dist/generator/dependency-extractor.d.ts.map +1 -0
- package/dist/generator/dependency-extractor.js +473 -0
- package/dist/generator/dependency-extractor.js.map +1 -0
- package/dist/generator/dependency-graph.d.ts +67 -0
- package/dist/generator/dependency-graph.d.ts.map +1 -0
- package/dist/generator/dependency-graph.js +330 -0
- package/dist/generator/dependency-graph.js.map +1 -0
- package/dist/generator/dependency-types.d.ts +206 -0
- package/dist/generator/dependency-types.d.ts.map +1 -0
- package/dist/generator/dependency-types.js +37 -0
- package/dist/generator/dependency-types.js.map +1 -0
- package/dist/generator/openapi-parser.d.ts +7 -0
- package/dist/generator/openapi-parser.d.ts.map +1 -1
- package/dist/generator/openapi-parser.js +41 -0
- package/dist/generator/openapi-parser.js.map +1 -1
- package/dist/generator/tool-generator.d.ts +17 -0
- package/dist/generator/tool-generator.d.ts.map +1 -1
- package/dist/generator/tool-generator.js +25 -0
- package/dist/generator/tool-generator.js.map +1 -1
- package/dist/tools/discovery/dependencies.d.ts +113 -0
- package/dist/tools/discovery/dependencies.d.ts.map +1 -0
- package/dist/tools/discovery/dependencies.js +258 -0
- package/dist/tools/discovery/dependencies.js.map +1 -0
- package/dist/tools/discovery/index.d.ts +33 -0
- package/dist/tools/discovery/index.d.ts.map +1 -1
- package/dist/tools/discovery/index.js +43 -0
- package/dist/tools/discovery/index.js.map +1 -1
- package/dist/tools/generated/admin_console_and_ui/index.d.ts.map +1 -1
- package/dist/tools/generated/admin_console_and_ui/index.js +6 -0
- package/dist/tools/generated/admin_console_and_ui/index.js.map +1 -1
- package/dist/tools/generated/api/index.d.ts.map +1 -1
- package/dist/tools/generated/api/index.js +1206 -2
- package/dist/tools/generated/api/index.js.map +1 -1
- package/dist/tools/generated/authentication/index.d.ts.map +1 -1
- package/dist/tools/generated/authentication/index.js +49 -0
- package/dist/tools/generated/authentication/index.js.map +1 -1
- package/dist/tools/generated/bigip/index.d.ts.map +1 -1
- package/dist/tools/generated/bigip/index.js +319 -0
- package/dist/tools/generated/bigip/index.js.map +1 -1
- package/dist/tools/generated/billing_and_usage/index.d.ts.map +1 -1
- package/dist/tools/generated/billing_and_usage/index.js +169 -0
- package/dist/tools/generated/billing_and_usage/index.js.map +1 -1
- package/dist/tools/generated/blindfold/index.d.ts.map +1 -1
- package/dist/tools/generated/blindfold/index.js +328 -0
- package/dist/tools/generated/blindfold/index.js.map +1 -1
- package/dist/tools/generated/bot_and_threat_defense/index.d.ts.map +1 -1
- package/dist/tools/generated/bot_and_threat_defense/index.js +482 -0
- package/dist/tools/generated/bot_and_threat_defense/index.js.map +1 -1
- package/dist/tools/generated/cdn/index.d.ts.map +1 -1
- package/dist/tools/generated/cdn/index.js +347 -0
- package/dist/tools/generated/cdn/index.js.map +1 -1
- package/dist/tools/generated/ce_management/index.d.ts.map +1 -1
- package/dist/tools/generated/ce_management/index.js +375 -0
- package/dist/tools/generated/ce_management/index.js.map +1 -1
- package/dist/tools/generated/certificates/index.d.ts.map +1 -1
- package/dist/tools/generated/certificates/index.js +268 -0
- package/dist/tools/generated/certificates/index.js.map +1 -1
- package/dist/tools/generated/cloud_infrastructure/index.d.ts.map +1 -1
- package/dist/tools/generated/cloud_infrastructure/index.js +374 -0
- package/dist/tools/generated/cloud_infrastructure/index.js.map +1 -1
- package/dist/tools/generated/container_services/index.d.ts.map +1 -1
- package/dist/tools/generated/container_services/index.js +212 -0
- package/dist/tools/generated/container_services/index.js.map +1 -1
- package/dist/tools/generated/data_and_privacy_security/index.d.ts.map +1 -1
- package/dist/tools/generated/data_and_privacy_security/index.js +143 -0
- package/dist/tools/generated/data_and_privacy_security/index.js.map +1 -1
- package/dist/tools/generated/data_intelligence/index.d.ts.map +1 -1
- package/dist/tools/generated/data_intelligence/index.js +105 -0
- package/dist/tools/generated/data_intelligence/index.js.map +1 -1
- package/dist/tools/generated/ddos/index.d.ts.map +1 -1
- package/dist/tools/generated/ddos/index.js +664 -0
- package/dist/tools/generated/ddos/index.js.map +1 -1
- package/dist/tools/generated/dns/index.d.ts.map +1 -1
- package/dist/tools/generated/dns/index.js +492 -0
- package/dist/tools/generated/dns/index.js.map +1 -1
- package/dist/tools/generated/generative_ai/index.d.ts.map +1 -1
- package/dist/tools/generated/generative_ai/index.js +47 -0
- package/dist/tools/generated/generative_ai/index.js.map +1 -1
- package/dist/tools/generated/managed_kubernetes/index.d.ts.map +1 -1
- package/dist/tools/generated/managed_kubernetes/index.js +510 -0
- package/dist/tools/generated/managed_kubernetes/index.js.map +1 -1
- package/dist/tools/generated/marketplace/index.d.ts.map +1 -1
- package/dist/tools/generated/marketplace/index.js +307 -0
- package/dist/tools/generated/marketplace/index.js.map +1 -1
- package/dist/tools/generated/network/index.d.ts.map +1 -1
- package/dist/tools/generated/network/index.js +1292 -0
- package/dist/tools/generated/network/index.js.map +1 -1
- package/dist/tools/generated/network_security/index.d.ts.map +1 -1
- package/dist/tools/generated/network_security/index.js +1819 -9
- package/dist/tools/generated/network_security/index.js.map +1 -1
- package/dist/tools/generated/nginx_one/index.d.ts.map +1 -1
- package/dist/tools/generated/nginx_one/index.js +94 -0
- package/dist/tools/generated/nginx_one/index.js.map +1 -1
- package/dist/tools/generated/object_storage/index.d.ts.map +1 -1
- package/dist/tools/generated/object_storage/index.js +32 -0
- package/dist/tools/generated/object_storage/index.js.map +1 -1
- package/dist/tools/generated/observability/index.d.ts.map +1 -1
- package/dist/tools/generated/observability/index.js +265 -0
- package/dist/tools/generated/observability/index.js.map +1 -1
- package/dist/tools/generated/rate_limiting/index.d.ts.map +1 -1
- package/dist/tools/generated/rate_limiting/index.js +396 -0
- package/dist/tools/generated/rate_limiting/index.js.map +1 -1
- package/dist/tools/generated/secops_and_incident_response/index.d.ts.map +1 -1
- package/dist/tools/generated/secops_and_incident_response/index.js +132 -0
- package/dist/tools/generated/secops_and_incident_response/index.js.map +1 -1
- package/dist/tools/generated/service_mesh/index.d.ts.map +1 -1
- package/dist/tools/generated/service_mesh/index.js +1062 -0
- package/dist/tools/generated/service_mesh/index.js.map +1 -1
- package/dist/tools/generated/shape/index.d.ts.map +1 -1
- package/dist/tools/generated/shape/index.js +917 -0
- package/dist/tools/generated/shape/index.js.map +1 -1
- package/dist/tools/generated/sites/index.d.ts.map +1 -1
- package/dist/tools/generated/sites/index.js +1666 -0
- package/dist/tools/generated/sites/index.js.map +1 -1
- package/dist/tools/generated/statistics/index.d.ts.map +1 -1
- package/dist/tools/generated/statistics/index.js +574 -0
- package/dist/tools/generated/statistics/index.js.map +1 -1
- package/dist/tools/generated/support/index.d.ts.map +1 -1
- package/dist/tools/generated/support/index.js +274 -0
- package/dist/tools/generated/support/index.js.map +1 -1
- package/dist/tools/generated/telemetry_and_insights/index.d.ts.map +1 -1
- package/dist/tools/generated/telemetry_and_insights/index.js +100 -0
- package/dist/tools/generated/telemetry_and_insights/index.js.map +1 -1
- package/dist/tools/generated/tenant_and_identity/index.d.ts.map +1 -1
- package/dist/tools/generated/tenant_and_identity/index.js +1378 -0
- package/dist/tools/generated/tenant_and_identity/index.js.map +1 -1
- package/dist/tools/generated/threat_campaign/index.d.ts.map +1 -1
- package/dist/tools/generated/threat_campaign/index.js +3 -0
- package/dist/tools/generated/threat_campaign/index.js.map +1 -1
- package/dist/tools/generated/users/index.d.ts.map +1 -1
- package/dist/tools/generated/users/index.js +139 -0
- package/dist/tools/generated/users/index.js.map +1 -1
- package/dist/tools/generated/virtual/index.d.ts.map +1 -1
- package/dist/tools/generated/virtual/index.js +1160 -0
- package/dist/tools/generated/virtual/index.js.map +1 -1
- package/dist/tools/generated/vpm_and_node_management/index.d.ts.map +1 -1
- package/dist/tools/generated/vpm_and_node_management/index.js +3 -0
- package/dist/tools/generated/vpm_and_node_management/index.js.map +1 -1
- package/dist/tools/generated/waf/index.d.ts.map +1 -1
- package/dist/tools/generated/waf/index.js +784 -0
- package/dist/tools/generated/waf/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Graph Builder
|
|
3
|
+
*
|
|
4
|
+
* Builds a complete resource dependency graph from parsed operations,
|
|
5
|
+
* computes reverse dependencies, and provides topological sorting
|
|
6
|
+
* for resource creation order.
|
|
7
|
+
*/
|
|
8
|
+
import { createResourceKey, parseResourceKey } from "./dependency-types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Build a complete dependency graph from parsed specifications
|
|
11
|
+
*
|
|
12
|
+
* @param specs - Array of parsed specification files
|
|
13
|
+
* @param options - Graph generation options
|
|
14
|
+
* @returns Complete dependency graph
|
|
15
|
+
*/
|
|
16
|
+
export function buildDependencyGraph(specs, options = {}) {
|
|
17
|
+
const opts = {
|
|
18
|
+
detectInlineRefs: true,
|
|
19
|
+
computeCreationOrder: true,
|
|
20
|
+
buildReverseDeps: true,
|
|
21
|
+
maxDepth: 10,
|
|
22
|
+
...options,
|
|
23
|
+
};
|
|
24
|
+
// Collect all operations from all specs
|
|
25
|
+
const allOperations = [];
|
|
26
|
+
for (const spec of specs) {
|
|
27
|
+
allOperations.push(...spec.operations);
|
|
28
|
+
}
|
|
29
|
+
// Build resource map: domain/resource -> operations
|
|
30
|
+
const resourceMap = new Map();
|
|
31
|
+
for (const op of allOperations) {
|
|
32
|
+
const key = createResourceKey(op.domain, op.resource);
|
|
33
|
+
const existing = resourceMap.get(key) || [];
|
|
34
|
+
existing.push(op);
|
|
35
|
+
resourceMap.set(key, existing);
|
|
36
|
+
}
|
|
37
|
+
// Build dependencies map
|
|
38
|
+
const dependencies = {};
|
|
39
|
+
for (const [resourceKey, operations] of resourceMap) {
|
|
40
|
+
const { domain, resource } = parseResourceKey(resourceKey);
|
|
41
|
+
// Aggregate all dependencies, oneOf groups, and subscriptions from all operations
|
|
42
|
+
const allRefs = [];
|
|
43
|
+
const allOneOfGroups = [];
|
|
44
|
+
const allSubscriptions = [];
|
|
45
|
+
for (const op of operations) {
|
|
46
|
+
allRefs.push(...op.dependencies);
|
|
47
|
+
allOneOfGroups.push(...op.oneOfGroups);
|
|
48
|
+
allSubscriptions.push(...op.subscriptionRequirements);
|
|
49
|
+
}
|
|
50
|
+
// Deduplicate references by resourceType
|
|
51
|
+
const uniqueRefs = deduplicateReferences(allRefs);
|
|
52
|
+
// Deduplicate oneOf groups by choiceField
|
|
53
|
+
const uniqueOneOfGroups = deduplicateOneOfGroups(allOneOfGroups);
|
|
54
|
+
// Deduplicate subscriptions by addonService
|
|
55
|
+
const uniqueSubscriptions = deduplicateSubscriptions(allSubscriptions);
|
|
56
|
+
dependencies[resourceKey] = {
|
|
57
|
+
resource,
|
|
58
|
+
domain,
|
|
59
|
+
requires: uniqueRefs,
|
|
60
|
+
requiredBy: [], // Will be computed by buildReverseDependencies
|
|
61
|
+
oneOfGroups: uniqueOneOfGroups,
|
|
62
|
+
subscriptions: uniqueSubscriptions,
|
|
63
|
+
creationOrder: [], // Will be computed by computeCreationOrder
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
// Build reverse dependencies
|
|
67
|
+
const reverseDependencies = {};
|
|
68
|
+
if (opts.buildReverseDeps) {
|
|
69
|
+
buildReverseDependencies(dependencies, reverseDependencies);
|
|
70
|
+
}
|
|
71
|
+
// Compute creation order for each resource
|
|
72
|
+
if (opts.computeCreationOrder) {
|
|
73
|
+
for (const resourceKey of Object.keys(dependencies)) {
|
|
74
|
+
const dep = dependencies[resourceKey];
|
|
75
|
+
if (dep) {
|
|
76
|
+
dep.creationOrder = computeCreationOrder(resourceKey, dependencies, opts.maxDepth);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Build addon service map
|
|
81
|
+
const addonServiceMap = {};
|
|
82
|
+
for (const [resourceKey, deps] of Object.entries(dependencies)) {
|
|
83
|
+
for (const sub of deps.subscriptions) {
|
|
84
|
+
const existingList = addonServiceMap[sub.addonService];
|
|
85
|
+
if (!existingList) {
|
|
86
|
+
addonServiceMap[sub.addonService] = [resourceKey];
|
|
87
|
+
}
|
|
88
|
+
else if (!existingList.includes(resourceKey)) {
|
|
89
|
+
existingList.push(resourceKey);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
version: "1.0.0",
|
|
95
|
+
generatedAt: opts.generatedAt || new Date().toISOString(),
|
|
96
|
+
totalResources: Object.keys(dependencies).length,
|
|
97
|
+
dependencies,
|
|
98
|
+
addonServiceMap,
|
|
99
|
+
reverseDependencies,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Deduplicate resource references by resourceType
|
|
104
|
+
*/
|
|
105
|
+
function deduplicateReferences(refs) {
|
|
106
|
+
const seen = new Map();
|
|
107
|
+
for (const ref of refs) {
|
|
108
|
+
const key = `${ref.domain}/${ref.resourceType}`;
|
|
109
|
+
const existing = seen.get(key);
|
|
110
|
+
if (!existing) {
|
|
111
|
+
seen.set(key, ref);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// Merge: required takes precedence, inline is combined
|
|
115
|
+
seen.set(key, {
|
|
116
|
+
...existing,
|
|
117
|
+
required: existing.required || ref.required,
|
|
118
|
+
inline: existing.inline || ref.inline,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return Array.from(seen.values());
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Deduplicate oneOf groups by choiceField
|
|
126
|
+
*/
|
|
127
|
+
function deduplicateOneOfGroups(groups) {
|
|
128
|
+
const seen = new Map();
|
|
129
|
+
for (const group of groups) {
|
|
130
|
+
if (!seen.has(group.choiceField)) {
|
|
131
|
+
seen.set(group.choiceField, group);
|
|
132
|
+
}
|
|
133
|
+
// If already seen, keep the first occurrence
|
|
134
|
+
}
|
|
135
|
+
return Array.from(seen.values());
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Deduplicate subscriptions by addonService
|
|
139
|
+
*/
|
|
140
|
+
function deduplicateSubscriptions(subs) {
|
|
141
|
+
const seen = new Map();
|
|
142
|
+
for (const sub of subs) {
|
|
143
|
+
if (!seen.has(sub.addonService)) {
|
|
144
|
+
seen.set(sub.addonService, sub);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return Array.from(seen.values());
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Build reverse dependency map (requiredBy relationships)
|
|
151
|
+
*/
|
|
152
|
+
function buildReverseDependencies(dependencies, reverseDeps) {
|
|
153
|
+
for (const deps of Object.values(dependencies)) {
|
|
154
|
+
for (const ref of deps.requires) {
|
|
155
|
+
const refKey = createResourceKey(ref.domain || "unknown", ref.resourceType);
|
|
156
|
+
if (!reverseDeps[refKey]) {
|
|
157
|
+
reverseDeps[refKey] = [];
|
|
158
|
+
}
|
|
159
|
+
// Add reverse reference
|
|
160
|
+
reverseDeps[refKey].push({
|
|
161
|
+
resourceType: deps.resource,
|
|
162
|
+
domain: deps.domain,
|
|
163
|
+
fieldPath: ref.fieldPath,
|
|
164
|
+
required: ref.required,
|
|
165
|
+
inline: ref.inline,
|
|
166
|
+
});
|
|
167
|
+
// Also update the requiredBy on the target if it exists
|
|
168
|
+
const targetDep = dependencies[refKey];
|
|
169
|
+
if (targetDep) {
|
|
170
|
+
targetDep.requiredBy.push({
|
|
171
|
+
resourceType: deps.resource,
|
|
172
|
+
domain: deps.domain,
|
|
173
|
+
fieldPath: ref.fieldPath,
|
|
174
|
+
required: ref.required,
|
|
175
|
+
inline: ref.inline,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Compute topologically sorted creation order for a resource
|
|
183
|
+
* Uses depth-first search with cycle detection
|
|
184
|
+
*
|
|
185
|
+
* @param resourceKey - The resource to compute creation order for
|
|
186
|
+
* @param dependencies - All resource dependencies
|
|
187
|
+
* @param maxDepth - Maximum depth for traversal
|
|
188
|
+
* @returns Array of resource keys in creation order
|
|
189
|
+
*/
|
|
190
|
+
export function computeCreationOrder(resourceKey, dependencies, maxDepth = 10) {
|
|
191
|
+
const order = [];
|
|
192
|
+
const visited = new Set();
|
|
193
|
+
const inProgress = new Set(); // For cycle detection
|
|
194
|
+
function visit(key, depth) {
|
|
195
|
+
if (depth > maxDepth) {
|
|
196
|
+
return; // Prevent infinite recursion
|
|
197
|
+
}
|
|
198
|
+
if (inProgress.has(key)) {
|
|
199
|
+
// Cycle detected, skip
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
if (visited.has(key)) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
inProgress.add(key);
|
|
206
|
+
const deps = dependencies[key];
|
|
207
|
+
if (deps) {
|
|
208
|
+
// Visit required dependencies first
|
|
209
|
+
for (const ref of deps.requires) {
|
|
210
|
+
const refKey = createResourceKey(ref.domain || "unknown", ref.resourceType);
|
|
211
|
+
visit(refKey, depth + 1);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
inProgress.delete(key);
|
|
215
|
+
visited.add(key);
|
|
216
|
+
order.push(key);
|
|
217
|
+
}
|
|
218
|
+
visit(resourceKey, 0);
|
|
219
|
+
return order;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Serialize a dependency graph to JSON-compatible format
|
|
223
|
+
*/
|
|
224
|
+
export function serializeDependencyGraph(graph) {
|
|
225
|
+
const serialized = {
|
|
226
|
+
version: graph.version,
|
|
227
|
+
generatedAt: graph.generatedAt,
|
|
228
|
+
totalResources: graph.totalResources,
|
|
229
|
+
dependencies: graph.dependencies,
|
|
230
|
+
addonServiceMap: graph.addonServiceMap,
|
|
231
|
+
reverseDependencies: graph.reverseDependencies,
|
|
232
|
+
};
|
|
233
|
+
return JSON.stringify(serialized, null, 2);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Deserialize a dependency graph from JSON
|
|
237
|
+
*/
|
|
238
|
+
export function deserializeDependencyGraph(json) {
|
|
239
|
+
const parsed = JSON.parse(json);
|
|
240
|
+
return {
|
|
241
|
+
version: parsed.version,
|
|
242
|
+
generatedAt: parsed.generatedAt,
|
|
243
|
+
totalResources: parsed.totalResources,
|
|
244
|
+
dependencies: parsed.dependencies,
|
|
245
|
+
addonServiceMap: parsed.addonServiceMap,
|
|
246
|
+
reverseDependencies: parsed.reverseDependencies,
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get resources that must be created before a given resource
|
|
251
|
+
*
|
|
252
|
+
* @param resourceKey - The target resource ("domain/resource")
|
|
253
|
+
* @param graph - The dependency graph
|
|
254
|
+
* @returns Array of prerequisite resource keys
|
|
255
|
+
*/
|
|
256
|
+
export function getPrerequisites(resourceKey, graph) {
|
|
257
|
+
const deps = graph.dependencies[resourceKey];
|
|
258
|
+
if (!deps) {
|
|
259
|
+
return [];
|
|
260
|
+
}
|
|
261
|
+
return deps.requires.map((ref) => createResourceKey(ref.domain || "unknown", ref.resourceType));
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get resources that depend on a given resource
|
|
265
|
+
*
|
|
266
|
+
* @param resourceKey - The target resource ("domain/resource")
|
|
267
|
+
* @param graph - The dependency graph
|
|
268
|
+
* @returns Array of dependent resource keys
|
|
269
|
+
*/
|
|
270
|
+
export function getDependents(resourceKey, graph) {
|
|
271
|
+
const reverseDeps = graph.reverseDependencies[resourceKey];
|
|
272
|
+
if (!reverseDeps) {
|
|
273
|
+
return [];
|
|
274
|
+
}
|
|
275
|
+
return reverseDeps.map((ref) => createResourceKey(ref.domain, ref.resourceType));
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Get all resources that require a specific subscription
|
|
279
|
+
*
|
|
280
|
+
* @param addonService - The addon service ID
|
|
281
|
+
* @param graph - The dependency graph
|
|
282
|
+
* @returns Array of resource keys requiring this subscription
|
|
283
|
+
*/
|
|
284
|
+
export function getResourcesBySubscription(addonService, graph) {
|
|
285
|
+
return graph.addonServiceMap[addonService] || [];
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Validate the dependency graph for cycles
|
|
289
|
+
*
|
|
290
|
+
* @param graph - The dependency graph to validate
|
|
291
|
+
* @returns Array of cycle paths found (empty if no cycles)
|
|
292
|
+
*/
|
|
293
|
+
export function validateGraph(graph) {
|
|
294
|
+
const cycles = [];
|
|
295
|
+
const visited = new Set();
|
|
296
|
+
const recStack = new Set();
|
|
297
|
+
const path = [];
|
|
298
|
+
function dfs(key) {
|
|
299
|
+
if (recStack.has(key)) {
|
|
300
|
+
// Found a cycle - extract the cycle from current path
|
|
301
|
+
const cycleStart = path.indexOf(key);
|
|
302
|
+
if (cycleStart >= 0) {
|
|
303
|
+
cycles.push([...path.slice(cycleStart), key]);
|
|
304
|
+
}
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
if (visited.has(key)) {
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
visited.add(key);
|
|
311
|
+
recStack.add(key);
|
|
312
|
+
path.push(key);
|
|
313
|
+
const deps = graph.dependencies[key];
|
|
314
|
+
if (deps) {
|
|
315
|
+
for (const ref of deps.requires) {
|
|
316
|
+
const refKey = createResourceKey(ref.domain || "unknown", ref.resourceType);
|
|
317
|
+
dfs(refKey);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
path.pop();
|
|
321
|
+
recStack.delete(key);
|
|
322
|
+
}
|
|
323
|
+
for (const key of Object.keys(graph.dependencies)) {
|
|
324
|
+
if (!visited.has(key)) {
|
|
325
|
+
dfs(key);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return cycles;
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=dependency-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-graph.js","sourceRoot":"","sources":["../../src/generator/dependency-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Intelligence Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Types for resource dependency tracking, oneOf/anyOf field extraction,
|
|
5
|
+
* subscription awareness, and sequencing intelligence.
|
|
6
|
+
*
|
|
7
|
+
* These types enable LLMs to understand resource relationships and
|
|
8
|
+
* execute operations in the correct order.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Represents a reference from one resource to another via $ref patterns
|
|
12
|
+
*/
|
|
13
|
+
export interface ResourceReference {
|
|
14
|
+
/** The type of resource being referenced (e.g., "origin_pool") */
|
|
15
|
+
resourceType: string;
|
|
16
|
+
/** The domain the referenced resource belongs to (e.g., "network") */
|
|
17
|
+
domain: string;
|
|
18
|
+
/** The JSON path where this reference appears (e.g., "spec.default_route_pools") */
|
|
19
|
+
fieldPath: string;
|
|
20
|
+
/** Whether this reference is required for the parent resource to function */
|
|
21
|
+
required: boolean;
|
|
22
|
+
/** Whether the reference allows inline definition vs external reference only */
|
|
23
|
+
inline: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Represents a group of mutually exclusive fields (oneOf/anyOf patterns)
|
|
27
|
+
* Extracted from x-ves-oneof-field-* OpenAPI extensions
|
|
28
|
+
*/
|
|
29
|
+
export interface OneOfGroup {
|
|
30
|
+
/** The name of the choice field (e.g., "advertise_choice") */
|
|
31
|
+
choiceField: string;
|
|
32
|
+
/** Available options for this choice (e.g., ["site", "virtual_site", "public_default_vip"]) */
|
|
33
|
+
options: string[];
|
|
34
|
+
/** JSON path where this oneOf group appears */
|
|
35
|
+
fieldPath: string;
|
|
36
|
+
/** Human-readable description of the choice */
|
|
37
|
+
description?: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Represents a subscription or addon service requirement
|
|
41
|
+
*/
|
|
42
|
+
export interface SubscriptionRequirement {
|
|
43
|
+
/** Internal addon service identifier (e.g., "f5xc_waap_advanced") */
|
|
44
|
+
addonService: string;
|
|
45
|
+
/** Human-readable display name */
|
|
46
|
+
displayName: string;
|
|
47
|
+
/** Subscription tier level (e.g., "advanced", "premium") */
|
|
48
|
+
tier: string;
|
|
49
|
+
/** Whether this subscription is required or optional for the resource */
|
|
50
|
+
required: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Complete dependency information for a single resource
|
|
54
|
+
*/
|
|
55
|
+
export interface ResourceDependencies {
|
|
56
|
+
/** Resource name (e.g., "http-loadbalancer") */
|
|
57
|
+
resource: string;
|
|
58
|
+
/** Domain the resource belongs to (e.g., "virtual") */
|
|
59
|
+
domain: string;
|
|
60
|
+
/** Resources this resource depends on (must exist before creation) */
|
|
61
|
+
requires: ResourceReference[];
|
|
62
|
+
/** Resources that depend on this resource (will break if deleted) */
|
|
63
|
+
requiredBy: ResourceReference[];
|
|
64
|
+
/** Mutually exclusive field groups within this resource */
|
|
65
|
+
oneOfGroups: OneOfGroup[];
|
|
66
|
+
/** Subscription/addon requirements for this resource */
|
|
67
|
+
subscriptions: SubscriptionRequirement[];
|
|
68
|
+
/** Topologically sorted creation order for this resource and its dependencies */
|
|
69
|
+
creationOrder: string[];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Complete dependency graph for the entire API
|
|
73
|
+
*/
|
|
74
|
+
export interface DependencyGraph {
|
|
75
|
+
/** Schema version for forwards compatibility */
|
|
76
|
+
version: string;
|
|
77
|
+
/** Timestamp when the graph was generated */
|
|
78
|
+
generatedAt: string;
|
|
79
|
+
/** Total number of resources in the graph */
|
|
80
|
+
totalResources: number;
|
|
81
|
+
/** Map of "domain/resource" -> ResourceDependencies */
|
|
82
|
+
dependencies: Record<string, ResourceDependencies>;
|
|
83
|
+
/** Map of addon service ID -> list of resources requiring it */
|
|
84
|
+
addonServiceMap: Record<string, string[]>;
|
|
85
|
+
/** Reverse dependency lookup: "domain/resource" -> resources that depend on it */
|
|
86
|
+
reverseDependencies: Record<string, ResourceReference[]>;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Serializable version of DependencyGraph for JSON storage
|
|
90
|
+
* Uses Record instead of Map for JSON compatibility
|
|
91
|
+
*/
|
|
92
|
+
export interface SerializedDependencyGraph {
|
|
93
|
+
version: string;
|
|
94
|
+
generatedAt: string;
|
|
95
|
+
totalResources: number;
|
|
96
|
+
dependencies: Record<string, ResourceDependencies>;
|
|
97
|
+
addonServiceMap: Record<string, string[]>;
|
|
98
|
+
reverseDependencies: Record<string, ResourceReference[]>;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Result of parsing a $ref string from OpenAPI schema
|
|
102
|
+
*/
|
|
103
|
+
export interface ParsedRef {
|
|
104
|
+
/** Full schema path (e.g., "#/components/schemas/origin_poolCreateRequest") */
|
|
105
|
+
fullPath: string;
|
|
106
|
+
/** Extracted schema name (e.g., "origin_poolCreateRequest") */
|
|
107
|
+
schemaName: string;
|
|
108
|
+
/** Inferred resource type (e.g., "origin_pool") */
|
|
109
|
+
resourceType: string | null;
|
|
110
|
+
/** Inferred operation type (e.g., "create", "get", "list") */
|
|
111
|
+
operationType: string | null;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extracted dependency information from a single operation's schema
|
|
115
|
+
*/
|
|
116
|
+
export interface ExtractedDependencies {
|
|
117
|
+
/** Direct resource references found in the schema */
|
|
118
|
+
references: ResourceReference[];
|
|
119
|
+
/** OneOf groups found in the schema */
|
|
120
|
+
oneOfGroups: OneOfGroup[];
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Addon service definition extracted from billing specs
|
|
124
|
+
*/
|
|
125
|
+
export interface AddonServiceDefinition {
|
|
126
|
+
/** Internal service identifier */
|
|
127
|
+
serviceId: string;
|
|
128
|
+
/** Human-readable name */
|
|
129
|
+
displayName: string;
|
|
130
|
+
/** Service category/tier */
|
|
131
|
+
tier: string;
|
|
132
|
+
/** Description of the service */
|
|
133
|
+
description?: string;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Options for dependency graph generation
|
|
137
|
+
*/
|
|
138
|
+
export interface DependencyGraphOptions {
|
|
139
|
+
/** Whether to include inline reference capability detection */
|
|
140
|
+
detectInlineRefs: boolean;
|
|
141
|
+
/** Whether to compute full creation order sequences */
|
|
142
|
+
computeCreationOrder: boolean;
|
|
143
|
+
/** Whether to build reverse dependency map */
|
|
144
|
+
buildReverseDeps: boolean;
|
|
145
|
+
/** Maximum depth for dependency chain traversal */
|
|
146
|
+
maxDepth: number;
|
|
147
|
+
/** Fixed timestamp for deterministic generation (optional) */
|
|
148
|
+
generatedAt?: string;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Default options for dependency graph generation
|
|
152
|
+
*/
|
|
153
|
+
export declare const DEFAULT_DEPENDENCY_OPTIONS: DependencyGraphOptions;
|
|
154
|
+
/**
|
|
155
|
+
* Discovery tool response format for dependency queries
|
|
156
|
+
*/
|
|
157
|
+
export interface DependencyDiscoveryResponse {
|
|
158
|
+
/** The queried resource */
|
|
159
|
+
resource: string;
|
|
160
|
+
/** The queried domain */
|
|
161
|
+
domain: string;
|
|
162
|
+
/** Human-readable list of prerequisites */
|
|
163
|
+
prerequisites: string[];
|
|
164
|
+
/** Human-readable list of dependent resources */
|
|
165
|
+
dependents: string[];
|
|
166
|
+
/** Mutually exclusive field information */
|
|
167
|
+
mutuallyExclusiveFields: Array<{
|
|
168
|
+
field: string;
|
|
169
|
+
options: string[];
|
|
170
|
+
}>;
|
|
171
|
+
/** Required subscription/addon services */
|
|
172
|
+
subscriptionRequirements: string[];
|
|
173
|
+
/** Recommended creation sequence for this resource */
|
|
174
|
+
creationSequence: string[];
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Actions available for the f5xc-api-dependencies discovery tool
|
|
178
|
+
*/
|
|
179
|
+
export type DependencyDiscoveryAction = "prerequisites" | "dependents" | "oneOf" | "subscriptions" | "creationOrder" | "full";
|
|
180
|
+
/**
|
|
181
|
+
* Input schema for the f5xc-api-dependencies discovery tool
|
|
182
|
+
*/
|
|
183
|
+
export interface DependencyDiscoveryInput {
|
|
184
|
+
/** Resource name to query (e.g., "http-loadbalancer") */
|
|
185
|
+
resource: string;
|
|
186
|
+
/** Domain containing the resource (e.g., "virtual") */
|
|
187
|
+
domain: string;
|
|
188
|
+
/** Type of dependency information to retrieve */
|
|
189
|
+
action: DependencyDiscoveryAction;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Resource key format: "domain/resource"
|
|
193
|
+
*/
|
|
194
|
+
export type ResourceKey = `${string}/${string}`;
|
|
195
|
+
/**
|
|
196
|
+
* Helper to create a resource key from domain and resource
|
|
197
|
+
*/
|
|
198
|
+
export declare function createResourceKey(domain: string, resource: string): ResourceKey;
|
|
199
|
+
/**
|
|
200
|
+
* Helper to parse a resource key into domain and resource
|
|
201
|
+
*/
|
|
202
|
+
export declare function parseResourceKey(key: ResourceKey): {
|
|
203
|
+
domain: string;
|
|
204
|
+
resource: string;
|
|
205
|
+
};
|
|
206
|
+
//# sourceMappingURL=dependency-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-types.d.ts","sourceRoot":"","sources":["../../src/generator/dependency-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Intelligence Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Types for resource dependency tracking, oneOf/anyOf field extraction,
|
|
5
|
+
* subscription awareness, and sequencing intelligence.
|
|
6
|
+
*
|
|
7
|
+
* These types enable LLMs to understand resource relationships and
|
|
8
|
+
* execute operations in the correct order.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Default options for dependency graph generation
|
|
12
|
+
*/
|
|
13
|
+
export const DEFAULT_DEPENDENCY_OPTIONS = {
|
|
14
|
+
detectInlineRefs: true,
|
|
15
|
+
computeCreationOrder: true,
|
|
16
|
+
buildReverseDeps: true,
|
|
17
|
+
maxDepth: 10,
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Helper to create a resource key from domain and resource
|
|
21
|
+
*/
|
|
22
|
+
export function createResourceKey(domain, resource) {
|
|
23
|
+
return `${domain}/${resource}`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Helper to parse a resource key into domain and resource
|
|
27
|
+
*/
|
|
28
|
+
export function parseResourceKey(key) {
|
|
29
|
+
const parts = key.split("/");
|
|
30
|
+
const domain = parts[0] ?? "";
|
|
31
|
+
const resource = parts.slice(1).join("/");
|
|
32
|
+
return {
|
|
33
|
+
domain,
|
|
34
|
+
resource,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=dependency-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-types.js","sourceRoot":"","sources":["../../src/generator/dependency-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwJH;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA2B;IAChE,gBAAgB,EAAE,IAAI;IACtB,oBAAoB,EAAE,IAAI;IAC1B,gBAAgB,EAAE,IAAI;IACtB,QAAQ,EAAE,EAAE;CACb,CAAC;AAqDF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,QAAgB;IAChE,OAAO,GAAG,MAAM,IAAI,QAAQ,EAAiB,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAgB;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,OAAO;QACL,MAAM;QACN,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* operation metadata for MCP tool generation.
|
|
6
6
|
*/
|
|
7
7
|
import { z } from "zod";
|
|
8
|
+
import type { ResourceReference, OneOfGroup, SubscriptionRequirement } from "./dependency-types.js";
|
|
8
9
|
/**
|
|
9
10
|
* OpenAPI Schema Types
|
|
10
11
|
*/
|
|
@@ -639,6 +640,12 @@ export interface ParsedOperation {
|
|
|
639
640
|
operationMetadata: OperationMetadata | null;
|
|
640
641
|
/** Curl example from schema x-ves-minimum-configuration */
|
|
641
642
|
curlExample: string | null;
|
|
643
|
+
/** Resource dependencies extracted from $ref patterns */
|
|
644
|
+
dependencies: ResourceReference[];
|
|
645
|
+
/** Mutually exclusive field groups from x-ves-oneof-field-* */
|
|
646
|
+
oneOfGroups: OneOfGroup[];
|
|
647
|
+
/** Subscription/addon service requirements */
|
|
648
|
+
subscriptionRequirements: SubscriptionRequirement[];
|
|
642
649
|
}
|
|
643
650
|
/**
|
|
644
651
|
* Parsed specification file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-parser.d.ts","sourceRoot":"","sources":["../../src/generator/openapi-parser.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"openapi-parser.d.ts","sourceRoot":"","sources":["../../src/generator/openapi-parser.ts"],"names":[],"mappings":"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"}
|