1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-05-05 21:45:59 +02:00

fix(backend): handle array or string in alsoKnownAs (#17275)

* fix: handle array or string in alsoKnownAs, closes #17274

* style: use more idiomatic toArray() for UserEntityService handling of alsoKnownAs

* fix: handle array-valued or unwrapped alsoKnownAs in ApPersonService

* doc: note about bugfix for alsoKnownAs
This commit is contained in:
Evan Prodromou
2026-04-04 11:43:37 -04:00
committed by GitHub
parent e601fcb729
commit 8169c57bd1
5 changed files with 144 additions and 88 deletions

View File

@@ -376,7 +376,7 @@ export class ApPersonService implements OnModuleInit {
isLocked: person.manuallyApprovesFollowers,
movedToUri: person.movedTo,
movedAt: person.movedTo ? new Date() : null,
alsoKnownAs: person.alsoKnownAs,
alsoKnownAs: toArray(person.alsoKnownAs),
isExplorable: person.discoverable,
username: person.preferredUsername,
usernameLower: person.preferredUsername?.toLowerCase(),
@@ -568,7 +568,7 @@ export class ApPersonService implements OnModuleInit {
isCat: (person as any).isCat === true,
isLocked: person.manuallyApprovesFollowers,
movedToUri: person.movedTo ?? null,
alsoKnownAs: person.alsoKnownAs ?? null,
alsoKnownAs: person.alsoKnownAs ? toArray(person.alsoKnownAs) : null,
isExplorable: person.discoverable,
...(await this.resolveAvatarAndBanner(exist, person.icon, person.image).catch(() => ({}))),
} as Partial<MiRemoteUser> & Pick<MiRemoteUser, 'isBot' | 'isCat' | 'isLocked' | 'movedToUri' | 'alsoKnownAs' | 'isExplorable'>;

View File

@@ -51,6 +51,7 @@ import { ChatService } from '@/core/ChatService.js';
import type { OnModuleInit } from '@nestjs/common';
import type { NoteEntityService } from './NoteEntityService.js';
import type { PageEntityService } from './PageEntityService.js';
import { toArray } from '@/misc/prelude/array.js';
const Ajv = _Ajv.default;
const ajv = new Ajv();
@@ -527,10 +528,10 @@ export class UserEntityService implements OnModuleInit {
url: profile!.url,
uri: user.uri,
movedTo: user.movedToUri ? this.apPersonService.resolvePerson(user.movedToUri).then(user => user.id).catch(() => null) : null,
alsoKnownAs: user.alsoKnownAs
? Promise.all(user.alsoKnownAs.map(uri => this.apPersonService.fetchPerson(uri).then(user => user?.id).catch(() => null)))
.then(xs => xs.length === 0 ? null : xs.filter(x => x != null))
: null,
alsoKnownAs: user.alsoKnownAs ?
Promise.all(toArray(user.alsoKnownAs).map(uri => this.apPersonService.fetchPerson(uri).then(user => user?.id).catch(() => null)))
.then(xs => xs.length === 0 ? null : xs.filter(x => x != null))
: null,
createdAt: this.idService.parse(user.id).date.toISOString(),
updatedAt: user.updatedAt ? user.updatedAt.toISOString() : null,
lastFetchedAt: user.lastFetchedAt ? user.lastFetchedAt.toISOString() : null,