1 import { logger } from '../../../helpers/logger'
2 import { doRequest } from '../../../helpers/requests'
3 import { ActorFollowModel } from '../../../models/activitypub/actor-follow'
4 import { ActivityPubHttpPayload, buildSignedRequestOptions, computeBody, maybeRetryRequestLater } from './activitypub-http-job-scheduler'
6 async function process (payload: ActivityPubHttpPayload, jobId: number) {
7 logger.info('Processing ActivityPub broadcast in job %d.', jobId)
9 const body = await computeBody(payload)
10 const httpSignatureOptions = await buildSignedRequestOptions(payload)
16 httpSignature: httpSignatureOptions
19 const badUrls: string[] = []
20 const goodUrls: string[] = []
22 for (const uri of payload.uris) {
26 await doRequest(options)
29 const isRetryingLater = await maybeRetryRequestLater(err, payload, uri)
30 if (isRetryingLater === false) badUrls.push(uri)
34 return ActorFollowModel.updateActorFollowsScoreAndRemoveBadOnes(goodUrls, badUrls, undefined)
37 function onError (err: Error, jobId: number) {
38 logger.error('Error when broadcasting ActivityPub request in job %d.', jobId, err)
39 return Promise.resolve()
42 function onSuccess (jobId: number) {
43 logger.info('Job %d is a success.', jobId)
44 return Promise.resolve()
47 // ---------------------------------------------------------------------------