Compare commits

...

8 Commits

Author SHA1 Message Date
025fa5cef5 major update!!1! 2025-02-09 17:18:56 +00:00
ef988dcd9b update actor (again) 2025-02-09 17:10:51 +00:00
1dd576adc1 update actor 2025-02-09 17:08:38 +00:00
ac65c0a511 update actor 2025-02-09 17:06:19 +00:00
46f976748a remove tmp files 2025-02-09 17:03:06 +00:00
b419b31630 actor.ts update! 2025-02-09 17:02:21 +00:00
ad22757772 sssss
sddd
2025-02-09 16:54:58 +00:00
85dd0b35f1 ssss 2025-02-09 13:22:40 +00:00
7 changed files with 54 additions and 38 deletions

View File

@ -11,48 +11,53 @@ export default async function (req: VercelRequest, res: VercelResponse) {
res.status(200).setHeader("Content-Type", "application/activity+json").json({
"@context": ["https://www.w3.org/ns/activitystreams", { "@language": "en-US" }],
"type": "Person",
"id": "https://coderrrrr.site/blog",
"id": "https://coderrrrr.site/@blog",
"outbox": "https://coderrrrr.site/api/activitypub/outbox",
"following": "https://coderrrrr.site/api/activitypub/following",
"followers": "https://coderrrrr.site/api/activitypub/followers",
"sharedInbox": "https://coderrrrr.site/api/activitypub/sharedInbox",
"inbox": "https://coderrrrr.site/api/activitypub/inbox",
"url": "https://coderrrrr.site/@blog"
"published": "2024-05-02T15:25:40Z",
"preferredUsername": "blog",
"name": "Deva Midhun's blog",
"manuallyApprovesFollowers": false,
"discoverable": true,
"indexable": true,
"summary": "Software developer & self-hosting enthusiast.",
"memorial": false,
"summary": "Software developer & self-hosting enthusiast. This is a bridge between my blog and the fediverse!",
"tag": [],
"icon": {
"type": "Image",
"mediaType": "image/png",
"url": "https://i.ibb.co/N6J5b8WS/download20250102015611.png"
},
"url": [
"publicKey": {
"id": "https://coderrrrr.site/@blog#main-key",
"owner": "https://coderrrrr.site/@blog",
"publicKeyPem": process.env.ACTIVITYPUB_PUBLIC_KEY || "MISSING_PUBLIC_KEY"
},
"attachment": [
{
"type": "Link",
"mediaType": "text/html",
"href": "https://coderrrrr.site",
"type": "PropertyValue",
"value": "<a href=\"https://coderrrrr.site\" target=\"_blank\" rel=\"nofollow noopener me\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">coderrrrr.site</span><span class=\"invisible\"></span></a>",
"name": "Website"
},
{
"type": "Link",
"mediaType": "text/html",
"href": "https://github.com/turbomaster95",
"type": "PropertyValue",
"value": "<a href=\"https://github.com/turbomaster95\" target=\"_blank\" rel=\"nofollow noopener me\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">github.com/turbomaster95</span><span class=\"invisible\"></span></a>",
"name": "GitHub"
},
{
"type": "Link",
"mediaType": "text/html",
"href": "https://usr.cloud/@coder",
"type": "PropertyValue",
"value": "<a href=\"https://usr.cloud/@coder\" target=\"_blank\" rel=\"nofollow noopener me\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"\">usr.cloud/@coder</span><span class=\"invisible\"></span></a>",
"name": "Owner"
},
{
"type": "PropertyValue",
"value": "<a href=\"https://keyoxide.org/6389542B98CB868DAC73A373ED1190B780583CF6\" target=\"_blank\" rel=\"nofollow noopener me\" translate=\"no\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">keyoxide.org/6389542B98CB868DA</span><span class=\"invisible\">C73A373ED1190B780583CF6</span></a>",
"name": "Keyoxide"
}
],
"publicKey": {
"@context": "https://w3id.org/security/v1",
"@type": "Key",
"id": "https://coderrrrr.site/blog#main-key",
"owner": "https://coderrrrr.site/blog",
"publicKeyPem": process.env.ACTIVITYPUB_PUBLIC_KEY || "MISSING_PUBLIC_KEY"
}
]
});
}

View File

@ -1,12 +1,13 @@
import type { VercelRequest, VercelResponse } from '@vercel/node';
import admin from 'firebase-admin';
import type { VercelRequest, VercelResponse } from "@vercel/node";
import admin from "firebase-admin";
// Initialize Firebase Admin if not already initialized.
if (!admin.apps.length) {
admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.NEXT_PUBLIC_FIREBASE_PROJECT_ID,
clientEmail: process.env.FIREBASE_CLIENT_EMAIL,
privateKey: process.env.FIREBASE_PRIVATE_KEY?.replace(/\\n/g, '\n')
privateKey: process.env.FIREBASE_PRIVATE_KEY?.replace(/\\n/g, "\n")
})
});
}
@ -15,18 +16,25 @@ const db = admin.firestore();
export default async function (req: VercelRequest, res: VercelResponse) {
try {
const collection = db.collection('followers');
const actors = await collection.select("actor").get();
const collection = db.collection("followers");
const snapshot = await collection.select("actor").get();
// Map each document's "actor" field and filter out any null values.
const actors = snapshot.docs
.map(doc => doc.get("actor"))
.filter(actor => actor != null);
const output = {
"@context": "https://www.w3.org/ns/activitystreams",
"id": "https://coderrrrr.site/api/activitypub/followers",
"type": "OrderedCollection",
"totalItems": actors.docs.length,
"orderedItems": actors.docs.map(item => item.get("actor"))
"totalItems": actors.length,
"orderedItems": actors
};
res.status(200).setHeader("Content-Type", "application/activity+json").json(output);
res.status(200)
.setHeader("Content-Type", "application/activity+json")
.json(output);
} catch (error) {
console.error("Error fetching followers:", error);
res.status(500).json({ error: "Internal Server Error" });

View File

@ -161,13 +161,13 @@ async function removeLike(message: AP.Like) {
/*
{
'@context': 'https://www.w3.org/ns/activitystreams',
id: 'https://coderrrrr.site/coder#likes/854/undo',
id: 'https://coderrrrr.site/@blog#likes/854/undo',
type: 'Undo',
actor: 'https://coderrrrr.site/coder',
actor: 'https://coderrrrr.site/@blog',
object: {
id: 'https://coderrrrr.site/coder#likes/854',
id: 'https://coderrrrr.site/@blog#likes/854',
type: 'Like',
actor: 'https://coderrrrr.site/coder',
actor: 'https://coderrrrr.site/@blog',
object: 'https://coderrrrr.site/thoughts-on-web-follow/'
}
}
@ -232,7 +232,7 @@ async function saveFollow(message: AP.Follow, actorInformation: AP.Actor) {
"@context": "https://www.w3.org/ns/activitystreams",
'id': `https://${domain}/${guid}`,
'type': 'Accept',
'actor': "https://coderrrrr.site/coder",
'actor': "https://coderrrrr.site/@blog",
'object': (message.actor as CoreObject).id
};

View File

@ -14,12 +14,12 @@ export default function (req: VercelRequest, res: VercelResponse) {
{
"rel": "http://webfinger.net/rel/profile-page",
"type": "text/html",
"href": "https://coderrrrr.site/blog"
"href": "https://coderrrrr.site/@blog"
},
{
"rel": "self",
"type": "application/activity+json",
"href": "https://coderrrrr.site/blog"
"href": "https://coderrrrr.site/@blog"
},
{
"rel": "http://ostatus.org/schema/1.0/subscribe",

View File

@ -3,7 +3,7 @@ import { Sha256Signer } from '../../http-signature/index.js';
import { createHash } from 'crypto';
export async function sendSignedRequest(endpoint: URL, object: AP.Activity): Promise<Response> {
const publicKeyId = "https://coderrrrr.site/coder#main-key";
const publicKeyId = "https://coderrrrr.site/@blog#main-key";
const privateKey = process.env.ACTIVITYPUB_PRIVATE_KEY;
const signer = new Sha256Signer({ publicKeyId, privateKey, headerNames: ["host", "date", "digest"] });

View File

@ -24,5 +24,8 @@
"node-fetch": "^3.3.2",
"uuid": "^11.0.5",
"vercel": "^41.0.2"
}
},
"trustedDependencies": [
"protobufjs"
]
}

View File

@ -32,7 +32,7 @@
"destination": "/api/activitypub/authorize_interaction.ts"
},
{
"source": "/blog",
"source": "/@blog",
"destination": "/api/activitypub/actor.ts"
},
{