unoffical wafrn mirror
wafrn.net
atproto
social-network
activitypub
1import { object } from 'underscore'
2import { Follows, User } from '../../models/index.js'
3import { completeEnvironment } from '../backendOptions.js'
4import { activityPubObject } from '../../interfaces/fediverse/activityPubObject.js'
5import { postPetitionSigned } from './postPetitionSigned.js'
6
7async function acceptRemoteFollow(userId: string, remoteUserId: string) {
8 const localUser = await User.findByPk(userId)
9 const remoteUser = await User.findByPk(remoteUserId)
10 const followToBeAccepted = await Follows.findOne({
11 where: {
12 followedId: userId,
13 followerId: remoteUserId
14 }
15 })
16
17 if (localUser && remoteUser && followToBeAccepted) {
18 const apObj: activityPubObject = {
19 '@context': 'https://www.w3.org/ns/activitystreams',
20 actor: completeEnvironment.frontendUrl + '/fediverse/blog/' + localUser.url.toLowerCase(),
21 id: `${completeEnvironment.frontendUrl}/fediverse/accept/${encodeURIComponent(
22 followToBeAccepted.remoteFollowId
23 )}`,
24 type: 'Accept',
25 object: {
26 actor: remoteUser.remoteId,
27 id: followToBeAccepted.remoteFollowId,
28 object: completeEnvironment.frontendUrl + '/fediverse/blog/' + localUser.url.toLowerCase(),
29 type: 'Follow'
30 }
31 }
32 const response = await postPetitionSigned(apObj, localUser, remoteUser.remoteInbox)
33 followToBeAccepted.accepted = true
34 await followToBeAccepted.save()
35 return response
36 }
37}
38
39export { acceptRemoteFollow }