@kyverno/backstage-plugin-policy-reporter-backend 2.5.0 → 2.7.0
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/CHANGELOG.md +45 -0
- package/config.schema.json +19 -0
- package/dist/index.d.ts +190 -4
- package/dist/plugin.cjs.js +8 -2
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/schema/openapi/generated/router.cjs.js +1108 -11
- package/dist/schema/openapi/generated/router.cjs.js.map +1 -1
- package/dist/service/policyReporterService.cjs.js +188 -0
- package/dist/service/policyReporterService.cjs.js.map +1 -0
- package/dist/service/router.cjs.js +139 -78
- package/dist/service/router.cjs.js.map +1 -1
- package/package.json +23 -17
|
@@ -1,104 +1,165 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var express = require('express');
|
|
4
|
-
var backstagePluginPolicyReporterCommon = require('@kyverno/backstage-plugin-policy-reporter-common');
|
|
5
4
|
var rootHttpRouter = require('@backstage/backend-defaults/rootHttpRouter');
|
|
6
5
|
var router = require('../schema/openapi/generated/router.cjs.js');
|
|
7
|
-
var
|
|
6
|
+
var errors = require('@backstage/errors');
|
|
8
7
|
|
|
9
8
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
10
9
|
|
|
11
|
-
function _interopNamespaceCompat(e) {
|
|
12
|
-
if (e && typeof e === 'object' && 'default' in e) return e;
|
|
13
|
-
var n = Object.create(null);
|
|
14
|
-
if (e) {
|
|
15
|
-
Object.keys(e).forEach(function (k) {
|
|
16
|
-
if (k !== 'default') {
|
|
17
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
18
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
19
|
-
enumerable: true,
|
|
20
|
-
get: function () { return e[k]; }
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
n.default = e;
|
|
26
|
-
return Object.freeze(n);
|
|
27
|
-
}
|
|
28
|
-
|
|
29
10
|
var express__default = /*#__PURE__*/_interopDefaultCompat(express);
|
|
30
|
-
var parser__namespace = /*#__PURE__*/_interopNamespaceCompat(parser);
|
|
31
11
|
|
|
32
|
-
|
|
12
|
+
function handlePolicyReporterError(error, response) {
|
|
13
|
+
if (error instanceof errors.NotFoundError) {
|
|
14
|
+
return response.status(404).json({ error: error.message });
|
|
15
|
+
}
|
|
16
|
+
if (error instanceof errors.InputError) {
|
|
17
|
+
return response.status(400).json({ error: error.message });
|
|
18
|
+
}
|
|
19
|
+
if (error instanceof errors.ServiceUnavailableError) {
|
|
20
|
+
return response.status(503).json({ error: error.message });
|
|
21
|
+
}
|
|
22
|
+
if (error instanceof errors.ForwardedError) {
|
|
23
|
+
return response.status(502).json({ error: error.message });
|
|
24
|
+
}
|
|
25
|
+
return response.status(500).json({ error: "Unknown error" });
|
|
26
|
+
}
|
|
33
27
|
async function createRouter(options) {
|
|
34
|
-
const { logger, config,
|
|
28
|
+
const { logger, config, policyReporterService } = options;
|
|
35
29
|
const router$1 = await router.createOpenApiRouter();
|
|
36
30
|
router$1.use(express__default.default.json());
|
|
37
31
|
router$1.get("/namespaced-resources/results", async (request, response) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return response.status(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
headers: {
|
|
56
|
-
"Content-Type": "application/json"
|
|
57
|
-
},
|
|
58
|
-
method: "GET"
|
|
59
|
-
}
|
|
60
|
-
);
|
|
61
|
-
if (!policyResponse.ok) {
|
|
62
|
-
return response.status(500).json({
|
|
63
|
-
error: `Failed to fetch policies ${policyResponse.status} ${policyResponse.statusText}`
|
|
32
|
+
try {
|
|
33
|
+
const { environment, ...query } = request.query;
|
|
34
|
+
const result = await policyReporterService.getNamespacedResourceResults({
|
|
35
|
+
entityRef: decodeURIComponent(environment),
|
|
36
|
+
query
|
|
37
|
+
});
|
|
38
|
+
return response.status(200).json(result);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
return handlePolicyReporterError(error, response);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
router$1.get("/v1/cluster-resources/results", async (request, response) => {
|
|
44
|
+
try {
|
|
45
|
+
const { environment, ...query } = request.query;
|
|
46
|
+
const result = await policyReporterService.getClusterResourceResults({
|
|
47
|
+
entityRef: decodeURIComponent(environment),
|
|
48
|
+
query
|
|
64
49
|
});
|
|
50
|
+
return response.status(200).json(result);
|
|
51
|
+
} catch (error) {
|
|
52
|
+
return handlePolicyReporterError(error, response);
|
|
65
53
|
}
|
|
66
|
-
const result = await policyResponse.json();
|
|
67
|
-
return response.status(200).json(result);
|
|
68
54
|
});
|
|
69
55
|
router$1.get("/v1/namespaces", async (request, response) => {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return response.status(
|
|
56
|
+
try {
|
|
57
|
+
const { environment, ...query } = request.query;
|
|
58
|
+
const result = await policyReporterService.getNamespaces({
|
|
59
|
+
entityRef: decodeURIComponent(environment),
|
|
60
|
+
query
|
|
61
|
+
});
|
|
62
|
+
return response.status(200).json(result);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
return handlePolicyReporterError(error, response);
|
|
77
65
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
66
|
+
});
|
|
67
|
+
router$1.get("/v1/namespaced-resources/sources", async (request, response) => {
|
|
68
|
+
try {
|
|
69
|
+
const { environment } = request.query;
|
|
70
|
+
const result = await policyReporterService.getSources({
|
|
71
|
+
entityRef: decodeURIComponent(environment)
|
|
72
|
+
});
|
|
73
|
+
return response.status(200).json(result);
|
|
74
|
+
} catch (error) {
|
|
75
|
+
return handlePolicyReporterError(error, response);
|
|
81
76
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
77
|
+
});
|
|
78
|
+
router$1.get("/v1/namespaced-resources/kinds", async (request, response) => {
|
|
79
|
+
try {
|
|
80
|
+
const { environment, ...query } = request.query;
|
|
81
|
+
const result = await policyReporterService.getKinds({
|
|
82
|
+
entityRef: decodeURIComponent(environment),
|
|
83
|
+
query
|
|
84
|
+
});
|
|
85
|
+
return response.status(200).json(result);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
return handlePolicyReporterError(error, response);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
router$1.get(
|
|
91
|
+
"/v1/namespaced-resources/categories",
|
|
92
|
+
async (request, response) => {
|
|
93
|
+
try {
|
|
94
|
+
const { environment, ...query } = request.query;
|
|
95
|
+
const result = await policyReporterService.getCategories({
|
|
96
|
+
entityRef: decodeURIComponent(environment),
|
|
97
|
+
query
|
|
98
|
+
});
|
|
99
|
+
return response.status(200).json(result);
|
|
100
|
+
} catch (error) {
|
|
101
|
+
return handlePolicyReporterError(error, response);
|
|
93
102
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
103
|
+
}
|
|
104
|
+
);
|
|
105
|
+
router$1.get("/v1/namespaced-resources/policies", async (request, response) => {
|
|
106
|
+
try {
|
|
107
|
+
const { environment, ...query } = request.query;
|
|
108
|
+
const result = await policyReporterService.getPolicies({
|
|
109
|
+
entityRef: decodeURIComponent(environment),
|
|
110
|
+
query
|
|
111
|
+
});
|
|
112
|
+
return response.status(200).json(result);
|
|
113
|
+
} catch (error) {
|
|
114
|
+
return handlePolicyReporterError(error, response);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
router$1.get("/v1/cluster-resources/sources", async (request, response) => {
|
|
118
|
+
try {
|
|
119
|
+
const { environment } = request.query;
|
|
120
|
+
const result = await policyReporterService.getClusterSources({
|
|
121
|
+
entityRef: decodeURIComponent(environment)
|
|
122
|
+
});
|
|
123
|
+
return response.status(200).json(result);
|
|
124
|
+
} catch (error) {
|
|
125
|
+
return handlePolicyReporterError(error, response);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
router$1.get("/v1/cluster-resources/kinds", async (request, response) => {
|
|
129
|
+
try {
|
|
130
|
+
const { environment, ...query } = request.query;
|
|
131
|
+
const result = await policyReporterService.getClusterKinds({
|
|
132
|
+
entityRef: decodeURIComponent(environment),
|
|
133
|
+
query
|
|
134
|
+
});
|
|
135
|
+
return response.status(200).json(result);
|
|
136
|
+
} catch (error) {
|
|
137
|
+
return handlePolicyReporterError(error, response);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
router$1.get("/v1/cluster-resources/categories", async (request, response) => {
|
|
141
|
+
try {
|
|
142
|
+
const { environment, ...query } = request.query;
|
|
143
|
+
const result = await policyReporterService.getClusterCategories({
|
|
144
|
+
entityRef: decodeURIComponent(environment),
|
|
145
|
+
query
|
|
146
|
+
});
|
|
147
|
+
return response.status(200).json(result);
|
|
148
|
+
} catch (error) {
|
|
149
|
+
return handlePolicyReporterError(error, response);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
router$1.get("/v1/cluster-resources/policies", async (request, response) => {
|
|
153
|
+
try {
|
|
154
|
+
const { environment, ...query } = request.query;
|
|
155
|
+
const result = await policyReporterService.getClusterPolicies({
|
|
156
|
+
entityRef: decodeURIComponent(environment),
|
|
157
|
+
query
|
|
98
158
|
});
|
|
159
|
+
return response.status(200).json(result);
|
|
160
|
+
} catch (error) {
|
|
161
|
+
return handlePolicyReporterError(error, response);
|
|
99
162
|
}
|
|
100
|
-
const result = await policyResponse.json();
|
|
101
|
-
return response.status(200).json(result);
|
|
102
163
|
});
|
|
103
164
|
const middleware = rootHttpRouter.MiddlewareFactory.create({ logger, config });
|
|
104
165
|
router$1.use(middleware.error());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["import { AuthService, RootConfigService } from '@backstage/backend-plugin-api';\nimport { LoggerService } from '@backstage/backend-plugin-api';\nimport express from 'express';\nimport { KYVERNO_ENDPOINT_ANNOTATION } from '@kyverno/backstage-plugin-policy-reporter-common';\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport { CatalogService } from '@backstage/plugin-catalog-node';\nimport { createOpenApiRouter } from '../schema/openapi';\n\nimport * as parser from 'uri-template';\n\nexport interface RouterOptions {\n logger: LoggerService;\n config: RootConfigService;\n catalogService: CatalogService;\n authService: AuthService;\n}\n\nconst ensureTrailingSlash = (url: string) =>\n url.endsWith('/') ? url : `${url}/`;\n\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { logger, config, catalogService, authService } = options;\n\n const router = await createOpenApiRouter();\n router.use(express.json());\n\n router.get('/namespaced-resources/results', async (request, response) => {\n // Get entityRef from query.\n const entityRef = decodeURIComponent(request.query.environment);\n\n const credentials = await authService.getOwnServiceCredentials();\n\n const entity = await catalogService.getEntityByRef(entityRef, {\n credentials,\n });\n\n if (!entity)\n return response.status(400).json({ error: 'Invalid entityRef' });\n\n const kyvernoEndpoint =\n entity?.metadata.annotations?.[KYVERNO_ENDPOINT_ANNOTATION];\n\n if (!kyvernoEndpoint)\n return response\n .status(400)\n .json({ error: `Entity missing 'kyverno.io/endpoint' annotation` });\n\n const uriTemplate = `v1/namespaced-resources/results{?sources*,namespaces*,kinds*,resources*,categories*,policies*,status*,severities*,search,labels*,page,offset,direction}`;\n\n const uri = parser.parse(uriTemplate).expand({\n ...request.query,\n });\n\n const policyResponse = await fetch(\n `${ensureTrailingSlash(kyvernoEndpoint)}${uri}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n },\n );\n\n if (!policyResponse.ok) {\n return response.status(500).json({\n error: `Failed to fetch policies ${policyResponse.status} ${policyResponse.statusText}`,\n });\n }\n\n const result = await policyResponse.json();\n\n return response.status(200).json(result);\n });\n\n router.get('/v1/namespaces', async (request, response) => {\n // Get entityRef from query.\n const entityRef = decodeURIComponent(request.query.environment);\n\n const credentials = await authService.getOwnServiceCredentials();\n const entity = await catalogService.getEntityByRef(entityRef, {\n credentials,\n });\n\n if (!entity) {\n return response.status(400).json({ error: 'Invalid entityRef' });\n }\n\n const kyvernoEndpoint =\n entity?.metadata.annotations?.[KYVERNO_ENDPOINT_ANNOTATION];\n\n if (!kyvernoEndpoint) {\n return response\n .status(400)\n .json({ error: `Entity missing 'kyverno.io/endpoint' annotation` });\n }\n\n const uriTemplate = `v1/namespaces{?sources*,categories*,policies*}`;\n\n const uri = parser.parse(uriTemplate).expand({\n ...request.query,\n });\n\n const policyResponse = await fetch(\n `${ensureTrailingSlash(kyvernoEndpoint)}${uri}`,\n {\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'GET',\n },\n );\n\n if (!policyResponse.ok) {\n return response.status(500).json({\n error: `Failed to fetch namespaces: ${policyResponse.statusText}`,\n });\n }\n\n const result = await policyResponse.json();\n return response.status(200).json(result);\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n return router;\n}\n"],"names":["router","createOpenApiRouter","express","KYVERNO_ENDPOINT_ANNOTATION","parser","MiddlewareFactory"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["import { RootConfigService } from '@backstage/backend-plugin-api';\nimport { LoggerService } from '@backstage/backend-plugin-api';\nimport express from 'express';\nimport { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport { createOpenApiRouter } from '../schema/openapi';\nimport { PolicyReporterApi } from './policyReporterService';\nimport {\n ForwardedError,\n InputError,\n NotFoundError,\n ServiceUnavailableError,\n} from '@backstage/errors';\n\nexport interface RouterOptions {\n logger: LoggerService;\n config: RootConfigService;\n policyReporterService: PolicyReporterApi;\n}\n\nfunction handlePolicyReporterError(\n error: unknown,\n response: express.Response,\n): express.Response {\n if (error instanceof NotFoundError) {\n return response.status(404).json({ error: error.message });\n }\n\n if (error instanceof InputError) {\n return response.status(400).json({ error: error.message });\n }\n\n if (error instanceof ServiceUnavailableError) {\n return response.status(503).json({ error: error.message });\n }\n\n if (error instanceof ForwardedError) {\n return response.status(502).json({ error: error.message });\n }\n\n return response.status(500).json({ error: 'Unknown error' });\n}\n\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { logger, config, policyReporterService } = options;\n\n const router = await createOpenApiRouter();\n router.use(express.json());\n\n router.get('/namespaced-resources/results', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getNamespacedResourceResults({\n entityRef: decodeURIComponent(environment),\n query: query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/results', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getClusterResourceResults({\n entityRef: decodeURIComponent(environment),\n query: query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/namespaces', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getNamespaces({\n entityRef: decodeURIComponent(environment),\n query: query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/namespaced-resources/sources', async (request, response) => {\n try {\n const { environment } = request.query;\n\n const result = await policyReporterService.getSources({\n entityRef: decodeURIComponent(environment),\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/namespaced-resources/kinds', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getKinds({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get(\n '/v1/namespaced-resources/categories',\n async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getCategories({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n },\n );\n\n router.get('/v1/namespaced-resources/policies', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getPolicies({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/sources', async (request, response) => {\n try {\n const { environment } = request.query;\n\n const result = await policyReporterService.getClusterSources({\n entityRef: decodeURIComponent(environment),\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/kinds', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getClusterKinds({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/categories', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getClusterCategories({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n router.get('/v1/cluster-resources/policies', async (request, response) => {\n try {\n const { environment, ...query } = request.query;\n\n const result = await policyReporterService.getClusterPolicies({\n entityRef: decodeURIComponent(environment),\n query,\n });\n\n return response.status(200).json(result);\n } catch (error) {\n return handlePolicyReporterError(error, response);\n }\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n return router;\n}\n"],"names":["NotFoundError","InputError","ServiceUnavailableError","ForwardedError","router","createOpenApiRouter","express","MiddlewareFactory"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kyverno/backstage-plugin-policy-reporter-backend",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"main": "dist/index.cjs.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -24,7 +24,8 @@
|
|
|
24
24
|
"publishConfig": {
|
|
25
25
|
"access": "public",
|
|
26
26
|
"main": "dist/index.cjs.js",
|
|
27
|
-
"types": "dist/index.d.ts"
|
|
27
|
+
"types": "dist/index.d.ts",
|
|
28
|
+
"provenance": true
|
|
28
29
|
},
|
|
29
30
|
"repository": {
|
|
30
31
|
"type": "git",
|
|
@@ -42,13 +43,15 @@
|
|
|
42
43
|
"generate": "backstage-repo-tools package schema openapi generate --server --client-package plugins/policy-reporter-common"
|
|
43
44
|
},
|
|
44
45
|
"dependencies": {
|
|
45
|
-
"@backstage/backend-defaults": "^0.
|
|
46
|
-
"@backstage/backend-openapi-utils": "^0.
|
|
47
|
-
"@backstage/backend-plugin-api": "^1.
|
|
48
|
-
"@backstage/config": "^1.3.
|
|
49
|
-
"@backstage/
|
|
50
|
-
"@backstage/
|
|
51
|
-
"@
|
|
46
|
+
"@backstage/backend-defaults": "^0.18.0",
|
|
47
|
+
"@backstage/backend-openapi-utils": "^0.7.2",
|
|
48
|
+
"@backstage/backend-plugin-api": "^1.10.1",
|
|
49
|
+
"@backstage/config": "^1.3.9",
|
|
50
|
+
"@backstage/errors": "^1.3.1",
|
|
51
|
+
"@backstage/plugin-catalog-node": "^2.2.5",
|
|
52
|
+
"@backstage/repo-tools": "^0.19.1",
|
|
53
|
+
"@backstage/types": "^1.2.2",
|
|
54
|
+
"@kyverno/backstage-plugin-policy-reporter-common": "^2.6.0",
|
|
52
55
|
"@types/express": "*",
|
|
53
56
|
"express": "^4.17.1",
|
|
54
57
|
"express-promise-router": "^4.1.0",
|
|
@@ -57,19 +60,21 @@
|
|
|
57
60
|
"yn": "^4.0.0"
|
|
58
61
|
},
|
|
59
62
|
"devDependencies": {
|
|
60
|
-
"@backstage/backend-test-utils": "^1.11.
|
|
61
|
-
"@backstage/catalog-model": "^1.
|
|
62
|
-
"@backstage/cli": "^0.36.
|
|
63
|
-
"@backstage/plugin-auth-backend": "^0.
|
|
64
|
-
"@backstage/plugin-auth-backend-module-guest-provider": "^0.2.
|
|
65
|
-
"@backstage/plugin-catalog-backend": "^
|
|
63
|
+
"@backstage/backend-test-utils": "^1.11.7",
|
|
64
|
+
"@backstage/catalog-model": "^1.10.1",
|
|
65
|
+
"@backstage/cli": "^0.36.6",
|
|
66
|
+
"@backstage/plugin-auth-backend": "^0.30.1",
|
|
67
|
+
"@backstage/plugin-auth-backend-module-guest-provider": "^0.2.23",
|
|
68
|
+
"@backstage/plugin-catalog-backend": "^4.0.0",
|
|
66
69
|
"@types/supertest": "^2.0.12",
|
|
67
70
|
"better-sqlite3": "^9.0.0",
|
|
68
71
|
"msw": "^1.0.0",
|
|
69
72
|
"supertest": "^6.2.4"
|
|
70
73
|
},
|
|
74
|
+
"configSchema": "config.schema.json",
|
|
71
75
|
"files": [
|
|
72
|
-
"dist"
|
|
76
|
+
"dist",
|
|
77
|
+
"config.schema.json"
|
|
73
78
|
],
|
|
74
79
|
"typesVersions": {
|
|
75
80
|
"*": {
|
|
@@ -77,5 +82,6 @@
|
|
|
77
82
|
"package.json"
|
|
78
83
|
]
|
|
79
84
|
}
|
|
80
|
-
}
|
|
85
|
+
},
|
|
86
|
+
"provenance": true
|
|
81
87
|
}
|