From bd95e8a555e2fcb8b72ae4fbe496495af28fc8b3 Mon Sep 17 00:00:00 2001 From: Hazelnoot Date: Fri, 31 Jan 2025 11:14:21 -0500 Subject: fix relationship data for Mastodon API (resolves #714) --- .../backend/src/server/api/mastodon/converters.ts | 23 ++++++++++++++++++++-- .../src/server/api/mastodon/endpoints/account.ts | 10 +++++----- 2 files changed, 26 insertions(+), 7 deletions(-) (limited to 'packages/backend/src') diff --git a/packages/backend/src/server/api/mastodon/converters.ts b/packages/backend/src/server/api/mastodon/converters.ts index 3cb6ca61ce..4aea91b4f2 100644 --- a/packages/backend/src/server/api/mastodon/converters.ts +++ b/packages/backend/src/server/api/mastodon/converters.ts @@ -339,6 +339,7 @@ export function convertPoll(poll: Entity.Poll) { return simpleConvert(poll); } +// noinspection JSUnusedGlobalSymbols export function convertReaction(reaction: Entity.Reaction) { if (reaction.accounts) { reaction.accounts = reaction.accounts.map(convertAccount); @@ -346,8 +347,25 @@ export function convertReaction(reaction: Entity.Reaction) { return reaction; } -export function convertRelationship(relationship: Entity.Relationship) { - return simpleConvert(relationship); +// Megalodon sometimes returns broken / stubbed relationship data +export function convertRelationship(relationship: Partial & { id: string }): MastodonEntity.Relationship { + return { + id: relationship.id, + following: relationship.following ?? false, + showing_reblogs: relationship.showing_reblogs ?? true, + notifying: relationship.notifying ?? true, + languages: [], + followed_by: relationship.followed_by ?? false, + blocking: relationship.blocking ?? false, + blocked_by: relationship.blocked_by ?? false, + muting: relationship.muting ?? false, + muting_notifications: relationship.muting_notifications ?? false, + requested: relationship.requested ?? false, + requested_by: relationship.requested_by ?? false, + domain_blocking: relationship.domain_blocking ?? false, + endorsed: relationship.endorsed ?? false, + note: relationship.note ?? '', + }; } export function convertStatus(status: Entity.Status) { @@ -361,6 +379,7 @@ export function convertStatus(status: Entity.Status) { return status; } +// noinspection JSUnusedGlobalSymbols export function convertStatusSource(status: Entity.StatusSource) { return simpleConvert(status); } diff --git a/packages/backend/src/server/api/mastodon/endpoints/account.ts b/packages/backend/src/server/api/mastodon/endpoints/account.ts index d24a62fb06..1481a48924 100644 --- a/packages/backend/src/server/api/mastodon/endpoints/account.ts +++ b/packages/backend/src/server/api/mastodon/endpoints/account.ts @@ -74,7 +74,7 @@ export class ApiAccountMastodon { public async addFollow() { if (!this.request.params.id) throw new Error('Missing required parameter "id"'); - const data = await this.client.followAccount( this.request.params.id ); + const data = await this.client.followAccount(this.request.params.id); const acct = convertRelationship(data.data); acct.following = true; return acct; @@ -82,7 +82,7 @@ export class ApiAccountMastodon { public async rmFollow() { if (!this.request.params.id) throw new Error('Missing required parameter "id"'); - const data = await this.client.unfollowAccount( this.request.params.id ); + const data = await this.client.unfollowAccount(this.request.params.id); const acct = convertRelationship(data.data); acct.following = false; return acct; @@ -90,13 +90,13 @@ export class ApiAccountMastodon { public async addBlock() { if (!this.request.params.id) throw new Error('Missing required parameter "id"'); - const data = await this.client.blockAccount( this.request.params.id ); + const data = await this.client.blockAccount(this.request.params.id); return convertRelationship(data.data); } public async rmBlock() { if (!this.request.params.id) throw new Error('Missing required parameter "id"'); - const data = await this.client.unblockAccount( this.request.params.id ); + const data = await this.client.unblockAccount(this.request.params.id); return convertRelationship(data.data); } @@ -111,7 +111,7 @@ export class ApiAccountMastodon { public async rmMute() { if (!this.request.params.id) throw new Error('Missing required parameter "id"'); - const data = await this.client.unmuteAccount( this.request.params.id ); + const data = await this.client.unmuteAccount(this.request.params.id); return convertRelationship(data.data); } -- cgit v1.2.3-freya