@robinmordasiewicz/f5xc-api-mcp 1.0.82-2512312028
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/CHANGELOG.md +74 -0
- package/README.md +415 -0
- package/dist/auth/credential-manager.d.ts +151 -0
- package/dist/auth/credential-manager.d.ts.map +1 -0
- package/dist/auth/credential-manager.js +330 -0
- package/dist/auth/credential-manager.js.map +1 -0
- package/dist/auth/http-client.d.ts +81 -0
- package/dist/auth/http-client.d.ts.map +1 -0
- package/dist/auth/http-client.js +197 -0
- package/dist/auth/http-client.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/config/config-manager.d.ts +72 -0
- package/dist/config/config-manager.d.ts.map +1 -0
- package/dist/config/config-manager.js +247 -0
- package/dist/config/config-manager.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +74 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +75 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +77 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +31 -0
- package/dist/config/types.js.map +1 -0
- 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/index.d.ts +7 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +7 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/naming/acronyms.d.ts +81 -0
- package/dist/generator/naming/acronyms.d.ts.map +1 -0
- package/dist/generator/naming/acronyms.js +253 -0
- package/dist/generator/naming/acronyms.js.map +1 -0
- package/dist/generator/naming/index.d.ts +6 -0
- package/dist/generator/naming/index.d.ts.map +1 -0
- package/dist/generator/naming/index.js +6 -0
- package/dist/generator/naming/index.js.map +1 -0
- package/dist/generator/naming/volterra-mapping.d.ts +102 -0
- package/dist/generator/naming/volterra-mapping.d.ts.map +1 -0
- package/dist/generator/naming/volterra-mapping.js +259 -0
- package/dist/generator/naming/volterra-mapping.js.map +1 -0
- package/dist/generator/openapi-parser.d.ts +701 -0
- package/dist/generator/openapi-parser.d.ts.map +1 -0
- package/dist/generator/openapi-parser.js +704 -0
- package/dist/generator/openapi-parser.js.map +1 -0
- package/dist/generator/tool-generator.d.ts +118 -0
- package/dist/generator/tool-generator.d.ts.map +1 -0
- package/dist/generator/tool-generator.js +529 -0
- package/dist/generator/tool-generator.js.map +1 -0
- package/dist/generator/transformers/index.d.ts +7 -0
- package/dist/generator/transformers/index.d.ts.map +1 -0
- package/dist/generator/transformers/index.js +7 -0
- package/dist/generator/transformers/index.js.map +1 -0
- package/dist/generator/transformers/normalize-examples.d.ts +48 -0
- package/dist/generator/transformers/normalize-examples.d.ts.map +1 -0
- package/dist/generator/transformers/normalize-examples.js +66 -0
- package/dist/generator/transformers/normalize-examples.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/error-resolution.d.ts +70 -0
- package/dist/prompts/error-resolution.d.ts.map +1 -0
- package/dist/prompts/error-resolution.js +350 -0
- package/dist/prompts/error-resolution.js.map +1 -0
- package/dist/prompts/index.d.ts +8 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +7 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/workflows.d.ts +59 -0
- package/dist/prompts/workflows.d.ts.map +1 -0
- package/dist/prompts/workflows.js +441 -0
- package/dist/prompts/workflows.js.map +1 -0
- package/dist/resources/handlers.d.ts +70 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +270 -0
- package/dist/resources/handlers.js.map +1 -0
- package/dist/resources/index.d.ts +8 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +6 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/templates.d.ts +86 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +248 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/server.d.ts +78 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +721 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/discovery/best-practices.d.ts +140 -0
- package/dist/tools/discovery/best-practices.d.ts.map +1 -0
- package/dist/tools/discovery/best-practices.js +499 -0
- package/dist/tools/discovery/best-practices.js.map +1 -0
- package/dist/tools/discovery/consolidate.d.ts +97 -0
- package/dist/tools/discovery/consolidate.d.ts.map +1 -0
- package/dist/tools/discovery/consolidate.js +200 -0
- package/dist/tools/discovery/consolidate.js.map +1 -0
- package/dist/tools/discovery/cost-estimator.d.ts +114 -0
- package/dist/tools/discovery/cost-estimator.d.ts.map +1 -0
- package/dist/tools/discovery/cost-estimator.js +273 -0
- package/dist/tools/discovery/cost-estimator.js.map +1 -0
- 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/describe.d.ts +133 -0
- package/dist/tools/discovery/describe.d.ts.map +1 -0
- package/dist/tools/discovery/describe.js +208 -0
- package/dist/tools/discovery/describe.js.map +1 -0
- package/dist/tools/discovery/execute.d.ts +96 -0
- package/dist/tools/discovery/execute.d.ts.map +1 -0
- package/dist/tools/discovery/execute.js +220 -0
- package/dist/tools/discovery/execute.js.map +1 -0
- package/dist/tools/discovery/index-loader.d.ts +28 -0
- package/dist/tools/discovery/index-loader.d.ts.map +1 -0
- package/dist/tools/discovery/index-loader.js +72 -0
- package/dist/tools/discovery/index-loader.js.map +1 -0
- package/dist/tools/discovery/index.d.ts +363 -0
- package/dist/tools/discovery/index.d.ts.map +1 -0
- package/dist/tools/discovery/index.js +361 -0
- package/dist/tools/discovery/index.js.map +1 -0
- package/dist/tools/discovery/resolver.d.ts +119 -0
- package/dist/tools/discovery/resolver.d.ts.map +1 -0
- package/dist/tools/discovery/resolver.js +369 -0
- package/dist/tools/discovery/resolver.js.map +1 -0
- package/dist/tools/discovery/search.d.ts +41 -0
- package/dist/tools/discovery/search.d.ts.map +1 -0
- package/dist/tools/discovery/search.js +176 -0
- package/dist/tools/discovery/search.js.map +1 -0
- package/dist/tools/discovery/types.d.ts +91 -0
- package/dist/tools/discovery/types.d.ts.map +1 -0
- package/dist/tools/discovery/types.js +9 -0
- package/dist/tools/discovery/types.js.map +1 -0
- package/dist/tools/discovery/validate.d.ts +63 -0
- package/dist/tools/discovery/validate.d.ts.map +1 -0
- package/dist/tools/discovery/validate.js +239 -0
- package/dist/tools/discovery/validate.js.map +1 -0
- package/dist/tools/generated/admin_console_and_ui/index.d.ts +8 -0
- package/dist/tools/generated/admin_console_and_ui/index.d.ts.map +1 -0
- package/dist/tools/generated/admin_console_and_ui/index.js +265 -0
- package/dist/tools/generated/admin_console_and_ui/index.js.map +1 -0
- package/dist/tools/generated/api/index.d.ts +8 -0
- package/dist/tools/generated/api/index.d.ts.map +1 -0
- package/dist/tools/generated/api/index.js +7016 -0
- package/dist/tools/generated/api/index.js.map +1 -0
- package/dist/tools/generated/authentication/index.d.ts +8 -0
- package/dist/tools/generated/authentication/index.d.ts.map +1 -0
- package/dist/tools/generated/authentication/index.js +907 -0
- package/dist/tools/generated/authentication/index.js.map +1 -0
- package/dist/tools/generated/bigip/index.d.ts +8 -0
- package/dist/tools/generated/bigip/index.d.ts.map +1 -0
- package/dist/tools/generated/bigip/index.js +3152 -0
- package/dist/tools/generated/bigip/index.js.map +1 -0
- package/dist/tools/generated/billing_and_usage/index.d.ts +8 -0
- package/dist/tools/generated/billing_and_usage/index.d.ts.map +1 -0
- package/dist/tools/generated/billing_and_usage/index.js +2452 -0
- package/dist/tools/generated/billing_and_usage/index.js.map +1 -0
- package/dist/tools/generated/blindfold/index.d.ts +8 -0
- package/dist/tools/generated/blindfold/index.d.ts.map +1 -0
- package/dist/tools/generated/blindfold/index.js +3790 -0
- package/dist/tools/generated/blindfold/index.js.map +1 -0
- package/dist/tools/generated/bot_and_threat_defense/index.d.ts +8 -0
- package/dist/tools/generated/bot_and_threat_defense/index.d.ts.map +1 -0
- package/dist/tools/generated/bot_and_threat_defense/index.js +2746 -0
- package/dist/tools/generated/bot_and_threat_defense/index.js.map +1 -0
- package/dist/tools/generated/cdn/index.d.ts +8 -0
- package/dist/tools/generated/cdn/index.d.ts.map +1 -0
- package/dist/tools/generated/cdn/index.js +2686 -0
- package/dist/tools/generated/cdn/index.js.map +1 -0
- package/dist/tools/generated/ce_management/index.d.ts +8 -0
- package/dist/tools/generated/ce_management/index.d.ts.map +1 -0
- package/dist/tools/generated/ce_management/index.js +3812 -0
- package/dist/tools/generated/ce_management/index.js.map +1 -0
- package/dist/tools/generated/certificates/index.d.ts +8 -0
- package/dist/tools/generated/certificates/index.d.ts.map +1 -0
- package/dist/tools/generated/certificates/index.js +2547 -0
- package/dist/tools/generated/certificates/index.js.map +1 -0
- package/dist/tools/generated/cloud_infrastructure/index.d.ts +8 -0
- package/dist/tools/generated/cloud_infrastructure/index.d.ts.map +1 -0
- package/dist/tools/generated/cloud_infrastructure/index.js +3959 -0
- package/dist/tools/generated/cloud_infrastructure/index.js.map +1 -0
- package/dist/tools/generated/container_services/index.d.ts +8 -0
- package/dist/tools/generated/container_services/index.d.ts.map +1 -0
- package/dist/tools/generated/container_services/index.js +2018 -0
- package/dist/tools/generated/container_services/index.js.map +1 -0
- package/dist/tools/generated/data_and_privacy_security/index.d.ts +8 -0
- package/dist/tools/generated/data_and_privacy_security/index.d.ts.map +1 -0
- package/dist/tools/generated/data_and_privacy_security/index.js +1662 -0
- package/dist/tools/generated/data_and_privacy_security/index.js.map +1 -0
- package/dist/tools/generated/data_intelligence/index.d.ts +8 -0
- package/dist/tools/generated/data_intelligence/index.d.ts.map +1 -0
- package/dist/tools/generated/data_intelligence/index.js +1600 -0
- package/dist/tools/generated/data_intelligence/index.js.map +1 -0
- package/dist/tools/generated/ddos/index.d.ts +8 -0
- package/dist/tools/generated/ddos/index.d.ts.map +1 -0
- package/dist/tools/generated/ddos/index.js +8091 -0
- package/dist/tools/generated/ddos/index.js.map +1 -0
- package/dist/tools/generated/dependency-graph.json +26358 -0
- package/dist/tools/generated/dns/index.d.ts +8 -0
- package/dist/tools/generated/dns/index.d.ts.map +1 -0
- package/dist/tools/generated/dns/index.js +6096 -0
- package/dist/tools/generated/dns/index.js.map +1 -0
- package/dist/tools/generated/generative_ai/index.d.ts +8 -0
- package/dist/tools/generated/generative_ai/index.d.ts.map +1 -0
- package/dist/tools/generated/generative_ai/index.js +1019 -0
- package/dist/tools/generated/generative_ai/index.js.map +1 -0
- package/dist/tools/generated/managed_kubernetes/index.d.ts +8 -0
- package/dist/tools/generated/managed_kubernetes/index.d.ts.map +1 -0
- package/dist/tools/generated/managed_kubernetes/index.js +3368 -0
- package/dist/tools/generated/managed_kubernetes/index.js.map +1 -0
- package/dist/tools/generated/marketplace/index.d.ts +8 -0
- package/dist/tools/generated/marketplace/index.d.ts.map +1 -0
- package/dist/tools/generated/marketplace/index.js +4329 -0
- package/dist/tools/generated/marketplace/index.js.map +1 -0
- package/dist/tools/generated/network/index.d.ts +8 -0
- package/dist/tools/generated/network/index.d.ts.map +1 -0
- package/dist/tools/generated/network/index.js +12424 -0
- package/dist/tools/generated/network/index.js.map +1 -0
- package/dist/tools/generated/network_security/index.d.ts +8 -0
- package/dist/tools/generated/network_security/index.d.ts.map +1 -0
- package/dist/tools/generated/network_security/index.js +9637 -0
- package/dist/tools/generated/network_security/index.js.map +1 -0
- package/dist/tools/generated/nginx_one/index.d.ts +8 -0
- package/dist/tools/generated/nginx_one/index.d.ts.map +1 -0
- package/dist/tools/generated/nginx_one/index.js +1692 -0
- package/dist/tools/generated/nginx_one/index.js.map +1 -0
- package/dist/tools/generated/object_storage/index.d.ts +8 -0
- package/dist/tools/generated/object_storage/index.d.ts.map +1 -0
- package/dist/tools/generated/object_storage/index.js +996 -0
- package/dist/tools/generated/object_storage/index.js.map +1 -0
- package/dist/tools/generated/observability/index.d.ts +8 -0
- package/dist/tools/generated/observability/index.d.ts.map +1 -0
- package/dist/tools/generated/observability/index.js +5285 -0
- package/dist/tools/generated/observability/index.js.map +1 -0
- package/dist/tools/generated/rate_limiting/index.d.ts +8 -0
- package/dist/tools/generated/rate_limiting/index.d.ts.map +1 -0
- package/dist/tools/generated/rate_limiting/index.js +2108 -0
- package/dist/tools/generated/rate_limiting/index.js.map +1 -0
- package/dist/tools/generated/secops_and_incident_response/index.d.ts +8 -0
- package/dist/tools/generated/secops_and_incident_response/index.d.ts.map +1 -0
- package/dist/tools/generated/secops_and_incident_response/index.js +710 -0
- package/dist/tools/generated/secops_and_incident_response/index.js.map +1 -0
- package/dist/tools/generated/service_mesh/index.d.ts +8 -0
- package/dist/tools/generated/service_mesh/index.d.ts.map +1 -0
- package/dist/tools/generated/service_mesh/index.js +6062 -0
- package/dist/tools/generated/service_mesh/index.js.map +1 -0
- package/dist/tools/generated/shape/index.d.ts +8 -0
- package/dist/tools/generated/shape/index.d.ts.map +1 -0
- package/dist/tools/generated/shape/index.js +19381 -0
- package/dist/tools/generated/shape/index.js.map +1 -0
- package/dist/tools/generated/sites/index.d.ts +8 -0
- package/dist/tools/generated/sites/index.d.ts.map +1 -0
- package/dist/tools/generated/sites/index.js +13160 -0
- package/dist/tools/generated/sites/index.js.map +1 -0
- package/dist/tools/generated/statistics/index.d.ts +8 -0
- package/dist/tools/generated/statistics/index.d.ts.map +1 -0
- package/dist/tools/generated/statistics/index.js +8131 -0
- package/dist/tools/generated/statistics/index.js.map +1 -0
- package/dist/tools/generated/support/index.d.ts +8 -0
- package/dist/tools/generated/support/index.d.ts.map +1 -0
- package/dist/tools/generated/support/index.js +5608 -0
- package/dist/tools/generated/support/index.js.map +1 -0
- package/dist/tools/generated/telemetry_and_insights/index.d.ts +8 -0
- package/dist/tools/generated/telemetry_and_insights/index.d.ts.map +1 -0
- package/dist/tools/generated/telemetry_and_insights/index.js +2404 -0
- package/dist/tools/generated/telemetry_and_insights/index.js.map +1 -0
- package/dist/tools/generated/tenant_and_identity/index.d.ts +8 -0
- package/dist/tools/generated/tenant_and_identity/index.d.ts.map +1 -0
- package/dist/tools/generated/tenant_and_identity/index.js +18938 -0
- package/dist/tools/generated/tenant_and_identity/index.js.map +1 -0
- package/dist/tools/generated/threat_campaign/index.d.ts +8 -0
- package/dist/tools/generated/threat_campaign/index.d.ts.map +1 -0
- package/dist/tools/generated/threat_campaign/index.js +102 -0
- package/dist/tools/generated/threat_campaign/index.js.map +1 -0
- package/dist/tools/generated/users/index.d.ts +8 -0
- package/dist/tools/generated/users/index.d.ts.map +1 -0
- package/dist/tools/generated/users/index.js +1515 -0
- package/dist/tools/generated/users/index.js.map +1 -0
- package/dist/tools/generated/virtual/index.d.ts +8 -0
- package/dist/tools/generated/virtual/index.d.ts.map +1 -0
- package/dist/tools/generated/virtual/index.js +11263 -0
- package/dist/tools/generated/virtual/index.js.map +1 -0
- package/dist/tools/generated/vpm_and_node_management/index.d.ts +8 -0
- package/dist/tools/generated/vpm_and_node_management/index.d.ts.map +1 -0
- package/dist/tools/generated/vpm_and_node_management/index.js +88 -0
- package/dist/tools/generated/vpm_and_node_management/index.js.map +1 -0
- package/dist/tools/generated/waf/index.d.ts +8 -0
- package/dist/tools/generated/waf/index.d.ts.map +1 -0
- package/dist/tools/generated/waf/index.js +4586 -0
- package/dist/tools/generated/waf/index.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +27 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +115 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/utils/error-handling.d.ts +109 -0
- package/dist/utils/error-handling.d.ts.map +1 -0
- package/dist/utils/error-handling.js +239 -0
- package/dist/utils/error-handling.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logging.d.ts +75 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +131 -0
- package/dist/utils/logging.js.map +1 -0
- package/manifest.json +143 -0
- package/package.json +110 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
### Breaking Changes
|
|
11
|
+
|
|
12
|
+
- **BREAKING**: Package name changed from `f5xc-api-mcp` to `@robinmordasiewicz/f5xc-api-mcp` for scoped npm packaging
|
|
13
|
+
- Installation command changes: `npm install -g @robinmordasiewicz/f5xc-api-mcp`
|
|
14
|
+
- npx command changes: `npx @robinmordasiewicz/f5xc-api-mcp`
|
|
15
|
+
- Binary name remains unchanged: `f5xc-api-mcp`
|
|
16
|
+
- This aligns with organizational package naming convention for consistency
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- Initial release of F5 Distributed Cloud API MCP Server
|
|
21
|
+
- 270+ API tools auto-generated from OpenAPI specifications
|
|
22
|
+
- Dual-mode operation: documentation mode (unauthenticated) and execution mode (authenticated)
|
|
23
|
+
- API token authentication support
|
|
24
|
+
- P12 certificate (mTLS) authentication support
|
|
25
|
+
- Automatic URL normalization for various F5XC URL formats
|
|
26
|
+
- f5xcctl CLI command equivalents in every response
|
|
27
|
+
- Terraform HCL examples in every response
|
|
28
|
+
- MCP Resources for F5XC configuration objects via URI scheme
|
|
29
|
+
- Workflow prompts for common operations:
|
|
30
|
+
- `deploy-http-loadbalancer` - Deploy HTTP Load Balancer with origin pool
|
|
31
|
+
- `configure-waf` - Configure Web Application Firewall
|
|
32
|
+
- `create-multicloud-site` - Deploy F5XC site in AWS/Azure/GCP
|
|
33
|
+
- `generate-terraform` - Export resources as Terraform HCL
|
|
34
|
+
- Subscription tier awareness (NO_TIER, STANDARD, ADVANCED)
|
|
35
|
+
- Comprehensive documentation site with MkDocs
|
|
36
|
+
- Docker container distribution via GHCR
|
|
37
|
+
- npm package distribution
|
|
38
|
+
- GitHub Actions CI/CD pipeline:
|
|
39
|
+
- Automated OpenAPI spec synchronization
|
|
40
|
+
- Code generation workflow
|
|
41
|
+
- Security scanning (Trivy, TruffleHog, CodeQL)
|
|
42
|
+
- Multi-platform Docker builds
|
|
43
|
+
- Automated npm publishing
|
|
44
|
+
- Documentation deployment to GitHub Pages
|
|
45
|
+
|
|
46
|
+
### API Domains
|
|
47
|
+
|
|
48
|
+
- `waap` - HTTP/TCP load balancers, origin pools, app firewalls, rate limiters
|
|
49
|
+
- `dns` - DNS zones, DNS load balancers, DNS LB pools
|
|
50
|
+
- `network` - Network connectors, firewalls, enhanced firewall policies
|
|
51
|
+
- `site` - AWS VPC sites, Azure VNET sites, GCP VPC sites, customer edge
|
|
52
|
+
- `appstack` - K8s clusters, virtual K8s, workloads
|
|
53
|
+
- `security` - Service policies, WAF, malicious user detection
|
|
54
|
+
- `core` - Namespaces, certificates, cloud credentials
|
|
55
|
+
|
|
56
|
+
### Technical
|
|
57
|
+
|
|
58
|
+
- TypeScript 5.x with strict mode
|
|
59
|
+
- Node.js 20+ LTS runtime
|
|
60
|
+
- @modelcontextprotocol/sdk for MCP implementation
|
|
61
|
+
- Zod for runtime validation
|
|
62
|
+
- Axios with mTLS support for HTTP client
|
|
63
|
+
- Vitest for testing framework
|
|
64
|
+
- ESLint + Prettier for code quality
|
|
65
|
+
- Material for MkDocs for documentation
|
|
66
|
+
|
|
67
|
+
## [0.1.0] - TBD
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
|
|
71
|
+
- Initial public release
|
|
72
|
+
|
|
73
|
+
[Unreleased]: https://github.com/robinmordasiewicz/f5xc-api-mcp/compare/v0.1.0...HEAD
|
|
74
|
+
[0.1.0]: https://github.com/robinmordasiewicz/f5xc-api-mcp/releases/tag/v0.1.0
|
package/README.md
ADDED
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
# F5 Distributed Cloud API MCP Server
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@robinmordasiewicz/f5xc-api-mcp)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
An MCP (Model Context Protocol) server that exposes F5 Distributed Cloud APIs to AI assistants.
|
|
7
|
+
Enables natural language interaction with F5XC infrastructure through Claude, VS Code, and
|
|
8
|
+
other MCP-compatible tools.
|
|
9
|
+
|
|
10
|
+
## Features
|
|
11
|
+
|
|
12
|
+
- **1500+ API Tools** - Complete coverage of F5XC API operations across 23 enriched domains
|
|
13
|
+
- **Domain-Based Documentation** - Tools organized by domains with intelligent 2-level and
|
|
14
|
+
3-level hierarchical navigation
|
|
15
|
+
- **Dual-Mode Operation** - Works without authentication (documentation mode) AND with authentication (execution mode)
|
|
16
|
+
- **f5xcctl Integration** - Every response includes equivalent CLI commands
|
|
17
|
+
- **Terraform Examples** - Every response includes Terraform HCL examples
|
|
18
|
+
- **Multiple Auth Methods** - API token and P12 certificate (mTLS) support
|
|
19
|
+
- **URL Normalization** - Automatically handles various F5XC URL formats
|
|
20
|
+
- **Pre-enriched Specs** - Uses optimized OpenAPI 3.0.3 specifications with domain metadata
|
|
21
|
+
|
|
22
|
+
## Quick Start
|
|
23
|
+
|
|
24
|
+
### Using npx (Recommended)
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx @robinmordasiewicz/f5xc-api-mcp
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Using npm
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install -g @robinmordasiewicz/f5xc-api-mcp
|
|
34
|
+
f5xc-api-mcp
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Using Docker
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
docker run -i --rm ghcr.io/robinmordasiewicz/f5xc-api-mcp
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Configuration
|
|
44
|
+
|
|
45
|
+
### Claude Desktop
|
|
46
|
+
|
|
47
|
+
Add to your Claude Desktop configuration (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):
|
|
48
|
+
|
|
49
|
+
```json
|
|
50
|
+
{
|
|
51
|
+
"mcpServers": {
|
|
52
|
+
"f5xc-api": {
|
|
53
|
+
"command": "npx",
|
|
54
|
+
"args": ["@robinmordasiewicz/f5xc-api-mcp"],
|
|
55
|
+
"env": {
|
|
56
|
+
"F5XC_API_URL": "https://your-tenant.console.ves.volterra.io",
|
|
57
|
+
"F5XC_API_TOKEN": "your-api-token"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Claude Code CLI
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
claude mcp add f5xc-api -- npx @robinmordasiewicz/f5xc-api-mcp
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### VS Code (with Cline/Continue)
|
|
71
|
+
|
|
72
|
+
Add to your MCP settings:
|
|
73
|
+
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"mcpServers": {
|
|
77
|
+
"f5xc-api": {
|
|
78
|
+
"command": "npx",
|
|
79
|
+
"args": ["@robinmordasiewicz/f5xc-api-mcp"]
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Environment Variables
|
|
86
|
+
|
|
87
|
+
| Variable | Required | Description |
|
|
88
|
+
|----------|----------|-------------|
|
|
89
|
+
| `F5XC_API_URL` | For execution | Tenant URL (auto-normalized) |
|
|
90
|
+
| `F5XC_API_TOKEN` | For token auth | API token from XC Console |
|
|
91
|
+
| `F5XC_P12_FILE` | For cert auth | Path to P12 certificate file |
|
|
92
|
+
| `F5XC_P12_PASSWORD` | For cert auth | Password for P12 certificate |
|
|
93
|
+
| `F5XC_PROFILE` | No | Profile name to use (default: `defaultProfile` from config) |
|
|
94
|
+
| `LOG_LEVEL` | No | Logging verbosity (debug, info, warn, error) |
|
|
95
|
+
|
|
96
|
+
## Profile-Based Configuration
|
|
97
|
+
|
|
98
|
+
Manage multiple F5XC tenant credentials with named profiles stored in `~/.f5xc/credentials.json`.
|
|
99
|
+
|
|
100
|
+
### Interactive Setup
|
|
101
|
+
|
|
102
|
+
Run the setup wizard to create profiles with auto-detection of existing environment variables:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
f5xc-api-mcp --setup
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The wizard will:
|
|
109
|
+
|
|
110
|
+
1. Detect existing `F5XC_API_URL`, `F5XC_API_TOKEN`, `F5XC_P12_FILE`, `F5XC_P12_PASSWORD`
|
|
111
|
+
2. Offer to create a profile from detected credentials
|
|
112
|
+
3. Allow manual profile creation if no credentials are detected
|
|
113
|
+
4. Set a default profile for automatic selection
|
|
114
|
+
|
|
115
|
+
### Using Profiles
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# Use default profile
|
|
119
|
+
f5xc-api-mcp
|
|
120
|
+
|
|
121
|
+
# Use specific profile
|
|
122
|
+
F5XC_PROFILE=staging f5xc-api-mcp
|
|
123
|
+
|
|
124
|
+
# Override profile credentials with environment variables
|
|
125
|
+
F5XC_PROFILE=production F5XC_API_TOKEN=temporary-token f5xc-api-mcp
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Profile Management Commands
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
# List all configured profiles
|
|
132
|
+
f5xc-api-mcp --list-profiles
|
|
133
|
+
|
|
134
|
+
# Display configuration file
|
|
135
|
+
f5xc-api-mcp --show-config
|
|
136
|
+
|
|
137
|
+
# Set default profile
|
|
138
|
+
f5xc-api-mcp --set-default production
|
|
139
|
+
|
|
140
|
+
# Delete a profile
|
|
141
|
+
f5xc-api-mcp --delete-profile staging
|
|
142
|
+
|
|
143
|
+
# Test profile connection
|
|
144
|
+
f5xc-api-mcp --test-profile production
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Configuration File Format
|
|
148
|
+
|
|
149
|
+
Profiles are stored in `~/.f5xc/credentials.json`:
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"version": "1.0",
|
|
154
|
+
"defaultProfile": "production",
|
|
155
|
+
"profiles": {
|
|
156
|
+
"production": {
|
|
157
|
+
"apiUrl": "https://mytenant.console.ves.volterra.io",
|
|
158
|
+
"apiToken": "your-api-token",
|
|
159
|
+
"metadata": {
|
|
160
|
+
"description": "Production tenant",
|
|
161
|
+
"createdAt": "2025-12-21T10:00:00Z",
|
|
162
|
+
"lastUsedAt": "2025-12-21T15:30:00Z"
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
"staging": {
|
|
166
|
+
"apiUrl": "https://staging.console.ves.volterra.io",
|
|
167
|
+
"apiToken": "staging-token",
|
|
168
|
+
"metadata": {
|
|
169
|
+
"description": "Staging environment",
|
|
170
|
+
"createdAt": "2025-12-21T10:05:00Z"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Credential Priority
|
|
178
|
+
|
|
179
|
+
Credentials are loaded in this order (highest to lowest priority):
|
|
180
|
+
|
|
181
|
+
1. **Environment Variables** - `F5XC_API_URL`, `F5XC_API_TOKEN`, etc.
|
|
182
|
+
2. **Active Profile** - Selected by `F5XC_PROFILE` or `defaultProfile`
|
|
183
|
+
3. **Documentation Mode** - No credentials (read-only API documentation)
|
|
184
|
+
|
|
185
|
+
Environment variables always override profile settings, enabling temporary overrides.
|
|
186
|
+
|
|
187
|
+
### Backward Compatibility
|
|
188
|
+
|
|
189
|
+
Existing setups using environment variables continue to work unchanged:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
export F5XC_API_URL=https://mytenant.console.ves.volterra.io
|
|
193
|
+
export F5XC_API_TOKEN=your-api-token
|
|
194
|
+
f5xc-api-mcp
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
No changes needed - profiles are optional. Migrate to profiles when ready:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
f5xc-api-mcp --setup # Auto-detects existing env vars
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Dual-Mode Operation
|
|
204
|
+
|
|
205
|
+
### Documentation Mode (No Authentication)
|
|
206
|
+
|
|
207
|
+
When no credentials are provided, the server provides:
|
|
208
|
+
|
|
209
|
+
- OpenAPI specification documentation
|
|
210
|
+
- API operation explanations
|
|
211
|
+
- Parameter descriptions and validation
|
|
212
|
+
- f5xcctl command equivalents
|
|
213
|
+
- Terraform HCL examples
|
|
214
|
+
- JSON request templates
|
|
215
|
+
|
|
216
|
+
This mode is ideal for users who authenticate via f5xcctl or Terraform.
|
|
217
|
+
|
|
218
|
+
### Execution Mode (With Authentication)
|
|
219
|
+
|
|
220
|
+
When credentials are provided, the server additionally:
|
|
221
|
+
|
|
222
|
+
- Executes actual API calls against your tenant
|
|
223
|
+
- Lists and retrieves resources
|
|
224
|
+
- Creates, updates, and deletes configurations
|
|
225
|
+
- Returns real-time resource status
|
|
226
|
+
|
|
227
|
+
## Available Tools
|
|
228
|
+
|
|
229
|
+
Tools follow the naming pattern: `f5xc-api-{domain}-{resource}-{operation}`
|
|
230
|
+
|
|
231
|
+
### Domains (23 Total)
|
|
232
|
+
|
|
233
|
+
| Domain | Path Count | Structure | Description |
|
|
234
|
+
|--------|-----------|-----------|-------------|
|
|
235
|
+
| AI Intelligence | 11 | 2-level | AI assistant, BFDP |
|
|
236
|
+
| API Security | 45 | 2-level | API discovery, protection, definitions |
|
|
237
|
+
| BIG-IP Integration | 28 | 2-level | BIG-IP virtual servers, iRules, APM |
|
|
238
|
+
| Billing | 19 | 2-level | Invoices, payment methods, subscriptions |
|
|
239
|
+
| CDN | 31 | 2-level | CDN load balancers, cache rules |
|
|
240
|
+
| DNS | 42 | 2-level | DNS zones, DNS load balancers, DNS pools |
|
|
241
|
+
| Infrastructure | 134 | 3-level | AWS/Azure/GCP VPC sites, customer edge sites |
|
|
242
|
+
| Infrastructure Protection | 72 | 2-level | DDoS protection, firewall rules |
|
|
243
|
+
| Integrations | 26 | 2-level | Third-party apps, ticket systems |
|
|
244
|
+
| Identity | 137 | 3-level | Authentication, users, roles, RBAC |
|
|
245
|
+
| Load Balancing | 89 | 2-level | HTTP/TCP/UDP load balancers, origin pools, forward proxy |
|
|
246
|
+
| Monitoring & Observability | 235 | 3-level | Alerts, logs, synthetic monitors, metrics |
|
|
247
|
+
| NGINX Integration | 34 | 2-level | NGINX One instances, servers, service discovery |
|
|
248
|
+
| Networking | 220 | 3-level | Network connectors, firewalls, interfaces, policies |
|
|
249
|
+
| Operations | 22 | 2-level | Debug, DHCP, ping, traceroute |
|
|
250
|
+
| Regional Edge Configuration | 18 | 2-level | Regional edge settings, policies |
|
|
251
|
+
| Security | 210 | 3-level | Service policies, WAF, malicious user mitigation |
|
|
252
|
+
| Service Mesh | 31 | 2-level | Virtual K8s, workloads, K8s clusters |
|
|
253
|
+
| Shape Security (Bot Defense) | 124 | 3-level | Bot defense, client-side defense |
|
|
254
|
+
| System Configuration | 23 | 2-level | Namespaces, certificates, credentials |
|
|
255
|
+
| Tenant Management | 28 | 2-level | Multi-tenant management, profiles |
|
|
256
|
+
| VPN | 20 | 2-level | VPN tunnels, IKE profiles |
|
|
257
|
+
| Workflows & Automation | 15 | 2-level | Workflow templates, automations |
|
|
258
|
+
|
|
259
|
+
### Example Tools
|
|
260
|
+
|
|
261
|
+
- `f5xc-api-loadbalancer-http-loadbalancer-create`
|
|
262
|
+
- `f5xc-api-loadbalancer-origin-pool-list`
|
|
263
|
+
- `f5xc-api-networking-network-interface-get`
|
|
264
|
+
- `f5xc-api-server-info`
|
|
265
|
+
|
|
266
|
+
## Documentation Structure
|
|
267
|
+
|
|
268
|
+
The documentation site is automatically generated from enriched OpenAPI specifications
|
|
269
|
+
and organized by domain with intelligent hierarchical navigation:
|
|
270
|
+
|
|
271
|
+
### Two-Level Navigation (Small Domains < 50 paths)
|
|
272
|
+
|
|
273
|
+
Small domains use a simple 2-level structure: Domain → Resource
|
|
274
|
+
|
|
275
|
+
```yaml
|
|
276
|
+
docs/tools/
|
|
277
|
+
├── vpn/
|
|
278
|
+
│ ├── ipsec-gateway.md
|
|
279
|
+
│ └── vpn-connection.md
|
|
280
|
+
├── cdn/
|
|
281
|
+
│ ├── cdn-loadbalancer.md
|
|
282
|
+
│ └── cdn-pool.md
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Example: [VPN Tools](https://robinmordasiewicz.github.io/f5xc-api-mcp/tools/vpn/)
|
|
286
|
+
|
|
287
|
+
### Three-Level Navigation (Large Domains ≥ 50 paths)
|
|
288
|
+
|
|
289
|
+
Large domains use a 3-level structure: Domain → Category (by OpenAPI tag) → Resource
|
|
290
|
+
|
|
291
|
+
```yaml
|
|
292
|
+
docs/tools/
|
|
293
|
+
├── observability/
|
|
294
|
+
│ ├── alerts-events/
|
|
295
|
+
│ │ ├── alert-policy.md
|
|
296
|
+
│ │ └── event-manager.md
|
|
297
|
+
│ ├── logging/
|
|
298
|
+
│ │ ├── access-log.md
|
|
299
|
+
│ │ └── audit-log.md
|
|
300
|
+
│ └── metrics-statistics/
|
|
301
|
+
│ └── metric-collector.md
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**Large domains (>50 paths) using 3-level navigation:**
|
|
305
|
+
|
|
306
|
+
- Monitoring & Observability (235 paths)
|
|
307
|
+
- Networking (220 paths)
|
|
308
|
+
- Security (210 paths)
|
|
309
|
+
- Infrastructure (134 paths)
|
|
310
|
+
- Identity (137 paths)
|
|
311
|
+
- Shape Security (124 paths)
|
|
312
|
+
|
|
313
|
+
### Automatic Generation
|
|
314
|
+
|
|
315
|
+
Documentation is automatically generated by the build system:
|
|
316
|
+
|
|
317
|
+
```bash
|
|
318
|
+
# Generate/regenerate documentation
|
|
319
|
+
npm run generate-docs
|
|
320
|
+
|
|
321
|
+
# Build documentation site
|
|
322
|
+
mkdocs build
|
|
323
|
+
|
|
324
|
+
# Preview site locally
|
|
325
|
+
mkdocs serve
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
The generator automatically:
|
|
329
|
+
|
|
330
|
+
- Converts domain titles from snake_case to display format (e.g., `load_balancer` → "Load Balancing")
|
|
331
|
+
- Updates `mkdocs.yml` navigation without manual changes
|
|
332
|
+
- Creates markdown files with API operation details and examples
|
|
333
|
+
- Subdivides large domains based on OpenAPI operation tags
|
|
334
|
+
- Maintains consistent directory structure and naming conventions
|
|
335
|
+
|
|
336
|
+
## Workflow Prompts
|
|
337
|
+
|
|
338
|
+
The server includes guided workflow prompts:
|
|
339
|
+
|
|
340
|
+
- `deploy-http-loadbalancer` - Deploy HTTP LB with origin pool
|
|
341
|
+
- `configure-waf` - Configure Web Application Firewall
|
|
342
|
+
- `create-multicloud-site` - Deploy F5XC site in AWS/Azure/GCP
|
|
343
|
+
- `generate-terraform` - Export resources as Terraform
|
|
344
|
+
|
|
345
|
+
## Resource URIs
|
|
346
|
+
|
|
347
|
+
Access F5XC resources via URI scheme:
|
|
348
|
+
|
|
349
|
+
```text
|
|
350
|
+
f5xc://{tenant}/{namespace}/{resource-type}/{name}
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
Examples:
|
|
354
|
+
|
|
355
|
+
- `f5xc://mytenant/production/http_loadbalancer/my-app`
|
|
356
|
+
- `f5xc://mytenant/system/namespace/default`
|
|
357
|
+
|
|
358
|
+
## URL Normalization
|
|
359
|
+
|
|
360
|
+
The server automatically normalizes various URL formats:
|
|
361
|
+
|
|
362
|
+
| User Input | Normalized |
|
|
363
|
+
|------------|------------|
|
|
364
|
+
| `tenant.volterra.us` | `tenant.console.ves.volterra.io/api` |
|
|
365
|
+
| `tenant.console.ves.volterra.io` | `tenant.console.ves.volterra.io/api` |
|
|
366
|
+
| `https://tenant.volterra.us/` | `https://tenant.console.ves.volterra.io/api` |
|
|
367
|
+
|
|
368
|
+
## Development
|
|
369
|
+
|
|
370
|
+
### Prerequisites
|
|
371
|
+
|
|
372
|
+
- Node.js 20+
|
|
373
|
+
- npm 9+
|
|
374
|
+
|
|
375
|
+
### Setup
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
git clone https://github.com/robinmordasiewicz/f5xc-api-mcp.git
|
|
379
|
+
cd f5xc-api-mcp
|
|
380
|
+
npm install
|
|
381
|
+
npm run build
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### Testing
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
npm test # Run tests
|
|
388
|
+
npm run test:watch # Watch mode
|
|
389
|
+
npm run test:coverage # Coverage report
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Linting
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
npm run lint # Check linting
|
|
396
|
+
npm run lint:fix # Fix linting issues
|
|
397
|
+
npm run format # Format code
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
## Documentation
|
|
401
|
+
|
|
402
|
+
Full documentation is available at: <https://robinmordasiewicz.github.io/f5xc-api-mcp>
|
|
403
|
+
|
|
404
|
+
## Contributing
|
|
405
|
+
|
|
406
|
+
Contributions are welcome! Please read our contributing guidelines and submit pull requests.
|
|
407
|
+
|
|
408
|
+
## License
|
|
409
|
+
|
|
410
|
+
MIT License - see [LICENSE](LICENSE) for details.
|
|
411
|
+
|
|
412
|
+
## Support
|
|
413
|
+
|
|
414
|
+
- [GitHub Issues](https://github.com/robinmordasiewicz/f5xc-api-mcp/issues)
|
|
415
|
+
- [GitHub Discussions](https://github.com/robinmordasiewicz/f5xc-api-mcp/discussions)
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential Manager for F5 Distributed Cloud API
|
|
3
|
+
*
|
|
4
|
+
* Handles authentication configuration and URL normalization.
|
|
5
|
+
* Supports dual-mode operation:
|
|
6
|
+
* - Documentation mode: No credentials required
|
|
7
|
+
* - Execution mode: API token or P12 certificate authentication
|
|
8
|
+
*/
|
|
9
|
+
import { ConfigManager } from "../config/index.js";
|
|
10
|
+
/**
|
|
11
|
+
* Authentication modes supported by the server
|
|
12
|
+
*/
|
|
13
|
+
export declare enum AuthMode {
|
|
14
|
+
/** No authentication - documentation mode only */
|
|
15
|
+
NONE = "none",
|
|
16
|
+
/** API token authentication */
|
|
17
|
+
TOKEN = "token",
|
|
18
|
+
/** P12 certificate authentication (mTLS) */
|
|
19
|
+
CERTIFICATE = "certificate"
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Environment variable names for authentication
|
|
23
|
+
*/
|
|
24
|
+
export declare const AUTH_ENV_VARS: {
|
|
25
|
+
readonly API_URL: "F5XC_API_URL";
|
|
26
|
+
readonly API_TOKEN: "F5XC_API_TOKEN";
|
|
27
|
+
readonly P12_FILE: "F5XC_P12_FILE";
|
|
28
|
+
readonly P12_PASSWORD: "F5XC_P12_PASSWORD";
|
|
29
|
+
readonly PROFILE: "F5XC_PROFILE";
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Credential configuration for API access
|
|
33
|
+
*/
|
|
34
|
+
export interface Credentials {
|
|
35
|
+
/** Authentication mode */
|
|
36
|
+
mode: AuthMode;
|
|
37
|
+
/** Normalized API URL */
|
|
38
|
+
apiUrl: string | null;
|
|
39
|
+
/** API token (for token auth) */
|
|
40
|
+
token: string | null;
|
|
41
|
+
/** P12 certificate buffer (for cert auth) */
|
|
42
|
+
p12Certificate: Buffer | null;
|
|
43
|
+
/** P12 certificate password */
|
|
44
|
+
p12Password: string | null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Normalize F5XC tenant URL to standard API endpoint format
|
|
48
|
+
*
|
|
49
|
+
* Handles various input formats:
|
|
50
|
+
* - tenant.volterra.us -> tenant.console.ves.volterra.io/api
|
|
51
|
+
* - tenant.staging.volterra.us -> tenant.staging.console.ves.volterra.io/api
|
|
52
|
+
* - tenant.console.ves.volterra.io -> tenant.console.ves.volterra.io/api
|
|
53
|
+
* - Any of the above with trailing slashes or /api suffix
|
|
54
|
+
*
|
|
55
|
+
* @param input - Raw URL from user configuration
|
|
56
|
+
* @returns Normalized API URL
|
|
57
|
+
*/
|
|
58
|
+
export declare function normalizeApiUrl(input: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* Extract tenant name from a normalized URL
|
|
61
|
+
*
|
|
62
|
+
* @param url - Normalized API URL
|
|
63
|
+
* @returns Tenant name or null if not parseable
|
|
64
|
+
*/
|
|
65
|
+
export declare function extractTenantFromUrl(url: string): string | null;
|
|
66
|
+
/**
|
|
67
|
+
* Credential Manager
|
|
68
|
+
*
|
|
69
|
+
* Manages authentication credentials for F5 Distributed Cloud API.
|
|
70
|
+
* Supports dual-layer credential loading with priority:
|
|
71
|
+
* 1. Environment variables (highest priority - overrides all)
|
|
72
|
+
* 2. Named profiles from ~/.f5xc/credentials.json
|
|
73
|
+
* 3. No credentials (documentation mode - lowest priority)
|
|
74
|
+
*/
|
|
75
|
+
export declare class CredentialManager {
|
|
76
|
+
private credentials;
|
|
77
|
+
private activeProfile;
|
|
78
|
+
private configManager;
|
|
79
|
+
constructor(configManager?: ConfigManager);
|
|
80
|
+
/**
|
|
81
|
+
* Load credentials from environment variables
|
|
82
|
+
*/
|
|
83
|
+
private loadFromEnvironment;
|
|
84
|
+
/**
|
|
85
|
+
* Load credentials from configuration file
|
|
86
|
+
*/
|
|
87
|
+
private loadFromConfigFile;
|
|
88
|
+
/**
|
|
89
|
+
* Select which profile to use based on environment or config
|
|
90
|
+
*/
|
|
91
|
+
private selectProfile;
|
|
92
|
+
/**
|
|
93
|
+
* Merge raw credentials from environment and config
|
|
94
|
+
* Environment variables override profile settings
|
|
95
|
+
*/
|
|
96
|
+
private mergeCredentials;
|
|
97
|
+
/**
|
|
98
|
+
* Build credentials object from raw credentials
|
|
99
|
+
*/
|
|
100
|
+
private buildCredentials;
|
|
101
|
+
/**
|
|
102
|
+
* Load credentials with priority order:
|
|
103
|
+
* 1. Environment variables (highest)
|
|
104
|
+
* 2. Profile from config file
|
|
105
|
+
* 3. No credentials - documentation mode (lowest)
|
|
106
|
+
*/
|
|
107
|
+
private loadCredentials;
|
|
108
|
+
/**
|
|
109
|
+
* Get the active profile name (if any)
|
|
110
|
+
* Returns null if credentials are from environment variables or no profile is active
|
|
111
|
+
*/
|
|
112
|
+
getActiveProfile(): string | null;
|
|
113
|
+
/**
|
|
114
|
+
* Get the current authentication mode
|
|
115
|
+
*/
|
|
116
|
+
getAuthMode(): AuthMode;
|
|
117
|
+
/**
|
|
118
|
+
* Check if the server is in authenticated mode
|
|
119
|
+
*/
|
|
120
|
+
isAuthenticated(): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Get the normalized API URL
|
|
123
|
+
*/
|
|
124
|
+
getApiUrl(): string | null;
|
|
125
|
+
/**
|
|
126
|
+
* Get the tenant name
|
|
127
|
+
*/
|
|
128
|
+
getTenant(): string | null;
|
|
129
|
+
/**
|
|
130
|
+
* Get API token (for token authentication)
|
|
131
|
+
*/
|
|
132
|
+
getToken(): string | null;
|
|
133
|
+
/**
|
|
134
|
+
* Get P12 certificate buffer (for certificate authentication)
|
|
135
|
+
*/
|
|
136
|
+
getP12Certificate(): Buffer | null;
|
|
137
|
+
/**
|
|
138
|
+
* Get P12 certificate password
|
|
139
|
+
*/
|
|
140
|
+
getP12Password(): string | null;
|
|
141
|
+
/**
|
|
142
|
+
* Get full credentials object
|
|
143
|
+
*/
|
|
144
|
+
getCredentials(): Readonly<Credentials>;
|
|
145
|
+
/**
|
|
146
|
+
* Reload credentials from environment
|
|
147
|
+
* Useful for testing or when credentials change
|
|
148
|
+
*/
|
|
149
|
+
reload(): void;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=credential-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-manager.d.ts","sourceRoot":"","sources":["../../src/auth/credential-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;GAEG;AACH,oBAAY,QAAQ;IAClB,kDAAkD;IAClD,IAAI,SAAS;IACb,+BAA+B;IAC/B,KAAK,UAAU;IACf,4CAA4C;IAC5C,WAAW,gBAAgB;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAaX;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,0BAA0B;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,yBAAyB;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iCAAiC;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6CAA6C;IAC7C,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,+BAA+B;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAcD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBrD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED;;;;;;;;GAQG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,aAAa,CAAgB;gBAEzB,aAAa,CAAC,EAAE,aAAa;IAKzC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuC1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IA0CvB;;;OAGG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,WAAW,IAAI,QAAQ;IAIvB;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,cAAc,IAAI,QAAQ,CAAC,WAAW,CAAC;IAIvC;;;OAGG;IACH,MAAM,IAAI,IAAI;CAGf"}
|