diff --git a/packages/backend/src/core/CacheService.ts b/packages/backend/src/core/CacheService.ts index 152e70972e..c997095eb8 100644 --- a/packages/backend/src/core/CacheService.ts +++ b/packages/backend/src/core/CacheService.ts @@ -460,21 +460,25 @@ export class CacheService implements OnApplicationShutdown { } @bindThis - public async findLocalUserById(userId: MiUser['id']): Promise { - return await this.localUserByIdCache.fetchMaybe(userId, async () => { - return await this.usersRepository.findOneBy({ id: userId, host: IsNull() }) as MiLocalUser | null ?? undefined; - }) ?? null; + public async findLocalUserById(userId: MiUser['id']): Promise { + const user = await this.findUserById(userId); + + if (!isLocalUser(user)) { + throw new IdentifiableError('aeac1339-2550-4521-a8e3-781f06d98656', 'User is not local'); + } + + return user; } @bindThis - public async findRemoteUserById(userId: MiUser['id']): Promise { + public async findRemoteUserById(userId: MiUser['id']): Promise { const user = await this.findUserById(userId); - if (user.host == null) { - return null; + if (!isRemoteUser(user)) { + throw new IdentifiableError('aeac1339-2550-4521-a8e3-781f06d98656', 'User is not remote'); } - return user as MiRemoteUser; + return user; } @bindThis diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts index a18aaebebd..7771c08544 100644 --- a/packages/backend/src/core/NoteCreateService.ts +++ b/packages/backend/src/core/NoteCreateService.ts @@ -199,7 +199,6 @@ export class NoteCreateService implements OnApplicationShutdown { @Inject(DI.channelFollowingsRepository) private channelFollowingsRepository: ChannelFollowingsRepository, - private userEntityService: UserEntityService, private noteEntityService: NoteEntityService, private idService: IdService, private globalEventService: GlobalEventService, @@ -676,7 +675,7 @@ export class NoteCreateService implements OnApplicationShutdown { } if (!silent) { - if (this.isLocalUser(user)) this.activeUsersChart.write(user); + if (isLocalUser(user)) this.activeUsersChart.write(user); // Pack the note const noteObj = await this.noteEntityService.pack(note, null, { skipHide: true, withReactionAndUserPairCache: true }); diff --git a/packages/backend/src/core/activitypub/models/ApNoteService.ts b/packages/backend/src/core/activitypub/models/ApNoteService.ts index 9b1293d09a..a2f53a787e 100644 --- a/packages/backend/src/core/activitypub/models/ApNoteService.ts +++ b/packages/backend/src/core/activitypub/models/ApNoteService.ts @@ -9,7 +9,7 @@ import { UnrecoverableError } from 'bullmq'; import promiseLimit from 'promise-limit'; import { ModuleRef } from '@nestjs/core'; import { DI } from '@/di-symbols.js'; -import type { PollsRepository, EmojisRepository, NotesRepository, MiMeta } from '@/models/_.js'; +import type { UsersRepository, PollsRepository, EmojisRepository, NotesRepository, MiMeta } from '@/models/_.js'; import type { Config } from '@/config.js'; import type { MiRemoteUser } from '@/models/User.js'; import type { MiNote } from '@/models/Note.js'; @@ -33,8 +33,7 @@ import { extractMediaFromHtml } from '@/core/activitypub/misc/extract-media-from import { extractMediaFromMfm } from '@/core/activitypub/misc/extract-media-from-mfm.js'; import { getContentByType } from '@/core/activitypub/misc/get-content-by-type.js'; import { CustomEmojiService, encodeEmojiKey, isValidEmojiName } from '@/core/CustomEmojiService.js'; -import { fromTuple } from '@/misc/from-tuple.js'; -import { getOneApId, getApId, isEmoji, getApType, isApObject, isDocument, IApDocument, isLink, isQuestion, getNullableApId, isPost } from '../type.js'; +import { getOneApId, getApId, validPost, isEmoji, getApType, isApObject, isDocument, IApDocument, isLink } from '../type.js'; import { ApLoggerService } from '../ApLoggerService.js'; import { ApMfmService } from '../ApMfmService.js'; import { ApDbResolverService } from '../ApDbResolverService.js'; @@ -63,6 +62,9 @@ export class ApNoteService implements OnModuleInit { @Inject(DI.meta) private meta: MiMeta, + @Inject(DI.usersRepository) + private usersRepository: UsersRepository, + @Inject(DI.pollsRepository) private pollsRepository: PollsRepository, diff --git a/packages/backend/test/e2e/reversi-game.ts b/packages/backend/test/e2e/reversi-game.ts index 788255beac..c1f30a8f4c 100644 --- a/packages/backend/test/e2e/reversi-game.ts +++ b/packages/backend/test/e2e/reversi-game.ts @@ -6,7 +6,6 @@ process.env.NODE_ENV = 'test'; import * as assert from 'assert'; -import { ReversiMatchResponse } from 'misskey-js/entities.js'; import { api, signup } from '../utils.js'; import type * as misskey from 'misskey-js'; @@ -26,7 +25,7 @@ describe('ReversiGame', () => { const response2 = await api('reversi/match', { userId: alice.id }, bob); assert.strictEqual(response2.status, 200); assert.notStrictEqual(response2.body, null); - const body = response2.body as ReversiMatchResponse; + const body = response2.body as misskey.entities.ReversiMatchResponse; assert.strictEqual(body.user1.id, alice.id); assert.strictEqual(body.user2.id, bob.id); });