@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,270 @@
1
+ /**
2
+ * MCP Resource Handlers
3
+ *
4
+ * Implements resource read handlers for F5XC configuration objects.
5
+ * Supports both documentation mode (returns schema info) and
6
+ * execution mode (fetches actual resource data).
7
+ */
8
+ import { parseResourceUri, getResourceType, buildApiPath, RESOURCE_TYPES, } from "./templates.js";
9
+ import { AuthMode } from "../auth/credential-manager.js";
10
+ import { logger } from "../utils/logging.js";
11
+ import { F5XCApiError } from "../utils/error-handling.js";
12
+ /**
13
+ * Generate example resource structure based on type
14
+ */
15
+ function generateExampleResource(resourceType, namespace, name) {
16
+ const baseMetadata = {
17
+ name,
18
+ namespace,
19
+ labels: {},
20
+ annotations: {},
21
+ description: `Example ${resourceType}`,
22
+ };
23
+ switch (resourceType) {
24
+ case "http_loadbalancer":
25
+ return {
26
+ metadata: baseMetadata,
27
+ spec: {
28
+ domains: ["app.example.com"],
29
+ http: {
30
+ dns_volterra_managed: true,
31
+ },
32
+ default_route_pools: [
33
+ {
34
+ pool: {
35
+ tenant: "your-tenant",
36
+ namespace,
37
+ name: "example-origin-pool",
38
+ },
39
+ weight: 1,
40
+ },
41
+ ],
42
+ advertise_on_public_default_vip: {},
43
+ },
44
+ system_metadata: {
45
+ creation_timestamp: "2024-01-01T00:00:00Z",
46
+ modification_timestamp: "2024-01-01T00:00:00Z",
47
+ },
48
+ };
49
+ case "origin_pool":
50
+ return {
51
+ metadata: baseMetadata,
52
+ spec: {
53
+ origin_servers: [
54
+ {
55
+ public_ip: {
56
+ ip: "10.0.0.1",
57
+ },
58
+ },
59
+ ],
60
+ port: 80,
61
+ no_tls: {},
62
+ endpoint_selection: "LOCAL_PREFERRED",
63
+ loadbalancer_algorithm: "ROUND_ROBIN",
64
+ },
65
+ system_metadata: {
66
+ creation_timestamp: "2024-01-01T00:00:00Z",
67
+ },
68
+ };
69
+ case "dns_zone":
70
+ return {
71
+ metadata: baseMetadata,
72
+ spec: {
73
+ primary: {
74
+ soa_parameters: {
75
+ refresh: 3600,
76
+ retry: 600,
77
+ expire: 604800,
78
+ negative_ttl: 1800,
79
+ },
80
+ default_rr_set_group: [],
81
+ },
82
+ },
83
+ system_metadata: {
84
+ creation_timestamp: "2024-01-01T00:00:00Z",
85
+ },
86
+ };
87
+ case "app_firewall":
88
+ return {
89
+ metadata: baseMetadata,
90
+ spec: {
91
+ detection_settings: {
92
+ signature_selection_setting: {
93
+ default_attack_type_settings: {},
94
+ high_medium_accuracy_signatures: {},
95
+ },
96
+ enable_suppression: {},
97
+ enable_threat_campaigns: {},
98
+ },
99
+ bot_protection_setting: {
100
+ malicious_bot_action: "BLOCK",
101
+ suspicious_bot_action: "REPORT",
102
+ good_bot_action: "REPORT",
103
+ },
104
+ },
105
+ system_metadata: {
106
+ creation_timestamp: "2024-01-01T00:00:00Z",
107
+ },
108
+ };
109
+ default:
110
+ return {
111
+ metadata: baseMetadata,
112
+ spec: {},
113
+ system_metadata: {
114
+ creation_timestamp: "2024-01-01T00:00:00Z",
115
+ },
116
+ };
117
+ }
118
+ }
119
+ /**
120
+ * Generate Terraform data source
121
+ */
122
+ function generateTerraformDataSource(resourceType, namespace, name) {
123
+ const tfResource = `volterra_${resourceType.replace(/-/g, "_")}`;
124
+ return `data "${tfResource}" "example" {
125
+ name = "${name}"
126
+ namespace = "${namespace}"
127
+ }`;
128
+ }
129
+ /**
130
+ * Build documentation response for a resource
131
+ */
132
+ function buildDocumentationResponse(uri, _tenant, namespace, resourceType, name) {
133
+ const rt = getResourceType(resourceType);
134
+ if (!rt) {
135
+ throw new F5XCApiError(`Unknown resource type: ${resourceType}`, 400);
136
+ }
137
+ const apiPath = buildApiPath(resourceType, namespace, name);
138
+ return {
139
+ uri,
140
+ resourceType: rt,
141
+ apiPath: apiPath ?? "",
142
+ exampleResource: generateExampleResource(resourceType, namespace, name),
143
+ terraformDataSource: generateTerraformDataSource(resourceType, namespace, name),
144
+ relatedResources: rt.relatedResources ?? [],
145
+ };
146
+ }
147
+ /**
148
+ * Resource Handler class
149
+ */
150
+ export class ResourceHandler {
151
+ credentialManager;
152
+ httpClient;
153
+ constructor(credentialManager, httpClient) {
154
+ this.credentialManager = credentialManager;
155
+ this.httpClient = httpClient;
156
+ }
157
+ /**
158
+ * Read a resource by URI
159
+ */
160
+ async readResource(uri) {
161
+ const parsed = parseResourceUri(uri);
162
+ if (!parsed) {
163
+ throw new F5XCApiError(`Invalid resource URI: ${uri}`, 400);
164
+ }
165
+ const { tenant, namespace, resourceType, name } = parsed;
166
+ // Check if resource type is valid
167
+ const rt = getResourceType(resourceType);
168
+ if (!rt) {
169
+ throw new F5XCApiError(`Unknown resource type: ${resourceType}`, 400);
170
+ }
171
+ // Documentation mode - return schema and examples
172
+ if (this.credentialManager.getAuthMode() === AuthMode.NONE || !this.httpClient) {
173
+ const doc = buildDocumentationResponse(uri, tenant, namespace, resourceType, name);
174
+ return {
175
+ uri,
176
+ mimeType: "application/json",
177
+ content: JSON.stringify(doc, null, 2),
178
+ mode: "documentation",
179
+ };
180
+ }
181
+ // Execution mode - fetch actual resource
182
+ const apiPath = buildApiPath(resourceType, namespace, name);
183
+ if (!apiPath) {
184
+ throw new F5XCApiError(`Cannot build API path for: ${uri}`, 400);
185
+ }
186
+ try {
187
+ const response = await this.httpClient.get(apiPath);
188
+ return {
189
+ uri,
190
+ mimeType: "application/json",
191
+ content: JSON.stringify(response.data, null, 2),
192
+ mode: "execution",
193
+ };
194
+ }
195
+ catch (error) {
196
+ logger.error(`Failed to read resource: ${uri}`, {
197
+ error: error instanceof Error ? error.message : String(error),
198
+ });
199
+ throw error;
200
+ }
201
+ }
202
+ /**
203
+ * List available resource templates
204
+ */
205
+ listResourceTemplates() {
206
+ const tenant = this.credentialManager.getTenant() ?? "{tenant}";
207
+ return Object.values(RESOURCE_TYPES).map((rt) => ({
208
+ uriTemplate: rt.namespaceScoped
209
+ ? `f5xc://${tenant}/{namespace}/${rt.type}/{name}`
210
+ : `f5xc://${tenant}/system/${rt.type}/{name}`,
211
+ name: rt.name,
212
+ description: rt.description,
213
+ mimeType: "application/json",
214
+ }));
215
+ }
216
+ /**
217
+ * List resources of a specific type in a namespace
218
+ */
219
+ async listResources(namespace, resourceType) {
220
+ const rt = getResourceType(resourceType);
221
+ if (!rt) {
222
+ throw new F5XCApiError(`Unknown resource type: ${resourceType}`, 400);
223
+ }
224
+ const tenant = this.credentialManager.getTenant() ?? "unknown";
225
+ const uri = `f5xc://${tenant}/${namespace}/${resourceType}`;
226
+ // Documentation mode
227
+ if (this.credentialManager.getAuthMode() === AuthMode.NONE || !this.httpClient) {
228
+ const doc = {
229
+ uri,
230
+ resourceType: rt,
231
+ apiPath: buildApiPath(resourceType, namespace),
232
+ note: "In documentation mode. Provide F5XC credentials to list actual resources.",
233
+ };
234
+ return {
235
+ uri,
236
+ mimeType: "application/json",
237
+ content: JSON.stringify(doc, null, 2),
238
+ mode: "documentation",
239
+ };
240
+ }
241
+ // Execution mode - list resources
242
+ const apiPath = buildApiPath(resourceType, namespace);
243
+ if (!apiPath) {
244
+ throw new F5XCApiError(`Cannot build API path for listing: ${resourceType}`, 400);
245
+ }
246
+ try {
247
+ const response = await this.httpClient.get(apiPath);
248
+ return {
249
+ uri,
250
+ mimeType: "application/json",
251
+ content: JSON.stringify(response.data, null, 2),
252
+ mode: "execution",
253
+ };
254
+ }
255
+ catch (error) {
256
+ logger.error(`Failed to list resources: ${resourceType}`, {
257
+ namespace,
258
+ error: error instanceof Error ? error.message : String(error),
259
+ });
260
+ throw error;
261
+ }
262
+ }
263
+ }
264
+ /**
265
+ * Create resource handler
266
+ */
267
+ export function createResourceHandler(credentialManager, httpClient) {
268
+ return new ResourceHandler(credentialManager, httpClient);
269
+ }
270
+ //# sourceMappingURL=handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/resources/handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Resources Module - Export all resource utilities
3
+ */
4
+ export { RESOURCE_SCHEMES, RESOURCE_TYPES, buildResourceUri, parseResourceUri, getResourceType, getResourceTypesByTier, buildApiPath, } from "./templates.js";
5
+ export type { ResourceType } from "./templates.js";
6
+ export { ResourceHandler, createResourceHandler } from "./handlers.js";
7
+ export type { ResourceReadResult, ResourceDocumentation } from "./handlers.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEvE,YAAY,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Resources Module - Export all resource utilities
3
+ */
4
+ export { RESOURCE_SCHEMES, RESOURCE_TYPES, buildResourceUri, parseResourceUri, getResourceType, getResourceTypesByTier, buildApiPath, } from "./templates.js";
5
+ export { ResourceHandler, createResourceHandler } from "./handlers.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resources/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,YAAY,GACb,MAAM,gBAAgB,CAAC;AAIxB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * MCP Resource URI Templates
3
+ *
4
+ * Defines URI templates for F5XC configuration resources.
5
+ * URI scheme: f5xc://{tenant}/{namespace}/{resource-type}/{name}
6
+ */
7
+ /**
8
+ * Resource URI schemes
9
+ */
10
+ export declare const RESOURCE_SCHEMES: {
11
+ /** Base scheme for all F5XC resources */
12
+ readonly BASE: "f5xc://";
13
+ /** System namespace for global resources */
14
+ readonly SYSTEM: "system";
15
+ /** Shared namespace for cross-tenant resources */
16
+ readonly SHARED: "shared";
17
+ };
18
+ /**
19
+ * Resource type definitions
20
+ */
21
+ export interface ResourceType {
22
+ /** Resource type identifier */
23
+ type: string;
24
+ /** Human-readable name */
25
+ name: string;
26
+ /** Resource description */
27
+ description: string;
28
+ /** API path template */
29
+ apiPath: string;
30
+ /** Whether resource is namespace-scoped */
31
+ namespaceScoped: boolean;
32
+ /** Subscription tier required */
33
+ tier: "NO_TIER" | "STANDARD" | "ADVANCED";
34
+ /** Related resources */
35
+ relatedResources?: string[];
36
+ }
37
+ /**
38
+ * All supported resource types
39
+ */
40
+ export declare const RESOURCE_TYPES: Record<string, ResourceType>;
41
+ /**
42
+ * Build resource URI from components
43
+ *
44
+ * @param tenant - Tenant name
45
+ * @param namespace - Namespace (or 'system'/'shared')
46
+ * @param resourceType - Resource type identifier
47
+ * @param name - Resource name
48
+ * @returns Formatted resource URI
49
+ */
50
+ export declare function buildResourceUri(tenant: string, namespace: string, resourceType: string, name: string): string;
51
+ /**
52
+ * Parse resource URI into components
53
+ *
54
+ * @param uri - Resource URI to parse
55
+ * @returns Parsed components or null if invalid
56
+ */
57
+ export declare function parseResourceUri(uri: string): {
58
+ tenant: string;
59
+ namespace: string;
60
+ resourceType: string;
61
+ name: string;
62
+ } | null;
63
+ /**
64
+ * Get resource type definition
65
+ *
66
+ * @param type - Resource type identifier
67
+ * @returns Resource type definition or undefined
68
+ */
69
+ export declare function getResourceType(type: string): ResourceType | undefined;
70
+ /**
71
+ * Get all resource types for a tier
72
+ *
73
+ * @param tier - Subscription tier
74
+ * @returns Array of resource types
75
+ */
76
+ export declare function getResourceTypesByTier(tier: "NO_TIER" | "STANDARD" | "ADVANCED"): ResourceType[];
77
+ /**
78
+ * Build API path for a resource
79
+ *
80
+ * @param resourceType - Resource type identifier
81
+ * @param namespace - Namespace name
82
+ * @param name - Resource name (optional)
83
+ * @returns API path
84
+ */
85
+ export declare function buildApiPath(resourceType: string, namespace: string, name?: string): string | null;
86
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/resources/templates.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,yCAAyC;;IAGzC,4CAA4C;;IAG5C,kDAAkD;;CAE1C,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,eAAe,EAAE,OAAO,CAAC;IACzB,iCAAiC;IACjC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;IAC1C,wBAAwB;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CA+JvD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,MAAM,GACX,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,GACV;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmBlF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,EAAE,CAEhG;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI,CAaf"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * MCP Resource URI Templates
3
+ *
4
+ * Defines URI templates for F5XC configuration resources.
5
+ * URI scheme: f5xc://{tenant}/{namespace}/{resource-type}/{name}
6
+ */
7
+ /**
8
+ * Resource URI schemes
9
+ */
10
+ export const RESOURCE_SCHEMES = {
11
+ /** Base scheme for all F5XC resources */
12
+ BASE: "f5xc://",
13
+ /** System namespace for global resources */
14
+ SYSTEM: "system",
15
+ /** Shared namespace for cross-tenant resources */
16
+ SHARED: "shared",
17
+ };
18
+ /**
19
+ * All supported resource types
20
+ */
21
+ export const RESOURCE_TYPES = {
22
+ // Core Resources (NO_TIER)
23
+ namespace: {
24
+ type: "namespace",
25
+ name: "Namespace",
26
+ description: "Logical grouping of resources",
27
+ apiPath: "/api/web/namespaces",
28
+ namespaceScoped: false,
29
+ tier: "NO_TIER",
30
+ },
31
+ certificate: {
32
+ type: "certificate",
33
+ name: "Certificate",
34
+ description: "TLS/SSL certificate",
35
+ apiPath: "/api/config/namespaces/{namespace}/certificates",
36
+ namespaceScoped: true,
37
+ tier: "NO_TIER",
38
+ },
39
+ secret: {
40
+ type: "secret",
41
+ name: "Secret",
42
+ description: "Sensitive data storage",
43
+ apiPath: "/api/config/namespaces/{namespace}/secrets",
44
+ namespaceScoped: true,
45
+ tier: "NO_TIER",
46
+ },
47
+ cloud_credentials: {
48
+ type: "cloud_credentials",
49
+ name: "Cloud Credentials",
50
+ description: "Cloud provider authentication",
51
+ apiPath: "/api/config/namespaces/{namespace}/cloud_credentials",
52
+ namespaceScoped: true,
53
+ tier: "NO_TIER",
54
+ },
55
+ // Standard Resources
56
+ http_loadbalancer: {
57
+ type: "http_loadbalancer",
58
+ name: "HTTP Load Balancer",
59
+ description: "Layer 7 HTTP/HTTPS load balancer",
60
+ apiPath: "/api/config/namespaces/{namespace}/http_loadbalancers",
61
+ namespaceScoped: true,
62
+ tier: "STANDARD",
63
+ relatedResources: ["origin_pool", "healthcheck", "app_firewall"],
64
+ },
65
+ tcp_loadbalancer: {
66
+ type: "tcp_loadbalancer",
67
+ name: "TCP Load Balancer",
68
+ description: "Layer 4 TCP load balancer",
69
+ apiPath: "/api/config/namespaces/{namespace}/tcp_loadbalancers",
70
+ namespaceScoped: true,
71
+ tier: "STANDARD",
72
+ relatedResources: ["origin_pool", "healthcheck"],
73
+ },
74
+ origin_pool: {
75
+ type: "origin_pool",
76
+ name: "Origin Pool",
77
+ description: "Backend server pool for load balancing",
78
+ apiPath: "/api/config/namespaces/{namespace}/origin_pools",
79
+ namespaceScoped: true,
80
+ tier: "STANDARD",
81
+ relatedResources: ["healthcheck"],
82
+ },
83
+ healthcheck: {
84
+ type: "healthcheck",
85
+ name: "Health Check",
86
+ description: "Health monitoring for origin servers",
87
+ apiPath: "/api/config/namespaces/{namespace}/healthchecks",
88
+ namespaceScoped: true,
89
+ tier: "STANDARD",
90
+ },
91
+ dns_zone: {
92
+ type: "dns_zone",
93
+ name: "DNS Zone",
94
+ description: "DNS zone management",
95
+ apiPath: "/api/config/namespaces/{namespace}/dns_zones",
96
+ namespaceScoped: true,
97
+ tier: "STANDARD",
98
+ },
99
+ dns_load_balancer: {
100
+ type: "dns_load_balancer",
101
+ name: "DNS Load Balancer",
102
+ description: "Global DNS-based load balancing",
103
+ apiPath: "/api/config/namespaces/{namespace}/dns_load_balancers",
104
+ namespaceScoped: true,
105
+ tier: "STANDARD",
106
+ relatedResources: ["dns_zone"],
107
+ },
108
+ // Site Resources
109
+ aws_vpc_site: {
110
+ type: "aws_vpc_site",
111
+ name: "AWS VPC Site",
112
+ description: "F5XC site deployed in AWS VPC",
113
+ apiPath: "/api/config/namespaces/{namespace}/aws_vpc_sites",
114
+ namespaceScoped: true,
115
+ tier: "STANDARD",
116
+ relatedResources: ["cloud_credentials"],
117
+ },
118
+ azure_vnet_site: {
119
+ type: "azure_vnet_site",
120
+ name: "Azure VNet Site",
121
+ description: "F5XC site deployed in Azure VNet",
122
+ apiPath: "/api/config/namespaces/{namespace}/azure_vnet_sites",
123
+ namespaceScoped: true,
124
+ tier: "STANDARD",
125
+ relatedResources: ["cloud_credentials"],
126
+ },
127
+ gcp_vpc_site: {
128
+ type: "gcp_vpc_site",
129
+ name: "GCP VPC Site",
130
+ description: "F5XC site deployed in GCP VPC",
131
+ apiPath: "/api/config/namespaces/{namespace}/gcp_vpc_sites",
132
+ namespaceScoped: true,
133
+ tier: "STANDARD",
134
+ relatedResources: ["cloud_credentials"],
135
+ },
136
+ // Advanced Resources (WAAP)
137
+ app_firewall: {
138
+ type: "app_firewall",
139
+ name: "Application Firewall",
140
+ description: "Web Application Firewall (WAF) policy",
141
+ apiPath: "/api/config/namespaces/{namespace}/app_firewalls",
142
+ namespaceScoped: true,
143
+ tier: "ADVANCED",
144
+ },
145
+ service_policy: {
146
+ type: "service_policy",
147
+ name: "Service Policy",
148
+ description: "Service-level security policy",
149
+ apiPath: "/api/config/namespaces/{namespace}/service_policys",
150
+ namespaceScoped: true,
151
+ tier: "ADVANCED",
152
+ },
153
+ rate_limiter: {
154
+ type: "rate_limiter",
155
+ name: "Rate Limiter",
156
+ description: "Request rate limiting policy",
157
+ apiPath: "/api/config/namespaces/{namespace}/rate_limiters",
158
+ namespaceScoped: true,
159
+ tier: "ADVANCED",
160
+ },
161
+ bot_defense: {
162
+ type: "bot_defense",
163
+ name: "Bot Defense",
164
+ description: "Bot detection and mitigation",
165
+ apiPath: "/api/config/namespaces/{namespace}/bot_defenses",
166
+ namespaceScoped: true,
167
+ tier: "ADVANCED",
168
+ },
169
+ api_definition: {
170
+ type: "api_definition",
171
+ name: "API Definition",
172
+ description: "OpenAPI specification for API protection",
173
+ apiPath: "/api/config/namespaces/{namespace}/api_definitions",
174
+ namespaceScoped: true,
175
+ tier: "ADVANCED",
176
+ },
177
+ };
178
+ /**
179
+ * Build resource URI from components
180
+ *
181
+ * @param tenant - Tenant name
182
+ * @param namespace - Namespace (or 'system'/'shared')
183
+ * @param resourceType - Resource type identifier
184
+ * @param name - Resource name
185
+ * @returns Formatted resource URI
186
+ */
187
+ export function buildResourceUri(tenant, namespace, resourceType, name) {
188
+ return `${RESOURCE_SCHEMES.BASE}${tenant}/${namespace}/${resourceType}/${name}`;
189
+ }
190
+ /**
191
+ * Parse resource URI into components
192
+ *
193
+ * @param uri - Resource URI to parse
194
+ * @returns Parsed components or null if invalid
195
+ */
196
+ export function parseResourceUri(uri) {
197
+ if (!uri.startsWith(RESOURCE_SCHEMES.BASE)) {
198
+ return null;
199
+ }
200
+ const path = uri.slice(RESOURCE_SCHEMES.BASE.length);
201
+ const parts = path.split("/");
202
+ if (parts.length !== 4) {
203
+ return null;
204
+ }
205
+ const [tenant, namespace, resourceType, name] = parts;
206
+ if (!tenant || !namespace || !resourceType || !name) {
207
+ return null;
208
+ }
209
+ return { tenant, namespace, resourceType, name };
210
+ }
211
+ /**
212
+ * Get resource type definition
213
+ *
214
+ * @param type - Resource type identifier
215
+ * @returns Resource type definition or undefined
216
+ */
217
+ export function getResourceType(type) {
218
+ return RESOURCE_TYPES[type];
219
+ }
220
+ /**
221
+ * Get all resource types for a tier
222
+ *
223
+ * @param tier - Subscription tier
224
+ * @returns Array of resource types
225
+ */
226
+ export function getResourceTypesByTier(tier) {
227
+ return Object.values(RESOURCE_TYPES).filter((rt) => rt.tier === tier);
228
+ }
229
+ /**
230
+ * Build API path for a resource
231
+ *
232
+ * @param resourceType - Resource type identifier
233
+ * @param namespace - Namespace name
234
+ * @param name - Resource name (optional)
235
+ * @returns API path
236
+ */
237
+ export function buildApiPath(resourceType, namespace, name) {
238
+ const rt = RESOURCE_TYPES[resourceType];
239
+ if (!rt) {
240
+ return null;
241
+ }
242
+ let path = rt.apiPath.replace("{namespace}", namespace);
243
+ if (name) {
244
+ path += `/${name}`;
245
+ }
246
+ return path;
247
+ }
248
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/resources/templates.ts"],"names":[],"mappings":"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"}