fix: filter out non-asserted targets when sending ap messages, diff. getter method when passed-in ID is a remote category

This commit is contained in:
Julian Lam
2025-03-24 14:29:26 -04:00
parent c5901e0d24
commit 309deb0d7a

View File

@@ -8,6 +8,7 @@ const { CronJob } = require('cron');
const request = require('../request'); const request = require('../request');
const db = require('../database'); const db = require('../database');
const meta = require('../meta'); const meta = require('../meta');
const categories = require('../categories');
const posts = require('../posts'); const posts = require('../posts');
const messaging = require('../messaging'); const messaging = require('../messaging');
const user = require('../user'); const user = require('../user');
@@ -114,8 +115,15 @@ ActivityPub.resolveInboxes = async (ids) => {
} }
await ActivityPub.actors.assert(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) => { 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) => { usersData.forEach((u) => {
if (u && (u.sharedInbox || u.inbox)) { if (u && (u.sharedInbox || u.inbox)) {
inboxes.add(u.sharedInbox || u.inbox); inboxes.add(u.sharedInbox || u.inbox);