diff --git a/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts b/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts index 35a5171c83..6b393ce036 100644 --- a/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts +++ b/plugins/app-backend/src/lib/assets/StaticAssetsStore.ts @@ -19,7 +19,7 @@ import { Knex } from 'knex'; import { Logger } from 'winston'; import { DateTime } from 'luxon'; import partition from 'lodash/partition'; -import { StaticAsset, StaticAssetInput } from './types'; +import { StaticAsset, StaticAssetInput, StaticAssetProvider } from './types'; const migrationsDir = resolvePackagePath( '@backstage/plugin-app-backend', @@ -43,7 +43,7 @@ export interface StaticAssetsStoreOptions { * * @internal */ -export class StaticAssetsStore { +export class StaticAssetsStore implements StaticAssetProvider { #db: Knex; #logger: Logger; diff --git a/plugins/app-backend/src/lib/assets/createStaticAssetsStoreMiddleware.test.ts b/plugins/app-backend/src/lib/assets/createStaticAssetMiddleware.test.ts similarity index 94% rename from plugins/app-backend/src/lib/assets/createStaticAssetsStoreMiddleware.test.ts rename to plugins/app-backend/src/lib/assets/createStaticAssetMiddleware.test.ts index 9a936a76cb..63cb3a121f 100644 --- a/plugins/app-backend/src/lib/assets/createStaticAssetsStoreMiddleware.test.ts +++ b/plugins/app-backend/src/lib/assets/createStaticAssetMiddleware.test.ts @@ -16,16 +16,16 @@ import express from 'express'; import request from 'supertest'; -import { createStaticAssetsStoreMiddleware } from './createStaticAssetsStoreMiddleware'; +import { createStaticAssetMiddleware } from './createStaticAssetMiddleware'; import { StaticAssetsStore } from './StaticAssetsStore'; const mockStore = { getAsset: jest.fn(), } as unknown as jest.Mocked; -describe('createStaticAssetsStoreMiddleware', () => { +describe('createStaticAssetMiddleware', () => { const app = express(); - app.use(createStaticAssetsStoreMiddleware(mockStore)); + app.use(createStaticAssetMiddleware(mockStore)); app.use((_req, res) => { res.status(404).end('Not Found'); }); diff --git a/plugins/app-backend/src/lib/assets/createStaticAssetsStoreMiddleware.ts b/plugins/app-backend/src/lib/assets/createStaticAssetMiddleware.ts similarity index 85% rename from plugins/app-backend/src/lib/assets/createStaticAssetsStoreMiddleware.ts rename to plugins/app-backend/src/lib/assets/createStaticAssetMiddleware.ts index 55fe30cbc3..60458436dd 100644 --- a/plugins/app-backend/src/lib/assets/createStaticAssetsStoreMiddleware.ts +++ b/plugins/app-backend/src/lib/assets/createStaticAssetMiddleware.ts @@ -16,11 +16,16 @@ import { extname } from 'path'; import { RequestHandler } from 'express'; -import { StaticAssetsStore } from './StaticAssetsStore'; +import { StaticAssetProvider } from './types'; import { CACHE_CONTROL_MAX_CACHE } from '../headers'; -export function createStaticAssetsStoreMiddleware( - store: StaticAssetsStore, +/** + * Creates a middleware that serves static assets from a static asset provider + * + * @internal + */ +export function createStaticAssetMiddleware( + store: StaticAssetProvider, ): RequestHandler { return (req, res, next) => { if (req.method !== 'GET' && req.method !== 'HEAD') { @@ -28,6 +33,7 @@ export function createStaticAssetsStoreMiddleware( return; } + // Let's not assume we're in promise-router Promise.resolve( (async () => { // Drop leading slashes from the incoming path diff --git a/plugins/app-backend/src/lib/assets/findStaticAssets.ts b/plugins/app-backend/src/lib/assets/findStaticAssets.ts index 1e4ba83982..7ecea7146e 100644 --- a/plugins/app-backend/src/lib/assets/findStaticAssets.ts +++ b/plugins/app-backend/src/lib/assets/findStaticAssets.ts @@ -19,6 +19,11 @@ import globby from 'globby'; import { StaticAssetInput } from './types'; import { resolveSafeChildPath } from '@backstage/backend-common'; +/** + * Finds all static assets within a directory + * + * @internal + */ export async function findStaticAssets( staticDir: string, ): Promise { diff --git a/plugins/app-backend/src/lib/assets/index.ts b/plugins/app-backend/src/lib/assets/index.ts index cb83f153dd..3a158b4392 100644 --- a/plugins/app-backend/src/lib/assets/index.ts +++ b/plugins/app-backend/src/lib/assets/index.ts @@ -15,6 +15,10 @@ */ export { StaticAssetsStore } from './StaticAssetsStore'; -export type { StaticAsset, StaticAssetInput } from './types'; +export type { + StaticAsset, + StaticAssetInput, + StaticAssetProvider, +} from './types'; export { findStaticAssets } from './findStaticAssets'; -export { createStaticAssetsStoreMiddleware } from './createStaticAssetsStoreMiddleware'; +export { createStaticAssetMiddleware } from './createStaticAssetMiddleware'; diff --git a/plugins/app-backend/src/lib/assets/types.ts b/plugins/app-backend/src/lib/assets/types.ts index c5a01fbaea..464d818d3e 100644 --- a/plugins/app-backend/src/lib/assets/types.ts +++ b/plugins/app-backend/src/lib/assets/types.ts @@ -24,3 +24,7 @@ export interface StaticAsset { content: Buffer; lastModifiedAt: Date; } + +export interface StaticAssetProvider { + getAsset(path: string): Promise; +} diff --git a/plugins/app-backend/src/service/router.ts b/plugins/app-backend/src/service/router.ts index cc476eab91..af13e60d3e 100644 --- a/plugins/app-backend/src/service/router.ts +++ b/plugins/app-backend/src/service/router.ts @@ -30,7 +30,7 @@ import { injectConfig, readConfigs } from '../lib/config'; import { StaticAssetsStore, findStaticAssets, - createStaticAssetsStoreMiddleware, + createStaticAssetMiddleware, } from '../lib/assets'; import { CACHE_CONTROL_MAX_CACHE, @@ -132,7 +132,7 @@ export async function createRouter( // Remove any assets that are older than 7 days await store.trimAssets({ maxAgeSeconds: 60 * 60 * 24 * 7 }); - staticRouter.use(createStaticAssetsStoreMiddleware(store)); + staticRouter.use(createStaticAssetMiddleware(store)); } if (staticFallbackHandler) {