Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 42 lines 1.0 kB view raw
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;