X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Flib%2Factivitypub%2Factors%2Frefresh.ts;h=6d8428d6627578f8e4155ce2b0aed421bbb73378;hb=0c302acb3c358b4d4d8dee45aed1de1108ea37ea;hp=1f7cfcd8fb32ee17312ab55a17e9296e91bb8167;hpb=9de33c6bd9580ab43cc7bc089c54b2fe2bdfd72d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/lib/activitypub/actors/refresh.ts b/server/lib/activitypub/actors/refresh.ts index 1f7cfcd8f..6d8428d66 100644 --- a/server/lib/activitypub/actors/refresh.ts +++ b/server/lib/activitypub/actors/refresh.ts @@ -1,18 +1,38 @@ import { logger, loggerTagsFactory } from '@server/helpers/logger' +import { PromiseCache } from '@server/helpers/promise-cache' import { PeerTubeRequestError } from '@server/helpers/requests' import { ActorLoadByUrlType } from '@server/lib/model-loaders' import { ActorModel } from '@server/models/actor/actor' import { MActorAccountChannelId, MActorFull } from '@server/types/models' -import { HttpStatusCode } from '@shared/core-utils' +import { HttpStatusCode } from '@shared/models' import { fetchRemoteActor } from './shared' import { APActorUpdater } from './updater' import { getUrlFromWebfinger } from './webfinger' -async function refreshActorIfNeeded ( - actorArg: T, +type RefreshResult = Promise<{ actor: T | MActorFull, refreshed: boolean }> + +type RefreshOptions = { + actor: T fetchedType: ActorLoadByUrlType -): Promise<{ actor: T | MActorFull, refreshed: boolean }> { - if (!actorArg.isOutdated()) return { actor: actorArg, refreshed: false } +} + +const promiseCache = new PromiseCache(doRefresh, (options: RefreshOptions) => options.actor.url) + +function refreshActorIfNeeded (options: RefreshOptions): RefreshResult { + const actorArg = options.actor + if (!actorArg.isOutdated()) return Promise.resolve({ actor: actorArg, refreshed: false }) + + return promiseCache.run(options) +} + +export { + refreshActorIfNeeded +} + +// --------------------------------------------------------------------------- + +async function doRefresh (options: RefreshOptions): RefreshResult { + const { actor: actorArg, fetchedType } = options // We need more attributes const actor = fetchedType === 'all' @@ -28,7 +48,7 @@ async function refreshActorIfNeeded { - logger.warn('Cannot get actor URL from webfinger, keeping the old one.', err) + logger.warn('Cannot get actor URL from webfinger, keeping the old one.', { err }) return actor.url }) }