// Copyright 2020 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only /* global Backbone, Whisper, ConversationController, */ /* eslint-disable more/no-then */ // eslint-disable-next-line func-names (function () { window.Whisper = window.Whisper || {}; Whisper.MessageRequests = new (Backbone.Collection.extend({ forConversation(conversation) { if (conversation.get('e164')) { const syncByE164 = this.findWhere({ threadE164: conversation.get('e164'), }); if (syncByE164) { window.log.info( `Found early message request response for E164 ${conversation.idForLogging()}` ); this.remove(syncByE164); return syncByE164; } } if (conversation.get('uuid')) { const syncByUuid = this.findWhere({ threadUuid: conversation.get('uuid'), }); if (syncByUuid) { window.log.info( `Found early message request response for UUID ${conversation.idForLogging()}` ); this.remove(syncByUuid); return syncByUuid; } } // V1 Group if (conversation.get('groupId')) { const syncByGroupId = this.findWhere({ groupId: conversation.get('groupId'), }); if (syncByGroupId) { window.log.info( `Found early message request response for group v1 ID ${conversation.idForLogging()}` ); this.remove(syncByGroupId); return syncByGroupId; } } // V2 group if (conversation.get('groupId')) { const syncByGroupId = this.findWhere({ groupV2Id: conversation.get('groupId'), }); if (syncByGroupId) { window.log.info( `Found early message request response for group v2 ID ${conversation.idForLogging()}` ); this.remove(syncByGroupId); return syncByGroupId; } } return null; }, async onResponse(sync) { try { const threadE164 = sync.get('threadE164'); const threadUuid = sync.get('threadUuid'); const groupId = sync.get('groupId'); const groupV2Id = sync.get('groupV2Id'); let conversation; // We multiplex between GV1/GV2 groups here, but we don't kick off migrations if (groupV2Id) { conversation = ConversationController.get(groupV2Id); } if (!conversation && groupId) { conversation = ConversationController.get(groupId); } if (!conversation && (threadE164 || threadUuid)) { conversation = ConversationController.get( ConversationController.ensureContactIds({ e164: threadE164, uuid: threadUuid, }) ); } if (!conversation) { window.log( `Received message request response for unknown conversation: groupv2(${groupV2Id}) group(${groupId}) ${threadUuid} ${threadE164}` ); return; } conversation.applyMessageRequestResponse(sync.get('type'), { fromSync: true, }); this.remove(sync); } catch (error) { window.log.error( 'MessageRequests.onResponse error:', error && error.stack ? error.stack : error ); } }, }))(); })();