import { cmsErrorLogLine, shopErrorFromCms } from "./cmsError"; /** * Server-side CMS API utility. * Use this for direct CMS access during SSR. */ export async function fetchCms(endpoint: string, options: Parameters[1] = {}): Promise { const config = useRuntimeConfig(); const url = `${config.cmsInternalUrl}/api${endpoint}`; return await $fetch(url, { ...options, headers: { "Content-Type": "application/json", Authorization: `Bearer ${config.shopApiToken}`, ...((options.headers as Record) || {}) } }); } /** * fetchCms for a route that forwards the browser's request to the CMS: a CMS error answers the browser with the CMS's status * and the safe fields of its error (cmsError.ts), instead of an unhandled error, whose message and data Nitro hides. */ export async function forwardToCms(endpoint: string, options: Parameters[1] = {}): Promise { try { return await fetchCms(endpoint, options); } catch (error) { const shopError = shopErrorFromCms(error); if (!shopError) throw error; if (shopError.statusCode >= 500) console.error(cmsErrorLogLine(String(options.method ?? "GET"), endpoint, shopError)); throw createError(shopError); } }