diff --git a/lib/types/sqlite-types.js b/lib/types/sqlite-types.js
--- a/lib/types/sqlite-types.js
+++ b/lib/types/sqlite-types.js
@@ -2,6 +2,7 @@
 
 import type { ClientDBMessageInfo } from './message-types.js';
 import type { StoreOperations } from './store-ops-types.js';
+import type { ClientDBDMOperation } from '../ops/dm-operations-store-ops.js';
 
 export const outboundP2PMessageStatuses = Object.freeze({
   // The message was prepared to be sent to other peers, but it's not encrypted.
@@ -63,6 +64,9 @@
     limit: number,
     offset: number,
   ) => Promise<Array<ClientDBMessageInfo>>,
+  +fetchDMOperationsByType: (
+    type: string,
+  ) => Promise<Array<ClientDBDMOperation>>,
 
   // write operations
   +removeInboundP2PMessages: (ids: $ReadOnlyArray<string>) => Promise<void>,
diff --git a/lib/utils/__mocks__/config.js b/lib/utils/__mocks__/config.js
--- a/lib/utils/__mocks__/config.js
+++ b/lib/utils/__mocks__/config.js
@@ -46,6 +46,7 @@
     getOutboundP2PMessagesByID: jest.fn(),
     searchMessages: jest.fn(),
     fetchMessages: jest.fn(),
+    fetchDMOperationsByType: jest.fn(),
   },
   encryptedNotifUtilsAPI: {
     generateAESKey: jest.fn(),
diff --git a/native/database/sqlite-api.js b/native/database/sqlite-api.js
--- a/native/database/sqlite-api.js
+++ b/native/database/sqlite-api.js
@@ -18,6 +18,7 @@
   getOutboundP2PMessagesByID: commCoreModule.getOutboundP2PMessagesByID,
   searchMessages: commCoreModule.searchMessages,
   fetchMessages: commCoreModule.fetchMessages,
+  fetchDMOperationsByType: commCoreModule.getDMOperationsByType,
 
   // write operations
   removeInboundP2PMessages: commCoreModule.removeInboundP2PMessages,
diff --git a/web/database/sqlite-api.js b/web/database/sqlite-api.js
--- a/web/database/sqlite-api.js
+++ b/web/database/sqlite-api.js
@@ -1,5 +1,6 @@
 // @flow
 
+import type { ClientDBDMOperation } from 'lib/ops/dm-operations-store-ops.js';
 import { convertStoreOperationsToClientDBStoreOperations } from 'lib/shared/redux/client-db-utils.js';
 import type { ClientDBMessageInfo } from 'lib/types/message-types.js';
 import type {
@@ -112,6 +113,19 @@
     return messages ? [...messages] : [];
   },
 
+  async fetchDMOperationsByType(
+    type: string,
+  ): Promise<Array<ClientDBDMOperation>> {
+    const sharedWorker = await getCommSharedWorker();
+
+    const data = await sharedWorker.schedule({
+      type: workerRequestMessageTypes.GET_DM_OPERATIONS_BY_TYPE,
+      operationType: type,
+    });
+    const operations = data?.operations;
+    return operations ? [...operations] : [];
+  },
+
   // write operations
   async removeInboundP2PMessages(ids: $ReadOnlyArray<string>): Promise<void> {
     const sharedWorker = await getCommSharedWorker();