diff --git a/lib/shared/dm-ops/add-members-spec.js b/lib/shared/dm-ops/add-members-spec.js
--- a/lib/shared/dm-ops/add-members-spec.js
+++ b/lib/shared/dm-ops/add-members-spec.js
@@ -40,22 +40,24 @@
   },
   processDMOperation: async (
     dmOperation: DMAddMembersOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     const { editorID, time, messageID, addedUserIDs, threadID } = dmOperation;
+    const { viewerID, threadInfos } = utilities;
+
     const messageData =
       createAddNewMembersMessageDataFromDMOperation(dmOperation);
     const rawMessageInfos = [
       rawMessageInfoFromMessageData(messageData, messageID),
     ];
-    const currentThreadInfo = utilities.threadInfos[threadID];
+    const currentThreadInfo = threadInfos[threadID];
     if (!currentThreadInfo.thick) {
       return {
         rawMessageInfos: [],
         updateInfos: [],
       };
     }
+
     const defaultRoleID = values(currentThreadInfo.roles).find(role =>
       roleIsDefaultRole(role),
     )?.id;
@@ -124,7 +126,6 @@
   },
   canBeProcessed: async (
     dmOperation: DMAddMembersOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     if (utilities.threadInfos[dmOperation.threadID]) {
diff --git a/lib/shared/dm-ops/add-viewer-to-thread-members-spec.js b/lib/shared/dm-ops/add-viewer-to-thread-members-spec.js
--- a/lib/shared/dm-ops/add-viewer-to-thread-members-spec.js
+++ b/lib/shared/dm-ops/add-viewer-to-thread-members-spec.js
@@ -40,20 +40,20 @@
     },
     processDMOperation: async (
       dmOperation: DMAddViewerToThreadMembersOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { time, messageID, addedUserIDs, existingThreadDetails } =
         dmOperation;
+      const { viewerID, threadInfos } = utilities;
+
       const messageData =
         createAddViewerToThreadMembersMessageDataFromDMOp(dmOperation);
-
       const rawMessageInfos = messageID
         ? [rawMessageInfoFromMessageData(messageData, messageID)]
         : [];
 
       const threadID = existingThreadDetails.threadID;
-      const currentThreadInfo = utilities.threadInfos[threadID];
+      const currentThreadInfo = threadInfos[threadID];
       if (currentThreadInfo && !currentThreadInfo.thick) {
         return {
           rawMessageInfos: [],
@@ -122,8 +122,9 @@
     },
     canBeProcessed: async (
       dmOperation: DMAddViewerToThreadMembersOperation,
-      viewerID: string,
+      utilities: ProcessDMOperationUtilities,
     ) => {
+      const { viewerID } = utilities;
       // We expect the viewer to be in the added users when the DM op
       // is processed. An exception is for ops generated
       // by InitialStateSharingHandler, which won't contain a messageID
diff --git a/lib/shared/dm-ops/change-thread-read-status-spec.js b/lib/shared/dm-ops/change-thread-read-status-spec.js
--- a/lib/shared/dm-ops/change-thread-read-status-spec.js
+++ b/lib/shared/dm-ops/change-thread-read-status-spec.js
@@ -23,7 +23,6 @@
     },
     processDMOperation: async (
       dmOperation: DMChangeThreadReadStatusOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { threadID, unread, time } = dmOperation;
@@ -65,15 +64,15 @@
     },
     canBeProcessed: async (
       dmOperation: DMChangeThreadReadStatusOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { creatorID, threadID } = dmOperation;
+      const { threadInfos, viewerID } = utilities;
       if (viewerID !== creatorID) {
         return { isProcessingPossible: false, reason: { type: 'invalid' } };
       }
 
-      if (!utilities.threadInfos[threadID]) {
+      if (!threadInfos[threadID]) {
         return {
           isProcessingPossible: false,
           reason: { type: 'missing_thread', threadID },
diff --git a/lib/shared/dm-ops/change-thread-settings-spec.js b/lib/shared/dm-ops/change-thread-settings-spec.js
--- a/lib/shared/dm-ops/change-thread-settings-spec.js
+++ b/lib/shared/dm-ops/change-thread-settings-spec.js
@@ -106,7 +106,6 @@
     },
     processDMOperation: async (
       dmOperation: DMChangeThreadSettingsOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { time, messageIDsPrefix } = dmOperation;
@@ -163,7 +162,6 @@
     },
     canBeProcessed: async (
       dmOperation: DMChangeThreadSettingsOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       if (utilities.threadInfos[dmOperation.threadID]) {
diff --git a/lib/shared/dm-ops/change-thread-subscription.js b/lib/shared/dm-ops/change-thread-subscription.js
--- a/lib/shared/dm-ops/change-thread-subscription.js
+++ b/lib/shared/dm-ops/change-thread-subscription.js
@@ -15,12 +15,12 @@
   Object.freeze({
     processDMOperation: async (
       dmOperation: DMChangeThreadSubscriptionOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { creatorID, threadID, subscription, time } = dmOperation;
+      const { viewerID, threadInfos } = utilities;
 
-      const threadInfo = utilities.threadInfos[threadID];
+      const threadInfo = threadInfos[threadID];
       invariant(threadInfo.thick, 'Thread should be thick');
 
       if (threadInfo.timestamps.members[creatorID].subscription > time) {
@@ -79,7 +79,6 @@
     },
     canBeProcessed: async (
       dmOperation: DMChangeThreadSubscriptionOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { threadID, creatorID } = dmOperation;
diff --git a/lib/shared/dm-ops/create-entry-spec.js b/lib/shared/dm-ops/create-entry-spec.js
--- a/lib/shared/dm-ops/create-entry-spec.js
+++ b/lib/shared/dm-ops/create-entry-spec.js
@@ -70,7 +70,6 @@
   },
   canBeProcessed: async (
     dmOperation: DMCreateEntryOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     if (utilities.threadInfos[dmOperation.threadID]) {
diff --git a/lib/shared/dm-ops/create-sidebar-spec.js b/lib/shared/dm-ops/create-sidebar-spec.js
--- a/lib/shared/dm-ops/create-sidebar-spec.js
+++ b/lib/shared/dm-ops/create-sidebar-spec.js
@@ -84,7 +84,6 @@
   Object.freeze({
     notificationsCreationData: async (
       dmOperation: DMCreateSidebarOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { sidebarSourceMessageData, createSidebarMessageData } =
@@ -95,7 +94,6 @@
     },
     processDMOperation: async (
       dmOperation: DMCreateSidebarOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const {
@@ -109,6 +107,7 @@
         newSidebarSourceMessageID,
         newCreateSidebarMessageID,
       } = dmOperation;
+      const { viewerID } = utilities;
       const allMemberIDs = [creatorID, ...memberIDs];
       const allMemberIDsWithSubscriptions = allMemberIDs.map(id => ({
         id,
@@ -169,7 +168,6 @@
     },
     canBeProcessed: async (
       dmOperation: DMCreateSidebarOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const sourceMessage = await utilities.fetchMessage(
diff --git a/lib/shared/dm-ops/create-thread-spec.js b/lib/shared/dm-ops/create-thread-spec.js
--- a/lib/shared/dm-ops/create-thread-spec.js
+++ b/lib/shared/dm-ops/create-thread-spec.js
@@ -2,7 +2,10 @@
 
 import uuid from 'uuid';
 
-import type { DMOperationSpec } from './dm-op-spec.js';
+import type {
+  DMOperationSpec,
+  ProcessDMOperationUtilities,
+} from './dm-op-spec.js';
 import { specialRoles } from '../../permissions/special-roles.js';
 import {
   getAllThreadPermissions,
@@ -156,7 +159,7 @@
     },
     processDMOperation: async (
       dmOperation: DMCreateThreadOperation,
-      viewerID: string,
+      utilities: ProcessDMOperationUtilities,
     ) => {
       const {
         threadID,
@@ -167,6 +170,7 @@
         roleID,
         newMessageID,
       } = dmOperation;
+      const { viewerID } = utilities;
       const allMemberIDs = [creatorID, ...memberIDs];
       const allMemberIDsWithSubscriptions = allMemberIDs.map(id => ({
         id,
diff --git a/lib/shared/dm-ops/delete-entry-spec.js b/lib/shared/dm-ops/delete-entry-spec.js
--- a/lib/shared/dm-ops/delete-entry-spec.js
+++ b/lib/shared/dm-ops/delete-entry-spec.js
@@ -35,7 +35,6 @@
   },
   processDMOperation: async (
     dmOperation: DMDeleteEntryOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     const {
@@ -94,7 +93,6 @@
   },
   canBeProcessed: async (
     dmOperation: DMDeleteEntryOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     if (!utilities.entryInfos[dmOperation.entryID]) {
diff --git a/lib/shared/dm-ops/dm-op-spec.js b/lib/shared/dm-ops/dm-op-spec.js
--- a/lib/shared/dm-ops/dm-op-spec.js
+++ b/lib/shared/dm-ops/dm-op-spec.js
@@ -8,6 +8,7 @@
 import type { RawThreadInfos } from '../../types/thread-types.js';
 
 export type ProcessDMOperationUtilities = {
+  +viewerID: string,
   // Needed to fetch sidebar source messages
   +fetchMessage: (messageID: string) => Promise<?RawMessageInfo>,
   +threadInfos: RawThreadInfos,
@@ -32,17 +33,14 @@
 export type DMOperationSpec<DMOp: DMOperation> = {
   +notificationsCreationData?: (
     dmOp: DMOp,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => Promise<NotificationsCreationData>,
   +processDMOperation: (
     dmOp: DMOp,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => Promise<DMOperationResult>,
   +canBeProcessed: (
     dmOp: DMOp,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => Promise<ProcessingPossibilityCheckResult>,
   +supportsAutoRetry: boolean,
diff --git a/lib/shared/dm-ops/edit-entry-spec.js b/lib/shared/dm-ops/edit-entry-spec.js
--- a/lib/shared/dm-ops/edit-entry-spec.js
+++ b/lib/shared/dm-ops/edit-entry-spec.js
@@ -34,7 +34,6 @@
   },
   processDMOperation: async (
     dmOperation: DMEditEntryOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     const {
@@ -94,7 +93,6 @@
   },
   canBeProcessed: async (
     dmOperation: DMEditEntryOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     if (!utilities.entryInfos[dmOperation.entryID]) {
diff --git a/lib/shared/dm-ops/join-thread-spec.js b/lib/shared/dm-ops/join-thread-spec.js
--- a/lib/shared/dm-ops/join-thread-spec.js
+++ b/lib/shared/dm-ops/join-thread-spec.js
@@ -43,13 +43,12 @@
   },
   processDMOperation: async (
     dmOperation: DMJoinThreadOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     const { joinerID, time, messageID, existingThreadDetails } = dmOperation;
+    const { viewerID, threadInfos } = utilities;
 
-    const currentThreadInfo =
-      utilities.threadInfos[existingThreadDetails.threadID];
+    const currentThreadInfo = threadInfos[existingThreadDetails.threadID];
     if (currentThreadInfo && !currentThreadInfo.thick) {
       return {
         rawMessageInfos: [],
@@ -164,11 +163,11 @@
   },
   canBeProcessed: async (
     dmOperation: DMJoinThreadOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
+    const { viewerID, threadInfos } = utilities;
     if (
-      utilities.threadInfos[dmOperation.existingThreadDetails.threadID] ||
+      threadInfos[dmOperation.existingThreadDetails.threadID] ||
       dmOperation.joinerID === viewerID
     ) {
       return { isProcessingPossible: true };
diff --git a/lib/shared/dm-ops/leave-thread-spec.js b/lib/shared/dm-ops/leave-thread-spec.js
--- a/lib/shared/dm-ops/leave-thread-spec.js
+++ b/lib/shared/dm-ops/leave-thread-spec.js
@@ -58,12 +58,12 @@
   },
   processDMOperation: async (
     dmOperation: DMLeaveThreadOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     const { editorID, time, messageID, threadID } = dmOperation;
+    const { viewerID, threadInfos } = utilities;
 
-    const threadInfo = utilities.threadInfos[threadID];
+    const threadInfo = threadInfos[threadID];
     invariant(threadInfo.thick, 'Thread should be thick');
 
     const messageData = createMessageDataFromDMOperation(dmOperation);
@@ -75,8 +75,7 @@
       viewerID === editorID &&
       userIsMember(threadInfo, editorID) &&
       (threadInfo.type !== threadTypes.THICK_SIDEBAR ||
-        (threadInfo.parentThreadID &&
-          !utilities.threadInfos[threadInfo.parentThreadID]))
+        (threadInfo.parentThreadID && !threadInfos[threadInfo.parentThreadID]))
     ) {
       return {
         rawMessageInfos,
@@ -91,7 +90,7 @@
             dmOperation,
             threadInfo,
             viewerID,
-            utilities.threadInfos,
+            threadInfos,
           ),
         ],
       };
@@ -137,7 +136,6 @@
   },
   canBeProcessed: async (
     dmOperation: DMLeaveThreadOperation,
-    viewerID: string,
     utilities: ProcessDMOperationUtilities,
   ) => {
     if (utilities.threadInfos[dmOperation.threadID]) {
diff --git a/lib/shared/dm-ops/process-dm-ops.js b/lib/shared/dm-ops/process-dm-ops.js
--- a/lib/shared/dm-ops/process-dm-ops.js
+++ b/lib/shared/dm-ops/process-dm-ops.js
@@ -43,19 +43,22 @@
 import { messageSpecs } from '../messages/message-specs.js';
 import { updateSpecs } from '../updates/update-specs.js';
 
-function useSendDMOperationUtils(): ProcessDMOperationUtilities {
+function useSendDMOperationUtils() {
   const fetchMessage = useGetLatestMessageEdit();
   const threadInfos = useSelector(state => state.threadStore.threadInfos);
   const entryInfos = useSelector(state => state.entryStore.entryInfos);
   const findUserIdentities = useFindUserIdentities();
+  const loggedInUserInfo = useLoggedInUserInfo();
+  const viewerID = loggedInUserInfo?.id;
   return React.useMemo(
     () => ({
+      viewerID,
       fetchMessage,
       threadInfos,
       entryInfos,
       findUserIdentities,
     }),
-    [fetchMessage, threadInfos, entryInfos, findUserIdentities],
+    [viewerID, fetchMessage, threadInfos, entryInfos, findUserIdentities],
   );
 }
 
@@ -64,10 +67,8 @@
   dmOpID: ?string,
 ) => Promise<void> {
   const threadInfos = useSelector(state => state.threadStore.threadInfos);
-  const utilities = useSendDMOperationUtils();
+  const baseUtilities = useSendDMOperationUtils();
   const dispatchWithMetadata = useDispatchWithMetadata();
-  const loggedInUserInfo = useLoggedInUserInfo();
-  const viewerID = loggedInUserInfo?.id;
   const allPeerUserIDAndDeviceIDs = useSelector(getAllPeerUserIDAndDeviceIDs);
   const currentUserInfo = useSelector(state => state.currentUserInfo);
 
@@ -78,10 +79,15 @@
       dmOperationSpecification: DMOperationSpecification,
       dmOpID: ?string,
     ) => {
+      const { viewerID, ...restUtilities } = baseUtilities;
       if (!viewerID) {
         console.log('ignored DMOperation because logged out');
         return;
       }
+      const utilities: ProcessDMOperationUtilities = {
+        ...restUtilities,
+        viewerID,
+      };
 
       const { op: dmOp } = dmOperationSpecification;
 
@@ -129,7 +135,7 @@
       ) {
         const notificationsCreationData = await dmOpSpecs[
           dmOp.type
-        ].notificationsCreationData?.(dmOp, viewerID, utilities);
+        ].notificationsCreationData?.(dmOp, utilities);
 
         dispatchWithMetadata(
           {
@@ -150,7 +156,6 @@
 
       const processingCheckResult = await dmOpSpecs[dmOp.type].canBeProcessed(
         dmOp,
-        viewerID,
         utilities,
       );
       if (!processingCheckResult.isProcessingPossible) {
@@ -212,16 +217,12 @@
           ) {
             return null;
           }
-          return await dmOpSpec.notificationsCreationData(
-            dmOp,
-            viewerID,
-            utilities,
-          );
+          return await dmOpSpec.notificationsCreationData(dmOp, utilities);
         })();
 
       const [{ rawMessageInfos, updateInfos }, notificationsCreationData] =
         await Promise.all([
-          dmOpSpec.processDMOperation(dmOp, viewerID, utilities),
+          dmOpSpec.processDMOperation(dmOp, utilities),
           notificationsCreationDataPromise,
         ]);
 
@@ -340,8 +341,7 @@
       );
     },
     [
-      viewerID,
-      utilities,
+      baseUtilities,
       dispatchWithMetadata,
       allPeerUserIDAndDeviceIDs,
       currentUserInfo,
@@ -373,11 +373,9 @@
   const threadInfos = useSelector(state => state.threadStore.threadInfos);
   const { getDMOpsSendingPromise } = usePeerToPeerCommunication();
   const dispatchWithMetadata = useDispatchWithMetadata();
-  const loggedInUserInfo = useLoggedInUserInfo();
-  const viewerID = loggedInUserInfo?.id;
   const allPeerUserIDAndDeviceIDs = useSelector(getAllPeerUserIDAndDeviceIDs);
   const currentUserInfo = useSelector(state => state.currentUserInfo);
-  const utilities = useSendDMOperationUtils();
+  const baseUtilities = useSendDMOperationUtils();
   const { processOutboundMessages } = usePeerToPeerCommunication();
   const localMessageInfos = useSelector(state => state.messageStore.local);
 
@@ -385,6 +383,7 @@
     async (
       dmOperationSpecification: OutboundComposableDMOperationSpecification,
     ): Promise<ProcessOutboundP2PMessagesResult> => {
+      const { viewerID, ...restUtilities } = baseUtilities;
       if (!viewerID) {
         console.log('ignored DMOperation because logged out');
         return {
@@ -392,6 +391,10 @@
           failedMessageIDs: [],
         };
       }
+      const utilities: ProcessDMOperationUtilities = {
+        ...restUtilities,
+        viewerID,
+      };
 
       const { promise, dmOpID } = getDMOpsSendingPromise();
 
@@ -428,7 +431,7 @@
 
       const notificationsCreationData = await dmOpSpecs[
         op.type
-      ].notificationsCreationData?.(op, viewerID, utilities);
+      ].notificationsCreationData?.(op, utilities);
 
       dispatchWithMetadata(
         {
@@ -459,7 +462,6 @@
       }
     },
     [
-      viewerID,
       allPeerUserIDAndDeviceIDs,
       currentUserInfo,
       dispatchWithMetadata,
@@ -467,7 +469,7 @@
       localMessageInfos,
       processOutboundMessages,
       threadInfos,
-      utilities,
+      baseUtilities,
     ],
   );
 }
diff --git a/lib/shared/dm-ops/remove-members-spec.js b/lib/shared/dm-ops/remove-members-spec.js
--- a/lib/shared/dm-ops/remove-members-spec.js
+++ b/lib/shared/dm-ops/remove-members-spec.js
@@ -37,12 +37,12 @@
     },
     processDMOperation: async (
       dmOperation: DMRemoveMembersOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { time, messageID, threadID, removedUserIDs } = dmOperation;
+      const { viewerID, threadInfos } = utilities;
 
-      const threadInfo = utilities.threadInfos[threadID];
+      const threadInfo = threadInfos[threadID];
       invariant(threadInfo.thick, 'Thread should be thick');
 
       const messageData = createMessageDataFromDMOperation(dmOperation);
@@ -78,7 +78,7 @@
         viewerIsRemoved &&
         (threadInfo.type !== threadTypes.THICK_SIDEBAR ||
           (threadInfo.parentThreadID &&
-            !utilities.threadInfos[threadInfo.parentThreadID]))
+            !threadInfos[threadInfo.parentThreadID]))
       ) {
         updateInfos.push({
           type: updateTypes.DELETE_THREAD,
@@ -111,7 +111,6 @@
     },
     canBeProcessed: async (
       dmOperation: DMRemoveMembersOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       if (utilities.threadInfos[dmOperation.threadID]) {
diff --git a/lib/shared/dm-ops/send-edit-message-spec.js b/lib/shared/dm-ops/send-edit-message-spec.js
--- a/lib/shared/dm-ops/send-edit-message-spec.js
+++ b/lib/shared/dm-ops/send-edit-message-spec.js
@@ -44,7 +44,6 @@
     },
     canBeProcessed: async (
       dmOperation: DMSendEditMessageOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const message = await utilities.fetchMessage(dmOperation.targetMessageID);
diff --git a/lib/shared/dm-ops/send-multimedia-message-spec.js b/lib/shared/dm-ops/send-multimedia-message-spec.js
--- a/lib/shared/dm-ops/send-multimedia-message-spec.js
+++ b/lib/shared/dm-ops/send-multimedia-message-spec.js
@@ -47,7 +47,6 @@
     },
     canBeProcessed: async (
       dmOperation: DMSendMultimediaMessageOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       if (utilities.threadInfos[dmOperation.threadID]) {
diff --git a/lib/shared/dm-ops/send-reaction-message-spec.js b/lib/shared/dm-ops/send-reaction-message-spec.js
--- a/lib/shared/dm-ops/send-reaction-message-spec.js
+++ b/lib/shared/dm-ops/send-reaction-message-spec.js
@@ -46,7 +46,6 @@
     },
     canBeProcessed: async (
       dmOperation: DMSendReactionMessageOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const message = await utilities.fetchMessage(dmOperation.targetMessageID);
diff --git a/lib/shared/dm-ops/send-text-message-spec.js b/lib/shared/dm-ops/send-text-message-spec.js
--- a/lib/shared/dm-ops/send-text-message-spec.js
+++ b/lib/shared/dm-ops/send-text-message-spec.js
@@ -44,7 +44,6 @@
     },
     canBeProcessed: async (
       dmOperation: DMSendTextMessageOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       if (utilities.threadInfos[dmOperation.threadID]) {
diff --git a/lib/shared/dm-ops/update-relationship-spec.js b/lib/shared/dm-ops/update-relationship-spec.js
--- a/lib/shared/dm-ops/update-relationship-spec.js
+++ b/lib/shared/dm-ops/update-relationship-spec.js
@@ -10,10 +10,10 @@
 
 async function createMessageDataFromDMOperation(
   dmOperation: DMUpdateRelationshipOperation,
-  viewerID: string,
   utilities: ProcessDMOperationUtilities,
 ) {
   const { threadID, creatorID, time, operation } = dmOperation;
+  const { viewerID, findUserIdentities } = utilities;
   if (operation !== 'farcaster_mutual') {
     return {
       type: messageTypes.UPDATE_RELATIONSHIP,
@@ -24,7 +24,6 @@
       operation,
     };
   }
-  const { findUserIdentities } = utilities;
   const { identities: userIdentities } = await findUserIdentities([
     creatorID,
     viewerID,
@@ -54,25 +53,21 @@
   Object.freeze({
     notificationsCreationData: async (
       dmOperation: DMUpdateRelationshipOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const messageData = await createMessageDataFromDMOperation(
         dmOperation,
-        viewerID,
         utilities,
       );
       return { messageDatas: [messageData] };
     },
     processDMOperation: async (
       dmOperation: DMUpdateRelationshipOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       const { messageID } = dmOperation;
       const messageData = await createMessageDataFromDMOperation(
         dmOperation,
-        viewerID,
         utilities,
       );
       const rawMessageInfos = [
@@ -85,15 +80,10 @@
     },
     canBeProcessed: async (
       dmOperation: DMUpdateRelationshipOperation,
-      viewerID: string,
       utilities: ProcessDMOperationUtilities,
     ) => {
       try {
-        await createMessageDataFromDMOperation(
-          dmOperation,
-          viewerID,
-          utilities,
-        );
+        await createMessageDataFromDMOperation(dmOperation, utilities);
         return {
           isProcessingPossible: true,
         };