From e6a7e45f54046cdc97554576400e5cedd5d65911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Mon, 27 Oct 2025 05:33:11 +0100 Subject: [PATCH] pl-api: infer group domain from url MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/pl-api/lib/entities/account.ts | 22 ++-------------------- packages/pl-api/lib/entities/group.ts | 7 ++++++- 2 files changed, 8 insertions(+), 21 deletions(-) diff --git a/packages/pl-api/lib/entities/account.ts b/packages/pl-api/lib/entities/account.ts index b8a192e1e..313a99699 100644 --- a/packages/pl-api/lib/entities/account.ts +++ b/packages/pl-api/lib/entities/account.ts @@ -1,31 +1,13 @@ import pick from 'lodash.pick'; import * as v from 'valibot'; +import { guessFqn } from '../utils/domain'; + import { customEmojiSchema } from './custom-emoji'; import { relationshipSchema } from './relationship'; import { roleSchema } from './role'; import { coerceObject, datetimeSchema, filteredArray } from './utils'; -const getDomainFromURL = (account: Pick): string => { - try { - const url = account.url; - return new URL(url).host; - } catch { - return ''; - } -}; - -const guessFqn = (account: Pick): string => { - const acct = account.acct; - const [user, domain] = acct.split('@'); - - if (domain) { - return acct; - } else { - return [user, getDomainFromURL(account)].join('@'); - } -}; - const filterBadges = (tags?: string[]) => tags?.filter(tag => tag.startsWith('badge:')).map(tag => v.parse(roleSchema, { id: tag, name: tag.replace(/^badge:/, '') })); diff --git a/packages/pl-api/lib/entities/group.ts b/packages/pl-api/lib/entities/group.ts index 22844a4f1..647d271d0 100644 --- a/packages/pl-api/lib/entities/group.ts +++ b/packages/pl-api/lib/entities/group.ts @@ -1,5 +1,7 @@ import * as v from 'valibot'; +import { getDomainFromURL } from '../utils/domain'; + import { customEmojiSchema } from './custom-emoji'; import { groupRelationshipSchema } from './group-relationship'; import { datetimeSchema, filteredArray } from './utils'; @@ -8,8 +10,11 @@ import { datetimeSchema, filteredArray } from './utils'; * @category Schemas */ const groupSchema = v.pipe(v.any(), v.transform((group: any) => { + const domain = getDomainFromURL(group); + if (group?.config) { return { + domain, display_name: group.name, members_count: group.member_count, note: group.short_description, @@ -25,7 +30,7 @@ const groupSchema = v.pipe(v.any(), v.transform((group: any) => { ...group, }; } - return group; + return { domain, ...group }; }), v.object({ avatar: v.fallback(v.string(), ''), avatar_static: v.fallback(v.string(), ''),