Deduplicate inboxes when federating activities

This commit is contained in:
Shadowfacts 2019-07-06 14:53:22 -04:00
parent d0663a17e7
commit 63c679d859
Signed by untrusted user: shadowfacts
GPG Key ID: 94A5AB95422746E5
1 changed files with 8 additions and 5 deletions

View File

@ -130,16 +130,19 @@ export async function signAndSend(activity: Activity, inbox: string) {
} }
async function sendToFollowers(activity: Create, db: Database) { async function sendToFollowers(activity: Create, db: Database) {
// TODO: only send to unique inboxes db.all("SELECT inbox FROM followers", (err, results) => {
db.each("SELECT inbox FROM followers", (err, result) => {
if (err) { if (err) {
console.log("Error getting followers: ", err); console.log("Error getting followers: ", err);
return; return;
} }
const inbox = "https://" + new URL(result.inbox).host + "/inbox"; const inboxes = results.map(it => "https://" + new URL(it.inbox).host + "/inbox");
// convert to a Set to deduplicate inboxes
(new Set(inboxes))
.forEach(inbox => {
console.log(`Federating ${activity.object.id} to ${inbox}`); console.log(`Federating ${activity.object.id} to ${inbox}`);
signAndSend(activity, inbox); signAndSend(activity, inbox);
}); });
});
} }
export default function federate(toFederate: [string, Article][], db: Database) { export default function federate(toFederate: [string, Article][], db: Database) {