From aa26dfb372a285cf391fb302fa1ae826dff2daef Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Wed, 27 Aug 2025 12:33:27 -0400 Subject: [PATCH] feat: send local posts out to established relays --- src/activitypub/feps.js | 21 +++++++++++++++------ src/activitypub/relays.js | 9 +++++---- src/views/admin/settings/activitypub.tpl | 2 +- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/activitypub/feps.js b/src/activitypub/feps.js index 7b7816516d..712126c506 100644 --- a/src/activitypub/feps.js +++ b/src/activitypub/feps.js @@ -4,6 +4,7 @@ const nconf = require('nconf'); const posts = require('../posts'); const utils = require('../utils'); +const { default: PG } = require('pg'); const activitypub = module.parent.exports; const Feps = module.exports; @@ -18,21 +19,29 @@ Feps.announce = async function announce(id, activity) { return; } + let relays = await activitypub.relays.list(); + relays = relays.reduce((memo, { state, url }) => { + if (state === 2) { + memo.push(url); + } + return memo; + }, []); const followers = await activitypub.notes.getCategoryFollowers(cid); - if (!followers.length) { + const targets = relays.concat(followers); + if (!targets.length) { return; } const { actor } = activity; if (actor && !actor.startsWith(nconf.get('url'))) { - followers.unshift(actor); + targets.unshift(actor); } const now = Date.now(); if (activity.type === 'Create') { const isMain = await posts.isMain(localId || id); if (isMain) { - activitypub.helpers.log(`[activitypub/inbox.announce(1b12)] Announcing plain object (${activity.id}) to followers of cid ${cid}`); - await activitypub.send('cid', cid, followers, { + activitypub.helpers.log(`[activitypub/inbox.announce(1b12)] Announcing plain object (${activity.id}) to followers of cid ${cid} and ${relays.length} relays`); + await activitypub.send('cid', cid, targets, { id: `${nconf.get('url')}/post/${encodeURIComponent(id)}#activity/announce/${now}`, type: 'Announce', actor: `${nconf.get('url')}/category/${cid}`, @@ -43,8 +52,8 @@ Feps.announce = async function announce(id, activity) { } } - activitypub.helpers.log(`[activitypub/inbox.announce(1b12)] Announcing ${activity.type} (${activity.id}) to followers of cid ${cid}`); - await activitypub.send('cid', cid, followers, { + activitypub.helpers.log(`[activitypub/inbox.announce(1b12)] Announcing ${activity.type} (${activity.id}) to followers of cid ${cid} and ${relays.length} relays`); + await activitypub.send('cid', cid, targets, { id: `${nconf.get('url')}/post/${encodeURIComponent(id)}#activity/announce/${now + 1}`, type: 'Announce', actor: `${nconf.get('url')}/category/${cid}`, diff --git a/src/activitypub/relays.js b/src/activitypub/relays.js index 782d2d4b93..afaeaaa05f 100644 --- a/src/activitypub/relays.js +++ b/src/activitypub/relays.js @@ -14,22 +14,23 @@ Relays.is = async (actor) => { Relays.list = async () => { let relays = await db.getSortedSetMembersWithScores('relays:state'); relays = relays.reduce((memo, { value, score }) => { - let state = '[[admin/settings/activitypub:relays.state-0]]'; + let label = '[[admin/settings/activitypub:relays.state-0]]'; switch(score) { case 1: { - state = '[[admin/settings/activitypub:relays.state-1]]'; + label = '[[admin/settings/activitypub:relays.state-1]]'; break; } case 2: { - state = '[[admin/settings/activitypub:relays.state-2]]'; + label = '[[admin/settings/activitypub:relays.state-2]]'; break; } } memo.push({ url: value, - state, + state: score, + label, }); return memo; diff --git a/src/views/admin/settings/activitypub.tpl b/src/views/admin/settings/activitypub.tpl index 5fa72463a7..9a7e3493bf 100644 --- a/src/views/admin/settings/activitypub.tpl +++ b/src/views/admin/settings/activitypub.tpl @@ -94,7 +94,7 @@ {{{ each relays }}} {./url} - {./state} + {./label} {{{ end }}}