import { ImageResponse, NextResponse } from 'next/server'; import { P, match } from 'ts-pattern'; import { getRecipientOrSenderByShareLinkSlug } from '@documenso/lib/server-only/share/get-recipient-or-sender-by-share-link-slug'; import { Logo } from '~/components/branding/logo'; import { getAssetBuffer } from '~/helpers/get-asset-buffer'; const CARD_OFFSET_TOP = 152; const CARD_OFFSET_LEFT = 350; const CARD_WIDTH = 500; const CARD_HEIGHT = 250; const size = { width: 1200, height: 630, }; type SharePageOpenGraphImageProps = { params: { slug: string }; }; export async function GET(_request: Request, { params: { slug } }: SharePageOpenGraphImageProps) { const [interSemiBold, interRegular, caveatRegular, shareFrameImage] = await Promise.all([ getAssetBuffer('/fonts/inter-semibold.ttf'), getAssetBuffer('/fonts/inter-regular.ttf'), getAssetBuffer('/fonts/caveat-regular.ttf'), getAssetBuffer('/static/og-share-frame.png'), ]); const recipientOrSender = await getRecipientOrSenderByShareLinkSlug({ slug }).catch(() => null); if (!recipientOrSender) { return NextResponse.json({ error: 'Not found' }, { status: 404 }); } const isRecipient = 'Signature' in recipientOrSender; const signatureImage = match(recipientOrSender) .with({ Signature: P.array(P._) }, (recipient) => { return recipient.Signature?.[0]?.signatureImageAsBase64 || null; }) .otherwise((sender) => { return sender.signature || null; }); const signatureName = match(recipientOrSender) .with({ Signature: P.array(P._) }, (recipient) => { return recipient.name || recipient.email; }) .otherwise((sender) => { return sender.name || sender.email; }); return new ImageResponse( (
{signatureName}
)} {/*