@veecode-platform/backstage-plugin-kong-service-manager-backend-dynamic 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -157,13 +157,33 @@ You can leave them both empty if your Kong Admin API does not require authentica
157
157
  **Note:** it is custom practice to create Kong service and routes for the Admin API itself,
158
158
  so that you can control access to it via "homemade" RBAC using the bundled OSS plugins. This strategy can be refined to the point of partially exposing the Admin API, but we will not cover this in this documentation.
159
159
 
160
+ ## Dynamic Plugin Wiring
161
+
162
+ **Note:** dynamic plugin loading is a feature supported by VeeCode DevPortal and by RHDH (Red Hat Developer Hub).
163
+
164
+ This plugin can be dynamically downloaded and installed from the public npm registry, as well as its UI elements can be configured without any source code changes:
165
+
166
+ ```yaml
167
+ plugins:
168
+ - package: @veecode-platform/backstage-plugin-kong-service-manager-backend-dynamic
169
+ disabled: false
170
+ ```
171
+
172
+ **VeeCode DevPortal** already bundles the dynamic plugin as a pre-installed plugin with default configs, so it can be alternatively be loaded just using a local path:
173
+
174
+ ```yaml
175
+ plugins:
176
+ - package: ./dynamic-plugins/dist/backstage-plugin-kong-service-manager-backend-dynamic
177
+ disabled: false
178
+ ```
179
+
160
180
  ## Development
161
181
 
162
182
  Start the plugin in standalone mode for local development:
163
183
 
164
184
  ```bash
165
185
  cd workspace/kong-tools
166
- yarn start --filter=kong-service-manager-backend
186
+ yarn --cwd plugins/kong-service-manager-backend start
167
187
  ```
168
188
 
169
189
  The standalone server reads configuration from `app-config.yaml` and starts
package/dist/index.d.ts CHANGED
@@ -22,6 +22,12 @@ declare class KongServiceManagerService {
22
22
  private buildUrl;
23
23
  private buildHeaders;
24
24
  private kongFetch;
25
+ getInstances(): Array<{
26
+ id: string;
27
+ apiBaseUrl: string;
28
+ workspace?: string;
29
+ description?: string;
30
+ }>;
25
31
  getServiceInfo(instanceName: string, serviceName: string): Promise<ServiceInfoResponse>;
26
32
  getRoutes(instanceName: string, serviceName: string): Promise<RoutesResponse>;
27
33
  getRouteById(instanceName: string, serviceName: string, routeId: string): Promise<RouteResponse>;
@@ -85,6 +85,10 @@ async function createRouter({
85
85
  router.get("/health", async (_req, res) => {
86
86
  res.json({ status: "ok" });
87
87
  });
88
+ router.get("/instances", async (req, res) => {
89
+ await authorize(req, backstagePluginKongServiceManagerCommon.kongInstancesReadPermission);
90
+ res.json(kongService.getInstances());
91
+ });
88
92
  router.get("/:instance/services/:serviceName", async (req, res) => {
89
93
  await authorize(req, backstagePluginKongServiceManagerCommon.kongServiceReadPermission);
90
94
  const parsed = instanceServiceParams.safeParse(req.params);
@@ -1 +1 @@
1
- {"version":3,"file":"router.cjs.js","sources":["../src/router.ts"],"sourcesContent":["import { HttpAuthService, PermissionsService } from '@backstage/backend-plugin-api';\nimport { InputError, NotAllowedError } from '@backstage/errors';\nimport { AuthorizeResult, type BasicPermission } from '@backstage/plugin-permission-common';\nimport { z } from 'zod';\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport type { CreateRoute } from '@veecode-platform/backstage-plugin-kong-service-manager-common';\nimport {\n kongServiceReadPermission,\n kongPluginsReadPermission,\n kongRoutesReadPermission,\n kongApplyPluginServicePermission,\n kongUpdateServicePluginPermission,\n kongDisableServicePluginPermission,\n kongRouteCreatePermission,\n kongRouteUpdatePermission,\n kongRouteDeletePermission,\n kongApplyPluginRoutePermission,\n kongUpdateRoutePluginPermission,\n kongDisableRoutePluginPermission,\n} from '@veecode-platform/backstage-plugin-kong-service-manager-common';\nimport { KongServiceManagerService } from './services/KongServiceManagerService';\n\nexport async function createRouter({\n httpAuth,\n permissions,\n kongService,\n}: {\n httpAuth: HttpAuthService;\n permissions: PermissionsService;\n kongService: KongServiceManagerService;\n}): Promise<express.Router> {\n const router = Router();\n router.use(express.json());\n\n async function authorize(req: express.Request, permission: BasicPermission) {\n const credentials = await httpAuth.credentials(req);\n const decision = await permissions.authorize(\n [{ permission }],\n { credentials },\n );\n if (decision[0].result !== AuthorizeResult.ALLOW) {\n throw new NotAllowedError('Permission denied');\n }\n }\n\n // --- Validation schemas ---\n\n const instanceServiceParams = z.object({\n instance: z.string(),\n serviceName: z.string(),\n });\n\n const instanceServiceRouteParams = z.object({\n instance: z.string(),\n serviceName: z.string(),\n routeId: z.string(),\n });\n\n const instanceServicePluginParams = z.object({\n instance: z.string(),\n serviceName: z.string(),\n pluginId: z.string(),\n });\n\n const instanceRouteParams = z.object({\n instance: z.string(),\n routeId: z.string(),\n });\n\n const instanceRoutePluginParams = z.object({\n instance: z.string(),\n routeId: z.string(),\n pluginId: z.string(),\n });\n\n const createRouteBody = z.object({\n name: z.string().optional(),\n protocols: z.array(z.string()).optional(),\n methods: z.array(z.string()).optional(),\n hosts: z.array(z.string()).optional(),\n paths: z.array(z.string()).optional(),\n headers: z.record(z.array(z.string())).optional(),\n https_redirect_status_code: z.number().optional(),\n regex_priority: z.number().optional(),\n strip_path: z.boolean().optional(),\n path_handling: z.string().optional(),\n preserve_host: z.boolean().optional(),\n request_buffering: z.boolean().optional(),\n response_buffering: z.boolean().optional(),\n tags: z.array(z.string()).optional(),\n });\n\n const createPluginBody = z.object({\n name: z.string(),\n config: z.record(z.unknown()).optional(),\n enabled: z.boolean().optional(),\n protocols: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n });\n\n const editPluginBody = z.object({\n name: z.string().optional(),\n config: z.record(z.unknown()).optional(),\n enabled: z.boolean().optional(),\n protocols: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n });\n\n // --- Health check ---\n\n router.get('/health', async (_req, res) => {\n res.json({ status: 'ok' });\n });\n\n // --- Service routes (Phase 1) ---\n\n // GET /:instance/services/:serviceName\n router.get('/:instance/services/:serviceName', async (req, res) => {\n await authorize(req, kongServiceReadPermission);\n\n const parsed = instanceServiceParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getServiceInfo(\n parsed.data.instance,\n parsed.data.serviceName,\n );\n res.json(result);\n });\n\n // GET /:instance/services/:serviceName/plugins/associated\n router.get(\n '/:instance/services/:serviceName/plugins/associated',\n async (req, res) => {\n await authorize(req, kongPluginsReadPermission);\n\n const parsed = instanceServiceParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getServiceAssociatedPlugins(\n parsed.data.instance,\n parsed.data.serviceName,\n );\n res.json(result);\n },\n );\n\n // GET /:instance/plugins\n router.get('/:instance/plugins', async (req, res) => {\n await authorize(req, kongPluginsReadPermission);\n\n const instance = z.string().safeParse(req.params.instance);\n if (!instance.success) throw new InputError(instance.error.toString());\n\n const result = await kongService.getAvailablePlugins(instance.data);\n res.json(result);\n });\n\n // --- Plugin schema introspection (Phase 2) ---\n\n // GET /:instance/services/plugins/:pluginName/fields\n router.get(\n '/:instance/services/plugins/:pluginName/fields',\n async (req, res) => {\n await authorize(req, kongPluginsReadPermission);\n\n const parsed = z\n .object({ instance: z.string(), pluginName: z.string() })\n .safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getPluginFields(\n parsed.data.instance,\n parsed.data.pluginName,\n );\n res.json(result);\n },\n );\n\n // --- Service plugin CRUD (Phase 2) ---\n\n // POST /:instance/services/:serviceName/plugins\n router.post(\n '/:instance/services/:serviceName/plugins',\n async (req, res) => {\n await authorize(req, kongApplyPluginServicePermission);\n\n const params = instanceServiceParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = createPluginBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.addPluginToService(\n params.data.instance,\n params.data.serviceName,\n body.data,\n );\n res.status(201).json(result);\n },\n );\n\n // PATCH /:instance/services/:serviceName/plugins/:pluginId\n router.patch(\n '/:instance/services/:serviceName/plugins/:pluginId',\n async (req, res) => {\n await authorize(req, kongUpdateServicePluginPermission);\n\n const params = instanceServicePluginParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = editPluginBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.editServicePlugin(\n params.data.instance,\n params.data.serviceName,\n params.data.pluginId,\n body.data,\n );\n res.json(result);\n },\n );\n\n // DELETE /:instance/services/:serviceName/plugins/:pluginId\n router.delete(\n '/:instance/services/:serviceName/plugins/:pluginId',\n async (req, res) => {\n await authorize(req, kongDisableServicePluginPermission);\n\n const params = instanceServicePluginParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n await kongService.removeServicePlugin(\n params.data.instance,\n params.data.serviceName,\n params.data.pluginId,\n );\n res.status(204).end();\n },\n );\n\n // --- Route CRUD (Phase 3) ---\n\n // GET /:instance/services/:serviceName/routes\n router.get(\n '/:instance/services/:serviceName/routes',\n async (req, res) => {\n await authorize(req, kongRoutesReadPermission);\n\n const parsed = instanceServiceParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getRoutes(\n parsed.data.instance,\n parsed.data.serviceName,\n );\n res.json(result);\n },\n );\n\n // GET /:instance/services/:serviceName/routes/:routeId\n router.get(\n '/:instance/services/:serviceName/routes/:routeId',\n async (req, res) => {\n await authorize(req, kongRoutesReadPermission);\n\n const parsed = instanceServiceRouteParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getRouteById(\n parsed.data.instance,\n parsed.data.serviceName,\n parsed.data.routeId,\n );\n res.json(result);\n },\n );\n\n // POST /:instance/services/:serviceName/routes\n router.post(\n '/:instance/services/:serviceName/routes',\n async (req, res) => {\n await authorize(req, kongRouteCreatePermission);\n\n const params = instanceServiceParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = createRouteBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.createRoute(\n params.data.instance,\n params.data.serviceName,\n body.data as CreateRoute,\n );\n res.status(201).json(result);\n },\n );\n\n // PATCH /:instance/services/:serviceName/routes/:routeId\n router.patch(\n '/:instance/services/:serviceName/routes/:routeId',\n async (req, res) => {\n await authorize(req, kongRouteUpdatePermission);\n\n const params = instanceServiceRouteParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = createRouteBody.partial().safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.editRoute(\n params.data.instance,\n params.data.serviceName,\n params.data.routeId,\n body.data as Partial<CreateRoute>,\n );\n res.json(result);\n },\n );\n\n // DELETE /:instance/services/:serviceName/routes/:routeId\n router.delete(\n '/:instance/services/:serviceName/routes/:routeId',\n async (req, res) => {\n await authorize(req, kongRouteDeletePermission);\n\n const params = instanceServiceRouteParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n await kongService.removeRoute(\n params.data.instance,\n params.data.serviceName,\n params.data.routeId,\n );\n res.status(204).end();\n },\n );\n\n // --- Route plugin CRUD (Phase 4) ---\n\n // GET /:instance/routes/:routeId/plugins/associated\n router.get(\n '/:instance/routes/:routeId/plugins/associated',\n async (req, res) => {\n await authorize(req, kongPluginsReadPermission);\n\n const parsed = instanceRouteParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getRouteAssociatedPlugins(\n parsed.data.instance,\n parsed.data.routeId,\n );\n res.json(result);\n },\n );\n\n // POST /:instance/routes/:routeId/plugins\n router.post('/:instance/routes/:routeId/plugins', async (req, res) => {\n await authorize(req, kongApplyPluginRoutePermission);\n\n const params = instanceRouteParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = createPluginBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.addPluginToRoute(\n params.data.instance,\n params.data.routeId,\n body.data,\n );\n res.status(201).json(result);\n });\n\n // PATCH /:instance/routes/:routeId/plugins/:pluginId\n router.patch(\n '/:instance/routes/:routeId/plugins/:pluginId',\n async (req, res) => {\n await authorize(req, kongUpdateRoutePluginPermission);\n\n const params = instanceRoutePluginParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = editPluginBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.editRoutePlugin(\n params.data.instance,\n params.data.routeId,\n params.data.pluginId,\n body.data,\n );\n res.json(result);\n },\n );\n\n // DELETE /:instance/routes/:routeId/plugins/:pluginId\n router.delete(\n '/:instance/routes/:routeId/plugins/:pluginId',\n async (req, res) => {\n await authorize(req, kongDisableRoutePluginPermission);\n\n const params = instanceRoutePluginParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n await kongService.removeRoutePlugin(\n params.data.instance,\n params.data.routeId,\n params.data.pluginId,\n );\n res.status(204).end();\n },\n );\n\n return router;\n}\n"],"names":["Router","express","AuthorizeResult","NotAllowedError","z","kongServiceReadPermission","InputError","kongPluginsReadPermission","kongApplyPluginServicePermission","kongUpdateServicePluginPermission","kongDisableServicePluginPermission","kongRoutesReadPermission","kongRouteCreatePermission","kongRouteUpdatePermission","kongRouteDeletePermission","kongApplyPluginRoutePermission","kongUpdateRoutePluginPermission","kongDisableRoutePluginPermission"],"mappings":"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"}
1
+ {"version":3,"file":"router.cjs.js","sources":["../src/router.ts"],"sourcesContent":["import { HttpAuthService, PermissionsService } from '@backstage/backend-plugin-api';\nimport { InputError, NotAllowedError } from '@backstage/errors';\nimport { AuthorizeResult, type BasicPermission } from '@backstage/plugin-permission-common';\nimport { z } from 'zod';\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport type { CreateRoute } from '@veecode-platform/backstage-plugin-kong-service-manager-common';\nimport {\n kongServiceReadPermission,\n kongPluginsReadPermission,\n kongRoutesReadPermission,\n kongApplyPluginServicePermission,\n kongUpdateServicePluginPermission,\n kongDisableServicePluginPermission,\n kongRouteCreatePermission,\n kongRouteUpdatePermission,\n kongRouteDeletePermission,\n kongApplyPluginRoutePermission,\n kongUpdateRoutePluginPermission,\n kongDisableRoutePluginPermission,\n kongInstancesReadPermission,\n} from '@veecode-platform/backstage-plugin-kong-service-manager-common';\nimport { KongServiceManagerService } from './services/KongServiceManagerService';\n\nexport async function createRouter({\n httpAuth,\n permissions,\n kongService,\n}: {\n httpAuth: HttpAuthService;\n permissions: PermissionsService;\n kongService: KongServiceManagerService;\n}): Promise<express.Router> {\n const router = Router();\n router.use(express.json());\n\n async function authorize(req: express.Request, permission: BasicPermission) {\n const credentials = await httpAuth.credentials(req);\n const decision = await permissions.authorize(\n [{ permission }],\n { credentials },\n );\n if (decision[0].result !== AuthorizeResult.ALLOW) {\n throw new NotAllowedError('Permission denied');\n }\n }\n\n // --- Validation schemas ---\n\n const instanceServiceParams = z.object({\n instance: z.string(),\n serviceName: z.string(),\n });\n\n const instanceServiceRouteParams = z.object({\n instance: z.string(),\n serviceName: z.string(),\n routeId: z.string(),\n });\n\n const instanceServicePluginParams = z.object({\n instance: z.string(),\n serviceName: z.string(),\n pluginId: z.string(),\n });\n\n const instanceRouteParams = z.object({\n instance: z.string(),\n routeId: z.string(),\n });\n\n const instanceRoutePluginParams = z.object({\n instance: z.string(),\n routeId: z.string(),\n pluginId: z.string(),\n });\n\n const createRouteBody = z.object({\n name: z.string().optional(),\n protocols: z.array(z.string()).optional(),\n methods: z.array(z.string()).optional(),\n hosts: z.array(z.string()).optional(),\n paths: z.array(z.string()).optional(),\n headers: z.record(z.array(z.string())).optional(),\n https_redirect_status_code: z.number().optional(),\n regex_priority: z.number().optional(),\n strip_path: z.boolean().optional(),\n path_handling: z.string().optional(),\n preserve_host: z.boolean().optional(),\n request_buffering: z.boolean().optional(),\n response_buffering: z.boolean().optional(),\n tags: z.array(z.string()).optional(),\n });\n\n const createPluginBody = z.object({\n name: z.string(),\n config: z.record(z.unknown()).optional(),\n enabled: z.boolean().optional(),\n protocols: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n });\n\n const editPluginBody = z.object({\n name: z.string().optional(),\n config: z.record(z.unknown()).optional(),\n enabled: z.boolean().optional(),\n protocols: z.array(z.string()).optional(),\n tags: z.array(z.string()).optional(),\n });\n\n // --- Health check ---\n\n router.get('/health', async (_req, res) => {\n res.json({ status: 'ok' });\n });\n\n // --- Instances ---\n\n router.get('/instances', async (req, res) => {\n await authorize(req, kongInstancesReadPermission);\n res.json(kongService.getInstances());\n });\n\n // --- Service routes (Phase 1) ---\n\n // GET /:instance/services/:serviceName\n router.get('/:instance/services/:serviceName', async (req, res) => {\n await authorize(req, kongServiceReadPermission);\n\n const parsed = instanceServiceParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getServiceInfo(\n parsed.data.instance,\n parsed.data.serviceName,\n );\n res.json(result);\n });\n\n // GET /:instance/services/:serviceName/plugins/associated\n router.get(\n '/:instance/services/:serviceName/plugins/associated',\n async (req, res) => {\n await authorize(req, kongPluginsReadPermission);\n\n const parsed = instanceServiceParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getServiceAssociatedPlugins(\n parsed.data.instance,\n parsed.data.serviceName,\n );\n res.json(result);\n },\n );\n\n // GET /:instance/plugins\n router.get('/:instance/plugins', async (req, res) => {\n await authorize(req, kongPluginsReadPermission);\n\n const instance = z.string().safeParse(req.params.instance);\n if (!instance.success) throw new InputError(instance.error.toString());\n\n const result = await kongService.getAvailablePlugins(instance.data);\n res.json(result);\n });\n\n // --- Plugin schema introspection (Phase 2) ---\n\n // GET /:instance/services/plugins/:pluginName/fields\n router.get(\n '/:instance/services/plugins/:pluginName/fields',\n async (req, res) => {\n await authorize(req, kongPluginsReadPermission);\n\n const parsed = z\n .object({ instance: z.string(), pluginName: z.string() })\n .safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getPluginFields(\n parsed.data.instance,\n parsed.data.pluginName,\n );\n res.json(result);\n },\n );\n\n // --- Service plugin CRUD (Phase 2) ---\n\n // POST /:instance/services/:serviceName/plugins\n router.post(\n '/:instance/services/:serviceName/plugins',\n async (req, res) => {\n await authorize(req, kongApplyPluginServicePermission);\n\n const params = instanceServiceParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = createPluginBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.addPluginToService(\n params.data.instance,\n params.data.serviceName,\n body.data,\n );\n res.status(201).json(result);\n },\n );\n\n // PATCH /:instance/services/:serviceName/plugins/:pluginId\n router.patch(\n '/:instance/services/:serviceName/plugins/:pluginId',\n async (req, res) => {\n await authorize(req, kongUpdateServicePluginPermission);\n\n const params = instanceServicePluginParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = editPluginBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.editServicePlugin(\n params.data.instance,\n params.data.serviceName,\n params.data.pluginId,\n body.data,\n );\n res.json(result);\n },\n );\n\n // DELETE /:instance/services/:serviceName/plugins/:pluginId\n router.delete(\n '/:instance/services/:serviceName/plugins/:pluginId',\n async (req, res) => {\n await authorize(req, kongDisableServicePluginPermission);\n\n const params = instanceServicePluginParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n await kongService.removeServicePlugin(\n params.data.instance,\n params.data.serviceName,\n params.data.pluginId,\n );\n res.status(204).end();\n },\n );\n\n // --- Route CRUD (Phase 3) ---\n\n // GET /:instance/services/:serviceName/routes\n router.get(\n '/:instance/services/:serviceName/routes',\n async (req, res) => {\n await authorize(req, kongRoutesReadPermission);\n\n const parsed = instanceServiceParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getRoutes(\n parsed.data.instance,\n parsed.data.serviceName,\n );\n res.json(result);\n },\n );\n\n // GET /:instance/services/:serviceName/routes/:routeId\n router.get(\n '/:instance/services/:serviceName/routes/:routeId',\n async (req, res) => {\n await authorize(req, kongRoutesReadPermission);\n\n const parsed = instanceServiceRouteParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getRouteById(\n parsed.data.instance,\n parsed.data.serviceName,\n parsed.data.routeId,\n );\n res.json(result);\n },\n );\n\n // POST /:instance/services/:serviceName/routes\n router.post(\n '/:instance/services/:serviceName/routes',\n async (req, res) => {\n await authorize(req, kongRouteCreatePermission);\n\n const params = instanceServiceParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = createRouteBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.createRoute(\n params.data.instance,\n params.data.serviceName,\n body.data as CreateRoute,\n );\n res.status(201).json(result);\n },\n );\n\n // PATCH /:instance/services/:serviceName/routes/:routeId\n router.patch(\n '/:instance/services/:serviceName/routes/:routeId',\n async (req, res) => {\n await authorize(req, kongRouteUpdatePermission);\n\n const params = instanceServiceRouteParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = createRouteBody.partial().safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.editRoute(\n params.data.instance,\n params.data.serviceName,\n params.data.routeId,\n body.data as Partial<CreateRoute>,\n );\n res.json(result);\n },\n );\n\n // DELETE /:instance/services/:serviceName/routes/:routeId\n router.delete(\n '/:instance/services/:serviceName/routes/:routeId',\n async (req, res) => {\n await authorize(req, kongRouteDeletePermission);\n\n const params = instanceServiceRouteParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n await kongService.removeRoute(\n params.data.instance,\n params.data.serviceName,\n params.data.routeId,\n );\n res.status(204).end();\n },\n );\n\n // --- Route plugin CRUD (Phase 4) ---\n\n // GET /:instance/routes/:routeId/plugins/associated\n router.get(\n '/:instance/routes/:routeId/plugins/associated',\n async (req, res) => {\n await authorize(req, kongPluginsReadPermission);\n\n const parsed = instanceRouteParams.safeParse(req.params);\n if (!parsed.success) throw new InputError(parsed.error.toString());\n\n const result = await kongService.getRouteAssociatedPlugins(\n parsed.data.instance,\n parsed.data.routeId,\n );\n res.json(result);\n },\n );\n\n // POST /:instance/routes/:routeId/plugins\n router.post('/:instance/routes/:routeId/plugins', async (req, res) => {\n await authorize(req, kongApplyPluginRoutePermission);\n\n const params = instanceRouteParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = createPluginBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.addPluginToRoute(\n params.data.instance,\n params.data.routeId,\n body.data,\n );\n res.status(201).json(result);\n });\n\n // PATCH /:instance/routes/:routeId/plugins/:pluginId\n router.patch(\n '/:instance/routes/:routeId/plugins/:pluginId',\n async (req, res) => {\n await authorize(req, kongUpdateRoutePluginPermission);\n\n const params = instanceRoutePluginParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n const body = editPluginBody.safeParse(req.body);\n if (!body.success) throw new InputError(body.error.toString());\n\n const result = await kongService.editRoutePlugin(\n params.data.instance,\n params.data.routeId,\n params.data.pluginId,\n body.data,\n );\n res.json(result);\n },\n );\n\n // DELETE /:instance/routes/:routeId/plugins/:pluginId\n router.delete(\n '/:instance/routes/:routeId/plugins/:pluginId',\n async (req, res) => {\n await authorize(req, kongDisableRoutePluginPermission);\n\n const params = instanceRoutePluginParams.safeParse(req.params);\n if (!params.success) throw new InputError(params.error.toString());\n\n await kongService.removeRoutePlugin(\n params.data.instance,\n params.data.routeId,\n params.data.pluginId,\n );\n res.status(204).end();\n },\n );\n\n return router;\n}\n"],"names":["Router","express","AuthorizeResult","NotAllowedError","z","kongInstancesReadPermission","kongServiceReadPermission","InputError","kongPluginsReadPermission","kongApplyPluginServicePermission","kongUpdateServicePluginPermission","kongDisableServicePluginPermission","kongRoutesReadPermission","kongRouteCreatePermission","kongRouteUpdatePermission","kongRouteDeletePermission","kongApplyPluginRoutePermission","kongUpdateRoutePluginPermission","kongDisableRoutePluginPermission"],"mappings":"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"}
@@ -26,6 +26,7 @@ class KongServiceManagerService {
26
26
  const id = c.getString("id");
27
27
  const apiBaseUrl = c.getString("apiBaseUrl");
28
28
  const workspace = c.getOptionalString("workspace");
29
+ const description = c.getOptionalString("description");
29
30
  let auth;
30
31
  if (c.has("auth.kongAdmin")) {
31
32
  auth = { kongAdmin: c.getString("auth.kongAdmin") };
@@ -39,7 +40,7 @@ class KongServiceManagerService {
39
40
  } else {
40
41
  auth = { kongAdmin: "" };
41
42
  }
42
- return { id, apiBaseUrl, workspace, auth };
43
+ return { id, apiBaseUrl, workspace, description, auth };
43
44
  });
44
45
  }
45
46
  getInstance(instanceName) {
@@ -92,6 +93,15 @@ class KongServiceManagerService {
92
93
  }
93
94
  return response.json();
94
95
  }
96
+ // --- Instance operations ---
97
+ getInstances() {
98
+ return this.#instances.map((i) => ({
99
+ id: i.id,
100
+ apiBaseUrl: i.apiBaseUrl,
101
+ workspace: i.workspace,
102
+ description: i.description
103
+ }));
104
+ }
95
105
  // --- Service operations ---
96
106
  async getServiceInfo(instanceName, serviceName) {
97
107
  return this.kongFetch(
@@ -1 +1 @@
1
- {"version":3,"file":"KongServiceManagerService.cjs.js","sources":["../../src/services/KongServiceManagerService.ts"],"sourcesContent":["import {\n coreServices,\n createServiceFactory,\n createServiceRef,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport { Config } from '@backstage/config';\nimport { NotFoundError } from '@backstage/errors';\nimport type {\n ServiceInfoResponse,\n RoutesResponse,\n RouteResponse,\n CreateRoute,\n AssociatedPluginsResponse,\n PluginFieldsResponse,\n CreatePlugin,\n AvailablePluginsResponse,\n} from '@veecode-platform/backstage-plugin-kong-service-manager-common';\n\n/** Configuration for a single Kong instance */\nexport type KongInstanceConfig = {\n id: string;\n apiBaseUrl: string;\n workspace?: string;\n auth:\n | { kongAdmin: string }\n | { custom: { header: string; value: string } };\n};\n\nexport class KongServiceManagerService {\n readonly #logger: LoggerService;\n readonly #instances: KongInstanceConfig[];\n\n static create(options: { logger: LoggerService; config: Config }) {\n return new KongServiceManagerService(options.logger, options.config);\n }\n\n private constructor(logger: LoggerService, config: Config) {\n this.#logger = logger;\n this.#instances = this.readInstances(config);\n this.#logger.info(\n `Kong Service Manager initialized with ${this.#instances.length} instance(s)`,\n );\n }\n\n private readInstances(config: Config): KongInstanceConfig[] {\n if (!config.has('kong.instances')) {\n this.#logger.warn('No kong.instances configured');\n return [];\n }\n\n const instancesConfig = config.getConfigArray('kong.instances');\n return instancesConfig.map(c => {\n const id = c.getString('id');\n const apiBaseUrl = c.getString('apiBaseUrl');\n const workspace = c.getOptionalString('workspace');\n\n let auth: KongInstanceConfig['auth'];\n if (c.has('auth.kongAdmin')) {\n auth = { kongAdmin: c.getString('auth.kongAdmin') };\n } else if (c.has('auth.custom')) {\n auth = {\n custom: {\n header: c.getString('auth.custom.header'),\n value: c.getString('auth.custom.value'),\n },\n };\n } else {\n auth = { kongAdmin: '' };\n }\n\n return { id, apiBaseUrl, workspace, auth };\n });\n }\n\n private getInstance(instanceName: string): KongInstanceConfig {\n const instance = this.#instances.find(i => i.id === instanceName);\n if (!instance) {\n throw new NotFoundError(\n `Kong instance '${instanceName}' not found in configuration`,\n );\n }\n return instance;\n }\n\n private buildUrl(instance: KongInstanceConfig, path: string): string {\n const base = instance.apiBaseUrl.replace(/\\/$/, '');\n if (instance.workspace) {\n return `${base}/${instance.workspace}${path}`;\n }\n return `${base}${path}`;\n }\n\n private buildHeaders(instance: KongInstanceConfig): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n if ('kongAdmin' in instance.auth && instance.auth.kongAdmin) {\n headers['Kong-Admin-Token'] = instance.auth.kongAdmin;\n } else if ('custom' in instance.auth) {\n headers[instance.auth.custom.header] = instance.auth.custom.value;\n }\n\n return headers;\n }\n\n private async kongFetch<T>(\n instanceName: string,\n path: string,\n options?: RequestInit,\n ): Promise<T> {\n const instance = this.getInstance(instanceName);\n const url = this.buildUrl(instance, path);\n const headers = this.buildHeaders(instance);\n\n this.#logger.debug(`Kong API request: ${options?.method ?? 'GET'} ${url}`);\n\n const response = await fetch(url, {\n ...options,\n headers: { ...headers, ...options?.headers },\n });\n\n if (!response.ok) {\n const body = await response.text();\n this.#logger.error(\n `Kong API error: ${response.status} ${response.statusText} - ${body}`,\n );\n throw new Error(\n `Kong API request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n\n // --- Service operations ---\n\n async getServiceInfo(\n instanceName: string,\n serviceName: string,\n ): Promise<ServiceInfoResponse> {\n return this.kongFetch<ServiceInfoResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}`,\n );\n }\n\n // --- Route operations ---\n\n async getRoutes(\n instanceName: string,\n serviceName: string,\n ): Promise<RoutesResponse> {\n return this.kongFetch<RoutesResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes`,\n );\n }\n\n async getRouteById(\n instanceName: string,\n serviceName: string,\n routeId: string,\n ): Promise<RouteResponse> {\n return this.kongFetch<RouteResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes/${encodeURIComponent(routeId)}`,\n );\n }\n\n async createRoute(\n instanceName: string,\n serviceName: string,\n route: CreateRoute,\n ): Promise<RouteResponse> {\n return this.kongFetch<RouteResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes`,\n {\n method: 'POST',\n body: JSON.stringify(route),\n },\n );\n }\n\n async editRoute(\n instanceName: string,\n serviceName: string,\n routeId: string,\n route: Partial<CreateRoute>,\n ): Promise<RouteResponse> {\n return this.kongFetch<RouteResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes/${encodeURIComponent(routeId)}`,\n {\n method: 'PATCH',\n body: JSON.stringify(route),\n },\n );\n }\n\n async removeRoute(\n instanceName: string,\n serviceName: string,\n routeId: string,\n ): Promise<void> {\n await this.kongFetch<void>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes/${encodeURIComponent(routeId)}`,\n { method: 'DELETE' },\n );\n }\n\n // --- Plugin operations on services ---\n\n async getServiceAssociatedPlugins(\n instanceName: string,\n serviceName: string,\n ): Promise<AssociatedPluginsResponse[]> {\n const result = await this.kongFetch<{ data: AssociatedPluginsResponse[] }>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/plugins`,\n );\n return result.data;\n }\n\n async getAvailablePlugins(\n instanceName: string,\n ): Promise<AvailablePluginsResponse> {\n return this.kongFetch<AvailablePluginsResponse>(\n instanceName,\n '/plugins/enabled',\n );\n }\n\n async getPluginFields(\n instanceName: string,\n pluginName: string,\n ): Promise<PluginFieldsResponse> {\n return this.kongFetch<PluginFieldsResponse>(\n instanceName,\n `/schemas/plugins/${encodeURIComponent(pluginName)}`,\n );\n }\n\n async addPluginToService(\n instanceName: string,\n serviceName: string,\n plugin: CreatePlugin,\n ): Promise<AssociatedPluginsResponse> {\n return this.kongFetch<AssociatedPluginsResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/plugins`,\n {\n method: 'POST',\n body: JSON.stringify(plugin),\n },\n );\n }\n\n async editServicePlugin(\n instanceName: string,\n serviceName: string,\n pluginId: string,\n plugin: Partial<CreatePlugin>,\n ): Promise<AssociatedPluginsResponse> {\n return this.kongFetch<AssociatedPluginsResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/plugins/${encodeURIComponent(pluginId)}`,\n {\n method: 'PATCH',\n body: JSON.stringify(plugin),\n },\n );\n }\n\n async removeServicePlugin(\n instanceName: string,\n serviceName: string,\n pluginId: string,\n ): Promise<void> {\n await this.kongFetch<void>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/plugins/${encodeURIComponent(pluginId)}`,\n { method: 'DELETE' },\n );\n }\n\n // --- Plugin operations on routes ---\n\n async getRouteAssociatedPlugins(\n instanceName: string,\n routeId: string,\n ): Promise<AssociatedPluginsResponse[]> {\n const result = await this.kongFetch<{ data: AssociatedPluginsResponse[] }>(\n instanceName,\n `/routes/${encodeURIComponent(routeId)}/plugins`,\n );\n return result.data;\n }\n\n async addPluginToRoute(\n instanceName: string,\n routeId: string,\n plugin: CreatePlugin,\n ): Promise<AssociatedPluginsResponse> {\n return this.kongFetch<AssociatedPluginsResponse>(\n instanceName,\n `/routes/${encodeURIComponent(routeId)}/plugins`,\n {\n method: 'POST',\n body: JSON.stringify(plugin),\n },\n );\n }\n\n async editRoutePlugin(\n instanceName: string,\n routeId: string,\n pluginId: string,\n plugin: Partial<CreatePlugin>,\n ): Promise<AssociatedPluginsResponse> {\n return this.kongFetch<AssociatedPluginsResponse>(\n instanceName,\n `/routes/${encodeURIComponent(routeId)}/plugins/${encodeURIComponent(pluginId)}`,\n {\n method: 'PATCH',\n body: JSON.stringify(plugin),\n },\n );\n }\n\n async removeRoutePlugin(\n instanceName: string,\n routeId: string,\n pluginId: string,\n ): Promise<void> {\n await this.kongFetch<void>(\n instanceName,\n `/routes/${encodeURIComponent(routeId)}/plugins/${encodeURIComponent(pluginId)}`,\n { method: 'DELETE' },\n );\n }\n}\n\nexport const kongServiceManagerServiceRef =\n createServiceRef<KongServiceManagerService>({\n id: 'kong-service-manager.service',\n defaultFactory: async service =>\n createServiceFactory({\n service,\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n },\n async factory(deps) {\n return KongServiceManagerService.create(deps);\n },\n }),\n });\n"],"names":["NotFoundError","createServiceRef","createServiceFactory","coreServices"],"mappings":"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"}
1
+ {"version":3,"file":"KongServiceManagerService.cjs.js","sources":["../../src/services/KongServiceManagerService.ts"],"sourcesContent":["import {\n coreServices,\n createServiceFactory,\n createServiceRef,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport { Config } from '@backstage/config';\nimport { NotFoundError } from '@backstage/errors';\nimport type {\n ServiceInfoResponse,\n RoutesResponse,\n RouteResponse,\n CreateRoute,\n AssociatedPluginsResponse,\n PluginFieldsResponse,\n CreatePlugin,\n AvailablePluginsResponse,\n} from '@veecode-platform/backstage-plugin-kong-service-manager-common';\n\n/** Configuration for a single Kong instance */\nexport type KongInstanceConfig = {\n id: string;\n apiBaseUrl: string;\n workspace?: string;\n description?: string;\n auth:\n | { kongAdmin: string }\n | { custom: { header: string; value: string } };\n};\n\nexport class KongServiceManagerService {\n readonly #logger: LoggerService;\n readonly #instances: KongInstanceConfig[];\n\n static create(options: { logger: LoggerService; config: Config }) {\n return new KongServiceManagerService(options.logger, options.config);\n }\n\n private constructor(logger: LoggerService, config: Config) {\n this.#logger = logger;\n this.#instances = this.readInstances(config);\n this.#logger.info(\n `Kong Service Manager initialized with ${this.#instances.length} instance(s)`,\n );\n }\n\n private readInstances(config: Config): KongInstanceConfig[] {\n if (!config.has('kong.instances')) {\n this.#logger.warn('No kong.instances configured');\n return [];\n }\n\n const instancesConfig = config.getConfigArray('kong.instances');\n return instancesConfig.map(c => {\n const id = c.getString('id');\n const apiBaseUrl = c.getString('apiBaseUrl');\n const workspace = c.getOptionalString('workspace');\n const description = c.getOptionalString('description');\n\n let auth: KongInstanceConfig['auth'];\n if (c.has('auth.kongAdmin')) {\n auth = { kongAdmin: c.getString('auth.kongAdmin') };\n } else if (c.has('auth.custom')) {\n auth = {\n custom: {\n header: c.getString('auth.custom.header'),\n value: c.getString('auth.custom.value'),\n },\n };\n } else {\n auth = { kongAdmin: '' };\n }\n\n return { id, apiBaseUrl, workspace, description, auth };\n });\n }\n\n private getInstance(instanceName: string): KongInstanceConfig {\n const instance = this.#instances.find(i => i.id === instanceName);\n if (!instance) {\n throw new NotFoundError(\n `Kong instance '${instanceName}' not found in configuration`,\n );\n }\n return instance;\n }\n\n private buildUrl(instance: KongInstanceConfig, path: string): string {\n const base = instance.apiBaseUrl.replace(/\\/$/, '');\n if (instance.workspace) {\n return `${base}/${instance.workspace}${path}`;\n }\n return `${base}${path}`;\n }\n\n private buildHeaders(instance: KongInstanceConfig): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n if ('kongAdmin' in instance.auth && instance.auth.kongAdmin) {\n headers['Kong-Admin-Token'] = instance.auth.kongAdmin;\n } else if ('custom' in instance.auth) {\n headers[instance.auth.custom.header] = instance.auth.custom.value;\n }\n\n return headers;\n }\n\n private async kongFetch<T>(\n instanceName: string,\n path: string,\n options?: RequestInit,\n ): Promise<T> {\n const instance = this.getInstance(instanceName);\n const url = this.buildUrl(instance, path);\n const headers = this.buildHeaders(instance);\n\n this.#logger.debug(`Kong API request: ${options?.method ?? 'GET'} ${url}`);\n\n const response = await fetch(url, {\n ...options,\n headers: { ...headers, ...options?.headers },\n });\n\n if (!response.ok) {\n const body = await response.text();\n this.#logger.error(\n `Kong API error: ${response.status} ${response.statusText} - ${body}`,\n );\n throw new Error(\n `Kong API request failed: ${response.status} ${response.statusText}`,\n );\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json() as Promise<T>;\n }\n\n // --- Instance operations ---\n\n getInstances(): Array<{ id: string; apiBaseUrl: string; workspace?: string; description?: string }> {\n return this.#instances.map(i => ({\n id: i.id,\n apiBaseUrl: i.apiBaseUrl,\n workspace: i.workspace,\n description: i.description,\n }));\n }\n\n // --- Service operations ---\n\n async getServiceInfo(\n instanceName: string,\n serviceName: string,\n ): Promise<ServiceInfoResponse> {\n return this.kongFetch<ServiceInfoResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}`,\n );\n }\n\n // --- Route operations ---\n\n async getRoutes(\n instanceName: string,\n serviceName: string,\n ): Promise<RoutesResponse> {\n return this.kongFetch<RoutesResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes`,\n );\n }\n\n async getRouteById(\n instanceName: string,\n serviceName: string,\n routeId: string,\n ): Promise<RouteResponse> {\n return this.kongFetch<RouteResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes/${encodeURIComponent(routeId)}`,\n );\n }\n\n async createRoute(\n instanceName: string,\n serviceName: string,\n route: CreateRoute,\n ): Promise<RouteResponse> {\n return this.kongFetch<RouteResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes`,\n {\n method: 'POST',\n body: JSON.stringify(route),\n },\n );\n }\n\n async editRoute(\n instanceName: string,\n serviceName: string,\n routeId: string,\n route: Partial<CreateRoute>,\n ): Promise<RouteResponse> {\n return this.kongFetch<RouteResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes/${encodeURIComponent(routeId)}`,\n {\n method: 'PATCH',\n body: JSON.stringify(route),\n },\n );\n }\n\n async removeRoute(\n instanceName: string,\n serviceName: string,\n routeId: string,\n ): Promise<void> {\n await this.kongFetch<void>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/routes/${encodeURIComponent(routeId)}`,\n { method: 'DELETE' },\n );\n }\n\n // --- Plugin operations on services ---\n\n async getServiceAssociatedPlugins(\n instanceName: string,\n serviceName: string,\n ): Promise<AssociatedPluginsResponse[]> {\n const result = await this.kongFetch<{ data: AssociatedPluginsResponse[] }>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/plugins`,\n );\n return result.data;\n }\n\n async getAvailablePlugins(\n instanceName: string,\n ): Promise<AvailablePluginsResponse> {\n return this.kongFetch<AvailablePluginsResponse>(\n instanceName,\n '/plugins/enabled',\n );\n }\n\n async getPluginFields(\n instanceName: string,\n pluginName: string,\n ): Promise<PluginFieldsResponse> {\n return this.kongFetch<PluginFieldsResponse>(\n instanceName,\n `/schemas/plugins/${encodeURIComponent(pluginName)}`,\n );\n }\n\n async addPluginToService(\n instanceName: string,\n serviceName: string,\n plugin: CreatePlugin,\n ): Promise<AssociatedPluginsResponse> {\n return this.kongFetch<AssociatedPluginsResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/plugins`,\n {\n method: 'POST',\n body: JSON.stringify(plugin),\n },\n );\n }\n\n async editServicePlugin(\n instanceName: string,\n serviceName: string,\n pluginId: string,\n plugin: Partial<CreatePlugin>,\n ): Promise<AssociatedPluginsResponse> {\n return this.kongFetch<AssociatedPluginsResponse>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/plugins/${encodeURIComponent(pluginId)}`,\n {\n method: 'PATCH',\n body: JSON.stringify(plugin),\n },\n );\n }\n\n async removeServicePlugin(\n instanceName: string,\n serviceName: string,\n pluginId: string,\n ): Promise<void> {\n await this.kongFetch<void>(\n instanceName,\n `/services/${encodeURIComponent(serviceName)}/plugins/${encodeURIComponent(pluginId)}`,\n { method: 'DELETE' },\n );\n }\n\n // --- Plugin operations on routes ---\n\n async getRouteAssociatedPlugins(\n instanceName: string,\n routeId: string,\n ): Promise<AssociatedPluginsResponse[]> {\n const result = await this.kongFetch<{ data: AssociatedPluginsResponse[] }>(\n instanceName,\n `/routes/${encodeURIComponent(routeId)}/plugins`,\n );\n return result.data;\n }\n\n async addPluginToRoute(\n instanceName: string,\n routeId: string,\n plugin: CreatePlugin,\n ): Promise<AssociatedPluginsResponse> {\n return this.kongFetch<AssociatedPluginsResponse>(\n instanceName,\n `/routes/${encodeURIComponent(routeId)}/plugins`,\n {\n method: 'POST',\n body: JSON.stringify(plugin),\n },\n );\n }\n\n async editRoutePlugin(\n instanceName: string,\n routeId: string,\n pluginId: string,\n plugin: Partial<CreatePlugin>,\n ): Promise<AssociatedPluginsResponse> {\n return this.kongFetch<AssociatedPluginsResponse>(\n instanceName,\n `/routes/${encodeURIComponent(routeId)}/plugins/${encodeURIComponent(pluginId)}`,\n {\n method: 'PATCH',\n body: JSON.stringify(plugin),\n },\n );\n }\n\n async removeRoutePlugin(\n instanceName: string,\n routeId: string,\n pluginId: string,\n ): Promise<void> {\n await this.kongFetch<void>(\n instanceName,\n `/routes/${encodeURIComponent(routeId)}/plugins/${encodeURIComponent(pluginId)}`,\n { method: 'DELETE' },\n );\n }\n}\n\nexport const kongServiceManagerServiceRef =\n createServiceRef<KongServiceManagerService>({\n id: 'kong-service-manager.service',\n defaultFactory: async service =>\n createServiceFactory({\n service,\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n },\n async factory(deps) {\n return KongServiceManagerService.create(deps);\n },\n }),\n });\n"],"names":["NotFoundError","createServiceRef","createServiceFactory","coreServices"],"mappings":"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"}
@@ -11,6 +11,7 @@ exports.kongApplyPluginRoutePermission = permissions.kongApplyPluginRoutePermiss
11
11
  exports.kongApplyPluginServicePermission = permissions.kongApplyPluginServicePermission;
12
12
  exports.kongDisableRoutePluginPermission = permissions.kongDisableRoutePluginPermission;
13
13
  exports.kongDisableServicePluginPermission = permissions.kongDisableServicePluginPermission;
14
+ exports.kongInstancesReadPermission = permissions.kongInstancesReadPermission;
14
15
  exports.kongPermissions = permissions.kongPermissions;
15
16
  exports.kongPluginsReadPermission = permissions.kongPluginsReadPermission;
16
17
  exports.kongRouteCreatePermission = permissions.kongRouteCreatePermission;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -172,6 +172,8 @@ declare const kongRouteCreatePermission: _backstage_plugin_permission_common.Bas
172
172
  declare const kongRouteUpdatePermission: _backstage_plugin_permission_common.BasicPermission;
173
173
  /** Permission to delete a Kong route */
174
174
  declare const kongRouteDeletePermission: _backstage_plugin_permission_common.BasicPermission;
175
+ /** Permission to list available Kong instances */
176
+ declare const kongInstancesReadPermission: _backstage_plugin_permission_common.BasicPermission;
175
177
  /** Permission to add a plugin to a Kong route */
176
178
  declare const kongApplyPluginRoutePermission: _backstage_plugin_permission_common.BasicPermission;
177
179
  /** Permission to update a plugin on a Kong route */
@@ -224,5 +226,5 @@ interface KongServiceManagerApi {
224
226
  removeRoutePlugin(instance: string, routeId: string, pluginId: string): Promise<void>;
225
227
  }
226
228
 
227
- export { KONG_SERVICE_INSTANCE_ANNOTATION, KONG_SERVICE_NAME_ANNOTATION, PluginCategory, isKongServiceManagerAvailable, kongApplyPluginRoutePermission, kongApplyPluginServicePermission, kongDisableRoutePluginPermission, kongDisableServicePluginPermission, kongPermissions, kongPluginsReadPermission, kongRouteCreatePermission, kongRouteDeletePermission, kongRouteUpdatePermission, kongRoutesReadPermission, kongServiceReadPermission, kongUpdateRoutePluginPermission, kongUpdateServicePluginPermission };
229
+ export { KONG_SERVICE_INSTANCE_ANNOTATION, KONG_SERVICE_NAME_ANNOTATION, PluginCategory, isKongServiceManagerAvailable, kongApplyPluginRoutePermission, kongApplyPluginServicePermission, kongDisableRoutePluginPermission, kongDisableServicePluginPermission, kongInstancesReadPermission, kongPermissions, kongPluginsReadPermission, kongRouteCreatePermission, kongRouteDeletePermission, kongRouteUpdatePermission, kongRoutesReadPermission, kongServiceReadPermission, kongUpdateRoutePluginPermission, kongUpdateServicePluginPermission };
228
230
  export type { AssociatedPluginsResponse, AvailablePluginsResponse, CreatePlugin, CreateRoute, HttpMethod, KongServiceManagerApi, PluginCard, PluginFieldsResponse, PluginPerCategory, RouteProtocol, RouteResponse, RoutesResponse, SchemaField, ServiceInfoResponse };
@@ -1,4 +1,4 @@
1
1
  export { PluginCategory } from './types.esm.js';
2
- export { kongApplyPluginRoutePermission, kongApplyPluginServicePermission, kongDisableRoutePluginPermission, kongDisableServicePluginPermission, kongPermissions, kongPluginsReadPermission, kongRouteCreatePermission, kongRouteDeletePermission, kongRouteUpdatePermission, kongRoutesReadPermission, kongServiceReadPermission, kongUpdateRoutePluginPermission, kongUpdateServicePluginPermission } from './permissions.esm.js';
2
+ export { kongApplyPluginRoutePermission, kongApplyPluginServicePermission, kongDisableRoutePluginPermission, kongDisableServicePluginPermission, kongInstancesReadPermission, kongPermissions, kongPluginsReadPermission, kongRouteCreatePermission, kongRouteDeletePermission, kongRouteUpdatePermission, kongRoutesReadPermission, kongServiceReadPermission, kongUpdateRoutePluginPermission, kongUpdateServicePluginPermission } from './permissions.esm.js';
3
3
  export { KONG_SERVICE_INSTANCE_ANNOTATION, KONG_SERVICE_NAME_ANNOTATION, isKongServiceManagerAvailable } from './annotations.esm.js';
4
4
  //# sourceMappingURL=index.esm.js.map
@@ -38,6 +38,10 @@ const kongRouteDeletePermission = pluginPermissionCommon.createPermission({
38
38
  name: "kong.route.delete",
39
39
  attributes: { action: "delete" }
40
40
  });
41
+ const kongInstancesReadPermission = pluginPermissionCommon.createPermission({
42
+ name: "kong.instances.read",
43
+ attributes: { action: "read" }
44
+ });
41
45
  const kongApplyPluginRoutePermission = pluginPermissionCommon.createPermission({
42
46
  name: "kong.plugin.route.apply",
43
47
  attributes: { action: "create" }
@@ -62,13 +66,15 @@ const kongPermissions = [
62
66
  kongRouteDeletePermission,
63
67
  kongApplyPluginRoutePermission,
64
68
  kongUpdateRoutePluginPermission,
65
- kongDisableRoutePluginPermission
69
+ kongDisableRoutePluginPermission,
70
+ kongInstancesReadPermission
66
71
  ];
67
72
 
68
73
  exports.kongApplyPluginRoutePermission = kongApplyPluginRoutePermission;
69
74
  exports.kongApplyPluginServicePermission = kongApplyPluginServicePermission;
70
75
  exports.kongDisableRoutePluginPermission = kongDisableRoutePluginPermission;
71
76
  exports.kongDisableServicePluginPermission = kongDisableServicePluginPermission;
77
+ exports.kongInstancesReadPermission = kongInstancesReadPermission;
72
78
  exports.kongPermissions = kongPermissions;
73
79
  exports.kongPluginsReadPermission = kongPluginsReadPermission;
74
80
  exports.kongRouteCreatePermission = kongRouteCreatePermission;
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.cjs.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\n/** Permission to read Kong service information */\nexport const kongServiceReadPermission = createPermission({\n name: 'kong.service.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to read available and associated Kong plugins */\nexport const kongPluginsReadPermission = createPermission({\n name: 'kong.plugins.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to read Kong routes */\nexport const kongRoutesReadPermission = createPermission({\n name: 'kong.routes.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to add a plugin to a Kong service */\nexport const kongApplyPluginServicePermission = createPermission({\n name: 'kong.plugin.service.apply',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a plugin on a Kong service */\nexport const kongUpdateServicePluginPermission = createPermission({\n name: 'kong.plugin.service.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to disable/remove a plugin from a Kong service */\nexport const kongDisableServicePluginPermission = createPermission({\n name: 'kong.plugin.service.disable',\n attributes: { action: 'delete' },\n});\n\n/** Permission to create a Kong route */\nexport const kongRouteCreatePermission = createPermission({\n name: 'kong.route.create',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a Kong route */\nexport const kongRouteUpdatePermission = createPermission({\n name: 'kong.route.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to delete a Kong route */\nexport const kongRouteDeletePermission = createPermission({\n name: 'kong.route.delete',\n attributes: { action: 'delete' },\n});\n\n/** Permission to add a plugin to a Kong route */\nexport const kongApplyPluginRoutePermission = createPermission({\n name: 'kong.plugin.route.apply',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a plugin on a Kong route */\nexport const kongUpdateRoutePluginPermission = createPermission({\n name: 'kong.plugin.route.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to disable/remove a plugin from a Kong route */\nexport const kongDisableRoutePluginPermission = createPermission({\n name: 'kong.plugin.route.disable',\n attributes: { action: 'delete' },\n});\n\n/** All Kong Service Manager permissions */\nexport const kongPermissions = [\n kongServiceReadPermission,\n kongPluginsReadPermission,\n kongRoutesReadPermission,\n kongApplyPluginServicePermission,\n kongUpdateServicePluginPermission,\n kongDisableServicePluginPermission,\n kongRouteCreatePermission,\n kongRouteUpdatePermission,\n kongRouteDeletePermission,\n kongApplyPluginRoutePermission,\n kongUpdateRoutePluginPermission,\n kongDisableRoutePluginPermission,\n];\n"],"names":["createPermission"],"mappings":";;;;AAGO,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,2BAA2BA,uCAAA,CAAiB;AAAA,EACvD,IAAA,EAAM,kBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,mCAAmCA,uCAAA,CAAiB;AAAA,EAC/D,IAAA,EAAM,2BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,oCAAoCA,uCAAA,CAAiB;AAAA,EAChE,IAAA,EAAM,4BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,qCAAqCA,uCAAA,CAAiB;AAAA,EACjE,IAAA,EAAM,6BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,iCAAiCA,uCAAA,CAAiB;AAAA,EAC7D,IAAA,EAAM,yBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,kCAAkCA,uCAAA,CAAiB;AAAA,EAC9D,IAAA,EAAM,0BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,mCAAmCA,uCAAA,CAAiB;AAAA,EAC/D,IAAA,EAAM,2BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,eAAA,GAAkB;AAAA,EAC7B,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,gCAAA;AAAA,EACA,iCAAA;AAAA,EACA,kCAAA;AAAA,EACA,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,8BAAA;AAAA,EACA,+BAAA;AAAA,EACA;AACF;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"permissions.cjs.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\n/** Permission to read Kong service information */\nexport const kongServiceReadPermission = createPermission({\n name: 'kong.service.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to read available and associated Kong plugins */\nexport const kongPluginsReadPermission = createPermission({\n name: 'kong.plugins.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to read Kong routes */\nexport const kongRoutesReadPermission = createPermission({\n name: 'kong.routes.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to add a plugin to a Kong service */\nexport const kongApplyPluginServicePermission = createPermission({\n name: 'kong.plugin.service.apply',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a plugin on a Kong service */\nexport const kongUpdateServicePluginPermission = createPermission({\n name: 'kong.plugin.service.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to disable/remove a plugin from a Kong service */\nexport const kongDisableServicePluginPermission = createPermission({\n name: 'kong.plugin.service.disable',\n attributes: { action: 'delete' },\n});\n\n/** Permission to create a Kong route */\nexport const kongRouteCreatePermission = createPermission({\n name: 'kong.route.create',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a Kong route */\nexport const kongRouteUpdatePermission = createPermission({\n name: 'kong.route.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to delete a Kong route */\nexport const kongRouteDeletePermission = createPermission({\n name: 'kong.route.delete',\n attributes: { action: 'delete' },\n});\n\n/** Permission to list available Kong instances */\nexport const kongInstancesReadPermission = createPermission({\n name: 'kong.instances.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to add a plugin to a Kong route */\nexport const kongApplyPluginRoutePermission = createPermission({\n name: 'kong.plugin.route.apply',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a plugin on a Kong route */\nexport const kongUpdateRoutePluginPermission = createPermission({\n name: 'kong.plugin.route.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to disable/remove a plugin from a Kong route */\nexport const kongDisableRoutePluginPermission = createPermission({\n name: 'kong.plugin.route.disable',\n attributes: { action: 'delete' },\n});\n\n/** All Kong Service Manager permissions */\nexport const kongPermissions = [\n kongServiceReadPermission,\n kongPluginsReadPermission,\n kongRoutesReadPermission,\n kongApplyPluginServicePermission,\n kongUpdateServicePluginPermission,\n kongDisableServicePluginPermission,\n kongRouteCreatePermission,\n kongRouteUpdatePermission,\n kongRouteDeletePermission,\n kongApplyPluginRoutePermission,\n kongUpdateRoutePluginPermission,\n kongDisableRoutePluginPermission,\n kongInstancesReadPermission,\n];\n"],"names":["createPermission"],"mappings":";;;;AAGO,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,2BAA2BA,uCAAA,CAAiB;AAAA,EACvD,IAAA,EAAM,kBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,mCAAmCA,uCAAA,CAAiB;AAAA,EAC/D,IAAA,EAAM,2BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,oCAAoCA,uCAAA,CAAiB;AAAA,EAChE,IAAA,EAAM,4BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,qCAAqCA,uCAAA,CAAiB;AAAA,EACjE,IAAA,EAAM,6BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4BA,uCAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,8BAA8BA,uCAAA,CAAiB;AAAA,EAC1D,IAAA,EAAM,qBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,iCAAiCA,uCAAA,CAAiB;AAAA,EAC7D,IAAA,EAAM,yBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,kCAAkCA,uCAAA,CAAiB;AAAA,EAC9D,IAAA,EAAM,0BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,mCAAmCA,uCAAA,CAAiB;AAAA,EAC/D,IAAA,EAAM,2BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,eAAA,GAAkB;AAAA,EAC7B,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,gCAAA;AAAA,EACA,iCAAA;AAAA,EACA,kCAAA;AAAA,EACA,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,8BAAA;AAAA,EACA,+BAAA;AAAA,EACA,gCAAA;AAAA,EACA;AACF;;;;;;;;;;;;;;;;;"}
@@ -36,6 +36,10 @@ const kongRouteDeletePermission = createPermission({
36
36
  name: "kong.route.delete",
37
37
  attributes: { action: "delete" }
38
38
  });
39
+ const kongInstancesReadPermission = createPermission({
40
+ name: "kong.instances.read",
41
+ attributes: { action: "read" }
42
+ });
39
43
  const kongApplyPluginRoutePermission = createPermission({
40
44
  name: "kong.plugin.route.apply",
41
45
  attributes: { action: "create" }
@@ -60,8 +64,9 @@ const kongPermissions = [
60
64
  kongRouteDeletePermission,
61
65
  kongApplyPluginRoutePermission,
62
66
  kongUpdateRoutePluginPermission,
63
- kongDisableRoutePluginPermission
67
+ kongDisableRoutePluginPermission,
68
+ kongInstancesReadPermission
64
69
  ];
65
70
 
66
- export { kongApplyPluginRoutePermission, kongApplyPluginServicePermission, kongDisableRoutePluginPermission, kongDisableServicePluginPermission, kongPermissions, kongPluginsReadPermission, kongRouteCreatePermission, kongRouteDeletePermission, kongRouteUpdatePermission, kongRoutesReadPermission, kongServiceReadPermission, kongUpdateRoutePluginPermission, kongUpdateServicePluginPermission };
71
+ export { kongApplyPluginRoutePermission, kongApplyPluginServicePermission, kongDisableRoutePluginPermission, kongDisableServicePluginPermission, kongInstancesReadPermission, kongPermissions, kongPluginsReadPermission, kongRouteCreatePermission, kongRouteDeletePermission, kongRouteUpdatePermission, kongRoutesReadPermission, kongServiceReadPermission, kongUpdateRoutePluginPermission, kongUpdateServicePluginPermission };
67
72
  //# sourceMappingURL=permissions.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissions.esm.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\n/** Permission to read Kong service information */\nexport const kongServiceReadPermission = createPermission({\n name: 'kong.service.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to read available and associated Kong plugins */\nexport const kongPluginsReadPermission = createPermission({\n name: 'kong.plugins.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to read Kong routes */\nexport const kongRoutesReadPermission = createPermission({\n name: 'kong.routes.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to add a plugin to a Kong service */\nexport const kongApplyPluginServicePermission = createPermission({\n name: 'kong.plugin.service.apply',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a plugin on a Kong service */\nexport const kongUpdateServicePluginPermission = createPermission({\n name: 'kong.plugin.service.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to disable/remove a plugin from a Kong service */\nexport const kongDisableServicePluginPermission = createPermission({\n name: 'kong.plugin.service.disable',\n attributes: { action: 'delete' },\n});\n\n/** Permission to create a Kong route */\nexport const kongRouteCreatePermission = createPermission({\n name: 'kong.route.create',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a Kong route */\nexport const kongRouteUpdatePermission = createPermission({\n name: 'kong.route.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to delete a Kong route */\nexport const kongRouteDeletePermission = createPermission({\n name: 'kong.route.delete',\n attributes: { action: 'delete' },\n});\n\n/** Permission to add a plugin to a Kong route */\nexport const kongApplyPluginRoutePermission = createPermission({\n name: 'kong.plugin.route.apply',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a plugin on a Kong route */\nexport const kongUpdateRoutePluginPermission = createPermission({\n name: 'kong.plugin.route.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to disable/remove a plugin from a Kong route */\nexport const kongDisableRoutePluginPermission = createPermission({\n name: 'kong.plugin.route.disable',\n attributes: { action: 'delete' },\n});\n\n/** All Kong Service Manager permissions */\nexport const kongPermissions = [\n kongServiceReadPermission,\n kongPluginsReadPermission,\n kongRoutesReadPermission,\n kongApplyPluginServicePermission,\n kongUpdateServicePluginPermission,\n kongDisableServicePluginPermission,\n kongRouteCreatePermission,\n kongRouteUpdatePermission,\n kongRouteDeletePermission,\n kongApplyPluginRoutePermission,\n kongUpdateRoutePluginPermission,\n kongDisableRoutePluginPermission,\n];\n"],"names":[],"mappings":";;AAGO,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,2BAA2B,gBAAA,CAAiB;AAAA,EACvD,IAAA,EAAM,kBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,mCAAmC,gBAAA,CAAiB;AAAA,EAC/D,IAAA,EAAM,2BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,oCAAoC,gBAAA,CAAiB;AAAA,EAChE,IAAA,EAAM,4BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,qCAAqC,gBAAA,CAAiB;AAAA,EACjE,IAAA,EAAM,6BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,iCAAiC,gBAAA,CAAiB;AAAA,EAC7D,IAAA,EAAM,yBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,kCAAkC,gBAAA,CAAiB;AAAA,EAC9D,IAAA,EAAM,0BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,mCAAmC,gBAAA,CAAiB;AAAA,EAC/D,IAAA,EAAM,2BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,eAAA,GAAkB;AAAA,EAC7B,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,gCAAA;AAAA,EACA,iCAAA;AAAA,EACA,kCAAA;AAAA,EACA,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,8BAAA;AAAA,EACA,+BAAA;AAAA,EACA;AACF;;;;"}
1
+ {"version":3,"file":"permissions.esm.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\n/** Permission to read Kong service information */\nexport const kongServiceReadPermission = createPermission({\n name: 'kong.service.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to read available and associated Kong plugins */\nexport const kongPluginsReadPermission = createPermission({\n name: 'kong.plugins.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to read Kong routes */\nexport const kongRoutesReadPermission = createPermission({\n name: 'kong.routes.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to add a plugin to a Kong service */\nexport const kongApplyPluginServicePermission = createPermission({\n name: 'kong.plugin.service.apply',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a plugin on a Kong service */\nexport const kongUpdateServicePluginPermission = createPermission({\n name: 'kong.plugin.service.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to disable/remove a plugin from a Kong service */\nexport const kongDisableServicePluginPermission = createPermission({\n name: 'kong.plugin.service.disable',\n attributes: { action: 'delete' },\n});\n\n/** Permission to create a Kong route */\nexport const kongRouteCreatePermission = createPermission({\n name: 'kong.route.create',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a Kong route */\nexport const kongRouteUpdatePermission = createPermission({\n name: 'kong.route.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to delete a Kong route */\nexport const kongRouteDeletePermission = createPermission({\n name: 'kong.route.delete',\n attributes: { action: 'delete' },\n});\n\n/** Permission to list available Kong instances */\nexport const kongInstancesReadPermission = createPermission({\n name: 'kong.instances.read',\n attributes: { action: 'read' },\n});\n\n/** Permission to add a plugin to a Kong route */\nexport const kongApplyPluginRoutePermission = createPermission({\n name: 'kong.plugin.route.apply',\n attributes: { action: 'create' },\n});\n\n/** Permission to update a plugin on a Kong route */\nexport const kongUpdateRoutePluginPermission = createPermission({\n name: 'kong.plugin.route.update',\n attributes: { action: 'update' },\n});\n\n/** Permission to disable/remove a plugin from a Kong route */\nexport const kongDisableRoutePluginPermission = createPermission({\n name: 'kong.plugin.route.disable',\n attributes: { action: 'delete' },\n});\n\n/** All Kong Service Manager permissions */\nexport const kongPermissions = [\n kongServiceReadPermission,\n kongPluginsReadPermission,\n kongRoutesReadPermission,\n kongApplyPluginServicePermission,\n kongUpdateServicePluginPermission,\n kongDisableServicePluginPermission,\n kongRouteCreatePermission,\n kongRouteUpdatePermission,\n kongRouteDeletePermission,\n kongApplyPluginRoutePermission,\n kongUpdateRoutePluginPermission,\n kongDisableRoutePluginPermission,\n kongInstancesReadPermission,\n];\n"],"names":[],"mappings":";;AAGO,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,2BAA2B,gBAAA,CAAiB;AAAA,EACvD,IAAA,EAAM,kBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,mCAAmC,gBAAA,CAAiB;AAAA,EAC/D,IAAA,EAAM,2BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,oCAAoC,gBAAA,CAAiB;AAAA,EAChE,IAAA,EAAM,4BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,qCAAqC,gBAAA,CAAiB;AAAA,EACjE,IAAA,EAAM,6BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,4BAA4B,gBAAA,CAAiB;AAAA,EACxD,IAAA,EAAM,mBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,8BAA8B,gBAAA,CAAiB;AAAA,EAC1D,IAAA,EAAM,qBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,MAAA;AACxB,CAAC;AAGM,MAAM,iCAAiC,gBAAA,CAAiB;AAAA,EAC7D,IAAA,EAAM,yBAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,kCAAkC,gBAAA,CAAiB;AAAA,EAC9D,IAAA,EAAM,0BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,mCAAmC,gBAAA,CAAiB;AAAA,EAC/D,IAAA,EAAM,2BAAA;AAAA,EACN,UAAA,EAAY,EAAE,MAAA,EAAQ,QAAA;AACxB,CAAC;AAGM,MAAM,eAAA,GAAkB;AAAA,EAC7B,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,gCAAA;AAAA,EACA,iCAAA;AAAA,EACA,kCAAA;AAAA,EACA,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,yBAAA;AAAA,EACA,8BAAA;AAAA,EACA,+BAAA;AAAA,EACA,gCAAA;AAAA,EACA;AACF;;;;"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veecode-platform/backstage-plugin-kong-service-manager-common",
3
- "version": "1.0.1+embedded",
3
+ "version": "1.0.2+embedded",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.cjs.js",
6
6
  "types": "dist/index.d.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veecode-platform/backstage-plugin-kong-service-manager-backend-dynamic",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "license": "Apache-2.0",
5
5
  "main": "dist/index.cjs.js",
6
6
  "types": "dist/index.d.ts",
@@ -15,10 +15,10 @@
15
15
  "pluginPackages": [
16
16
  "@veecode-platform/backstage-plugin-kong-service-manager-backend"
17
17
  ],
18
- "supported-versions": "1.48.1"
18
+ "supported-versions": "1.48.4"
19
19
  },
20
20
  "dependencies": {
21
- "@veecode-platform/backstage-plugin-kong-service-manager-common": "1.0.1",
21
+ "@veecode-platform/backstage-plugin-kong-service-manager-common": "1.0.2",
22
22
  "express": "^4.14.0",
23
23
  "express-promise-router": "^4.1.0",
24
24
  "zod": "^3.22.4"