import { type QueryParams } from "next-sanity"; import { defineLive, resolvePerspectiveFromCookies, type LivePerspective, } from "next-sanity/live"; import { cookies, draftMode } from "next/headers"; import { client } from "./client"; import { token } from "./token"; export const { sanityFetch, SanityLive } = defineLive({ client, // Required for showing draft content when the Sanity Presentation Tool is used, or to enable the Vercel Toolbar Edit Mode serverToken: token, // Required for stand-alone live previews, the token is only shared to the browser if it's a valid Next.js Draft Mode session browserToken: token, strict: true, }); export interface DynamicFetchOptions { perspective: LivePerspective; stega: boolean; } export async function getDynamicFetchOptions(): Promise { const { isEnabled: isDraftMode } = await draftMode(); if (!isDraftMode) { return { perspective: "published", stega: false }; } const jar = await cookies(); const perspective = await resolvePerspectiveFromCookies({ cookies: jar }); return { perspective: perspective ?? "drafts", stega: true }; } export async function sanityFetchStaticParams< const QueryString extends string, >({ query, params = {} }: { query: QueryString; params?: QueryParams }) { "use cache"; try { const { data } = await sanityFetch({ query, params, perspective: "published", stega: false, }); return { data: (data as any) ?? [] }; } catch (err) { return { data: [] as any }; } } export async function sanityFetchMetadata({ query, params = {}, perspective, }: { query: QueryString; params?: QueryParams; perspective: LivePerspective; }) { "use cache"; try { const { data } = await sanityFetch({ query, params, perspective, stega: false, }); return { data }; } catch (err) { return { data: null as any }; } }