From 7e48611ba6a84690cb9c0a661e0ac7e3b34c76a3 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 5 Jul 2022 15:14:21 +0200 Subject: [PATCH] =?UTF-8?q?chore:=20wiring=20up=20the=20catalog=20?= =?UTF-8?q?=F0=9F=93=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Co-authored-by: Johan Haals Co-authored-by: Patrik Oldsberg Signed-off-by: blam --- packages/backend-app-api/package.json | 2 + .../implementations/httpRouterService.ts | 44 +++++++++++++++++++ .../src/services/implementations/index.ts | 2 + packages/backend-plugin-api/package.json | 6 ++- .../definitions/httpRouterServiceRef.ts | 25 +++++++++-- .../src/services/definitions/index.ts | 2 +- packages/backend/src/next/index.ts | 18 ++++++-- 7 files changed, 90 insertions(+), 9 deletions(-) create mode 100644 packages/backend-app-api/src/services/implementations/httpRouterService.ts diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index b0bbb8cc8b..6ad48f86d5 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -38,6 +38,8 @@ "@backstage/backend-common": "^0.14.0", "@backstage/backend-tasks": "^0.3.2", "@backstage/plugin-permission-node": "^0.6.2", + "express": "^4.17.1", + "express-promise-router": "^4.1.0", "winston": "^3.2.1" }, "devDependencies": { diff --git a/packages/backend-app-api/src/services/implementations/httpRouterService.ts b/packages/backend-app-api/src/services/implementations/httpRouterService.ts new file mode 100644 index 0000000000..82dfb13218 --- /dev/null +++ b/packages/backend-app-api/src/services/implementations/httpRouterService.ts @@ -0,0 +1,44 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { + createServiceFactory, + httpRouterServiceRef, +} from '@backstage/backend-plugin-api'; +import Router from 'express-promise-router'; +import express, { Handler } from 'express'; + +export const httpRouterFactory = createServiceFactory({ + service: httpRouterServiceRef, + deps: {}, + factory: async () => { + const app = express(); + const rootRouter = Router(); + + app.use(rootRouter); + app.listen(8123); + + return async (pluginId?: string) => { + if (!pluginId) { + return rootRouter; + } + return { + use(handler: Handler) { + rootRouter.use(`/api/${pluginId}`, handler); + }, + }; + }; + }, +}); diff --git a/packages/backend-app-api/src/services/implementations/index.ts b/packages/backend-app-api/src/services/implementations/index.ts index f520b43cd4..e6b6604069 100644 --- a/packages/backend-app-api/src/services/implementations/index.ts +++ b/packages/backend-app-api/src/services/implementations/index.ts @@ -23,6 +23,7 @@ import { permissionsFactory } from './permissionsService'; import { schedulerFactory } from './schedulerService'; import { tokenManagerFactory } from './tokenManagerService'; import { urlReaderFactory } from './urlReaderService'; +import { httpRouterFactory } from './httpRouterService'; export const defaultServiceFactories = [ cacheFactory, @@ -34,4 +35,5 @@ export const defaultServiceFactories = [ schedulerFactory, tokenManagerFactory, urlReaderFactory, + httpRouterFactory, ]; diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index b5c724f764..dc52366c65 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -37,10 +37,12 @@ "@backstage/config": "^1.0.1", "@backstage/backend-common": "^0.14.0", "@backstage/plugin-permission-common": "^0.6.2", - "@backstage/backend-tasks": "^0.3.2" + "@backstage/backend-tasks": "^0.3.2", + "express": "^4.17.1" }, "devDependencies": { - "@backstage/cli": "^0.17.2-next.0" + "@backstage/cli": "^0.17.2-next.0", + "@types/express": "^4.17.6" }, "files": [ "dist", diff --git a/packages/backend-plugin-api/src/services/definitions/httpRouterServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/httpRouterServiceRef.ts index 9cf1089119..65a01fde3a 100644 --- a/packages/backend-plugin-api/src/services/definitions/httpRouterServiceRef.ts +++ b/packages/backend-plugin-api/src/services/definitions/httpRouterServiceRef.ts @@ -15,11 +15,30 @@ */ import { createServiceRef } from '../system/types'; +import { Handler } from 'express'; -export interface HttpRouterApi { - get(path: string): void; +// const apiRouter = Router(); +// apiRouter.use('/catalog', await catalog(catalogEnv)); +// const service = createServiceBuilder(module) +// .loadConfig(config) +// .addRouter('', await healthcheck(healthcheckEnv)) +// .addRouter('', metricsHandler()) +// .addRouter('/api', apiRouter) +// .addRouter('', await app(appEnv)); + +// interface BackstageRequest extends Request { +// identity?: BackstageIdentity; +// context?: Context; +// } + +// interface RequestIdentityService { +// getRequestIdentity(req: Request): BackstageIdentity | undefined; +// } + +export interface HttpRouterService { + use(handler: Handler): void; } -export const httpRouterServiceRef = createServiceRef({ +export const httpRouterServiceRef = createServiceRef({ id: 'core.httpRouter', }); diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index 30f2e009c5..556aa88c72 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -28,7 +28,7 @@ export { configServiceRef } from './configServiceRef'; export { httpRouterServiceRef } from './httpRouterServiceRef'; -export type { HttpRouterApi } from './httpRouterServiceRef'; +export type { HttpRouterService } from './httpRouterServiceRef'; export { loggerServiceRef } from './loggerServiceRef'; export type { Logger } from './loggerServiceRef'; export { urlReaderServiceRef } from './urlReaderServiceRef'; diff --git a/packages/backend/src/next/index.ts b/packages/backend/src/next/index.ts index 034ef5e5d2..de40592ea5 100644 --- a/packages/backend/src/next/index.ts +++ b/packages/backend/src/next/index.ts @@ -27,6 +27,7 @@ import { loggerServiceRef, permissionsServiceRef, urlReaderServiceRef, + httpRouterServiceRef, } from '@backstage/backend-plugin-api'; import { CatalogBuilder, @@ -72,8 +73,16 @@ export const catalogPlugin = createBackendPlugin({ reader: urlReaderServiceRef, permissions: permissionsServiceRef, database: databaseServiceRef, + httpRouter: httpRouterServiceRef, }, - async init({ logger, config, reader, database, permissions }) { + async init({ + logger, + config, + reader, + database, + permissions, + httpRouter, + }) { const winstonLogger = loggerToWinstonLogger(logger); const builder = await CatalogBuilder.create({ config, @@ -82,9 +91,12 @@ export const catalogPlugin = createBackendPlugin({ database, logger: winstonLogger, }); - builder.addProcessor(processingExtensions.processors); - const { processingEngine } = await builder.build(); + builder.addProcessor(...processingExtensions.processors); + const { processingEngine, router } = await builder.build(); + await processingEngine.start(); + + httpRouter.use(router); }, }); },