]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/lib/jobs/activitypub-http-job-scheduler/activitypub-http-job-scheduler.ts
Federate likes/dislikes
[github/Chocobozzz/PeerTube.git] / server / lib / jobs / activitypub-http-job-scheduler / activitypub-http-job-scheduler.ts
1 import { JobScheduler, JobHandler } from '../job-scheduler'
2
3 import * as activitypubHttpBroadcastHandler from './activitypub-http-broadcast-handler'
4 import * as activitypubHttpUnicastHandler from './activitypub-http-unicast-handler'
5 import * as activitypubHttpFetcherHandler from './activitypub-http-fetcher-handler'
6 import { JobCategory } from '../../../../shared'
7 import { ACTIVITY_PUB } from '../../../initializers/constants'
8 import { logger } from '../../../helpers/logger'
9
10 type ActivityPubHttpPayload = {
11 uris: string[]
12 signatureAccountId?: number
13 body?: any
14 attemptNumber?: number
15 }
16
17 const jobHandlers: { [ handlerName: string ]: JobHandler<ActivityPubHttpPayload, void> } = {
18 activitypubHttpBroadcastHandler,
19 activitypubHttpUnicastHandler,
20 activitypubHttpFetcherHandler
21 }
22 const jobCategory: JobCategory = 'activitypub-http'
23
24 const activitypubHttpJobScheduler = new JobScheduler(jobCategory, jobHandlers)
25
26 function maybeRetryRequestLater (err: Error, payload: ActivityPubHttpPayload, uri: string) {
27 logger.warn('Cannot make request to %s.', uri, err)
28
29 let attemptNumber = payload.attemptNumber || 1
30 attemptNumber += 1
31
32 if (attemptNumber < ACTIVITY_PUB.MAX_HTTP_ATTEMPT) {
33 logger.debug('Retrying request to %s (attempt %d/%d).', uri, attemptNumber, ACTIVITY_PUB.MAX_HTTP_ATTEMPT, err)
34
35 const newPayload = Object.assign(payload, {
36 uris: [ uri ],
37 attemptNumber
38 })
39 return activitypubHttpJobScheduler.createJob(undefined, 'activitypubHttpUnicastHandler', newPayload)
40 }
41 }
42
43 export {
44 ActivityPubHttpPayload,
45 activitypubHttpJobScheduler,
46 maybeRetryRequestLater
47 }