import { NextResponse } from "next/server"; import { cacheGet, cacheSet } from "@/lib/cache"; import type { GeofabrikIndex } from "@transportationer/shared"; export const runtime = "nodejs"; const GEOFABRIK_INDEX_URL = "https://download.geofabrik.de/index-v1.json"; const CACHE_KEY = "geofabrik:index"; export async function GET() { const cached = await cacheGet(CACHE_KEY); if (cached) { return NextResponse.json(cached, { headers: { "X-Cache": "HIT" } }); } let data: GeofabrikIndex; try { const res = await fetch(GEOFABRIK_INDEX_URL, { headers: { "User-Agent": "Transportationer/1.0 15-min-city-analyzer" }, signal: AbortSignal.timeout(30_000), }); if (!res.ok) { return NextResponse.json( { error: `Geofabrik returned ${res.status}` }, { status: 502 }, ); } data = await res.json(); } catch (err) { return NextResponse.json( { error: "Failed to fetch Geofabrik index", detail: String(err) }, { status: 502 }, ); } await cacheSet(CACHE_KEY, data, "GEOFABRIK_INDEX"); return NextResponse.json(data, { headers: { "X-Cache": "MISS" } }); }