@nuxtjs/sanity
Version:
Sanity integration for Nuxt
32 lines (31 loc) • 1.3 kB
JavaScript
import { createError, defineEventHandler, getRequestURL, setCookie, sendRedirect } from "h3";
import { validatePreviewUrl } from "@sanity/preview-url-secret";
import defu from "defu";
import { previewCookieName } from "../../../constants.js";
import { useSanity, useRuntimeConfig } from "#imports";
export default defineEventHandler(async (event) => {
const $config = useRuntimeConfig(event);
const sanity = useSanity();
const sanityConfig = import.meta.client ? $config.public.sanity : defu($config.sanity, $config.public.sanity);
const client = sanity.client.withConfig({
token: sanityConfig.visualEditing && "token" in sanityConfig.visualEditing ? sanityConfig.visualEditing.token : void 0
});
const { isValid, redirectTo = "/" } = await validatePreviewUrl(
client,
getRequestURL(event).toString()
);
if (!isValid) {
throw createError({
statusCode: 401,
statusMessage: "Invalid secret"
});
}
const id = sanityConfig.visualEditing && "previewModeId" in sanityConfig.visualEditing ? sanityConfig.visualEditing.previewModeId : void 0;
setCookie(event, previewCookieName, id, {
httpOnly: true,
sameSite: !import.meta.dev ? "none" : "lax",
secure: !import.meta.dev,
path: "/"
});
await sendRedirect(event, redirectTo, 307);
});