@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,330 @@
|
|
|
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 { readFileSync } from "fs";
|
|
10
|
+
import { logger } from "../utils/logging.js";
|
|
11
|
+
import { ConfigManager } from "../config/index.js";
|
|
12
|
+
/**
|
|
13
|
+
* Authentication modes supported by the server
|
|
14
|
+
*/
|
|
15
|
+
export var AuthMode;
|
|
16
|
+
(function (AuthMode) {
|
|
17
|
+
/** No authentication - documentation mode only */
|
|
18
|
+
AuthMode["NONE"] = "none";
|
|
19
|
+
/** API token authentication */
|
|
20
|
+
AuthMode["TOKEN"] = "token";
|
|
21
|
+
/** P12 certificate authentication (mTLS) */
|
|
22
|
+
AuthMode["CERTIFICATE"] = "certificate";
|
|
23
|
+
})(AuthMode || (AuthMode = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Environment variable names for authentication
|
|
26
|
+
*/
|
|
27
|
+
export const AUTH_ENV_VARS = {
|
|
28
|
+
API_URL: "F5XC_API_URL",
|
|
29
|
+
API_TOKEN: "F5XC_API_TOKEN",
|
|
30
|
+
P12_FILE: "F5XC_P12_FILE",
|
|
31
|
+
P12_PASSWORD: "F5XC_P12_PASSWORD",
|
|
32
|
+
PROFILE: "F5XC_PROFILE",
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* URL normalization patterns
|
|
36
|
+
*/
|
|
37
|
+
const URL_PATTERNS = {
|
|
38
|
+
// Match short-form URLs: tenant.volterra.us or tenant.staging.volterra.us
|
|
39
|
+
SHORT_FORM: /^https?:\/\/([^./]+)\.(staging\.)?volterra\.us\/?/i,
|
|
40
|
+
// Match console URLs: tenant.console.ves.volterra.io
|
|
41
|
+
CONSOLE_FORM: /^https?:\/\/([^./]+)\.(staging\.)?console\.ves\.volterra\.io\/?/i,
|
|
42
|
+
// Trailing slashes and /api suffix
|
|
43
|
+
TRAILING_CLEANUP: /\/+$|\/api\/?$/gi,
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Normalize F5XC tenant URL to standard API endpoint format
|
|
47
|
+
*
|
|
48
|
+
* Handles various input formats:
|
|
49
|
+
* - tenant.volterra.us -> tenant.console.ves.volterra.io/api
|
|
50
|
+
* - tenant.staging.volterra.us -> tenant.staging.console.ves.volterra.io/api
|
|
51
|
+
* - tenant.console.ves.volterra.io -> tenant.console.ves.volterra.io/api
|
|
52
|
+
* - Any of the above with trailing slashes or /api suffix
|
|
53
|
+
*
|
|
54
|
+
* @param input - Raw URL from user configuration
|
|
55
|
+
* @returns Normalized API URL
|
|
56
|
+
*/
|
|
57
|
+
export function normalizeApiUrl(input) {
|
|
58
|
+
// Remove trailing slashes and existing /api suffix
|
|
59
|
+
let url = input.replace(URL_PATTERNS.TRAILING_CLEANUP, "");
|
|
60
|
+
// Handle short-form URLs (tenant.volterra.us)
|
|
61
|
+
const shortFormMatch = url.match(URL_PATTERNS.SHORT_FORM);
|
|
62
|
+
if (shortFormMatch) {
|
|
63
|
+
const tenant = shortFormMatch[1];
|
|
64
|
+
const staging = shortFormMatch[2] ?? "";
|
|
65
|
+
url = `https://${tenant}.${staging}console.ves.volterra.io`;
|
|
66
|
+
}
|
|
67
|
+
// Handle console URLs - ensure https
|
|
68
|
+
const consoleMatch = url.match(URL_PATTERNS.CONSOLE_FORM);
|
|
69
|
+
if (consoleMatch) {
|
|
70
|
+
const tenant = consoleMatch[1];
|
|
71
|
+
const staging = consoleMatch[2] ?? "";
|
|
72
|
+
url = `https://${tenant}.${staging}console.ves.volterra.io`;
|
|
73
|
+
}
|
|
74
|
+
// Ensure /api suffix
|
|
75
|
+
return `${url}/api`;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Extract tenant name from a normalized URL
|
|
79
|
+
*
|
|
80
|
+
* @param url - Normalized API URL
|
|
81
|
+
* @returns Tenant name or null if not parseable
|
|
82
|
+
*/
|
|
83
|
+
export function extractTenantFromUrl(url) {
|
|
84
|
+
const match = url.match(/https?:\/\/([^./]+)\./);
|
|
85
|
+
return match?.[1] ?? null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Credential Manager
|
|
89
|
+
*
|
|
90
|
+
* Manages authentication credentials for F5 Distributed Cloud API.
|
|
91
|
+
* Supports dual-layer credential loading with priority:
|
|
92
|
+
* 1. Environment variables (highest priority - overrides all)
|
|
93
|
+
* 2. Named profiles from ~/.f5xc/credentials.json
|
|
94
|
+
* 3. No credentials (documentation mode - lowest priority)
|
|
95
|
+
*/
|
|
96
|
+
export class CredentialManager {
|
|
97
|
+
credentials;
|
|
98
|
+
activeProfile = null;
|
|
99
|
+
configManager;
|
|
100
|
+
constructor(configManager) {
|
|
101
|
+
this.configManager = configManager ?? new ConfigManager();
|
|
102
|
+
this.credentials = this.loadCredentials();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Load credentials from environment variables
|
|
106
|
+
*/
|
|
107
|
+
loadFromEnvironment() {
|
|
108
|
+
return {
|
|
109
|
+
apiUrl: process.env[AUTH_ENV_VARS.API_URL],
|
|
110
|
+
token: process.env[AUTH_ENV_VARS.API_TOKEN],
|
|
111
|
+
p12File: process.env[AUTH_ENV_VARS.P12_FILE],
|
|
112
|
+
p12Password: process.env[AUTH_ENV_VARS.P12_PASSWORD],
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Load credentials from configuration file
|
|
117
|
+
*/
|
|
118
|
+
loadFromConfigFile() {
|
|
119
|
+
try {
|
|
120
|
+
const config = this.configManager.readSync();
|
|
121
|
+
if (!config || Object.keys(config.profiles).length === 0) {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
const profileName = this.selectProfile(config);
|
|
125
|
+
if (!profileName) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
const profile = config.profiles[profileName];
|
|
129
|
+
if (!profile) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
this.activeProfile = profileName;
|
|
133
|
+
// Touch the profile to update lastUsedAt (async, but don't block)
|
|
134
|
+
this.configManager.touchProfile(profileName).catch(() => {
|
|
135
|
+
// Silently ignore touch errors
|
|
136
|
+
});
|
|
137
|
+
return {
|
|
138
|
+
apiUrl: profile.apiUrl,
|
|
139
|
+
token: profile.apiToken,
|
|
140
|
+
p12File: profile.p12File,
|
|
141
|
+
p12Password: profile.p12Password,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
logger.debug("Failed to load credentials from config file", {
|
|
146
|
+
error: error instanceof Error ? error.message : String(error),
|
|
147
|
+
});
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Select which profile to use based on environment or config
|
|
153
|
+
*/
|
|
154
|
+
selectProfile(config) {
|
|
155
|
+
// Check if F5XC_PROFILE is explicitly set
|
|
156
|
+
const envProfile = process.env[AUTH_ENV_VARS.PROFILE];
|
|
157
|
+
if (envProfile && config.profiles[envProfile]) {
|
|
158
|
+
return envProfile;
|
|
159
|
+
}
|
|
160
|
+
// Fall back to default profile if set
|
|
161
|
+
return config.defaultProfile ?? null;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Merge raw credentials from environment and config
|
|
165
|
+
* Environment variables override profile settings
|
|
166
|
+
*/
|
|
167
|
+
mergeCredentials(envCreds, profileCreds) {
|
|
168
|
+
return {
|
|
169
|
+
apiUrl: envCreds.apiUrl ?? profileCreds.apiUrl,
|
|
170
|
+
token: envCreds.token ?? profileCreds.token,
|
|
171
|
+
p12File: envCreds.p12File ?? profileCreds.p12File,
|
|
172
|
+
p12Password: envCreds.p12Password ?? profileCreds.p12Password,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Build credentials object from raw credentials
|
|
177
|
+
*/
|
|
178
|
+
buildCredentials(rawCreds) {
|
|
179
|
+
const apiUrl = rawCreds.apiUrl;
|
|
180
|
+
const token = rawCreds.token;
|
|
181
|
+
const p12File = rawCreds.p12File;
|
|
182
|
+
const p12Password = rawCreds.p12Password;
|
|
183
|
+
// Determine authentication mode
|
|
184
|
+
let mode = AuthMode.NONE;
|
|
185
|
+
let normalizedUrl = null;
|
|
186
|
+
let p12Certificate = null;
|
|
187
|
+
if (apiUrl) {
|
|
188
|
+
normalizedUrl = normalizeApiUrl(apiUrl);
|
|
189
|
+
if (p12File) {
|
|
190
|
+
// Certificate authentication takes precedence
|
|
191
|
+
mode = AuthMode.CERTIFICATE;
|
|
192
|
+
try {
|
|
193
|
+
p12Certificate = readFileSync(p12File);
|
|
194
|
+
logger.info("Loaded P12 certificate", { file: p12File });
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
logger.error("Failed to load P12 certificate", {
|
|
198
|
+
file: p12File,
|
|
199
|
+
error: error instanceof Error ? error.message : String(error),
|
|
200
|
+
});
|
|
201
|
+
// Fall back to token auth if certificate load fails
|
|
202
|
+
if (token) {
|
|
203
|
+
mode = AuthMode.TOKEN;
|
|
204
|
+
logger.info("Falling back to token authentication");
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
mode = AuthMode.NONE;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else if (token) {
|
|
212
|
+
mode = AuthMode.TOKEN;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
mode,
|
|
217
|
+
apiUrl: normalizedUrl,
|
|
218
|
+
token: token ?? null,
|
|
219
|
+
p12Certificate,
|
|
220
|
+
p12Password: p12Password ?? null,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Load credentials with priority order:
|
|
225
|
+
* 1. Environment variables (highest)
|
|
226
|
+
* 2. Profile from config file
|
|
227
|
+
* 3. No credentials - documentation mode (lowest)
|
|
228
|
+
*/
|
|
229
|
+
loadCredentials() {
|
|
230
|
+
// Step 1: Try environment variables first (highest priority)
|
|
231
|
+
const envCreds = this.loadFromEnvironment();
|
|
232
|
+
if (envCreds.apiUrl && (envCreds.token || envCreds.p12File)) {
|
|
233
|
+
const credentials = this.buildCredentials(envCreds);
|
|
234
|
+
const tenant = credentials.apiUrl ? extractTenantFromUrl(credentials.apiUrl) : null;
|
|
235
|
+
logger.info("Credentials loaded from environment variables", {
|
|
236
|
+
mode: credentials.mode,
|
|
237
|
+
tenant,
|
|
238
|
+
profile: this.activeProfile,
|
|
239
|
+
});
|
|
240
|
+
return credentials;
|
|
241
|
+
}
|
|
242
|
+
// Step 2: Try config file profile (medium priority)
|
|
243
|
+
const profileCreds = this.loadFromConfigFile();
|
|
244
|
+
if (profileCreds) {
|
|
245
|
+
const merged = this.mergeCredentials(envCreds, profileCreds);
|
|
246
|
+
const credentials = this.buildCredentials(merged);
|
|
247
|
+
if (credentials.mode !== AuthMode.NONE) {
|
|
248
|
+
const tenant = credentials.apiUrl ? extractTenantFromUrl(credentials.apiUrl) : null;
|
|
249
|
+
logger.info("Credentials loaded from config profile", {
|
|
250
|
+
mode: credentials.mode,
|
|
251
|
+
tenant,
|
|
252
|
+
profile: this.activeProfile,
|
|
253
|
+
});
|
|
254
|
+
return credentials;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
// Step 3: No credentials - documentation mode (lowest priority)
|
|
258
|
+
logger.info("No credentials configured - running in documentation mode");
|
|
259
|
+
return {
|
|
260
|
+
mode: AuthMode.NONE,
|
|
261
|
+
apiUrl: null,
|
|
262
|
+
token: null,
|
|
263
|
+
p12Certificate: null,
|
|
264
|
+
p12Password: null,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Get the active profile name (if any)
|
|
269
|
+
* Returns null if credentials are from environment variables or no profile is active
|
|
270
|
+
*/
|
|
271
|
+
getActiveProfile() {
|
|
272
|
+
return this.activeProfile;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Get the current authentication mode
|
|
276
|
+
*/
|
|
277
|
+
getAuthMode() {
|
|
278
|
+
return this.credentials.mode;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Check if the server is in authenticated mode
|
|
282
|
+
*/
|
|
283
|
+
isAuthenticated() {
|
|
284
|
+
return this.credentials.mode !== AuthMode.NONE;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get the normalized API URL
|
|
288
|
+
*/
|
|
289
|
+
getApiUrl() {
|
|
290
|
+
return this.credentials.apiUrl;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Get the tenant name
|
|
294
|
+
*/
|
|
295
|
+
getTenant() {
|
|
296
|
+
return this.credentials.apiUrl ? extractTenantFromUrl(this.credentials.apiUrl) : null;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Get API token (for token authentication)
|
|
300
|
+
*/
|
|
301
|
+
getToken() {
|
|
302
|
+
return this.credentials.token;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Get P12 certificate buffer (for certificate authentication)
|
|
306
|
+
*/
|
|
307
|
+
getP12Certificate() {
|
|
308
|
+
return this.credentials.p12Certificate;
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Get P12 certificate password
|
|
312
|
+
*/
|
|
313
|
+
getP12Password() {
|
|
314
|
+
return this.credentials.p12Password;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Get full credentials object
|
|
318
|
+
*/
|
|
319
|
+
getCredentials() {
|
|
320
|
+
return Object.freeze({ ...this.credentials });
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Reload credentials from environment
|
|
324
|
+
* Useful for testing or when credentials change
|
|
325
|
+
*/
|
|
326
|
+
reload() {
|
|
327
|
+
this.credentials = this.loadCredentials();
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=credential-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-manager.js","sourceRoot":"","sources":["../../src/auth/credential-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authenticated HTTP Client for F5 Distributed Cloud API
|
|
3
|
+
*
|
|
4
|
+
* Provides a configured Axios client for making authenticated API requests.
|
|
5
|
+
* Supports both API token and P12 certificate (mTLS) authentication.
|
|
6
|
+
*/
|
|
7
|
+
import { AxiosInstance, AxiosRequestConfig } from "axios";
|
|
8
|
+
import { CredentialManager } from "./credential-manager.js";
|
|
9
|
+
/**
|
|
10
|
+
* HTTP client configuration options
|
|
11
|
+
*/
|
|
12
|
+
export interface HttpClientConfig {
|
|
13
|
+
/** Request timeout in milliseconds */
|
|
14
|
+
timeout?: number;
|
|
15
|
+
/** Custom headers to include in all requests */
|
|
16
|
+
headers?: Record<string, string>;
|
|
17
|
+
/** Enable request/response logging */
|
|
18
|
+
debug?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* API response wrapper with metadata
|
|
22
|
+
*/
|
|
23
|
+
export interface ApiResponse<T = unknown> {
|
|
24
|
+
/** Response data */
|
|
25
|
+
data: T;
|
|
26
|
+
/** HTTP status code */
|
|
27
|
+
status: number;
|
|
28
|
+
/** Response headers */
|
|
29
|
+
headers: Record<string, string>;
|
|
30
|
+
/** Request duration in milliseconds */
|
|
31
|
+
duration: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* HTTP Client for F5XC API
|
|
35
|
+
*
|
|
36
|
+
* Creates and manages an authenticated Axios instance for making
|
|
37
|
+
* API requests to F5 Distributed Cloud.
|
|
38
|
+
*/
|
|
39
|
+
export declare class HttpClient {
|
|
40
|
+
private client;
|
|
41
|
+
private credentialManager;
|
|
42
|
+
private config;
|
|
43
|
+
constructor(credentialManager: CredentialManager, config?: HttpClientConfig);
|
|
44
|
+
/**
|
|
45
|
+
* Create configured Axios client
|
|
46
|
+
*/
|
|
47
|
+
private createClient;
|
|
48
|
+
/**
|
|
49
|
+
* Check if the client is available (authenticated mode)
|
|
50
|
+
*/
|
|
51
|
+
isAvailable(): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Make a GET request
|
|
54
|
+
*/
|
|
55
|
+
get<T = unknown>(path: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
56
|
+
/**
|
|
57
|
+
* Make a POST request
|
|
58
|
+
*/
|
|
59
|
+
post<T = unknown>(path: string, data?: unknown, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
60
|
+
/**
|
|
61
|
+
* Make a PUT request
|
|
62
|
+
*/
|
|
63
|
+
put<T = unknown>(path: string, data?: unknown, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
64
|
+
/**
|
|
65
|
+
* Make a DELETE request
|
|
66
|
+
*/
|
|
67
|
+
delete<T = unknown>(path: string, config?: AxiosRequestConfig): Promise<ApiResponse<T>>;
|
|
68
|
+
/**
|
|
69
|
+
* Make a generic request
|
|
70
|
+
*/
|
|
71
|
+
private request;
|
|
72
|
+
/**
|
|
73
|
+
* Get the underlying Axios instance
|
|
74
|
+
*/
|
|
75
|
+
getAxiosInstance(): AxiosInstance | null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create HTTP client from credential manager
|
|
79
|
+
*/
|
|
80
|
+
export declare function createHttpClient(credentialManager: CredentialManager, config?: HttpClientConfig): HttpClient;
|
|
81
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/auth/http-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAc,EACZ,aAAa,EACb,kBAAkB,EAGnB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,iBAAiB,EAAY,MAAM,yBAAyB,CAAC;AAItE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,sCAAsC;IACtC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAWD;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,oBAAoB;IACpB,IAAI,EAAE,CAAC,CAAC;IACR,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,MAAM,CAA6B;gBAE/B,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,GAAE,gBAAqB;IAS/E;;OAEG;IACH,OAAO,CAAC,YAAY;IAoHpB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI1F;;OAEG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI1B;;OAEG;IACG,GAAG,CAAC,CAAC,GAAG,OAAO,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI1B;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAI7F;;OAEG;YACW,OAAO;IAgCrB;;OAEG;IACH,gBAAgB,IAAI,aAAa,GAAG,IAAI;CAGzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,iBAAiB,EAAE,iBAAiB,EACpC,MAAM,CAAC,EAAE,gBAAgB,GACxB,UAAU,CAEZ"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authenticated HTTP Client for F5 Distributed Cloud API
|
|
3
|
+
*
|
|
4
|
+
* Provides a configured Axios client for making authenticated API requests.
|
|
5
|
+
* Supports both API token and P12 certificate (mTLS) authentication.
|
|
6
|
+
*/
|
|
7
|
+
import axios from "axios";
|
|
8
|
+
import https from "https";
|
|
9
|
+
import { AuthMode } from "./credential-manager.js";
|
|
10
|
+
import { logger } from "../utils/logging.js";
|
|
11
|
+
import { F5XCApiError, AuthenticationError } from "../utils/error-handling.js";
|
|
12
|
+
/**
|
|
13
|
+
* Default HTTP client configuration
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_CONFIG = {
|
|
16
|
+
timeout: 30000, // 30 seconds
|
|
17
|
+
headers: {},
|
|
18
|
+
debug: false,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* HTTP Client for F5XC API
|
|
22
|
+
*
|
|
23
|
+
* Creates and manages an authenticated Axios instance for making
|
|
24
|
+
* API requests to F5 Distributed Cloud.
|
|
25
|
+
*/
|
|
26
|
+
export class HttpClient {
|
|
27
|
+
client = null;
|
|
28
|
+
credentialManager;
|
|
29
|
+
config;
|
|
30
|
+
constructor(credentialManager, config = {}) {
|
|
31
|
+
this.credentialManager = credentialManager;
|
|
32
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
33
|
+
if (this.credentialManager.isAuthenticated()) {
|
|
34
|
+
this.client = this.createClient();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create configured Axios client
|
|
39
|
+
*/
|
|
40
|
+
createClient() {
|
|
41
|
+
const authMode = this.credentialManager.getAuthMode();
|
|
42
|
+
const baseURL = this.credentialManager.getApiUrl();
|
|
43
|
+
if (!baseURL) {
|
|
44
|
+
throw new AuthenticationError("API URL not configured");
|
|
45
|
+
}
|
|
46
|
+
const axiosConfig = {
|
|
47
|
+
baseURL,
|
|
48
|
+
timeout: this.config.timeout,
|
|
49
|
+
headers: {
|
|
50
|
+
"Content-Type": "application/json",
|
|
51
|
+
Accept: "application/json",
|
|
52
|
+
...this.config.headers,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
// Configure authentication
|
|
56
|
+
if (authMode === AuthMode.TOKEN) {
|
|
57
|
+
const token = this.credentialManager.getToken();
|
|
58
|
+
if (!token) {
|
|
59
|
+
throw new AuthenticationError("API token not configured");
|
|
60
|
+
}
|
|
61
|
+
axiosConfig.headers = {
|
|
62
|
+
...axiosConfig.headers,
|
|
63
|
+
Authorization: `APIToken ${token}`,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
else if (authMode === AuthMode.CERTIFICATE) {
|
|
67
|
+
const p12Buffer = this.credentialManager.getP12Certificate();
|
|
68
|
+
const p12Password = this.credentialManager.getP12Password();
|
|
69
|
+
if (!p12Buffer) {
|
|
70
|
+
throw new AuthenticationError("P12 certificate not loaded");
|
|
71
|
+
}
|
|
72
|
+
// Create HTTPS agent with P12 certificate for mTLS
|
|
73
|
+
axiosConfig.httpsAgent = new https.Agent({
|
|
74
|
+
pfx: p12Buffer,
|
|
75
|
+
passphrase: p12Password ?? undefined,
|
|
76
|
+
rejectUnauthorized: true,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
const client = axios.create(axiosConfig);
|
|
80
|
+
// Add request interceptor for logging
|
|
81
|
+
client.interceptors.request.use((config) => {
|
|
82
|
+
// Add request timestamp for duration calculation
|
|
83
|
+
config.metadata = {
|
|
84
|
+
startTime: Date.now(),
|
|
85
|
+
};
|
|
86
|
+
if (this.config.debug) {
|
|
87
|
+
logger.debug("API Request", {
|
|
88
|
+
method: config.method?.toUpperCase(),
|
|
89
|
+
url: config.url,
|
|
90
|
+
baseURL: config.baseURL,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return config;
|
|
94
|
+
}, (error) => {
|
|
95
|
+
logger.error("Request interceptor error", { error });
|
|
96
|
+
return Promise.reject(error);
|
|
97
|
+
});
|
|
98
|
+
// Add response interceptor for logging and error handling
|
|
99
|
+
client.interceptors.response.use((response) => {
|
|
100
|
+
const config = response.config;
|
|
101
|
+
const duration = config.metadata ? Date.now() - config.metadata.startTime : 0;
|
|
102
|
+
if (this.config.debug) {
|
|
103
|
+
logger.debug("API Response", {
|
|
104
|
+
status: response.status,
|
|
105
|
+
url: response.config.url,
|
|
106
|
+
duration: `${duration}ms`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
return response;
|
|
110
|
+
}, (error) => {
|
|
111
|
+
if (axios.isAxiosError(error)) {
|
|
112
|
+
const status = error.response?.status;
|
|
113
|
+
const message = error.response?.data?.message ?? error.message;
|
|
114
|
+
logger.error("API Error", {
|
|
115
|
+
status,
|
|
116
|
+
message,
|
|
117
|
+
url: error.config?.url,
|
|
118
|
+
});
|
|
119
|
+
// Transform to F5XC API error
|
|
120
|
+
throw new F5XCApiError(message, status, error.response?.data);
|
|
121
|
+
}
|
|
122
|
+
throw error;
|
|
123
|
+
});
|
|
124
|
+
logger.info("HTTP client created", {
|
|
125
|
+
baseURL,
|
|
126
|
+
authMode,
|
|
127
|
+
timeout: this.config.timeout,
|
|
128
|
+
});
|
|
129
|
+
return client;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check if the client is available (authenticated mode)
|
|
133
|
+
*/
|
|
134
|
+
isAvailable() {
|
|
135
|
+
return this.client !== null;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Make a GET request
|
|
139
|
+
*/
|
|
140
|
+
async get(path, config) {
|
|
141
|
+
return this.request("GET", path, undefined, config);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Make a POST request
|
|
145
|
+
*/
|
|
146
|
+
async post(path, data, config) {
|
|
147
|
+
return this.request("POST", path, data, config);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Make a PUT request
|
|
151
|
+
*/
|
|
152
|
+
async put(path, data, config) {
|
|
153
|
+
return this.request("PUT", path, data, config);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Make a DELETE request
|
|
157
|
+
*/
|
|
158
|
+
async delete(path, config) {
|
|
159
|
+
return this.request("DELETE", path, undefined, config);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Make a generic request
|
|
163
|
+
*/
|
|
164
|
+
async request(method, path, data, config) {
|
|
165
|
+
if (!this.client) {
|
|
166
|
+
throw new AuthenticationError("HTTP client not available - server is in documentation mode. " +
|
|
167
|
+
"Set F5XC_API_URL and F5XC_API_TOKEN or F5XC_P12_FILE to enable API execution.");
|
|
168
|
+
}
|
|
169
|
+
const startTime = Date.now();
|
|
170
|
+
const response = await this.client.request({
|
|
171
|
+
method,
|
|
172
|
+
url: path,
|
|
173
|
+
data,
|
|
174
|
+
...config,
|
|
175
|
+
});
|
|
176
|
+
const duration = Date.now() - startTime;
|
|
177
|
+
return {
|
|
178
|
+
data: response.data,
|
|
179
|
+
status: response.status,
|
|
180
|
+
headers: response.headers,
|
|
181
|
+
duration,
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get the underlying Axios instance
|
|
186
|
+
*/
|
|
187
|
+
getAxiosInstance() {
|
|
188
|
+
return this.client;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Create HTTP client from credential manager
|
|
193
|
+
*/
|
|
194
|
+
export function createHttpClient(credentialManager, config) {
|
|
195
|
+
return new HttpClient(credentialManager, config);
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/auth/http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Module - Export all authentication utilities
|
|
3
|
+
*/
|
|
4
|
+
export { AuthMode, AUTH_ENV_VARS, CredentialManager, normalizeApiUrl, extractTenantFromUrl, } from "./credential-manager.js";
|
|
5
|
+
export type { Credentials } from "./credential-manager.js";
|
|
6
|
+
export { HttpClient, createHttpClient } from "./http-client.js";
|
|
7
|
+
export type { HttpClientConfig, ApiResponse } from "./http-client.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth Module - Export all authentication utilities
|
|
3
|
+
*/
|
|
4
|
+
export { AuthMode, AUTH_ENV_VARS, CredentialManager, normalizeApiUrl, extractTenantFromUrl, } from "./credential-manager.js";
|
|
5
|
+
export { HttpClient, createHttpClient } from "./http-client.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC"}
|