-import { logger, retryTransactionWrapper } from '../../../helpers'
-import { sequelizeTypescript } from '../../../initializers'
-import { ActorModel } from '../../../models/activitypub/actor'
-import { ActorFollowModel } from '../../../models/activitypub/actor-follow'
-import { getOrCreateActorAndServerAndModel } from '../actor'
-import { sendAccept } from '../send'
-
-async function processFollowActivity (activity: ActivityFollow) {
- const activityObject = activity.object
- const actor = await getOrCreateActorAndServerAndModel(activity.actor)
-
- return processFollow(actor, activityObject)
+import { retryTransactionWrapper } from '../../../helpers/database-utils'
+import { logger } from '../../../helpers/logger'
+import { CONFIG } from '../../../initializers/config'
+import { sequelizeTypescript } from '../../../initializers/database'
+import { getAPId } from '../../../lib/activitypub/activity'
+import { ActorModel } from '../../../models/actor/actor'
+import { ActorFollowModel } from '../../../models/actor/actor-follow'
+import { APProcessorOptions } from '../../../types/activitypub-processor.model'
+import { MActorFollowActors, MActorSignature } from '../../../types/models'
+import { Notifier } from '../../notifier'
+import { autoFollowBackIfNeeded } from '../follow'
+import { sendAccept, sendReject } from '../send'
+
+async function processFollowActivity (options: APProcessorOptions<ActivityFollow>) {
+ const { activity, byActor } = options
+
+ const activityId = activity.id
+ const objectId = getAPId(activity.object)
+
+ return retryTransactionWrapper(processFollow, byActor, activityId, objectId)