import type { APIRoute } from "astro"; import { env } from "../lib/environment.ts"; import { fromPosts, isOriginal } from "../lib/collection/helpers.ts"; const { PUBLIC_SITE_URL } = env; const site = new URL(PUBLIC_SITE_URL); export const GET: APIRoute = async (): Promise => { const orderedItems = await fromPosts( isOriginal, (x) => x.map(({ id, data, rendered }) => { const { dateCreated, title } = data; return { id: new URL(`blog/read/${id}`, site).href, type: "Create", actor: new URL("actor.json", site).href, published: dateCreated.toISOString(), to: ["https://www.w3.org/ns/activitystreams#Public"], object: { id: new URL(`blog/read/${id}`, site).href, type: "Article", name: title, url: new URL(`blog/read/${id}`, site).href, content: rendered?.html ?? "", }, }; }), ); const outbox = { "@context": "https://www.w3.org/ns/activitystreams", id: new URL("outbox.json", site).href, type: "OrderedCollection", totalItems: 1, orderedItems, }; return new Response(JSON.stringify(outbox), { headers: { "Content-Type": "application/activity+json" }, }); };