Hey is a decentralized and permissionless social media app built with Lens Protocol 馃尶
at main 70 lines 2.7 kB view raw
1import { 2 BRAND_COLOR, 3 STATIC_IMAGES_URL, 4 TRANSFORMS 5} from "@hey/data/constants"; 6import escapeHtml from "@hey/helpers/escapeHtml"; 7import getAvatar from "@hey/helpers/getAvatar"; 8import normalizeDescription from "@hey/helpers/normalizeDescription"; 9import { GroupDocument, type GroupFragment } from "@hey/indexer"; 10import type { Context } from "hono"; 11import { html } from "hono/html"; 12import generateOg from "./ogUtils"; 13 14const getGroup = async (ctx: Context) => { 15 const { address } = ctx.req.param(); 16 17 return generateOg({ 18 buildHtml: (group: GroupFragment) => { 19 const name = group.metadata?.name || "Group"; 20 const title = `${name} on Hey`; 21 const description = normalizeDescription( 22 group?.metadata?.description, 23 title 24 ); 25 const avatar = getAvatar(group, TRANSFORMS.AVATAR_BIG); 26 27 const escTitle = escapeHtml(title); 28 const escDescription = escapeHtml(description); 29 const escName = escapeHtml(name); 30 31 return html` 32 <html> 33 <head> 34 <meta charSet="utf-8" /> 35 <meta name="viewport" content="width=device-width" /> 36 <meta http-equiv="content-language" content="en-US" /> 37 <meta name="theme-color" content="${BRAND_COLOR}" /> 38 <title>${escTitle}</title> 39 <meta name="description" content="${escDescription}" /> 40 <meta property="og:title" content="${escTitle}" /> 41 <meta property="og:description" content="${escDescription}" /> 42 <meta property="og:type" content="profile" /> 43 <meta property="og:site_name" content="Hey" /> 44 <meta property="og:url" content="https://hey.xyz/g/${group.address}" /> 45 <meta property="og:image" content="${avatar}" /> 46 <meta property="og:logo" content="${STATIC_IMAGES_URL}/app-icon/0.png" /> 47 <meta name="twitter:card" content="summary" /> 48 <meta name="twitter:title" content="${escTitle}" /> 49 <meta name="twitter:description" content="${escDescription}" /> 50 <meta name="twitter:image" content="${avatar}" /> 51 <meta name="twitter:site" content="@heydotxyz" /> 52 <link rel="icon" href="https://hey.xyz/favicon.ico" /> 53 <link rel="canonical" href="https://hey.xyz/g/${group.address}" /> 54 </head> 55 <body> 56 <img src="${avatar}" alt="${escTitle}" height="100" width="100" /> 57 <h1>${escName}</h1> 58 <h2>${escDescription}</h2> 59 </body> 60 </html> 61 `; 62 }, 63 ctx, 64 extractData: (data) => data.group as GroupFragment | null, 65 query: GroupDocument, 66 variables: { request: { group: address } } 67 }); 68}; 69 70export default getGroup;