Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
1import apolloClient from "@hey/indexer/apollo/client";
2import type { Context } from "hono";
3import type { HtmlEscapedString } from "hono/utils/html";
4import defaultMetadata from "@/utils/defaultMetadata";
5
6interface OgHelperOptions<T> {
7 ctx: Context;
8 query: any;
9 variables: Record<string, any>;
10 extractData: (data: any) => T | null;
11 buildHtml: (data: T) => HtmlEscapedString | Promise<HtmlEscapedString>;
12}
13
14const generateOg = async <T>({
15 ctx,
16 query,
17 variables,
18 extractData,
19 buildHtml
20}: OgHelperOptions<T>) => {
21 try {
22 const { data } = await apolloClient.query({
23 fetchPolicy: "no-cache",
24 query,
25 variables
26 });
27
28 const parsed = extractData(data);
29 if (!parsed) {
30 return ctx.html(defaultMetadata, 404);
31 }
32
33 const ogHtml = await buildHtml(parsed);
34 const cleanHtml = ogHtml.toString().replace(/\n\s+/g, "").trim();
35
36 return ctx.html(cleanHtml, 200);
37 } catch {
38 return ctx.html(defaultMetadata, 500);
39 }
40};
41
42export default generateOg;