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