From 8508fd1fa68498ab7093b5c13da155a13ff7e46b Mon Sep 17 00:00:00 2001 From: Sven Sauleau Date: Mon, 20 Mar 2023 09:55:46 +0000 Subject: [PATCH] fix properties parsing with Neon --- backend/src/mastodon/notification.ts | 10 +++++++++- backend/src/mastodon/status.ts | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/backend/src/mastodon/notification.ts b/backend/src/mastodon/notification.ts index 8d9690a..2272305 100644 --- a/backend/src/mastodon/notification.ts +++ b/backend/src/mastodon/notification.ts @@ -225,7 +225,15 @@ export async function getNotifications(db: Database, actor: Actor, domain: strin for (let i = 0, len = results.length; i < len; i++) { const result = results[i] - const properties = JSON.parse(result.properties) + let properties + if (typeof result.properties === 'object') { + // neon uses JSONB for properties which is returned as a deserialized + // object. + properties = result.properties + } else { + // D1 uses a string for JSON properties + properties = JSON.parse(result.properties) + } const notifFromActorId = new URL(result.notif_from_actor_id) const notifFromActor = await getActorById(db, notifFromActorId) diff --git a/backend/src/mastodon/status.ts b/backend/src/mastodon/status.ts index ccbc532..c9ca683 100644 --- a/backend/src/mastodon/status.ts +++ b/backend/src/mastodon/status.ts @@ -105,7 +105,15 @@ export async function toMastodonStatusFromRow(domain: string, db: Database, row: console.warn('missing `row.publisher_actor_id`') return null } - const properties = JSON.parse(row.properties) + let properties + if (typeof row.properties === 'object') { + // neon uses JSONB for properties which is returned as a deserialized + // object. + properties = row.properties + } else { + // D1 uses a string for JSON properties + properties = JSON.parse(row.properties) + } const actorId = new URL(row.publisher_actor_id) const author = actors.personFromRow({