summaryrefslogtreecommitdiff
path: root/src/pages/outbox.json.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/outbox.json.ts')
-rw-r--r--src/pages/outbox.json.ts41
1 files changed, 41 insertions, 0 deletions
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" },
+ });
+};