@pstefans/kuadrant-backstage-plugin-backend-dynamic 0.0.2-dev

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.
@@ -0,0 +1,136 @@
1
+ 'use strict';
2
+
3
+ var pluginPermissionCommon = require('@backstage/plugin-permission-common');
4
+
5
+ const kuadrantPlanPolicyCreatePermission = pluginPermissionCommon.createPermission({
6
+ name: "kuadrant.planpolicy.create",
7
+ attributes: { action: "create" }
8
+ });
9
+ const kuadrantPlanPolicyReadPermission = pluginPermissionCommon.createPermission({
10
+ name: "kuadrant.planpolicy.read",
11
+ attributes: { action: "read" }
12
+ });
13
+ const kuadrantPlanPolicyUpdatePermission = pluginPermissionCommon.createPermission({
14
+ name: "kuadrant.planpolicy.update",
15
+ attributes: { action: "update" }
16
+ });
17
+ const kuadrantPlanPolicyDeletePermission = pluginPermissionCommon.createPermission({
18
+ name: "kuadrant.planpolicy.delete",
19
+ attributes: { action: "delete" }
20
+ });
21
+ const kuadrantPlanPolicyListPermission = pluginPermissionCommon.createPermission({
22
+ name: "kuadrant.planpolicy.list",
23
+ attributes: { action: "read" }
24
+ });
25
+ const kuadrantApiProductCreatePermission = pluginPermissionCommon.createPermission({
26
+ name: "kuadrant.apiproduct.create",
27
+ attributes: { action: "create" }
28
+ });
29
+ const kuadrantApiProductReadOwnPermission = pluginPermissionCommon.createPermission({
30
+ name: "kuadrant.apiproduct.read.own",
31
+ attributes: { action: "read" }
32
+ });
33
+ const kuadrantApiProductReadAllPermission = pluginPermissionCommon.createPermission({
34
+ name: "kuadrant.apiproduct.read.all",
35
+ attributes: { action: "read" }
36
+ });
37
+ const kuadrantApiProductUpdateOwnPermission = pluginPermissionCommon.createPermission({
38
+ name: "kuadrant.apiproduct.update.own",
39
+ attributes: { action: "update" }
40
+ });
41
+ const kuadrantApiProductUpdateAllPermission = pluginPermissionCommon.createPermission({
42
+ name: "kuadrant.apiproduct.update.all",
43
+ attributes: { action: "update" }
44
+ });
45
+ const kuadrantApiProductDeleteOwnPermission = pluginPermissionCommon.createPermission({
46
+ name: "kuadrant.apiproduct.delete.own",
47
+ attributes: { action: "delete" }
48
+ });
49
+ const kuadrantApiProductDeleteAllPermission = pluginPermissionCommon.createPermission({
50
+ name: "kuadrant.apiproduct.delete.all",
51
+ attributes: { action: "delete" }
52
+ });
53
+ const kuadrantApiProductListPermission = pluginPermissionCommon.createPermission({
54
+ name: "kuadrant.apiproduct.list",
55
+ attributes: { action: "read" }
56
+ });
57
+ const kuadrantApiKeyCreatePermission = pluginPermissionCommon.createPermission({
58
+ name: "kuadrant.apikey.create",
59
+ attributes: { action: "create" },
60
+ resourceType: "apiproduct"
61
+ });
62
+ const kuadrantApiKeyReadOwnPermission = pluginPermissionCommon.createPermission({
63
+ name: "kuadrant.apikey.read.own",
64
+ attributes: { action: "read" }
65
+ });
66
+ const kuadrantApiKeyReadAllPermission = pluginPermissionCommon.createPermission({
67
+ name: "kuadrant.apikey.read.all",
68
+ attributes: { action: "read" }
69
+ });
70
+ const kuadrantApiKeyUpdateOwnPermission = pluginPermissionCommon.createPermission({
71
+ name: "kuadrant.apikey.update.own",
72
+ attributes: { action: "update" }
73
+ });
74
+ const kuadrantApiKeyUpdateAllPermission = pluginPermissionCommon.createPermission({
75
+ name: "kuadrant.apikey.update.all",
76
+ attributes: { action: "update" }
77
+ });
78
+ const kuadrantApiKeyDeleteOwnPermission = pluginPermissionCommon.createPermission({
79
+ name: "kuadrant.apikey.delete.own",
80
+ attributes: { action: "delete" }
81
+ });
82
+ const kuadrantApiKeyDeleteAllPermission = pluginPermissionCommon.createPermission({
83
+ name: "kuadrant.apikey.delete.all",
84
+ attributes: { action: "delete" }
85
+ });
86
+ const kuadrantApiKeyApprovePermission = pluginPermissionCommon.createPermission({
87
+ name: "kuadrant.apikey.approve",
88
+ attributes: { action: "update" }
89
+ });
90
+ const kuadrantPermissions = [
91
+ kuadrantPlanPolicyCreatePermission,
92
+ kuadrantPlanPolicyReadPermission,
93
+ kuadrantPlanPolicyUpdatePermission,
94
+ kuadrantPlanPolicyDeletePermission,
95
+ kuadrantPlanPolicyListPermission,
96
+ kuadrantApiProductCreatePermission,
97
+ kuadrantApiProductReadOwnPermission,
98
+ kuadrantApiProductReadAllPermission,
99
+ kuadrantApiProductUpdateOwnPermission,
100
+ kuadrantApiProductUpdateAllPermission,
101
+ kuadrantApiProductDeleteOwnPermission,
102
+ kuadrantApiProductDeleteAllPermission,
103
+ kuadrantApiProductListPermission,
104
+ kuadrantApiKeyCreatePermission,
105
+ kuadrantApiKeyReadOwnPermission,
106
+ kuadrantApiKeyReadAllPermission,
107
+ kuadrantApiKeyUpdateOwnPermission,
108
+ kuadrantApiKeyUpdateAllPermission,
109
+ kuadrantApiKeyDeleteOwnPermission,
110
+ kuadrantApiKeyDeleteAllPermission,
111
+ kuadrantApiKeyApprovePermission
112
+ ];
113
+
114
+ exports.kuadrantApiKeyApprovePermission = kuadrantApiKeyApprovePermission;
115
+ exports.kuadrantApiKeyCreatePermission = kuadrantApiKeyCreatePermission;
116
+ exports.kuadrantApiKeyDeleteAllPermission = kuadrantApiKeyDeleteAllPermission;
117
+ exports.kuadrantApiKeyDeleteOwnPermission = kuadrantApiKeyDeleteOwnPermission;
118
+ exports.kuadrantApiKeyReadAllPermission = kuadrantApiKeyReadAllPermission;
119
+ exports.kuadrantApiKeyReadOwnPermission = kuadrantApiKeyReadOwnPermission;
120
+ exports.kuadrantApiKeyUpdateAllPermission = kuadrantApiKeyUpdateAllPermission;
121
+ exports.kuadrantApiKeyUpdateOwnPermission = kuadrantApiKeyUpdateOwnPermission;
122
+ exports.kuadrantApiProductCreatePermission = kuadrantApiProductCreatePermission;
123
+ exports.kuadrantApiProductDeleteAllPermission = kuadrantApiProductDeleteAllPermission;
124
+ exports.kuadrantApiProductDeleteOwnPermission = kuadrantApiProductDeleteOwnPermission;
125
+ exports.kuadrantApiProductListPermission = kuadrantApiProductListPermission;
126
+ exports.kuadrantApiProductReadAllPermission = kuadrantApiProductReadAllPermission;
127
+ exports.kuadrantApiProductReadOwnPermission = kuadrantApiProductReadOwnPermission;
128
+ exports.kuadrantApiProductUpdateAllPermission = kuadrantApiProductUpdateAllPermission;
129
+ exports.kuadrantApiProductUpdateOwnPermission = kuadrantApiProductUpdateOwnPermission;
130
+ exports.kuadrantPermissions = kuadrantPermissions;
131
+ exports.kuadrantPlanPolicyCreatePermission = kuadrantPlanPolicyCreatePermission;
132
+ exports.kuadrantPlanPolicyDeletePermission = kuadrantPlanPolicyDeletePermission;
133
+ exports.kuadrantPlanPolicyListPermission = kuadrantPlanPolicyListPermission;
134
+ exports.kuadrantPlanPolicyReadPermission = kuadrantPlanPolicyReadPermission;
135
+ exports.kuadrantPlanPolicyUpdatePermission = kuadrantPlanPolicyUpdatePermission;
136
+ //# sourceMappingURL=permissions.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.cjs.js","sources":["../src/permissions.ts"],"sourcesContent":["import { createPermission } from '@backstage/plugin-permission-common';\n\n/**\n * Permission definitions for the Kuadrant plugin\n *\n * These permissions control access to PlanPolicy, APIProduct, APIKey,\n * and API key management within the Kuadrant Backstage plugin.\n *\n * Permissions are composable - use them to build custom roles beyond the\n * three reference personas (Platform Engineer, API Owner, API Consumer).\n */\n\n// planpolicy permissions (rate limit tiers)\nexport const kuadrantPlanPolicyCreatePermission = createPermission({\n name: 'kuadrant.planpolicy.create',\n attributes: { action: 'create' },\n});\n\nexport const kuadrantPlanPolicyReadPermission = createPermission({\n name: 'kuadrant.planpolicy.read',\n attributes: { action: 'read' },\n});\n\nexport const kuadrantPlanPolicyUpdatePermission = createPermission({\n name: 'kuadrant.planpolicy.update',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantPlanPolicyDeletePermission = createPermission({\n name: 'kuadrant.planpolicy.delete',\n attributes: { action: 'delete' },\n});\n\nexport const kuadrantPlanPolicyListPermission = createPermission({\n name: 'kuadrant.planpolicy.list',\n attributes: { action: 'read' },\n});\n\n// apiproduct permissions (catalog entries)\nexport const kuadrantApiProductCreatePermission = createPermission({\n name: 'kuadrant.apiproduct.create',\n attributes: { action: 'create' },\n});\n\nexport const kuadrantApiProductReadOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.read.own',\n attributes: { action: 'read' },\n});\n\nexport const kuadrantApiProductReadAllPermission = createPermission({\n name: 'kuadrant.apiproduct.read.all',\n attributes: { action: 'read' },\n});\n\nexport const kuadrantApiProductUpdateOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.update.own',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantApiProductUpdateAllPermission = createPermission({\n name: 'kuadrant.apiproduct.update.all',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantApiProductDeleteOwnPermission = createPermission({\n name: 'kuadrant.apiproduct.delete.own',\n attributes: { action: 'delete' },\n});\n\nexport const kuadrantApiProductDeleteAllPermission = createPermission({\n name: 'kuadrant.apiproduct.delete.all',\n attributes: { action: 'delete' },\n});\n\nexport const kuadrantApiProductListPermission = createPermission({\n name: 'kuadrant.apiproduct.list',\n attributes: { action: 'read' },\n});\n\n// apikey permissions (access requests to APIKey CRD)\nexport const kuadrantApiKeyCreatePermission = createPermission({\n name: 'kuadrant.apikey.create',\n attributes: { action: 'create' },\n resourceType: 'apiproduct',\n});\n\nexport const kuadrantApiKeyReadOwnPermission = createPermission({\n name: 'kuadrant.apikey.read.own',\n attributes: { action: 'read' },\n});\n\nexport const kuadrantApiKeyReadAllPermission = createPermission({\n name: 'kuadrant.apikey.read.all',\n attributes: { action: 'read' },\n});\n\nexport const kuadrantApiKeyUpdateOwnPermission = createPermission({\n name: 'kuadrant.apikey.update.own',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantApiKeyUpdateAllPermission = createPermission({\n name: 'kuadrant.apikey.update.all',\n attributes: { action: 'update' },\n});\n\nexport const kuadrantApiKeyDeleteOwnPermission = createPermission({\n name: 'kuadrant.apikey.delete.own',\n attributes: { action: 'delete' },\n});\n\nexport const kuadrantApiKeyDeleteAllPermission = createPermission({\n name: 'kuadrant.apikey.delete.all',\n attributes: { action: 'delete' },\n});\n\n// approval permission - separate from update.own which consumers use to edit pending requests\nexport const kuadrantApiKeyApprovePermission = createPermission({\n name: 'kuadrant.apikey.approve',\n attributes: { action: 'update' },\n});\n\n/**\n * All Kuadrant permissions as an array for easy iteration\n */\nexport const kuadrantPermissions = [\n kuadrantPlanPolicyCreatePermission,\n kuadrantPlanPolicyReadPermission,\n kuadrantPlanPolicyUpdatePermission,\n kuadrantPlanPolicyDeletePermission,\n kuadrantPlanPolicyListPermission,\n kuadrantApiProductCreatePermission,\n kuadrantApiProductReadOwnPermission,\n kuadrantApiProductReadAllPermission,\n kuadrantApiProductUpdateOwnPermission,\n kuadrantApiProductUpdateAllPermission,\n kuadrantApiProductDeleteOwnPermission,\n kuadrantApiProductDeleteAllPermission,\n kuadrantApiProductListPermission,\n kuadrantApiKeyCreatePermission,\n kuadrantApiKeyReadOwnPermission,\n kuadrantApiKeyReadAllPermission,\n kuadrantApiKeyUpdateOwnPermission,\n kuadrantApiKeyUpdateAllPermission,\n kuadrantApiKeyDeleteOwnPermission,\n kuadrantApiKeyDeleteAllPermission,\n kuadrantApiKeyApprovePermission,\n];\n"],"names":["createPermission"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ var backendPluginApi = require('@backstage/backend-plugin-api');
4
+ var router = require('./router.cjs.js');
5
+ var permissionsRouter = require('./permissions-router.cjs.js');
6
+
7
+ const kuadrantPlugin = backendPluginApi.createBackendPlugin({
8
+ pluginId: "kuadrant",
9
+ register(env) {
10
+ env.registerInit({
11
+ deps: {
12
+ httpAuth: backendPluginApi.coreServices.httpAuth,
13
+ userInfo: backendPluginApi.coreServices.userInfo,
14
+ httpRouter: backendPluginApi.coreServices.httpRouter,
15
+ config: backendPluginApi.coreServices.rootConfig,
16
+ permissions: backendPluginApi.coreServices.permissions
17
+ },
18
+ async init({ httpAuth, userInfo, httpRouter, config, permissions }) {
19
+ httpRouter.addAuthPolicy({
20
+ path: "/",
21
+ allow: "unauthenticated"
22
+ });
23
+ httpRouter.use(permissionsRouter.createKuadrantPermissionIntegrationRouter());
24
+ httpRouter.use(
25
+ await router.createRouter({
26
+ httpAuth,
27
+ userInfo,
28
+ config,
29
+ permissions
30
+ })
31
+ );
32
+ }
33
+ });
34
+ }
35
+ });
36
+
37
+ exports.kuadrantPlugin = kuadrantPlugin;
38
+ //# sourceMappingURL=plugin.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.cjs.js","sources":["../src/plugin.ts"],"sourcesContent":["import {\n coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { createRouter } from './router';\nimport { createKuadrantPermissionIntegrationRouter } from './permissions-router';\n\n/**\n * kuadrantPlugin backend plugin\n *\n * @public\n */\nexport const kuadrantPlugin = createBackendPlugin({\n pluginId: 'kuadrant',\n register(env) {\n // register http router\n env.registerInit({\n deps: {\n httpAuth: coreServices.httpAuth,\n userInfo: coreServices.userInfo,\n httpRouter: coreServices.httpRouter,\n config: coreServices.rootConfig,\n permissions: coreServices.permissions,\n },\n async init({ httpAuth, userInfo, httpRouter, config, permissions }) {\n // allow unauthenticated access at HTTP router level\n // authorization is enforced in the router via:\n // 1. group-based checks (isAdmin from platform-engineers group)\n // 2. permission framework checks (when credentials available)\n // this allows the app to work in development mode with guest auth\n // while still providing proper authorization\n httpRouter.addAuthPolicy({\n path: '/',\n allow: 'unauthenticated',\n });\n\n // register permission integration router for rbac discovery\n httpRouter.use(createKuadrantPermissionIntegrationRouter());\n\n // register main api router\n httpRouter.use(\n await createRouter({\n httpAuth,\n userInfo,\n config,\n permissions,\n }),\n );\n },\n });\n },\n});\n"],"names":["createBackendPlugin","coreServices","createKuadrantPermissionIntegrationRouter","createRouter"],"mappings":";;;;;;AAYO,MAAM,iBAAiBA,oCAAoB,CAAA;AAAA,EAChD,QAAU,EAAA,UAAA;AAAA,EACV,SAAS,GAAK,EAAA;AAEZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,UAAUC,6BAAa,CAAA,QAAA;AAAA,QACvB,UAAUA,6BAAa,CAAA,QAAA;AAAA,QACvB,YAAYA,6BAAa,CAAA,UAAA;AAAA,QACzB,QAAQA,6BAAa,CAAA,UAAA;AAAA,QACrB,aAAaA,6BAAa,CAAA;AAAA,OAC5B;AAAA,MACA,MAAM,KAAK,EAAE,QAAA,EAAU,UAAU,UAAY,EAAA,MAAA,EAAQ,aAAe,EAAA;AAOlE,QAAA,UAAA,CAAW,aAAc,CAAA;AAAA,UACvB,IAAM,EAAA,GAAA;AAAA,UACN,KAAO,EAAA;AAAA,SACR,CAAA;AAGD,QAAW,UAAA,CAAA,GAAA,CAAIC,6DAA2C,CAAA;AAG1D,QAAW,UAAA,CAAA,GAAA;AAAA,UACT,MAAMC,mBAAa,CAAA;AAAA,YACjB,QAAA;AAAA,YACA,QAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WACD;AAAA,SACH;AAAA;AACF,KACD,CAAA;AAAA;AAEL,CAAC;;;;"}
@@ -0,0 +1,139 @@
1
+ 'use strict';
2
+
3
+ var k8sClient = require('../k8s-client.cjs.js');
4
+
5
+ class APIProductEntityProvider {
6
+ k8sClient;
7
+ connection;
8
+ providerId = "kuadrant-apiproduct-provider";
9
+ constructor(config) {
10
+ console.log("apiproduct provider: constructor called");
11
+ this.k8sClient = new k8sClient.KuadrantK8sClient(config);
12
+ }
13
+ getProviderName() {
14
+ return this.providerId;
15
+ }
16
+ async connect(connection) {
17
+ console.log("apiproduct provider: connect called");
18
+ this.connection = connection;
19
+ console.log("apiproduct provider: starting initial sync");
20
+ await this.refresh();
21
+ console.log("apiproduct provider: scheduling periodic refresh every 30 seconds");
22
+ setInterval(async () => {
23
+ await this.refresh();
24
+ }, 30 * 1e3);
25
+ }
26
+ async refresh() {
27
+ console.log("apiproduct provider: refresh called");
28
+ if (!this.connection) {
29
+ console.log("apiproduct provider: no connection, skipping refresh");
30
+ return;
31
+ }
32
+ try {
33
+ console.log("apiproduct provider: fetching apiproducts from kubernetes");
34
+ const response = await this.k8sClient.listCustomResources(
35
+ "devportal.kuadrant.io",
36
+ "v1alpha1",
37
+ "apiproducts"
38
+ );
39
+ const apiProducts = response.items || [];
40
+ console.log(`apiproduct provider: found ${apiProducts.length} apiproducts`);
41
+ const publishedProducts = apiProducts.filter((product) => {
42
+ const publishStatus = product.spec.publishStatus || "Draft";
43
+ return publishStatus === "Published";
44
+ });
45
+ console.log(`apiproduct provider: filtered to ${publishedProducts.length} published apiproducts (${apiProducts.length - publishedProducts.length} drafts excluded)`);
46
+ const entities = publishedProducts.map((product) => this.transformToEntity(product)).filter((entity) => entity !== null);
47
+ console.log(`apiproduct provider: transformed ${entities.length} entities`);
48
+ console.log("apiproduct provider: submitting entities to catalog");
49
+ await this.connection.applyMutation({
50
+ type: "full",
51
+ entities: entities.map((entity) => ({
52
+ entity,
53
+ locationKey: `kuadrant-apiproduct:${entity.metadata.namespace}/${entity.metadata.name}`
54
+ }))
55
+ });
56
+ console.log(`apiproduct provider: synced ${entities.length} api products`);
57
+ } catch (error) {
58
+ console.error("error refreshing apiproduct entities:", error);
59
+ }
60
+ }
61
+ transformToEntity(product) {
62
+ const namespace = product.metadata.namespace || "default";
63
+ const name = product.metadata.name;
64
+ const displayName = product.spec.displayName || name;
65
+ const description = product.spec.description || `api product: ${displayName}`;
66
+ const lifecycle = product.metadata.labels?.lifecycle || "production";
67
+ const owner = product.metadata.annotations?.["backstage.io/owner"];
68
+ if (!owner) {
69
+ console.warn(`apiproduct ${namespace}/${name} has no backstage.io/owner annotation, skipping catalog sync`);
70
+ return null;
71
+ }
72
+ const tags = product.spec.tags || [];
73
+ const definition = product.status?.openapi?.raw ? `${product.status.openapi.raw}` : `# no openapi spec configured
74
+ openapi: 3.0.0
75
+ info:
76
+ title: ${displayName}
77
+ version: ${product.spec.version || "1.0.0"}
78
+ description: ${description}
79
+ `;
80
+ const authSchemes = product.status?.discoveredAuthScheme?.authentication || {};
81
+ const schemeObjects = Object.values(authSchemes);
82
+ const hasApiKey = schemeObjects.some(
83
+ (scheme) => scheme.hasOwnProperty("apiKey")
84
+ );
85
+ const entity = {
86
+ apiVersion: "backstage.io/v1alpha1",
87
+ kind: "API",
88
+ metadata: {
89
+ name: `${name}`,
90
+ namespace: "default",
91
+ title: displayName,
92
+ description,
93
+ annotations: {
94
+ "backstage.io/managed-by-location": `kuadrant:${namespace}/${name}`,
95
+ "backstage.io/managed-by-origin-location": `kuadrant:${namespace}/${name}`,
96
+ "backstage.io/orphan-strategy": "keep",
97
+ "kuadrant.io/namespace": namespace,
98
+ "kuadrant.io/apiproduct": name,
99
+ "kuadrant.io/auth-apikey": hasApiKey.toString(),
100
+ // add httproute annotation if we can infer it (usually same as apiproduct name without -api suffix)
101
+ "kuadrant.io/httproute": name.endsWith("-api") ? name.slice(0, -4) : name,
102
+ ...product.spec.documentation?.openAPISpecURL && {
103
+ "kuadrant.io/openapi-spec-url": product.spec.documentation.openAPISpecURL
104
+ },
105
+ ...product.spec.documentation?.docsURL && {
106
+ "kuadrant.io/docs-url": product.spec.documentation.docsURL
107
+ },
108
+ ...product.spec.documentation?.gitRepository && {
109
+ "backstage.io/source-location": `url:${product.spec.documentation.gitRepository}`
110
+ },
111
+ ...product.spec.documentation?.techdocsRef && {
112
+ "backstage.io/techdocs-ref": product.spec.documentation.techdocsRef
113
+ },
114
+ ...product.spec.contact?.email && {
115
+ "kuadrant.io/contact-email": product.spec.contact.email
116
+ },
117
+ ...product.spec.contact?.slack && {
118
+ "kuadrant.io/contact-slack": product.spec.contact.slack
119
+ }
120
+ },
121
+ tags: [...tags, "kuadrant", "apiproduct"],
122
+ labels: {
123
+ "kuadrant.io/synced": "true",
124
+ ...product.metadata.labels || {}
125
+ }
126
+ },
127
+ spec: {
128
+ type: "openapi",
129
+ lifecycle,
130
+ owner,
131
+ definition
132
+ }
133
+ };
134
+ return entity;
135
+ }
136
+ }
137
+
138
+ exports.APIProductEntityProvider = APIProductEntityProvider;
139
+ //# sourceMappingURL=APIProductEntityProvider.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"APIProductEntityProvider.cjs.js","sources":["../../src/providers/APIProductEntityProvider.ts"],"sourcesContent":["import { ApiEntity } from '@backstage/catalog-model';\nimport { EntityProvider, EntityProviderConnection } from '@backstage/plugin-catalog-node';\nimport { RootConfigService } from '@backstage/backend-plugin-api';\nimport { KuadrantK8sClient } from '../k8s-client';\n\ninterface APIProduct {\n apiVersion: string;\n kind: string;\n metadata: {\n name: string;\n namespace: string;\n uid: string;\n resourceVersion: string;\n creationTimestamp: string;\n annotations?: Record<string, string>;\n labels?: Record<string, string>;\n };\n spec: {\n displayName: string;\n description?: string;\n version?: string;\n tags?: string[];\n targetRef: {\n group: string;\n kind: string;\n name: string;\n };\n approvalMode: 'automatic' | 'manual';\n publishStatus: 'Draft' | 'Published';\n documentation?: {\n openAPISpecURL?: string;\n docsURL?: string;\n gitRepository?: string;\n techdocsRef?: string;\n };\n contact?: {\n team?: string;\n email?: string;\n slack?: string;\n };\n };\n status?: {\n discoveredPlans?: Array<{\n tier: string;\n limits?: any;\n }>;\n openapi?: {\n raw?: string;\n lastSyncTime?: string;\n };\n discoveredAuthScheme?: any;\n oidcDiscovery?: {\n tokenEndpoint: string;\n };\n };\n}\n\nexport class APIProductEntityProvider implements EntityProvider {\n private readonly k8sClient: KuadrantK8sClient;\n private connection?: EntityProviderConnection;\n private readonly providerId = 'kuadrant-apiproduct-provider';\n\n constructor(config: RootConfigService) {\n console.log('apiproduct provider: constructor called');\n this.k8sClient = new KuadrantK8sClient(config);\n }\n\n getProviderName(): string {\n return this.providerId;\n }\n\n async connect(connection: EntityProviderConnection): Promise<void> {\n console.log('apiproduct provider: connect called');\n this.connection = connection;\n\n console.log('apiproduct provider: starting initial sync');\n // initial full sync\n await this.refresh();\n\n // schedule periodic refresh (every 30 seconds for development)\n // note: in production, consider 5-10 minutes to reduce api load\n console.log('apiproduct provider: scheduling periodic refresh every 30 seconds');\n setInterval(async () => {\n await this.refresh();\n }, 30 * 1000);\n }\n\n public async refresh(): Promise<void> {\n console.log('apiproduct provider: refresh called');\n if (!this.connection) {\n console.log('apiproduct provider: no connection, skipping refresh');\n return;\n }\n\n try {\n console.log('apiproduct provider: fetching apiproducts from kubernetes');\n // fetch all apiproducts from kubernetes\n const response = await this.k8sClient.listCustomResources(\n 'devportal.kuadrant.io',\n 'v1alpha1',\n 'apiproducts'\n );\n\n const apiProducts = (response.items || []) as APIProduct[];\n console.log(`apiproduct provider: found ${apiProducts.length} apiproducts`);\n\n // filter out Draft API products - only include Published ones\n const publishedProducts = apiProducts.filter(product => {\n const publishStatus = product.spec.publishStatus || 'Draft'; // default to Draft if not specified\n return publishStatus === 'Published';\n });\n console.log(`apiproduct provider: filtered to ${publishedProducts.length} published apiproducts (${apiProducts.length - publishedProducts.length} drafts excluded)`);\n\n // transform apiproducts to backstage api entities\n const entities = publishedProducts\n .map(product => this.transformToEntity(product))\n .filter((entity): entity is ApiEntity => entity !== null);\n console.log(`apiproduct provider: transformed ${entities.length} entities`);\n\n // submit entities to catalog\n console.log('apiproduct provider: submitting entities to catalog');\n await this.connection.applyMutation({\n type: 'full',\n entities: entities.map(entity => ({\n entity,\n locationKey: `kuadrant-apiproduct:${entity.metadata.namespace}/${entity.metadata.name}`,\n })),\n });\n\n console.log(`apiproduct provider: synced ${entities.length} api products`);\n } catch (error) {\n console.error('error refreshing apiproduct entities:', error);\n }\n }\n\n private transformToEntity(product: APIProduct): ApiEntity | null {\n const namespace = product.metadata.namespace || 'default';\n const name = product.metadata.name;\n const displayName = product.spec.displayName || name;\n const description = product.spec.description || `api product: ${displayName}`;\n\n // determine lifecycle from labels or default to production\n const lifecycle = product.metadata.labels?.lifecycle || 'production';\n\n // owner must be set via backstage ownership annotation\n // if missing, skip this apiproduct (created outside backstage or invalid)\n const owner = product.metadata.annotations?.['backstage.io/owner'];\n if (!owner) {\n console.warn(`apiproduct ${namespace}/${name} has no backstage.io/owner annotation, skipping catalog sync`);\n return null;\n }\n\n // build tags from product tags\n const tags = product.spec.tags || [];\n\n // OpenAPI spec URL\n const definition = product.status?.openapi?.raw ? `${product.status.openapi.raw}`\n : `# no openapi spec configured\n openapi: 3.0.0\n info:\n title: ${displayName}\n version: ${product.spec.version || '1.0.0'}\n description: ${description}\n `;\n\n // Check if entity has API Key auth scheme\n const authSchemes = product.status?.discoveredAuthScheme?.authentication || {};\n const schemeObjects = Object.values(authSchemes);\n const hasApiKey = schemeObjects.some((scheme: any) =>\n scheme.hasOwnProperty(\"apiKey\"),\n );\n // create entity with proper backstage structure\n const entity: ApiEntity = {\n apiVersion: 'backstage.io/v1alpha1',\n kind: 'API',\n metadata: {\n name: `${name}`,\n namespace: 'default',\n title: displayName,\n description,\n annotations: {\n 'backstage.io/managed-by-location': `kuadrant:${namespace}/${name}`,\n 'backstage.io/managed-by-origin-location': `kuadrant:${namespace}/${name}`,\n 'backstage.io/orphan-strategy': 'keep',\n 'kuadrant.io/namespace': namespace,\n 'kuadrant.io/apiproduct': name,\n 'kuadrant.io/auth-apikey': hasApiKey.toString(),\n // add httproute annotation if we can infer it (usually same as apiproduct name without -api suffix)\n 'kuadrant.io/httproute': name.endsWith('-api') ? name.slice(0, -4) : name,\n ...(product.spec.documentation?.openAPISpecURL && {\n 'kuadrant.io/openapi-spec-url': product.spec.documentation.openAPISpecURL,\n }),\n ...(product.spec.documentation?.docsURL && {\n 'kuadrant.io/docs-url': product.spec.documentation.docsURL,\n }),\n ...(product.spec.documentation?.gitRepository && {\n 'backstage.io/source-location': `url:${product.spec.documentation.gitRepository}`,\n }),\n ...(product.spec.documentation?.techdocsRef && {\n 'backstage.io/techdocs-ref': product.spec.documentation.techdocsRef,\n }),\n ...(product.spec.contact?.email && {\n 'kuadrant.io/contact-email': product.spec.contact.email,\n }),\n ...(product.spec.contact?.slack && {\n 'kuadrant.io/contact-slack': product.spec.contact.slack,\n }),\n },\n tags: [...tags, 'kuadrant', 'apiproduct'],\n labels: {\n 'kuadrant.io/synced': 'true',\n ...(product.metadata.labels || {}),\n },\n },\n spec: {\n type: 'openapi',\n lifecycle,\n owner,\n definition: definition,\n },\n };\n\n return entity;\n }\n}\n"],"names":["KuadrantK8sClient"],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var backendPluginApi = require('@backstage/backend-plugin-api');
6
+ var pluginRbacNode = require('@backstage-community/plugin-rbac-node');
7
+
8
+ const kuadrantRbacModule = backendPluginApi.createBackendModule({
9
+ pluginId: "permission",
10
+ moduleId: "kuadrant-rbac-provider",
11
+ register(env) {
12
+ env.registerInit({
13
+ deps: {
14
+ pluginIdProvider: pluginRbacNode.pluginIdProviderExtensionPoint
15
+ },
16
+ async init({ pluginIdProvider }) {
17
+ pluginIdProvider.addPluginIdProvider({
18
+ getPluginIds: () => ["kuadrant"]
19
+ });
20
+ }
21
+ });
22
+ }
23
+ });
24
+
25
+ exports.default = kuadrantRbacModule;
26
+ exports.kuadrantRbacModule = kuadrantRbacModule;
27
+ //# sourceMappingURL=rbac-module.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rbac-module.cjs.js","sources":["../src/rbac-module.ts"],"sourcesContent":["import { createBackendModule } from '@backstage/backend-plugin-api';\nimport { pluginIdProviderExtensionPoint } from '@backstage-community/plugin-rbac-node';\n\n/**\n * backend module that registers kuadrant plugin id with rbac\n * this makes kuadrant permissions discoverable in the rbac ui\n *\n * @public\n */\nexport const kuadrantRbacModule = createBackendModule({\n pluginId: 'permission',\n moduleId: 'kuadrant-rbac-provider',\n register(env) {\n env.registerInit({\n deps: {\n pluginIdProvider: pluginIdProviderExtensionPoint,\n },\n async init({ pluginIdProvider }) {\n pluginIdProvider.addPluginIdProvider({\n getPluginIds: () => ['kuadrant'],\n });\n },\n });\n },\n});\n\nexport default kuadrantRbacModule;\n"],"names":["createBackendModule","pluginIdProviderExtensionPoint"],"mappings":";;;;;;;AASO,MAAM,qBAAqBA,oCAAoB,CAAA;AAAA,EACpD,QAAU,EAAA,YAAA;AAAA,EACV,QAAU,EAAA,wBAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,gBAAkB,EAAAC;AAAA,OACpB;AAAA,MACA,MAAM,IAAA,CAAK,EAAE,gBAAA,EAAoB,EAAA;AAC/B,QAAA,gBAAA,CAAiB,mBAAoB,CAAA;AAAA,UACnC,YAAA,EAAc,MAAM,CAAC,UAAU;AAAA,SAChC,CAAA;AAAA;AACH,KACD,CAAA;AAAA;AAEL,CAAC;;;;;"}