@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
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Manager for F5XC API MCP
|
|
3
|
+
* Handles reading/writing configuration files with proper permissions and atomic operations
|
|
4
|
+
*/
|
|
5
|
+
import { ConfigFile, ProfileCredentials } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Manages F5XC API MCP configuration files
|
|
8
|
+
*/
|
|
9
|
+
export declare class ConfigManager {
|
|
10
|
+
private configDir;
|
|
11
|
+
private configFile;
|
|
12
|
+
constructor(configDir?: string, configFile?: string);
|
|
13
|
+
/**
|
|
14
|
+
* Check if configuration file exists
|
|
15
|
+
*/
|
|
16
|
+
exists(): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Ensure configuration directory exists with proper permissions
|
|
19
|
+
*/
|
|
20
|
+
private ensureConfigDir;
|
|
21
|
+
/**
|
|
22
|
+
* Check and fix file permissions
|
|
23
|
+
*/
|
|
24
|
+
private checkAndFixPermissions;
|
|
25
|
+
/**
|
|
26
|
+
* Read configuration file (async)
|
|
27
|
+
*/
|
|
28
|
+
read(): Promise<ConfigFile>;
|
|
29
|
+
/**
|
|
30
|
+
* Read configuration file synchronously (for initialization)
|
|
31
|
+
* Note: This is used during CredentialManager construction
|
|
32
|
+
*/
|
|
33
|
+
readSync(): ConfigFile;
|
|
34
|
+
/**
|
|
35
|
+
* Write configuration file with atomic operation
|
|
36
|
+
* Uses temp file + rename pattern to ensure consistency
|
|
37
|
+
*/
|
|
38
|
+
write(config: ConfigFile): Promise<void>;
|
|
39
|
+
/**
|
|
40
|
+
* Get list of all profile names
|
|
41
|
+
*/
|
|
42
|
+
listProfiles(): Promise<string[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Get a specific profile by name
|
|
45
|
+
*/
|
|
46
|
+
getProfile(name: string): Promise<ProfileCredentials | null>;
|
|
47
|
+
/**
|
|
48
|
+
* Create or update a profile
|
|
49
|
+
*/
|
|
50
|
+
setProfile(name: string, credentials: ProfileCredentials): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Delete a profile by name
|
|
53
|
+
*/
|
|
54
|
+
deleteProfile(name: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Get the default profile name
|
|
57
|
+
*/
|
|
58
|
+
getDefaultProfile(): Promise<string | null>;
|
|
59
|
+
/**
|
|
60
|
+
* Set the default profile
|
|
61
|
+
*/
|
|
62
|
+
setDefaultProfile(name: string): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Update the lastUsedAt timestamp for a profile
|
|
65
|
+
*/
|
|
66
|
+
touchProfile(name: string): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Get the full configuration file
|
|
69
|
+
*/
|
|
70
|
+
getConfig(): Promise<ConfigFile>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=config-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACL,UAAU,EACV,kBAAkB,EAMnB,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;gBAEf,SAAS,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAKnD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAShC;;OAEG;YACW,eAAe;IAY7B;;OAEG;YACW,sBAAsB;IAsBpC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAiBjC;;;OAGG;IACH,QAAQ,IAAI,UAAU;IAiCtB;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC9C;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAKvC;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IAKlE;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB9E;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKjD;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB/C;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;CAGvC"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Manager for F5XC API MCP
|
|
3
|
+
* Handles reading/writing configuration files with proper permissions and atomic operations
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from "fs/promises";
|
|
6
|
+
import * as fsSync from "fs";
|
|
7
|
+
import * as path from "path";
|
|
8
|
+
import { DEFAULT_CONFIG, CONFIG_DIR_PERMISSIONS, CONFIG_FILE_PERMISSIONS, getConfigDirPath, getConfigFilePath, } from "./types.js";
|
|
9
|
+
import { validateConfigFile, safeValidateConfigFile } from "./schema.js";
|
|
10
|
+
/**
|
|
11
|
+
* Manages F5XC API MCP configuration files
|
|
12
|
+
*/
|
|
13
|
+
export class ConfigManager {
|
|
14
|
+
configDir;
|
|
15
|
+
configFile;
|
|
16
|
+
constructor(configDir, configFile) {
|
|
17
|
+
this.configDir = configDir || getConfigDirPath();
|
|
18
|
+
this.configFile = configFile || getConfigFilePath();
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Check if configuration file exists
|
|
22
|
+
*/
|
|
23
|
+
async exists() {
|
|
24
|
+
try {
|
|
25
|
+
await fs.access(this.configFile);
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Ensure configuration directory exists with proper permissions
|
|
34
|
+
*/
|
|
35
|
+
async ensureConfigDir() {
|
|
36
|
+
try {
|
|
37
|
+
await fs.mkdir(this.configDir, { recursive: true, mode: CONFIG_DIR_PERMISSIONS });
|
|
38
|
+
// Fix permissions if directory already exists
|
|
39
|
+
await fs.chmod(this.configDir, CONFIG_DIR_PERMISSIONS);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
throw new Error(`Failed to create config directory: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check and fix file permissions
|
|
47
|
+
*/
|
|
48
|
+
async checkAndFixPermissions(filePath, expectedPermissions) {
|
|
49
|
+
try {
|
|
50
|
+
const stats = await fs.stat(filePath);
|
|
51
|
+
const currentMode = stats.mode & 0o777;
|
|
52
|
+
if (currentMode !== expectedPermissions) {
|
|
53
|
+
console.warn(`Warning: Config file has insecure permissions (${currentMode.toString(8)}). Fixing to ${expectedPermissions.toString(8)}...`);
|
|
54
|
+
await fs.chmod(filePath, expectedPermissions);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const err = error;
|
|
59
|
+
if (err.code !== "ENOENT") {
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Read configuration file (async)
|
|
66
|
+
*/
|
|
67
|
+
async read() {
|
|
68
|
+
try {
|
|
69
|
+
await this.checkAndFixPermissions(this.configFile, CONFIG_FILE_PERMISSIONS);
|
|
70
|
+
const content = await fs.readFile(this.configFile, "utf-8");
|
|
71
|
+
const data = JSON.parse(content);
|
|
72
|
+
return validateConfigFile(data);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
const err = error;
|
|
76
|
+
if (err.code === "ENOENT") {
|
|
77
|
+
return DEFAULT_CONFIG;
|
|
78
|
+
}
|
|
79
|
+
throw new Error(`Failed to read config file: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Read configuration file synchronously (for initialization)
|
|
84
|
+
* Note: This is used during CredentialManager construction
|
|
85
|
+
*/
|
|
86
|
+
readSync() {
|
|
87
|
+
try {
|
|
88
|
+
if (!fsSync.existsSync(this.configFile)) {
|
|
89
|
+
return DEFAULT_CONFIG;
|
|
90
|
+
}
|
|
91
|
+
// Check permissions
|
|
92
|
+
const stats = fsSync.statSync(this.configFile);
|
|
93
|
+
const currentMode = stats.mode & 0o777;
|
|
94
|
+
if (currentMode !== CONFIG_FILE_PERMISSIONS) {
|
|
95
|
+
console.warn(`Warning: Config file has insecure permissions (${currentMode.toString(8)}). Run 'f5xc-api-mcp --setup' to fix.`);
|
|
96
|
+
}
|
|
97
|
+
const content = fsSync.readFileSync(this.configFile, "utf-8");
|
|
98
|
+
const data = JSON.parse(content);
|
|
99
|
+
const result = safeValidateConfigFile(data);
|
|
100
|
+
if (!result.success) {
|
|
101
|
+
console.warn(`Warning: Invalid config file: ${result.error}`);
|
|
102
|
+
return DEFAULT_CONFIG;
|
|
103
|
+
}
|
|
104
|
+
return result.data;
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
console.warn(`Warning: Failed to read config file: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
108
|
+
return DEFAULT_CONFIG;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Write configuration file with atomic operation
|
|
113
|
+
* Uses temp file + rename pattern to ensure consistency
|
|
114
|
+
*/
|
|
115
|
+
async write(config) {
|
|
116
|
+
await this.ensureConfigDir();
|
|
117
|
+
const tempFile = `${this.configFile}.tmp.${Date.now()}`;
|
|
118
|
+
try {
|
|
119
|
+
// Validate before writing
|
|
120
|
+
validateConfigFile(config);
|
|
121
|
+
// Write to temporary file
|
|
122
|
+
const content = JSON.stringify(config, null, 2);
|
|
123
|
+
const tempDir = path.dirname(tempFile);
|
|
124
|
+
// Ensure directories exist
|
|
125
|
+
await fs.mkdir(tempDir, { recursive: true, mode: CONFIG_DIR_PERMISSIONS });
|
|
126
|
+
await fs.writeFile(tempFile, content, { mode: CONFIG_FILE_PERMISSIONS });
|
|
127
|
+
// Ensure target directory exists before rename
|
|
128
|
+
const targetDir = path.dirname(this.configFile);
|
|
129
|
+
await fs.mkdir(targetDir, { recursive: true, mode: CONFIG_DIR_PERMISSIONS });
|
|
130
|
+
// Atomic rename
|
|
131
|
+
await fs.rename(tempFile, this.configFile);
|
|
132
|
+
// Verify permissions
|
|
133
|
+
await this.checkAndFixPermissions(this.configFile, CONFIG_FILE_PERMISSIONS);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
// Clean up temp file on error
|
|
137
|
+
try {
|
|
138
|
+
await fs.unlink(tempFile);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Ignore cleanup errors
|
|
142
|
+
}
|
|
143
|
+
throw new Error(`Failed to write config file: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get list of all profile names
|
|
148
|
+
*/
|
|
149
|
+
async listProfiles() {
|
|
150
|
+
const config = await this.read();
|
|
151
|
+
return Object.keys(config.profiles);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get a specific profile by name
|
|
155
|
+
*/
|
|
156
|
+
async getProfile(name) {
|
|
157
|
+
const config = await this.read();
|
|
158
|
+
return config.profiles[name] || null;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Create or update a profile
|
|
162
|
+
*/
|
|
163
|
+
async setProfile(name, credentials) {
|
|
164
|
+
const config = await this.read();
|
|
165
|
+
// Validate profile name
|
|
166
|
+
if (!/^[a-z0-9_-]+$/i.test(name)) {
|
|
167
|
+
throw new Error("Profile name must contain only alphanumeric characters, hyphens, and underscores");
|
|
168
|
+
}
|
|
169
|
+
// Set metadata if not provided
|
|
170
|
+
if (!credentials.metadata) {
|
|
171
|
+
credentials.metadata = {
|
|
172
|
+
createdAt: new Date().toISOString(),
|
|
173
|
+
lastModifiedAt: new Date().toISOString(),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
credentials.metadata.lastModifiedAt = new Date().toISOString();
|
|
178
|
+
}
|
|
179
|
+
config.profiles[name] = credentials;
|
|
180
|
+
config.metadata = { lastModifiedAt: new Date().toISOString() };
|
|
181
|
+
await this.write(config);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Delete a profile by name
|
|
185
|
+
*/
|
|
186
|
+
async deleteProfile(name) {
|
|
187
|
+
const config = await this.read();
|
|
188
|
+
if (!config.profiles[name]) {
|
|
189
|
+
throw new Error(`Profile "${name}" does not exist`);
|
|
190
|
+
}
|
|
191
|
+
delete config.profiles[name];
|
|
192
|
+
// Clear default profile if it was deleted
|
|
193
|
+
if (config.defaultProfile === name) {
|
|
194
|
+
config.defaultProfile = undefined;
|
|
195
|
+
}
|
|
196
|
+
config.metadata = { lastModifiedAt: new Date().toISOString() };
|
|
197
|
+
await this.write(config);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get the default profile name
|
|
201
|
+
*/
|
|
202
|
+
async getDefaultProfile() {
|
|
203
|
+
const config = await this.read();
|
|
204
|
+
return config.defaultProfile || null;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Set the default profile
|
|
208
|
+
*/
|
|
209
|
+
async setDefaultProfile(name) {
|
|
210
|
+
const config = await this.read();
|
|
211
|
+
if (!config.profiles[name]) {
|
|
212
|
+
throw new Error(`Profile "${name}" does not exist`);
|
|
213
|
+
}
|
|
214
|
+
config.defaultProfile = name;
|
|
215
|
+
config.metadata = { lastModifiedAt: new Date().toISOString() };
|
|
216
|
+
await this.write(config);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Update the lastUsedAt timestamp for a profile
|
|
220
|
+
*/
|
|
221
|
+
async touchProfile(name) {
|
|
222
|
+
const config = await this.read();
|
|
223
|
+
const profile = config.profiles[name];
|
|
224
|
+
if (!profile) {
|
|
225
|
+
return; // Silently ignore if profile doesn't exist
|
|
226
|
+
}
|
|
227
|
+
if (!profile.metadata) {
|
|
228
|
+
profile.metadata = {
|
|
229
|
+
createdAt: new Date().toISOString(),
|
|
230
|
+
lastModifiedAt: new Date().toISOString(),
|
|
231
|
+
lastUsedAt: new Date().toISOString(),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
profile.metadata.lastUsedAt = new Date().toISOString();
|
|
236
|
+
}
|
|
237
|
+
config.metadata = { lastModifiedAt: new Date().toISOString() };
|
|
238
|
+
await this.write(config);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get the full configuration file
|
|
242
|
+
*/
|
|
243
|
+
async getConfig() {
|
|
244
|
+
return this.read();
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=config-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-manager.js","sourceRoot":"","sources":["../../src/config/config-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod validation schemas for F5XC API MCP configuration
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import type { ConfigFile, ProfileCredentials } from "./types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Schema for profile metadata
|
|
8
|
+
*/
|
|
9
|
+
export declare const ProfileMetadataSchema: z.ZodObject<{
|
|
10
|
+
description: z.ZodOptional<z.ZodString>;
|
|
11
|
+
createdAt: z.ZodString;
|
|
12
|
+
lastUsedAt: z.ZodOptional<z.ZodString>;
|
|
13
|
+
lastModifiedAt: z.ZodString;
|
|
14
|
+
}, z.core.$strict>;
|
|
15
|
+
/**
|
|
16
|
+
* Schema for profile credentials
|
|
17
|
+
*/
|
|
18
|
+
export declare const ProfileCredentialsSchema: z.ZodObject<{
|
|
19
|
+
apiUrl: z.ZodOptional<z.ZodString>;
|
|
20
|
+
apiToken: z.ZodOptional<z.ZodString>;
|
|
21
|
+
p12File: z.ZodOptional<z.ZodString>;
|
|
22
|
+
p12Password: z.ZodOptional<z.ZodString>;
|
|
23
|
+
metadata: z.ZodOptional<z.ZodObject<{
|
|
24
|
+
description: z.ZodOptional<z.ZodString>;
|
|
25
|
+
createdAt: z.ZodString;
|
|
26
|
+
lastUsedAt: z.ZodOptional<z.ZodString>;
|
|
27
|
+
lastModifiedAt: z.ZodString;
|
|
28
|
+
}, z.core.$strict>>;
|
|
29
|
+
}, z.core.$strict>;
|
|
30
|
+
/**
|
|
31
|
+
* Schema for configuration file
|
|
32
|
+
*/
|
|
33
|
+
export declare const ConfigFileSchema: z.ZodObject<{
|
|
34
|
+
version: z.ZodString;
|
|
35
|
+
defaultProfile: z.ZodOptional<z.ZodString>;
|
|
36
|
+
profiles: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
37
|
+
apiUrl: z.ZodOptional<z.ZodString>;
|
|
38
|
+
apiToken: z.ZodOptional<z.ZodString>;
|
|
39
|
+
p12File: z.ZodOptional<z.ZodString>;
|
|
40
|
+
p12Password: z.ZodOptional<z.ZodString>;
|
|
41
|
+
metadata: z.ZodOptional<z.ZodObject<{
|
|
42
|
+
description: z.ZodOptional<z.ZodString>;
|
|
43
|
+
createdAt: z.ZodString;
|
|
44
|
+
lastUsedAt: z.ZodOptional<z.ZodString>;
|
|
45
|
+
lastModifiedAt: z.ZodString;
|
|
46
|
+
}, z.core.$strict>>;
|
|
47
|
+
}, z.core.$strict>>;
|
|
48
|
+
metadata: z.ZodOptional<z.ZodObject<{
|
|
49
|
+
lastModifiedAt: z.ZodString;
|
|
50
|
+
}, z.core.$strict>>;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
/**
|
|
53
|
+
* Validate a configuration file
|
|
54
|
+
* @param data - Data to validate
|
|
55
|
+
* @returns Validated ConfigFile or throws ZodError
|
|
56
|
+
*/
|
|
57
|
+
export declare function validateConfigFile(data: unknown): ConfigFile;
|
|
58
|
+
/**
|
|
59
|
+
* Validate profile credentials
|
|
60
|
+
* @param data - Data to validate
|
|
61
|
+
* @returns Validated ProfileCredentials or throws ZodError
|
|
62
|
+
*/
|
|
63
|
+
export declare function validateProfileCredentials(data: unknown): ProfileCredentials;
|
|
64
|
+
/**
|
|
65
|
+
* Safely validate a configuration file
|
|
66
|
+
* @param data - Data to validate
|
|
67
|
+
* @returns Object with success flag and data or error
|
|
68
|
+
*/
|
|
69
|
+
export declare function safeValidateConfigFile(data: unknown): {
|
|
70
|
+
success: boolean;
|
|
71
|
+
data?: ConfigFile;
|
|
72
|
+
error?: string;
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEjE;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;kBAOvB,CAAC;AAEZ;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;kBAQ1B,CAAC;AAEZ;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;kBAYlB,CAAC;AAEZ;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAE5D;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAE5E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAQA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod validation schemas for F5XC API MCP configuration
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
/**
|
|
6
|
+
* Schema for profile metadata
|
|
7
|
+
*/
|
|
8
|
+
export const ProfileMetadataSchema = z
|
|
9
|
+
.object({
|
|
10
|
+
description: z.string().optional(),
|
|
11
|
+
createdAt: z.string().datetime(),
|
|
12
|
+
lastUsedAt: z.string().datetime().optional(),
|
|
13
|
+
lastModifiedAt: z.string().datetime(),
|
|
14
|
+
})
|
|
15
|
+
.strict();
|
|
16
|
+
/**
|
|
17
|
+
* Schema for profile credentials
|
|
18
|
+
*/
|
|
19
|
+
export const ProfileCredentialsSchema = z
|
|
20
|
+
.object({
|
|
21
|
+
apiUrl: z.string().url().optional(),
|
|
22
|
+
apiToken: z.string().optional(),
|
|
23
|
+
p12File: z.string().optional(),
|
|
24
|
+
p12Password: z.string().optional(),
|
|
25
|
+
metadata: ProfileMetadataSchema.optional(),
|
|
26
|
+
})
|
|
27
|
+
.strict();
|
|
28
|
+
/**
|
|
29
|
+
* Schema for configuration file
|
|
30
|
+
*/
|
|
31
|
+
export const ConfigFileSchema = z
|
|
32
|
+
.object({
|
|
33
|
+
version: z.string(),
|
|
34
|
+
defaultProfile: z.string().optional(),
|
|
35
|
+
profiles: z.record(z.string(), ProfileCredentialsSchema),
|
|
36
|
+
metadata: z
|
|
37
|
+
.object({
|
|
38
|
+
lastModifiedAt: z.string().datetime(),
|
|
39
|
+
})
|
|
40
|
+
.strict()
|
|
41
|
+
.optional(),
|
|
42
|
+
})
|
|
43
|
+
.strict();
|
|
44
|
+
/**
|
|
45
|
+
* Validate a configuration file
|
|
46
|
+
* @param data - Data to validate
|
|
47
|
+
* @returns Validated ConfigFile or throws ZodError
|
|
48
|
+
*/
|
|
49
|
+
export function validateConfigFile(data) {
|
|
50
|
+
return ConfigFileSchema.parse(data);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Validate profile credentials
|
|
54
|
+
* @param data - Data to validate
|
|
55
|
+
* @returns Validated ProfileCredentials or throws ZodError
|
|
56
|
+
*/
|
|
57
|
+
export function validateProfileCredentials(data) {
|
|
58
|
+
return ProfileCredentialsSchema.parse(data);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Safely validate a configuration file
|
|
62
|
+
* @param data - Data to validate
|
|
63
|
+
* @returns Object with success flag and data or error
|
|
64
|
+
*/
|
|
65
|
+
export function safeValidateConfigFile(data) {
|
|
66
|
+
try {
|
|
67
|
+
const config = validateConfigFile(data);
|
|
68
|
+
return { success: true, data: config };
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const message = error instanceof Error ? error.message : "Unknown validation error";
|
|
72
|
+
return { success: false, error: message };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC;KACnC,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAChC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE;CAC3C,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC;KAC9B,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC;IACxD,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC;QACN,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACtC,CAAC;SACD,MAAM,EAAE;SACR,QAAQ,EAAE;CACd,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAa;IAC9C,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAa;IACtD,OAAO,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAKlD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACpF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for F5XC API MCP credential management
|
|
3
|
+
* Supports multiple named profiles stored in ~/.f5xc/credentials.json
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Metadata about a profile
|
|
7
|
+
*/
|
|
8
|
+
export interface ProfileMetadata {
|
|
9
|
+
/** Optional description of the profile (e.g., "Production", "Staging") */
|
|
10
|
+
description?: string;
|
|
11
|
+
/** ISO timestamp when profile was created */
|
|
12
|
+
createdAt: string;
|
|
13
|
+
/** ISO timestamp when profile was last used */
|
|
14
|
+
lastUsedAt?: string;
|
|
15
|
+
/** ISO timestamp when profile was last modified */
|
|
16
|
+
lastModifiedAt: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Credentials for a single F5XC tenant profile
|
|
20
|
+
*/
|
|
21
|
+
export interface ProfileCredentials {
|
|
22
|
+
/** F5XC API URL (e.g., https://tenant.volterra.io) */
|
|
23
|
+
apiUrl?: string;
|
|
24
|
+
/** F5XC API Token for TOKEN auth mode */
|
|
25
|
+
apiToken?: string;
|
|
26
|
+
/** Path to P12 certificate file for CERTIFICATE auth mode */
|
|
27
|
+
p12File?: string;
|
|
28
|
+
/** Password for P12 certificate */
|
|
29
|
+
p12Password?: string;
|
|
30
|
+
/** Metadata about this profile */
|
|
31
|
+
metadata?: ProfileMetadata;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Complete configuration file structure
|
|
35
|
+
* Stored at ~/.f5xc/credentials.json
|
|
36
|
+
*/
|
|
37
|
+
export interface ConfigFile {
|
|
38
|
+
/** Configuration schema version for migration purposes */
|
|
39
|
+
version: string;
|
|
40
|
+
/** Name of the default profile to use */
|
|
41
|
+
defaultProfile?: string;
|
|
42
|
+
/** Map of profile names to their credentials */
|
|
43
|
+
profiles: Record<string, ProfileCredentials>;
|
|
44
|
+
/** General metadata about the config file */
|
|
45
|
+
metadata?: {
|
|
46
|
+
lastModifiedAt: string;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Raw credentials as loaded from environment or config
|
|
51
|
+
* Used internally for credential processing
|
|
52
|
+
*/
|
|
53
|
+
export interface RawCredentials {
|
|
54
|
+
apiUrl?: string;
|
|
55
|
+
token?: string;
|
|
56
|
+
p12File?: string;
|
|
57
|
+
p12Password?: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Configuration schema version
|
|
61
|
+
*/
|
|
62
|
+
export declare const CONFIG_SCHEMA_VERSION = "1.0";
|
|
63
|
+
/**
|
|
64
|
+
* Default empty configuration
|
|
65
|
+
*/
|
|
66
|
+
export declare const DEFAULT_CONFIG: ConfigFile;
|
|
67
|
+
/**
|
|
68
|
+
* File system permissions for security
|
|
69
|
+
*/
|
|
70
|
+
export declare const CONFIG_DIR_PERMISSIONS = 448;
|
|
71
|
+
export declare const CONFIG_FILE_PERMISSIONS = 384;
|
|
72
|
+
/**
|
|
73
|
+
* Configuration paths
|
|
74
|
+
*/
|
|
75
|
+
export declare const getConfigDirPath: () => string;
|
|
76
|
+
export declare const getConfigFilePath: () => string;
|
|
77
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC7C,6CAA6C;IAC7C,QAAQ,CAAC,EAAE;QACT,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,UAG5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,MAAQ,CAAC;AAC5C,eAAO,MAAM,uBAAuB,MAAQ,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,gBAAgB,QAAO,MAGnC,CAAC;AAEF,eAAO,MAAM,iBAAiB,QAAO,MAEpC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration types for F5XC API MCP credential management
|
|
3
|
+
* Supports multiple named profiles stored in ~/.f5xc/credentials.json
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Configuration schema version
|
|
7
|
+
*/
|
|
8
|
+
export const CONFIG_SCHEMA_VERSION = "1.0";
|
|
9
|
+
/**
|
|
10
|
+
* Default empty configuration
|
|
11
|
+
*/
|
|
12
|
+
export const DEFAULT_CONFIG = {
|
|
13
|
+
version: CONFIG_SCHEMA_VERSION,
|
|
14
|
+
profiles: {},
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* File system permissions for security
|
|
18
|
+
*/
|
|
19
|
+
export const CONFIG_DIR_PERMISSIONS = 0o700; // rwx------ (user only)
|
|
20
|
+
export const CONFIG_FILE_PERMISSIONS = 0o600; // rw------- (user read/write only)
|
|
21
|
+
/**
|
|
22
|
+
* Configuration paths
|
|
23
|
+
*/
|
|
24
|
+
export const getConfigDirPath = () => {
|
|
25
|
+
const home = process.env.HOME || process.env.USERPROFILE || "";
|
|
26
|
+
return `${home}/.f5xc`;
|
|
27
|
+
};
|
|
28
|
+
export const getConfigFilePath = () => {
|
|
29
|
+
return `${getConfigDirPath()}/credentials.json`;
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA4DH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAe;IACxC,OAAO,EAAE,qBAAqB;IAC9B,QAAQ,EAAE,EAAE;CACb,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,CAAC,CAAC,wBAAwB;AACrE,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,CAAC,mCAAmC;AAEjF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/D,OAAO,GAAG,IAAI,QAAQ,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE;IAC5C,OAAO,GAAG,gBAAgB,EAAE,mBAAmB,CAAC;AAClD,CAAC,CAAC"}
|