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
@@ -33,6 +33,7 @@
   dmOperationValidator,
 } from '../../types/dm-ops.js';
 import type { RawThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js';
+import type { NotificationsCreationData } from '../../types/notif-types.js';
 import type { DispatchMetadata } from '../../types/redux-types.js';
 import type { OutboundP2PMessage } from '../../types/sqlite-types.js';
 import type { LegacyRawThreadInfo } from '../../types/thread-types.js';
@@ -202,13 +203,21 @@
       }
 
       const dmOpSpec = dmOpSpecs[dmOp.type];
-      const notificationsCreationDataPromise = (async () => {
-        return await dmOpSpec.notificationsCreationData?.(
-          dmOp,
-          viewerID,
-          utilities,
-        );
-      })();
+      const notificationsCreationDataPromise: Promise<?NotificationsCreationData> =
+        (async () => {
+          if (
+            dmOperationSpecification.type ===
+              dmOperationSpecificationTypes.INBOUND ||
+            !dmOpSpec.notificationsCreationData
+          ) {
+            return null;
+          }
+          return await dmOpSpec.notificationsCreationData(
+            dmOp,
+            viewerID,
+            utilities,
+          );
+        })();
 
       const [{ rawMessageInfos, updateInfos }, notificationsCreationData] =
         await Promise.all([