diff --git a/packages/backend/src/core/AccountUpdateService.ts b/packages/backend/src/core/AccountUpdateService.ts index 5d1795819e..363a149316 100644 --- a/packages/backend/src/core/AccountUpdateService.ts +++ b/packages/backend/src/core/AccountUpdateService.ts @@ -16,7 +16,7 @@ import { bindThis } from '@/decorators.js'; import type { PrivateKeyWithPem } from '@misskey-dev/node-http-message-signatures'; @Injectable() -export class AccountUpdateService { +export class AccountUpdateService implements OnModuleInit { private apDeliverManagerService: ApDeliverManagerService; constructor( private moduleRef: ModuleRef, @@ -30,6 +30,10 @@ export class AccountUpdateService { ) { } + async onModuleInit() { + this.apDeliverManagerService = this.moduleRef.get(ApDeliverManagerService.name); + } + private async createUpdatePersonActivity(user: MiLocalUser) { return this.apRendererService.addContext( this.apRendererService.renderUpdate( diff --git a/packages/backend/src/core/activitypub/ApDeliverManagerService.ts b/packages/backend/src/core/activitypub/ApDeliverManagerService.ts index 0aff31d0d1..9a6e7e73ef 100644 --- a/packages/backend/src/core/activitypub/ApDeliverManagerService.ts +++ b/packages/backend/src/core/activitypub/ApDeliverManagerService.ts @@ -3,7 +3,7 @@ * SPDX-License-Identifier: AGPL-3.0-only */ -import { Inject, Injectable } from '@nestjs/common'; +import { Inject, Injectable, OnModuleInit } from '@nestjs/common'; import { IsNull, Not } from 'typeorm'; import { DI } from '@/di-symbols.js'; import type { FollowingsRepository } from '@/models/_.js'; @@ -17,6 +17,7 @@ import type Logger from '@/logger.js'; import { UserKeypairService } from '../UserKeypairService.js'; import { ApLoggerService } from './ApLoggerService.js'; import type { PrivateKeyWithPem } from '@misskey-dev/node-http-message-signatures'; +import { ModuleRef } from '@nestjs/core'; interface IRecipe { type: string; @@ -212,21 +213,27 @@ class DeliverManager { } @Injectable() -export class ApDeliverManagerService { +export class ApDeliverManagerService implements OnModuleInit { private logger: Logger; + private accountUpdateService: AccountUpdateService; constructor( + private moduleRef: ModuleRef, + @Inject(DI.followingsRepository) private followingsRepository: FollowingsRepository, private userKeypairService: UserKeypairService, private queueService: QueueService, - private accountUpdateService: AccountUpdateService, private apLoggerService: ApLoggerService, ) { this.logger = this.apLoggerService.logger.createSubLogger('deliver-manager'); } + async onModuleInit() { + this.accountUpdateService = this.moduleRef.get(AccountUpdateService.name); + } + /** * Deliver activity to followers * @param actor diff --git a/packages/backend/test/unit/UserSuspendService.ts b/packages/backend/test/unit/UserSuspendService.ts index 6d69a8e5e1..d3b1a6a210 100644 --- a/packages/backend/test/unit/UserSuspendService.ts +++ b/packages/backend/test/unit/UserSuspendService.ts @@ -31,6 +31,7 @@ import { ApDeliverManagerService } from '@/core/activitypub/ApDeliverManagerServ import { RelayService } from '@/core/RelayService.js'; import { ApLoggerService } from '@/core/activitypub/ApLoggerService.js'; import { MiRemoteUser } from '@/models/User.js'; +import { UserKeypairService } from '@/core/UserKeypairService.js'; function genHost() { return randomString() + '.example.com'; @@ -47,6 +48,9 @@ describe('UserSuspendService', () => { let globalEventService: jest.Mocked; let apRendererService: jest.Mocked; let moderationLogService: jest.Mocked; + let userKeypairService: jest.Mocked; + let accountUpdateService: AccountUpdateService; + let apDeliverManagerService: ApDeliverManagerService; async function createUser(data: Partial = {}): Promise { const user = { @@ -92,6 +96,14 @@ describe('UserSuspendService', () => { UserSuspendService, AccountUpdateService, ApDeliverManagerService, + { + provide: AccountUpdateService.name, + useExisting: AccountUpdateService, + }, + { + provide: ApDeliverManagerService.name, + useExisting: ApDeliverManagerService, + }, { provide: UserEntityService, useFactory: () => ({ @@ -145,6 +157,12 @@ describe('UserSuspendService', () => { }, }), }, + { + provide: UserKeypairService, + useFactory: () => ({ + refreshAndPrepareEd25519KeyPair: jest.fn(), + }), + } ], }).compile(); @@ -159,6 +177,12 @@ describe('UserSuspendService', () => { globalEventService = app.get(GlobalEventService) as jest.Mocked; apRendererService = app.get(ApRendererService) as jest.Mocked; moderationLogService = app.get(ModerationLogService) as jest.Mocked; + userKeypairService = app.get(UserKeypairService) as jest.Mocked; + + apDeliverManagerService = app.get(ApDeliverManagerService); + await apDeliverManagerService.onModuleInit(); + accountUpdateService = app.get(AccountUpdateService.name); + await accountUpdateService.onModuleInit(); }); beforeEach(() => {