diff options
Diffstat (limited to 'server/lib/activitypub/videos/shared/trackers.ts')
-rw-r--r-- | server/lib/activitypub/videos/shared/trackers.ts | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/server/lib/activitypub/videos/shared/trackers.ts b/server/lib/activitypub/videos/shared/trackers.ts new file mode 100644 index 000000000..fcb2a5091 --- /dev/null +++ b/server/lib/activitypub/videos/shared/trackers.ts | |||
@@ -0,0 +1,43 @@ | |||
1 | import { Transaction } from 'sequelize/types' | ||
2 | import { buildRemoteVideoBaseUrl } from '@server/helpers/activitypub' | ||
3 | import { isAPVideoTrackerUrlObject } from '@server/helpers/custom-validators/activitypub/videos' | ||
4 | import { isArray } from '@server/helpers/custom-validators/misc' | ||
5 | import { REMOTE_SCHEME } from '@server/initializers/constants' | ||
6 | import { TrackerModel } from '@server/models/server/tracker' | ||
7 | import { MVideo, MVideoWithHost } from '@server/types/models' | ||
8 | import { ActivityTrackerUrlObject, VideoObject } from '@shared/models' | ||
9 | |||
10 | function getTrackerUrls (object: VideoObject, video: MVideoWithHost) { | ||
11 | let wsFound = false | ||
12 | |||
13 | const trackers = object.url.filter(u => isAPVideoTrackerUrlObject(u)) | ||
14 | .map((u: ActivityTrackerUrlObject) => { | ||
15 | if (isArray(u.rel) && u.rel.includes('websocket')) wsFound = true | ||
16 | |||
17 | return u.href | ||
18 | }) | ||
19 | |||
20 | if (wsFound) return trackers | ||
21 | |||
22 | return [ | ||
23 | buildRemoteVideoBaseUrl(video, '/tracker/socket', REMOTE_SCHEME.WS), | ||
24 | buildRemoteVideoBaseUrl(video, '/tracker/announce') | ||
25 | ] | ||
26 | } | ||
27 | |||
28 | async function setVideoTrackers (options: { | ||
29 | video: MVideo | ||
30 | trackers: string[] | ||
31 | transaction?: Transaction | ||
32 | }) { | ||
33 | const { video, trackers, transaction } = options | ||
34 | |||
35 | const trackerInstances = await TrackerModel.findOrCreateTrackers(trackers, transaction) | ||
36 | |||
37 | await video.$set('Trackers', trackerInstances, { transaction }) | ||
38 | } | ||
39 | |||
40 | export { | ||
41 | getTrackerUrls, | ||
42 | setVideoTrackers | ||
43 | } | ||