+async function generateWatchPlaylistHtmlPage (req: express.Request, res: express.Response) {
+ const html = await ClientHtml.getWatchPlaylistHTMLPage(req.params.id + '', req, res)
+
+ return sendHTML(html, res)
+}
+
+async function generateAccountHtmlPage (req: express.Request, res: express.Response) {
+ const html = await ClientHtml.getAccountHTMLPage(req.params.nameWithHost, req, res)
+
+ return sendHTML(html, res)
+}
+
+async function generateVideoChannelHtmlPage (req: express.Request, res: express.Response) {
+ const html = await ClientHtml.getVideoChannelHTMLPage(req.params.nameWithHost, req, res)
+
+ return sendHTML(html, res)
+}
+
+async function generateActorHtmlPage (req: express.Request, res: express.Response) {
+ const html = await ClientHtml.getActorHTMLPage(req.params.nameWithHost, req, res)
+
+ return sendHTML(html, res)
+}
+
+async function generateManifest (req: express.Request, res: express.Response) {
+ const manifestPhysicalPath = join(root(), 'client', 'dist', 'manifest.webmanifest')
+ const manifestJson = await readFile(manifestPhysicalPath, 'utf8')
+ const manifest = JSON.parse(manifestJson)
+
+ manifest.name = CONFIG.INSTANCE.NAME
+ manifest.short_name = CONFIG.INSTANCE.NAME
+ manifest.description = CONFIG.INSTANCE.SHORT_DESCRIPTION
+
+ res.json(manifest)
+}
+
+function serveClientOverride (path: string) {
+ return async (req: express.Request, res: express.Response, next: express.NextFunction) => {
+ try {
+ await fs.access(path, constants.F_OK)
+ // Serve override client
+ res.sendFile(path, { maxAge: STATIC_MAX_AGE.SERVER })
+ } catch {
+ // Serve dist client
+ next()
+ }
+ }
+}