@backstage/plugin-catalog-backend 2.0.1-next.1 → 2.1.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 +46 -0
- package/dist/actions/createGetCatalogEntityAction.cjs.js +62 -0
- package/dist/actions/createGetCatalogEntityAction.cjs.js.map +1 -0
- package/dist/alpha.d.ts +2 -0
- package/dist/permissions/rules/hasLabel.cjs.js +8 -4
- package/dist/permissions/rules/hasLabel.cjs.js.map +1 -1
- package/dist/schema/openapi/generated/router.cjs.js.map +1 -1
- package/dist/service/CatalogPlugin.cjs.js +12 -1
- package/dist/service/CatalogPlugin.cjs.js.map +1 -1
- package/package.json +20 -20
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,51 @@
|
|
|
1
1
|
# @backstage/plugin-catalog-backend
|
|
2
2
|
|
|
3
|
+
## 2.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 2e7adf0: Implement the action `get-catalog-entity` with the `ActionsRegistry`
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- 2cac8b0: You can now specify an optional value when applying the `HAS_LABEL` permission rule, similar to the `HAS_ANNOTATION` permission rule.
|
|
12
|
+
- c83cd8b: Fixed some circular or otherwise unclear imports
|
|
13
|
+
- 4654a78: Update `refresh_state_references.id` to be a big int
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
- @backstage/catalog-client@1.10.1
|
|
16
|
+
- @backstage/plugin-catalog-node@1.17.1
|
|
17
|
+
- @backstage/backend-plugin-api@1.4.0
|
|
18
|
+
- @backstage/backend-openapi-utils@0.5.4
|
|
19
|
+
- @backstage/catalog-model@1.7.4
|
|
20
|
+
- @backstage/config@1.3.2
|
|
21
|
+
- @backstage/errors@1.2.7
|
|
22
|
+
- @backstage/integration@1.17.0
|
|
23
|
+
- @backstage/types@1.2.1
|
|
24
|
+
- @backstage/plugin-catalog-common@1.1.4
|
|
25
|
+
- @backstage/plugin-events-node@0.4.12
|
|
26
|
+
- @backstage/plugin-permission-common@0.9.0
|
|
27
|
+
- @backstage/plugin-permission-node@0.10.1
|
|
28
|
+
|
|
29
|
+
## 2.0.1-next.2
|
|
30
|
+
|
|
31
|
+
### Patch Changes
|
|
32
|
+
|
|
33
|
+
- 2cac8b0: You can now specify an optional value when applying the `HAS_LABEL` permission rule, similar to the `HAS_ANNOTATION` permission rule.
|
|
34
|
+
- Updated dependencies
|
|
35
|
+
- @backstage/backend-openapi-utils@0.5.4-next.1
|
|
36
|
+
- @backstage/backend-plugin-api@1.4.0-next.1
|
|
37
|
+
- @backstage/catalog-client@1.10.1-next.0
|
|
38
|
+
- @backstage/catalog-model@1.7.4
|
|
39
|
+
- @backstage/config@1.3.2
|
|
40
|
+
- @backstage/errors@1.2.7
|
|
41
|
+
- @backstage/integration@1.17.0
|
|
42
|
+
- @backstage/types@1.2.1
|
|
43
|
+
- @backstage/plugin-catalog-common@1.1.4
|
|
44
|
+
- @backstage/plugin-catalog-node@1.17.1-next.1
|
|
45
|
+
- @backstage/plugin-events-node@0.4.12-next.1
|
|
46
|
+
- @backstage/plugin-permission-common@0.9.0
|
|
47
|
+
- @backstage/plugin-permission-node@0.10.1-next.1
|
|
48
|
+
|
|
3
49
|
## 2.0.1-next.1
|
|
4
50
|
|
|
5
51
|
### Patch Changes
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var catalogModel = require('@backstage/catalog-model');
|
|
4
|
+
var errors = require('@backstage/errors');
|
|
5
|
+
|
|
6
|
+
const createGetCatalogEntityAction = ({
|
|
7
|
+
catalog,
|
|
8
|
+
actionsRegistry
|
|
9
|
+
}) => {
|
|
10
|
+
actionsRegistry.register({
|
|
11
|
+
name: "get-catalog-entity",
|
|
12
|
+
title: "Get Catalog Entity",
|
|
13
|
+
description: `
|
|
14
|
+
This allows you to get a single entity from the software catalog.
|
|
15
|
+
Each entity in the software catalog has a unique name, kind, and namespace. The default namespace is "default".
|
|
16
|
+
Each entity is identified by a unique entity reference, which is a string of the form "kind:namespace/name".
|
|
17
|
+
`,
|
|
18
|
+
schema: {
|
|
19
|
+
input: (z) => z.object({
|
|
20
|
+
kind: z.string().describe(
|
|
21
|
+
"The kind of the entity to query. If the kind is unknown it can be omitted."
|
|
22
|
+
).optional(),
|
|
23
|
+
namespace: z.string().describe(
|
|
24
|
+
"The namespace of the entity to query. If the namespace is unknown it can be omitted."
|
|
25
|
+
).optional(),
|
|
26
|
+
name: z.string().describe("The name of the entity to query")
|
|
27
|
+
}),
|
|
28
|
+
// TODO: is there a better way to do this?
|
|
29
|
+
output: (z) => z.object({}).passthrough()
|
|
30
|
+
},
|
|
31
|
+
action: async ({ input, credentials }) => {
|
|
32
|
+
const filter = { "metadata.name": input.name };
|
|
33
|
+
if (input.kind) {
|
|
34
|
+
filter.kind = input.kind;
|
|
35
|
+
}
|
|
36
|
+
if (input.namespace) {
|
|
37
|
+
filter["metadata.namespace"] = input.namespace;
|
|
38
|
+
}
|
|
39
|
+
const { items } = await catalog.queryEntities(
|
|
40
|
+
{ filter },
|
|
41
|
+
{
|
|
42
|
+
credentials
|
|
43
|
+
}
|
|
44
|
+
);
|
|
45
|
+
if (items.length === 0) {
|
|
46
|
+
throw new errors.InputError(`No entity found with name "${input.name}"`);
|
|
47
|
+
}
|
|
48
|
+
if (items.length > 1) {
|
|
49
|
+
throw new Error(
|
|
50
|
+
`Multiple entities found with name "${input.name}", please provide more specific filters. Entities found: ${items.map((item) => `"${catalogModel.stringifyEntityRef(item)}"`).join(", ")}`
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
const [entity] = items;
|
|
54
|
+
return {
|
|
55
|
+
output: entity
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
exports.createGetCatalogEntityAction = createGetCatalogEntityAction;
|
|
62
|
+
//# sourceMappingURL=createGetCatalogEntityAction.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createGetCatalogEntityAction.cjs.js","sources":["../../src/actions/createGetCatalogEntityAction.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ActionsRegistryService } from '@backstage/backend-plugin-api/alpha';\nimport { stringifyEntityRef } from '@backstage/catalog-model';\nimport { InputError } from '@backstage/errors';\nimport { CatalogService } from '@backstage/plugin-catalog-node';\n\nexport const createGetCatalogEntityAction = ({\n catalog,\n actionsRegistry,\n}: {\n catalog: CatalogService;\n actionsRegistry: ActionsRegistryService;\n}) => {\n actionsRegistry.register({\n name: 'get-catalog-entity',\n title: 'Get Catalog Entity',\n description: `\nThis allows you to get a single entity from the software catalog.\nEach entity in the software catalog has a unique name, kind, and namespace. The default namespace is \"default\".\nEach entity is identified by a unique entity reference, which is a string of the form \"kind:namespace/name\".\n `,\n schema: {\n input: z =>\n z.object({\n kind: z\n .string()\n .describe(\n 'The kind of the entity to query. If the kind is unknown it can be omitted.',\n )\n .optional(),\n namespace: z\n .string()\n .describe(\n 'The namespace of the entity to query. If the namespace is unknown it can be omitted.',\n )\n .optional(),\n name: z.string().describe('The name of the entity to query'),\n }),\n // TODO: is there a better way to do this?\n output: z => z.object({}).passthrough(),\n },\n action: async ({ input, credentials }) => {\n const filter: Record<string, string> = { 'metadata.name': input.name };\n\n if (input.kind) {\n filter.kind = input.kind;\n }\n\n if (input.namespace) {\n filter['metadata.namespace'] = input.namespace;\n }\n\n const { items } = await catalog.queryEntities(\n { filter },\n {\n credentials,\n },\n );\n\n if (items.length === 0) {\n throw new InputError(`No entity found with name \"${input.name}\"`);\n }\n\n if (items.length > 1) {\n throw new Error(\n `Multiple entities found with name \"${\n input.name\n }\", please provide more specific filters. Entities found: ${items\n .map(item => `\"${stringifyEntityRef(item)}\"`)\n .join(', ')}`,\n );\n }\n\n const [entity] = items;\n\n return {\n output: entity,\n };\n },\n });\n};\n"],"names":["InputError","stringifyEntityRef"],"mappings":";;;;;AAoBO,MAAM,+BAA+B,CAAC;AAAA,EAC3C,OAAA;AAAA,EACA;AACF,CAGM,KAAA;AACJ,EAAA,eAAA,CAAgB,QAAS,CAAA;AAAA,IACvB,IAAM,EAAA,oBAAA;AAAA,IACN,KAAO,EAAA,oBAAA;AAAA,IACP,WAAa,EAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAAA;AAAA,IAKb,MAAQ,EAAA;AAAA,MACN,KAAA,EAAO,CACL,CAAA,KAAA,CAAA,CAAE,MAAO,CAAA;AAAA,QACP,IAAA,EAAM,CACH,CAAA,MAAA,EACA,CAAA,QAAA;AAAA,UACC;AAAA,UAED,QAAS,EAAA;AAAA,QACZ,SAAA,EAAW,CACR,CAAA,MAAA,EACA,CAAA,QAAA;AAAA,UACC;AAAA,UAED,QAAS,EAAA;AAAA,QACZ,IAAM,EAAA,CAAA,CAAE,MAAO,EAAA,CAAE,SAAS,iCAAiC;AAAA,OAC5D,CAAA;AAAA;AAAA,MAEH,QAAQ,CAAK,CAAA,KAAA,CAAA,CAAE,OAAO,EAAE,EAAE,WAAY;AAAA,KACxC;AAAA,IACA,MAAQ,EAAA,OAAO,EAAE,KAAA,EAAO,aAAkB,KAAA;AACxC,MAAA,MAAM,MAAiC,GAAA,EAAE,eAAiB,EAAA,KAAA,CAAM,IAAK,EAAA;AAErE,MAAA,IAAI,MAAM,IAAM,EAAA;AACd,QAAA,MAAA,CAAO,OAAO,KAAM,CAAA,IAAA;AAAA;AAGtB,MAAA,IAAI,MAAM,SAAW,EAAA;AACnB,QAAO,MAAA,CAAA,oBAAoB,IAAI,KAAM,CAAA,SAAA;AAAA;AAGvC,MAAA,MAAM,EAAE,KAAA,EAAU,GAAA,MAAM,OAAQ,CAAA,aAAA;AAAA,QAC9B,EAAE,MAAO,EAAA;AAAA,QACT;AAAA,UACE;AAAA;AACF,OACF;AAEA,MAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,QAAA,MAAM,IAAIA,iBAAA,CAAW,CAA8B,2BAAA,EAAA,KAAA,CAAM,IAAI,CAAG,CAAA,CAAA,CAAA;AAAA;AAGlE,MAAI,IAAA,KAAA,CAAM,SAAS,CAAG,EAAA;AACpB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CACE,mCAAA,EAAA,KAAA,CAAM,IACR,CAAA,yDAAA,EAA4D,MACzD,GAAI,CAAA,CAAA,IAAA,KAAQ,CAAI,CAAA,EAAAC,+BAAA,CAAmB,IAAI,CAAC,CAAA,CAAA,CAAG,CAC3C,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AAAA;AAGF,MAAM,MAAA,CAAC,MAAM,CAAI,GAAA,KAAA;AAEjB,MAAO,OAAA;AAAA,QACL,MAAQ,EAAA;AAAA,OACV;AAAA;AACF,GACD,CAAA;AACH;;;;"}
|
package/dist/alpha.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ declare const catalogConditions: _backstage_plugin_permission_node.Conditions<{
|
|
|
20
20
|
}>;
|
|
21
21
|
hasLabel: _backstage_plugin_permission_node.PermissionRule<_backstage_catalog_model.Entity, _backstage_plugin_catalog_node.EntitiesSearchFilter, "catalog-entity", {
|
|
22
22
|
label: string;
|
|
23
|
+
value?: string | undefined;
|
|
23
24
|
}>;
|
|
24
25
|
hasMetadata: _backstage_plugin_permission_node.PermissionRule<_backstage_catalog_model.Entity, _backstage_plugin_catalog_node.EntitiesSearchFilter, "catalog-entity", {
|
|
25
26
|
key: string;
|
|
@@ -99,6 +100,7 @@ declare const permissionRules: {
|
|
|
99
100
|
}>;
|
|
100
101
|
hasLabel: _backstage_plugin_permission_node.PermissionRule<_backstage_catalog_model.Entity, _backstage_plugin_catalog_node.EntitiesSearchFilter, "catalog-entity", {
|
|
101
102
|
label: string;
|
|
103
|
+
value?: string | undefined;
|
|
102
104
|
}>;
|
|
103
105
|
hasMetadata: _backstage_plugin_permission_node.PermissionRule<_backstage_catalog_model.Entity, _backstage_plugin_catalog_node.EntitiesSearchFilter, "catalog-entity", {
|
|
104
106
|
key: string;
|
|
@@ -9,12 +9,16 @@ const hasLabel = pluginPermissionNode.createPermissionRule({
|
|
|
9
9
|
description: "Allow entities with the specified label",
|
|
10
10
|
resourceRef: alpha.catalogEntityPermissionResourceRef,
|
|
11
11
|
paramsSchema: zod.z.object({
|
|
12
|
-
label: zod.z.string().describe("Name of the label to match on")
|
|
12
|
+
label: zod.z.string().describe("Name of the label to match on"),
|
|
13
|
+
value: zod.z.string().optional().describe("Value of the label to match on")
|
|
13
14
|
}),
|
|
14
|
-
apply: (resource, { label }) => !!resource.metadata.labels?.hasOwnProperty(label),
|
|
15
|
-
toQuery: ({ label }) =>
|
|
15
|
+
apply: (resource, { label, value }) => !!resource.metadata.labels?.hasOwnProperty(label) && (value === void 0 ? true : resource.metadata.labels?.[label] === value),
|
|
16
|
+
toQuery: ({ label, value }) => value === void 0 ? {
|
|
16
17
|
key: `metadata.labels.${label}`
|
|
17
|
-
}
|
|
18
|
+
} : {
|
|
19
|
+
key: `metadata.labels.${label}`,
|
|
20
|
+
values: [value]
|
|
21
|
+
}
|
|
18
22
|
});
|
|
19
23
|
|
|
20
24
|
exports.hasLabel = hasLabel;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasLabel.cjs.js","sources":["../../../src/permissions/rules/hasLabel.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { catalogEntityPermissionResourceRef } from '@backstage/plugin-catalog-node/alpha';\nimport { createPermissionRule } from '@backstage/plugin-permission-node';\nimport { z } from 'zod';\n\n/**\n * A catalog {@link @backstage/plugin-permission-node#PermissionRule} which\n * filters for entities with a specified label in its metadata.\n * @alpha\n */\nexport const hasLabel = createPermissionRule({\n name: 'HAS_LABEL',\n description: 'Allow entities with the specified label',\n resourceRef: catalogEntityPermissionResourceRef,\n paramsSchema: z.object({\n label: z.string().describe('Name of the label to match on'),\n }),\n apply: (resource, { label }) =>\n !!resource.metadata.labels?.hasOwnProperty(label),\n toQuery: ({ label })
|
|
1
|
+
{"version":3,"file":"hasLabel.cjs.js","sources":["../../../src/permissions/rules/hasLabel.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { catalogEntityPermissionResourceRef } from '@backstage/plugin-catalog-node/alpha';\nimport { createPermissionRule } from '@backstage/plugin-permission-node';\nimport { z } from 'zod';\n\n/**\n * A catalog {@link @backstage/plugin-permission-node#PermissionRule} which\n * filters for entities with a specified label in its metadata.\n * @alpha\n */\nexport const hasLabel = createPermissionRule({\n name: 'HAS_LABEL',\n description: 'Allow entities with the specified label',\n resourceRef: catalogEntityPermissionResourceRef,\n paramsSchema: z.object({\n label: z.string().describe('Name of the label to match on'),\n value: z.string().optional().describe('Value of the label to match on'),\n }),\n apply: (resource, { label, value }) =>\n !!resource.metadata.labels?.hasOwnProperty(label) &&\n (value === undefined ? true : resource.metadata.labels?.[label] === value),\n toQuery: ({ label, value }) =>\n value === undefined\n ? {\n key: `metadata.labels.${label}`,\n }\n : {\n key: `metadata.labels.${label}`,\n values: [value],\n },\n});\n"],"names":["createPermissionRule","catalogEntityPermissionResourceRef","z"],"mappings":";;;;;;AAyBO,MAAM,WAAWA,yCAAqB,CAAA;AAAA,EAC3C,IAAM,EAAA,WAAA;AAAA,EACN,WAAa,EAAA,yCAAA;AAAA,EACb,WAAa,EAAAC,wCAAA;AAAA,EACb,YAAA,EAAcC,MAAE,MAAO,CAAA;AAAA,IACrB,KAAO,EAAAA,KAAA,CAAE,MAAO,EAAA,CAAE,SAAS,+BAA+B,CAAA;AAAA,IAC1D,OAAOA,KAAE,CAAA,MAAA,GAAS,QAAS,EAAA,CAAE,SAAS,gCAAgC;AAAA,GACvE,CAAA;AAAA,EACD,KAAA,EAAO,CAAC,QAAU,EAAA,EAAE,OAAO,KAAM,EAAA,KAC/B,CAAC,CAAC,QAAS,CAAA,QAAA,CAAS,QAAQ,cAAe,CAAA,KAAK,MAC/C,KAAU,KAAA,KAAA,CAAA,GAAY,OAAO,QAAS,CAAA,QAAA,CAAS,MAAS,GAAA,KAAK,CAAM,KAAA,KAAA,CAAA;AAAA,EACtE,SAAS,CAAC,EAAE,OAAO,KAAM,EAAA,KACvB,UAAU,KACN,CAAA,GAAA;AAAA,IACE,GAAA,EAAK,mBAAmB,KAAK,CAAA;AAAA,GAE/B,GAAA;AAAA,IACE,GAAA,EAAK,mBAAmB,KAAK,CAAA,CAAA;AAAA,IAC7B,MAAA,EAAQ,CAAC,KAAK;AAAA;AAExB,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.cjs.js","sources":["../../../../src/schema/openapi/generated/router.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// ******************************************************************\n// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. *\n// ******************************************************************\nimport { createValidatedOpenApiRouterFromGeneratedEndpointMap } from '@backstage/backend-openapi-utils';\nimport { EndpointMap } from './';\n\nexport const spec = {\n openapi: '3.0.3',\n info: {\n title: 'catalog',\n version: '1',\n description:\n 'The API surface consists of a few distinct groups of functionality. Each has a\\ndedicated section below.\\n\\n> **Note:** This page only describes some of the most commonly used parts of the\\n> API, and is a work in progress.\\n\\nAll of the URL paths in this article are assumed to be on top of some base URL\\npointing at your catalog installation. For example, if the path given in a\\nsection below is `/entities`, and the catalog is located at\\n`http://localhost:7007/api/catalog` during local development, the full URL would\\nbe `http://localhost:7007/api/catalog/entities`. The actual URL may vary from\\none organization to the other, especially in production, but is commonly your\\n`backend.baseUrl` in your app config, plus `/api/catalog` at the end.\\n\\nSome or all of the endpoints may accept or require an `Authorization` header\\nwith a `Bearer` token, which should then be the Backstage token returned by the\\n[`identity API`](https://backstage.io/docs/reference/core-plugin-api.identityapiref).\\n',\n license: {\n name: 'Apache-2.0',\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html',\n },\n contact: {},\n },\n servers: [\n {\n url: '/',\n },\n ],\n components: {\n examples: {},\n headers: {},\n parameters: {\n kind: {\n name: 'kind',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n namespace: {\n name: 'namespace',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n name: {\n name: 'name',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n uid: {\n name: 'uid',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n cursor: {\n name: 'cursor',\n in: 'query',\n description:\n 'You may pass the `cursor` query parameters to perform cursor based pagination\\nthrough the set of entities. The value of `cursor` will be returned in the response, under the `pageInfo` property:\\n\\n```json\\n \"pageInfo\": {\\n \"nextCursor\": \"a-cursor\",\\n \"prevCursor\": \"another-cursor\"\\n }\\n```\\n\\nIf `nextCursor` exists, it can be used to retrieve the next batch of entities. Following the same approach,\\nif `prevCursor` exists, it can be used to retrieve the previous batch of entities.\\n\\n- [`filter`](#filtering), for selecting only a subset of all entities\\n- [`fields`](#field-selection), for selecting only parts of the full data\\n structure of each entity\\n- `limit` for limiting the number of entities returned (20 is the default)\\n- [`orderField`](#ordering), for deciding the order of the entities\\n- `fullTextFilter`\\n **NOTE**: [`filter`, `orderField`, `fullTextFilter`] and `cursor` are mutually exclusive. This means that,\\n it isn\\'t possible to change any of [`filter`, `orderField`, `fullTextFilter`] when passing `cursor` as query parameters,\\n as changing any of these properties will affect pagination. If any of `filter`, `orderField`, `fullTextFilter` is specified together with `cursor`, only the latter is taken into consideration.\\n',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n minLength: 1,\n },\n },\n after: {\n name: 'after',\n in: 'query',\n description: 'Pointer to the previous page of results.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n minLength: 1,\n },\n },\n fields: {\n name: 'fields',\n in: 'query',\n description:\n \"By default the full entities are returned, but you can pass in a `fields` query\\nparameter which selects what parts of the entity data to retain. This makes the\\nresponse smaller and faster to transfer, and may allow the catalog to perform\\nmore efficient queries.\\n\\nThe query parameter value is a comma separated list of simplified JSON paths\\nlike above. Each path corresponds to the key of either a value, or of a subtree\\nroot that you want to keep in the output. The rest is pruned away. For example,\\nspecifying `?fields=metadata.name,metadata.annotations,spec` retains only the\\n`name` and `annotations` fields of the `metadata` of each entity (it'll be an\\nobject with at most two keys), keeps the entire `spec` unchanged, and cuts out\\nall other roots such as `relations`.\\n\\nSome more real world usable examples:\\n\\n- Return only enough data to form the full ref of each entity:\\n\\n `/entities/by-query?fields=kind,metadata.namespace,metadata.name`\\n\",\n required: false,\n allowReserved: true,\n explode: false,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n examples: {\n 'Get name and the entire relations collection': {\n value: ['metadata.name', 'relations'],\n },\n 'Get kind, name and namespace': {\n value: ['kind', 'metadata.name', 'metadata.namespace'],\n },\n },\n },\n filter: {\n name: 'filter',\n in: 'query',\n description:\n 'You can pass in one or more filter sets that get matched against each entity.\\nEach filter set is a number of conditions that all have to match for the\\ncondition to be true (conditions effectively have an AND between them). At least\\none filter set has to be true for the entity to be part of the result set\\n(filter sets effectively have an OR between them).\\n\\nExample:\\n\\n```text\\n/entities/by-query?filter=kind=user,metadata.namespace=default&filter=kind=group,spec.type\\n\\n Return entities that match\\n\\n Filter set 1:\\n Condition 1: kind = user\\n AND\\n Condition 2: metadata.namespace = default\\n\\n OR\\n\\n Filter set 2:\\n Condition 1: kind = group\\n AND\\n Condition 2: spec.type exists\\n```\\n\\nEach condition is either on the form `<key>`, or on the form `<key>=<value>`.\\nThe first form asserts on the existence of a certain key (with any value), and\\nthe second asserts that the key exists and has a certain value. All checks are\\nalways case _insensitive_.\\n\\nIn all cases, the key is a simplified JSON path in a given piece of entity data.\\nEach part of the path is a key of an object, and the traversal also descends\\nthrough arrays. There are two special forms:\\n\\n- Array items that are simple value types (such as strings) match on a key-value\\n pair where the key is the item as a string, and the value is the string `true`\\n- Relations can be matched on a `relations.<type>=<targetRef>` form\\n\\nLet\\'s look at a simplified example to illustrate the concept:\\n\\n```json\\n{\\n \"a\": {\\n \"b\": [\"c\", { \"d\": 1 }],\\n \"e\": 7\\n }\\n}\\n```\\n\\nThis would match any one of the following conditions:\\n\\n- `a`\\n- `a.b`\\n- `a.b.c`\\n- `a.b.c=true`\\n- `a.b.d`\\n- `a.b.d=1`\\n- `a.e`\\n- `a.e=7`\\n\\nSome more real world usable examples:\\n\\n- Return all orphaned entities:\\n\\n `/entities/by-query?filter=metadata.annotations.backstage.io/orphan=true`\\n\\n- Return all users and groups:\\n\\n `/entities/by-query?filter=kind=user&filter=kind=group`\\n\\n- Return all service components:\\n\\n `/entities/by-query?filter=kind=component,spec.type=service`\\n\\n- Return all entities with the `java` tag:\\n\\n `/entities/by-query?filter=metadata.tags.java`\\n\\n- Return all users who are members of the `ops` group (note that the full\\n [reference](references.md) of the group is used):\\n\\n `/entities/by-query?filter=kind=user,relations.memberof=group:default/ops`\\n',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n examples: {\n 'Get groups': {\n value: ['kind=group'],\n },\n 'Get orphaned components': {\n value: [\n 'kind=component,metadata.annotations.backstage.io/orphan=true',\n ],\n },\n },\n },\n offset: {\n name: 'offset',\n in: 'query',\n description: 'Number of records to skip in the query page.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'integer',\n minimum: 0,\n },\n },\n limit: {\n name: 'limit',\n in: 'query',\n description: 'Number of records to return in the response.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'integer',\n minimum: 0,\n },\n },\n orderField: {\n name: 'orderField',\n in: 'query',\n description:\n 'By default the entities are returned ordered by their internal uid. You can\\ncustomize the `orderField` query parameters to affect that ordering.\\n\\nFor example, to return entities by their name:\\n\\n`/entities/by-query?orderField=metadata.name,asc`\\n\\nEach parameter can be followed by `asc` for ascending lexicographical order or\\n`desc` for descending (reverse) lexicographical order.\\n',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n description: 'A two-item tuple of [field, order].',\n },\n },\n explode: true,\n style: 'form',\n examples: {\n 'Order ascending by name': {\n value: ['metadata.name,asc'],\n },\n 'Order descending by owner': {\n value: ['spec.owner,desc'],\n },\n },\n },\n },\n requestBodies: {},\n responses: {\n ErrorResponse: {\n description: 'An error response from the backend.',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Error',\n },\n },\n },\n },\n },\n schemas: {\n Error: {\n type: 'object',\n properties: {\n error: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n stack: {\n type: 'string',\n },\n code: {\n type: 'string',\n },\n },\n required: ['name', 'message'],\n },\n request: {\n type: 'object',\n properties: {\n method: {\n type: 'string',\n },\n url: {\n type: 'string',\n },\n },\n required: ['method', 'url'],\n },\n response: {\n type: 'object',\n properties: {\n statusCode: {\n type: 'number',\n },\n },\n required: ['statusCode'],\n },\n },\n required: ['error', 'response'],\n additionalProperties: {},\n },\n JsonObject: {\n type: 'object',\n properties: {},\n description: 'A type representing all allowed JSON object values.',\n additionalProperties: {},\n },\n MapStringString: {\n type: 'object',\n properties: {},\n additionalProperties: {\n type: 'string',\n },\n description: 'Construct a type with a set of properties K of type T',\n },\n EntityLink: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description:\n 'An optional value to categorize links into specific groups',\n },\n icon: {\n type: 'string',\n description:\n 'An optional semantic key that represents a visual icon.',\n },\n title: {\n type: 'string',\n description: 'An optional descriptive title for the link.',\n },\n url: {\n type: 'string',\n description: 'The url to the external site, document, etc.',\n },\n },\n required: ['url'],\n description:\n 'A link to external information that is related to the entity.',\n additionalProperties: false,\n },\n EntityMeta: {\n type: 'object',\n properties: {\n links: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityLink',\n },\n description: 'A list of external hyperlinks related to the entity.',\n },\n tags: {\n type: 'array',\n items: {\n type: 'string',\n },\n description:\n 'A list of single-valued strings, to for example classify catalog entities in\\nvarious ways.',\n },\n annotations: {\n $ref: '#/components/schemas/MapStringString',\n },\n labels: {\n $ref: '#/components/schemas/MapStringString',\n },\n description: {\n type: 'string',\n description:\n 'A short (typically relatively few words, on one line) description of the\\nentity.',\n },\n title: {\n type: 'string',\n description:\n 'A display name of the entity, to be presented in user interfaces instead\\nof the `name` property above, when available.\\nThis field is sometimes useful when the `name` is cumbersome or ends up\\nbeing perceived as overly technical. The title generally does not have\\nas stringent format requirements on it, so it may contain special\\ncharacters and be more explanatory. Do keep it very short though, and\\navoid situations where a title can be confused with the name of another\\nentity, or where two entities share a title.\\nNote that this is only for display purposes, and may be ignored by some\\nparts of the code. Entity references still always make use of the `name`\\nproperty, not the title.',\n },\n namespace: {\n type: 'string',\n description: 'The namespace that the entity belongs to.',\n },\n name: {\n type: 'string',\n description:\n 'The name of the entity.\\nMust be unique within the catalog at any given point in time, for any\\ngiven namespace + kind pair. This value is part of the technical\\nidentifier of the entity, and as such it will appear in URLs, database\\ntables, entity references, and similar. It is subject to restrictions\\nregarding what characters are allowed.\\nIf you want to use a different, more human readable string with fewer\\nrestrictions on it in user interfaces, see the `title` field below.',\n },\n etag: {\n type: 'string',\n description:\n 'An opaque string that changes for each update operation to any part of\\nthe entity, including metadata.\\nThis field can not be set by the user at creation time, and the server\\nwill reject an attempt to do so. The field will be populated in read\\noperations. The field can (optionally) be specified when performing\\nupdate or delete operations, and the server will then reject the\\noperation if it does not match the current stored value.',\n },\n uid: {\n type: 'string',\n description:\n 'A globally unique ID for the entity.\\nThis field can not be set by the user at creation time, and the server\\nwill reject an attempt to do so. The field will be populated in read\\noperations. The field can (optionally) be specified when performing\\nupdate or delete operations, but the server is free to reject requests\\nthat do so in such a way that it breaks semantics.',\n },\n },\n required: ['name'],\n description: 'Metadata fields common to all versions/kinds of entity.',\n additionalProperties: {},\n },\n EntityRelation: {\n type: 'object',\n properties: {\n targetRef: {\n type: 'string',\n description: 'The entity ref of the target of this relation.',\n },\n type: {\n type: 'string',\n description: 'The type of the relation.',\n },\n },\n required: ['targetRef', 'type'],\n description:\n 'A relation of a specific type to another entity in the catalog.',\n additionalProperties: false,\n },\n Entity: {\n type: 'object',\n properties: {\n relations: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityRelation',\n },\n description:\n 'The relations that this entity has with other entities.',\n },\n spec: {\n $ref: '#/components/schemas/JsonObject',\n },\n metadata: {\n $ref: '#/components/schemas/EntityMeta',\n },\n kind: {\n type: 'string',\n description: 'The high level entity type being described.',\n },\n apiVersion: {\n type: 'string',\n description:\n 'The version of specification format for this particular entity that\\nthis is written against.',\n },\n },\n required: ['metadata', 'kind', 'apiVersion'],\n description:\n \"The parts of the format that's common to all versions/kinds of entity.\",\n },\n NullableEntity: {\n type: 'object',\n properties: {\n relations: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityRelation',\n },\n description:\n 'The relations that this entity has with other entities.',\n },\n spec: {\n $ref: '#/components/schemas/JsonObject',\n },\n metadata: {\n $ref: '#/components/schemas/EntityMeta',\n },\n kind: {\n type: 'string',\n description: 'The high level entity type being described.',\n },\n apiVersion: {\n type: 'string',\n description:\n 'The version of specification format for this particular entity that\\nthis is written against.',\n },\n },\n required: ['metadata', 'kind', 'apiVersion'],\n description:\n \"The parts of the format that's common to all versions/kinds of entity.\",\n nullable: true,\n },\n EntityAncestryResponse: {\n type: 'object',\n properties: {\n items: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n parentEntityRefs: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n entity: {\n $ref: '#/components/schemas/Entity',\n },\n },\n required: ['parentEntityRefs', 'entity'],\n },\n },\n rootEntityRef: {\n type: 'string',\n },\n },\n required: ['items', 'rootEntityRef'],\n additionalProperties: false,\n },\n EntitiesBatchResponse: {\n type: 'object',\n properties: {\n items: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/NullableEntity',\n },\n description:\n 'The list of entities, in the same order as the refs in the request. Entries\\nthat are null signify that no entity existed with that ref.',\n },\n },\n required: ['items'],\n additionalProperties: false,\n },\n EntityFacet: {\n type: 'object',\n properties: {\n value: {\n type: 'string',\n },\n count: {\n type: 'number',\n },\n },\n required: ['value', 'count'],\n additionalProperties: false,\n },\n EntityFacetsResponse: {\n type: 'object',\n properties: {\n facets: {\n type: 'object',\n additionalProperties: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityFacet',\n },\n },\n },\n },\n required: ['facets'],\n additionalProperties: false,\n },\n Location: {\n type: 'object',\n properties: {\n target: {\n type: 'string',\n },\n type: {\n type: 'string',\n },\n id: {\n type: 'string',\n },\n },\n required: ['target', 'type', 'id'],\n description: 'Entity location for a specific entity.',\n additionalProperties: false,\n },\n LocationSpec: {\n type: 'object',\n properties: {\n target: {\n type: 'string',\n },\n type: {\n type: 'string',\n },\n },\n required: ['target', 'type'],\n description: 'Holds the entity location information.',\n additionalProperties: false,\n },\n AnalyzeLocationExistingEntity: {\n type: 'object',\n properties: {\n entity: {\n $ref: '#/components/schemas/Entity',\n },\n isRegistered: {\n type: 'boolean',\n },\n location: {\n $ref: '#/components/schemas/LocationSpec',\n },\n },\n required: ['entity', 'isRegistered', 'location'],\n description:\n \"If the folder pointed to already contained catalog info yaml files, they are\\nread and emitted like this so that the frontend can inform the user that it\\nlocated them and can make sure to register them as well if they weren't\\nalready\",\n additionalProperties: false,\n },\n RecursivePartialEntityRelation: {\n type: 'object',\n properties: {\n targetRef: {\n type: 'string',\n description: 'The entity ref of the target of this relation.',\n },\n type: {\n type: 'string',\n description: 'The type of the relation.',\n },\n },\n description:\n 'A relation of a specific type to another entity in the catalog.',\n additionalProperties: false,\n },\n RecursivePartialEntityMeta: {\n allOf: [\n {\n $ref: '#/components/schemas/JsonObject',\n },\n {\n type: 'object',\n properties: {\n links: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityLink',\n },\n description:\n 'A list of external hyperlinks related to the entity.',\n },\n tags: {\n type: 'array',\n items: {\n type: 'string',\n },\n description:\n 'A list of single-valued strings, to for example classify catalog entities in\\nvarious ways.',\n },\n annotations: {\n $ref: '#/components/schemas/MapStringString',\n },\n labels: {\n $ref: '#/components/schemas/MapStringString',\n },\n description: {\n type: 'string',\n description:\n 'A short (typically relatively few words, on one line) description of the\\nentity.',\n },\n title: {\n type: 'string',\n description:\n 'A display name of the entity, to be presented in user interfaces instead\\nof the `name` property above, when available.\\nThis field is sometimes useful when the `name` is cumbersome or ends up\\nbeing perceived as overly technical. The title generally does not have\\nas stringent format requirements on it, so it may contain special\\ncharacters and be more explanatory. Do keep it very short though, and\\navoid situations where a title can be confused with the name of another\\nentity, or where two entities share a title.\\nNote that this is only for display purposes, and may be ignored by some\\nparts of the code. Entity references still always make use of the `name`\\nproperty, not the title.',\n },\n namespace: {\n type: 'string',\n description: 'The namespace that the entity belongs to.',\n },\n name: {\n type: 'string',\n description:\n 'The name of the entity.\\nMust be unique within the catalog at any given point in time, for any\\ngiven namespace + kind pair. This value is part of the technical\\nidentifier of the entity, and as such it will appear in URLs, database\\ntables, entity references, and similar. It is subject to restrictions\\nregarding what characters are allowed.\\nIf you want to use a different, more human readable string with fewer\\nrestrictions on it in user interfaces, see the `title` field below.',\n },\n etag: {\n type: 'string',\n description:\n 'An opaque string that changes for each update operation to any part of\\nthe entity, including metadata.\\nThis field can not be set by the user at creation time, and the server\\nwill reject an attempt to do so. The field will be populated in read\\noperations. The field can (optionally) be specified when performing\\nupdate or delete operations, and the server will then reject the\\noperation if it does not match the current stored value.',\n },\n uid: {\n type: 'string',\n description:\n 'A globally unique ID for the entity.\\nThis field can not be set by the user at creation time, and the server\\nwill reject an attempt to do so. The field will be populated in read\\noperations. The field can (optionally) be specified when performing\\nupdate or delete operations, but the server is free to reject requests\\nthat do so in such a way that it breaks semantics.',\n },\n },\n description:\n 'Metadata fields common to all versions/kinds of entity.',\n },\n ],\n additionalProperties: false,\n },\n RecursivePartialEntity: {\n type: 'object',\n properties: {\n apiVersion: {\n type: 'string',\n description:\n 'The version of specification format for this particular entity that\\nthis is written against.',\n },\n kind: {\n type: 'string',\n description: 'The high level entity type being described.',\n },\n metadata: {\n $ref: '#/components/schemas/RecursivePartialEntityMeta',\n },\n spec: {\n $ref: '#/components/schemas/JsonObject',\n },\n relations: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/RecursivePartialEntityRelation',\n },\n description:\n 'The relations that this entity has with other entities.',\n },\n },\n description: 'Makes all keys of an entire hierarchy optional.',\n additionalProperties: false,\n },\n AnalyzeLocationEntityField: {\n type: 'object',\n properties: {\n description: {\n type: 'string',\n description:\n 'A text to show to the user to inform about the choices made. Like, it could say\\n\"Found a CODEOWNERS file that covers this target, so we suggest leaving this\\nfield empty; which would currently make it owned by X\" where X is taken from the\\ncodeowners file.',\n },\n value: {\n type: 'string',\n nullable: true,\n },\n state: {\n type: 'string',\n enum: [\n 'analysisSuggestedValue',\n 'analysisSuggestedNoValue',\n 'needsUserInput',\n ],\n description:\n 'The outcome of the analysis for this particular field',\n },\n field: {\n type: 'string',\n description:\n 'e.g. \"spec.owner\"? The frontend needs to know how to \"inject\" the field into the\\nentity again if the user wants to change it',\n },\n },\n required: ['description', 'value', 'state', 'field'],\n additionalProperties: false,\n },\n AnalyzeLocationGenerateEntity: {\n type: 'object',\n properties: {\n fields: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/AnalyzeLocationEntityField',\n },\n },\n entity: {\n $ref: '#/components/schemas/RecursivePartialEntity',\n },\n },\n required: ['fields', 'entity'],\n description:\n \"This is some form of representation of what the analyzer could deduce.\\nWe should probably have a chat about how this can best be conveyed to\\nthe frontend. It'll probably contain a (possibly incomplete) entity, plus\\nenough info for the frontend to know what form data to show to the user\\nfor overriding/completing the info.\",\n additionalProperties: false,\n },\n AnalyzeLocationResponse: {\n type: 'object',\n properties: {\n generateEntities: {\n items: {\n $ref: '#/components/schemas/AnalyzeLocationGenerateEntity',\n },\n type: 'array',\n },\n existingEntityFiles: {\n items: {\n $ref: '#/components/schemas/AnalyzeLocationExistingEntity',\n },\n type: 'array',\n },\n },\n required: ['generateEntities', 'existingEntityFiles'],\n additionalProperties: false,\n },\n LocationInput: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n },\n target: {\n type: 'string',\n },\n },\n required: ['type', 'target'],\n additionalProperties: false,\n },\n EntitiesQueryResponse: {\n type: 'object',\n properties: {\n items: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/Entity',\n },\n description: 'The list of entities paginated by a specific filter.',\n },\n totalItems: {\n type: 'number',\n },\n pageInfo: {\n type: 'object',\n properties: {\n nextCursor: {\n type: 'string',\n description: 'The cursor for the next batch of entities.',\n },\n prevCursor: {\n type: 'string',\n description: 'The cursor for the previous batch of entities.',\n },\n },\n },\n },\n required: ['items', 'totalItems', 'pageInfo'],\n additionalProperties: false,\n },\n },\n securitySchemes: {\n JWT: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n },\n },\n },\n paths: {\n '/refresh': {\n post: {\n operationId: 'RefreshEntity',\n tags: ['Entity'],\n description: 'Refresh the entity related to entityRef.',\n responses: {\n '200': {\n description: 'Refreshed',\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n authorizationToken: {\n type: 'string',\n },\n entityRef: {\n type: 'string',\n description:\n 'The reference to a single entity that should be refreshed',\n },\n },\n required: ['entityRef'],\n description:\n 'Options for requesting a refresh of entities in the catalog.',\n additionalProperties: false,\n },\n },\n },\n },\n },\n },\n '/entities': {\n get: {\n operationId: 'GetEntities',\n tags: ['Entity'],\n description: 'Get all entities matching a given filter.',\n responses: {\n '200': {\n description: '',\n content: {\n 'application/json': {\n schema: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/Entity',\n },\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/fields',\n },\n {\n $ref: '#/components/parameters/limit',\n },\n {\n $ref: '#/components/parameters/filter',\n },\n {\n $ref: '#/components/parameters/offset',\n },\n {\n $ref: '#/components/parameters/after',\n },\n {\n name: 'order',\n in: 'query',\n allowReserved: true,\n required: false,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n },\n ],\n },\n },\n '/entities/by-uid/{uid}': {\n get: {\n operationId: 'GetEntityByUid',\n tags: ['Entity'],\n description: 'Get a single entity by the UID.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Entity',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/uid',\n },\n ],\n },\n delete: {\n operationId: 'DeleteEntityByUid',\n tags: ['Entity'],\n description: 'Delete a single entity by UID.',\n responses: {\n '204': {\n description: 'Deleted successfully.',\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/uid',\n },\n ],\n },\n },\n '/entities/by-name/{kind}/{namespace}/{name}': {\n get: {\n operationId: 'GetEntityByName',\n tags: ['Entity'],\n description: 'Get an entity by an entity ref.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Entity',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/kind',\n },\n {\n $ref: '#/components/parameters/namespace',\n },\n {\n $ref: '#/components/parameters/name',\n },\n ],\n },\n },\n '/entities/by-name/{kind}/{namespace}/{name}/ancestry': {\n get: {\n operationId: 'GetEntityAncestryByName',\n tags: ['Entity'],\n description: \"Get an entity's ancestry by entity ref.\",\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/EntityAncestryResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/kind',\n },\n {\n $ref: '#/components/parameters/namespace',\n },\n {\n $ref: '#/components/parameters/name',\n },\n ],\n },\n },\n '/entities/by-refs': {\n post: {\n operationId: 'GetEntitiesByRefs',\n tags: ['Entity'],\n description:\n 'Get a batch set of entities given an array of entityRefs.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/EntitiesBatchResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n requestBody: {\n required: false,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n required: ['entityRefs'],\n properties: {\n entityRefs: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n fields: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n },\n },\n examples: {\n 'Fetch Backstage entities': {\n value: {\n entityRefs: [\n 'component:default/backstage',\n 'api:default/backstage',\n ],\n },\n },\n 'Fetch annotations for backstage entity': {\n value: {\n entityRefs: ['component:default/backstage'],\n fields: ['metadata.annotations'],\n },\n },\n },\n },\n },\n },\n parameters: [\n {\n $ref: '#/components/parameters/filter',\n },\n ],\n },\n },\n '/entities/by-query': {\n get: {\n operationId: 'GetEntitiesByQuery',\n tags: ['Entity'],\n description: 'Search for entities by a given query.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/EntitiesQueryResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/fields',\n },\n {\n $ref: '#/components/parameters/limit',\n },\n {\n $ref: '#/components/parameters/offset',\n },\n {\n $ref: '#/components/parameters/orderField',\n },\n {\n $ref: '#/components/parameters/cursor',\n },\n {\n $ref: '#/components/parameters/filter',\n },\n {\n name: 'fullTextFilterTerm',\n in: 'query',\n description: 'Text search term.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n {\n name: 'fullTextFilterFields',\n in: 'query',\n description:\n 'A comma separated list of fields to sort returned results by.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n explode: false,\n style: 'form',\n },\n ],\n },\n },\n '/entity-facets': {\n get: {\n operationId: 'GetEntityFacets',\n tags: ['Entity'],\n description: 'Get all entity facets that match the given filters.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/EntityFacetsResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'query',\n name: 'facet',\n required: true,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n examples: {\n 'Entities by kind': {\n value: ['kind'],\n },\n 'Entities by spec type': {\n value: ['spec.type'],\n },\n },\n },\n {\n $ref: '#/components/parameters/filter',\n },\n ],\n },\n },\n '/locations': {\n post: {\n operationId: 'CreateLocation',\n tags: ['Locations'],\n description: 'Create a location for a given target.',\n responses: {\n '201': {\n description: 'Created',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n exists: {\n type: 'boolean',\n },\n entities: {\n items: {\n $ref: '#/components/schemas/Entity',\n },\n type: 'array',\n },\n location: {\n $ref: '#/components/schemas/Location',\n },\n },\n required: ['entities', 'location'],\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'query',\n name: 'dryRun',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n target: {\n type: 'string',\n },\n type: {\n type: 'string',\n },\n },\n required: ['target', 'type'],\n },\n },\n },\n },\n },\n get: {\n operationId: 'GetLocations',\n tags: ['Locations'],\n description: 'Get all locations',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n $ref: '#/components/schemas/Location',\n },\n },\n required: ['data'],\n },\n },\n },\n },\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n },\n },\n '/locations/{id}': {\n get: {\n operationId: 'GetLocation',\n tags: ['Locations'],\n description: 'Get a location by id.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Location',\n },\n },\n },\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'path',\n name: 'id',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n },\n delete: {\n operationId: 'DeleteLocation',\n tags: ['Locations'],\n description: 'Delete a location by id.',\n responses: {\n '204': {\n description: 'No content',\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'path',\n name: 'id',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n },\n },\n '/locations/by-entity/{kind}/{namespace}/{name}': {\n get: {\n operationId: 'getLocationByEntity',\n tags: ['Locations'],\n description: 'Get a location for entity.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Location',\n },\n },\n },\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'path',\n name: 'kind',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n {\n in: 'path',\n name: 'namespace',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n {\n in: 'path',\n name: 'name',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n },\n },\n '/analyze-location': {\n post: {\n operationId: 'AnalyzeLocation',\n tags: ['Locations'],\n description: 'Validate a given location.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/AnalyzeLocationResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n catalogFileName: {\n type: 'string',\n },\n location: {\n $ref: '#/components/schemas/LocationInput',\n },\n },\n required: ['location'],\n },\n },\n },\n },\n },\n },\n '/validate-entity': {\n post: {\n operationId: 'ValidateEntity',\n tags: ['Entity'],\n description:\n 'Validate that a passed in entity has no errors in schema.',\n responses: {\n '200': {\n description: 'Ok',\n },\n '400': {\n description: 'Validation errors.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n errors: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n },\n required: ['name', 'message'],\n additionalProperties: {},\n },\n },\n },\n required: ['errors'],\n },\n },\n },\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n location: {\n type: 'string',\n },\n entity: {\n type: 'object',\n additionalProperties: {},\n },\n },\n required: ['location', 'entity'],\n },\n },\n },\n },\n },\n },\n },\n} as const;\nexport const createOpenApiRouter = async (\n options?: Parameters<\n typeof createValidatedOpenApiRouterFromGeneratedEndpointMap\n >['1'],\n) =>\n createValidatedOpenApiRouterFromGeneratedEndpointMap<EndpointMap>(\n spec,\n options,\n );\n"],"names":["createValidatedOpenApiRouterFromGeneratedEndpointMap"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"router.cjs.js","sources":["../../../../src/schema/openapi/generated/router.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// ******************************************************************\n// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. *\n// ******************************************************************\nimport { createValidatedOpenApiRouterFromGeneratedEndpointMap } from '@backstage/backend-openapi-utils';\nimport { EndpointMap } from './apis';\n\nexport const spec = {\n openapi: '3.0.3',\n info: {\n title: 'catalog',\n version: '1',\n description:\n 'The API surface consists of a few distinct groups of functionality. Each has a\\ndedicated section below.\\n\\n> **Note:** This page only describes some of the most commonly used parts of the\\n> API, and is a work in progress.\\n\\nAll of the URL paths in this article are assumed to be on top of some base URL\\npointing at your catalog installation. For example, if the path given in a\\nsection below is `/entities`, and the catalog is located at\\n`http://localhost:7007/api/catalog` during local development, the full URL would\\nbe `http://localhost:7007/api/catalog/entities`. The actual URL may vary from\\none organization to the other, especially in production, but is commonly your\\n`backend.baseUrl` in your app config, plus `/api/catalog` at the end.\\n\\nSome or all of the endpoints may accept or require an `Authorization` header\\nwith a `Bearer` token, which should then be the Backstage token returned by the\\n[`identity API`](https://backstage.io/docs/reference/core-plugin-api.identityapiref).\\n',\n license: {\n name: 'Apache-2.0',\n url: 'http://www.apache.org/licenses/LICENSE-2.0.html',\n },\n contact: {},\n },\n servers: [\n {\n url: '/',\n },\n ],\n components: {\n examples: {},\n headers: {},\n parameters: {\n kind: {\n name: 'kind',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n namespace: {\n name: 'namespace',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n name: {\n name: 'name',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n uid: {\n name: 'uid',\n in: 'path',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n cursor: {\n name: 'cursor',\n in: 'query',\n description:\n 'You may pass the `cursor` query parameters to perform cursor based pagination\\nthrough the set of entities. The value of `cursor` will be returned in the response, under the `pageInfo` property:\\n\\n```json\\n \"pageInfo\": {\\n \"nextCursor\": \"a-cursor\",\\n \"prevCursor\": \"another-cursor\"\\n }\\n```\\n\\nIf `nextCursor` exists, it can be used to retrieve the next batch of entities. Following the same approach,\\nif `prevCursor` exists, it can be used to retrieve the previous batch of entities.\\n\\n- [`filter`](#filtering), for selecting only a subset of all entities\\n- [`fields`](#field-selection), for selecting only parts of the full data\\n structure of each entity\\n- `limit` for limiting the number of entities returned (20 is the default)\\n- [`orderField`](#ordering), for deciding the order of the entities\\n- `fullTextFilter`\\n **NOTE**: [`filter`, `orderField`, `fullTextFilter`] and `cursor` are mutually exclusive. This means that,\\n it isn\\'t possible to change any of [`filter`, `orderField`, `fullTextFilter`] when passing `cursor` as query parameters,\\n as changing any of these properties will affect pagination. If any of `filter`, `orderField`, `fullTextFilter` is specified together with `cursor`, only the latter is taken into consideration.\\n',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n minLength: 1,\n },\n },\n after: {\n name: 'after',\n in: 'query',\n description: 'Pointer to the previous page of results.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n minLength: 1,\n },\n },\n fields: {\n name: 'fields',\n in: 'query',\n description:\n \"By default the full entities are returned, but you can pass in a `fields` query\\nparameter which selects what parts of the entity data to retain. This makes the\\nresponse smaller and faster to transfer, and may allow the catalog to perform\\nmore efficient queries.\\n\\nThe query parameter value is a comma separated list of simplified JSON paths\\nlike above. Each path corresponds to the key of either a value, or of a subtree\\nroot that you want to keep in the output. The rest is pruned away. For example,\\nspecifying `?fields=metadata.name,metadata.annotations,spec` retains only the\\n`name` and `annotations` fields of the `metadata` of each entity (it'll be an\\nobject with at most two keys), keeps the entire `spec` unchanged, and cuts out\\nall other roots such as `relations`.\\n\\nSome more real world usable examples:\\n\\n- Return only enough data to form the full ref of each entity:\\n\\n `/entities/by-query?fields=kind,metadata.namespace,metadata.name`\\n\",\n required: false,\n allowReserved: true,\n explode: false,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n examples: {\n 'Get name and the entire relations collection': {\n value: ['metadata.name', 'relations'],\n },\n 'Get kind, name and namespace': {\n value: ['kind', 'metadata.name', 'metadata.namespace'],\n },\n },\n },\n filter: {\n name: 'filter',\n in: 'query',\n description:\n 'You can pass in one or more filter sets that get matched against each entity.\\nEach filter set is a number of conditions that all have to match for the\\ncondition to be true (conditions effectively have an AND between them). At least\\none filter set has to be true for the entity to be part of the result set\\n(filter sets effectively have an OR between them).\\n\\nExample:\\n\\n```text\\n/entities/by-query?filter=kind=user,metadata.namespace=default&filter=kind=group,spec.type\\n\\n Return entities that match\\n\\n Filter set 1:\\n Condition 1: kind = user\\n AND\\n Condition 2: metadata.namespace = default\\n\\n OR\\n\\n Filter set 2:\\n Condition 1: kind = group\\n AND\\n Condition 2: spec.type exists\\n```\\n\\nEach condition is either on the form `<key>`, or on the form `<key>=<value>`.\\nThe first form asserts on the existence of a certain key (with any value), and\\nthe second asserts that the key exists and has a certain value. All checks are\\nalways case _insensitive_.\\n\\nIn all cases, the key is a simplified JSON path in a given piece of entity data.\\nEach part of the path is a key of an object, and the traversal also descends\\nthrough arrays. There are two special forms:\\n\\n- Array items that are simple value types (such as strings) match on a key-value\\n pair where the key is the item as a string, and the value is the string `true`\\n- Relations can be matched on a `relations.<type>=<targetRef>` form\\n\\nLet\\'s look at a simplified example to illustrate the concept:\\n\\n```json\\n{\\n \"a\": {\\n \"b\": [\"c\", { \"d\": 1 }],\\n \"e\": 7\\n }\\n}\\n```\\n\\nThis would match any one of the following conditions:\\n\\n- `a`\\n- `a.b`\\n- `a.b.c`\\n- `a.b.c=true`\\n- `a.b.d`\\n- `a.b.d=1`\\n- `a.e`\\n- `a.e=7`\\n\\nSome more real world usable examples:\\n\\n- Return all orphaned entities:\\n\\n `/entities/by-query?filter=metadata.annotations.backstage.io/orphan=true`\\n\\n- Return all users and groups:\\n\\n `/entities/by-query?filter=kind=user&filter=kind=group`\\n\\n- Return all service components:\\n\\n `/entities/by-query?filter=kind=component,spec.type=service`\\n\\n- Return all entities with the `java` tag:\\n\\n `/entities/by-query?filter=metadata.tags.java`\\n\\n- Return all users who are members of the `ops` group (note that the full\\n [reference](references.md) of the group is used):\\n\\n `/entities/by-query?filter=kind=user,relations.memberof=group:default/ops`\\n',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n examples: {\n 'Get groups': {\n value: ['kind=group'],\n },\n 'Get orphaned components': {\n value: [\n 'kind=component,metadata.annotations.backstage.io/orphan=true',\n ],\n },\n },\n },\n offset: {\n name: 'offset',\n in: 'query',\n description: 'Number of records to skip in the query page.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'integer',\n minimum: 0,\n },\n },\n limit: {\n name: 'limit',\n in: 'query',\n description: 'Number of records to return in the response.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'integer',\n minimum: 0,\n },\n },\n orderField: {\n name: 'orderField',\n in: 'query',\n description:\n 'By default the entities are returned ordered by their internal uid. You can\\ncustomize the `orderField` query parameters to affect that ordering.\\n\\nFor example, to return entities by their name:\\n\\n`/entities/by-query?orderField=metadata.name,asc`\\n\\nEach parameter can be followed by `asc` for ascending lexicographical order or\\n`desc` for descending (reverse) lexicographical order.\\n',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n description: 'A two-item tuple of [field, order].',\n },\n },\n explode: true,\n style: 'form',\n examples: {\n 'Order ascending by name': {\n value: ['metadata.name,asc'],\n },\n 'Order descending by owner': {\n value: ['spec.owner,desc'],\n },\n },\n },\n },\n requestBodies: {},\n responses: {\n ErrorResponse: {\n description: 'An error response from the backend.',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Error',\n },\n },\n },\n },\n },\n schemas: {\n Error: {\n type: 'object',\n properties: {\n error: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n stack: {\n type: 'string',\n },\n code: {\n type: 'string',\n },\n },\n required: ['name', 'message'],\n },\n request: {\n type: 'object',\n properties: {\n method: {\n type: 'string',\n },\n url: {\n type: 'string',\n },\n },\n required: ['method', 'url'],\n },\n response: {\n type: 'object',\n properties: {\n statusCode: {\n type: 'number',\n },\n },\n required: ['statusCode'],\n },\n },\n required: ['error', 'response'],\n additionalProperties: {},\n },\n JsonObject: {\n type: 'object',\n properties: {},\n description: 'A type representing all allowed JSON object values.',\n additionalProperties: {},\n },\n MapStringString: {\n type: 'object',\n properties: {},\n additionalProperties: {\n type: 'string',\n },\n description: 'Construct a type with a set of properties K of type T',\n },\n EntityLink: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n description:\n 'An optional value to categorize links into specific groups',\n },\n icon: {\n type: 'string',\n description:\n 'An optional semantic key that represents a visual icon.',\n },\n title: {\n type: 'string',\n description: 'An optional descriptive title for the link.',\n },\n url: {\n type: 'string',\n description: 'The url to the external site, document, etc.',\n },\n },\n required: ['url'],\n description:\n 'A link to external information that is related to the entity.',\n additionalProperties: false,\n },\n EntityMeta: {\n type: 'object',\n properties: {\n links: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityLink',\n },\n description: 'A list of external hyperlinks related to the entity.',\n },\n tags: {\n type: 'array',\n items: {\n type: 'string',\n },\n description:\n 'A list of single-valued strings, to for example classify catalog entities in\\nvarious ways.',\n },\n annotations: {\n $ref: '#/components/schemas/MapStringString',\n },\n labels: {\n $ref: '#/components/schemas/MapStringString',\n },\n description: {\n type: 'string',\n description:\n 'A short (typically relatively few words, on one line) description of the\\nentity.',\n },\n title: {\n type: 'string',\n description:\n 'A display name of the entity, to be presented in user interfaces instead\\nof the `name` property above, when available.\\nThis field is sometimes useful when the `name` is cumbersome or ends up\\nbeing perceived as overly technical. The title generally does not have\\nas stringent format requirements on it, so it may contain special\\ncharacters and be more explanatory. Do keep it very short though, and\\navoid situations where a title can be confused with the name of another\\nentity, or where two entities share a title.\\nNote that this is only for display purposes, and may be ignored by some\\nparts of the code. Entity references still always make use of the `name`\\nproperty, not the title.',\n },\n namespace: {\n type: 'string',\n description: 'The namespace that the entity belongs to.',\n },\n name: {\n type: 'string',\n description:\n 'The name of the entity.\\nMust be unique within the catalog at any given point in time, for any\\ngiven namespace + kind pair. This value is part of the technical\\nidentifier of the entity, and as such it will appear in URLs, database\\ntables, entity references, and similar. It is subject to restrictions\\nregarding what characters are allowed.\\nIf you want to use a different, more human readable string with fewer\\nrestrictions on it in user interfaces, see the `title` field below.',\n },\n etag: {\n type: 'string',\n description:\n 'An opaque string that changes for each update operation to any part of\\nthe entity, including metadata.\\nThis field can not be set by the user at creation time, and the server\\nwill reject an attempt to do so. The field will be populated in read\\noperations. The field can (optionally) be specified when performing\\nupdate or delete operations, and the server will then reject the\\noperation if it does not match the current stored value.',\n },\n uid: {\n type: 'string',\n description:\n 'A globally unique ID for the entity.\\nThis field can not be set by the user at creation time, and the server\\nwill reject an attempt to do so. The field will be populated in read\\noperations. The field can (optionally) be specified when performing\\nupdate or delete operations, but the server is free to reject requests\\nthat do so in such a way that it breaks semantics.',\n },\n },\n required: ['name'],\n description: 'Metadata fields common to all versions/kinds of entity.',\n additionalProperties: {},\n },\n EntityRelation: {\n type: 'object',\n properties: {\n targetRef: {\n type: 'string',\n description: 'The entity ref of the target of this relation.',\n },\n type: {\n type: 'string',\n description: 'The type of the relation.',\n },\n },\n required: ['targetRef', 'type'],\n description:\n 'A relation of a specific type to another entity in the catalog.',\n additionalProperties: false,\n },\n Entity: {\n type: 'object',\n properties: {\n relations: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityRelation',\n },\n description:\n 'The relations that this entity has with other entities.',\n },\n spec: {\n $ref: '#/components/schemas/JsonObject',\n },\n metadata: {\n $ref: '#/components/schemas/EntityMeta',\n },\n kind: {\n type: 'string',\n description: 'The high level entity type being described.',\n },\n apiVersion: {\n type: 'string',\n description:\n 'The version of specification format for this particular entity that\\nthis is written against.',\n },\n },\n required: ['metadata', 'kind', 'apiVersion'],\n description:\n \"The parts of the format that's common to all versions/kinds of entity.\",\n },\n NullableEntity: {\n type: 'object',\n properties: {\n relations: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityRelation',\n },\n description:\n 'The relations that this entity has with other entities.',\n },\n spec: {\n $ref: '#/components/schemas/JsonObject',\n },\n metadata: {\n $ref: '#/components/schemas/EntityMeta',\n },\n kind: {\n type: 'string',\n description: 'The high level entity type being described.',\n },\n apiVersion: {\n type: 'string',\n description:\n 'The version of specification format for this particular entity that\\nthis is written against.',\n },\n },\n required: ['metadata', 'kind', 'apiVersion'],\n description:\n \"The parts of the format that's common to all versions/kinds of entity.\",\n nullable: true,\n },\n EntityAncestryResponse: {\n type: 'object',\n properties: {\n items: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n parentEntityRefs: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n entity: {\n $ref: '#/components/schemas/Entity',\n },\n },\n required: ['parentEntityRefs', 'entity'],\n },\n },\n rootEntityRef: {\n type: 'string',\n },\n },\n required: ['items', 'rootEntityRef'],\n additionalProperties: false,\n },\n EntitiesBatchResponse: {\n type: 'object',\n properties: {\n items: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/NullableEntity',\n },\n description:\n 'The list of entities, in the same order as the refs in the request. Entries\\nthat are null signify that no entity existed with that ref.',\n },\n },\n required: ['items'],\n additionalProperties: false,\n },\n EntityFacet: {\n type: 'object',\n properties: {\n value: {\n type: 'string',\n },\n count: {\n type: 'number',\n },\n },\n required: ['value', 'count'],\n additionalProperties: false,\n },\n EntityFacetsResponse: {\n type: 'object',\n properties: {\n facets: {\n type: 'object',\n additionalProperties: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityFacet',\n },\n },\n },\n },\n required: ['facets'],\n additionalProperties: false,\n },\n Location: {\n type: 'object',\n properties: {\n target: {\n type: 'string',\n },\n type: {\n type: 'string',\n },\n id: {\n type: 'string',\n },\n },\n required: ['target', 'type', 'id'],\n description: 'Entity location for a specific entity.',\n additionalProperties: false,\n },\n LocationSpec: {\n type: 'object',\n properties: {\n target: {\n type: 'string',\n },\n type: {\n type: 'string',\n },\n },\n required: ['target', 'type'],\n description: 'Holds the entity location information.',\n additionalProperties: false,\n },\n AnalyzeLocationExistingEntity: {\n type: 'object',\n properties: {\n entity: {\n $ref: '#/components/schemas/Entity',\n },\n isRegistered: {\n type: 'boolean',\n },\n location: {\n $ref: '#/components/schemas/LocationSpec',\n },\n },\n required: ['entity', 'isRegistered', 'location'],\n description:\n \"If the folder pointed to already contained catalog info yaml files, they are\\nread and emitted like this so that the frontend can inform the user that it\\nlocated them and can make sure to register them as well if they weren't\\nalready\",\n additionalProperties: false,\n },\n RecursivePartialEntityRelation: {\n type: 'object',\n properties: {\n targetRef: {\n type: 'string',\n description: 'The entity ref of the target of this relation.',\n },\n type: {\n type: 'string',\n description: 'The type of the relation.',\n },\n },\n description:\n 'A relation of a specific type to another entity in the catalog.',\n additionalProperties: false,\n },\n RecursivePartialEntityMeta: {\n allOf: [\n {\n $ref: '#/components/schemas/JsonObject',\n },\n {\n type: 'object',\n properties: {\n links: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/EntityLink',\n },\n description:\n 'A list of external hyperlinks related to the entity.',\n },\n tags: {\n type: 'array',\n items: {\n type: 'string',\n },\n description:\n 'A list of single-valued strings, to for example classify catalog entities in\\nvarious ways.',\n },\n annotations: {\n $ref: '#/components/schemas/MapStringString',\n },\n labels: {\n $ref: '#/components/schemas/MapStringString',\n },\n description: {\n type: 'string',\n description:\n 'A short (typically relatively few words, on one line) description of the\\nentity.',\n },\n title: {\n type: 'string',\n description:\n 'A display name of the entity, to be presented in user interfaces instead\\nof the `name` property above, when available.\\nThis field is sometimes useful when the `name` is cumbersome or ends up\\nbeing perceived as overly technical. The title generally does not have\\nas stringent format requirements on it, so it may contain special\\ncharacters and be more explanatory. Do keep it very short though, and\\navoid situations where a title can be confused with the name of another\\nentity, or where two entities share a title.\\nNote that this is only for display purposes, and may be ignored by some\\nparts of the code. Entity references still always make use of the `name`\\nproperty, not the title.',\n },\n namespace: {\n type: 'string',\n description: 'The namespace that the entity belongs to.',\n },\n name: {\n type: 'string',\n description:\n 'The name of the entity.\\nMust be unique within the catalog at any given point in time, for any\\ngiven namespace + kind pair. This value is part of the technical\\nidentifier of the entity, and as such it will appear in URLs, database\\ntables, entity references, and similar. It is subject to restrictions\\nregarding what characters are allowed.\\nIf you want to use a different, more human readable string with fewer\\nrestrictions on it in user interfaces, see the `title` field below.',\n },\n etag: {\n type: 'string',\n description:\n 'An opaque string that changes for each update operation to any part of\\nthe entity, including metadata.\\nThis field can not be set by the user at creation time, and the server\\nwill reject an attempt to do so. The field will be populated in read\\noperations. The field can (optionally) be specified when performing\\nupdate or delete operations, and the server will then reject the\\noperation if it does not match the current stored value.',\n },\n uid: {\n type: 'string',\n description:\n 'A globally unique ID for the entity.\\nThis field can not be set by the user at creation time, and the server\\nwill reject an attempt to do so. The field will be populated in read\\noperations. The field can (optionally) be specified when performing\\nupdate or delete operations, but the server is free to reject requests\\nthat do so in such a way that it breaks semantics.',\n },\n },\n description:\n 'Metadata fields common to all versions/kinds of entity.',\n },\n ],\n additionalProperties: false,\n },\n RecursivePartialEntity: {\n type: 'object',\n properties: {\n apiVersion: {\n type: 'string',\n description:\n 'The version of specification format for this particular entity that\\nthis is written against.',\n },\n kind: {\n type: 'string',\n description: 'The high level entity type being described.',\n },\n metadata: {\n $ref: '#/components/schemas/RecursivePartialEntityMeta',\n },\n spec: {\n $ref: '#/components/schemas/JsonObject',\n },\n relations: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/RecursivePartialEntityRelation',\n },\n description:\n 'The relations that this entity has with other entities.',\n },\n },\n description: 'Makes all keys of an entire hierarchy optional.',\n additionalProperties: false,\n },\n AnalyzeLocationEntityField: {\n type: 'object',\n properties: {\n description: {\n type: 'string',\n description:\n 'A text to show to the user to inform about the choices made. Like, it could say\\n\"Found a CODEOWNERS file that covers this target, so we suggest leaving this\\nfield empty; which would currently make it owned by X\" where X is taken from the\\ncodeowners file.',\n },\n value: {\n type: 'string',\n nullable: true,\n },\n state: {\n type: 'string',\n enum: [\n 'analysisSuggestedValue',\n 'analysisSuggestedNoValue',\n 'needsUserInput',\n ],\n description:\n 'The outcome of the analysis for this particular field',\n },\n field: {\n type: 'string',\n description:\n 'e.g. \"spec.owner\"? The frontend needs to know how to \"inject\" the field into the\\nentity again if the user wants to change it',\n },\n },\n required: ['description', 'value', 'state', 'field'],\n additionalProperties: false,\n },\n AnalyzeLocationGenerateEntity: {\n type: 'object',\n properties: {\n fields: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/AnalyzeLocationEntityField',\n },\n },\n entity: {\n $ref: '#/components/schemas/RecursivePartialEntity',\n },\n },\n required: ['fields', 'entity'],\n description:\n \"This is some form of representation of what the analyzer could deduce.\\nWe should probably have a chat about how this can best be conveyed to\\nthe frontend. It'll probably contain a (possibly incomplete) entity, plus\\nenough info for the frontend to know what form data to show to the user\\nfor overriding/completing the info.\",\n additionalProperties: false,\n },\n AnalyzeLocationResponse: {\n type: 'object',\n properties: {\n generateEntities: {\n items: {\n $ref: '#/components/schemas/AnalyzeLocationGenerateEntity',\n },\n type: 'array',\n },\n existingEntityFiles: {\n items: {\n $ref: '#/components/schemas/AnalyzeLocationExistingEntity',\n },\n type: 'array',\n },\n },\n required: ['generateEntities', 'existingEntityFiles'],\n additionalProperties: false,\n },\n LocationInput: {\n type: 'object',\n properties: {\n type: {\n type: 'string',\n },\n target: {\n type: 'string',\n },\n },\n required: ['type', 'target'],\n additionalProperties: false,\n },\n EntitiesQueryResponse: {\n type: 'object',\n properties: {\n items: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/Entity',\n },\n description: 'The list of entities paginated by a specific filter.',\n },\n totalItems: {\n type: 'number',\n },\n pageInfo: {\n type: 'object',\n properties: {\n nextCursor: {\n type: 'string',\n description: 'The cursor for the next batch of entities.',\n },\n prevCursor: {\n type: 'string',\n description: 'The cursor for the previous batch of entities.',\n },\n },\n },\n },\n required: ['items', 'totalItems', 'pageInfo'],\n additionalProperties: false,\n },\n },\n securitySchemes: {\n JWT: {\n type: 'http',\n scheme: 'bearer',\n bearerFormat: 'JWT',\n },\n },\n },\n paths: {\n '/refresh': {\n post: {\n operationId: 'RefreshEntity',\n tags: ['Entity'],\n description: 'Refresh the entity related to entityRef.',\n responses: {\n '200': {\n description: 'Refreshed',\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n authorizationToken: {\n type: 'string',\n },\n entityRef: {\n type: 'string',\n description:\n 'The reference to a single entity that should be refreshed',\n },\n },\n required: ['entityRef'],\n description:\n 'Options for requesting a refresh of entities in the catalog.',\n additionalProperties: false,\n },\n },\n },\n },\n },\n },\n '/entities': {\n get: {\n operationId: 'GetEntities',\n tags: ['Entity'],\n description: 'Get all entities matching a given filter.',\n responses: {\n '200': {\n description: '',\n content: {\n 'application/json': {\n schema: {\n type: 'array',\n items: {\n $ref: '#/components/schemas/Entity',\n },\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/fields',\n },\n {\n $ref: '#/components/parameters/limit',\n },\n {\n $ref: '#/components/parameters/filter',\n },\n {\n $ref: '#/components/parameters/offset',\n },\n {\n $ref: '#/components/parameters/after',\n },\n {\n name: 'order',\n in: 'query',\n allowReserved: true,\n required: false,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n },\n ],\n },\n },\n '/entities/by-uid/{uid}': {\n get: {\n operationId: 'GetEntityByUid',\n tags: ['Entity'],\n description: 'Get a single entity by the UID.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Entity',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/uid',\n },\n ],\n },\n delete: {\n operationId: 'DeleteEntityByUid',\n tags: ['Entity'],\n description: 'Delete a single entity by UID.',\n responses: {\n '204': {\n description: 'Deleted successfully.',\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/uid',\n },\n ],\n },\n },\n '/entities/by-name/{kind}/{namespace}/{name}': {\n get: {\n operationId: 'GetEntityByName',\n tags: ['Entity'],\n description: 'Get an entity by an entity ref.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Entity',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/kind',\n },\n {\n $ref: '#/components/parameters/namespace',\n },\n {\n $ref: '#/components/parameters/name',\n },\n ],\n },\n },\n '/entities/by-name/{kind}/{namespace}/{name}/ancestry': {\n get: {\n operationId: 'GetEntityAncestryByName',\n tags: ['Entity'],\n description: \"Get an entity's ancestry by entity ref.\",\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/EntityAncestryResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/kind',\n },\n {\n $ref: '#/components/parameters/namespace',\n },\n {\n $ref: '#/components/parameters/name',\n },\n ],\n },\n },\n '/entities/by-refs': {\n post: {\n operationId: 'GetEntitiesByRefs',\n tags: ['Entity'],\n description:\n 'Get a batch set of entities given an array of entityRefs.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/EntitiesBatchResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n requestBody: {\n required: false,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n required: ['entityRefs'],\n properties: {\n entityRefs: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n fields: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n },\n },\n examples: {\n 'Fetch Backstage entities': {\n value: {\n entityRefs: [\n 'component:default/backstage',\n 'api:default/backstage',\n ],\n },\n },\n 'Fetch annotations for backstage entity': {\n value: {\n entityRefs: ['component:default/backstage'],\n fields: ['metadata.annotations'],\n },\n },\n },\n },\n },\n },\n parameters: [\n {\n $ref: '#/components/parameters/filter',\n },\n ],\n },\n },\n '/entities/by-query': {\n get: {\n operationId: 'GetEntitiesByQuery',\n tags: ['Entity'],\n description: 'Search for entities by a given query.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/EntitiesQueryResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n $ref: '#/components/parameters/fields',\n },\n {\n $ref: '#/components/parameters/limit',\n },\n {\n $ref: '#/components/parameters/offset',\n },\n {\n $ref: '#/components/parameters/orderField',\n },\n {\n $ref: '#/components/parameters/cursor',\n },\n {\n $ref: '#/components/parameters/filter',\n },\n {\n name: 'fullTextFilterTerm',\n in: 'query',\n description: 'Text search term.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n {\n name: 'fullTextFilterFields',\n in: 'query',\n description:\n 'A comma separated list of fields to sort returned results by.',\n required: false,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n explode: false,\n style: 'form',\n },\n ],\n },\n },\n '/entity-facets': {\n get: {\n operationId: 'GetEntityFacets',\n tags: ['Entity'],\n description: 'Get all entity facets that match the given filters.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/EntityFacetsResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'query',\n name: 'facet',\n required: true,\n allowReserved: true,\n schema: {\n type: 'array',\n items: {\n type: 'string',\n },\n },\n examples: {\n 'Entities by kind': {\n value: ['kind'],\n },\n 'Entities by spec type': {\n value: ['spec.type'],\n },\n },\n },\n {\n $ref: '#/components/parameters/filter',\n },\n ],\n },\n },\n '/locations': {\n post: {\n operationId: 'CreateLocation',\n tags: ['Locations'],\n description: 'Create a location for a given target.',\n responses: {\n '201': {\n description: 'Created',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n exists: {\n type: 'boolean',\n },\n entities: {\n items: {\n $ref: '#/components/schemas/Entity',\n },\n type: 'array',\n },\n location: {\n $ref: '#/components/schemas/Location',\n },\n },\n required: ['entities', 'location'],\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'query',\n name: 'dryRun',\n required: false,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n target: {\n type: 'string',\n },\n type: {\n type: 'string',\n },\n },\n required: ['target', 'type'],\n },\n },\n },\n },\n },\n get: {\n operationId: 'GetLocations',\n tags: ['Locations'],\n description: 'Get all locations',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n data: {\n $ref: '#/components/schemas/Location',\n },\n },\n required: ['data'],\n },\n },\n },\n },\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n },\n },\n '/locations/{id}': {\n get: {\n operationId: 'GetLocation',\n tags: ['Locations'],\n description: 'Get a location by id.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Location',\n },\n },\n },\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'path',\n name: 'id',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n },\n delete: {\n operationId: 'DeleteLocation',\n tags: ['Locations'],\n description: 'Delete a location by id.',\n responses: {\n '204': {\n description: 'No content',\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'path',\n name: 'id',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n },\n },\n '/locations/by-entity/{kind}/{namespace}/{name}': {\n get: {\n operationId: 'getLocationByEntity',\n tags: ['Locations'],\n description: 'Get a location for entity.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Location',\n },\n },\n },\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [\n {\n in: 'path',\n name: 'kind',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n {\n in: 'path',\n name: 'namespace',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n {\n in: 'path',\n name: 'name',\n required: true,\n allowReserved: true,\n schema: {\n type: 'string',\n },\n },\n ],\n },\n },\n '/analyze-location': {\n post: {\n operationId: 'AnalyzeLocation',\n tags: ['Locations'],\n description: 'Validate a given location.',\n responses: {\n '200': {\n description: 'Ok',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/AnalyzeLocationResponse',\n },\n },\n },\n },\n '400': {\n $ref: '#/components/responses/ErrorResponse',\n },\n default: {\n $ref: '#/components/responses/ErrorResponse',\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n catalogFileName: {\n type: 'string',\n },\n location: {\n $ref: '#/components/schemas/LocationInput',\n },\n },\n required: ['location'],\n },\n },\n },\n },\n },\n },\n '/validate-entity': {\n post: {\n operationId: 'ValidateEntity',\n tags: ['Entity'],\n description:\n 'Validate that a passed in entity has no errors in schema.',\n responses: {\n '200': {\n description: 'Ok',\n },\n '400': {\n description: 'Validation errors.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n errors: {\n type: 'array',\n items: {\n type: 'object',\n properties: {\n name: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n },\n required: ['name', 'message'],\n additionalProperties: {},\n },\n },\n },\n required: ['errors'],\n },\n },\n },\n },\n },\n security: [\n {},\n {\n JWT: [],\n },\n ],\n parameters: [],\n requestBody: {\n required: true,\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n location: {\n type: 'string',\n },\n entity: {\n type: 'object',\n additionalProperties: {},\n },\n },\n required: ['location', 'entity'],\n },\n },\n },\n },\n },\n },\n },\n} as const;\nexport const createOpenApiRouter = async (\n options?: Parameters<\n typeof createValidatedOpenApiRouterFromGeneratedEndpointMap\n >['1'],\n) =>\n createValidatedOpenApiRouterFromGeneratedEndpointMap<EndpointMap>(\n spec,\n options,\n );\n"],"names":["createValidatedOpenApiRouterFromGeneratedEndpointMap"],"mappings":"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"}
|
|
@@ -2,10 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
var backendPluginApi = require('@backstage/backend-plugin-api');
|
|
4
4
|
var errors = require('@backstage/errors');
|
|
5
|
+
var pluginCatalogNode = require('@backstage/plugin-catalog-node');
|
|
5
6
|
var alpha = require('@backstage/plugin-catalog-node/alpha');
|
|
6
7
|
var pluginEventsNode = require('@backstage/plugin-events-node');
|
|
7
8
|
var lodash = require('lodash');
|
|
8
9
|
var CatalogBuilder = require('./CatalogBuilder.cjs.js');
|
|
10
|
+
var alpha$1 = require('@backstage/backend-plugin-api/alpha');
|
|
11
|
+
var createGetCatalogEntityAction = require('../actions/createGetCatalogEntityAction.cjs.js');
|
|
9
12
|
|
|
10
13
|
class CatalogLocationsExtensionPointImpl {
|
|
11
14
|
#locationTypes;
|
|
@@ -140,7 +143,9 @@ const catalogPlugin = backendPluginApi.createBackendPlugin({
|
|
|
140
143
|
auth: backendPluginApi.coreServices.auth,
|
|
141
144
|
httpAuth: backendPluginApi.coreServices.httpAuth,
|
|
142
145
|
auditor: backendPluginApi.coreServices.auditor,
|
|
143
|
-
events: pluginEventsNode.eventsServiceRef
|
|
146
|
+
events: pluginEventsNode.eventsServiceRef,
|
|
147
|
+
catalog: pluginCatalogNode.catalogServiceRef,
|
|
148
|
+
actionsRegistry: alpha$1.actionsRegistryServiceRef
|
|
144
149
|
},
|
|
145
150
|
async init({
|
|
146
151
|
logger,
|
|
@@ -154,6 +159,8 @@ const catalogPlugin = backendPluginApi.createBackendPlugin({
|
|
|
154
159
|
scheduler,
|
|
155
160
|
auth,
|
|
156
161
|
httpAuth,
|
|
162
|
+
catalog,
|
|
163
|
+
actionsRegistry,
|
|
157
164
|
auditor,
|
|
158
165
|
events
|
|
159
166
|
}) {
|
|
@@ -209,6 +216,10 @@ const catalogPlugin = backendPluginApi.createBackendPlugin({
|
|
|
209
216
|
lifecycle.addShutdownHook(() => processingEngine.stop());
|
|
210
217
|
}
|
|
211
218
|
httpRouter.use(router);
|
|
219
|
+
createGetCatalogEntityAction.createGetCatalogEntityAction({
|
|
220
|
+
catalog,
|
|
221
|
+
actionsRegistry
|
|
222
|
+
});
|
|
212
223
|
}
|
|
213
224
|
});
|
|
214
225
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CatalogPlugin.cjs.js","sources":["../../src/service/CatalogPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { Entity, Validators } from '@backstage/catalog-model';\nimport { ForwardedError } from '@backstage/errors';\nimport {\n CatalogProcessor,\n CatalogProcessorParser,\n EntityProvider,\n LocationAnalyzer,\n PlaceholderResolver,\n ScmLocationAnalyzer,\n} from '@backstage/plugin-catalog-node';\nimport {\n catalogAnalysisExtensionPoint,\n CatalogLocationsExtensionPoint,\n catalogLocationsExtensionPoint,\n CatalogModelExtensionPoint,\n catalogModelExtensionPoint,\n CatalogPermissionExtensionPoint,\n catalogPermissionExtensionPoint,\n CatalogPermissionRuleInput,\n CatalogProcessingExtensionPoint,\n catalogProcessingExtensionPoint,\n} from '@backstage/plugin-catalog-node/alpha';\nimport { eventsServiceRef } from '@backstage/plugin-events-node';\nimport { Permission } from '@backstage/plugin-permission-common';\nimport { merge } from 'lodash';\nimport { CatalogBuilder } from './CatalogBuilder';\n\nclass CatalogLocationsExtensionPointImpl\n implements CatalogLocationsExtensionPoint\n{\n #locationTypes: string[] | undefined;\n\n setAllowedLocationTypes(locationTypes: Array<string>) {\n this.#locationTypes = locationTypes;\n }\n\n get allowedLocationTypes() {\n return this.#locationTypes;\n }\n}\n\nclass CatalogProcessingExtensionPointImpl\n implements CatalogProcessingExtensionPoint\n{\n #processors = new Array<CatalogProcessor>();\n #entityProviders = new Array<EntityProvider>();\n #placeholderResolvers: Record<string, PlaceholderResolver> = {};\n #onProcessingErrorHandler?: (event: {\n unprocessedEntity: Entity;\n errors: Error[];\n }) => Promise<void> | void;\n\n addProcessor(\n ...processors: Array<CatalogProcessor | Array<CatalogProcessor>>\n ): void {\n this.#processors.push(...processors.flat());\n }\n\n addEntityProvider(\n ...providers: Array<EntityProvider | Array<EntityProvider>>\n ): void {\n this.#entityProviders.push(...providers.flat());\n }\n\n addPlaceholderResolver(key: string, resolver: PlaceholderResolver) {\n if (key in this.#placeholderResolvers)\n throw new Error(\n `A placeholder resolver for '${key}' has already been set up, please check your config.`,\n );\n this.#placeholderResolvers[key] = resolver;\n }\n\n setOnProcessingErrorHandler(\n handler: (event: {\n unprocessedEntity: Entity;\n errors: Error[];\n }) => Promise<void> | void,\n ) {\n this.#onProcessingErrorHandler = handler;\n }\n\n get processors() {\n return this.#processors;\n }\n\n get entityProviders() {\n return this.#entityProviders;\n }\n\n get placeholderResolvers() {\n return this.#placeholderResolvers;\n }\n\n get onProcessingErrorHandler() {\n return this.#onProcessingErrorHandler;\n }\n}\n\nclass CatalogPermissionExtensionPointImpl\n implements CatalogPermissionExtensionPoint\n{\n #permissions = new Array<Permission>();\n #permissionRules = new Array<CatalogPermissionRuleInput>();\n\n addPermissions(...permission: Array<Permission | Array<Permission>>): void {\n this.#permissions.push(...permission.flat());\n }\n\n addPermissionRules(\n ...rules: Array<\n CatalogPermissionRuleInput | Array<CatalogPermissionRuleInput>\n >\n ): void {\n this.#permissionRules.push(...rules.flat());\n }\n\n get permissions() {\n return this.#permissions;\n }\n\n get permissionRules() {\n return this.#permissionRules;\n }\n}\n\nclass CatalogModelExtensionPointImpl implements CatalogModelExtensionPoint {\n #fieldValidators: Partial<Validators> = {};\n\n setFieldValidators(validators: Partial<Validators>): void {\n merge(this.#fieldValidators, validators);\n }\n\n get fieldValidators() {\n return this.#fieldValidators;\n }\n\n #entityDataParser?: CatalogProcessorParser;\n\n setEntityDataParser(parser: CatalogProcessorParser): void {\n if (this.#entityDataParser) {\n throw new Error(\n 'Attempted to install second EntityDataParser. Only one can be set.',\n );\n }\n this.#entityDataParser = parser;\n }\n\n get entityDataParser() {\n return this.#entityDataParser;\n }\n}\n\n/**\n * Catalog plugin\n * @public\n */\nexport const catalogPlugin = createBackendPlugin({\n pluginId: 'catalog',\n register(env) {\n const processingExtensions = new CatalogProcessingExtensionPointImpl();\n // plugins depending on this API will be initialized before this plugins init method is executed.\n env.registerExtensionPoint(\n catalogProcessingExtensionPoint,\n processingExtensions,\n );\n\n let locationAnalyzerFactory:\n | ((options: {\n scmLocationAnalyzers: ScmLocationAnalyzer[];\n }) => Promise<{ locationAnalyzer: LocationAnalyzer }>)\n | undefined = undefined;\n const scmLocationAnalyzers = new Array<ScmLocationAnalyzer>();\n env.registerExtensionPoint(catalogAnalysisExtensionPoint, {\n setLocationAnalyzer(analyzerOrFactory) {\n if (locationAnalyzerFactory) {\n throw new Error('LocationAnalyzer has already been set');\n }\n if (typeof analyzerOrFactory === 'function') {\n locationAnalyzerFactory = analyzerOrFactory;\n } else {\n locationAnalyzerFactory = async () => ({\n locationAnalyzer: analyzerOrFactory,\n });\n }\n },\n addScmLocationAnalyzer(analyzer: ScmLocationAnalyzer) {\n scmLocationAnalyzers.push(analyzer);\n },\n });\n\n const permissionExtensions = new CatalogPermissionExtensionPointImpl();\n env.registerExtensionPoint(\n catalogPermissionExtensionPoint,\n permissionExtensions,\n );\n\n const modelExtensions = new CatalogModelExtensionPointImpl();\n env.registerExtensionPoint(catalogModelExtensionPoint, modelExtensions);\n\n const locationTypeExtensions = new CatalogLocationsExtensionPointImpl();\n env.registerExtensionPoint(\n catalogLocationsExtensionPoint,\n locationTypeExtensions,\n );\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n permissionsRegistry: coreServices.permissionsRegistry,\n database: coreServices.database,\n httpRouter: coreServices.httpRouter,\n lifecycle: coreServices.rootLifecycle,\n scheduler: coreServices.scheduler,\n auth: coreServices.auth,\n httpAuth: coreServices.httpAuth,\n auditor: coreServices.auditor,\n events: eventsServiceRef,\n },\n async init({\n logger,\n config,\n reader,\n database,\n permissions,\n permissionsRegistry,\n httpRouter,\n lifecycle,\n scheduler,\n auth,\n httpAuth,\n auditor,\n events,\n }) {\n const builder = await CatalogBuilder.create({\n config,\n reader,\n permissions,\n permissionsRegistry,\n database,\n scheduler,\n logger,\n auth,\n httpAuth,\n auditor,\n });\n\n builder.setEventBroker(events);\n\n if (processingExtensions.onProcessingErrorHandler) {\n builder.subscribe({\n onProcessingError: processingExtensions.onProcessingErrorHandler,\n });\n }\n builder.addProcessor(...processingExtensions.processors);\n builder.addEntityProvider(...processingExtensions.entityProviders);\n\n if (modelExtensions.entityDataParser) {\n builder.setEntityDataParser(modelExtensions.entityDataParser);\n }\n\n Object.entries(processingExtensions.placeholderResolvers).forEach(\n ([key, resolver]) => builder.setPlaceholderResolver(key, resolver),\n );\n if (locationAnalyzerFactory) {\n const { locationAnalyzer } = await locationAnalyzerFactory({\n scmLocationAnalyzers,\n }).catch(e => {\n throw new ForwardedError('Failed to create LocationAnalyzer', e);\n });\n builder.setLocationAnalyzer(locationAnalyzer);\n } else {\n builder.addLocationAnalyzers(...scmLocationAnalyzers);\n }\n builder.addPermissions(...permissionExtensions.permissions);\n builder.addPermissionRules(...permissionExtensions.permissionRules);\n builder.setFieldFormatValidators(modelExtensions.fieldValidators);\n\n if (locationTypeExtensions.allowedLocationTypes) {\n builder.setAllowedLocationTypes(\n locationTypeExtensions.allowedLocationTypes,\n );\n }\n\n const { processingEngine, router } = await builder.build();\n\n if (config.getOptional('catalog.processingInterval') ?? true) {\n lifecycle.addStartupHook(async () => {\n await processingEngine.start();\n });\n lifecycle.addShutdownHook(() => processingEngine.stop());\n }\n\n httpRouter.use(router);\n },\n });\n },\n});\n"],"names":["merge","createBackendPlugin","catalogProcessingExtensionPoint","catalogAnalysisExtensionPoint","catalogPermissionExtensionPoint","catalogModelExtensionPoint","catalogLocationsExtensionPoint","coreServices","eventsServiceRef","CatalogBuilder","ForwardedError"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CatalogPlugin.cjs.js","sources":["../../src/service/CatalogPlugin.ts"],"sourcesContent":["/*\n * Copyright 2022 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n coreServices,\n createBackendPlugin,\n} from '@backstage/backend-plugin-api';\nimport { Entity, Validators } from '@backstage/catalog-model';\nimport { ForwardedError } from '@backstage/errors';\nimport {\n CatalogProcessor,\n CatalogProcessorParser,\n catalogServiceRef,\n EntityProvider,\n LocationAnalyzer,\n PlaceholderResolver,\n ScmLocationAnalyzer,\n} from '@backstage/plugin-catalog-node';\nimport {\n catalogAnalysisExtensionPoint,\n CatalogLocationsExtensionPoint,\n catalogLocationsExtensionPoint,\n CatalogModelExtensionPoint,\n catalogModelExtensionPoint,\n CatalogPermissionExtensionPoint,\n catalogPermissionExtensionPoint,\n CatalogPermissionRuleInput,\n CatalogProcessingExtensionPoint,\n catalogProcessingExtensionPoint,\n} from '@backstage/plugin-catalog-node/alpha';\nimport { eventsServiceRef } from '@backstage/plugin-events-node';\nimport { Permission } from '@backstage/plugin-permission-common';\nimport { merge } from 'lodash';\nimport { CatalogBuilder } from './CatalogBuilder';\nimport { actionsRegistryServiceRef } from '@backstage/backend-plugin-api/alpha';\nimport { createGetCatalogEntityAction } from '../actions/createGetCatalogEntityAction';\n\nclass CatalogLocationsExtensionPointImpl\n implements CatalogLocationsExtensionPoint\n{\n #locationTypes: string[] | undefined;\n\n setAllowedLocationTypes(locationTypes: Array<string>) {\n this.#locationTypes = locationTypes;\n }\n\n get allowedLocationTypes() {\n return this.#locationTypes;\n }\n}\n\nclass CatalogProcessingExtensionPointImpl\n implements CatalogProcessingExtensionPoint\n{\n #processors = new Array<CatalogProcessor>();\n #entityProviders = new Array<EntityProvider>();\n #placeholderResolvers: Record<string, PlaceholderResolver> = {};\n #onProcessingErrorHandler?: (event: {\n unprocessedEntity: Entity;\n errors: Error[];\n }) => Promise<void> | void;\n\n addProcessor(\n ...processors: Array<CatalogProcessor | Array<CatalogProcessor>>\n ): void {\n this.#processors.push(...processors.flat());\n }\n\n addEntityProvider(\n ...providers: Array<EntityProvider | Array<EntityProvider>>\n ): void {\n this.#entityProviders.push(...providers.flat());\n }\n\n addPlaceholderResolver(key: string, resolver: PlaceholderResolver) {\n if (key in this.#placeholderResolvers)\n throw new Error(\n `A placeholder resolver for '${key}' has already been set up, please check your config.`,\n );\n this.#placeholderResolvers[key] = resolver;\n }\n\n setOnProcessingErrorHandler(\n handler: (event: {\n unprocessedEntity: Entity;\n errors: Error[];\n }) => Promise<void> | void,\n ) {\n this.#onProcessingErrorHandler = handler;\n }\n\n get processors() {\n return this.#processors;\n }\n\n get entityProviders() {\n return this.#entityProviders;\n }\n\n get placeholderResolvers() {\n return this.#placeholderResolvers;\n }\n\n get onProcessingErrorHandler() {\n return this.#onProcessingErrorHandler;\n }\n}\n\nclass CatalogPermissionExtensionPointImpl\n implements CatalogPermissionExtensionPoint\n{\n #permissions = new Array<Permission>();\n #permissionRules = new Array<CatalogPermissionRuleInput>();\n\n addPermissions(...permission: Array<Permission | Array<Permission>>): void {\n this.#permissions.push(...permission.flat());\n }\n\n addPermissionRules(\n ...rules: Array<\n CatalogPermissionRuleInput | Array<CatalogPermissionRuleInput>\n >\n ): void {\n this.#permissionRules.push(...rules.flat());\n }\n\n get permissions() {\n return this.#permissions;\n }\n\n get permissionRules() {\n return this.#permissionRules;\n }\n}\n\nclass CatalogModelExtensionPointImpl implements CatalogModelExtensionPoint {\n #fieldValidators: Partial<Validators> = {};\n\n setFieldValidators(validators: Partial<Validators>): void {\n merge(this.#fieldValidators, validators);\n }\n\n get fieldValidators() {\n return this.#fieldValidators;\n }\n\n #entityDataParser?: CatalogProcessorParser;\n\n setEntityDataParser(parser: CatalogProcessorParser): void {\n if (this.#entityDataParser) {\n throw new Error(\n 'Attempted to install second EntityDataParser. Only one can be set.',\n );\n }\n this.#entityDataParser = parser;\n }\n\n get entityDataParser() {\n return this.#entityDataParser;\n }\n}\n\n/**\n * Catalog plugin\n * @public\n */\nexport const catalogPlugin = createBackendPlugin({\n pluginId: 'catalog',\n register(env) {\n const processingExtensions = new CatalogProcessingExtensionPointImpl();\n // plugins depending on this API will be initialized before this plugins init method is executed.\n env.registerExtensionPoint(\n catalogProcessingExtensionPoint,\n processingExtensions,\n );\n\n let locationAnalyzerFactory:\n | ((options: {\n scmLocationAnalyzers: ScmLocationAnalyzer[];\n }) => Promise<{ locationAnalyzer: LocationAnalyzer }>)\n | undefined = undefined;\n const scmLocationAnalyzers = new Array<ScmLocationAnalyzer>();\n env.registerExtensionPoint(catalogAnalysisExtensionPoint, {\n setLocationAnalyzer(analyzerOrFactory) {\n if (locationAnalyzerFactory) {\n throw new Error('LocationAnalyzer has already been set');\n }\n if (typeof analyzerOrFactory === 'function') {\n locationAnalyzerFactory = analyzerOrFactory;\n } else {\n locationAnalyzerFactory = async () => ({\n locationAnalyzer: analyzerOrFactory,\n });\n }\n },\n addScmLocationAnalyzer(analyzer: ScmLocationAnalyzer) {\n scmLocationAnalyzers.push(analyzer);\n },\n });\n\n const permissionExtensions = new CatalogPermissionExtensionPointImpl();\n env.registerExtensionPoint(\n catalogPermissionExtensionPoint,\n permissionExtensions,\n );\n\n const modelExtensions = new CatalogModelExtensionPointImpl();\n env.registerExtensionPoint(catalogModelExtensionPoint, modelExtensions);\n\n const locationTypeExtensions = new CatalogLocationsExtensionPointImpl();\n env.registerExtensionPoint(\n catalogLocationsExtensionPoint,\n locationTypeExtensions,\n );\n\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n reader: coreServices.urlReader,\n permissions: coreServices.permissions,\n permissionsRegistry: coreServices.permissionsRegistry,\n database: coreServices.database,\n httpRouter: coreServices.httpRouter,\n lifecycle: coreServices.rootLifecycle,\n scheduler: coreServices.scheduler,\n auth: coreServices.auth,\n httpAuth: coreServices.httpAuth,\n auditor: coreServices.auditor,\n events: eventsServiceRef,\n catalog: catalogServiceRef,\n actionsRegistry: actionsRegistryServiceRef,\n },\n async init({\n logger,\n config,\n reader,\n database,\n permissions,\n permissionsRegistry,\n httpRouter,\n lifecycle,\n scheduler,\n auth,\n httpAuth,\n catalog,\n actionsRegistry,\n auditor,\n events,\n }) {\n const builder = await CatalogBuilder.create({\n config,\n reader,\n permissions,\n permissionsRegistry,\n database,\n scheduler,\n logger,\n auth,\n httpAuth,\n auditor,\n });\n\n builder.setEventBroker(events);\n\n if (processingExtensions.onProcessingErrorHandler) {\n builder.subscribe({\n onProcessingError: processingExtensions.onProcessingErrorHandler,\n });\n }\n builder.addProcessor(...processingExtensions.processors);\n builder.addEntityProvider(...processingExtensions.entityProviders);\n\n if (modelExtensions.entityDataParser) {\n builder.setEntityDataParser(modelExtensions.entityDataParser);\n }\n\n Object.entries(processingExtensions.placeholderResolvers).forEach(\n ([key, resolver]) => builder.setPlaceholderResolver(key, resolver),\n );\n if (locationAnalyzerFactory) {\n const { locationAnalyzer } = await locationAnalyzerFactory({\n scmLocationAnalyzers,\n }).catch(e => {\n throw new ForwardedError('Failed to create LocationAnalyzer', e);\n });\n builder.setLocationAnalyzer(locationAnalyzer);\n } else {\n builder.addLocationAnalyzers(...scmLocationAnalyzers);\n }\n builder.addPermissions(...permissionExtensions.permissions);\n builder.addPermissionRules(...permissionExtensions.permissionRules);\n builder.setFieldFormatValidators(modelExtensions.fieldValidators);\n\n if (locationTypeExtensions.allowedLocationTypes) {\n builder.setAllowedLocationTypes(\n locationTypeExtensions.allowedLocationTypes,\n );\n }\n\n const { processingEngine, router } = await builder.build();\n\n if (config.getOptional('catalog.processingInterval') ?? true) {\n lifecycle.addStartupHook(async () => {\n await processingEngine.start();\n });\n lifecycle.addShutdownHook(() => processingEngine.stop());\n }\n\n httpRouter.use(router);\n\n createGetCatalogEntityAction({\n catalog,\n actionsRegistry,\n });\n },\n });\n },\n});\n"],"names":["merge","createBackendPlugin","catalogProcessingExtensionPoint","catalogAnalysisExtensionPoint","catalogPermissionExtensionPoint","catalogModelExtensionPoint","catalogLocationsExtensionPoint","coreServices","eventsServiceRef","catalogServiceRef","actionsRegistryServiceRef","CatalogBuilder","ForwardedError","createGetCatalogEntityAction"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-catalog-backend",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "The Backstage backend plugin that provides the Backstage catalog",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "backend-plugin",
|
|
@@ -73,19 +73,19 @@
|
|
|
73
73
|
"test": "backstage-cli package test"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@backstage/backend-openapi-utils": "0.5.4
|
|
77
|
-
"@backstage/backend-plugin-api": "1.4.0
|
|
78
|
-
"@backstage/catalog-client": "1.10.1
|
|
79
|
-
"@backstage/catalog-model": "1.7.4",
|
|
80
|
-
"@backstage/config": "1.3.2",
|
|
81
|
-
"@backstage/errors": "1.2.7",
|
|
82
|
-
"@backstage/integration": "1.17.0",
|
|
83
|
-
"@backstage/plugin-catalog-common": "1.1.4",
|
|
84
|
-
"@backstage/plugin-catalog-node": "1.17.1
|
|
85
|
-
"@backstage/plugin-events-node": "0.4.12
|
|
86
|
-
"@backstage/plugin-permission-common": "0.9.0",
|
|
87
|
-
"@backstage/plugin-permission-node": "0.10.1
|
|
88
|
-
"@backstage/types": "1.2.1",
|
|
76
|
+
"@backstage/backend-openapi-utils": "^0.5.4",
|
|
77
|
+
"@backstage/backend-plugin-api": "^1.4.0",
|
|
78
|
+
"@backstage/catalog-client": "^1.10.1",
|
|
79
|
+
"@backstage/catalog-model": "^1.7.4",
|
|
80
|
+
"@backstage/config": "^1.3.2",
|
|
81
|
+
"@backstage/errors": "^1.2.7",
|
|
82
|
+
"@backstage/integration": "^1.17.0",
|
|
83
|
+
"@backstage/plugin-catalog-common": "^1.1.4",
|
|
84
|
+
"@backstage/plugin-catalog-node": "^1.17.1",
|
|
85
|
+
"@backstage/plugin-events-node": "^0.4.12",
|
|
86
|
+
"@backstage/plugin-permission-common": "^0.9.0",
|
|
87
|
+
"@backstage/plugin-permission-node": "^0.10.1",
|
|
88
|
+
"@backstage/types": "^1.2.1",
|
|
89
89
|
"@opentelemetry/api": "^1.9.0",
|
|
90
90
|
"codeowners-utils": "^1.0.2",
|
|
91
91
|
"core-js": "^3.6.5",
|
|
@@ -106,12 +106,12 @@
|
|
|
106
106
|
"zod": "^3.22.4"
|
|
107
107
|
},
|
|
108
108
|
"devDependencies": {
|
|
109
|
-
"@backstage/backend-defaults": "0.
|
|
110
|
-
"@backstage/backend-test-utils": "1.6.0
|
|
111
|
-
"@backstage/cli": "0.
|
|
112
|
-
"@backstage/plugin-permission-common": "0.9.0",
|
|
113
|
-
"@backstage/repo-tools": "0.14.0
|
|
114
|
-
"@backstage/test-utils": "1.7.
|
|
109
|
+
"@backstage/backend-defaults": "^0.11.0",
|
|
110
|
+
"@backstage/backend-test-utils": "^1.6.0",
|
|
111
|
+
"@backstage/cli": "^0.33.0",
|
|
112
|
+
"@backstage/plugin-permission-common": "^0.9.0",
|
|
113
|
+
"@backstage/repo-tools": "^0.14.0",
|
|
114
|
+
"@backstage/test-utils": "^1.7.9",
|
|
115
115
|
"@types/core-js": "^2.5.4",
|
|
116
116
|
"@types/express": "^4.17.6",
|
|
117
117
|
"@types/git-url-parse": "^9.0.0",
|