Store manifest in memory so it does not need to be generated for every page request (#1433)
Co-authored-by: Dessalines <dessalines@users.noreply.github.com>
This commit is contained in:
parent
638ab2c462
commit
3db4fdddcd
4 changed files with 72 additions and 56 deletions
28
src/server/handlers/manifest-handler.ts
Normal file
28
src/server/handlers/manifest-handler.ts
Normal file
|
@ -0,0 +1,28 @@
|
|||
import type { Request, Response } from "express";
|
||||
import { LemmyHttp } from "lemmy-js-client";
|
||||
import { getHttpBaseInternal } from "../../shared/env";
|
||||
import { wrapClient } from "../../shared/services/HttpService";
|
||||
import generateManifestJson from "../utils/generate-manifest-json";
|
||||
import { setForwardedHeaders } from "../utils/set-forwarded-headers";
|
||||
|
||||
let manifest: Awaited<ReturnType<typeof generateManifestJson>> | undefined =
|
||||
undefined;
|
||||
|
||||
export default async (req: Request, res: Response) => {
|
||||
if (!manifest) {
|
||||
const headers = setForwardedHeaders(req.headers);
|
||||
const client = wrapClient(new LemmyHttp(getHttpBaseInternal(), headers));
|
||||
const site = await client.getSite({});
|
||||
|
||||
if (site.state === "success") {
|
||||
manifest = await generateManifestJson(site.data);
|
||||
} else {
|
||||
res.sendStatus(500);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
res.setHeader("content-type", "application/manifest+json");
|
||||
|
||||
res.send(manifest);
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue