diff --git a/src/core/server/app/handlers/embed/stream.ts b/src/core/server/app/handlers/embed/stream.ts deleted file mode 100644 index 73b7d0ea4..000000000 --- a/src/core/server/app/handlers/embed/stream.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { RequestHandler } from "express"; - -export const streamHandler: RequestHandler = (req, res) => { - res.render("stream"); -}; diff --git a/src/core/server/app/middleware/cacheHeaders.ts b/src/core/server/app/middleware/cacheHeaders.ts index dc43b9708..f11bfd901 100644 --- a/src/core/server/app/middleware/cacheHeaders.ts +++ b/src/core/server/app/middleware/cacheHeaders.ts @@ -9,7 +9,7 @@ export const nocacheMiddleware: RequestHandler = (req, res, next) => { next(); }; -export const cacheHeadersMiddleware = (duration: string): RequestHandler => { +export const cacheHeadersMiddleware = (duration?: string): RequestHandler => { const maxAge = duration ? Math.floor(ms(duration) / 1000) : false; if (!maxAge) { return nocacheMiddleware; diff --git a/src/core/server/app/router/client.ts b/src/core/server/app/router/client.ts new file mode 100644 index 000000000..d827b715d --- /dev/null +++ b/src/core/server/app/router/client.ts @@ -0,0 +1,29 @@ +import express from "express"; + +import { cacheHeadersMiddleware } from "talk-server/app/middleware/cacheHeaders"; + +export interface ClientTargetHandlerOptions { + /** + * view is the name of the template to render. + */ + view: string; + + /** + * cacheDuration is the cache duration that a given request should be cached for. + */ + cacheDuration?: string; +} + +export function createClientTargetHandler({ + view, + cacheDuration = "1h", +}: ClientTargetHandlerOptions) { + // Create a router. + const router = express.Router(); + + router.get("/", cacheHeadersMiddleware(cacheDuration), (req, res) => + res.render(view) + ); + + return router; +} diff --git a/src/core/server/app/router.ts b/src/core/server/app/router/index.ts similarity index 88% rename from src/core/server/app/router.ts rename to src/core/server/app/router/index.ts index df0d94b32..43060d768 100644 --- a/src/core/server/app/router.ts +++ b/src/core/server/app/router/index.ts @@ -1,25 +1,21 @@ import express from "express"; import passport from "passport"; -import { adminHandler } from "talk-server/app/handlers/admin/admin"; +import { AppOptions } from "talk-server/app"; import { logoutHandler, signupHandler, } from "talk-server/app/handlers/auth/local"; -import { streamHandler } from "talk-server/app/handlers/embed/stream"; +import { nocacheMiddleware } from "talk-server/app/middleware/cacheHeaders"; import { apiErrorHandler } from "talk-server/app/middleware/error"; import { errorLogger } from "talk-server/app/middleware/logging"; import { wrapAuthn } from "talk-server/app/middleware/passport"; +import playground from "talk-server/app/middleware/playground"; import tenantMiddleware from "talk-server/app/middleware/tenant"; import managementGraphMiddleware from "talk-server/graph/management/middleware"; import tenantGraphMiddleware from "talk-server/graph/tenant/middleware"; -import { - cacheHeadersMiddleware, - nocacheMiddleware, -} from "talk-server/app/middleware/cacheHeaders"; -import { AppOptions } from "./index"; -import playground from "./middleware/playground"; +import { createClientTargetHandler } from "./client"; async function createManagementRouter(app: AppOptions, options: RouterOptions) { const router = express.Router(); @@ -128,9 +124,6 @@ export async function createRouter(app: AppOptions, options: RouterOptions) { // Create a router. const router = express.Router(); - // Handle the admin handler. - router.get("/admin", adminHandler); - router.use("/api", nocacheMiddleware, await createAPIRouter(app, options)); if (app.config.get("env") === "development") { @@ -153,8 +146,9 @@ export async function createRouter(app: AppOptions, options: RouterOptions) { ); } - // Handle the stream handler. - router.get("/embed/stream", cacheHeadersMiddleware("1h"), streamHandler); + // Add the client targets. + router.get("/embed/stream", createClientTargetHandler({ view: "stream" })); + router.get("/admin", createClientTargetHandler({ view: "admin" })); return router; }