From a8c6eb9542e4baba3ce05da454fc52548214ba06 Mon Sep 17 00:00:00 2001 From: João Augusto Costa Branco Marado Torres Date: Sun, 6 Jul 2025 15:45:22 -0300 Subject: feat: kind of integrate activity pub MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: João Augusto Costa Branco Marado Torres --- src/pages/outbox.json.ts | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/pages/outbox.json.ts (limited to 'src/pages/outbox.json.ts') diff --git a/src/pages/outbox.json.ts b/src/pages/outbox.json.ts new file mode 100644 index 0000000..cec761e --- /dev/null +++ b/src/pages/outbox.json.ts @@ -0,0 +1,41 @@ +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); + +const orderedItems = 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, +}; + +export const GET: APIRoute = (): Response => { + return new Response(JSON.stringify(outbox), { + headers: { "Content-Type": "application/activity+json" }, + }); +}; -- cgit v1.2.3