From 25ed141c7c7631ef21d8764c1163fbf8a6591391 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 30 Nov 2017 11:31:15 +0100 Subject: Put activity pub sends inside transactions --- server/lib/activitypub/send/misc.ts | 22 ++++++++++---------- server/lib/activitypub/send/send-accept.ts | 4 ++-- server/lib/activitypub/send/send-add.ts | 13 +++++++++--- server/lib/activitypub/send/send-announce.ts | 27 ++++++++++++------------ server/lib/activitypub/send/send-create.ts | 26 +++++++++++------------ server/lib/activitypub/send/send-delete.ts | 10 ++++----- server/lib/activitypub/send/send-follow.ts | 6 +++--- server/lib/activitypub/send/send-like.ts | 24 ++++++++++++--------- server/lib/activitypub/send/send-undo.ts | 31 ++++++++++++++-------------- server/lib/activitypub/send/send-update.ts | 12 +++++------ 10 files changed, 94 insertions(+), 81 deletions(-) (limited to 'server/lib/activitypub/send') diff --git a/server/lib/activitypub/send/misc.ts b/server/lib/activitypub/send/misc.ts index fd1add68e..999def701 100644 --- a/server/lib/activitypub/send/misc.ts +++ b/server/lib/activitypub/send/misc.ts @@ -25,8 +25,8 @@ async function forwardActivity ( } } - const toAccountFollowers = await db.Account.listByFollowersUrls(followersUrls) - const uris = await computeFollowerUris(toAccountFollowers, followersException) + const toAccountFollowers = await db.Account.listByFollowersUrls(followersUrls, t) + const uris = await computeFollowerUris(toAccountFollowers, followersException, t) if (uris.length === 0) { logger.info('0 followers for %s, no forwarding.', toAccountFollowers.map(a => a.id).join(', ')) @@ -50,7 +50,7 @@ async function broadcastToFollowers ( t: Transaction, followersException: AccountInstance[] = [] ) { - const uris = await computeFollowerUris(toAccountFollowers, followersException) + const uris = await computeFollowerUris(toAccountFollowers, followersException, t) if (uris.length === 0) { logger.info('0 followers for %s, no broadcasting.', toAccountFollowers.map(a => a.id).join(', ')) return undefined @@ -100,22 +100,22 @@ function getObjectFollowersAudience (accountsInvolvedInObject: AccountInstance[] } } -async function getAccountsInvolvedInVideo (video: VideoInstance) { - const accountsToForwardView = await db.VideoShare.loadAccountsByShare(video.id) +async function getAccountsInvolvedInVideo (video: VideoInstance, t: Transaction) { + const accountsToForwardView = await db.VideoShare.loadAccountsByShare(video.id, t) accountsToForwardView.push(video.VideoChannel.Account) return accountsToForwardView } -async function getAccountsInvolvedInVideoChannel (videoChannel: VideoChannelInstance) { - const accountsToForwardView = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id) +async function getAccountsInvolvedInVideoChannel (videoChannel: VideoChannelInstance, t: Transaction) { + const accountsToForwardView = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id, t) accountsToForwardView.push(videoChannel.Account) return accountsToForwardView } -async function getAudience (accountSender: AccountInstance, isPublic = true) { - const followerInboxUrls = await accountSender.getFollowerSharedInboxUrls() +async function getAudience (accountSender: AccountInstance, t: Transaction, isPublic = true) { + const followerInboxUrls = await accountSender.getFollowerSharedInboxUrls(t) // Thanks Mastodon: https://github.com/tootsuite/mastodon/blob/master/app/lib/activitypub/tag_manager.rb#L47 let to = [] @@ -132,10 +132,10 @@ async function getAudience (accountSender: AccountInstance, isPublic = true) { return { to, cc } } -async function computeFollowerUris (toAccountFollower: AccountInstance[], followersException: AccountInstance[]) { +async function computeFollowerUris (toAccountFollower: AccountInstance[], followersException: AccountInstance[], t: Transaction) { const toAccountFollowerIds = toAccountFollower.map(a => a.id) - const result = await db.AccountFollow.listAcceptedFollowerSharedInboxUrls(toAccountFollowerIds) + const result = await db.AccountFollow.listAcceptedFollowerSharedInboxUrls(toAccountFollowerIds, t) const followersSharedInboxException = followersException.map(f => f.sharedInboxUrl) const uris = result.data.filter(sharedInbox => followersSharedInboxException.indexOf(sharedInbox) === -1) diff --git a/server/lib/activitypub/send/send-accept.ts b/server/lib/activitypub/send/send-accept.ts index eeab19ed0..d3f8fbe38 100644 --- a/server/lib/activitypub/send/send-accept.ts +++ b/server/lib/activitypub/send/send-accept.ts @@ -10,7 +10,7 @@ async function sendAccept (accountFollow: AccountFollowInstance, t: Transaction) const me = accountFollow.AccountFollowing const url = getAccountFollowAcceptActivityPubUrl(accountFollow) - const data = await acceptActivityData(url, me) + const data = acceptActivityData(url, me) return unicastTo(data, me, follower.inboxUrl, t) } @@ -23,7 +23,7 @@ export { // --------------------------------------------------------------------------- -async function acceptActivityData (url: string, byAccount: AccountInstance) { +function acceptActivityData (url: string, byAccount: AccountInstance) { const activity: ActivityAccept = { type: 'Accept', id: url, diff --git a/server/lib/activitypub/send/send-add.ts b/server/lib/activitypub/send/send-add.ts index 3012b7533..d8ac2853e 100644 --- a/server/lib/activitypub/send/send-add.ts +++ b/server/lib/activitypub/send/send-add.ts @@ -8,15 +8,22 @@ async function sendAddVideo (video: VideoInstance, t: Transaction) { const byAccount = video.VideoChannel.Account const videoObject = video.toActivityPubObject() - const data = await addActivityData(video.url, byAccount, video, video.VideoChannel.url, videoObject) + const data = await addActivityData(video.url, byAccount, video, video.VideoChannel.url, videoObject, t) return broadcastToFollowers(data, byAccount, [ byAccount ], t) } -async function addActivityData (url: string, byAccount: AccountInstance, video: VideoInstance, target: string, object: any) { +async function addActivityData ( + url: string, + byAccount: AccountInstance, + video: VideoInstance, + target: string, + object: any, + t: Transaction +) { const videoPublic = video.privacy === VideoPrivacy.PUBLIC - const { to, cc } = await getAudience(byAccount, videoPublic) + const { to, cc } = await getAudience(byAccount, t, videoPublic) const activity: ActivityAdd = { type: 'Add', id: url, diff --git a/server/lib/activitypub/send/send-announce.ts b/server/lib/activitypub/send/send-announce.ts index efc23af46..3acf604cd 100644 --- a/server/lib/activitypub/send/send-announce.ts +++ b/server/lib/activitypub/send/send-announce.ts @@ -21,11 +21,11 @@ async function buildVideoAnnounceToFollowers (byAccount: AccountInstance, video: const url = getAnnounceActivityPubUrl(video.url, byAccount) const videoChannel = video.VideoChannel - const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject()) + const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t) - const accountsToForwardView = await getAccountsInvolvedInVideo(video) + const accountsToForwardView = await getAccountsInvolvedInVideo(video, t) const audience = getObjectFollowersAudience(accountsToForwardView) - const data = await announceActivityData(url, byAccount, announcedActivity, audience) + const data = await announceActivityData(url, byAccount, announcedActivity, t, audience) return data } @@ -40,22 +40,22 @@ async function sendVideoAnnounceToOrigin (byAccount: AccountInstance, video: Vid const url = getAnnounceActivityPubUrl(video.url, byAccount) const videoChannel = video.VideoChannel - const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject()) + const announcedActivity = await addActivityData(url, videoChannel.Account, video, videoChannel.url, video.toActivityPubObject(), t) - const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video) + const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t) const audience = getOriginVideoAudience(video, accountsInvolvedInVideo) - const data = await createActivityData(url, byAccount, announcedActivity, audience) + const data = await createActivityData(url, byAccount, announcedActivity, t, audience) return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t) } async function buildVideoChannelAnnounceToFollowers (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) { const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount) - const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject()) + const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject(), t) - const accountsToForwardView = await getAccountsInvolvedInVideoChannel(videoChannel) + const accountsToForwardView = await getAccountsInvolvedInVideoChannel(videoChannel, t) const audience = getObjectFollowersAudience(accountsToForwardView) - const data = await announceActivityData(url, byAccount, announcedActivity, audience) + const data = await announceActivityData(url, byAccount, announcedActivity, t, audience) return data } @@ -68,11 +68,11 @@ async function sendVideoChannelAnnounceToFollowers (byAccount: AccountInstance, async function sendVideoChannelAnnounceToOrigin (byAccount: AccountInstance, videoChannel: VideoChannelInstance, t: Transaction) { const url = getAnnounceActivityPubUrl(videoChannel.url, byAccount) - const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject()) + const announcedActivity = await createActivityData(url, videoChannel.Account, videoChannel.toActivityPubObject(), t) - const accountsInvolvedInVideo = await getAccountsInvolvedInVideoChannel(videoChannel) + const accountsInvolvedInVideo = await getAccountsInvolvedInVideoChannel(videoChannel, t) const audience = getOriginVideoChannelAudience(videoChannel, accountsInvolvedInVideo) - const data = await createActivityData(url, byAccount, announcedActivity, audience) + const data = await createActivityData(url, byAccount, announcedActivity, t, audience) return unicastTo(data, byAccount, videoChannel.Account.sharedInboxUrl, t) } @@ -81,10 +81,11 @@ async function announceActivityData ( url: string, byAccount: AccountInstance, object: ActivityCreate | ActivityAdd, + t: Transaction, audience?: ActivityAudience ) { if (!audience) { - audience = await getAudience(byAccount) + audience = await getAudience(byAccount, t) } const activity: ActivityAnnounce = { diff --git a/server/lib/activitypub/send/send-create.ts b/server/lib/activitypub/send/send-create.ts index bf66606c1..a34d3776c 100644 --- a/server/lib/activitypub/send/send-create.ts +++ b/server/lib/activitypub/send/send-create.ts @@ -8,8 +8,8 @@ import { broadcastToFollowers, getAccountsInvolvedInVideo, getAudience, - getOriginVideoAudience, getObjectFollowersAudience, + getOriginVideoAudience, unicastTo } from './misc' @@ -17,7 +17,7 @@ async function sendCreateVideoChannel (videoChannel: VideoChannelInstance, t: Tr const byAccount = videoChannel.Account const videoChannelObject = videoChannel.toActivityPubObject() - const data = await createActivityData(videoChannel.url, byAccount, videoChannelObject) + const data = await createActivityData(videoChannel.url, byAccount, videoChannelObject, t) return broadcastToFollowers(data, byAccount, [ byAccount ], t) } @@ -26,7 +26,7 @@ async function sendVideoAbuse (byAccount: AccountInstance, videoAbuse: VideoAbus const url = getVideoAbuseActivityPubUrl(videoAbuse) const audience = { to: [ video.VideoChannel.Account.url ], cc: [] } - const data = await createActivityData(url, byAccount, videoAbuse.toActivityPubObject(), audience) + const data = await createActivityData(url, byAccount, videoAbuse.toActivityPubObject(), t, audience) return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t) } @@ -35,9 +35,9 @@ async function sendCreateViewToOrigin (byAccount: AccountInstance, video: VideoI const url = getVideoViewActivityPubUrl(byAccount, video) const viewActivity = createViewActivityData(byAccount, video) - const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video) + const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t) const audience = getOriginVideoAudience(video, accountsInvolvedInVideo) - const data = await createActivityData(url, byAccount, viewActivity, audience) + const data = await createActivityData(url, byAccount, viewActivity, t, audience) return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t) } @@ -46,9 +46,9 @@ async function sendCreateViewToVideoFollowers (byAccount: AccountInstance, video const url = getVideoViewActivityPubUrl(byAccount, video) const viewActivity = createViewActivityData(byAccount, video) - const accountsToForwardView = await getAccountsInvolvedInVideo(video) + const accountsToForwardView = await getAccountsInvolvedInVideo(video, t) const audience = getObjectFollowersAudience(accountsToForwardView) - const data = await createActivityData(url, byAccount, viewActivity, audience) + const data = await createActivityData(url, byAccount, viewActivity, t, audience) // Use the server account to send the view, because it could be an unregistered account const serverAccount = await getServerAccount() @@ -60,9 +60,9 @@ async function sendCreateDislikeToOrigin (byAccount: AccountInstance, video: Vid const url = getVideoDislikeActivityPubUrl(byAccount, video) const dislikeActivity = createDislikeActivityData(byAccount, video) - const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video) + const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t) const audience = getOriginVideoAudience(video, accountsInvolvedInVideo) - const data = await createActivityData(url, byAccount, dislikeActivity, audience) + const data = await createActivityData(url, byAccount, dislikeActivity, t, audience) return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t) } @@ -71,17 +71,17 @@ async function sendCreateDislikeToVideoFollowers (byAccount: AccountInstance, vi const url = getVideoDislikeActivityPubUrl(byAccount, video) const dislikeActivity = createDislikeActivityData(byAccount, video) - const accountsToForwardView = await getAccountsInvolvedInVideo(video) + const accountsToForwardView = await getAccountsInvolvedInVideo(video, t) const audience = getObjectFollowersAudience(accountsToForwardView) - const data = await createActivityData(url, byAccount, dislikeActivity, audience) + const data = await createActivityData(url, byAccount, dislikeActivity, t, audience) const followersException = [ byAccount ] return broadcastToFollowers(data, byAccount, accountsToForwardView, t, followersException) } -async function createActivityData (url: string, byAccount: AccountInstance, object: any, audience?: ActivityAudience) { +async function createActivityData (url: string, byAccount: AccountInstance, object: any, t: Transaction, audience?: ActivityAudience) { if (!audience) { - audience = await getAudience(byAccount) + audience = await getAudience(byAccount, t) } const activity: ActivityCreate = { diff --git a/server/lib/activitypub/send/send-delete.ts b/server/lib/activitypub/send/send-delete.ts index 5be0e2d24..c49cda04f 100644 --- a/server/lib/activitypub/send/send-delete.ts +++ b/server/lib/activitypub/send/send-delete.ts @@ -7,9 +7,9 @@ import { broadcastToFollowers } from './misc' async function sendDeleteVideoChannel (videoChannel: VideoChannelInstance, t: Transaction) { const byAccount = videoChannel.Account - const data = await deleteActivityData(videoChannel.url, byAccount) + const data = deleteActivityData(videoChannel.url, byAccount) - const accountsInvolved = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id) + const accountsInvolved = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id, t) accountsInvolved.push(byAccount) return broadcastToFollowers(data, byAccount, accountsInvolved, t) @@ -18,9 +18,9 @@ async function sendDeleteVideoChannel (videoChannel: VideoChannelInstance, t: Tr async function sendDeleteVideo (video: VideoInstance, t: Transaction) { const byAccount = video.VideoChannel.Account - const data = await deleteActivityData(video.url, byAccount) + const data = deleteActivityData(video.url, byAccount) - const accountsInvolved = await db.VideoShare.loadAccountsByShare(video.id) + const accountsInvolved = await db.VideoShare.loadAccountsByShare(video.id, t) accountsInvolved.push(byAccount) return broadcastToFollowers(data, byAccount, accountsInvolved, t) @@ -42,7 +42,7 @@ export { // --------------------------------------------------------------------------- -async function deleteActivityData (url: string, byAccount: AccountInstance) { +function deleteActivityData (url: string, byAccount: AccountInstance) { const activity: ActivityDelete = { type: 'Delete', id: url, diff --git a/server/lib/activitypub/send/send-follow.ts b/server/lib/activitypub/send/send-follow.ts index 3c01fb77c..8fba1b6b5 100644 --- a/server/lib/activitypub/send/send-follow.ts +++ b/server/lib/activitypub/send/send-follow.ts @@ -5,17 +5,17 @@ import { AccountFollowInstance } from '../../../models/account/account-follow-in import { getAccountFollowActivityPubUrl } from '../url' import { unicastTo } from './misc' -async function sendFollow (accountFollow: AccountFollowInstance, t: Transaction) { +function sendFollow (accountFollow: AccountFollowInstance, t: Transaction) { const me = accountFollow.AccountFollower const following = accountFollow.AccountFollowing const url = getAccountFollowActivityPubUrl(accountFollow) - const data = await followActivityData(url, me, following) + const data = followActivityData(url, me, following) return unicastTo(data, me, following.inboxUrl, t) } -async function followActivityData (url: string, byAccount: AccountInstance, targetAccount: AccountInstance) { +function followActivityData (url: string, byAccount: AccountInstance, targetAccount: AccountInstance) { const activity: ActivityFollow = { type: 'Follow', id: url, diff --git a/server/lib/activitypub/send/send-like.ts b/server/lib/activitypub/send/send-like.ts index 41b879b8a..0c464b2d3 100644 --- a/server/lib/activitypub/send/send-like.ts +++ b/server/lib/activitypub/send/send-like.ts @@ -1,5 +1,5 @@ import { Transaction } from 'sequelize' -import { ActivityLike } from '../../../../shared/models/activitypub/activity' +import { ActivityAudience, ActivityLike } from '../../../../shared/models/activitypub/activity' import { AccountInstance, VideoInstance } from '../../../models' import { getVideoLikeActivityPubUrl } from '../url' import { @@ -14,9 +14,9 @@ import { async function sendLikeToOrigin (byAccount: AccountInstance, video: VideoInstance, t: Transaction) { const url = getVideoLikeActivityPubUrl(byAccount, video) - const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video) + const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t) const audience = getOriginVideoAudience(video, accountsInvolvedInVideo) - const data = await likeActivityData(url, byAccount, video, audience) + const data = await likeActivityData(url, byAccount, video, t, audience) return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t) } @@ -24,19 +24,23 @@ async function sendLikeToOrigin (byAccount: AccountInstance, video: VideoInstanc async function sendLikeToVideoFollowers (byAccount: AccountInstance, video: VideoInstance, t: Transaction) { const url = getVideoLikeActivityPubUrl(byAccount, video) - const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video) + const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t) const audience = getObjectFollowersAudience(accountsInvolvedInVideo) - const data = await likeActivityData(url, byAccount, video, audience) - - const toAccountsFollowers = await getAccountsInvolvedInVideo(video) + const data = await likeActivityData(url, byAccount, video, t, audience) const followersException = [ byAccount ] - return broadcastToFollowers(data, byAccount, toAccountsFollowers, t, followersException) + return broadcastToFollowers(data, byAccount, accountsInvolvedInVideo, t, followersException) } -async function likeActivityData (url: string, byAccount: AccountInstance, video: VideoInstance, audience?: { to: string[], cc: string[] }) { +async function likeActivityData ( + url: string, + byAccount: AccountInstance, + video: VideoInstance, + t: Transaction, + audience?: ActivityAudience +) { if (!audience) { - audience = await getAudience(byAccount) + audience = await getAudience(byAccount, t) } const activity: ActivityLike = { diff --git a/server/lib/activitypub/send/send-undo.ts b/server/lib/activitypub/send/send-undo.ts index 878acd21e..2f5e6998e 100644 --- a/server/lib/activitypub/send/send-undo.ts +++ b/server/lib/activitypub/send/send-undo.ts @@ -29,8 +29,8 @@ async function sendUndoFollow (accountFollow: AccountFollowInstance, t: Transact const followUrl = getAccountFollowActivityPubUrl(accountFollow) const undoUrl = getUndoActivityPubUrl(followUrl) - const object = await followActivityData(followUrl, me, following) - const data = await undoActivityData(undoUrl, me, object) + const object = followActivityData(followUrl, me, following) + const data = await undoActivityData(undoUrl, me, object, t) return unicastTo(data, me, following.inboxUrl, t) } @@ -39,10 +39,10 @@ async function sendUndoLikeToOrigin (byAccount: AccountInstance, video: VideoIns const likeUrl = getVideoLikeActivityPubUrl(byAccount, video) const undoUrl = getUndoActivityPubUrl(likeUrl) - const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video) + const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t) const audience = getOriginVideoAudience(video, accountsInvolvedInVideo) - const object = await likeActivityData(likeUrl, byAccount, video) - const data = await undoActivityData(undoUrl, byAccount, object, audience) + const object = await likeActivityData(likeUrl, byAccount, video, t) + const data = await undoActivityData(undoUrl, byAccount, object, t, audience) return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t) } @@ -51,10 +51,10 @@ async function sendUndoLikeToVideoFollowers (byAccount: AccountInstance, video: const likeUrl = getVideoLikeActivityPubUrl(byAccount, video) const undoUrl = getUndoActivityPubUrl(likeUrl) - const toAccountsFollowers = await getAccountsInvolvedInVideo(video) + const toAccountsFollowers = await getAccountsInvolvedInVideo(video, t) const audience = getObjectFollowersAudience(toAccountsFollowers) - const object = await likeActivityData(likeUrl, byAccount, video) - const data = await undoActivityData(undoUrl, byAccount, object, audience) + const object = await likeActivityData(likeUrl, byAccount, video, t) + const data = await undoActivityData(undoUrl, byAccount, object, t, audience) const followersException = [ byAccount ] return broadcastToFollowers(data, byAccount, toAccountsFollowers, t, followersException) @@ -64,12 +64,12 @@ async function sendUndoDislikeToOrigin (byAccount: AccountInstance, video: Video const dislikeUrl = getVideoDislikeActivityPubUrl(byAccount, video) const undoUrl = getUndoActivityPubUrl(dislikeUrl) - const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video) + const accountsInvolvedInVideo = await getAccountsInvolvedInVideo(video, t) const audience = getOriginVideoAudience(video, accountsInvolvedInVideo) const dislikeActivity = createDislikeActivityData(byAccount, video) - const object = await createActivityData(undoUrl, byAccount, dislikeActivity, audience) + const object = await createActivityData(undoUrl, byAccount, dislikeActivity, t, audience) - const data = await undoActivityData(undoUrl, byAccount, object) + const data = await undoActivityData(undoUrl, byAccount, object, t) return unicastTo(data, byAccount, video.VideoChannel.Account.sharedInboxUrl, t) } @@ -79,11 +79,11 @@ async function sendUndoDislikeToVideoFollowers (byAccount: AccountInstance, vide const undoUrl = getUndoActivityPubUrl(dislikeUrl) const dislikeActivity = createDislikeActivityData(byAccount, video) - const object = await createActivityData(undoUrl, byAccount, dislikeActivity) + const object = await createActivityData(undoUrl, byAccount, dislikeActivity, t) - const data = await undoActivityData(undoUrl, byAccount, object) + const data = await undoActivityData(undoUrl, byAccount, object, t) - const toAccountsFollowers = await getAccountsInvolvedInVideo(video) + const toAccountsFollowers = await getAccountsInvolvedInVideo(video, t) const followersException = [ byAccount ] return broadcastToFollowers(data, byAccount, toAccountsFollowers, t, followersException) @@ -105,10 +105,11 @@ async function undoActivityData ( url: string, byAccount: AccountInstance, object: ActivityFollow | ActivityLike | ActivityCreate, + t: Transaction, audience?: ActivityAudience ) { if (!audience) { - audience = await getAudience(byAccount) + audience = await getAudience(byAccount, t) } const activity: ActivityUndo = { diff --git a/server/lib/activitypub/send/send-update.ts b/server/lib/activitypub/send/send-update.ts index 32cada06e..59524e523 100644 --- a/server/lib/activitypub/send/send-update.ts +++ b/server/lib/activitypub/send/send-update.ts @@ -10,9 +10,9 @@ async function sendUpdateVideoChannel (videoChannel: VideoChannelInstance, t: Tr const url = getUpdateActivityPubUrl(videoChannel.url, videoChannel.updatedAt.toISOString()) const videoChannelObject = videoChannel.toActivityPubObject() - const data = await updateActivityData(url, byAccount, videoChannelObject) + const data = await updateActivityData(url, byAccount, videoChannelObject, t) - const accountsInvolved = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id) + const accountsInvolved = await db.VideoChannelShare.loadAccountsByShare(videoChannel.id, t) accountsInvolved.push(byAccount) return broadcastToFollowers(data, byAccount, accountsInvolved, t) @@ -23,9 +23,9 @@ async function sendUpdateVideo (video: VideoInstance, t: Transaction) { const url = getUpdateActivityPubUrl(video.url, video.updatedAt.toISOString()) const videoObject = video.toActivityPubObject() - const data = await updateActivityData(url, byAccount, videoObject) + const data = await updateActivityData(url, byAccount, videoObject, t) - const accountsInvolved = await db.VideoShare.loadAccountsByShare(video.id) + const accountsInvolved = await db.VideoShare.loadAccountsByShare(video.id, t) accountsInvolved.push(byAccount) return broadcastToFollowers(data, byAccount, accountsInvolved, t) @@ -40,8 +40,8 @@ export { // --------------------------------------------------------------------------- -async function updateActivityData (url: string, byAccount: AccountInstance, object: any) { - const { to, cc } = await getAudience(byAccount) +async function updateActivityData (url: string, byAccount: AccountInstance, object: any, t: Transaction) { + const { to, cc } = await getAudience(byAccount, t) const activity: ActivityUpdate = { type: 'Update', id: url, -- cgit v1.2.3