diff --git a/packages/backend/src/core/CacheService.ts b/packages/backend/src/core/CacheService.ts index bf31c6c105..e7b4157da8 100644 --- a/packages/backend/src/core/CacheService.ts +++ b/packages/backend/src/core/CacheService.ts @@ -584,11 +584,27 @@ export class CacheService implements OnApplicationShutdown { } @bindThis - public async findUserByAcct(acct: string): Promise { + public async findOptionalUserById(userId: MiUser['id']): Promise { + return await this.userByIdCache.fetchMaybe(userId); + } + + @bindThis + public async findUserByAcct(acct: string | Acct.Acct): Promise { + acct = typeof(acct) === 'string' ? acct : Acct.toString(acct); const id = await this.userByAcctCache.fetch(acct); return await this.findUserById(id); } + @bindThis + public async findOptionalUserByAcct(acct: string | Acct.Acct): Promise { + acct = typeof(acct) === 'string' ? acct : Acct.toString(acct); + + const id = await this.userByAcctCache.fetchMaybe(acct); + if (id == null) return undefined; + + return await this.findOptionalUserById(id); + } + @bindThis public async findLocalUserById(userId: MiUser['id']): Promise { const user = await this.findUserById(userId); @@ -600,6 +616,17 @@ export class CacheService implements OnApplicationShutdown { return user; } + @bindThis + public async findOptionalLocalUserById(userId: MiUser['id']): Promise { + const user = await this.findOptionalUserById(userId); + + if (user && !isLocalUser(user)) { + throw new IdentifiableError('aeac1339-2550-4521-a8e3-781f06d98656', 'User is not local'); + } + + return user; + } + @bindThis public async findRemoteUserById(userId: MiUser['id']): Promise { const user = await this.findUserById(userId); @@ -612,8 +639,14 @@ export class CacheService implements OnApplicationShutdown { } @bindThis - public findOptionalUserById(userId: MiUser['id']) { - return this.userByIdCache.fetchMaybe(userId); + public async findOptionalRemoteUserById(userId: MiUser['id']): Promise { + const user = await this.findOptionalUserById(userId); + + if (user && !isRemoteUser(user)) { + throw new IdentifiableError('aeac1339-2550-4521-a8e3-781f06d98656', 'User is not remote'); + } + + return user; } @bindThis