From 309deb0d7a5758a69156392aea4ffa44ac6967b3 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 24 Mar 2025 14:29:26 -0400 Subject: [PATCH] fix: filter out non-asserted targets when sending ap messages, diff. getter method when passed-in ID is a remote category --- src/activitypub/index.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/activitypub/index.js b/src/activitypub/index.js index 273e443221..d57e9ad5c6 100644 --- a/src/activitypub/index.js +++ b/src/activitypub/index.js @@ -8,6 +8,7 @@ const { CronJob } = require('cron'); const request = require('../request'); const db = require('../database'); const meta = require('../meta'); +const categories = require('../categories'); const posts = require('../posts'); const messaging = require('../messaging'); const user = require('../user'); @@ -114,8 +115,15 @@ ActivityPub.resolveInboxes = async (ids) => { } await ActivityPub.actors.assert(ids); + + // Remove non-asserted targets + const exists = await db.isSortedSetMembers('usersRemote:lastCrawled', ids); + ids = ids.filter((_, idx) => exists[idx]); + + const isCategory = await db.exists(ids.map(id => `categoryRemote:${id}`)); await batch.processArray(ids, async (currentIds) => { - const usersData = await user.getUsersFields(currentIds, ['inbox', 'sharedInbox']); + const method = isCategory ? categories.getCategoriesFields : user.getUsersFields; + const usersData = await method(currentIds, ['inbox', 'sharedInbox']); usersData.forEach((u) => { if (u && (u.sharedInbox || u.inbox)) { inboxes.add(u.sharedInbox || u.inbox);