@wireapp/core 17.22.1 → 17.24.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/package.json +2 -2
- package/src/main/Account.d.ts +10 -1
- package/src/main/Account.js +8 -2
- package/src/main/Account.js.map +1 -1
- package/src/main/Account.ts +15 -2
- package/src/main/broadcast/BroadcastService.js +3 -4
- package/src/main/broadcast/BroadcastService.js.map +1 -1
- package/src/main/broadcast/BroadcastService.ts +3 -5
- package/src/main/conversation/ConversationService.d.ts +4 -6
- package/src/main/conversation/ConversationService.js +26 -59
- package/src/main/conversation/ConversationService.js.map +1 -1
- package/src/main/conversation/ConversationService.test.node.js +0 -38
- package/src/main/conversation/ConversationService.test.node.js.map +1 -1
- package/src/main/conversation/ConversationService.test.node.ts +1 -50
- package/src/main/conversation/ConversationService.ts +32 -116
- package/src/main/conversation/message/MessageService.d.ts +42 -12
- package/src/main/conversation/message/MessageService.js +147 -275
- package/src/main/conversation/message/MessageService.js.map +1 -1
- package/src/main/conversation/message/MessageService.test.node.js +117 -10
- package/src/main/conversation/message/MessageService.test.node.js.map +1 -1
- package/src/main/conversation/message/MessageService.test.node.ts +183 -40
- package/src/main/conversation/message/MessageService.ts +209 -354
- package/src/main/conversation/message/UserClientsUtil.d.ts +22 -0
- package/src/main/conversation/message/UserClientsUtil.js +38 -0
- package/src/main/conversation/message/UserClientsUtil.js.map +1 -0
- package/src/main/conversation/message/UserClientsUtil.ts +44 -0
- package/src/main/conversation/message/UserClientsUtils.test.node.d.ts +1 -0
- package/src/main/conversation/message/UserClientsUtils.test.node.js +42 -0
- package/src/main/conversation/message/UserClientsUtils.test.node.js.map +1 -0
- package/src/main/conversation/message/UserClientsUtils.test.node.ts +44 -0
- package/src/main/cryptography/CryptographyService.d.ts +6 -1
- package/src/main/cryptography/CryptographyService.js +14 -2
- package/src/main/cryptography/CryptographyService.js.map +1 -1
- package/src/main/cryptography/CryptographyService.test.node.js +2 -2
- package/src/main/cryptography/CryptographyService.test.node.js.map +1 -1
- package/src/main/cryptography/CryptographyService.test.node.ts +5 -4
- package/src/main/cryptography/CryptographyService.ts +22 -4
- package/src/main/util/TypePredicateUtil.js +3 -9
- package/src/main/util/TypePredicateUtil.js.map +1 -1
- package/src/main/util/TypePredicateUtil.ts +3 -9
|
@@ -27,92 +27,90 @@ const otr_1 = require("@wireapp/protocol-messaging/web/otr");
|
|
|
27
27
|
const long_1 = __importDefault(require("long"));
|
|
28
28
|
const StringUtil_1 = require("@wireapp/commons/src/main/util/StringUtil");
|
|
29
29
|
const bazinga64_1 = require("bazinga64");
|
|
30
|
+
const AssetCryptography_node_1 = require("../../cryptography/AssetCryptography.node");
|
|
30
31
|
const cryptography_1 = require("../../cryptography");
|
|
32
|
+
const MessageBuilder_1 = require("./MessageBuilder");
|
|
33
|
+
const protocol_messaging_1 = require("@wireapp/protocol-messaging");
|
|
34
|
+
const __1 = require("..");
|
|
35
|
+
const UserClientsUtil_1 = require("./UserClientsUtil");
|
|
31
36
|
class MessageService {
|
|
32
37
|
constructor(apiClient, cryptographyService) {
|
|
33
38
|
this.apiClient = apiClient;
|
|
34
39
|
this.cryptographyService = cryptographyService;
|
|
35
40
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
/**
|
|
42
|
+
* Sends a message to a non-federated backend.
|
|
43
|
+
*
|
|
44
|
+
* @param sendingClientId The clientId of the current user
|
|
45
|
+
* @param recipients The list of recipients to send the message to
|
|
46
|
+
* @param plainText The plainText data to send
|
|
47
|
+
* @param options.conversationId? the conversation to send the message to. Will broadcast if not set
|
|
48
|
+
* @param options.reportMissing? trigger a mismatch error when there are missing recipients in the payload
|
|
49
|
+
* @param options.sendAsProtobuf?
|
|
50
|
+
* @param options.onClientMismatch? Called when a mismatch happens on the server
|
|
51
|
+
* @return the ClientMismatch status returned by the backend
|
|
52
|
+
*/
|
|
53
|
+
async sendMessage(sendingClientId, recipients, plainText, options = {}) {
|
|
54
|
+
let plainTextPayload = plainText;
|
|
55
|
+
let cipherText;
|
|
56
|
+
if (this.shouldSendAsExternal(plainText, recipients)) {
|
|
57
|
+
const externalPayload = await this.generateExternalPayload(plainText);
|
|
58
|
+
plainTextPayload = externalPayload.text;
|
|
59
|
+
cipherText = externalPayload.cipherText;
|
|
60
|
+
}
|
|
61
|
+
const encryptedPayload = await this.cryptographyService.encrypt(plainTextPayload, recipients);
|
|
62
|
+
const send = (payload) => {
|
|
63
|
+
return options.sendAsProtobuf
|
|
64
|
+
? this.sendOTRProtobufMessage(sendingClientId, payload, Object.assign(Object.assign({}, options), { assetData: cipherText }))
|
|
65
|
+
: this.sendOTRMessage(sendingClientId, payload, Object.assign(Object.assign({}, options), { assetData: cipherText }));
|
|
41
66
|
};
|
|
42
|
-
/*
|
|
43
|
-
* When creating the PreKey bundles we already found out to which users we want to send a message, so we can ignore
|
|
44
|
-
* missing clients. We have to ignore missing clients because there can be the case that there are clients that
|
|
45
|
-
* don't provide PreKeys (clients from the Pre-E2EE era).
|
|
46
|
-
*/
|
|
47
|
-
const ignoreMissing = true;
|
|
48
67
|
try {
|
|
49
|
-
|
|
50
|
-
return await this.apiClient.broadcast.api.postBroadcastMessage(sendingClientId, message, ignoreMissing);
|
|
51
|
-
}
|
|
52
|
-
return await this.apiClient.conversation.api.postOTRMessage(sendingClientId, conversationId, message, ignoreMissing);
|
|
68
|
+
return await send(encryptedPayload);
|
|
53
69
|
}
|
|
54
70
|
catch (error) {
|
|
55
71
|
if (!this.isClientMismatchError(error)) {
|
|
56
72
|
throw error;
|
|
57
73
|
}
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
recipients: cryptography_1.CryptographyService.convertArrayRecipientsToBase64(reEncryptedMessage.recipients),
|
|
62
|
-
sender: reEncryptedMessage.sender,
|
|
63
|
-
});
|
|
74
|
+
const mismatch = error.response.data;
|
|
75
|
+
const reEncryptedMessage = await this.reencryptAfterMismatch(mismatch, encryptedPayload, plainText);
|
|
76
|
+
return send(reEncryptedMessage);
|
|
64
77
|
}
|
|
65
78
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
});
|
|
86
|
-
if (userIsIgnored) {
|
|
87
|
-
for (const sendingStatusKey of sendingStatusKeys) {
|
|
88
|
-
delete updatedMessageSendingStatus[sendingStatusKey][domainFailed][userIdMissing];
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
79
|
+
/**
|
|
80
|
+
* Sends a message to a federated backend.
|
|
81
|
+
*
|
|
82
|
+
* @param sendingClientId The clientId of the current user
|
|
83
|
+
* @param recipients The list of recipients to send the message to
|
|
84
|
+
* @param plainText The plainText data to send
|
|
85
|
+
* @param options.conversationId? the conversation to send the message to. Will broadcast if not set
|
|
86
|
+
* @param options.reportMissing? trigger a mismatch error when there are missing recipients in the payload
|
|
87
|
+
* @param options.sendAsProtobuf?
|
|
88
|
+
* @param options.onClientMismatch? Called when a mismatch happens on the server
|
|
89
|
+
* @return the MessageSendingStatus returned by the backend
|
|
90
|
+
*/
|
|
91
|
+
async sendFederatedMessage(sendingClientId, recipients, plainText, options) {
|
|
92
|
+
const send = (payload) => {
|
|
93
|
+
return this.sendFederatedOtrMessage(sendingClientId, payload, options);
|
|
94
|
+
};
|
|
95
|
+
const encryptedPayload = await this.cryptographyService.encryptQualified(plainText, recipients);
|
|
96
|
+
try {
|
|
97
|
+
return await send(encryptedPayload);
|
|
93
98
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
for (const [domainDeleted, userClientsDeleted] of Object.entries(updatedMessageSendingStatus[sendingStatusKey])) {
|
|
98
|
-
for (const userIdDeleted of Object.keys(userClientsDeleted)) {
|
|
99
|
-
if (userIdDeleted !== reportUserId.id && domainDeleted !== reportDomain) {
|
|
100
|
-
delete updatedMessageSendingStatus[sendingStatusKey][domainDeleted][userIdDeleted];
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
if (!this.isClientMismatchError(error)) {
|
|
101
|
+
throw error;
|
|
105
102
|
}
|
|
103
|
+
const mismatch = error.response.data;
|
|
104
|
+
const shouldStopSending = options.onClientMismatch && !(await options.onClientMismatch(mismatch));
|
|
105
|
+
if (shouldStopSending) {
|
|
106
|
+
return mismatch;
|
|
107
|
+
}
|
|
108
|
+
const reEncryptedPayload = await this.reencryptAfterFederatedMismatch(mismatch, encryptedPayload, plainText);
|
|
109
|
+
return send(reEncryptedPayload);
|
|
106
110
|
}
|
|
107
|
-
else if (!!messageData.ignoreAll) {
|
|
108
|
-
// report nothing
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
return updatedMessageSendingStatus;
|
|
112
111
|
}
|
|
113
|
-
async
|
|
114
|
-
const
|
|
115
|
-
const qualifiedUserEntries = Object.entries(otrRecipients).map(([domain, otrRecipients]) => {
|
|
112
|
+
async sendFederatedOtrMessage(sendingClientId, recipients, options) {
|
|
113
|
+
const qualifiedUserEntries = Object.entries(recipients).map(([domain, otrRecipients]) => {
|
|
116
114
|
const userEntries = Object.entries(otrRecipients).map(([userId, otrClientMap]) => {
|
|
117
115
|
const clientEntries = Object.entries(otrClientMap).map(([clientId, payload]) => {
|
|
118
116
|
return {
|
|
@@ -140,39 +138,93 @@ class MessageService {
|
|
|
140
138
|
if (options.assetData) {
|
|
141
139
|
protoMessage.blob = options.assetData;
|
|
142
140
|
}
|
|
143
|
-
/*
|
|
144
|
-
* When creating the PreKey bundles we already found out to which users we want to send a message, so we can ignore
|
|
145
|
-
* missing clients. We have to ignore missing clients because there can be the case that there are clients that
|
|
146
|
-
* don't provide PreKeys (clients from the Pre-E2EE era).
|
|
147
|
-
*/
|
|
148
141
|
if (options.reportMissing) {
|
|
149
142
|
protoMessage.reportAll = {};
|
|
150
143
|
}
|
|
151
144
|
else {
|
|
152
145
|
protoMessage.ignoreAll = {};
|
|
153
146
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
147
|
+
if (!options.conversationId) {
|
|
148
|
+
//TODO implement federated broadcast sending
|
|
149
|
+
throw new Error('Unimplemented federated broadcast');
|
|
157
150
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
151
|
+
const { id, domain } = options.conversationId;
|
|
152
|
+
return this.apiClient.conversation.api.postOTRMessageV2(id, domain, protoMessage);
|
|
153
|
+
}
|
|
154
|
+
async sendOTRMessage(sendingClientId, recipients, options) {
|
|
155
|
+
const message = {
|
|
156
|
+
data: options.assetData ? bazinga64_1.Encoder.toBase64(options.assetData).asString : undefined,
|
|
157
|
+
recipients: cryptography_1.CryptographyService.convertArrayRecipientsToBase64(recipients),
|
|
158
|
+
sender: sendingClientId,
|
|
159
|
+
};
|
|
160
|
+
return !options.conversationId
|
|
161
|
+
? this.apiClient.broadcast.api.postBroadcastMessage(sendingClientId, message, !options.reportMissing)
|
|
162
|
+
: this.apiClient.conversation.api.postOTRMessage(sendingClientId, options.conversationId, message, !options.reportMissing);
|
|
163
|
+
}
|
|
164
|
+
async generateExternalPayload(plainText) {
|
|
165
|
+
const asset = await (0, AssetCryptography_node_1.encryptAsset)({ plainText });
|
|
166
|
+
const { cipherText, keyBytes, sha256 } = asset;
|
|
167
|
+
const messageId = MessageBuilder_1.MessageBuilder.createId();
|
|
168
|
+
const externalMessage = {
|
|
169
|
+
otrKey: new Uint8Array(keyBytes),
|
|
170
|
+
sha256: new Uint8Array(sha256),
|
|
171
|
+
};
|
|
172
|
+
const genericMessage = protocol_messaging_1.GenericMessage.create({
|
|
173
|
+
[__1.GenericMessageType.EXTERNAL]: externalMessage,
|
|
174
|
+
messageId,
|
|
175
|
+
});
|
|
176
|
+
return { text: protocol_messaging_1.GenericMessage.encode(genericMessage).finish(), cipherText };
|
|
177
|
+
}
|
|
178
|
+
shouldSendAsExternal(plainText, preKeyBundles) {
|
|
179
|
+
const EXTERNAL_MESSAGE_THRESHOLD_BYTES = 200 * 1024;
|
|
180
|
+
let clientCount = 0;
|
|
181
|
+
for (const user in preKeyBundles) {
|
|
182
|
+
clientCount += Object.keys(preKeyBundles[user]).length;
|
|
163
183
|
}
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
184
|
+
const messageInBytes = new Uint8Array(plainText).length;
|
|
185
|
+
const estimatedPayloadInBytes = clientCount * messageInBytes;
|
|
186
|
+
return estimatedPayloadInBytes > EXTERNAL_MESSAGE_THRESHOLD_BYTES;
|
|
187
|
+
}
|
|
188
|
+
isClientMismatchError(error) {
|
|
189
|
+
var _a;
|
|
190
|
+
return ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === http_status_codes_1.StatusCodes.PRECONDITION_FAILED;
|
|
191
|
+
}
|
|
192
|
+
async reencryptAfterMismatch(mismatch, recipients, plainText) {
|
|
193
|
+
const deleted = (0, UserClientsUtil_1.flattenUserClients)(mismatch.deleted);
|
|
194
|
+
const missing = (0, UserClientsUtil_1.flattenUserClients)(mismatch.missing);
|
|
195
|
+
// remove deleted clients to the recipients
|
|
196
|
+
deleted.forEach(({ userId, data }) => data.forEach(clientId => delete recipients[userId.id][clientId]));
|
|
197
|
+
if (missing.length) {
|
|
198
|
+
const missingPreKeyBundles = await this.apiClient.user.api.postMultiPreKeyBundles(mismatch.missing);
|
|
199
|
+
const reEncrypted = await this.cryptographyService.encrypt(plainText, missingPreKeyBundles);
|
|
200
|
+
const reEncryptedPayloads = (0, UserClientsUtil_1.flattenUserClients)(reEncrypted);
|
|
201
|
+
// add missing clients to the recipients
|
|
202
|
+
reEncryptedPayloads.forEach(({ data, userId }) => (recipients[userId.id] = Object.assign(Object.assign({}, recipients[userId.id]), data)));
|
|
203
|
+
}
|
|
204
|
+
return recipients;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Will re-encrypt a message when there were some missing clients in the initial send (typically when the server replies with a client mismatch error)
|
|
208
|
+
*
|
|
209
|
+
* @param {ProtobufOTR.QualifiedNewOtrMessage} messageData The initial message that was sent
|
|
210
|
+
* @param {MessageSendingStatus} messageSendingStatus Info about the missing/deleted clients
|
|
211
|
+
* @param {Uint8Array} plainText The text that should be encrypted for the missing clients
|
|
212
|
+
* @return resolves with a new message payload that can be sent
|
|
213
|
+
*/
|
|
214
|
+
async reencryptAfterFederatedMismatch(mismatch, recipients, plainText) {
|
|
215
|
+
const deleted = (0, UserClientsUtil_1.flattenQualifiedUserClients)(mismatch.deleted);
|
|
216
|
+
const missing = (0, UserClientsUtil_1.flattenQualifiedUserClients)(mismatch.missing);
|
|
217
|
+
// remove deleted clients to the recipients
|
|
218
|
+
deleted.forEach(({ userId, data }) => data.forEach(clientId => delete recipients[userId.domain][userId.id][clientId]));
|
|
219
|
+
if (Object.keys(missing).length) {
|
|
220
|
+
const missingPreKeyBundles = await this.apiClient.user.api.postQualifiedMultiPreKeyBundles(mismatch.missing);
|
|
221
|
+
const reEncrypted = await this.cryptographyService.encryptQualified(plainText, missingPreKeyBundles);
|
|
222
|
+
const reEncryptedPayloads = (0, UserClientsUtil_1.flattenQualifiedUserClients)(reEncrypted);
|
|
223
|
+
reEncryptedPayloads.forEach(({ data, userId }) => (recipients[userId.domain][userId.id] = Object.assign(Object.assign({}, recipients[userId.domain][userId.id]), data)));
|
|
172
224
|
}
|
|
173
|
-
return
|
|
225
|
+
return recipients;
|
|
174
226
|
}
|
|
175
|
-
async sendOTRProtobufMessage(sendingClientId, recipients,
|
|
227
|
+
async sendOTRProtobufMessage(sendingClientId, recipients, options) {
|
|
176
228
|
const userEntries = Object.entries(recipients).map(([userId, otrClientMap]) => {
|
|
177
229
|
const clients = Object.entries(otrClientMap).map(([clientId, payload]) => {
|
|
178
230
|
return {
|
|
@@ -195,192 +247,12 @@ class MessageService {
|
|
|
195
247
|
client: long_1.default.fromString(sendingClientId, 16),
|
|
196
248
|
},
|
|
197
249
|
});
|
|
198
|
-
if (assetData) {
|
|
199
|
-
protoMessage.blob = assetData;
|
|
200
|
-
}
|
|
201
|
-
/*
|
|
202
|
-
* When creating the PreKey bundles we already found out to which users we want to send a message, so we can ignore
|
|
203
|
-
* missing clients. We have to ignore missing clients because there can be the case that there are clients that
|
|
204
|
-
* don't provide PreKeys (clients from the Pre-E2EE era).
|
|
205
|
-
*/
|
|
206
|
-
const ignoreMissing = true;
|
|
207
|
-
try {
|
|
208
|
-
if (conversationId === null) {
|
|
209
|
-
return await this.apiClient.broadcast.api.postBroadcastProtobufMessage(sendingClientId, protoMessage, ignoreMissing);
|
|
210
|
-
}
|
|
211
|
-
return await this.apiClient.conversation.api.postOTRProtobufMessage(sendingClientId, conversationId, protoMessage, ignoreMissing);
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
if (!this.isClientMismatchError(error)) {
|
|
215
|
-
throw error;
|
|
216
|
-
}
|
|
217
|
-
const mismatch = error.response.data;
|
|
218
|
-
const reEncryptedMessage = await this.onClientProtobufMismatch(mismatch, protoMessage, plainTextArray);
|
|
219
|
-
if (conversationId === null) {
|
|
220
|
-
return await this.apiClient.broadcast.api.postBroadcastProtobufMessage(sendingClientId, reEncryptedMessage);
|
|
221
|
-
}
|
|
222
|
-
return await this.apiClient.conversation.api.postOTRProtobufMessage(sendingClientId, conversationId, reEncryptedMessage, ignoreMissing);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
async onClientMismatch(clientMismatch, message, plainTextArray) {
|
|
226
|
-
const { missing, deleted } = clientMismatch;
|
|
227
|
-
const deletedUserIds = Object.keys(deleted);
|
|
228
|
-
const missingUserIds = Object.keys(missing);
|
|
229
|
-
if (deletedUserIds.length) {
|
|
230
|
-
for (const deletedUserId of deletedUserIds) {
|
|
231
|
-
for (const deletedClientId of deleted[deletedUserId]) {
|
|
232
|
-
const deletedUser = message.recipients[deletedUserId];
|
|
233
|
-
if (deletedUser) {
|
|
234
|
-
delete deletedUser[deletedClientId];
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
if (missingUserIds.length) {
|
|
240
|
-
const missingPreKeyBundles = await this.apiClient.user.api.postMultiPreKeyBundles(missing);
|
|
241
|
-
const reEncryptedPayloads = await this.cryptographyService.encrypt(plainTextArray, missingPreKeyBundles);
|
|
242
|
-
for (const missingUserId of missingUserIds) {
|
|
243
|
-
for (const missingClientId in reEncryptedPayloads[missingUserId]) {
|
|
244
|
-
const missingUser = message.recipients[missingUserId];
|
|
245
|
-
if (!missingUser) {
|
|
246
|
-
message.recipients[missingUserId] = {};
|
|
247
|
-
}
|
|
248
|
-
message.recipients[missingUserId][missingClientId] = reEncryptedPayloads[missingUserId][missingClientId];
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
return message;
|
|
253
|
-
}
|
|
254
|
-
async onClientProtobufMismatch(clientMismatch, message, plainTextArray) {
|
|
255
|
-
var _a, _b;
|
|
256
|
-
const { missing, deleted } = clientMismatch;
|
|
257
|
-
const deletedUserIds = Object.keys(deleted);
|
|
258
|
-
const missingUserIds = Object.keys(missing);
|
|
259
|
-
if (deletedUserIds.length) {
|
|
260
|
-
for (const deletedUserId of deletedUserIds) {
|
|
261
|
-
for (const deletedClientId of deleted[deletedUserId]) {
|
|
262
|
-
const deletedUserIndex = message.recipients.findIndex(({ user }) => (0, StringUtil_1.bytesToUUID)(user.uuid) === deletedUserId);
|
|
263
|
-
if (deletedUserIndex > -1) {
|
|
264
|
-
const deletedClientIndex = (_a = message.recipients[deletedUserIndex].clients) === null || _a === void 0 ? void 0 : _a.findIndex(({ client }) => {
|
|
265
|
-
return client.client.toString(16) === deletedClientId;
|
|
266
|
-
});
|
|
267
|
-
if (typeof deletedClientIndex !== 'undefined' && deletedClientIndex > -1) {
|
|
268
|
-
(_b = message.recipients[deletedUserIndex].clients) === null || _b === void 0 ? true : delete _b[deletedClientIndex];
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
if (missingUserIds.length) {
|
|
275
|
-
const missingPreKeyBundles = await this.apiClient.user.api.postMultiPreKeyBundles(missing);
|
|
276
|
-
const reEncryptedPayloads = await this.cryptographyService.encrypt(plainTextArray, missingPreKeyBundles);
|
|
277
|
-
for (const missingUserId of missingUserIds) {
|
|
278
|
-
for (const missingClientId in reEncryptedPayloads[missingUserId]) {
|
|
279
|
-
const missingUserIndex = message.recipients.findIndex(({ user }) => (0, StringUtil_1.bytesToUUID)(user.uuid) === missingUserId);
|
|
280
|
-
if (missingUserIndex === -1) {
|
|
281
|
-
message.recipients.push({
|
|
282
|
-
clients: [
|
|
283
|
-
{
|
|
284
|
-
client: {
|
|
285
|
-
client: long_1.default.fromString(missingClientId, 16),
|
|
286
|
-
},
|
|
287
|
-
text: reEncryptedPayloads[missingUserId][missingClientId],
|
|
288
|
-
},
|
|
289
|
-
],
|
|
290
|
-
user: {
|
|
291
|
-
uuid: (0, StringUtil_1.uuidToBytes)(missingUserId),
|
|
292
|
-
},
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
return message;
|
|
299
|
-
}
|
|
300
|
-
deleteExtraQualifiedClients(message, deletedClients) {
|
|
301
|
-
var _a;
|
|
302
|
-
// walk through deleted domain/user map
|
|
303
|
-
for (const [deletedUserDomain, deletedUserIdClients] of Object.entries(deletedClients)) {
|
|
304
|
-
if (!message.recipients.find(recipient => recipient.domain === deletedUserDomain)) {
|
|
305
|
-
// no user from this domain was deleted
|
|
306
|
-
continue;
|
|
307
|
-
}
|
|
308
|
-
// walk through deleted user ids
|
|
309
|
-
for (const [deletedUserId] of Object.entries(deletedUserIdClients)) {
|
|
310
|
-
// walk through message recipients
|
|
311
|
-
for (const recipientIndex in message.recipients) {
|
|
312
|
-
// check if message recipients' domain is the same as the deleted user's domain
|
|
313
|
-
if (message.recipients[recipientIndex].domain === deletedUserDomain) {
|
|
314
|
-
// check if message recipients' id is the same as the deleted user's id
|
|
315
|
-
for (const entriesIndex in message.recipients[recipientIndex].entries || []) {
|
|
316
|
-
const uuid = (_a = message.recipients[recipientIndex].entries[entriesIndex].user) === null || _a === void 0 ? void 0 : _a.uuid;
|
|
317
|
-
if (!!uuid && (0, StringUtil_1.bytesToUUID)(uuid) === deletedUserId) {
|
|
318
|
-
// delete this user from the message recipients
|
|
319
|
-
delete message.recipients[recipientIndex].entries[entriesIndex];
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
return message;
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Will re-encrypt a message when there were some missing clients in the initial send (typically when the server replies with a client mismatch error)
|
|
330
|
-
*
|
|
331
|
-
* @param {ProtobufOTR.QualifiedNewOtrMessage} messageData The initial message that was sent
|
|
332
|
-
* @param {MessageSendingStatus} messageSendingStatus Info about the missing/deleted clients
|
|
333
|
-
* @param {Uint8Array} plainText The text that should be encrypted for the missing clients
|
|
334
|
-
* @return resolves with a new message payload that can be sent
|
|
335
|
-
*/
|
|
336
|
-
async onFederatedMismatch(message, { deleted, missing }, plainText) {
|
|
337
|
-
message = this.deleteExtraQualifiedClients(message, deleted);
|
|
338
|
-
if (Object.keys(missing).length) {
|
|
339
|
-
const missingPreKeyBundles = await this.apiClient.user.api.postQualifiedMultiPreKeyBundles(missing);
|
|
340
|
-
const reEncryptedPayloads = await this.cryptographyService.encryptQualified(plainText, missingPreKeyBundles);
|
|
341
|
-
message = this.addMissingQualifiedClients(message, reEncryptedPayloads);
|
|
342
|
-
}
|
|
343
|
-
return message;
|
|
344
|
-
}
|
|
345
|
-
addMissingQualifiedClients(messageData, reEncryptedPayloads) {
|
|
346
|
-
var _a, _b;
|
|
347
|
-
var _c;
|
|
348
|
-
// walk through missing domain/user map
|
|
349
|
-
for (const [missingDomain, userClients] of Object.entries(reEncryptedPayloads)) {
|
|
350
|
-
// walk through missing user ids
|
|
351
|
-
for (const [missingUserId, missingClientIds] of Object.entries(userClients)) {
|
|
352
|
-
// walk through message recipients
|
|
353
|
-
for (const domain of messageData.recipients) {
|
|
354
|
-
// check if message recipients' domain is the same as the missing user's domain
|
|
355
|
-
if (domain.domain === missingDomain) {
|
|
356
|
-
// check if there is a recipient with same user id as the missing user's id
|
|
357
|
-
let userIndex = (_a = domain.entries) === null || _a === void 0 ? void 0 : _a.findIndex(({ user }) => (0, StringUtil_1.bytesToUUID)(user.uuid) === missingUserId);
|
|
358
|
-
if (userIndex === -1) {
|
|
359
|
-
// no recipient found, let's create it
|
|
360
|
-
userIndex =
|
|
361
|
-
domain.entries.push({
|
|
362
|
-
user: {
|
|
363
|
-
uuid: (0, StringUtil_1.uuidToBytes)(missingUserId),
|
|
364
|
-
},
|
|
365
|
-
}) - 1;
|
|
366
|
-
}
|
|
367
|
-
const missingUserUUID = domain.entries[userIndex].user.uuid;
|
|
368
|
-
if ((0, StringUtil_1.bytesToUUID)(missingUserUUID) === missingUserId) {
|
|
369
|
-
for (const [missingClientId, missingClientPayload] of Object.entries(missingClientIds)) {
|
|
370
|
-
(_c = domain.entries[userIndex]).clients || (_c.clients = []);
|
|
371
|
-
(_b = domain.entries[userIndex].clients) === null || _b === void 0 ? void 0 : _b.push({
|
|
372
|
-
client: {
|
|
373
|
-
client: long_1.default.fromString(missingClientId, 16),
|
|
374
|
-
},
|
|
375
|
-
text: missingClientPayload,
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
}
|
|
250
|
+
if (options.assetData) {
|
|
251
|
+
protoMessage.blob = options.assetData;
|
|
382
252
|
}
|
|
383
|
-
return
|
|
253
|
+
return !options.conversationId
|
|
254
|
+
? this.apiClient.broadcast.api.postBroadcastProtobufMessage(sendingClientId, protoMessage, !options.reportMissing)
|
|
255
|
+
: this.apiClient.conversation.api.postOTRProtobufMessage(sendingClientId, options.conversationId, protoMessage, !options.reportMissing);
|
|
384
256
|
}
|
|
385
257
|
}
|
|
386
258
|
exports.MessageService = MessageService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageService.js","sourceRoot":"","sources":["MessageService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MessageService.js","sourceRoot":"","sources":["MessageService.ts"],"names":[],"mappings":"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"}
|