1 import { doRequest, logger } from '../../../helpers'
2 import { ACTIVITY_PUB } from '../../../initializers'
3 import { processActivities } from '../../activitypub/process'
4 import { ActivityPubHttpPayload } from './activitypub-http-job-scheduler'
6 async function process (payload: ActivityPubHttpPayload, jobId: number) {
7 logger.info('Processing ActivityPub fetcher in job %d.', jobId)
15 for (const uri of payload.uris) {
17 logger.info('Fetching ActivityPub data on %s.', uri)
19 const response = await doRequest(options)
20 const firstBody = response.body
22 if (firstBody.first && Array.isArray(firstBody.first.orderedItems)) {
23 const activities = firstBody.first.orderedItems
25 logger.info('Processing %i items ActivityPub fetcher for %s.', activities.length, options.uri)
27 await processActivities(activities)
30 let limit = ACTIVITY_PUB.FETCH_PAGE_LIMIT
32 let nextLink = firstBody.first.next
33 while (nextLink && i < limit) {
34 options.uri = nextLink
36 const { body } = await doRequest(options)
40 if (Array.isArray(body.orderedItems)) {
41 const activities = body.orderedItems
42 logger.info('Processing %i items ActivityPub fetcher for %s.', activities.length, options.uri)
44 await processActivities(activities)
50 function onError (err: Error, jobId: number) {
51 logger.error('Error when fetcher ActivityPub request in job %d.', jobId, err)
52 return Promise.resolve()
55 function onSuccess (jobId: number) {
56 logger.info('Job %d is a success.', jobId)
57 return Promise.resolve()
60 // ---------------------------------------------------------------------------