fd614db75dbf74e40a7fc8a9a9a6c77fd5a8e14b
[oweals/peertube.git] / server / lib / activitypub / send / send-add.ts
1 import { Transaction } from 'sequelize'
2 import { ActivityAdd } from '../../../../shared/models/activitypub'
3 import { VideoPrivacy } from '../../../../shared/models/videos'
4 import { AccountModel } from '../../../models/account/account'
5 import { VideoModel } from '../../../models/video/video'
6 import { broadcastToFollowers, getAudience } from './misc'
7
8 async function sendAddVideo (video: VideoModel, t: Transaction) {
9   const byAccount = video.VideoChannel.Account
10
11   const videoObject = video.toActivityPubObject()
12   const data = await addActivityData(video.url, byAccount, video, video.VideoChannel.url, videoObject, t)
13
14   return broadcastToFollowers(data, byAccount, [ byAccount ], t)
15 }
16
17 async function addActivityData (
18   url: string,
19   byAccount: AccountModel,
20   video: VideoModel,
21   target: string,
22   object: any,
23   t: Transaction
24 ): Promise<ActivityAdd> {
25   const videoPublic = video.privacy === VideoPrivacy.PUBLIC
26
27   const { to, cc } = await getAudience(byAccount, t, videoPublic)
28
29   return {
30     type: 'Add',
31     id: url,
32     actor: byAccount.url,
33     to,
34     cc,
35     object,
36     target
37   }
38 }
39
40 // ---------------------------------------------------------------------------
41
42 export {
43   addActivityData,
44   sendAddVideo
45 }