diff --git a/keyserver/src/fetchers/message-fetchers.js b/keyserver/src/fetchers/message-fetchers.js --- a/keyserver/src/fetchers/message-fetchers.js +++ b/keyserver/src/fetchers/message-fetchers.js @@ -246,6 +246,8 @@ const type = mostRecentRowType(rows); const messageSpec = messageSpecs[type]; + const requiresDerivedMessages = + messageSpec.parseDerivedMessages !== undefined; if (type === messageTypes.IMAGES || type === messageTypes.MULTIMEDIA) { let media; @@ -260,27 +262,44 @@ } const [row] = rows; const localID = localIDFromCreationString(viewer, row.creation); + + let rawMessageInfoFromServerDBRowParams = { localID, media }; + if (requiresDerivedMessages) { + rawMessageInfoFromServerDBRowParams = { + ...rawMessageInfoFromServerDBRowParams, + derivedMessages, + }; + } + invariant( messageSpec.rawMessageInfoFromServerDBRow, `multimedia message spec should have rawMessageInfoFromServerDBRow`, ); - return messageSpec.rawMessageInfoFromServerDBRow(row, { - media, - derivedMessages, - localID, - }); + return messageSpec.rawMessageInfoFromServerDBRow( + row, + rawMessageInfoFromServerDBRowParams, + ); } const row = assertSingleRow(rows); const localID = localIDFromCreationString(viewer, row.creation); + + let rawMessageInfoFromServerDBRowParams = { localID }; + if (requiresDerivedMessages) { + rawMessageInfoFromServerDBRowParams = { + ...rawMessageInfoFromServerDBRowParams, + derivedMessages, + }; + } + invariant( messageSpec.rawMessageInfoFromServerDBRow, `message spec ${type} should have rawMessageInfoFromServerDBRow`, ); - return messageSpec.rawMessageInfoFromServerDBRow(row, { - derivedMessages, - localID, - }); + return messageSpec.rawMessageInfoFromServerDBRow( + row, + rawMessageInfoFromServerDBRowParams, + ); } async function fetchMessageInfos( diff --git a/lib/shared/messages/message-spec.js b/lib/shared/messages/message-spec.js --- a/lib/shared/messages/message-spec.js +++ b/lib/shared/messages/message-spec.js @@ -27,7 +27,7 @@ export type RawMessageInfoFromServerDBRowParams = { +localID: ?string, +media?: $ReadOnlyArray, - +derivedMessages: $ReadOnlyMap< + +derivedMessages?: $ReadOnlyMap< string, RawComposableMessageInfo | RawRobotextMessageInfo, >, diff --git a/lib/shared/messages/toggle-pin-message-spec.js b/lib/shared/messages/toggle-pin-message-spec.js --- a/lib/shared/messages/toggle-pin-message-spec.js +++ b/lib/shared/messages/toggle-pin-message-spec.js @@ -47,7 +47,10 @@ params: RawMessageInfoFromServerDBRowParams, ): RawTogglePinMessageInfo { const content = JSON.parse(row.content); + const { derivedMessages } = params; + invariant(derivedMessages, 'Derived messages should be provided'); + const targetMessage = derivedMessages.get(content.targetMessageID); invariant(targetMessage, 'targetMessage should be defined');