@wireapp/core 17.24.0 → 17.26.0
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 +41 -0
- package/package.json +2 -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 +16 -9
- package/src/main/conversation/ConversationService.js +52 -65
- package/src/main/conversation/ConversationService.js.map +1 -1
- package/src/main/conversation/ConversationService.test.node.js +17 -38
- package/src/main/conversation/ConversationService.test.node.js.map +1 -1
- package/src/main/conversation/ConversationService.test.node.ts +20 -50
- package/src/main/conversation/ConversationService.ts +72 -124
- package/src/main/conversation/message/MessageService.d.ts +43 -13
- package/src/main/conversation/message/MessageService.js +150 -281
- package/src/main/conversation/message/MessageService.js.map +1 -1
- package/src/main/conversation/message/MessageService.test.node.js +178 -6
- package/src/main/conversation/message/MessageService.test.node.js.map +1 -1
- package/src/main/conversation/message/MessageService.test.node.ts +245 -29
- package/src/main/conversation/message/MessageService.ts +211 -364
- 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.js +8 -0
- 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 +10 -2
- 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,96 +27,94 @@ 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
|
-
|
|
62
|
-
|
|
63
|
-
|
|
74
|
+
const mismatch = error.response.data;
|
|
75
|
+
const shouldStopSending = options.onClientMismatch && (await options.onClientMismatch(mismatch)) === false;
|
|
76
|
+
if (shouldStopSending) {
|
|
77
|
+
return mismatch;
|
|
78
|
+
}
|
|
79
|
+
const reEncryptedMessage = await this.reencryptAfterMismatch(mismatch, encryptedPayload, plainText);
|
|
80
|
+
return send(reEncryptedMessage);
|
|
64
81
|
}
|
|
65
82
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Sends a message to a federated backend.
|
|
85
|
+
*
|
|
86
|
+
* @param sendingClientId The clientId of the current user
|
|
87
|
+
* @param recipients The list of recipients to send the message to
|
|
88
|
+
* @param plainText The plainText data to send
|
|
89
|
+
* @param options.conversationId? the conversation to send the message to. Will broadcast if not set
|
|
90
|
+
* @param options.reportMissing? trigger a mismatch error when there are missing recipients in the payload
|
|
91
|
+
* @param options.sendAsProtobuf?
|
|
92
|
+
* @param options.onClientMismatch? Called when a mismatch happens on the server
|
|
93
|
+
* @return the MessageSendingStatus returned by the backend
|
|
94
|
+
*/
|
|
95
|
+
async sendFederatedMessage(sendingClientId, recipients, plainText, options) {
|
|
96
|
+
const send = (payload) => {
|
|
97
|
+
return this.sendFederatedOtrMessage(sendingClientId, payload, options);
|
|
98
|
+
};
|
|
99
|
+
const encryptedPayload = await this.cryptographyService.encryptQualified(plainText, recipients);
|
|
100
|
+
try {
|
|
101
|
+
return await send(encryptedPayload);
|
|
83
102
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (!this.isClientMismatchError(error)) {
|
|
105
|
+
throw error;
|
|
96
106
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
-
}
|
|
107
|
+
const mismatch = error.response.data;
|
|
108
|
+
const shouldStopSending = options.onClientMismatch && (await options.onClientMismatch(mismatch)) === false;
|
|
109
|
+
if (shouldStopSending) {
|
|
110
|
+
return mismatch;
|
|
109
111
|
}
|
|
112
|
+
const reEncryptedPayload = await this.reencryptAfterFederatedMismatch(mismatch, encryptedPayload, plainText);
|
|
113
|
+
return send(reEncryptedPayload);
|
|
110
114
|
}
|
|
111
|
-
else if (!!messageData.ignoreAll) {
|
|
112
|
-
// report nothing
|
|
113
|
-
return null;
|
|
114
|
-
}
|
|
115
|
-
return updatedMessageSendingStatus;
|
|
116
115
|
}
|
|
117
|
-
async
|
|
118
|
-
const
|
|
119
|
-
const qualifiedUserEntries = Object.entries(otrRecipients).map(([domain, otrRecipients]) => {
|
|
116
|
+
async sendFederatedOtrMessage(sendingClientId, recipients, options) {
|
|
117
|
+
const qualifiedUserEntries = Object.entries(recipients).map(([domain, otrRecipients]) => {
|
|
120
118
|
const userEntries = Object.entries(otrRecipients).map(([userId, otrClientMap]) => {
|
|
121
119
|
const clientEntries = Object.entries(otrClientMap).map(([clientId, payload]) => {
|
|
122
120
|
return {
|
|
@@ -144,41 +142,93 @@ class MessageService {
|
|
|
144
142
|
if (options.assetData) {
|
|
145
143
|
protoMessage.blob = options.assetData;
|
|
146
144
|
}
|
|
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
145
|
if (options.reportMissing) {
|
|
153
146
|
protoMessage.reportAll = {};
|
|
154
147
|
}
|
|
155
148
|
else {
|
|
156
149
|
protoMessage.ignoreAll = {};
|
|
157
150
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
sendingStatus = await this.apiClient.conversation.api.postOTRMessageV2(conversationId, domain, protoMessage);
|
|
151
|
+
if (!options.conversationId) {
|
|
152
|
+
//TODO implement federated broadcast sending
|
|
153
|
+
throw new Error('Unimplemented federated broadcast');
|
|
162
154
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
155
|
+
const { id, domain } = options.conversationId;
|
|
156
|
+
return this.apiClient.conversation.api.postOTRMessageV2(id, domain, protoMessage);
|
|
157
|
+
}
|
|
158
|
+
async sendOTRMessage(sendingClientId, recipients, options) {
|
|
159
|
+
const message = {
|
|
160
|
+
data: options.assetData ? bazinga64_1.Encoder.toBase64(options.assetData).asString : undefined,
|
|
161
|
+
recipients: cryptography_1.CryptographyService.convertArrayRecipientsToBase64(recipients),
|
|
162
|
+
sender: sendingClientId,
|
|
163
|
+
};
|
|
164
|
+
return !options.conversationId
|
|
165
|
+
? this.apiClient.broadcast.api.postBroadcastMessage(sendingClientId, message, !options.reportMissing)
|
|
166
|
+
: this.apiClient.conversation.api.postOTRMessage(sendingClientId, options.conversationId, message, !options.reportMissing);
|
|
167
|
+
}
|
|
168
|
+
async generateExternalPayload(plainText) {
|
|
169
|
+
const asset = await (0, AssetCryptography_node_1.encryptAsset)({ plainText });
|
|
170
|
+
const { cipherText, keyBytes, sha256 } = asset;
|
|
171
|
+
const messageId = MessageBuilder_1.MessageBuilder.createId();
|
|
172
|
+
const externalMessage = {
|
|
173
|
+
otrKey: new Uint8Array(keyBytes),
|
|
174
|
+
sha256: new Uint8Array(sha256),
|
|
175
|
+
};
|
|
176
|
+
const genericMessage = protocol_messaging_1.GenericMessage.create({
|
|
177
|
+
[__1.GenericMessageType.EXTERNAL]: externalMessage,
|
|
178
|
+
messageId,
|
|
179
|
+
});
|
|
180
|
+
return { text: protocol_messaging_1.GenericMessage.encode(genericMessage).finish(), cipherText };
|
|
181
|
+
}
|
|
182
|
+
shouldSendAsExternal(plainText, preKeyBundles) {
|
|
183
|
+
const EXTERNAL_MESSAGE_THRESHOLD_BYTES = 200 * 1024;
|
|
184
|
+
let clientCount = 0;
|
|
185
|
+
for (const user in preKeyBundles) {
|
|
186
|
+
clientCount += Object.keys(preKeyBundles[user]).length;
|
|
169
187
|
}
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
188
|
+
const messageInBytes = new Uint8Array(plainText).length;
|
|
189
|
+
const estimatedPayloadInBytes = clientCount * messageInBytes;
|
|
190
|
+
return estimatedPayloadInBytes > EXTERNAL_MESSAGE_THRESHOLD_BYTES;
|
|
191
|
+
}
|
|
192
|
+
isClientMismatchError(error) {
|
|
193
|
+
var _a;
|
|
194
|
+
return ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === http_status_codes_1.StatusCodes.PRECONDITION_FAILED;
|
|
195
|
+
}
|
|
196
|
+
async reencryptAfterMismatch(mismatch, recipients, plainText) {
|
|
197
|
+
const deleted = (0, UserClientsUtil_1.flattenUserClients)(mismatch.deleted);
|
|
198
|
+
const missing = (0, UserClientsUtil_1.flattenUserClients)(mismatch.missing);
|
|
199
|
+
// remove deleted clients to the recipients
|
|
200
|
+
deleted.forEach(({ userId, data }) => data.forEach(clientId => delete recipients[userId.id][clientId]));
|
|
201
|
+
if (missing.length) {
|
|
202
|
+
const missingPreKeyBundles = await this.apiClient.user.api.postMultiPreKeyBundles(mismatch.missing);
|
|
203
|
+
const reEncrypted = await this.cryptographyService.encrypt(plainText, missingPreKeyBundles);
|
|
204
|
+
const reEncryptedPayloads = (0, UserClientsUtil_1.flattenUserClients)(reEncrypted);
|
|
205
|
+
// add missing clients to the recipients
|
|
206
|
+
reEncryptedPayloads.forEach(({ data, userId }) => (recipients[userId.id] = Object.assign(Object.assign({}, recipients[userId.id]), data)));
|
|
207
|
+
}
|
|
208
|
+
return recipients;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* 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)
|
|
212
|
+
*
|
|
213
|
+
* @param {ProtobufOTR.QualifiedNewOtrMessage} messageData The initial message that was sent
|
|
214
|
+
* @param {MessageSendingStatus} messageSendingStatus Info about the missing/deleted clients
|
|
215
|
+
* @param {Uint8Array} plainText The text that should be encrypted for the missing clients
|
|
216
|
+
* @return resolves with a new message payload that can be sent
|
|
217
|
+
*/
|
|
218
|
+
async reencryptAfterFederatedMismatch(mismatch, recipients, plainText) {
|
|
219
|
+
const deleted = (0, UserClientsUtil_1.flattenQualifiedUserClients)(mismatch.deleted);
|
|
220
|
+
const missing = (0, UserClientsUtil_1.flattenQualifiedUserClients)(mismatch.missing);
|
|
221
|
+
// remove deleted clients to the recipients
|
|
222
|
+
deleted.forEach(({ userId, data }) => data.forEach(clientId => delete recipients[userId.domain][userId.id][clientId]));
|
|
223
|
+
if (Object.keys(missing).length) {
|
|
224
|
+
const missingPreKeyBundles = await this.apiClient.user.api.postQualifiedMultiPreKeyBundles(mismatch.missing);
|
|
225
|
+
const reEncrypted = await this.cryptographyService.encryptQualified(plainText, missingPreKeyBundles);
|
|
226
|
+
const reEncryptedPayloads = (0, UserClientsUtil_1.flattenQualifiedUserClients)(reEncrypted);
|
|
227
|
+
reEncryptedPayloads.forEach(({ data, userId }) => (recipients[userId.domain][userId.id] = Object.assign(Object.assign({}, recipients[userId.domain][userId.id]), data)));
|
|
178
228
|
}
|
|
179
|
-
return
|
|
229
|
+
return recipients;
|
|
180
230
|
}
|
|
181
|
-
async sendOTRProtobufMessage(sendingClientId, recipients,
|
|
231
|
+
async sendOTRProtobufMessage(sendingClientId, recipients, options) {
|
|
182
232
|
const userEntries = Object.entries(recipients).map(([userId, otrClientMap]) => {
|
|
183
233
|
const clients = Object.entries(otrClientMap).map(([clientId, payload]) => {
|
|
184
234
|
return {
|
|
@@ -201,193 +251,12 @@ class MessageService {
|
|
|
201
251
|
client: long_1.default.fromString(sendingClientId, 16),
|
|
202
252
|
},
|
|
203
253
|
});
|
|
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
|
-
}
|
|
254
|
+
if (options.assetData) {
|
|
255
|
+
protoMessage.blob = options.assetData;
|
|
389
256
|
}
|
|
390
|
-
return
|
|
257
|
+
return !options.conversationId
|
|
258
|
+
? this.apiClient.broadcast.api.postBroadcastProtobufMessage(sendingClientId, protoMessage, !options.reportMissing)
|
|
259
|
+
: this.apiClient.conversation.api.postOTRProtobufMessage(sendingClientId, options.conversationId, protoMessage, !options.reportMissing);
|
|
391
260
|
}
|
|
392
261
|
}
|
|
393
262
|
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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"}
|