a tool for shared writing and social publishing
1import { headers } from "next/headers";
2
3export async function getMicroLinkOgImage(
4 path: string,
5 options?: { width?: number; height?: number; deviceScaleFactor?: number },
6) {
7 const headersList = await headers();
8 const hostname = headersList.get("x-forwarded-host");
9 let protocol = headersList.get("x-forwarded-proto");
10 let full_path = `${protocol}://${hostname}${path}`;
11 let response = await fetch(
12 `https://pro.microlink.io/?url=${encodeURIComponent(full_path)}&screenshot=true&viewport.width=${options?.width || 1400}&viewport.height=${options?.height || 733}&viewport.deviceScaleFactor=${options?.deviceScaleFactor || 1}&meta=false&embed=screenshot.url&force=true`,
13 {
14 headers: {
15 "x-api-key": process.env.MICROLINK_API_KEY!,
16 },
17 next: {
18 revalidate: 600,
19 },
20 },
21 );
22 const clonedResponse = response.clone();
23 if (clonedResponse.status == 200)
24 clonedResponse.headers.set(
25 "CDN-Cache-Control",
26 "s-maxage=600, stale-while-revalidate=3600",
27 );
28
29 return clonedResponse;
30}