@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.
Files changed (329) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/README.md +415 -0
  3. package/dist/auth/credential-manager.d.ts +151 -0
  4. package/dist/auth/credential-manager.d.ts.map +1 -0
  5. package/dist/auth/credential-manager.js +330 -0
  6. package/dist/auth/credential-manager.js.map +1 -0
  7. package/dist/auth/http-client.d.ts +81 -0
  8. package/dist/auth/http-client.d.ts.map +1 -0
  9. package/dist/auth/http-client.js +197 -0
  10. package/dist/auth/http-client.js.map +1 -0
  11. package/dist/auth/index.d.ts +8 -0
  12. package/dist/auth/index.d.ts.map +1 -0
  13. package/dist/auth/index.js +6 -0
  14. package/dist/auth/index.js.map +1 -0
  15. package/dist/config/config-manager.d.ts +72 -0
  16. package/dist/config/config-manager.d.ts.map +1 -0
  17. package/dist/config/config-manager.js +247 -0
  18. package/dist/config/config-manager.js.map +1 -0
  19. package/dist/config/index.d.ts +7 -0
  20. package/dist/config/index.d.ts.map +1 -0
  21. package/dist/config/index.js +7 -0
  22. package/dist/config/index.js.map +1 -0
  23. package/dist/config/schema.d.ts +74 -0
  24. package/dist/config/schema.d.ts.map +1 -0
  25. package/dist/config/schema.js +75 -0
  26. package/dist/config/schema.js.map +1 -0
  27. package/dist/config/types.d.ts +77 -0
  28. package/dist/config/types.d.ts.map +1 -0
  29. package/dist/config/types.js +31 -0
  30. package/dist/config/types.js.map +1 -0
  31. package/dist/generator/dependency-extractor.d.ts +103 -0
  32. package/dist/generator/dependency-extractor.d.ts.map +1 -0
  33. package/dist/generator/dependency-extractor.js +473 -0
  34. package/dist/generator/dependency-extractor.js.map +1 -0
  35. package/dist/generator/dependency-graph.d.ts +67 -0
  36. package/dist/generator/dependency-graph.d.ts.map +1 -0
  37. package/dist/generator/dependency-graph.js +330 -0
  38. package/dist/generator/dependency-graph.js.map +1 -0
  39. package/dist/generator/dependency-types.d.ts +206 -0
  40. package/dist/generator/dependency-types.d.ts.map +1 -0
  41. package/dist/generator/dependency-types.js +37 -0
  42. package/dist/generator/dependency-types.js.map +1 -0
  43. package/dist/generator/index.d.ts +7 -0
  44. package/dist/generator/index.d.ts.map +1 -0
  45. package/dist/generator/index.js +7 -0
  46. package/dist/generator/index.js.map +1 -0
  47. package/dist/generator/naming/acronyms.d.ts +81 -0
  48. package/dist/generator/naming/acronyms.d.ts.map +1 -0
  49. package/dist/generator/naming/acronyms.js +253 -0
  50. package/dist/generator/naming/acronyms.js.map +1 -0
  51. package/dist/generator/naming/index.d.ts +6 -0
  52. package/dist/generator/naming/index.d.ts.map +1 -0
  53. package/dist/generator/naming/index.js +6 -0
  54. package/dist/generator/naming/index.js.map +1 -0
  55. package/dist/generator/naming/volterra-mapping.d.ts +102 -0
  56. package/dist/generator/naming/volterra-mapping.d.ts.map +1 -0
  57. package/dist/generator/naming/volterra-mapping.js +259 -0
  58. package/dist/generator/naming/volterra-mapping.js.map +1 -0
  59. package/dist/generator/openapi-parser.d.ts +701 -0
  60. package/dist/generator/openapi-parser.d.ts.map +1 -0
  61. package/dist/generator/openapi-parser.js +704 -0
  62. package/dist/generator/openapi-parser.js.map +1 -0
  63. package/dist/generator/tool-generator.d.ts +118 -0
  64. package/dist/generator/tool-generator.d.ts.map +1 -0
  65. package/dist/generator/tool-generator.js +529 -0
  66. package/dist/generator/tool-generator.js.map +1 -0
  67. package/dist/generator/transformers/index.d.ts +7 -0
  68. package/dist/generator/transformers/index.d.ts.map +1 -0
  69. package/dist/generator/transformers/index.js +7 -0
  70. package/dist/generator/transformers/index.js.map +1 -0
  71. package/dist/generator/transformers/normalize-examples.d.ts +48 -0
  72. package/dist/generator/transformers/normalize-examples.d.ts.map +1 -0
  73. package/dist/generator/transformers/normalize-examples.js +66 -0
  74. package/dist/generator/transformers/normalize-examples.js.map +1 -0
  75. package/dist/index.d.ts +22 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +101 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/prompts/error-resolution.d.ts +70 -0
  80. package/dist/prompts/error-resolution.d.ts.map +1 -0
  81. package/dist/prompts/error-resolution.js +350 -0
  82. package/dist/prompts/error-resolution.js.map +1 -0
  83. package/dist/prompts/index.d.ts +8 -0
  84. package/dist/prompts/index.d.ts.map +1 -0
  85. package/dist/prompts/index.js +7 -0
  86. package/dist/prompts/index.js.map +1 -0
  87. package/dist/prompts/workflows.d.ts +59 -0
  88. package/dist/prompts/workflows.d.ts.map +1 -0
  89. package/dist/prompts/workflows.js +441 -0
  90. package/dist/prompts/workflows.js.map +1 -0
  91. package/dist/resources/handlers.d.ts +70 -0
  92. package/dist/resources/handlers.d.ts.map +1 -0
  93. package/dist/resources/handlers.js +270 -0
  94. package/dist/resources/handlers.js.map +1 -0
  95. package/dist/resources/index.d.ts +8 -0
  96. package/dist/resources/index.d.ts.map +1 -0
  97. package/dist/resources/index.js +6 -0
  98. package/dist/resources/index.js.map +1 -0
  99. package/dist/resources/templates.d.ts +86 -0
  100. package/dist/resources/templates.d.ts.map +1 -0
  101. package/dist/resources/templates.js +248 -0
  102. package/dist/resources/templates.js.map +1 -0
  103. package/dist/server.d.ts +78 -0
  104. package/dist/server.d.ts.map +1 -0
  105. package/dist/server.js +721 -0
  106. package/dist/server.js.map +1 -0
  107. package/dist/tools/discovery/best-practices.d.ts +140 -0
  108. package/dist/tools/discovery/best-practices.d.ts.map +1 -0
  109. package/dist/tools/discovery/best-practices.js +499 -0
  110. package/dist/tools/discovery/best-practices.js.map +1 -0
  111. package/dist/tools/discovery/consolidate.d.ts +97 -0
  112. package/dist/tools/discovery/consolidate.d.ts.map +1 -0
  113. package/dist/tools/discovery/consolidate.js +200 -0
  114. package/dist/tools/discovery/consolidate.js.map +1 -0
  115. package/dist/tools/discovery/cost-estimator.d.ts +114 -0
  116. package/dist/tools/discovery/cost-estimator.d.ts.map +1 -0
  117. package/dist/tools/discovery/cost-estimator.js +273 -0
  118. package/dist/tools/discovery/cost-estimator.js.map +1 -0
  119. package/dist/tools/discovery/dependencies.d.ts +113 -0
  120. package/dist/tools/discovery/dependencies.d.ts.map +1 -0
  121. package/dist/tools/discovery/dependencies.js +258 -0
  122. package/dist/tools/discovery/dependencies.js.map +1 -0
  123. package/dist/tools/discovery/describe.d.ts +133 -0
  124. package/dist/tools/discovery/describe.d.ts.map +1 -0
  125. package/dist/tools/discovery/describe.js +208 -0
  126. package/dist/tools/discovery/describe.js.map +1 -0
  127. package/dist/tools/discovery/execute.d.ts +96 -0
  128. package/dist/tools/discovery/execute.d.ts.map +1 -0
  129. package/dist/tools/discovery/execute.js +220 -0
  130. package/dist/tools/discovery/execute.js.map +1 -0
  131. package/dist/tools/discovery/index-loader.d.ts +28 -0
  132. package/dist/tools/discovery/index-loader.d.ts.map +1 -0
  133. package/dist/tools/discovery/index-loader.js +72 -0
  134. package/dist/tools/discovery/index-loader.js.map +1 -0
  135. package/dist/tools/discovery/index.d.ts +363 -0
  136. package/dist/tools/discovery/index.d.ts.map +1 -0
  137. package/dist/tools/discovery/index.js +361 -0
  138. package/dist/tools/discovery/index.js.map +1 -0
  139. package/dist/tools/discovery/resolver.d.ts +119 -0
  140. package/dist/tools/discovery/resolver.d.ts.map +1 -0
  141. package/dist/tools/discovery/resolver.js +369 -0
  142. package/dist/tools/discovery/resolver.js.map +1 -0
  143. package/dist/tools/discovery/search.d.ts +41 -0
  144. package/dist/tools/discovery/search.d.ts.map +1 -0
  145. package/dist/tools/discovery/search.js +176 -0
  146. package/dist/tools/discovery/search.js.map +1 -0
  147. package/dist/tools/discovery/types.d.ts +91 -0
  148. package/dist/tools/discovery/types.d.ts.map +1 -0
  149. package/dist/tools/discovery/types.js +9 -0
  150. package/dist/tools/discovery/types.js.map +1 -0
  151. package/dist/tools/discovery/validate.d.ts +63 -0
  152. package/dist/tools/discovery/validate.d.ts.map +1 -0
  153. package/dist/tools/discovery/validate.js +239 -0
  154. package/dist/tools/discovery/validate.js.map +1 -0
  155. package/dist/tools/generated/admin_console_and_ui/index.d.ts +8 -0
  156. package/dist/tools/generated/admin_console_and_ui/index.d.ts.map +1 -0
  157. package/dist/tools/generated/admin_console_and_ui/index.js +265 -0
  158. package/dist/tools/generated/admin_console_and_ui/index.js.map +1 -0
  159. package/dist/tools/generated/api/index.d.ts +8 -0
  160. package/dist/tools/generated/api/index.d.ts.map +1 -0
  161. package/dist/tools/generated/api/index.js +7016 -0
  162. package/dist/tools/generated/api/index.js.map +1 -0
  163. package/dist/tools/generated/authentication/index.d.ts +8 -0
  164. package/dist/tools/generated/authentication/index.d.ts.map +1 -0
  165. package/dist/tools/generated/authentication/index.js +907 -0
  166. package/dist/tools/generated/authentication/index.js.map +1 -0
  167. package/dist/tools/generated/bigip/index.d.ts +8 -0
  168. package/dist/tools/generated/bigip/index.d.ts.map +1 -0
  169. package/dist/tools/generated/bigip/index.js +3152 -0
  170. package/dist/tools/generated/bigip/index.js.map +1 -0
  171. package/dist/tools/generated/billing_and_usage/index.d.ts +8 -0
  172. package/dist/tools/generated/billing_and_usage/index.d.ts.map +1 -0
  173. package/dist/tools/generated/billing_and_usage/index.js +2452 -0
  174. package/dist/tools/generated/billing_and_usage/index.js.map +1 -0
  175. package/dist/tools/generated/blindfold/index.d.ts +8 -0
  176. package/dist/tools/generated/blindfold/index.d.ts.map +1 -0
  177. package/dist/tools/generated/blindfold/index.js +3790 -0
  178. package/dist/tools/generated/blindfold/index.js.map +1 -0
  179. package/dist/tools/generated/bot_and_threat_defense/index.d.ts +8 -0
  180. package/dist/tools/generated/bot_and_threat_defense/index.d.ts.map +1 -0
  181. package/dist/tools/generated/bot_and_threat_defense/index.js +2746 -0
  182. package/dist/tools/generated/bot_and_threat_defense/index.js.map +1 -0
  183. package/dist/tools/generated/cdn/index.d.ts +8 -0
  184. package/dist/tools/generated/cdn/index.d.ts.map +1 -0
  185. package/dist/tools/generated/cdn/index.js +2686 -0
  186. package/dist/tools/generated/cdn/index.js.map +1 -0
  187. package/dist/tools/generated/ce_management/index.d.ts +8 -0
  188. package/dist/tools/generated/ce_management/index.d.ts.map +1 -0
  189. package/dist/tools/generated/ce_management/index.js +3812 -0
  190. package/dist/tools/generated/ce_management/index.js.map +1 -0
  191. package/dist/tools/generated/certificates/index.d.ts +8 -0
  192. package/dist/tools/generated/certificates/index.d.ts.map +1 -0
  193. package/dist/tools/generated/certificates/index.js +2547 -0
  194. package/dist/tools/generated/certificates/index.js.map +1 -0
  195. package/dist/tools/generated/cloud_infrastructure/index.d.ts +8 -0
  196. package/dist/tools/generated/cloud_infrastructure/index.d.ts.map +1 -0
  197. package/dist/tools/generated/cloud_infrastructure/index.js +3959 -0
  198. package/dist/tools/generated/cloud_infrastructure/index.js.map +1 -0
  199. package/dist/tools/generated/container_services/index.d.ts +8 -0
  200. package/dist/tools/generated/container_services/index.d.ts.map +1 -0
  201. package/dist/tools/generated/container_services/index.js +2018 -0
  202. package/dist/tools/generated/container_services/index.js.map +1 -0
  203. package/dist/tools/generated/data_and_privacy_security/index.d.ts +8 -0
  204. package/dist/tools/generated/data_and_privacy_security/index.d.ts.map +1 -0
  205. package/dist/tools/generated/data_and_privacy_security/index.js +1662 -0
  206. package/dist/tools/generated/data_and_privacy_security/index.js.map +1 -0
  207. package/dist/tools/generated/data_intelligence/index.d.ts +8 -0
  208. package/dist/tools/generated/data_intelligence/index.d.ts.map +1 -0
  209. package/dist/tools/generated/data_intelligence/index.js +1600 -0
  210. package/dist/tools/generated/data_intelligence/index.js.map +1 -0
  211. package/dist/tools/generated/ddos/index.d.ts +8 -0
  212. package/dist/tools/generated/ddos/index.d.ts.map +1 -0
  213. package/dist/tools/generated/ddos/index.js +8091 -0
  214. package/dist/tools/generated/ddos/index.js.map +1 -0
  215. package/dist/tools/generated/dependency-graph.json +26358 -0
  216. package/dist/tools/generated/dns/index.d.ts +8 -0
  217. package/dist/tools/generated/dns/index.d.ts.map +1 -0
  218. package/dist/tools/generated/dns/index.js +6096 -0
  219. package/dist/tools/generated/dns/index.js.map +1 -0
  220. package/dist/tools/generated/generative_ai/index.d.ts +8 -0
  221. package/dist/tools/generated/generative_ai/index.d.ts.map +1 -0
  222. package/dist/tools/generated/generative_ai/index.js +1019 -0
  223. package/dist/tools/generated/generative_ai/index.js.map +1 -0
  224. package/dist/tools/generated/managed_kubernetes/index.d.ts +8 -0
  225. package/dist/tools/generated/managed_kubernetes/index.d.ts.map +1 -0
  226. package/dist/tools/generated/managed_kubernetes/index.js +3368 -0
  227. package/dist/tools/generated/managed_kubernetes/index.js.map +1 -0
  228. package/dist/tools/generated/marketplace/index.d.ts +8 -0
  229. package/dist/tools/generated/marketplace/index.d.ts.map +1 -0
  230. package/dist/tools/generated/marketplace/index.js +4329 -0
  231. package/dist/tools/generated/marketplace/index.js.map +1 -0
  232. package/dist/tools/generated/network/index.d.ts +8 -0
  233. package/dist/tools/generated/network/index.d.ts.map +1 -0
  234. package/dist/tools/generated/network/index.js +12424 -0
  235. package/dist/tools/generated/network/index.js.map +1 -0
  236. package/dist/tools/generated/network_security/index.d.ts +8 -0
  237. package/dist/tools/generated/network_security/index.d.ts.map +1 -0
  238. package/dist/tools/generated/network_security/index.js +9637 -0
  239. package/dist/tools/generated/network_security/index.js.map +1 -0
  240. package/dist/tools/generated/nginx_one/index.d.ts +8 -0
  241. package/dist/tools/generated/nginx_one/index.d.ts.map +1 -0
  242. package/dist/tools/generated/nginx_one/index.js +1692 -0
  243. package/dist/tools/generated/nginx_one/index.js.map +1 -0
  244. package/dist/tools/generated/object_storage/index.d.ts +8 -0
  245. package/dist/tools/generated/object_storage/index.d.ts.map +1 -0
  246. package/dist/tools/generated/object_storage/index.js +996 -0
  247. package/dist/tools/generated/object_storage/index.js.map +1 -0
  248. package/dist/tools/generated/observability/index.d.ts +8 -0
  249. package/dist/tools/generated/observability/index.d.ts.map +1 -0
  250. package/dist/tools/generated/observability/index.js +5285 -0
  251. package/dist/tools/generated/observability/index.js.map +1 -0
  252. package/dist/tools/generated/rate_limiting/index.d.ts +8 -0
  253. package/dist/tools/generated/rate_limiting/index.d.ts.map +1 -0
  254. package/dist/tools/generated/rate_limiting/index.js +2108 -0
  255. package/dist/tools/generated/rate_limiting/index.js.map +1 -0
  256. package/dist/tools/generated/secops_and_incident_response/index.d.ts +8 -0
  257. package/dist/tools/generated/secops_and_incident_response/index.d.ts.map +1 -0
  258. package/dist/tools/generated/secops_and_incident_response/index.js +710 -0
  259. package/dist/tools/generated/secops_and_incident_response/index.js.map +1 -0
  260. package/dist/tools/generated/service_mesh/index.d.ts +8 -0
  261. package/dist/tools/generated/service_mesh/index.d.ts.map +1 -0
  262. package/dist/tools/generated/service_mesh/index.js +6062 -0
  263. package/dist/tools/generated/service_mesh/index.js.map +1 -0
  264. package/dist/tools/generated/shape/index.d.ts +8 -0
  265. package/dist/tools/generated/shape/index.d.ts.map +1 -0
  266. package/dist/tools/generated/shape/index.js +19381 -0
  267. package/dist/tools/generated/shape/index.js.map +1 -0
  268. package/dist/tools/generated/sites/index.d.ts +8 -0
  269. package/dist/tools/generated/sites/index.d.ts.map +1 -0
  270. package/dist/tools/generated/sites/index.js +13160 -0
  271. package/dist/tools/generated/sites/index.js.map +1 -0
  272. package/dist/tools/generated/statistics/index.d.ts +8 -0
  273. package/dist/tools/generated/statistics/index.d.ts.map +1 -0
  274. package/dist/tools/generated/statistics/index.js +8131 -0
  275. package/dist/tools/generated/statistics/index.js.map +1 -0
  276. package/dist/tools/generated/support/index.d.ts +8 -0
  277. package/dist/tools/generated/support/index.d.ts.map +1 -0
  278. package/dist/tools/generated/support/index.js +5608 -0
  279. package/dist/tools/generated/support/index.js.map +1 -0
  280. package/dist/tools/generated/telemetry_and_insights/index.d.ts +8 -0
  281. package/dist/tools/generated/telemetry_and_insights/index.d.ts.map +1 -0
  282. package/dist/tools/generated/telemetry_and_insights/index.js +2404 -0
  283. package/dist/tools/generated/telemetry_and_insights/index.js.map +1 -0
  284. package/dist/tools/generated/tenant_and_identity/index.d.ts +8 -0
  285. package/dist/tools/generated/tenant_and_identity/index.d.ts.map +1 -0
  286. package/dist/tools/generated/tenant_and_identity/index.js +18938 -0
  287. package/dist/tools/generated/tenant_and_identity/index.js.map +1 -0
  288. package/dist/tools/generated/threat_campaign/index.d.ts +8 -0
  289. package/dist/tools/generated/threat_campaign/index.d.ts.map +1 -0
  290. package/dist/tools/generated/threat_campaign/index.js +102 -0
  291. package/dist/tools/generated/threat_campaign/index.js.map +1 -0
  292. package/dist/tools/generated/users/index.d.ts +8 -0
  293. package/dist/tools/generated/users/index.d.ts.map +1 -0
  294. package/dist/tools/generated/users/index.js +1515 -0
  295. package/dist/tools/generated/users/index.js.map +1 -0
  296. package/dist/tools/generated/virtual/index.d.ts +8 -0
  297. package/dist/tools/generated/virtual/index.d.ts.map +1 -0
  298. package/dist/tools/generated/virtual/index.js +11263 -0
  299. package/dist/tools/generated/virtual/index.js.map +1 -0
  300. package/dist/tools/generated/vpm_and_node_management/index.d.ts +8 -0
  301. package/dist/tools/generated/vpm_and_node_management/index.d.ts.map +1 -0
  302. package/dist/tools/generated/vpm_and_node_management/index.js +88 -0
  303. package/dist/tools/generated/vpm_and_node_management/index.js.map +1 -0
  304. package/dist/tools/generated/waf/index.d.ts +8 -0
  305. package/dist/tools/generated/waf/index.d.ts.map +1 -0
  306. package/dist/tools/generated/waf/index.js +4586 -0
  307. package/dist/tools/generated/waf/index.js.map +1 -0
  308. package/dist/tools/index.d.ts +7 -0
  309. package/dist/tools/index.d.ts.map +1 -0
  310. package/dist/tools/index.js +6 -0
  311. package/dist/tools/index.js.map +1 -0
  312. package/dist/tools/registry.d.ts +27 -0
  313. package/dist/tools/registry.d.ts.map +1 -0
  314. package/dist/tools/registry.js +115 -0
  315. package/dist/tools/registry.js.map +1 -0
  316. package/dist/utils/error-handling.d.ts +109 -0
  317. package/dist/utils/error-handling.d.ts.map +1 -0
  318. package/dist/utils/error-handling.js +239 -0
  319. package/dist/utils/error-handling.js.map +1 -0
  320. package/dist/utils/index.d.ts +7 -0
  321. package/dist/utils/index.d.ts.map +1 -0
  322. package/dist/utils/index.js +6 -0
  323. package/dist/utils/index.js.map +1 -0
  324. package/dist/utils/logging.d.ts +75 -0
  325. package/dist/utils/logging.d.ts.map +1 -0
  326. package/dist/utils/logging.js +131 -0
  327. package/dist/utils/logging.js.map +1 -0
  328. package/manifest.json +143 -0
  329. 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":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD;;GAEG;AACH,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,kDAAkD;IAClD,yBAAa,CAAA;IACb,+BAA+B;IAC/B,2BAAe,CAAA;IACf,4CAA4C;IAC5C,uCAA2B,CAAA;AAC7B,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,cAAc;IACvB,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE,eAAe;IACzB,YAAY,EAAE,mBAAmB;IACjC,OAAO,EAAE,cAAc;CACf,CAAC;AA6BX;;GAEG;AACH,MAAM,YAAY,GAAG;IACnB,0EAA0E;IAC1E,UAAU,EAAE,oDAAoD;IAChE,qDAAqD;IACrD,YAAY,EAAE,kEAAkE;IAChF,mCAAmC;IACnC,gBAAgB,EAAE,kBAAkB;CACrC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,mDAAmD;IACnD,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAE3D,8CAA8C;IAC9C,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC1D,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,GAAG,GAAG,WAAW,MAAM,IAAI,OAAO,yBAAyB,CAAC;IAC9D,CAAC;IAED,qCAAqC;IACrC,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,GAAG,GAAG,WAAW,MAAM,IAAI,OAAO,yBAAyB,CAAC;IAC9D,CAAC;IAED,qBAAqB;IACrB,OAAO,GAAG,GAAG,MAAM,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACjD,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,iBAAiB;IACpB,WAAW,CAAc;IACzB,aAAa,GAAkB,IAAI,CAAC;IACpC,aAAa,CAAgB;IAErC,YAAY,aAA6B;QACvC,IAAI,CAAC,aAAa,GAAG,aAAa,IAAI,IAAI,aAAa,EAAE,CAAC;QAC1D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;YAC1C,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC;YAC3C,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC5C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC;SACrD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,kBAAkB;QACxB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;YAE7C,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC;YAEjC,kEAAkE;YAClE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBACtD,+BAA+B;YACjC,CAAC,CAAC,CAAC;YAEH,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,KAAK,EAAE,OAAO,CAAC,QAAQ;gBACvB,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE;gBAC1D,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,MAAkB;QACtC,0CAA0C;QAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9C,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,sCAAsC;QACtC,OAAO,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC;IACvC,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,QAAwB,EAAE,YAA4B;QAC7E,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM;YAC9C,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,YAAY,CAAC,KAAK;YAC3C,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO;YACjD,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,YAAY,CAAC,WAAW;SAC9D,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,QAAwB;QAC/C,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QACjC,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,CAAC;QAEzC,gCAAgC;QAChC,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QACzB,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI,cAAc,GAAkB,IAAI,CAAC;QAEzC,IAAI,MAAM,EAAE,CAAC;YACX,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAExC,IAAI,OAAO,EAAE,CAAC;gBACZ,8CAA8C;gBAC9C,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC;gBAC5B,IAAI,CAAC;oBACH,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;oBACvC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE;wBAC7C,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAC9D,CAAC,CAAC;oBACH,oDAAoD;oBACpD,IAAI,KAAK,EAAE,CAAC;wBACV,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;wBACtB,MAAM,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;oBACtD,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;oBACvB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,EAAE,CAAC;gBACjB,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI;YACJ,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,KAAK,IAAI,IAAI;YACpB,cAAc;YACd,WAAW,EAAE,WAAW,IAAI,IAAI;SACjC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,eAAe;QACrB,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC5C,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACpF,MAAM,CAAC,IAAI,CAAC,+CAA+C,EAAE;gBAC3D,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,MAAM;gBACN,OAAO,EAAE,IAAI,CAAC,aAAa;aAC5B,CAAC,CAAC;YACH,OAAO,WAAW,CAAC;QACrB,CAAC;QAED,oDAAoD;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAElD,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACpF,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE;oBACpD,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,MAAM;oBACN,OAAO,EAAE,IAAI,CAAC,aAAa;iBAC5B,CAAC,CAAC;gBACH,OAAO,WAAW,CAAC;YACrB,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,IAAI;YACX,cAAc,EAAE,IAAI;YACpB,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxF,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC5C,CAAC;CACF"}
@@ -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"}