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