32 lines
789 B
TypeScript
32 lines
789 B
TypeScript
import { z } from "zod";
|
|
import { validateUrl } from "@/lib/utils";
|
|
import { createZodFetcher } from "zod-fetch";
|
|
|
|
const fetchWithZod = createZodFetcher();
|
|
|
|
const metadataSchema = z.object({
|
|
title: z.string(),
|
|
description: z.string().optional(),
|
|
image: z.string().optional(),
|
|
creator: z.string().optional(),
|
|
type: z.string().optional(),
|
|
"theme-color": z.string().optional(),
|
|
});
|
|
const metadataSchemaResponse = z.object({
|
|
data: metadataSchema,
|
|
});
|
|
|
|
export function fetchMetadata(url: string) {
|
|
if (!validateUrl(url)) return;
|
|
return fetchWithZod(
|
|
// The schema you want to validate with
|
|
metadataSchemaResponse,
|
|
// Any parameters you would usually pass to fetch
|
|
"/api/metadata",
|
|
{
|
|
method: "POST",
|
|
body: JSON.stringify({ url }),
|
|
},
|
|
);
|
|
}
|