-import { logger, retryTransactionWrapper } from '../../../helpers'
-import { sequelizeTypescript } from '../../../initializers'
-import { AccountModel } from '../../../models/account/account'
-import { AccountFollowModel } from '../../../models/account/account-follow'
-import { getOrCreateAccountAndServer } from '../account'
-import { sendAccept } from '../send'
-
-async function processFollowActivity (activity: ActivityFollow) {
- const activityObject = activity.object
- const account = await getOrCreateAccountAndServer(activity.actor)
-
- return processFollow(account, 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)