import { NextResponse } from "next/server"; export const runtime = "nodejs"; // Force Node runtime const GHOST_API_URL = process.env.GHOST_API_URL; const GHOST_API_KEY = process.env.GHOST_API_KEY; export async function GET(request: Request) { const { searchParams } = new URL(request.url); const slug = searchParams.get("slug"); if (!slug) { return NextResponse.json({ error: "Slug is required" }, { status: 400 }); } try { // Debug: show whether fetch is present/mocked // eslint-disable-next-line no-console console.log('DEBUG fetch in fetchProject:', typeof (globalThis as any).fetch, 'globalIsMock:', !!(globalThis as any).fetch?._isMockFunction); // Try global fetch first (as tests often mock it). If it fails or returns undefined, // fall back to dynamically importing node-fetch. let response: any; if (typeof (globalThis as any).fetch === 'function') { try { response = await (globalThis as any).fetch( `${GHOST_API_URL}/ghost/api/content/posts/slug/${slug}/?key=${GHOST_API_KEY}`, ); } catch (e) { response = undefined; } } if (!response || typeof response.ok === 'undefined') { try { const mod = await import('node-fetch'); const nodeFetch = (mod as any).default ?? mod; response = await nodeFetch( `${GHOST_API_URL}/ghost/api/content/posts/slug/${slug}/?key=${GHOST_API_KEY}`, ); } catch (err) { response = undefined; } } // Debug: inspect the response returned from the fetch // eslint-disable-next-line no-console console.log('DEBUG fetch response:', response); if (!response || !response.ok) { throw new Error(`Failed to fetch post: ${response?.statusText ?? 'no response'}`); } const post = await response.json(); return NextResponse.json(post); } catch (error) { console.error("Failed to fetch post from Ghost:", error); return NextResponse.json( { error: "Failed to fetch project" }, { status: 500 }, ); } }