@backstage-community/plugin-ocm-backend 5.2.3 → 5.2.5

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 CHANGED
@@ -1,5 +1,22 @@
1
1
  ### Dependencies
2
2
 
3
+ ## 5.2.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 0f5c451: Updated dependency `prettier` to `3.4.2`.
8
+ - Updated dependencies [0f5c451]
9
+ - @backstage-community/plugin-ocm-common@3.6.3
10
+
11
+ ## 5.2.4
12
+
13
+ ### Patch Changes
14
+
15
+ - 056a5ca: Updated dependency `@openapitools/openapi-generator-cli` to `2.15.3`.
16
+ - 40f3226: Clean up api report warnings and remove unnecessary files
17
+ - Updated dependencies [40f3226]
18
+ - @backstage-community/plugin-ocm-common@3.6.2
19
+
3
20
  ## 5.2.3
4
21
 
5
22
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"bundle.cjs.js","sources":["../src/bundle.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\nimport { createBackendFeatureLoader } from '@backstage/backend-plugin-api';\n\nimport { catalogModuleOCMEntityProvider } from './providers';\nimport { ocmPlugin } from './service/router';\n\nexport const bundle = createBackendFeatureLoader({\n async loader() {\n return [catalogModuleOCMEntityProvider, ocmPlugin];\n },\n});\n"],"names":["createBackendFeatureLoader","catalogModuleOCMEntityProvider","ocmPlugin"],"mappings":";;;;;;;;;;;AAqBO,MAAM,SAASA,2CAA2B,CAAA;AAAA,EAC/C,MAAM,MAAS,GAAA;AACb,IAAO,OAAA,CAACC,yCAAgCC,gBAAS,CAAA,CAAA;AAAA,GACnD;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"bundle.cjs.js","sources":["../src/bundle.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\nimport { createBackendFeatureLoader } from '@backstage/backend-plugin-api';\n\nimport { catalogModuleOCMEntityProvider } from './providers';\nimport { ocmPlugin } from './service/router';\n\n/**\n * @public\n */\nexport const bundle = createBackendFeatureLoader({\n async loader() {\n return [catalogModuleOCMEntityProvider, ocmPlugin];\n },\n});\n"],"names":["createBackendFeatureLoader","catalogModuleOCMEntityProvider","ocmPlugin"],"mappings":";;;;;;;;;;;AAwBO,MAAM,SAASA,2CAA2B,CAAA;AAAA,EAC/C,MAAM,MAAS,GAAA;AACb,IAAO,OAAA,CAACC,yCAAgCC,gBAAS,CAAA,CAAA;AAAA,GACnD;AACF,CAAC;;;;"}
package/dist/index.d.ts CHANGED
@@ -4,9 +4,13 @@ import { Config } from '@backstage/config';
4
4
  import { EntityProvider, EntityProviderConnection } from '@backstage/plugin-catalog-node';
5
5
  import { CustomObjectsApi } from '@kubernetes/client-node';
6
6
 
7
+ /**
8
+ * @public
9
+ */
7
10
  declare const bundle: _backstage_backend_plugin_api.BackendFeature;
8
11
 
9
12
  /**
13
+ * @public
10
14
  * Provides OpenShift cluster resource entities from Open Cluster Management.
11
15
  */
12
16
  declare class ManagedClusterProvider implements EntityProvider {
@@ -34,8 +38,14 @@ declare class ManagedClusterProvider implements EntityProvider {
34
38
  run(): Promise<void>;
35
39
  }
36
40
 
41
+ /**
42
+ * @public
43
+ */
37
44
  declare const catalogModuleOCMEntityProvider: _backstage_backend_plugin_api.BackendFeature;
38
45
 
46
+ /**
47
+ * @public
48
+ */
39
49
  declare const ocmPlugin: _backstage_backend_plugin_api.BackendFeature;
40
50
 
41
51
  export { ManagedClusterProvider, catalogModuleOCMEntityProvider, bundle as default, ocmPlugin };
@@ -1 +1 @@
1
- {"version":3,"file":"ManagedClusterProvider.cjs.js","sources":["../../src/providers/ManagedClusterProvider.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\nimport type {\n LoggerService,\n SchedulerService,\n SchedulerServiceTaskRunner,\n} from '@backstage/backend-plugin-api';\nimport {\n ANNOTATION_LOCATION,\n ANNOTATION_ORIGIN_LOCATION,\n ResourceEntity,\n} from '@backstage/catalog-model';\nimport type { Config } from '@backstage/config';\nimport { InputError } from '@backstage/errors';\nimport type {\n EntityProvider,\n EntityProviderConnection,\n} from '@backstage/plugin-catalog-node';\n\nimport { CustomObjectsApi } from '@kubernetes/client-node';\n\nimport {\n ANNOTATION_CLUSTER_ID,\n ANNOTATION_PROVIDER_ID,\n} from '@backstage-community/plugin-ocm-common';\n\nimport {\n ANNOTATION_KUBERNETES_API_SERVER,\n CONSOLE_CLAIM,\n HUB_CLUSTER_NAME_IN_OCM,\n} from '../constants';\nimport { readOcmConfigs } from '../helpers/config';\nimport {\n getManagedCluster,\n hubApiClient,\n listManagedClusters,\n} from '../helpers/kubernetes';\nimport { getClaim, translateOCMToResource } from '../helpers/parser';\n\n/**\n * Provides OpenShift cluster resource entities from Open Cluster Management.\n */\nexport class ManagedClusterProvider implements EntityProvider {\n protected readonly client: CustomObjectsApi;\n protected readonly hubResourceName: string;\n protected readonly id: string;\n protected readonly owner: string;\n protected readonly logger: LoggerService;\n private readonly scheduleFn: () => Promise<void>;\n protected connection?: EntityProviderConnection;\n\n protected constructor(\n client: CustomObjectsApi,\n hubResourceName: string,\n id: string,\n deps: { logger: LoggerService },\n owner: string,\n taskRunner: SchedulerServiceTaskRunner,\n ) {\n this.client = client;\n this.hubResourceName = hubResourceName;\n this.id = id;\n this.logger = deps.logger;\n this.owner = owner;\n this.scheduleFn = this.createScheduleFn(taskRunner);\n }\n\n static fromConfig(\n deps: {\n config: Config;\n logger: LoggerService;\n },\n options:\n | { schedule: SchedulerServiceTaskRunner }\n | { scheduler: SchedulerService },\n ) {\n const { config, logger } = deps;\n\n return readOcmConfigs(config).map(providerConfig => {\n const client = hubApiClient(providerConfig, logger);\n let taskRunner;\n if ('scheduler' in options && providerConfig.schedule) {\n // Create a scheduled task runner using the provided scheduler and schedule configuration\n taskRunner = options.scheduler.createScheduledTaskRunner(\n providerConfig.schedule,\n );\n } else if ('schedule' in options) {\n // Use the provided schedule directly\n taskRunner = options.schedule;\n } else {\n throw new InputError(\n `No schedule provided via config for OCMProvider:${providerConfig.id}.`,\n );\n }\n\n return new ManagedClusterProvider(\n client,\n providerConfig.hubResourceName,\n providerConfig.id,\n deps,\n providerConfig.owner,\n taskRunner,\n );\n });\n }\n public async connect(connection: EntityProviderConnection): Promise<void> {\n this.connection = connection;\n await this.scheduleFn();\n }\n\n private createScheduleFn(\n taskRunner: SchedulerServiceTaskRunner,\n ): () => Promise<void> {\n return async () => {\n return taskRunner.run({\n id: `run_ocm_refresh_${this.getProviderName()}`,\n fn: async () => {\n try {\n await this.run();\n } catch (error: any) {\n // Ensure that we don't log any sensitive internal data:\n this.logger.error(\n 'Error while syncing cluster resources from Open Cluster Management',\n {\n // Default Error properties:\n name: error.name,\n message: error.message,\n stack: error.stack,\n // Additional status code if available:\n status: error.response?.status,\n },\n );\n }\n },\n });\n };\n }\n\n getProviderName(): string {\n return `ocm-managed-cluster:${this.id}`;\n }\n\n async run(): Promise<void> {\n if (!this.connection) {\n throw new Error('Not initialized');\n }\n\n this.logger.info(\n `Providing OpenShift cluster resources from Open Cluster Management`,\n );\n const hubConsole = getClaim(\n await getManagedCluster(this.client, HUB_CLUSTER_NAME_IN_OCM),\n CONSOLE_CLAIM,\n );\n\n const resources: ResourceEntity[] = (\n await listManagedClusters(this.client)\n ).items.map(i => {\n const normalizedName = translateOCMToResource(\n i.metadata!.name!,\n this.hubResourceName,\n );\n\n return {\n kind: 'Resource',\n apiVersion: 'backstage.io/v1beta1',\n metadata: {\n name: normalizedName,\n annotations: {\n /**\n * Can also be pulled from ManagedClusterInfo on .spec.masterEndpoint (details in discussion: https://github.com/janus-idp/backstage-plugins/pull/94#discussion_r1093228858)\n */\n [ANNOTATION_KUBERNETES_API_SERVER]:\n i.spec?.managedClusterClientConfigs?.[0]?.url,\n [ANNOTATION_CLUSTER_ID]: i.metadata?.labels?.clusterID!,\n [ANNOTATION_LOCATION]: this.getProviderName(),\n [ANNOTATION_ORIGIN_LOCATION]: this.getProviderName(),\n [ANNOTATION_PROVIDER_ID]: this.id,\n },\n links: [\n {\n url: getClaim(i, CONSOLE_CLAIM),\n title: 'OpenShift Console',\n icon: 'dashboard',\n },\n {\n url: `${hubConsole}/multicloud/infrastructure/clusters/details/${\n i.metadata!.name\n }/`,\n title: 'OCM Console',\n },\n {\n url: `https://console.redhat.com/openshift/details/s/${\n i.metadata!.labels!.clusterID\n }`,\n title: 'OpenShift Cluster Manager',\n },\n ],\n },\n spec: {\n owner: this.owner,\n type: 'kubernetes-cluster',\n },\n };\n });\n\n await this.connection.applyMutation({\n type: 'full',\n entities: resources.map(entity => ({\n entity,\n locationKey: this.getProviderName(),\n })),\n });\n }\n}\n"],"names":["config","readOcmConfigs","hubApiClient","InputError","getClaim","getManagedCluster","HUB_CLUSTER_NAME_IN_OCM","CONSOLE_CLAIM","listManagedClusters","translateOCMToResource","ANNOTATION_KUBERNETES_API_SERVER","ANNOTATION_CLUSTER_ID","ANNOTATION_LOCATION","ANNOTATION_ORIGIN_LOCATION","ANNOTATION_PROVIDER_ID"],"mappings":"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"}
1
+ {"version":3,"file":"ManagedClusterProvider.cjs.js","sources":["../../src/providers/ManagedClusterProvider.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\nimport type {\n LoggerService,\n SchedulerService,\n SchedulerServiceTaskRunner,\n} from '@backstage/backend-plugin-api';\nimport {\n ANNOTATION_LOCATION,\n ANNOTATION_ORIGIN_LOCATION,\n ResourceEntity,\n} from '@backstage/catalog-model';\nimport type { Config } from '@backstage/config';\nimport { InputError } from '@backstage/errors';\nimport type {\n EntityProvider,\n EntityProviderConnection,\n} from '@backstage/plugin-catalog-node';\n\nimport { CustomObjectsApi } from '@kubernetes/client-node';\n\nimport {\n ANNOTATION_CLUSTER_ID,\n ANNOTATION_PROVIDER_ID,\n} from '@backstage-community/plugin-ocm-common';\n\nimport {\n ANNOTATION_KUBERNETES_API_SERVER,\n CONSOLE_CLAIM,\n HUB_CLUSTER_NAME_IN_OCM,\n} from '../constants';\nimport { readOcmConfigs } from '../helpers/config';\nimport {\n getManagedCluster,\n hubApiClient,\n listManagedClusters,\n} from '../helpers/kubernetes';\nimport { getClaim, translateOCMToResource } from '../helpers/parser';\n\n/**\n * @public\n * Provides OpenShift cluster resource entities from Open Cluster Management.\n */\nexport class ManagedClusterProvider implements EntityProvider {\n protected readonly client: CustomObjectsApi;\n protected readonly hubResourceName: string;\n protected readonly id: string;\n protected readonly owner: string;\n protected readonly logger: LoggerService;\n private readonly scheduleFn: () => Promise<void>;\n protected connection?: EntityProviderConnection;\n\n protected constructor(\n client: CustomObjectsApi,\n hubResourceName: string,\n id: string,\n deps: { logger: LoggerService },\n owner: string,\n taskRunner: SchedulerServiceTaskRunner,\n ) {\n this.client = client;\n this.hubResourceName = hubResourceName;\n this.id = id;\n this.logger = deps.logger;\n this.owner = owner;\n this.scheduleFn = this.createScheduleFn(taskRunner);\n }\n\n static fromConfig(\n deps: {\n config: Config;\n logger: LoggerService;\n },\n options:\n | { schedule: SchedulerServiceTaskRunner }\n | { scheduler: SchedulerService },\n ) {\n const { config, logger } = deps;\n\n return readOcmConfigs(config).map(providerConfig => {\n const client = hubApiClient(providerConfig, logger);\n let taskRunner;\n if ('scheduler' in options && providerConfig.schedule) {\n // Create a scheduled task runner using the provided scheduler and schedule configuration\n taskRunner = options.scheduler.createScheduledTaskRunner(\n providerConfig.schedule,\n );\n } else if ('schedule' in options) {\n // Use the provided schedule directly\n taskRunner = options.schedule;\n } else {\n throw new InputError(\n `No schedule provided via config for OCMProvider:${providerConfig.id}.`,\n );\n }\n\n return new ManagedClusterProvider(\n client,\n providerConfig.hubResourceName,\n providerConfig.id,\n deps,\n providerConfig.owner,\n taskRunner,\n );\n });\n }\n public async connect(connection: EntityProviderConnection): Promise<void> {\n this.connection = connection;\n await this.scheduleFn();\n }\n\n private createScheduleFn(\n taskRunner: SchedulerServiceTaskRunner,\n ): () => Promise<void> {\n return async () => {\n return taskRunner.run({\n id: `run_ocm_refresh_${this.getProviderName()}`,\n fn: async () => {\n try {\n await this.run();\n } catch (error: any) {\n // Ensure that we don't log any sensitive internal data:\n this.logger.error(\n 'Error while syncing cluster resources from Open Cluster Management',\n {\n // Default Error properties:\n name: error.name,\n message: error.message,\n stack: error.stack,\n // Additional status code if available:\n status: error.response?.status,\n },\n );\n }\n },\n });\n };\n }\n\n getProviderName(): string {\n return `ocm-managed-cluster:${this.id}`;\n }\n\n async run(): Promise<void> {\n if (!this.connection) {\n throw new Error('Not initialized');\n }\n\n this.logger.info(\n `Providing OpenShift cluster resources from Open Cluster Management`,\n );\n const hubConsole = getClaim(\n await getManagedCluster(this.client, HUB_CLUSTER_NAME_IN_OCM),\n CONSOLE_CLAIM,\n );\n\n const resources: ResourceEntity[] = (\n await listManagedClusters(this.client)\n ).items.map(i => {\n const normalizedName = translateOCMToResource(\n i.metadata!.name!,\n this.hubResourceName,\n );\n\n return {\n kind: 'Resource',\n apiVersion: 'backstage.io/v1beta1',\n metadata: {\n name: normalizedName,\n annotations: {\n /**\n * Can also be pulled from ManagedClusterInfo on .spec.masterEndpoint (details in discussion: https://github.com/janus-idp/backstage-plugins/pull/94#discussion_r1093228858)\n */\n [ANNOTATION_KUBERNETES_API_SERVER]:\n i.spec?.managedClusterClientConfigs?.[0]?.url,\n [ANNOTATION_CLUSTER_ID]: i.metadata?.labels?.clusterID!,\n [ANNOTATION_LOCATION]: this.getProviderName(),\n [ANNOTATION_ORIGIN_LOCATION]: this.getProviderName(),\n [ANNOTATION_PROVIDER_ID]: this.id,\n },\n links: [\n {\n url: getClaim(i, CONSOLE_CLAIM),\n title: 'OpenShift Console',\n icon: 'dashboard',\n },\n {\n url: `${hubConsole}/multicloud/infrastructure/clusters/details/${\n i.metadata!.name\n }/`,\n title: 'OCM Console',\n },\n {\n url: `https://console.redhat.com/openshift/details/s/${\n i.metadata!.labels!.clusterID\n }`,\n title: 'OpenShift Cluster Manager',\n },\n ],\n },\n spec: {\n owner: this.owner,\n type: 'kubernetes-cluster',\n },\n };\n });\n\n await this.connection.applyMutation({\n type: 'full',\n entities: resources.map(entity => ({\n entity,\n locationKey: this.getProviderName(),\n })),\n });\n }\n}\n"],"names":["config","readOcmConfigs","hubApiClient","InputError","getClaim","getManagedCluster","HUB_CLUSTER_NAME_IN_OCM","CONSOLE_CLAIM","listManagedClusters","translateOCMToResource","ANNOTATION_KUBERNETES_API_SERVER","ANNOTATION_CLUSTER_ID","ANNOTATION_LOCATION","ANNOTATION_ORIGIN_LOCATION","ANNOTATION_PROVIDER_ID"],"mappings":";;;;;;;;;;AAyDO,MAAM,sBAAiD,CAAA;AAAA,EACzC,MAAA,CAAA;AAAA,EACA,eAAA,CAAA;AAAA,EACA,EAAA,CAAA;AAAA,EACA,KAAA,CAAA;AAAA,EACA,MAAA,CAAA;AAAA,EACF,UAAA,CAAA;AAAA,EACP,UAAA,CAAA;AAAA,EAEA,YACR,MACA,EAAA,eAAA,EACA,EACA,EAAA,IAAA,EACA,OACA,UACA,EAAA;AACA,IAAA,IAAA,CAAK,MAAS,GAAA,MAAA,CAAA;AACd,IAAA,IAAA,CAAK,eAAkB,GAAA,eAAA,CAAA;AACvB,IAAA,IAAA,CAAK,EAAK,GAAA,EAAA,CAAA;AACV,IAAA,IAAA,CAAK,SAAS,IAAK,CAAA,MAAA,CAAA;AACnB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AACb,IAAK,IAAA,CAAA,UAAA,GAAa,IAAK,CAAA,gBAAA,CAAiB,UAAU,CAAA,CAAA;AAAA,GACpD;AAAA,EAEA,OAAO,UACL,CAAA,IAAA,EAIA,OAGA,EAAA;AACA,IAAM,MAAA,UAAEA,QAAQ,EAAA,MAAA,EAAW,GAAA,IAAA,CAAA;AAE3B,IAAA,OAAOC,qBAAe,CAAAD,QAAM,CAAE,CAAA,GAAA,CAAI,CAAkB,cAAA,KAAA;AAClD,MAAM,MAAA,MAAA,GAASE,uBAAa,CAAA,cAAA,EAAgB,MAAM,CAAA,CAAA;AAClD,MAAI,IAAA,UAAA,CAAA;AACJ,MAAI,IAAA,WAAA,IAAe,OAAW,IAAA,cAAA,CAAe,QAAU,EAAA;AAErD,QAAA,UAAA,GAAa,QAAQ,SAAU,CAAA,yBAAA;AAAA,UAC7B,cAAe,CAAA,QAAA;AAAA,SACjB,CAAA;AAAA,OACF,MAAA,IAAW,cAAc,OAAS,EAAA;AAEhC,QAAA,UAAA,GAAa,OAAQ,CAAA,QAAA,CAAA;AAAA,OAChB,MAAA;AACL,QAAA,MAAM,IAAIC,iBAAA;AAAA,UACR,CAAA,gDAAA,EAAmD,eAAe,EAAE,CAAA,CAAA,CAAA;AAAA,SACtE,CAAA;AAAA,OACF;AAEA,MAAA,OAAO,IAAI,sBAAA;AAAA,QACT,MAAA;AAAA,QACA,cAAe,CAAA,eAAA;AAAA,QACf,cAAe,CAAA,EAAA;AAAA,QACf,IAAA;AAAA,QACA,cAAe,CAAA,KAAA;AAAA,QACf,UAAA;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EACA,MAAa,QAAQ,UAAqD,EAAA;AACxE,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAClB,IAAA,MAAM,KAAK,UAAW,EAAA,CAAA;AAAA,GACxB;AAAA,EAEQ,iBACN,UACqB,EAAA;AACrB,IAAA,OAAO,YAAY;AACjB,MAAA,OAAO,WAAW,GAAI,CAAA;AAAA,QACpB,EAAI,EAAA,CAAA,gBAAA,EAAmB,IAAK,CAAA,eAAA,EAAiB,CAAA,CAAA;AAAA,QAC7C,IAAI,YAAY;AACd,UAAI,IAAA;AACF,YAAA,MAAM,KAAK,GAAI,EAAA,CAAA;AAAA,mBACR,KAAY,EAAA;AAEnB,YAAA,IAAA,CAAK,MAAO,CAAA,KAAA;AAAA,cACV,oEAAA;AAAA,cACA;AAAA;AAAA,gBAEE,MAAM,KAAM,CAAA,IAAA;AAAA,gBACZ,SAAS,KAAM,CAAA,OAAA;AAAA,gBACf,OAAO,KAAM,CAAA,KAAA;AAAA;AAAA,gBAEb,MAAA,EAAQ,MAAM,QAAU,EAAA,MAAA;AAAA,eAC1B;AAAA,aACF,CAAA;AAAA,WACF;AAAA,SACF;AAAA,OACD,CAAA,CAAA;AAAA,KACH,CAAA;AAAA,GACF;AAAA,EAEA,eAA0B,GAAA;AACxB,IAAO,OAAA,CAAA,oBAAA,EAAuB,KAAK,EAAE,CAAA,CAAA,CAAA;AAAA,GACvC;AAAA,EAEA,MAAM,GAAqB,GAAA;AACzB,IAAI,IAAA,CAAC,KAAK,UAAY,EAAA;AACpB,MAAM,MAAA,IAAI,MAAM,iBAAiB,CAAA,CAAA;AAAA,KACnC;AAEA,IAAA,IAAA,CAAK,MAAO,CAAA,IAAA;AAAA,MACV,CAAA,kEAAA,CAAA;AAAA,KACF,CAAA;AACA,IAAA,MAAM,UAAa,GAAAC,eAAA;AAAA,MACjB,MAAMC,4BAAA,CAAkB,IAAK,CAAA,MAAA,EAAQC,iCAAuB,CAAA;AAAA,MAC5DC,uBAAA;AAAA,KACF,CAAA;AAEA,IAAM,MAAA,SAAA,GAAA,CACJ,MAAMC,8BAAoB,CAAA,IAAA,CAAK,MAAM,CACrC,EAAA,KAAA,CAAM,IAAI,CAAK,CAAA,KAAA;AACf,MAAA,MAAM,cAAiB,GAAAC,6BAAA;AAAA,QACrB,EAAE,QAAU,CAAA,IAAA;AAAA,QACZ,IAAK,CAAA,eAAA;AAAA,OACP,CAAA;AAEA,MAAO,OAAA;AAAA,QACL,IAAM,EAAA,UAAA;AAAA,QACN,UAAY,EAAA,sBAAA;AAAA,QACZ,QAAU,EAAA;AAAA,UACR,IAAM,EAAA,cAAA;AAAA,UACN,WAAa,EAAA;AAAA;AAAA;AAAA;AAAA,YAIX,CAACC,0CAAgC,GAC/B,EAAE,IAAM,EAAA,2BAAA,GAA8B,CAAC,CAAG,EAAA,GAAA;AAAA,YAC5C,CAACC,qCAAqB,GAAG,CAAA,CAAE,UAAU,MAAQ,EAAA,SAAA;AAAA,YAC7C,CAACC,gCAAmB,GAAG,IAAA,CAAK,eAAgB,EAAA;AAAA,YAC5C,CAACC,uCAA0B,GAAG,IAAA,CAAK,eAAgB,EAAA;AAAA,YACnD,CAACC,sCAAsB,GAAG,IAAK,CAAA,EAAA;AAAA,WACjC;AAAA,UACA,KAAO,EAAA;AAAA,YACL;AAAA,cACE,GAAA,EAAKV,eAAS,CAAA,CAAA,EAAGG,uBAAa,CAAA;AAAA,cAC9B,KAAO,EAAA,mBAAA;AAAA,cACP,IAAM,EAAA,WAAA;AAAA,aACR;AAAA,YACA;AAAA,cACE,KAAK,CAAG,EAAA,UAAU,CAChB,4CAAA,EAAA,CAAA,CAAE,SAAU,IACd,CAAA,CAAA,CAAA;AAAA,cACA,KAAO,EAAA,aAAA;AAAA,aACT;AAAA,YACA;AAAA,cACE,GAAK,EAAA,CAAA,+CAAA,EACH,CAAE,CAAA,QAAA,CAAU,OAAQ,SACtB,CAAA,CAAA;AAAA,cACA,KAAO,EAAA,2BAAA;AAAA,aACT;AAAA,WACF;AAAA,SACF;AAAA,QACA,IAAM,EAAA;AAAA,UACJ,OAAO,IAAK,CAAA,KAAA;AAAA,UACZ,IAAM,EAAA,oBAAA;AAAA,SACR;AAAA,OACF,CAAA;AAAA,KACD,CAAA,CAAA;AAED,IAAM,MAAA,IAAA,CAAK,WAAW,aAAc,CAAA;AAAA,MAClC,IAAM,EAAA,MAAA;AAAA,MACN,QAAA,EAAU,SAAU,CAAA,GAAA,CAAI,CAAW,MAAA,MAAA;AAAA,QACjC,MAAA;AAAA,QACA,WAAA,EAAa,KAAK,eAAgB,EAAA;AAAA,OAClC,CAAA,CAAA;AAAA,KACH,CAAA,CAAA;AAAA,GACH;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"module.cjs.js","sources":["../../src/providers/module.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\nimport {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\n\nimport { ManagedClusterProvider } from './ManagedClusterProvider';\n\nexport const catalogModuleOCMEntityProvider = createBackendModule({\n moduleId: 'catalog-backend-module-ocm',\n pluginId: 'catalog',\n register(env) {\n env.registerInit({\n deps: {\n catalog: catalogProcessingExtensionPoint,\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n scheduler: coreServices.scheduler,\n },\n async init({ catalog, config, logger, scheduler }) {\n catalog.addEntityProvider(\n ManagedClusterProvider.fromConfig(\n { config, logger },\n {\n schedule: scheduler.createScheduledTaskRunner({\n frequency: { hours: 1 },\n timeout: { minutes: 15 },\n initialDelay: { seconds: 15 },\n }),\n scheduler: scheduler,\n },\n ),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","catalogProcessingExtensionPoint","coreServices","ManagedClusterProvider"],"mappings":";;;;;;AAwBO,MAAM,iCAAiCA,oCAAoB,CAAA;AAAA,EAChE,QAAU,EAAA,4BAAA;AAAA,EACV,QAAU,EAAA,SAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,OAAS,EAAAC,qCAAA;AAAA,QACT,QAAQC,6BAAa,CAAA,UAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA,MAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,OAC1B;AAAA,MACA,MAAM,IAAK,CAAA,EAAE,SAAS,MAAQ,EAAA,MAAA,EAAQ,WAAa,EAAA;AACjD,QAAQ,OAAA,CAAA,iBAAA;AAAA,UACNC,6CAAuB,CAAA,UAAA;AAAA,YACrB,EAAE,QAAQ,MAAO,EAAA;AAAA,YACjB;AAAA,cACE,QAAA,EAAU,UAAU,yBAA0B,CAAA;AAAA,gBAC5C,SAAA,EAAW,EAAE,KAAA,EAAO,CAAE,EAAA;AAAA,gBACtB,OAAA,EAAS,EAAE,OAAA,EAAS,EAAG,EAAA;AAAA,gBACvB,YAAA,EAAc,EAAE,OAAA,EAAS,EAAG,EAAA;AAAA,eAC7B,CAAA;AAAA,cACD,SAAA;AAAA,aACF;AAAA,WACF;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"module.cjs.js","sources":["../../src/providers/module.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\nimport {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\n\nimport { ManagedClusterProvider } from './ManagedClusterProvider';\n\n/**\n * @public\n */\nexport const catalogModuleOCMEntityProvider = createBackendModule({\n moduleId: 'catalog-backend-module-ocm',\n pluginId: 'catalog',\n register(env) {\n env.registerInit({\n deps: {\n catalog: catalogProcessingExtensionPoint,\n config: coreServices.rootConfig,\n logger: coreServices.logger,\n scheduler: coreServices.scheduler,\n },\n async init({ catalog, config, logger, scheduler }) {\n catalog.addEntityProvider(\n ManagedClusterProvider.fromConfig(\n { config, logger },\n {\n schedule: scheduler.createScheduledTaskRunner({\n frequency: { hours: 1 },\n timeout: { minutes: 15 },\n initialDelay: { seconds: 15 },\n }),\n scheduler: scheduler,\n },\n ),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","catalogProcessingExtensionPoint","coreServices","ManagedClusterProvider"],"mappings":";;;;;;AA2BO,MAAM,iCAAiCA,oCAAoB,CAAA;AAAA,EAChE,QAAU,EAAA,4BAAA;AAAA,EACV,QAAU,EAAA,SAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,OAAS,EAAAC,qCAAA;AAAA,QACT,QAAQC,6BAAa,CAAA,UAAA;AAAA,QACrB,QAAQA,6BAAa,CAAA,MAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,OAC1B;AAAA,MACA,MAAM,IAAK,CAAA,EAAE,SAAS,MAAQ,EAAA,MAAA,EAAQ,WAAa,EAAA;AACjD,QAAQ,OAAA,CAAA,iBAAA;AAAA,UACNC,6CAAuB,CAAA,UAAA;AAAA,YACrB,EAAE,QAAQ,MAAO,EAAA;AAAA,YACjB;AAAA,cACE,QAAA,EAAU,UAAU,yBAA0B,CAAA;AAAA,gBAC5C,SAAA,EAAW,EAAE,KAAA,EAAO,CAAE,EAAA;AAAA,gBACtB,OAAA,EAAS,EAAE,OAAA,EAAS,EAAG,EAAA;AAAA,gBACvB,YAAA,EAAc,EAAE,OAAA,EAAS,EAAG,EAAA;AAAA,eAC7B,CAAA;AAAA,cACD,SAAA;AAAA,aACF;AAAA,WACF;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AACF,CAAC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2020 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 { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n coreServices,\n createBackendPlugin,\n HttpAuthService,\n LoggerService,\n PermissionsService,\n} from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\nimport { NotAllowedError } from '@backstage/errors';\nimport {\n AuthorizeResult,\n BasicPermission,\n} from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\n\nimport express, { Request } from 'express';\n\nimport {\n Cluster,\n ClusterOverview,\n ocmClusterReadPermission,\n ocmEntityPermissions,\n ocmEntityReadPermission,\n} from '@backstage-community/plugin-ocm-common';\n\nimport { readOcmConfigs } from '../helpers/config';\nimport {\n getManagedCluster,\n getManagedClusterInfo,\n hubApiClient,\n listManagedClusterInfos,\n listManagedClusters,\n} from '../helpers/kubernetes';\nimport {\n getClaim,\n parseClusterStatus,\n parseManagedCluster,\n parseNodeStatus,\n parseUpdateInfo,\n translateOCMToResource,\n translateResourceToOCM,\n} from '../helpers/parser';\nimport { createOpenApiRouter } from '../schema/openapi.generated';\nimport { ManagedClusterInfo } from '../types';\n\nasync function createRouter(deps: {\n config: Config;\n logger: LoggerService;\n httpAuth: HttpAuthService;\n permissions: PermissionsService;\n}) {\n const { config, logger, httpAuth, permissions } = deps;\n const router = await createOpenApiRouter();\n\n const permissionsIntegrationRouter = createPermissionIntegrationRouter({\n permissions: ocmEntityPermissions,\n });\n\n router.use(express.json());\n router.use(permissionsIntegrationRouter);\n\n const clients = Object.fromEntries(\n readOcmConfigs(config).map(provider => [\n provider.id,\n {\n client: hubApiClient(provider, logger),\n hubResourceName: provider.hubResourceName,\n },\n ]),\n );\n\n const authorize = async (request: Request, permission: BasicPermission) => {\n const decision = (\n await permissions.authorize([{ permission: permission }], {\n credentials: await httpAuth.credentials(request),\n })\n )[0];\n\n return decision;\n };\n\n router.get('/status/:providerId/:clusterName', async (request, response) => {\n const decision = await authorize(request, ocmEntityReadPermission);\n\n if (decision.result === AuthorizeResult.DENY) {\n throw new NotAllowedError('Unauthorized');\n }\n\n const { clusterName, providerId } = request.params;\n logger.debug(\n `Incoming status request for ${clusterName} cluster on ${providerId} hub`,\n );\n\n if (!clients.hasOwnProperty(providerId)) {\n throw Object.assign(new Error('Hub not found'), {\n statusCode: 404,\n name: 'HubNotFound',\n });\n }\n\n const normalizedClusterName = translateResourceToOCM(\n clusterName,\n clients[providerId].hubResourceName,\n );\n\n const mc = await getManagedCluster(\n clients[providerId].client,\n normalizedClusterName,\n );\n const mci = await getManagedClusterInfo(\n clients[providerId].client,\n normalizedClusterName,\n );\n\n response.send({\n name: clusterName,\n ...parseManagedCluster(mc),\n ...parseUpdateInfo(mci),\n } as Cluster);\n });\n\n router.get('/status', async (request, response) => {\n const decision = await authorize(request, ocmClusterReadPermission);\n\n if (decision.result === AuthorizeResult.DENY) {\n throw new NotAllowedError('Unauthorized');\n }\n\n logger.debug(`Incoming status request for all clusters`);\n\n const allClusters = await Promise.all(\n Object.values(clients).map(async c => {\n const mcs = await listManagedClusters(c.client);\n const mcis = await listManagedClusterInfos(c.client);\n\n return mcs.items.map(mc => {\n const mci =\n mcis.items.find(\n info => info.metadata?.name === mc.metadata!.name,\n ) || ({} as ManagedClusterInfo);\n\n return {\n name: translateOCMToResource(mc.metadata!.name!, c.hubResourceName),\n status: parseClusterStatus(mc),\n platform: getClaim(mc, 'platform.open-cluster-management.io'),\n openshiftVersion:\n mc.metadata!.labels?.openshiftVersion ??\n getClaim(mc, 'version.openshift.io'),\n nodes: parseNodeStatus(mci),\n ...parseUpdateInfo(mci),\n } as ClusterOverview;\n });\n }),\n );\n\n return response.send(allClusters.flat());\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n return router;\n}\n\nexport const ocmPlugin = createBackendPlugin({\n pluginId: 'ocm',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n http: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n permissions: coreServices.permissions,\n },\n async init({ config, logger, http, httpAuth, permissions }) {\n http.use(await createRouter({ config, logger, httpAuth, permissions }));\n },\n });\n },\n});\n"],"names":["config","createOpenApiRouter","createPermissionIntegrationRouter","ocmEntityPermissions","express","readOcmConfigs","hubApiClient","ocmEntityReadPermission","AuthorizeResult","NotAllowedError","translateResourceToOCM","getManagedCluster","getManagedClusterInfo","parseManagedCluster","parseUpdateInfo","ocmClusterReadPermission","listManagedClusters","listManagedClusterInfos","translateOCMToResource","parseClusterStatus","getClaim","parseNodeStatus","MiddlewareFactory","createBackendPlugin","coreServices"],"mappings":"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"}
1
+ {"version":3,"file":"router.cjs.js","sources":["../../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2020 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 { MiddlewareFactory } from '@backstage/backend-defaults/rootHttpRouter';\nimport {\n coreServices,\n createBackendPlugin,\n HttpAuthService,\n LoggerService,\n PermissionsService,\n} from '@backstage/backend-plugin-api';\nimport type { Config } from '@backstage/config';\nimport { NotAllowedError } from '@backstage/errors';\nimport {\n AuthorizeResult,\n BasicPermission,\n} from '@backstage/plugin-permission-common';\nimport { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node';\n\nimport express, { Request } from 'express';\n\nimport {\n Cluster,\n ClusterOverview,\n ocmClusterReadPermission,\n ocmEntityPermissions,\n ocmEntityReadPermission,\n} from '@backstage-community/plugin-ocm-common';\n\nimport { readOcmConfigs } from '../helpers/config';\nimport {\n getManagedCluster,\n getManagedClusterInfo,\n hubApiClient,\n listManagedClusterInfos,\n listManagedClusters,\n} from '../helpers/kubernetes';\nimport {\n getClaim,\n parseClusterStatus,\n parseManagedCluster,\n parseNodeStatus,\n parseUpdateInfo,\n translateOCMToResource,\n translateResourceToOCM,\n} from '../helpers/parser';\nimport { createOpenApiRouter } from '../schema/openapi.generated';\nimport { ManagedClusterInfo } from '../types';\n\nasync function createRouter(deps: {\n config: Config;\n logger: LoggerService;\n httpAuth: HttpAuthService;\n permissions: PermissionsService;\n}) {\n const { config, logger, httpAuth, permissions } = deps;\n const router = await createOpenApiRouter();\n\n const permissionsIntegrationRouter = createPermissionIntegrationRouter({\n permissions: ocmEntityPermissions,\n });\n\n router.use(express.json());\n router.use(permissionsIntegrationRouter);\n\n const clients = Object.fromEntries(\n readOcmConfigs(config).map(provider => [\n provider.id,\n {\n client: hubApiClient(provider, logger),\n hubResourceName: provider.hubResourceName,\n },\n ]),\n );\n\n const authorize = async (request: Request, permission: BasicPermission) => {\n const decision = (\n await permissions.authorize([{ permission: permission }], {\n credentials: await httpAuth.credentials(request),\n })\n )[0];\n\n return decision;\n };\n\n router.get('/status/:providerId/:clusterName', async (request, response) => {\n const decision = await authorize(request, ocmEntityReadPermission);\n\n if (decision.result === AuthorizeResult.DENY) {\n throw new NotAllowedError('Unauthorized');\n }\n\n const { clusterName, providerId } = request.params;\n logger.debug(\n `Incoming status request for ${clusterName} cluster on ${providerId} hub`,\n );\n\n if (!clients.hasOwnProperty(providerId)) {\n throw Object.assign(new Error('Hub not found'), {\n statusCode: 404,\n name: 'HubNotFound',\n });\n }\n\n const normalizedClusterName = translateResourceToOCM(\n clusterName,\n clients[providerId].hubResourceName,\n );\n\n const mc = await getManagedCluster(\n clients[providerId].client,\n normalizedClusterName,\n );\n const mci = await getManagedClusterInfo(\n clients[providerId].client,\n normalizedClusterName,\n );\n\n response.send({\n name: clusterName,\n ...parseManagedCluster(mc),\n ...parseUpdateInfo(mci),\n } as Cluster);\n });\n\n router.get('/status', async (request, response) => {\n const decision = await authorize(request, ocmClusterReadPermission);\n\n if (decision.result === AuthorizeResult.DENY) {\n throw new NotAllowedError('Unauthorized');\n }\n\n logger.debug(`Incoming status request for all clusters`);\n\n const allClusters = await Promise.all(\n Object.values(clients).map(async c => {\n const mcs = await listManagedClusters(c.client);\n const mcis = await listManagedClusterInfos(c.client);\n\n return mcs.items.map(mc => {\n const mci =\n mcis.items.find(\n info => info.metadata?.name === mc.metadata!.name,\n ) || ({} as ManagedClusterInfo);\n\n return {\n name: translateOCMToResource(mc.metadata!.name!, c.hubResourceName),\n status: parseClusterStatus(mc),\n platform: getClaim(mc, 'platform.open-cluster-management.io'),\n openshiftVersion:\n mc.metadata!.labels?.openshiftVersion ??\n getClaim(mc, 'version.openshift.io'),\n nodes: parseNodeStatus(mci),\n ...parseUpdateInfo(mci),\n } as ClusterOverview;\n });\n }),\n );\n\n return response.send(allClusters.flat());\n });\n\n const middleware = MiddlewareFactory.create({ logger, config });\n\n router.use(middleware.error());\n return router;\n}\n\n/**\n * @public\n */\nexport const ocmPlugin = createBackendPlugin({\n pluginId: 'ocm',\n register(env) {\n env.registerInit({\n deps: {\n logger: coreServices.logger,\n config: coreServices.rootConfig,\n http: coreServices.httpRouter,\n httpAuth: coreServices.httpAuth,\n permissions: coreServices.permissions,\n },\n async init({ config, logger, http, httpAuth, permissions }) {\n http.use(await createRouter({ config, logger, httpAuth, permissions }));\n },\n });\n },\n});\n"],"names":["config","createOpenApiRouter","createPermissionIntegrationRouter","ocmEntityPermissions","express","readOcmConfigs","hubApiClient","ocmEntityReadPermission","AuthorizeResult","NotAllowedError","translateResourceToOCM","getManagedCluster","getManagedClusterInfo","parseManagedCluster","parseUpdateInfo","ocmClusterReadPermission","listManagedClusters","listManagedClusterInfos","translateOCMToResource","parseClusterStatus","getClaim","parseNodeStatus","MiddlewareFactory","createBackendPlugin","coreServices"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@backstage-community/plugin-ocm-backend",
3
- "version": "5.2.3",
3
+ "version": "5.2.5",
4
4
  "main": "./dist/index.cjs.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "license": "Apache-2.0",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "configSchema": "config.d.ts",
45
45
  "dependencies": {
46
- "@backstage-community/plugin-ocm-common": "^3.6.1",
46
+ "@backstage-community/plugin-ocm-common": "^3.6.3",
47
47
  "@backstage/backend-defaults": "^0.5.2",
48
48
  "@backstage/backend-openapi-utils": "^0.2.0",
49
49
  "@backstage/backend-plugin-api": "^1.0.1",
@@ -62,12 +62,12 @@
62
62
  "@backstage/cli": "0.28.2",
63
63
  "@backstage/config": "1.2.0",
64
64
  "@backstage/plugin-catalog-backend": "1.27.1",
65
- "@openapitools/openapi-generator-cli": "2.13.4",
65
+ "@openapitools/openapi-generator-cli": "2.15.3",
66
66
  "@spotify/prettier-config": "^15.0.0",
67
67
  "@types/express": "4.17.21",
68
68
  "@types/supertest": "2.0.16",
69
69
  "msw": "1.3.5",
70
- "prettier": "3.3.3",
70
+ "prettier": "3.4.2",
71
71
  "supertest": "6.3.4"
72
72
  },
73
73
  "files": [