@robinmordasiewicz/f5xc-terraform-mcp 2.9.0 → 2.10.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.
@@ -0,0 +1,471 @@
1
+ /**
2
+ * Addon Service Module
3
+ * Provides information about F5 Distributed Cloud addon services and activation workflows
4
+ */
5
+ import { join, dirname } from 'path';
6
+ import { fileURLToPath } from 'url';
7
+ // Addon service information from subscription metadata
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = dirname(__filename);
10
+ const PACKAGE_ROOT = join(__dirname, '..', '..'); // mcp-server/
11
+ const PROJECT_ROOT = join(PACKAGE_ROOT, '..'); // terraform-provider-f5xc/
12
+ // Paths for subscription metadata (contains addon service info)
13
+ const BUNDLED_SUBSCRIPTION_METADATA = join(PACKAGE_ROOT, 'dist', 'subscription-tiers.json');
14
+ const PROJECT_SUBSCRIPTION_METADATA = join(PROJECT_ROOT, 'tools', 'subscription-tiers.json');
15
+ // Known addon services with their activation types and descriptions
16
+ // These names are the actual API names from F5XC (validated via API testing)
17
+ // Format: f5xc-{service}-{tier}
18
+ const ADDON_SERVICES = {
19
+ // Bot Defense variants
20
+ 'f5xc-bot-defense-standard': {
21
+ name: 'f5xc-bot-defense-standard',
22
+ displayName: 'Bot Defense (Standard)',
23
+ description: 'Protect applications from automated attacks and bot traffic - Standard tier',
24
+ tier: 'STANDARD',
25
+ activationType: 'self',
26
+ category: 'security',
27
+ },
28
+ 'f5xc-bot-defense-advanced': {
29
+ name: 'f5xc-bot-defense-advanced',
30
+ displayName: 'Bot Defense (Advanced)',
31
+ description: 'Protect applications from automated attacks and bot traffic - Advanced tier with ML',
32
+ tier: 'ADVANCED',
33
+ activationType: 'self',
34
+ category: 'security',
35
+ },
36
+ // Client Side Defense
37
+ 'f5xc-client-side-defense-standard': {
38
+ name: 'f5xc-client-side-defense-standard',
39
+ displayName: 'Client Side Defense',
40
+ description: 'Protect against client-side attacks like Magecart and formjacking',
41
+ tier: 'STANDARD',
42
+ activationType: 'self',
43
+ category: 'security',
44
+ },
45
+ // WAAP (Web App and API Protection) - includes API Discovery, API Protection, Data Guard
46
+ 'f5xc-waap-standard': {
47
+ name: 'f5xc-waap-standard',
48
+ displayName: 'WAAP (Standard)',
49
+ description: 'Web Application and API Protection - includes API Discovery and Data Guard',
50
+ tier: 'STANDARD',
51
+ activationType: 'self',
52
+ category: 'security',
53
+ },
54
+ 'f5xc-waap-advanced': {
55
+ name: 'f5xc-waap-advanced',
56
+ displayName: 'WAAP (Advanced)',
57
+ description: 'Web Application and API Protection - Advanced tier with full API security',
58
+ tier: 'ADVANCED',
59
+ activationType: 'self',
60
+ category: 'security',
61
+ },
62
+ // Malicious User Detection
63
+ 'f5xc-malicious-user-detection': {
64
+ name: 'f5xc-malicious-user-detection',
65
+ displayName: 'Malicious User Detection',
66
+ description: 'Identify and block malicious user behavior patterns',
67
+ tier: 'ADVANCED',
68
+ activationType: 'self',
69
+ category: 'security',
70
+ },
71
+ // Synthetic Monitoring
72
+ 'f5xc-synthetic-monitoring': {
73
+ name: 'f5xc-synthetic-monitoring',
74
+ displayName: 'Synthetic Monitoring',
75
+ description: 'Monitor application availability and performance with synthetic tests',
76
+ tier: 'STANDARD',
77
+ activationType: 'self',
78
+ category: 'observability',
79
+ },
80
+ };
81
+ /**
82
+ * Convert addon service name to valid Terraform resource name
83
+ * e.g., "f5xc-bot-defense-standard" -> "bot_defense_standard"
84
+ */
85
+ function toTerraformResourceName(addonServiceName) {
86
+ return addonServiceName
87
+ .replace(/^f5xc-/, '') // Remove f5xc- prefix
88
+ .replace(/-/g, '_'); // Replace hyphens with underscores
89
+ }
90
+ /**
91
+ * List all available addon services with optional filtering
92
+ */
93
+ export function listAddonServices(tierFilter, activationTypeFilter) {
94
+ let services = Object.values(ADDON_SERVICES);
95
+ // Apply tier filter
96
+ if (tierFilter) {
97
+ services = services.filter(s => s.tier === tierFilter);
98
+ }
99
+ // Apply activation type filter
100
+ if (activationTypeFilter) {
101
+ if (activationTypeFilter === 'managed') {
102
+ services = services.filter(s => s.activationType === 'managed' || s.activationType === 'partial');
103
+ }
104
+ else {
105
+ services = services.filter(s => s.activationType === activationTypeFilter);
106
+ }
107
+ }
108
+ return {
109
+ total: services.length,
110
+ services,
111
+ };
112
+ }
113
+ /**
114
+ * Check activation requirements for a specific addon service
115
+ */
116
+ export function checkAddonActivation(addonService) {
117
+ const service = ADDON_SERVICES[addonService];
118
+ if (!service) {
119
+ return null;
120
+ }
121
+ // Build activation steps based on type
122
+ let steps;
123
+ let canActivate = true;
124
+ switch (service.activationType) {
125
+ case 'self':
126
+ steps = [
127
+ 'Check activation status using data source',
128
+ 'Create addon_subscription resource',
129
+ 'Wait for subscription to be enabled',
130
+ 'Use addon features in your configuration',
131
+ ];
132
+ break;
133
+ case 'partial':
134
+ steps = [
135
+ 'Check activation status using data source',
136
+ 'Create addon_subscription with notification preference',
137
+ 'Wait for SRE team to process the request',
138
+ 'Monitor subscription state for SUBSCRIPTION_ENABLED',
139
+ 'Use addon features once enabled',
140
+ ];
141
+ canActivate = true; // User can initiate, but needs approval
142
+ break;
143
+ case 'managed':
144
+ steps = [
145
+ 'Contact F5 Sales to discuss addon requirements',
146
+ 'Complete the subscription agreement',
147
+ 'Wait for F5 team to activate the addon',
148
+ 'Verify activation using data source',
149
+ 'Use addon features once enabled',
150
+ ];
151
+ canActivate = false; // Requires sales contact
152
+ break;
153
+ default:
154
+ steps = ['Unknown activation type'];
155
+ }
156
+ const terraformResourceName = toTerraformResourceName(addonService);
157
+ const terraformExample = `# Check if ${service.displayName} can be activated
158
+ data "f5xc_addon_service_activation_status" "${terraformResourceName}" {
159
+ addon_service = "${addonService}"
160
+ }
161
+
162
+ # Create subscription if available
163
+ resource "f5xc_addon_subscription" "${terraformResourceName}" {
164
+ count = data.f5xc_addon_service_activation_status.${terraformResourceName}.can_activate ? 1 : 0
165
+ name = "${terraformResourceName.replace(/_/g, '-')}-subscription"
166
+ namespace = "system"
167
+
168
+ addon_service {
169
+ name = "${addonService}"
170
+ namespace = "shared"
171
+ }
172
+ }`;
173
+ return {
174
+ addonService: service.name,
175
+ displayName: service.displayName,
176
+ tier: service.tier,
177
+ activationType: service.activationType,
178
+ canActivate,
179
+ steps,
180
+ terraformExample,
181
+ };
182
+ }
183
+ /**
184
+ * Get detailed activation workflow for an addon service
185
+ */
186
+ export function getAddonWorkflow(addonService, activationType) {
187
+ const service = ADDON_SERVICES[addonService];
188
+ if (!service) {
189
+ return null;
190
+ }
191
+ // Use provided activation type or default to the service's type
192
+ const effectiveType = activationType || service.activationType;
193
+ const tfResourceName = toTerraformResourceName(addonService);
194
+ let workflow;
195
+ switch (effectiveType) {
196
+ case 'self':
197
+ workflow = {
198
+ addonService: service.name,
199
+ activationType: 'self',
200
+ description: `Self-activation workflow for ${service.displayName}. User can activate directly without manual intervention.`,
201
+ prerequisites: [
202
+ 'Valid F5 Distributed Cloud tenant',
203
+ `${service.tier} subscription tier or higher`,
204
+ 'Appropriate IAM permissions for addon management',
205
+ ],
206
+ steps: [
207
+ {
208
+ step: 1,
209
+ action: 'Check Activation Status',
210
+ description: 'Verify the addon can be activated for your tenant',
211
+ terraformSnippet: `data "f5xc_addon_service_activation_status" "${tfResourceName}" {
212
+ addon_service = "${addonService}"
213
+ }
214
+
215
+ output "${tfResourceName}_can_activate" {
216
+ value = data.f5xc_addon_service_activation_status.${tfResourceName}.can_activate
217
+ }`,
218
+ },
219
+ {
220
+ step: 2,
221
+ action: 'Create Subscription',
222
+ description: 'Create the addon subscription resource',
223
+ terraformSnippet: `resource "f5xc_addon_subscription" "${tfResourceName}" {
224
+ name = "${tfResourceName.replace(/_/g, '-')}-subscription"
225
+ namespace = "system"
226
+
227
+ addon_service {
228
+ name = "${addonService}"
229
+ namespace = "shared"
230
+ }
231
+ }`,
232
+ },
233
+ {
234
+ step: 3,
235
+ action: 'Verify Activation',
236
+ description: 'Confirm the subscription is enabled',
237
+ terraformSnippet: `# After apply, the subscription should be in SUBSCRIPTION_ENABLED state
238
+ # Check status:
239
+ # terraform show | grep status`,
240
+ },
241
+ {
242
+ step: 4,
243
+ action: 'Use Addon Features',
244
+ description: `Enable ${service.displayName} features in your load balancer or other resources`,
245
+ },
246
+ ],
247
+ terraformConfig: generateFullTerraformConfig(service),
248
+ estimatedTime: '1-5 minutes',
249
+ notes: [
250
+ 'Self-activation is typically immediate',
251
+ 'Some features may require additional configuration',
252
+ `Ensure your subscription tier is ${service.tier} or higher`,
253
+ ],
254
+ };
255
+ break;
256
+ case 'partial':
257
+ workflow = {
258
+ addonService: service.name,
259
+ activationType: 'partial',
260
+ description: `Partially managed activation for ${service.displayName}. User initiates request, requires SRE processing.`,
261
+ prerequisites: [
262
+ 'Valid F5 Distributed Cloud tenant',
263
+ `${service.tier} subscription tier or higher`,
264
+ 'Appropriate IAM permissions',
265
+ 'Email for notification preferences',
266
+ ],
267
+ steps: [
268
+ {
269
+ step: 1,
270
+ action: 'Check Activation Status',
271
+ description: 'Verify the addon can be requested',
272
+ terraformSnippet: `data "f5xc_addon_service_activation_status" "${tfResourceName}" {
273
+ addon_service = "${addonService}"
274
+ }`,
275
+ },
276
+ {
277
+ step: 2,
278
+ action: 'Create Subscription Request',
279
+ description: 'Submit subscription request with notification preferences',
280
+ terraformSnippet: `resource "f5xc_addon_subscription" "${tfResourceName}" {
281
+ name = "${tfResourceName.replace(/_/g, '-')}-subscription"
282
+ namespace = "system"
283
+
284
+ addon_service {
285
+ name = "${addonService}"
286
+ namespace = "shared"
287
+ }
288
+
289
+ notification_preference {
290
+ emails {
291
+ email_ids = ["admin@example.com"]
292
+ }
293
+ }
294
+ }`,
295
+ },
296
+ {
297
+ step: 3,
298
+ action: 'Wait for Processing',
299
+ description: 'Monitor subscription state for SUBSCRIPTION_ENABLED',
300
+ },
301
+ {
302
+ step: 4,
303
+ action: 'Use Addon Features',
304
+ description: 'Once enabled, configure addon features in your resources',
305
+ },
306
+ ],
307
+ terraformConfig: generateFullTerraformConfig(service, true),
308
+ estimatedTime: '1-24 hours (depends on SRE processing)',
309
+ notes: [
310
+ 'Request will be in SUBSCRIPTION_PENDING state initially',
311
+ 'SRE team will process and approve the request',
312
+ 'You will receive email notification when enabled',
313
+ ],
314
+ };
315
+ break;
316
+ case 'managed':
317
+ workflow = {
318
+ addonService: service.name,
319
+ activationType: 'managed',
320
+ description: `Fully managed activation for ${service.displayName}. Requires contacting F5 Sales.`,
321
+ prerequisites: [
322
+ 'Valid F5 Distributed Cloud tenant',
323
+ 'Sales agreement for the addon service',
324
+ 'Premium support contract (recommended)',
325
+ ],
326
+ steps: [
327
+ {
328
+ step: 1,
329
+ action: 'Contact Sales',
330
+ description: 'Reach out to F5 Sales to discuss requirements and pricing',
331
+ },
332
+ {
333
+ step: 2,
334
+ action: 'Complete Agreement',
335
+ description: 'Sign the subscription agreement with F5',
336
+ },
337
+ {
338
+ step: 3,
339
+ action: 'F5 Activation',
340
+ description: 'F5 team will activate the addon for your tenant',
341
+ },
342
+ {
343
+ step: 4,
344
+ action: 'Verify in Terraform',
345
+ description: 'Check activation status and create data source reference',
346
+ terraformSnippet: `data "f5xc_addon_service_activation_status" "${tfResourceName}" {
347
+ addon_service = "${addonService}"
348
+ }
349
+
350
+ output "is_active" {
351
+ value = data.f5xc_addon_service_activation_status.${tfResourceName}.state == "AS_SUBSCRIBED"
352
+ }`,
353
+ },
354
+ ],
355
+ terraformConfig: `# For managed addons, activation is handled by F5 Sales
356
+ # Once activated, you can reference the addon in your configuration
357
+
358
+ data "f5xc_addon_service" "${tfResourceName}" {
359
+ name = "${addonService}"
360
+ }
361
+
362
+ data "f5xc_addon_service_activation_status" "${tfResourceName}" {
363
+ addon_service = "${addonService}"
364
+ }`,
365
+ estimatedTime: 'Days to weeks (depends on sales process)',
366
+ notes: [
367
+ 'This addon requires a sales agreement',
368
+ 'Contact F5 Sales: https://www.f5.com/products/get-f5',
369
+ 'Once activated, use data sources to verify status',
370
+ ],
371
+ };
372
+ break;
373
+ default:
374
+ return null;
375
+ }
376
+ return workflow;
377
+ }
378
+ /**
379
+ * Generate a full Terraform configuration for an addon
380
+ */
381
+ function generateFullTerraformConfig(service, includeNotification = false) {
382
+ const serviceName = service.name; // Full API name like "f5xc-bot-defense-standard"
383
+ const resourceName = toTerraformResourceName(serviceName); // Terraform-safe name like "bot_defense_standard"
384
+ let config = `# ${service.displayName} Activation Configuration
385
+ # Tier Required: ${service.tier}
386
+ # Activation Type: ${service.activationType}
387
+
388
+ terraform {
389
+ required_providers {
390
+ f5xc = {
391
+ source = "registry.terraform.io/robinmordasiewicz/f5xc"
392
+ version = ">= 0.1.0"
393
+ }
394
+ }
395
+ }
396
+
397
+ provider "f5xc" {
398
+ # Configure via environment variables:
399
+ # F5XC_API_URL - API endpoint (optional)
400
+ # F5XC_API_TOKEN - API token (or use P12 cert)
401
+ # F5XC_P12_FILE - Path to P12 certificate
402
+ # F5XC_P12_PASSWORD - P12 certificate password
403
+ }
404
+
405
+ # Step 1: Check activation status
406
+ data "f5xc_addon_service_activation_status" "${serviceName}" {
407
+ addon_service = "${serviceName}"
408
+ }
409
+
410
+ # Step 2: Get addon service details
411
+ data "f5xc_addon_service" "${serviceName}" {
412
+ name = "${serviceName}"
413
+ }
414
+
415
+ # Step 3: Create subscription (only if can_activate is true)
416
+ resource "f5xc_addon_subscription" "${serviceName}" {
417
+ count = data.f5xc_addon_service_activation_status.${serviceName}.can_activate ? 1 : 0
418
+ name = "${resourceName}-subscription"
419
+ namespace = "system"
420
+
421
+ addon_service {
422
+ name = "${serviceName}"
423
+ namespace = "shared"
424
+ }`;
425
+ if (includeNotification) {
426
+ config += `
427
+
428
+ notification_preference {
429
+ emails {
430
+ email_ids = ["admin@example.com"]
431
+ }
432
+ }`;
433
+ }
434
+ config += `
435
+ }
436
+
437
+ # Outputs
438
+ output "addon_tier" {
439
+ description = "Required subscription tier"
440
+ value = data.f5xc_addon_service.${serviceName}.tier
441
+ }
442
+
443
+ output "activation_type" {
444
+ description = "Activation type (self, partial, managed)"
445
+ value = data.f5xc_addon_service.${serviceName}.activation_type
446
+ }
447
+
448
+ output "can_activate" {
449
+ description = "Whether the addon can be activated"
450
+ value = data.f5xc_addon_service_activation_status.${serviceName}.can_activate
451
+ }
452
+
453
+ output "current_state" {
454
+ description = "Current subscription state"
455
+ value = data.f5xc_addon_service_activation_status.${serviceName}.state
456
+ }`;
457
+ return config;
458
+ }
459
+ /**
460
+ * Get list of addon service names
461
+ */
462
+ export function getAddonServiceNames() {
463
+ return Object.keys(ADDON_SERVICES);
464
+ }
465
+ /**
466
+ * Check if an addon service exists
467
+ */
468
+ export function addonServiceExists(name) {
469
+ return name in ADDON_SERVICES;
470
+ }
471
+ //# sourceMappingURL=addons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addons.js","sourceRoot":"","sources":["../../src/services/addons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,uDAAuD;AACvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc;AAChE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,2BAA2B;AAE1E,gEAAgE;AAChE,MAAM,6BAA6B,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AAC5F,MAAM,6BAA6B,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC;AAE7F,oEAAoE;AACpE,6EAA6E;AAC7E,gCAAgC;AAChC,MAAM,cAAc,GAAqC;IACvD,uBAAuB;IACvB,2BAA2B,EAAE;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,6EAA6E;QAC1F,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,2BAA2B,EAAE;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,qFAAqF;QAClG,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,sBAAsB;IACtB,mCAAmC,EAAE;QACnC,IAAI,EAAE,mCAAmC;QACzC,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,mEAAmE;QAChF,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,yFAAyF;IACzF,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,4EAA4E;QACzF,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,2EAA2E;QACxF,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,2BAA2B;IAC3B,+BAA+B,EAAE;QAC/B,IAAI,EAAE,+BAA+B;QACrC,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE,qDAAqD;QAClE,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,uBAAuB;IACvB,2BAA2B,EAAE;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,sBAAsB;QACnC,WAAW,EAAE,uEAAuE;QACpF,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,eAAe;KAC1B;CACF,CAAC;AA4CF;;;GAGG;AACH,SAAS,uBAAuB,CAAC,gBAAwB;IACvD,OAAO,gBAAgB;SACpB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAE,sBAAsB;SAC7C,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAI,mCAAmC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAgD,EAChD,oBAAyC;IAEzC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE7C,oBAAoB;IACpB,IAAI,UAAU,EAAE,CAAC;QACf,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,+BAA+B;IAC/B,IAAI,oBAAoB,EAAE,CAAC;QACzB,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC;QACpG,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,oBAAoB,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACvD,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,IAAI,KAAe,CAAC;IACpB,IAAI,WAAW,GAAG,IAAI,CAAC;IAEvB,QAAQ,OAAO,CAAC,cAAc,EAAE,CAAC;QAC/B,KAAK,MAAM;YACT,KAAK,GAAG;gBACN,2CAA2C;gBAC3C,oCAAoC;gBACpC,qCAAqC;gBACrC,0CAA0C;aAC3C,CAAC;YACF,MAAM;QACR,KAAK,SAAS;YACZ,KAAK,GAAG;gBACN,2CAA2C;gBAC3C,wDAAwD;gBACxD,0CAA0C;gBAC1C,qDAAqD;gBACrD,iCAAiC;aAClC,CAAC;YACF,WAAW,GAAG,IAAI,CAAC,CAAC,wCAAwC;YAC5D,MAAM;QACR,KAAK,SAAS;YACZ,KAAK,GAAG;gBACN,gDAAgD;gBAChD,qCAAqC;gBACrC,wCAAwC;gBACxC,qCAAqC;gBACrC,iCAAiC;aAClC,CAAC;YACF,WAAW,GAAG,KAAK,CAAC,CAAC,yBAAyB;YAC9C,MAAM;QACR;YACE,KAAK,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,gBAAgB,GAAG,cAAc,OAAO,CAAC,WAAW;+CACb,qBAAqB;qBAC/C,YAAY;;;;sCAIK,qBAAqB;0DACD,qBAAqB;iBAC9D,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;;;mBAItC,YAAY;;;EAG7B,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,IAAI;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,WAAW;QACX,KAAK;QACL,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,cAA+C;IAE/C,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,MAAM,aAAa,GAAG,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;IAC/D,MAAM,cAAc,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IAE7D,IAAI,QAAuB,CAAC;IAE5B,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,MAAM;YACT,QAAQ,GAAG;gBACT,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,cAAc,EAAE,MAAM;gBACtB,WAAW,EAAE,gCAAgC,OAAO,CAAC,WAAW,2DAA2D;gBAC3H,aAAa,EAAE;oBACb,mCAAmC;oBACnC,GAAG,OAAO,CAAC,IAAI,8BAA8B;oBAC7C,kDAAkD;iBACnD;gBACD,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,yBAAyB;wBACjC,WAAW,EAAE,mDAAmD;wBAChE,gBAAgB,EAAE,gDAAgD,cAAc;qBACvE,YAAY;;;UAGvB,cAAc;sDAC8B,cAAc;EAClE;qBACS;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,qBAAqB;wBAC7B,WAAW,EAAE,wCAAwC;wBACrD,gBAAgB,EAAE,uCAAuC,cAAc;iBAClE,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;;;mBAI/B,YAAY;;;EAG7B;qBACS;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,mBAAmB;wBAC3B,WAAW,EAAE,qCAAqC;wBAClD,gBAAgB,EAAE;;+BAEC;qBACpB;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,oBAAoB;wBAC5B,WAAW,EAAE,UAAU,OAAO,CAAC,WAAW,oDAAoD;qBAC/F;iBACF;gBACD,eAAe,EAAE,2BAA2B,CAAC,OAAO,CAAC;gBACrD,aAAa,EAAE,aAAa;gBAC5B,KAAK,EAAE;oBACL,wCAAwC;oBACxC,oDAAoD;oBACpD,oCAAoC,OAAO,CAAC,IAAI,YAAY;iBAC7D;aACF,CAAC;YACF,MAAM;QAER,KAAK,SAAS;YACZ,QAAQ,GAAG;gBACT,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,cAAc,EAAE,SAAS;gBACzB,WAAW,EAAE,oCAAoC,OAAO,CAAC,WAAW,oDAAoD;gBACxH,aAAa,EAAE;oBACb,mCAAmC;oBACnC,GAAG,OAAO,CAAC,IAAI,8BAA8B;oBAC7C,6BAA6B;oBAC7B,oCAAoC;iBACrC;gBACD,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,yBAAyB;wBACjC,WAAW,EAAE,mCAAmC;wBAChD,gBAAgB,EAAE,gDAAgD,cAAc;qBACvE,YAAY;EAC/B;qBACS;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,6BAA6B;wBACrC,WAAW,EAAE,2DAA2D;wBACxE,gBAAgB,EAAE,uCAAuC,cAAc;iBAClE,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;;;mBAI/B,YAAY;;;;;;;;;EAS7B;qBACS;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,qBAAqB;wBAC7B,WAAW,EAAE,qDAAqD;qBACnE;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,oBAAoB;wBAC5B,WAAW,EAAE,0DAA0D;qBACxE;iBACF;gBACD,eAAe,EAAE,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC;gBAC3D,aAAa,EAAE,wCAAwC;gBACvD,KAAK,EAAE;oBACL,yDAAyD;oBACzD,+CAA+C;oBAC/C,kDAAkD;iBACnD;aACF,CAAC;YACF,MAAM;QAER,KAAK,SAAS;YACZ,QAAQ,GAAG;gBACT,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,cAAc,EAAE,SAAS;gBACzB,WAAW,EAAE,gCAAgC,OAAO,CAAC,WAAW,iCAAiC;gBACjG,aAAa,EAAE;oBACb,mCAAmC;oBACnC,uCAAuC;oBACvC,wCAAwC;iBACzC;gBACD,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,eAAe;wBACvB,WAAW,EAAE,2DAA2D;qBACzE;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,oBAAoB;wBAC5B,WAAW,EAAE,yCAAyC;qBACvD;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,eAAe;wBACvB,WAAW,EAAE,iDAAiD;qBAC/D;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,qBAAqB;wBAC7B,WAAW,EAAE,0DAA0D;wBACvE,gBAAgB,EAAE,gDAAgD,cAAc;qBACvE,YAAY;;;;sDAIqB,cAAc;EAClE;qBACS;iBACF;gBACD,eAAe,EAAE;;;6BAGI,cAAc;YAC/B,YAAY;;;+CAGuB,cAAc;qBACxC,YAAY;EAC/B;gBACM,aAAa,EAAE,0CAA0C;gBACzD,KAAK,EAAE;oBACL,uCAAuC;oBACvC,sDAAsD;oBACtD,mDAAmD;iBACpD;aACF,CAAC;YACF,MAAM;QAER;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,OAAyB,EAAE,mBAAmB,GAAG,KAAK;IACzF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAE,iDAAiD;IACpF,MAAM,YAAY,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAE,kDAAkD;IAE9G,IAAI,MAAM,GAAG,KAAK,OAAO,CAAC,WAAW;mBACpB,OAAO,CAAC,IAAI;qBACV,OAAO,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;+CAoBI,WAAW;qBACrC,WAAW;;;;6BAIH,WAAW;YAC5B,WAAW;;;;sCAIe,WAAW;0DACS,WAAW;iBACpD,YAAY;;;;mBAIV,WAAW;;IAE1B,CAAC;IAEH,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,IAAI;;;;;;IAMV,CAAC;IACH,CAAC;IAED,MAAM,IAAI;;;;;;0CAM8B,WAAW;;;;;0CAKX,WAAW;;;;;4DAKO,WAAW;;;;;4DAKX,WAAW;EACrE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,IAAI,cAAc,CAAC;AAChC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robinmordasiewicz/f5xc-terraform-mcp",
3
- "version": "2.9.0",
3
+ "version": "2.10.0",
4
4
  "description": "MCP server for F5 Distributed Cloud Terraform provider - provides documentation and API specification access for AI assistants",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",