@wireapp/core 17.24.0 → 17.24.1

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.
Files changed (30) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +2 -2
  3. package/src/main/broadcast/BroadcastService.js +3 -4
  4. package/src/main/broadcast/BroadcastService.js.map +1 -1
  5. package/src/main/broadcast/BroadcastService.ts +3 -5
  6. package/src/main/conversation/ConversationService.d.ts +4 -6
  7. package/src/main/conversation/ConversationService.js +26 -59
  8. package/src/main/conversation/ConversationService.js.map +1 -1
  9. package/src/main/conversation/ConversationService.test.node.js +0 -38
  10. package/src/main/conversation/ConversationService.test.node.js.map +1 -1
  11. package/src/main/conversation/ConversationService.test.node.ts +1 -50
  12. package/src/main/conversation/ConversationService.ts +32 -116
  13. package/src/main/conversation/message/MessageService.d.ts +42 -12
  14. package/src/main/conversation/message/MessageService.js +146 -281
  15. package/src/main/conversation/message/MessageService.js.map +1 -1
  16. package/src/main/conversation/message/MessageService.test.node.js +100 -6
  17. package/src/main/conversation/message/MessageService.test.node.js.map +1 -1
  18. package/src/main/conversation/message/MessageService.test.node.ts +153 -29
  19. package/src/main/conversation/message/MessageService.ts +208 -360
  20. package/src/main/conversation/message/UserClientsUtil.d.ts +22 -0
  21. package/src/main/conversation/message/UserClientsUtil.js +38 -0
  22. package/src/main/conversation/message/UserClientsUtil.js.map +1 -0
  23. package/src/main/conversation/message/UserClientsUtil.ts +44 -0
  24. package/src/main/conversation/message/UserClientsUtils.test.node.d.ts +1 -0
  25. package/src/main/conversation/message/UserClientsUtils.test.node.js +42 -0
  26. package/src/main/conversation/message/UserClientsUtils.test.node.js.map +1 -0
  27. package/src/main/conversation/message/UserClientsUtils.test.node.ts +44 -0
  28. package/src/main/util/TypePredicateUtil.js +3 -9
  29. package/src/main/util/TypePredicateUtil.js.map +1 -1
  30. package/src/main/util/TypePredicateUtil.ts +3 -9
@@ -27,96 +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
- async sendOTRMessage(sendingClientId, recipients, conversationId, plainTextArray, base64CipherText) {
37
- const message = {
38
- data: base64CipherText,
39
- recipients: cryptography_1.CryptographyService.convertArrayRecipientsToBase64(recipients),
40
- sender: sendingClientId,
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
- if (conversationId === null) {
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 reEncryptedMessage = await this.onClientMismatch(error.response.data, Object.assign(Object.assign({}, message), { data: base64CipherText ? bazinga64_1.Decoder.fromBase64(base64CipherText).asBytes : undefined, recipients }), plainTextArray);
59
- return await this.apiClient.broadcast.api.postBroadcastMessage(sendingClientId, {
60
- data: reEncryptedMessage.data ? bazinga64_1.Encoder.toBase64(reEncryptedMessage.data).asString : undefined,
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
- isClientMismatchError(error) {
67
- var _a;
68
- return ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === http_status_codes_1.StatusCodes.PRECONDITION_FAILED;
69
- }
70
- checkFederatedClientsMismatch(messageData, messageSendingStatus) {
71
- var _a, _b, _c, _d;
72
- const updatedMessageSendingStatus = Object.assign({}, messageSendingStatus);
73
- const sendingStatusKeys = [
74
- 'deleted',
75
- 'failed_to_send',
76
- 'missing',
77
- 'redundant',
78
- ];
79
- const allFailed = Object.assign(Object.assign(Object.assign(Object.assign({}, messageSendingStatus.deleted), messageSendingStatus.failed_to_send), messageSendingStatus.missing), messageSendingStatus.redundant);
80
- const hasDiffs = Object.keys(allFailed).length;
81
- if (!hasDiffs) {
82
- return null;
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);
83
98
  }
84
- if ((_b = (_a = messageData.ignoreOnly) === null || _a === void 0 ? void 0 : _a.userIds) === null || _b === void 0 ? void 0 : _b.length) {
85
- for (const [domainFailed, userClientsFailed] of Object.entries(allFailed)) {
86
- for (const userIdMissing of Object.keys(userClientsFailed)) {
87
- const userIsIgnored = messageData.ignoreOnly.userIds.find(({ domain: domainIgnore, id: userIdIgnore }) => {
88
- return userIdIgnore === userIdMissing && domainIgnore === domainFailed;
89
- });
90
- if (userIsIgnored) {
91
- for (const sendingStatusKey of sendingStatusKeys) {
92
- delete updatedMessageSendingStatus[sendingStatusKey][domainFailed][userIdMissing];
93
- }
94
- }
95
- }
99
+ catch (error) {
100
+ if (!this.isClientMismatchError(error)) {
101
+ throw error;
96
102
  }
97
- }
98
- else if ((_d = (_c = messageData.reportOnly) === null || _c === void 0 ? void 0 : _c.userIds) === null || _d === void 0 ? void 0 : _d.length) {
99
- for (const [reportDomain, reportUserId] of Object.entries(messageData.reportOnly.userIds)) {
100
- for (const sendingStatusKey of sendingStatusKeys) {
101
- for (const [domainDeleted, userClientsDeleted] of Object.entries(updatedMessageSendingStatus[sendingStatusKey])) {
102
- for (const userIdDeleted of Object.keys(userClientsDeleted)) {
103
- if (userIdDeleted !== reportUserId.id && domainDeleted !== reportDomain) {
104
- delete updatedMessageSendingStatus[sendingStatusKey][domainDeleted][userIdDeleted];
105
- }
106
- }
107
- }
108
- }
103
+ const mismatch = error.response.data;
104
+ const shouldStopSending = options.onClientMismatch && !(await options.onClientMismatch(mismatch));
105
+ if (shouldStopSending) {
106
+ return mismatch;
109
107
  }
108
+ const reEncryptedPayload = await this.reencryptAfterFederatedMismatch(mismatch, encryptedPayload, plainText);
109
+ return send(reEncryptedPayload);
110
110
  }
111
- else if (!!messageData.ignoreAll) {
112
- // report nothing
113
- return null;
114
- }
115
- return updatedMessageSendingStatus;
116
111
  }
117
- async sendFederatedOTRMessage(sendingClientId, { id: conversationId, domain }, recipients, plainTextArray, options = {}) {
118
- const otrRecipients = await this.cryptographyService.encryptQualified(plainTextArray, recipients);
119
- const qualifiedUserEntries = Object.entries(otrRecipients).map(([domain, otrRecipients]) => {
112
+ async sendFederatedOtrMessage(sendingClientId, recipients, options) {
113
+ const qualifiedUserEntries = Object.entries(recipients).map(([domain, otrRecipients]) => {
120
114
  const userEntries = Object.entries(otrRecipients).map(([userId, otrClientMap]) => {
121
115
  const clientEntries = Object.entries(otrClientMap).map(([clientId, payload]) => {
122
116
  return {
@@ -144,41 +138,93 @@ class MessageService {
144
138
  if (options.assetData) {
145
139
  protoMessage.blob = options.assetData;
146
140
  }
147
- /*
148
- * When creating the PreKey bundles we already found out to which users we want to send a message, so we can ignore
149
- * missing clients. We have to ignore missing clients because there can be the case that there are clients that
150
- * don't provide PreKeys (clients from the Pre-E2EE era).
151
- */
152
141
  if (options.reportMissing) {
153
142
  protoMessage.reportAll = {};
154
143
  }
155
144
  else {
156
145
  protoMessage.ignoreAll = {};
157
146
  }
158
- let sendingStatus;
159
- let sendingFailed = false;
160
- try {
161
- sendingStatus = await this.apiClient.conversation.api.postOTRMessageV2(conversationId, domain, protoMessage);
147
+ if (!options.conversationId) {
148
+ //TODO implement federated broadcast sending
149
+ throw new Error('Unimplemented federated broadcast');
162
150
  }
163
- catch (error) {
164
- if (!this.isClientMismatchError(error)) {
165
- throw error;
166
- }
167
- sendingStatus = error.response.data;
168
- sendingFailed = true;
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;
169
183
  }
170
- const mismatch = this.checkFederatedClientsMismatch(protoMessage, sendingStatus);
171
- if (mismatch) {
172
- const shouldStopSending = options.onClientMismatch && !(await options.onClientMismatch(mismatch));
173
- if (shouldStopSending || !sendingFailed) {
174
- return sendingStatus;
175
- }
176
- const reEncryptedMessage = await this.onFederatedMismatch(protoMessage, mismatch, plainTextArray);
177
- await this.apiClient.conversation.api.postOTRMessageV2(conversationId, domain, reEncryptedMessage);
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)));
178
203
  }
179
- return sendingStatus;
204
+ return recipients;
180
205
  }
181
- async sendOTRProtobufMessage(sendingClientId, recipients, conversationId, plainTextArray, assetData) {
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)));
224
+ }
225
+ return recipients;
226
+ }
227
+ async sendOTRProtobufMessage(sendingClientId, recipients, options) {
182
228
  const userEntries = Object.entries(recipients).map(([userId, otrClientMap]) => {
183
229
  const clients = Object.entries(otrClientMap).map(([clientId, payload]) => {
184
230
  return {
@@ -201,193 +247,12 @@ class MessageService {
201
247
  client: long_1.default.fromString(sendingClientId, 16),
202
248
  },
203
249
  });
204
- if (assetData) {
205
- protoMessage.blob = assetData;
206
- }
207
- /*
208
- * When creating the PreKey bundles we already found out to which users we want to send a message, so we can ignore
209
- * missing clients. We have to ignore missing clients because there can be the case that there are clients that
210
- * don't provide PreKeys (clients from the Pre-E2EE era).
211
- */
212
- const ignoreMissing = true;
213
- try {
214
- if (conversationId === null) {
215
- return await this.apiClient.broadcast.api.postBroadcastProtobufMessage(sendingClientId, protoMessage, ignoreMissing);
216
- }
217
- return await this.apiClient.conversation.api.postOTRProtobufMessage(sendingClientId, conversationId, protoMessage, ignoreMissing);
218
- }
219
- catch (error) {
220
- if (!this.isClientMismatchError(error)) {
221
- throw error;
222
- }
223
- const mismatch = error.response.data;
224
- const reEncryptedMessage = await this.onClientProtobufMismatch(mismatch, protoMessage, plainTextArray);
225
- if (conversationId === null) {
226
- return await this.apiClient.broadcast.api.postBroadcastProtobufMessage(sendingClientId, reEncryptedMessage);
227
- }
228
- return await this.apiClient.conversation.api.postOTRProtobufMessage(sendingClientId, conversationId, reEncryptedMessage, ignoreMissing);
229
- }
230
- }
231
- async onClientMismatch(clientMismatch, message, plainTextArray) {
232
- const { missing, deleted } = clientMismatch;
233
- const deletedUserIds = Object.keys(deleted);
234
- const missingUserIds = Object.keys(missing);
235
- if (deletedUserIds.length) {
236
- for (const deletedUserId of deletedUserIds) {
237
- for (const deletedClientId of deleted[deletedUserId]) {
238
- const deletedUser = message.recipients[deletedUserId];
239
- if (deletedUser) {
240
- delete deletedUser[deletedClientId];
241
- }
242
- }
243
- }
244
- }
245
- if (missingUserIds.length) {
246
- const missingPreKeyBundles = await this.apiClient.user.api.postMultiPreKeyBundles(missing);
247
- const reEncryptedPayloads = await this.cryptographyService.encrypt(plainTextArray, missingPreKeyBundles);
248
- for (const missingUserId of missingUserIds) {
249
- for (const missingClientId in reEncryptedPayloads[missingUserId]) {
250
- const missingUser = message.recipients[missingUserId];
251
- if (!missingUser) {
252
- message.recipients[missingUserId] = {};
253
- }
254
- message.recipients[missingUserId][missingClientId] = reEncryptedPayloads[missingUserId][missingClientId];
255
- }
256
- }
257
- }
258
- return message;
259
- }
260
- async onClientProtobufMismatch(clientMismatch, message, plainTextArray) {
261
- var _a, _b;
262
- const { missing, deleted } = clientMismatch;
263
- const deletedUserIds = Object.keys(deleted);
264
- const missingUserIds = Object.keys(missing);
265
- if (deletedUserIds.length) {
266
- for (const deletedUserId of deletedUserIds) {
267
- for (const deletedClientId of deleted[deletedUserId]) {
268
- const deletedUserIndex = message.recipients.findIndex(({ user }) => (0, StringUtil_1.bytesToUUID)(user.uuid) === deletedUserId);
269
- if (deletedUserIndex > -1) {
270
- const deletedClientIndex = (_a = message.recipients[deletedUserIndex].clients) === null || _a === void 0 ? void 0 : _a.findIndex(({ client }) => {
271
- return client.client.toString(16) === deletedClientId;
272
- });
273
- if (typeof deletedClientIndex !== 'undefined' && deletedClientIndex > -1) {
274
- (_b = message.recipients[deletedUserIndex].clients) === null || _b === void 0 ? true : delete _b[deletedClientIndex];
275
- }
276
- }
277
- }
278
- }
279
- }
280
- if (missingUserIds.length) {
281
- const missingPreKeyBundles = await this.apiClient.user.api.postMultiPreKeyBundles(missing);
282
- const reEncryptedPayloads = await this.cryptographyService.encrypt(plainTextArray, missingPreKeyBundles);
283
- for (const missingUserId of missingUserIds) {
284
- for (const missingClientId in reEncryptedPayloads[missingUserId]) {
285
- const missingUserIndex = message.recipients.findIndex(({ user }) => (0, StringUtil_1.bytesToUUID)(user.uuid) === missingUserId);
286
- if (missingUserIndex === -1) {
287
- message.recipients.push({
288
- clients: [
289
- {
290
- client: {
291
- client: long_1.default.fromString(missingClientId, 16),
292
- },
293
- text: reEncryptedPayloads[missingUserId][missingClientId],
294
- },
295
- ],
296
- user: {
297
- uuid: (0, StringUtil_1.uuidToBytes)(missingUserId),
298
- },
299
- });
300
- }
301
- }
302
- }
303
- }
304
- return message;
305
- }
306
- deleteExtraQualifiedClients(message, deletedClients) {
307
- var _a;
308
- // walk through deleted domain/user map
309
- for (const [deletedUserDomain, deletedUserIdClients] of Object.entries(deletedClients)) {
310
- if (!message.recipients.find(recipient => recipient.domain === deletedUserDomain)) {
311
- // no user from this domain was deleted
312
- continue;
313
- }
314
- // walk through deleted user ids
315
- for (const [deletedUserId] of Object.entries(deletedUserIdClients)) {
316
- // walk through message recipients
317
- for (const recipients of message.recipients) {
318
- // check if message recipients' domain is the same as the deleted user's domain
319
- if (recipients.domain === deletedUserDomain) {
320
- // check if message recipients' id is the same as the deleted user's id
321
- for (const recipientEntry of recipients.entries || []) {
322
- const uuid = (_a = recipientEntry.user) === null || _a === void 0 ? void 0 : _a.uuid;
323
- if (!!uuid && (0, StringUtil_1.bytesToUUID)(uuid) === deletedUserId) {
324
- // delete this user from the message recipients
325
- const deleteIndex = recipients.entries.indexOf(recipientEntry);
326
- recipients.entries.splice(deleteIndex);
327
- }
328
- }
329
- }
330
- }
331
- }
332
- }
333
- return message;
334
- }
335
- /**
336
- * 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)
337
- *
338
- * @param {ProtobufOTR.QualifiedNewOtrMessage} messageData The initial message that was sent
339
- * @param {MessageSendingStatus} messageSendingStatus Info about the missing/deleted clients
340
- * @param {Uint8Array} plainText The text that should be encrypted for the missing clients
341
- * @return resolves with a new message payload that can be sent
342
- */
343
- async onFederatedMismatch(message, { deleted, missing }, plainText) {
344
- message = this.deleteExtraQualifiedClients(message, deleted);
345
- if (Object.keys(missing).length) {
346
- const missingPreKeyBundles = await this.apiClient.user.api.postQualifiedMultiPreKeyBundles(missing);
347
- const reEncryptedPayloads = await this.cryptographyService.encryptQualified(plainText, missingPreKeyBundles);
348
- message = this.addMissingQualifiedClients(message, reEncryptedPayloads);
349
- }
350
- return message;
351
- }
352
- addMissingQualifiedClients(messageData, reEncryptedPayloads) {
353
- var _a, _b;
354
- var _c;
355
- // walk through missing domain/user map
356
- for (const [missingDomain, userClients] of Object.entries(reEncryptedPayloads)) {
357
- // walk through missing user ids
358
- for (const [missingUserId, missingClientIds] of Object.entries(userClients)) {
359
- // walk through message recipients
360
- for (const domain of messageData.recipients) {
361
- // check if message recipients' domain is the same as the missing user's domain
362
- if (domain.domain === missingDomain) {
363
- // check if there is a recipient with same user id as the missing user's id
364
- let userIndex = (_a = domain.entries) === null || _a === void 0 ? void 0 : _a.findIndex(({ user }) => (0, StringUtil_1.bytesToUUID)(user.uuid) === missingUserId);
365
- if (userIndex === -1) {
366
- // no recipient found, let's create it
367
- userIndex =
368
- domain.entries.push({
369
- user: {
370
- uuid: (0, StringUtil_1.uuidToBytes)(missingUserId),
371
- },
372
- }) - 1;
373
- }
374
- const missingUserUUID = domain.entries[userIndex].user.uuid;
375
- if ((0, StringUtil_1.bytesToUUID)(missingUserUUID) === missingUserId) {
376
- for (const [missingClientId, missingClientPayload] of Object.entries(missingClientIds)) {
377
- (_c = domain.entries[userIndex]).clients || (_c.clients = []);
378
- (_b = domain.entries[userIndex].clients) === null || _b === void 0 ? void 0 : _b.push({
379
- client: {
380
- client: long_1.default.fromString(missingClientId, 16),
381
- },
382
- text: missingClientPayload,
383
- });
384
- }
385
- }
386
- }
387
- }
388
- }
250
+ if (options.assetData) {
251
+ protoMessage.blob = options.assetData;
389
252
  }
390
- return messageData;
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);
391
256
  }
392
257
  }
393
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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"}