From 4228defb1405d58d848d27183c31be437edb12ae Mon Sep 17 00:00:00 2001 From: Vula Builder Date: Thu, 4 Jun 2026 11:45:22 +0000 Subject: [PATCH] Deploy --- src/app/api/emdash/[collection]/route.ts | 40 ++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/app/api/emdash/[collection]/route.ts diff --git a/src/app/api/emdash/[collection]/route.ts b/src/app/api/emdash/[collection]/route.ts new file mode 100644 index 0000000..1862e85 --- /dev/null +++ b/src/app/api/emdash/[collection]/route.ts @@ -0,0 +1,40 @@ +import { NextRequest, NextResponse } from 'next/server' + +const EMDASH_URL = process.env.EMDASH_URL || 'http://localhost:4321' +const EMDASH_TOKEN = process.env.EMDASH_API_TOKEN || '' + +export async function GET( + request: NextRequest, + { params }: { params: Promise<{ collection: string }> } +) { + const { collection } = await params + if (!EMDASH_TOKEN) return NextResponse.json({ items: [] }) + try { + const url = new URL(`/_emdash/api/content/${collection}`, EMDASH_URL) + const { searchParams } = request.nextUrl + url.searchParams.set('status', searchParams.get('status') || 'published') + url.searchParams.set('limit', searchParams.get('limit') || '20') + const res = await fetch(url.toString(), { + headers: { Authorization: `Bearer ${EMDASH_TOKEN}` }, + next: { revalidate: 60 }, + }) + if (!res.ok) return NextResponse.json({ items: [] }) + const json = await res.json() as { data?: { items?: unknown[] }; items?: unknown[] } + const raw = json.data?.items ?? json.items ?? [] + // emDash stores image fields as { provider, id, src } — flatten to plain URL strings. + const items = raw.map((item: unknown) => { + if (!item || typeof item !== 'object') return item + const r = item as Record + const data = r.data as Record | undefined + if (!data) return item + const normalized: Record = {} + for (const [k, v] of Object.entries(data)) { + normalized[k] = v && typeof v === 'object' && 'src' in v ? (v as { src: unknown }).src ?? v : v + } + return { ...r, data: normalized } + }) + return NextResponse.json({ items }) + } catch { + return NextResponse.json({ items: [] }) + } +}