Files
blackroad-os-web/app/api/worlds/route.ts
Alexa Amundson 86be7a0309
Some checks failed
Autonomous Repo Agent / autonomous-build (push) Has been cancelled
BlackRoad AI Agents / agent-response (push) Has been cancelled
🔍 BlackRoad CodeQL Security Analysis / CodeQL Analysis (javascript) (push) Has been cancelled
🔍 BlackRoad CodeQL Security Analysis / CodeQL Analysis (python) (push) Has been cancelled
CI / Test (push) Has been cancelled
Deploy to Cloudflare Pages / Deploy to Cloudflare Pages (push) Has been cancelled
Trinity Compliance Check / check-compliance (push) Has been cancelled
sync: update from blackroad-operator 2026-03-14
Synced from BlackRoad-OS-Inc/blackroad-operator/orgs/core/blackroad-os-web
BlackRoad OS — Pave Tomorrow.

RoadChain-SHA2048: 13032509284e1f6c
RoadChain-Identity: alexa@sovereign
RoadChain-Full: 13032509284e1f6ca60f7004aa28e90fdc0fdae165e934d79f9ee91ee80caa9c42b57ad6c0ed9c400d303a39716259ad59602b6bc19ba3ea0720412c7957b64908250e99db1c5debc19331e7d473bb26d0c501cf1f02155ec53315372f62c0a36ca9d67d033e42c4d9683c2220eda4b4f4487eff9e474726e279d738e8a613870d38f5197ee4504b40c95ce73a1df4eb837b18bfce046609b29fbb4a7bdb83501806d25bfaa79be4f46f31b9616511733690a6b2a6257084c264223462161aca13e0608a59f5a0cc55f9835d640a1dde518b15c019a4ba62e8513cbbd58fd436d9e401fa12a1a8c82908b4688359b829c90e76067668e4793638a8d33fb9a77c
2026-03-14 15:02:04 -05:00

44 lines
1.4 KiB
TypeScript

import { NextResponse } from 'next/server';
export const runtime = 'edge';
export async function GET(request: Request) {
const url = new URL(request.url);
const format = url.searchParams.get('format') || 'json';
const limit = Math.min(parseInt(url.searchParams.get('limit') || '20'), 100);
try {
const upstreamUrl =
format === 'rss'
? 'https://worlds.blackroad.io/rss'
: format === 'atom'
? 'https://worlds.blackroad.io/atom'
: 'https://worlds.blackroad.io/';
const res = await fetch(upstreamUrl, {
headers: { 'User-Agent': 'blackroad-web/1.0' },
} as RequestInit);
if (!res.ok) throw new Error(`upstream ${res.status}`);
if (format === 'rss' || format === 'atom') {
const text = await res.text();
return new Response(text, {
headers: {
'Content-Type': format === 'rss' ? 'application/rss+xml' : 'application/atom+xml',
'Cache-Control': 'public, s-maxage=120, stale-while-revalidate=60',
},
});
}
const data = await res.json() as { total: number; worlds: unknown[]; generated: string };
const sliced = { ...data, worlds: data.worlds.slice(0, limit) };
return NextResponse.json(sliced, {
headers: { 'Cache-Control': 'public, s-maxage=60, stale-while-revalidate=30' },
});
} catch (e) {
return NextResponse.json({ error: String(e), worlds: [] }, { status: 500 });
}
}