]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-fetcher-handler.ts
Begin moving video channel to actor
[github/Chocobozzz/PeerTube.git] / server / lib / jobs / activitypub-http-job-scheduler / activitypub-http-fetcher-handler.ts
CommitLineData
3fd3ab2d
C
1import { doRequest, logger } from '../../../helpers'
2import { ACTIVITY_PUB } from '../../../initializers'
3import { processActivities } from '../../activitypub/process'
40ff5707 4import { ActivityPubHttpPayload } from './activitypub-http-job-scheduler'
c986175d
C
5
6async function process (payload: ActivityPubHttpPayload, jobId: number) {
7 logger.info('Processing ActivityPub fetcher in job %d.', jobId)
8
9 const options = {
10 method: 'GET',
11 uri: '',
12 json: true
13 }
14
15 for (const uri of payload.uris) {
16 options.uri = uri
17 logger.info('Fetching ActivityPub data on %s.', uri)
18
19 const response = await doRequest(options)
20 const firstBody = response.body
21
22 if (firstBody.first && Array.isArray(firstBody.first.orderedItems)) {
23 const activities = firstBody.first.orderedItems
24
c46edbc2 25 logger.info('Processing %i items ActivityPub fetcher for %s.', activities.length, options.uri)
c986175d
C
26
27 await processActivities(activities)
28 }
29
30 let limit = ACTIVITY_PUB.FETCH_PAGE_LIMIT
31 let i = 0
32 let nextLink = firstBody.first.next
33 while (nextLink && i < limit) {
34 options.uri = nextLink
35
36 const { body } = await doRequest(options)
c46edbc2 37 nextLink = body.next
c986175d
C
38 i++
39
40 if (Array.isArray(body.orderedItems)) {
41 const activities = body.orderedItems
c46edbc2 42 logger.info('Processing %i items ActivityPub fetcher for %s.', activities.length, options.uri)
c986175d
C
43
44 await processActivities(activities)
45 }
46 }
47 }
48}
49
50function onError (err: Error, jobId: number) {
16b90975 51 logger.error('Error when fetcher ActivityPub request in job %d.', jobId, err)
c986175d
C
52 return Promise.resolve()
53}
54
55function onSuccess (jobId: number) {
56 logger.info('Job %d is a success.', jobId)
57 return Promise.resolve()
58}
59
60// ---------------------------------------------------------------------------
61
62export {
63 process,
64 onError,
65 onSuccess
66}