]> Untitled Git - lemmy-ui.git/blob - src/server/handlers/manifest-handler.ts
Merge branch 'main' into expand-video-embeds-to-fullwidth
[lemmy-ui.git] / src / server / handlers / manifest-handler.ts
1 import type { Request, Response } from "express";
2 import { LemmyHttp } from "lemmy-js-client";
3 import { getHttpBaseInternal } from "../../shared/env";
4 import { wrapClient } from "../../shared/services/HttpService";
5 import generateManifestJson from "../utils/generate-manifest-json";
6 import { setForwardedHeaders } from "../utils/set-forwarded-headers";
7
8 let manifest: Awaited<ReturnType<typeof generateManifestJson>> | undefined =
9   undefined;
10
11 export default async (req: Request, res: Response) => {
12   if (!manifest) {
13     const headers = setForwardedHeaders(req.headers);
14     const client = wrapClient(
15       new LemmyHttp(getHttpBaseInternal(), { fetchFunction: fetch, headers })
16     );
17     const site = await client.getSite({});
18
19     if (site.state === "success") {
20       manifest = await generateManifestJson(site.data);
21     } else {
22       res.sendStatus(500);
23       return;
24     }
25   }
26
27   res.setHeader("content-type", "application/manifest+json");
28
29   res.send(manifest);
30 };