@drodil/backstage-plugin-catalog-backend-module-qeta 3.59.2 → 3.59.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.
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var backendPluginApi = require('@backstage/backend-plugin-api');
4
- var alpha = require('@backstage/plugin-catalog-node/alpha');
4
+ var pluginCatalogNode = require('@backstage/plugin-catalog-node');
5
5
  var CatalogEntityLinkProcessor = require('./processors/CatalogEntityLinkProcessor.cjs.js');
6
6
 
7
7
  const catalogModuleQeta = backendPluginApi.createBackendModule({
@@ -10,7 +10,7 @@ const catalogModuleQeta = backendPluginApi.createBackendModule({
10
10
  register(reg) {
11
11
  reg.registerInit({
12
12
  deps: {
13
- builder: alpha.catalogProcessingExtensionPoint,
13
+ builder: pluginCatalogNode.catalogProcessingExtensionPoint,
14
14
  cache: backendPluginApi.coreServices.cache,
15
15
  auth: backendPluginApi.coreServices.auth,
16
16
  logger: backendPluginApi.coreServices.logger,
@@ -1 +1 @@
1
- {"version":3,"file":"module.cjs.js","sources":["../src/module.ts"],"sourcesContent":["import {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha';\nimport { CatalogEntityLinkProcessor } from './processors/CatalogEntityLinkProcessor.ts';\n\nexport const catalogModuleQeta = createBackendModule({\n pluginId: 'catalog',\n moduleId: 'qeta',\n register(reg) {\n reg.registerInit({\n deps: {\n builder: catalogProcessingExtensionPoint,\n cache: coreServices.cache,\n auth: coreServices.auth,\n logger: coreServices.logger,\n discovery: coreServices.discovery,\n lifecycle: coreServices.rootLifecycle,\n },\n async init({ builder, cache, auth, logger, discovery, lifecycle }) {\n builder.addProcessor(\n new CatalogEntityLinkProcessor(\n auth,\n cache,\n logger,\n discovery,\n lifecycle,\n ),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","catalogProcessingExtensionPoint","coreServices","CatalogEntityLinkProcessor"],"mappings":";;;;;;AAOO,MAAM,oBAAoBA,oCAAoB,CAAA;AAAA,EACnD,QAAU,EAAA,SAAA;AAAA,EACV,QAAU,EAAA,MAAA;AAAA,EACV,SAAS,GAAK,EAAA;AACZ,IAAA,GAAA,CAAI,YAAa,CAAA;AAAA,MACf,IAAM,EAAA;AAAA,QACJ,OAAS,EAAAC,qCAAA;AAAA,QACT,OAAOC,6BAAa,CAAA,KAAA;AAAA,QACpB,MAAMA,6BAAa,CAAA,IAAA;AAAA,QACnB,QAAQA,6BAAa,CAAA,MAAA;AAAA,QACrB,WAAWA,6BAAa,CAAA,SAAA;AAAA,QACxB,WAAWA,6BAAa,CAAA;AAAA,OAC1B;AAAA,MACA,MAAM,KAAK,EAAE,OAAA,EAAS,OAAO,IAAM,EAAA,MAAA,EAAQ,SAAW,EAAA,SAAA,EAAa,EAAA;AACjE,QAAQ,OAAA,CAAA,YAAA;AAAA,UACN,IAAIC,qDAAA;AAAA,YACF,IAAA;AAAA,YACA,KAAA;AAAA,YACA,MAAA;AAAA,YACA,SAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA;AACF,KACD,CAAA;AAAA;AAEL,CAAC;;;;"}
1
+ {"version":3,"file":"module.cjs.js","sources":["../src/module.ts"],"sourcesContent":["import {\n coreServices,\n createBackendModule,\n} from '@backstage/backend-plugin-api';\nimport { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node';\nimport { CatalogEntityLinkProcessor } from './processors/CatalogEntityLinkProcessor.ts';\n\nexport const catalogModuleQeta = createBackendModule({\n pluginId: 'catalog',\n moduleId: 'qeta',\n register(reg) {\n reg.registerInit({\n deps: {\n builder: catalogProcessingExtensionPoint,\n cache: coreServices.cache,\n auth: coreServices.auth,\n logger: coreServices.logger,\n discovery: coreServices.discovery,\n lifecycle: coreServices.rootLifecycle,\n },\n async init({ builder, cache, auth, logger, discovery, lifecycle }) {\n builder.addProcessor(\n new CatalogEntityLinkProcessor(\n auth,\n cache,\n logger,\n discovery,\n lifecycle,\n ),\n );\n },\n });\n },\n});\n"],"names":["createBackendModule","catalogProcessingExtensionPoint","coreServices","CatalogEntityLinkProcessor"],"mappings":";;;;;;AAOO,MAAM,oBAAoBA,oCAAA,CAAoB;AAAA,EACnD,QAAA,EAAU,SAAA;AAAA,EACV,QAAA,EAAU,MAAA;AAAA,EACV,SAAS,GAAA,EAAK;AACZ,IAAA,GAAA,CAAI,YAAA,CAAa;AAAA,MACf,IAAA,EAAM;AAAA,QACJ,OAAA,EAASC,iDAAA;AAAA,QACT,OAAOC,6BAAA,CAAa,KAAA;AAAA,QACpB,MAAMA,6BAAA,CAAa,IAAA;AAAA,QACnB,QAAQA,6BAAA,CAAa,MAAA;AAAA,QACrB,WAAWA,6BAAA,CAAa,SAAA;AAAA,QACxB,WAAWA,6BAAA,CAAa;AAAA,OAC1B;AAAA,MACA,MAAM,KAAK,EAAE,OAAA,EAAS,OAAO,IAAA,EAAM,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAU,EAAG;AACjE,QAAA,OAAA,CAAQ,YAAA;AAAA,UACN,IAAIC,qDAAA;AAAA,YACF,IAAA;AAAA,YACA,KAAA;AAAA,YACA,MAAA;AAAA,YACA,SAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH;AACF,CAAC;;;;"}
@@ -13,6 +13,9 @@ class CatalogEntityLinkProcessor {
13
13
  void this.getEntityLinks();
14
14
  });
15
15
  }
16
+ auth;
17
+ cache;
18
+ logger;
16
19
  client;
17
20
  getProcessorName() {
18
21
  return "CatalogEntityLinkProcessor";
@@ -1 +1 @@
1
- {"version":3,"file":"CatalogEntityLinkProcessor.cjs.js","sources":["../../src/processors/CatalogEntityLinkProcessor.ts"],"sourcesContent":["import { CatalogProcessor } from '@backstage/plugin-catalog-node';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n AuthService,\n CacheService,\n DiscoveryService,\n LifecycleService,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport {\n EntityLinks,\n QetaApi,\n QetaClient,\n} from '@drodil/backstage-plugin-qeta-common';\n\nexport class CatalogEntityLinkProcessor implements CatalogProcessor {\n private readonly client: QetaApi;\n\n constructor(\n private readonly auth: AuthService,\n private readonly cache: CacheService,\n private readonly logger: LoggerService,\n discovery: DiscoveryService,\n lifecycle: LifecycleService,\n ) {\n this.client = new QetaClient({ discoveryApi: discovery });\n lifecycle.addStartupHook(() => {\n void this.getEntityLinks(); // warm up the cache on startup\n });\n }\n\n getProcessorName(): string {\n return 'CatalogEntityLinkProcessor';\n }\n\n async postProcessEntity(entity: Entity): Promise<Entity> {\n const entityRef = stringifyEntityRef(entity);\n const entityLinks = await this.getEntityLinks();\n const links = entityLinks\n .filter(link => link.entityRef === entityRef)\n .map(link => link.links)\n .flat();\n if (!links || links.length === 0) {\n return entity;\n }\n\n const existingLinks = entity.metadata.links ?? [];\n const uniqueLinks = [...existingLinks].filter(link => link.type !== 'qeta');\n for (const link of links) {\n if (!existingLinks.find(l => l.url === link.url)) {\n uniqueLinks.push(link);\n }\n }\n\n this.logger.debug(\n `Adding total of ${uniqueLinks.length}, new ${\n uniqueLinks.length - existingLinks.length\n } links to entity ${entityRef}`,\n );\n\n return {\n ...entity,\n metadata: {\n ...entity.metadata,\n links: uniqueLinks,\n },\n };\n }\n\n private async getEntityLinks(): Promise<EntityLinks[]> {\n const cached = await this.cache.get<string>('qeta-entity-links');\n if (cached) {\n try {\n return JSON.parse(cached);\n } catch (e) {\n this.logger.warn(`Failed to parse cached entity links: ${e}`);\n }\n }\n\n this.logger.debug(`Fetching entity links from Qeta`);\n const credentials = await this.auth.getOwnServiceCredentials();\n const { token } = await this.auth.getPluginRequestToken({\n onBehalfOf: credentials,\n targetPluginId: 'qeta',\n });\n const links = await this.client.getEntityLinks({ token });\n await this.cache.set('qeta-entity-links', JSON.stringify(links), {\n ttl: { hours: 1 }, // cache for 1 hour\n });\n return links;\n }\n}\n"],"names":["QetaClient","stringifyEntityRef"],"mappings":"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"}
1
+ {"version":3,"file":"CatalogEntityLinkProcessor.cjs.js","sources":["../../src/processors/CatalogEntityLinkProcessor.ts"],"sourcesContent":["import { CatalogProcessor } from '@backstage/plugin-catalog-node';\nimport { Entity, stringifyEntityRef } from '@backstage/catalog-model';\nimport {\n AuthService,\n CacheService,\n DiscoveryService,\n LifecycleService,\n LoggerService,\n} from '@backstage/backend-plugin-api';\nimport {\n EntityLinks,\n QetaApi,\n QetaClient,\n} from '@drodil/backstage-plugin-qeta-common';\n\nexport class CatalogEntityLinkProcessor implements CatalogProcessor {\n private readonly client: QetaApi;\n\n constructor(\n private readonly auth: AuthService,\n private readonly cache: CacheService,\n private readonly logger: LoggerService,\n discovery: DiscoveryService,\n lifecycle: LifecycleService,\n ) {\n this.client = new QetaClient({ discoveryApi: discovery });\n lifecycle.addStartupHook(() => {\n void this.getEntityLinks(); // warm up the cache on startup\n });\n }\n\n getProcessorName(): string {\n return 'CatalogEntityLinkProcessor';\n }\n\n async postProcessEntity(entity: Entity): Promise<Entity> {\n const entityRef = stringifyEntityRef(entity);\n const entityLinks = await this.getEntityLinks();\n const links = entityLinks\n .filter(link => link.entityRef === entityRef)\n .map(link => link.links)\n .flat();\n if (!links || links.length === 0) {\n return entity;\n }\n\n const existingLinks = entity.metadata.links ?? [];\n const uniqueLinks = [...existingLinks].filter(link => link.type !== 'qeta');\n for (const link of links) {\n if (!existingLinks.find(l => l.url === link.url)) {\n uniqueLinks.push(link);\n }\n }\n\n this.logger.debug(\n `Adding total of ${uniqueLinks.length}, new ${\n uniqueLinks.length - existingLinks.length\n } links to entity ${entityRef}`,\n );\n\n return {\n ...entity,\n metadata: {\n ...entity.metadata,\n links: uniqueLinks,\n },\n };\n }\n\n private async getEntityLinks(): Promise<EntityLinks[]> {\n const cached = await this.cache.get<string>('qeta-entity-links');\n if (cached) {\n try {\n return JSON.parse(cached);\n } catch (e) {\n this.logger.warn(`Failed to parse cached entity links: ${e}`);\n }\n }\n\n this.logger.debug(`Fetching entity links from Qeta`);\n const credentials = await this.auth.getOwnServiceCredentials();\n const { token } = await this.auth.getPluginRequestToken({\n onBehalfOf: credentials,\n targetPluginId: 'qeta',\n });\n const links = await this.client.getEntityLinks({ token });\n await this.cache.set('qeta-entity-links', JSON.stringify(links), {\n ttl: { hours: 1 }, // cache for 1 hour\n });\n return links;\n }\n}\n"],"names":["QetaClient","stringifyEntityRef"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@drodil/backstage-plugin-catalog-backend-module-qeta",
3
- "version": "3.59.2",
3
+ "version": "3.59.5",
4
4
  "license": "MIT",
5
5
  "description": "The qeta backend module for the catalog plugin.",
6
6
  "keywords": [
@@ -44,14 +44,14 @@
44
44
  "tsc": "tsc"
45
45
  },
46
46
  "dependencies": {
47
- "@backstage/backend-plugin-api": "^1.7.0",
48
- "@backstage/catalog-model": "^1.7.6",
49
- "@backstage/plugin-catalog-node": "^2.0.0",
50
- "@drodil/backstage-plugin-qeta-common": "^3.59.2"
47
+ "@backstage/backend-plugin-api": "^1.9.0",
48
+ "@backstage/catalog-model": "^1.8.0",
49
+ "@backstage/plugin-catalog-node": "^2.2.0",
50
+ "@drodil/backstage-plugin-qeta-common": "^3.59.5"
51
51
  },
52
52
  "devDependencies": {
53
- "@backstage/backend-test-utils": "^1.11.0",
54
- "@backstage/cli": "^0.35.4"
53
+ "@backstage/backend-test-utils": "^1.11.2",
54
+ "@backstage/cli": "^0.36.1"
55
55
  },
56
56
  "files": [
57
57
  "dist"