Update Takahē compatibility, add fixVersion to instanceSchema

Signed-off-by: marcin mikołajczak <git@mkljczk.pl>
environments/review-takahe-bt2bcm/deployments/4218
marcin mikołajczak 11 months ago
parent 0658530447
commit 4752feb1b8

@ -6,6 +6,25 @@ import { mrfSimpleSchema } from './pleroma';
import { ruleSchema } from './rule'; import { ruleSchema } from './rule';
import { coerceObject, filteredArray, mimeSchema } from './utils'; import { coerceObject, filteredArray, mimeSchema } from './utils';
const fixVersion = (version: string) => {
// Handle Mastodon release candidates
if (new RegExp(/[0-9.]+rc[0-9]+/g).test(version)) {
version = version.split('rc').join('-rc');
}
// Rename Akkoma to Pleroma+akkoma
if (version.includes('Akkoma')) {
version = '2.7.2 (compatible; Pleroma 2.4.50+akkoma)';
}
// Set Takahē version to a Pleroma-like string
if (version.startsWith('takahe/')) {
version = `0.0.0 (compatible; Takahe ${version.slice(7)})`;
}
return version;
};
const configurationSchema = coerceObject({ const configurationSchema = coerceObject({
chats: coerceObject({ chats: coerceObject({
max_characters: z.number().catch(5000), max_characters: z.number().catch(5000),
@ -136,6 +155,8 @@ const instanceSchema = coerceObject({
}).transform(({ max_media_attachments, max_toot_chars, poll_limits, ...instance }) => { }).transform(({ max_media_attachments, max_toot_chars, poll_limits, ...instance }) => {
const { configuration } = instance; const { configuration } = instance;
const version = fixVersion(instance.version);
const polls = { const polls = {
...configuration.polls, ...configuration.polls,
max_characters_per_option: configuration.polls.max_characters_per_option ?? poll_limits.max_option_chars ?? 25, max_characters_per_option: configuration.polls.max_characters_per_option ?? poll_limits.max_option_chars ?? 25,
@ -157,6 +178,7 @@ const instanceSchema = coerceObject({
polls, polls,
statuses, statuses,
}, },
version,
}; };
}); });

@ -194,6 +194,7 @@ const getInstanceFeatures = (instance: Instance) => {
announcements: any([ announcements: any([
v.software === MASTODON && gte(v.compatVersion, '3.1.0'), v.software === MASTODON && gte(v.compatVersion, '3.1.0'),
v.software === PLEROMA && gte(v.version, '2.2.49'), v.software === PLEROMA && gte(v.version, '2.2.49'),
v.software === TAKAHE && gte(v.version, '0.7.0'),
]), ]),
/** /**
@ -233,6 +234,7 @@ const getInstanceFeatures = (instance: Instance) => {
v.software === MASTODON && gte(v.compatVersion, '3.1.0'), v.software === MASTODON && gte(v.compatVersion, '3.1.0'),
v.software === PLEROMA && gte(v.version, '0.9.9'), v.software === PLEROMA && gte(v.version, '0.9.9'),
v.software === PIXELFED, v.software === PIXELFED,
v.software === TAKAHE && gte(v.version, '0.9.0'),
]), ]),
/** /**
@ -366,9 +368,14 @@ const getInstanceFeatures = (instance: Instance) => {
v.software === WILDEBEEST, v.software === WILDEBEEST,
]), ]),
/**
* Ability to edit published posts.
* @see PUT /api/v1/statuses/:id
*/
editStatuses: any([ editStatuses: any([
v.software === FRIENDICA && gte(v.version, '2022.12.0'), v.software === FRIENDICA && gte(v.version, '2022.12.0'),
v.software === MASTODON && gte(v.version, '3.5.0'), v.software === MASTODON && gte(v.version, '3.5.0'),
v.software === TAKAHE && gte(v.version, '0.8.0'),
features.includes('editing'), features.includes('editing'),
]), ]),
@ -491,6 +498,7 @@ const getInstanceFeatures = (instance: Instance) => {
followHashtags: any([ followHashtags: any([
v.software === MASTODON && gte(v.compatVersion, '4.0.0'), v.software === MASTODON && gte(v.compatVersion, '4.0.0'),
v.software === PLEROMA && v.build === AKKOMA, v.software === PLEROMA && v.build === AKKOMA,
v.software === TAKAHE && gte(v.version, '0.9.0'),
]), ]),
/** /**
@ -677,6 +685,7 @@ const getInstanceFeatures = (instance: Instance) => {
mutesDuration: any([ mutesDuration: any([
v.software === PLEROMA && gte(v.version, '2.3.0'), v.software === PLEROMA && gte(v.version, '2.3.0'),
v.software === MASTODON && gte(v.compatVersion, '3.3.0'), v.software === MASTODON && gte(v.compatVersion, '3.3.0'),
v.software === TAKAHE,
]), ]),
/** /**
@ -732,6 +741,7 @@ const getInstanceFeatures = (instance: Instance) => {
v.software === FIREFISH, v.software === FIREFISH,
v.software === MASTODON && gte(v.version, '2.8.0'), v.software === MASTODON && gte(v.version, '2.8.0'),
v.software === PLEROMA, v.software === PLEROMA,
v.software === TAKAHE && gte(v.version, '0.8.0'),
v.software === TRUTHSOCIAL, v.software === TRUTHSOCIAL,
]), ]),
@ -758,6 +768,7 @@ const getInstanceFeatures = (instance: Instance) => {
profileFields: any([ profileFields: any([
v.software === MASTODON, v.software === MASTODON,
v.software === PLEROMA, v.software === PLEROMA,
v.software === TAKAHE && gte(v.version, '0.7.0'),
]), ]),
/** /**
@ -978,7 +989,6 @@ export const parseVersion = (version: string): Backend => {
loose: true, loose: true,
}) : null; }) : null;
const compat = match ? semverParse(match[1]) || semverCoerce(match[1]) : null; const compat = match ? semverParse(match[1]) || semverCoerce(match[1]) : null;
if (match && semver && compat) { if (match && semver && compat) {
return { return {
build: semver.build[0], build: semver.build[0],

Loading…
Cancel
Save