diff options
| author | Marie <marie@kaifa.ch> | 2023-10-01 01:58:06 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-01 01:58:06 +0200 |
| commit | 54578f69656ed534dfb28c4bf67b03d7b30bd261 (patch) | |
| tree | 5b1eb0414be4c1df3c3f0fa0a83c0ff5a0479c73 /packages/backend/src/server/api/mastodon/endpoints | |
| parent | merge: add like button #32 (diff) | |
| download | sharkey-54578f69656ed534dfb28c4bf67b03d7b30bd261.tar.gz sharkey-54578f69656ed534dfb28c4bf67b03d7b30bd261.tar.bz2 sharkey-54578f69656ed534dfb28c4bf67b03d7b30bd261.zip | |
upd: add MFM to HTML support and Mentions parsing to mastodon api (#33)
* upd: attempt to turn MFM to html on mastodon
* revert: recent change until better implementation later
* chore: remove unused packages
* Update docker.yml
* upd: add MFM to HTML for timelines and status view
* chore: lint
* upd: megalodon resolve urls
* upd: add spliting
* test: local user mention
* test: change local user url in mention
* upd: change check
* test: megalodon changes
* upd: edit resolving of local users
This is starting to drive me nuts
* upd: remove the @ symbol in query
* fix: make renderPerson return host instead of null for local
* upd: change url for local user
* upd: change limit
* upd: add url to output
* upd: add mastodon boolean
* test: test different format
* fix: test of different format
* test: change up resolving
* fix: forgot to provide url
* upd: change lookup function a bit
* test: substring
* test: regex
* upd: remove substr
* test: new regexs
* dirty test
* test: one last attempt for today
* upd: fix build error
* upd: take input from iceshrimp dev
* upd: parse remote statuses
* upd: fix pleroma users misformatted urls
* upd: add uri to normal user
* fix: forgot to push updated types
* fix: resolving broke
* fix: html not converting correctly
* fix: return default img if no banner
* upd: swap out img used for no header, set fallback avatar
* fix: html escaped & and ' symbols
* upd: fix ' converting into 39; and get profile fields
* upd: resolve fields on lookup
---------
Co-authored-by: Amelia Yukii <123300075+Insert5StarName@users.noreply.github.com>
Diffstat (limited to 'packages/backend/src/server/api/mastodon/endpoints')
3 files changed, 34 insertions, 24 deletions
diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index 4abb5fff19..24ebe0c48b 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -63,7 +63,7 @@ export class ApiAccountMastodon { const data = await this.client.search((this.request.query as any).acct, { type: 'accounts' }); return convertAccount(data.data.accounts[0]); } catch (e: any) { - /* console.error(e); + /* console.error(e) console.error(e.response.data); */ return e.response; } diff --git a/packages/backend/src/server/api/mastodon/endpoints/status.ts b/packages/backend/src/server/api/mastodon/endpoints/status.ts index a295564b90..46dce65081 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/status.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/status.ts @@ -1,10 +1,13 @@ import querystring from 'querystring'; import { emojiRegexAtStartToEnd } from '@/misc/emoji-regex.js'; -import { convertId, IdConvertType as IdType, convertAccount, convertAttachment, convertPoll, convertStatus, convertStatusSource } from '../converters.js'; +import { convertId, IdConvertType as IdType, convertAccount, convertAttachment, convertPoll, convertStatusSource, MastoConverters } from '../converters.js'; import { getClient } from '../MastodonApiServerService.js'; import { convertTimelinesArgsId, limitToInt } from './timeline.js'; import type { Entity } from 'megalodon'; import type { FastifyInstance } from 'fastify'; +import type { Config } from '@/config.js'; +import { NotesRepository, UsersRepository } from '@/models/_.js'; +import { UserEntityService } from '@/core/entities/UserEntityService.js'; function normalizeQuery(data: any) { const str = querystring.stringify(data); @@ -13,9 +16,11 @@ function normalizeQuery(data: any) { export class ApiStatusMastodon { private fastify: FastifyInstance; + private mastoconverter: MastoConverters; - constructor(fastify: FastifyInstance) { + constructor(fastify: FastifyInstance, config: Config, usersrepo: UsersRepository, notesrepo: NotesRepository, userentity: UserEntityService) { this.fastify = fastify; + this.mastoconverter = new MastoConverters(config, usersrepo, notesrepo, userentity); } public async getStatus() { @@ -25,7 +30,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.getStatus(convertId(_request.params.id, IdType.SharkeyId)); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(_request.is404 ? 404 : 401).send(e.response.data); @@ -59,8 +64,8 @@ export class ApiStatusMastodon { convertId(_request.params.id, IdType.SharkeyId), convertTimelinesArgsId(limitToInt(query)), ); - data.data.ancestors = data.data.ancestors.map((status: Entity.Status) => convertStatus(status)); - data.data.descendants = data.data.descendants.map((status: Entity.Status) => convertStatus(status)); + data.data.ancestors = await Promise.all(data.data.ancestors.map(async (status: Entity.Status) => await this.mastoconverter.convertStatus(status))); + data.data.descendants = await Promise.all(data.data.descendants.map(async (status: Entity.Status) => await this.mastoconverter.convertStatus(status))); reply.send(data.data); } catch (e: any) { console.error(e); @@ -219,7 +224,7 @@ export class ApiStatusMastodon { } const data = await client.postStatus(text, body); - reply.send(convertStatus(data.data as Entity.Status)); + reply.send(await this.mastoconverter.convertStatus(data.data as Entity.Status)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -240,7 +245,7 @@ export class ApiStatusMastodon { body.media_ids = (body.media_ids as string[]).map((p) => convertId(p, IdType.SharkeyId)); } const data = await client.editStatus(convertId(_request.params.id, IdType.SharkeyId), body); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(_request.is404 ? 404 : 401).send(e.response.data); @@ -258,7 +263,7 @@ export class ApiStatusMastodon { convertId(_request.params.id, IdType.SharkeyId), '❤', )) as any; - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -276,7 +281,7 @@ export class ApiStatusMastodon { convertId(_request.params.id, IdType.SharkeyId), '❤', ); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -291,7 +296,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.reblogStatus(convertId(_request.params.id, IdType.SharkeyId)); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -306,7 +311,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.unreblogStatus(convertId(_request.params.id, IdType.SharkeyId)); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -321,7 +326,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.bookmarkStatus(convertId(_request.params.id, IdType.SharkeyId)); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -336,7 +341,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.unbookmarkStatus(convertId(_request.params.id, IdType.SharkeyId)); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -351,7 +356,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.pinStatus(convertId(_request.params.id, IdType.SharkeyId)); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -366,7 +371,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.unpinStatus(convertId(_request.params.id, IdType.SharkeyId)); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -381,7 +386,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.createEmojiReaction(convertId(_request.params.id, IdType.SharkeyId), _request.params.name); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); @@ -396,7 +401,7 @@ export class ApiStatusMastodon { const client = getClient(BASE_URL, accessTokens); try { const data = await client.deleteEmojiReaction(convertId(_request.params.id, IdType.SharkeyId), _request.params.name); - reply.send(convertStatus(data.data)); + reply.send(await this.mastoconverter.convertStatus(data.data)); } catch (e: any) { console.error(e); reply.code(401).send(e.response.data); diff --git a/packages/backend/src/server/api/mastodon/endpoints/timeline.ts b/packages/backend/src/server/api/mastodon/endpoints/timeline.ts index a171205161..bb66a7707c 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/timeline.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/timeline.ts @@ -1,8 +1,11 @@ import { ParsedUrlQuery } from 'querystring'; -import { convertId, IdConvertType as IdType, convertAccount, convertConversation, convertList, convertStatus } from '../converters.js'; +import { convertId, IdConvertType as IdType, convertAccount, convertConversation, convertList, MastoConverters } from '../converters.js'; import { getClient } from '../MastodonApiServerService.js'; import type { Entity } from 'megalodon'; import type { FastifyInstance } from 'fastify'; +import type { Config } from '@/config.js'; +import { NotesRepository, UsersRepository } from '@/models/_.js'; +import { UserEntityService } from '@/core/entities/UserEntityService.js'; export function limitToInt(q: ParsedUrlQuery) { const object: any = q; @@ -38,9 +41,11 @@ export function convertTimelinesArgsId(q: ParsedUrlQuery) { export class ApiTimelineMastodon { private fastify: FastifyInstance; + private mastoconverter: MastoConverters; - constructor(fastify: FastifyInstance) { + constructor(fastify: FastifyInstance, config: Config, usersRepository: UsersRepository, notesRepository: NotesRepository, userEntityService: UserEntityService) { this.fastify = fastify; + this.mastoconverter = new MastoConverters(config, usersRepository, notesRepository, userEntityService); } public async getTL() { @@ -53,7 +58,7 @@ export class ApiTimelineMastodon { const data = query.local === 'true' ? await client.getLocalTimeline(convertTimelinesArgsId(argsToBools(limitToInt(query)))) : await client.getPublicTimeline(convertTimelinesArgsId(argsToBools(limitToInt(query)))); - reply.send(data.data.map((status: Entity.Status) => convertStatus(status))); + reply.send(await Promise.all(data.data.map(async (status: Entity.Status) => await this.mastoconverter.convertStatus(status)))); } catch (e: any) { console.error(e); console.error(e.response.data); @@ -70,7 +75,7 @@ export class ApiTimelineMastodon { try { const query: any = _request.query; const data = await client.getHomeTimeline(convertTimelinesArgsId(limitToInt(query))); - reply.send(data.data.map((status: Entity.Status) => convertStatus(status))); + reply.send(await Promise.all(data.data.map(async (status: Entity.Status) => await this.mastoconverter.convertStatus(status)))); } catch (e: any) { console.error(e); console.error(e.response.data); @@ -88,7 +93,7 @@ export class ApiTimelineMastodon { const query: any = _request.query; const params: any = _request.params; const data = await client.getTagTimeline(params.hashtag, convertTimelinesArgsId(limitToInt(query))); - reply.send(data.data.map((status: Entity.Status) => convertStatus(status))); + reply.send(await Promise.all(data.data.map(async (status: Entity.Status) => await this.mastoconverter.convertStatus(status)))); } catch (e: any) { console.error(e); console.error(e.response.data); @@ -106,7 +111,7 @@ export class ApiTimelineMastodon { const query: any = _request.query; const params: any = _request.params; const data = await client.getListTimeline(convertId(params.id, IdType.SharkeyId), convertTimelinesArgsId(limitToInt(query))); - reply.send(data.data.map((status: Entity.Status) => convertStatus(status))); + reply.send(await Promise.all(data.data.map(async (status: Entity.Status) => await this.mastoconverter.convertStatus(status)))); } catch (e: any) { console.error(e); console.error(e.response.data); |