pl-api: infer group domain from url

Signed-off-by: nicole mikołajczyk <git@mkljczk.pl>
This commit is contained in:
nicole mikołajczyk
2025-10-27 05:33:11 +01:00
parent 56af5a26dd
commit e6a7e45f54
2 changed files with 8 additions and 21 deletions

View File

@ -1,31 +1,13 @@
import pick from 'lodash.pick'; import pick from 'lodash.pick';
import * as v from 'valibot'; import * as v from 'valibot';
import { guessFqn } from '../utils/domain';
import { customEmojiSchema } from './custom-emoji'; import { customEmojiSchema } from './custom-emoji';
import { relationshipSchema } from './relationship'; import { relationshipSchema } from './relationship';
import { roleSchema } from './role'; import { roleSchema } from './role';
import { coerceObject, datetimeSchema, filteredArray } from './utils'; import { coerceObject, datetimeSchema, filteredArray } from './utils';
const getDomainFromURL = (account: Pick<Account, 'url'>): string => {
try {
const url = account.url;
return new URL(url).host;
} catch {
return '';
}
};
const guessFqn = (account: Pick<Account, 'acct' | 'url'>): string => {
const acct = account.acct;
const [user, domain] = acct.split('@');
if (domain) {
return acct;
} else {
return [user, getDomainFromURL(account)].join('@');
}
};
const filterBadges = (tags?: string[]) => const filterBadges = (tags?: string[]) =>
tags?.filter(tag => tag.startsWith('badge:')).map(tag => v.parse(roleSchema, { id: tag, name: tag.replace(/^badge:/, '') })); tags?.filter(tag => tag.startsWith('badge:')).map(tag => v.parse(roleSchema, { id: tag, name: tag.replace(/^badge:/, '') }));

View File

@ -1,5 +1,7 @@
import * as v from 'valibot'; import * as v from 'valibot';
import { getDomainFromURL } from '../utils/domain';
import { customEmojiSchema } from './custom-emoji'; import { customEmojiSchema } from './custom-emoji';
import { groupRelationshipSchema } from './group-relationship'; import { groupRelationshipSchema } from './group-relationship';
import { datetimeSchema, filteredArray } from './utils'; import { datetimeSchema, filteredArray } from './utils';
@ -8,8 +10,11 @@ import { datetimeSchema, filteredArray } from './utils';
* @category Schemas * @category Schemas
*/ */
const groupSchema = v.pipe(v.any(), v.transform((group: any) => { const groupSchema = v.pipe(v.any(), v.transform((group: any) => {
const domain = getDomainFromURL(group);
if (group?.config) { if (group?.config) {
return { return {
domain,
display_name: group.name, display_name: group.name,
members_count: group.member_count, members_count: group.member_count,
note: group.short_description, note: group.short_description,
@ -25,7 +30,7 @@ const groupSchema = v.pipe(v.any(), v.transform((group: any) => {
...group, ...group,
}; };
} }
return group; return { domain, ...group };
}), v.object({ }), v.object({
avatar: v.fallback(v.string(), ''), avatar: v.fallback(v.string(), ''),
avatar_static: v.fallback(v.string(), ''), avatar_static: v.fallback(v.string(), ''),