diff --git a/lib/shared/messages/update-relationship-message-spec.js b/lib/shared/messages/update-relationship-message-spec.js
--- a/lib/shared/messages/update-relationship-message-spec.js
+++ b/lib/shared/messages/update-relationship-message-spec.js
@@ -22,6 +22,7 @@
 import type {
   RawUpdateRelationshipMessageInfo,
   UpdateRelationshipMessageData,
+  UpdateRelationshipMessageInfo,
 } from '../../types/messages/update-relationship.js';
 import type { ThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js';
 import type { NotifTexts } from '../../types/notif-types.js';
@@ -29,9 +30,9 @@
 import { type EntityText, ET } from '../../utils/entity-text.js';
 
 type UpdateRelationshipMessageSpec = MessageSpec<
-  LegacyUpdateRelationshipMessageData,
-  RawLegacyUpdateRelationshipMessageInfo,
-  LegacyUpdateRelationshipMessageInfo,
+  LegacyUpdateRelationshipMessageData | UpdateRelationshipMessageData,
+  RawLegacyUpdateRelationshipMessageInfo | RawUpdateRelationshipMessageInfo,
+  LegacyUpdateRelationshipMessageInfo | UpdateRelationshipMessageInfo,
 > & {
   // We need to explicitly type this as non-optional so that
   // it can be referenced from messageContentForClientDB below
@@ -61,17 +62,21 @@
     },
 
     messageContentForClientDB(
-      data: RawLegacyUpdateRelationshipMessageInfo,
+      data:
+        | RawLegacyUpdateRelationshipMessageInfo
+        | RawUpdateRelationshipMessageInfo,
     ): string {
       return updateRelationshipMessageSpec.messageContentForServerDB(data);
     },
 
     rawMessageInfoFromServerDBRow(
       row: Object,
-    ): RawLegacyUpdateRelationshipMessageInfo {
+    ):
+      | RawLegacyUpdateRelationshipMessageInfo
+      | RawUpdateRelationshipMessageInfo {
       const content = JSON.parse(row.content);
       return {
-        type: messageTypes.LEGACY_UPDATE_RELATIONSHIP,
+        type: row.type,
         id: row.id.toString(),
         threadID: row.threadID.toString(),
         time: row.time,
@@ -104,38 +109,60 @@
     },
 
     createMessageInfo(
-      rawMessageInfo: RawLegacyUpdateRelationshipMessageInfo,
+      rawMessageInfo:
+        | RawLegacyUpdateRelationshipMessageInfo
+        | RawUpdateRelationshipMessageInfo,
       creator: RelativeUserInfo,
       params: CreateMessageInfoParams,
-    ): ?LegacyUpdateRelationshipMessageInfo {
+    ): ?LegacyUpdateRelationshipMessageInfo | ?UpdateRelationshipMessageInfo {
       const target = params.createRelativeUserInfos([
         rawMessageInfo.targetID,
       ])[0];
       if (!target) {
         return null;
       }
-      return {
-        type: messageTypes.LEGACY_UPDATE_RELATIONSHIP,
-        id: rawMessageInfo.id,
-        threadID: rawMessageInfo.threadID,
-        creator,
-        target,
-        time: rawMessageInfo.time,
-        operation: rawMessageInfo.operation,
-      };
+      if (rawMessageInfo.type === messageTypes.LEGACY_UPDATE_RELATIONSHIP) {
+        return {
+          type: messageTypes.LEGACY_UPDATE_RELATIONSHIP,
+          id: rawMessageInfo.id,
+          threadID: rawMessageInfo.threadID,
+          creator,
+          target,
+          time: rawMessageInfo.time,
+          operation: rawMessageInfo.operation,
+        };
+      } else {
+        return {
+          type: messageTypes.UPDATE_RELATIONSHIP,
+          id: rawMessageInfo.id,
+          threadID: rawMessageInfo.threadID,
+          creator,
+          target,
+          time: rawMessageInfo.time,
+          operation: rawMessageInfo.operation,
+        };
+      }
     },
 
     rawMessageInfoFromMessageData(
-      messageData: LegacyUpdateRelationshipMessageData,
+      messageData:
+        | LegacyUpdateRelationshipMessageData
+        | UpdateRelationshipMessageData,
       id: ?string,
-    ): RawLegacyUpdateRelationshipMessageInfo {
+    ):
+      | RawLegacyUpdateRelationshipMessageInfo
+      | RawUpdateRelationshipMessageInfo {
       invariant(id, 'RawUpdateRelationshipMessageInfo needs id');
       return { ...messageData, id };
     },
 
     // ESLint doesn't recognize that invariant always throws
     // eslint-disable-next-line consistent-return
-    robotext(messageInfo: LegacyUpdateRelationshipMessageInfo): EntityText {
+    robotext(
+      messageInfo:
+        | LegacyUpdateRelationshipMessageInfo
+        | UpdateRelationshipMessageInfo,
+    ): EntityText {
       const creator = ET.user({ userInfo: messageInfo.creator });
       if (messageInfo.operation === 'request_sent') {
         const target = ET.user({ userInfo: messageInfo.target });
@@ -155,8 +182,12 @@
     },
 
     unshimMessageInfo(
-      unwrapped: RawLegacyUpdateRelationshipMessageInfo,
-    ): RawLegacyUpdateRelationshipMessageInfo {
+      unwrapped:
+        | RawLegacyUpdateRelationshipMessageInfo
+        | RawUpdateRelationshipMessageInfo,
+    ):
+      | RawLegacyUpdateRelationshipMessageInfo
+      | RawUpdateRelationshipMessageInfo {
       return unwrapped;
     },