2026-05-13 17:29:06 +07:00
|
|
|
import known5chanDeveloperEntries from '../../data/known-5chan-developers.json';
|
|
|
|
|
|
|
|
|
|
interface Known5chanDeveloperEntry {
|
|
|
|
|
address: string;
|
|
|
|
|
githubProfileUrl?: string;
|
|
|
|
|
name?: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const KNOWN_5CHAN_DEVELOPER_ENTRIES = known5chanDeveloperEntries as readonly Known5chanDeveloperEntry[];
|
|
|
|
|
|
|
|
|
|
type AuthorBadgeIcon = 'admin' | 'mod';
|
|
|
|
|
|
|
|
|
|
interface AuthorBadge {
|
|
|
|
|
capitalizeLabel?: boolean;
|
|
|
|
|
icon: AuthorBadgeIcon;
|
|
|
|
|
label: string;
|
|
|
|
|
title: '5chan Dev' | 'administrator_of_this_board' | 'moderator_of_this_board';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const normalizeBoardRole = (role?: string): string | undefined => {
|
|
|
|
|
const normalizedRole = role?.trim();
|
|
|
|
|
if (!normalizedRole) return undefined;
|
|
|
|
|
return normalizedRole.toLowerCase() === 'moderator' ? 'mod' : normalizedRole;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const isKnown5chanDeveloper = (address?: string): boolean =>
|
|
|
|
|
typeof address === 'string' && KNOWN_5CHAN_DEVELOPER_ENTRIES.some((developer) => developer.address === address);
|
|
|
|
|
|
2026-05-19 23:34:33 +07:00
|
|
|
/** 5chan Dev capcode only — never board owner/mod badges. */
|
|
|
|
|
export const get5chanDeveloperBadge = (address?: string): AuthorBadge | undefined => (isKnown5chanDeveloper(address) ? getAuthorBadge({ address }) : undefined);
|
|
|
|
|
|
2026-05-13 17:29:06 +07:00
|
|
|
export const getAuthorBadge = ({ address, role }: { address?: string; role?: string }): AuthorBadge | undefined => {
|
|
|
|
|
const boardRole = normalizeBoardRole(role);
|
|
|
|
|
const isDeveloper = isKnown5chanDeveloper(address);
|
|
|
|
|
|
|
|
|
|
if (isDeveloper) {
|
|
|
|
|
return {
|
|
|
|
|
icon: 'admin',
|
|
|
|
|
label: '5chan Dev',
|
|
|
|
|
title: '5chan Dev',
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!boardRole) return undefined;
|
|
|
|
|
|
|
|
|
|
const isMod = boardRole?.toLowerCase() === 'mod';
|
|
|
|
|
return {
|
|
|
|
|
capitalizeLabel: true,
|
|
|
|
|
icon: isMod ? 'mod' : 'admin',
|
|
|
|
|
label: `Board ${boardRole}`,
|
|
|
|
|
title: isMod ? 'moderator_of_this_board' : 'administrator_of_this_board',
|
|
|
|
|
};
|
|
|
|
|
};
|