kopia lustrzana https://gitlab.com/soapbox-pub/soapbox
Update Takahē compatibility, add fixVersion to instanceSchema
Signed-off-by: marcin mikołajczak <git@mkljczk.pl>environments/review-takahe-bt2bcm/deployments/4218
rodzic
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],
|
||||||
|
|
Ładowanie…
Reference in New Issue