From 8fffe21a7bc96d08b229293d66ddba576e609790 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 25 May 2018 16:21:16 +0200 Subject: Refractor and optimize AP collections Only display urls in general object, and paginate video comments, shares, likes and dislikes --- server/lib/activitypub/crawl.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 server/lib/activitypub/crawl.ts (limited to 'server/lib/activitypub/crawl.ts') diff --git a/server/lib/activitypub/crawl.ts b/server/lib/activitypub/crawl.ts new file mode 100644 index 000000000..7305b3969 --- /dev/null +++ b/server/lib/activitypub/crawl.ts @@ -0,0 +1,40 @@ +import { ACTIVITY_PUB, JOB_REQUEST_TIMEOUT } from '../../initializers' +import { doRequest } from '../../helpers/requests' +import { logger } from '../../helpers/logger' + +async function crawlCollectionPage (uri: string, handler: (items: T[]) => Promise) { + logger.info('Crawling ActivityPub data on %s.', uri) + + const options = { + method: 'GET', + uri, + json: true, + activityPub: true, + timeout: JOB_REQUEST_TIMEOUT + } + + const response = await doRequest(options) + const firstBody = response.body + + let limit = ACTIVITY_PUB.FETCH_PAGE_LIMIT + let i = 0 + let nextLink = firstBody.first + while (nextLink && i < limit) { + options.uri = nextLink + + const { body } = await doRequest(options) + nextLink = body.next + i++ + + if (Array.isArray(body.orderedItems)) { + const items = body.orderedItems + logger.info('Processing %i ActivityPub items for %s.', items.length, nextLink) + + await handler(items) + } + } +} + +export { + crawlCollectionPage +} -- cgit v1.2.3