unoffical wafrn mirror wafrn.net
atproto social-network activitypub
at angular21 68 lines 2.2 kB view raw
1import { Queue } from 'bullmq' 2import { activityPubObject } from '../../interfaces/fediverse/activityPubObject.js' 3import { FederatedHost, sequelize, User } from '../../models/index.js' 4import { completeEnvironment } from '../backendOptions.js' 5import { userToJSONLD } from './userToJSONLD.js' 6import { Op } from 'sequelize' 7import { redisCache } from '../redis.js' 8 9const lowPriorityQueue = new Queue('deletePostQueue', { 10 connection: completeEnvironment.bullmqConnection, 11 defaultJobOptions: { 12 removeOnComplete: true, 13 attempts: 3, 14 backoff: { 15 type: 'exponential', 16 delay: 1000 17 }, 18 removeOnFail: true 19 } 20}) 21 22async function sendUpdateProfile(user: User) { 23 await redisCache.del('fediverse:user:base:' + user.id) 24 const userObjectData = await userToJSONLD(user) 25 delete userObjectData['@context'] 26 const objectToSend: activityPubObject = { 27 '@context': [`${completeEnvironment.frontendUrl}/contexts/litepub-0.1.jsonld`], 28 actor: `${completeEnvironment.frontendUrl}/fediverse/blog/${user.url.toLowerCase()}`, 29 to: ['https://www.w3.org/ns/activitystreams#Public'], 30 id: `${completeEnvironment.frontendUrl}/fediverse/blog/${user.url.toLowerCase()}#update/${new Date().getTime()}`, 31 object: userObjectData, 32 type: 'Update' 33 } 34 35 let serversToSendThePost = await FederatedHost.findAll({ 36 where: { 37 publicInbox: { [Op.ne]: null }, 38 blocked: { [Op.ne]: true }, 39 40 [Op.or]: [ 41 sequelize.literal( 42 `"id" in (SELECT "federatedHostId" from "users" where "users"."id" IN (SELECT "followerId" from "follows" where "followedId" = '${user.id}') and "federatedHostId" is not NULL)` 43 ), 44 { 45 friendServer: true 46 } 47 ] 48 } 49 }) 50 const inboxes: string[] = serversToSendThePost.map((elem) => elem.publicInbox as string).filter((elem) => !!elem) 51 52 for await (const inboxChunk of inboxes) { 53 await lowPriorityQueue.add( 54 'sendChunk', 55 { 56 objectToSend: objectToSend, 57 petitionBy: user.dataValues, 58 inboxList: inboxChunk 59 }, 60 { 61 priority: 2097152, 62 delay: 500 63 } 64 ) 65 } 66} 67 68export { sendUpdateProfile }