Sharkey/packages/backend/src/server/api/mastodon/endpoints/meta.ts

63 lines
1.8 KiB
TypeScript
Raw Normal View History

2023-09-24 12:05:59 +02:00
import { Entity } from 'megalodon';
import { MAX_NOTE_TEXT_LENGTH, FILE_TYPE_BROWSERSAFE } from '@/const.js';
2023-09-23 18:49:47 +02:00
import type { Config } from '@/config.js';
2023-09-24 12:05:59 +02:00
import type { MiMeta } from '@/models/Meta.js';
2023-09-23 18:49:47 +02:00
export async function getInstance(
response: Entity.Instance,
contact: Entity.Account,
config: Config,
meta: MiMeta,
) {
return {
uri: config.url,
2023-09-24 12:05:59 +02:00
title: meta.name || 'Sharkey',
2023-09-23 18:49:47 +02:00
short_description:
2023-09-24 12:05:59 +02:00
meta.description?.substring(0, 50) || 'See real server website',
2023-09-23 18:49:47 +02:00
description:
meta.description ||
"This is a vanilla Sharkey Instance. It doesn't seem to have a description.",
2023-09-24 12:05:59 +02:00
email: response.email || '',
2023-09-23 18:49:47 +02:00
version: `3.0.0 (compatible; Sharkey ${config.version})`,
urls: response.urls,
stats: {
user_count: response.stats.user_count,
status_count: response.stats.status_count,
domain_count: response.stats.domain_count,
},
2023-09-24 12:05:59 +02:00
thumbnail: meta.backgroundImageUrl || '/static-assets/transparent.png',
2023-09-23 18:49:47 +02:00
languages: meta.langs,
registrations: !meta.disableRegistration || response.registrations,
approval_required: !response.registrations,
invites_enabled: response.registrations,
configuration: {
accounts: {
max_featured_tags: 20,
},
statuses: {
max_characters: MAX_NOTE_TEXT_LENGTH,
max_media_attachments: 16,
characters_reserved_per_url: response.uri.length,
},
media_attachments: {
supported_mime_types: FILE_TYPE_BROWSERSAFE,
image_size_limit: 10485760,
image_matrix_limit: 16777216,
video_size_limit: 41943040,
video_frame_rate_limit: 60,
video_matrix_limit: 2304000,
},
polls: {
max_options: 10,
max_characters_per_option: 50,
min_expiration: 50,
max_expiration: 2629746,
},
reactions: {
max_reactions: 1,
},
},
contact_account: contact,
rules: [],
};
}