unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
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 }