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