diff --git a/.changeset/fair-tools-melt.md b/.changeset/fair-tools-melt.md new file mode 100644 index 0000000000..e63e4d5181 --- /dev/null +++ b/.changeset/fair-tools-melt.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +Added possibility to configure index plugin of the HTTP router service. diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index e5d7f9dedd..4d9fbea4a5 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -58,9 +58,14 @@ export const discoveryFactory: ( // @public (undocumented) export const httpRouterFactory: ( - options?: undefined, + options?: HttpRouterFactoryOptions | undefined, ) => ServiceFactory; +// @public (undocumented) +export type HttpRouterFactoryOptions = { + indexPlugin?: string; +}; + // @public (undocumented) export const loggerFactory: (options?: undefined) => ServiceFactory; diff --git a/packages/backend-app-api/src/services/implementations/httpRouterService.ts b/packages/backend-app-api/src/services/implementations/httpRouterService.ts index be4af664c4..c470443edc 100644 --- a/packages/backend-app-api/src/services/implementations/httpRouterService.ts +++ b/packages/backend-app-api/src/services/implementations/httpRouterService.ts @@ -24,6 +24,16 @@ import Router from 'express-promise-router'; import { Handler } from 'express'; import { createServiceBuilder } from '@backstage/backend-common'; +/** + * @public + */ +export type HttpRouterFactoryOptions = { + /** + * The plugin ID used for the index route. Defaults to 'app' + */ + indexPlugin?: string; +}; + /** @public */ export const httpRouterFactory = createServiceFactory({ service: httpRouterServiceRef, @@ -31,8 +41,9 @@ export const httpRouterFactory = createServiceFactory({ config: configServiceRef, plugin: pluginMetadataServiceRef, }, - async factory({ config }) { + async factory({ config }, options?: HttpRouterFactoryOptions) { const rootRouter = Router(); + const defaultPluginId = options?.indexPlugin ?? 'app'; const service = createServiceBuilder(module) .loadConfig(config) @@ -42,7 +53,7 @@ export const httpRouterFactory = createServiceFactory({ return async ({ plugin }) => { const pluginId = plugin.getId(); - const path = pluginId ? `/api/${pluginId}` : ''; + const path = pluginId === defaultPluginId ? '' : `/api/${pluginId}`; return { use(handler: Handler) { rootRouter.use(path, handler); diff --git a/packages/backend-app-api/src/services/implementations/index.ts b/packages/backend-app-api/src/services/implementations/index.ts index 714122ca11..608399bad9 100644 --- a/packages/backend-app-api/src/services/implementations/index.ts +++ b/packages/backend-app-api/src/services/implementations/index.ts @@ -25,3 +25,4 @@ export { schedulerFactory } from './schedulerService'; export { tokenManagerFactory } from './tokenManagerService'; export { urlReaderFactory } from './urlReaderService'; export { httpRouterFactory } from './httpRouterService'; +export type { HttpRouterFactoryOptions } from './httpRouterService';