diff --git a/ts/models/messages.ts b/ts/models/messages.ts index af6ec307bf..77de98cc42 100644 --- a/ts/models/messages.ts +++ b/ts/models/messages.ts @@ -334,7 +334,14 @@ export class MessageModel extends window.Backbone.Model { const errors = _.reject(allErrors, error => Boolean(error.identifier || error.number) ); - const errorsGroupedById = _.groupBy(allErrors, 'number'); + const errorsGroupedById = _.groupBy(allErrors, error => { + const identifier = error.identifier || error.number; + if (!identifier) { + return null; + } + + return window.ConversationController.getConversationId(identifier); + }); const finalContacts = (conversationIds || []).map(id => { const errorsForContact = errorsGroupedById[id]; const isOutgoingKeyError = Boolean( @@ -1703,17 +1710,18 @@ export class MessageModel extends window.Backbone.Model { ); }); errors = errors.map(e => { - if ( - e.constructor === Error || - e.constructor === TypeError || - e.constructor === ReferenceError - ) { + // Note: in our environment, instanceof can be scary, so we have a backup check + // (Node.js vs Browser context). + // We check instanceof second because typescript believes that anything that comes + // through here must be an instance of Error, so e is 'never' after that check. + if ((e.message && e.stack) || e instanceof Error) { return _.pick( e, 'name', 'message', 'code', 'number', + 'identifier', 'reason' ) as Required; }