a tool for shared writing and social publishing

uri encode microlink request

+27 -51
+2 -17
app/[leaflet_id]/opengraph-image.tsx
··· 1 - import { headers } from "next/headers"; 2 - import { ImageResponse } from "next/og"; 1 + import { getMicroLinkOgImage } from "src/utils/getMicroLinkOgImage"; 3 2 4 3 export const runtime = "edge"; 5 4 export const revalidate = 60; ··· 7 6 export default async function OpenGraphImage(props: { 8 7 params: { leaflet_id: string }; 9 8 }) { 10 - if (process.env.NODE_ENV === "development") return; 11 - const headersList = await headers(); 12 - const hostname = headersList.get("x-forwarded-host"); 13 - let protocol = headersList.get("x-forwarded-proto"); 14 - let path = `${protocol}://${hostname}/${props.params.leaflet_id}`; 15 - let response = await fetch( 16 - `https://pro.microlink.io/?url=${path}&screenshot=true&viewport.width=1400&viewport.height=733&meta=false&embed=screenshot.url&force=true`, 17 - { 18 - headers: { 19 - "x-api-key": process.env.MICROLINK_API_KEY!, 20 - }, 21 - }, 22 - ); 23 - let endTime = Date.now(); 24 - return response; 9 + return getMicroLinkOgImage(`/${props.params.leaflet_id}`); 25 10 }
+3 -17
app/lish/[did]/[publication]/[rkey]/opengraph-image.ts
··· 1 - import { headers } from "next/headers"; 2 - import { ImageResponse } from "next/og"; 1 + import { getMicroLinkOgImage } from "src/utils/getMicroLinkOgImage"; 3 2 4 3 export const runtime = "edge"; 5 4 export const revalidate = 60; ··· 7 6 export default async function OpenGraphImage(props: { 8 7 params: { publication: string; did: string; rkey: string }; 9 8 }) { 10 - if (process.env.NODE_ENV === "development") return; 11 - const headersList = await headers(); 12 - const hostname = headersList.get("x-forwarded-host"); 13 - let protocol = headersList.get("x-forwarded-proto"); 14 - let path = `${protocol}://${hostname}/lish/${props.params.did}/${props.params.publication}/${props.params.rkey}`; 15 - let response = await fetch( 16 - `https://pro.microlink.io/?url=${path}&screenshot=true&viewport.width=1400&viewport.height=733&meta=false&embed=screenshot.url&force=true`, 17 - { 18 - headers: { 19 - "x-api-key": process.env.MICROLINK_API_KEY!, 20 - }, 21 - }, 9 + return getMicroLinkOgImage( 10 + `/lish/${props.params.did}/${props.params.publication}/${props.params.rkey}`, 22 11 ); 23 - let endTime = Date.now(); 24 - 25 - return response; 26 12 }
+3 -17
app/lish/[did]/[publication]/opengraph-image.ts
··· 1 - import { headers } from "next/headers"; 2 - import { ImageResponse } from "next/og"; 1 + import { getMicroLinkOgImage } from "src/utils/getMicroLinkOgImage"; 3 2 4 3 export const runtime = "edge"; 5 4 export const revalidate = 60; ··· 7 6 export default async function OpenGraphImage(props: { 8 7 params: { publication: string; did: string }; 9 8 }) { 10 - if (process.env.NODE_ENV === "development") return; 11 - const headersList = await headers(); 12 - const hostname = headersList.get("x-forwarded-host"); 13 - let protocol = headersList.get("x-forwarded-proto"); 14 - let path = `${protocol}://${hostname}/lish/${props.params.did}/${props.params.publication}`; 15 - let response = await fetch( 16 - `https://pro.microlink.io/?url=${path}&screenshot=true&viewport.width=1400&viewport.height=733&meta=false&embed=screenshot.url&force=true`, 17 - { 18 - headers: { 19 - "x-api-key": process.env.MICROLINK_API_KEY!, 20 - }, 21 - }, 9 + return getMicroLinkOgImage( 10 + `/lish/${props.params.did}/${props.params.publication}`, 22 11 ); 23 - let endTime = Date.now(); 24 - 25 - return response; 26 12 }
+19
src/utils/getMicroLinkOgImage.ts
··· 1 + import { headers } from "next/headers"; 2 + 3 + export async function getMicroLinkOgImage(path: string) { 4 + if (process.env.NODE_ENV === "development") return; 5 + const headersList = await headers(); 6 + const hostname = headersList.get("x-forwarded-host"); 7 + let protocol = headersList.get("x-forwarded-proto"); 8 + let full_path = encodeURIComponent(`${protocol}://${hostname}${path}`); 9 + let response = await fetch( 10 + `https://pro.microlink.io/?url=${full_path}&screenshot=true&viewport.width=1400&viewport.height=733&meta=false&embed=screenshot.url&force=true`, 11 + { 12 + headers: { 13 + "x-api-key": process.env.MICROLINK_API_KEY!, 14 + }, 15 + }, 16 + ); 17 + 18 + return response; 19 + }