import AbortController from 'abort-controller'; import { getConversationController } from '../../../conversations'; import { OpenGroupRequestCommonType } from '../opengroupV2/ApiUtil'; import { getOpenGroupV2ConversationId } from '../utils/OpenGroupUtils'; import { batchFirstSubIsSuccess, batchGlobalIsSuccess, OpenGroupBatchRow, sogsBatchSend, } from './sogsV3BatchPoll'; type OpenGroupClearInboxResponse = { deleted: number; }; export const clearInbox = async (roomInfos: OpenGroupRequestCommonType): Promise => { let success = false; const conversationId = getOpenGroupV2ConversationId(roomInfos.serverUrl, roomInfos.roomId); const conversation = getConversationController().get(conversationId); if (!conversation) { throw new Error(`clearInbox Matching conversation not found in db ${conversationId}`); } const options: Array = [ { type: 'inbox', inbox: { type: 'delete', }, }, ]; const result = await sogsBatchSend( roomInfos.serverUrl, new Set([roomInfos.roomId]), new AbortController().signal, options, 'batch' ); if (!result) { throw new Error(`Could not clearInbox, res is invalid for ${conversationId}`); } const rawMessage = (result.body && (result.body[0].body as OpenGroupClearInboxResponse)) || null; if (!rawMessage) { throw new Error(`clearInbox parsing failed for ${conversationId}`); } try { if (batchGlobalIsSuccess(result) && batchFirstSubIsSuccess(result)) { success = true; window.log.info(`clearInbox ${rawMessage.deleted} messages deleted for ${conversationId} `); } } catch (e) { window?.log?.error(`clearInbox Can't decode JSON body for ${conversationId}`); } if (!success) { window.log.info(`clearInbox message deletion failed for ${conversationId}`); } return success; };