@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
|
@@ -24,8 +24,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
24
24
|
const uuidjs_1 = __importDefault(require("uuidjs"));
|
|
25
25
|
const http_status_codes_1 = require("http-status-codes");
|
|
26
26
|
const api_client_1 = require("@wireapp/api-client");
|
|
27
|
+
const protocol_messaging_1 = require("@wireapp/protocol-messaging");
|
|
27
28
|
const cryptography_1 = require("../../cryptography");
|
|
28
29
|
const MessageService_1 = require("./MessageService");
|
|
30
|
+
const PayloadHelper_1 = require("../../test/PayloadHelper");
|
|
29
31
|
const baseMessageSendingStatus = {
|
|
30
32
|
deleted: {},
|
|
31
33
|
missing: {},
|
|
@@ -33,8 +35,16 @@ const baseMessageSendingStatus = {
|
|
|
33
35
|
redundant: {},
|
|
34
36
|
time: new Date().toISOString(),
|
|
35
37
|
};
|
|
36
|
-
const user1 = {
|
|
37
|
-
|
|
38
|
+
const user1 = {
|
|
39
|
+
id: uuidjs_1.default.genV4().toString(),
|
|
40
|
+
domain: '1.wire.test',
|
|
41
|
+
clients: ['client1.1', 'client1.2', 'client1.3', 'client1.4'],
|
|
42
|
+
};
|
|
43
|
+
const user2 = {
|
|
44
|
+
id: uuidjs_1.default.genV4().toString(),
|
|
45
|
+
domain: '2.wire.test',
|
|
46
|
+
clients: ['client2.1', 'client2.2', 'client2.3', 'client2.4'],
|
|
47
|
+
};
|
|
38
48
|
function generateQualifiedRecipients(users) {
|
|
39
49
|
const payload = {};
|
|
40
50
|
users.forEach(({ id, domain, clients }) => {
|
|
@@ -43,6 +53,12 @@ function generateQualifiedRecipients(users) {
|
|
|
43
53
|
});
|
|
44
54
|
return payload;
|
|
45
55
|
}
|
|
56
|
+
function generateRecipients(users) {
|
|
57
|
+
return users.reduce((acc, { id, clients }) => {
|
|
58
|
+
acc[id] = clients;
|
|
59
|
+
return acc;
|
|
60
|
+
}, {});
|
|
61
|
+
}
|
|
46
62
|
function fakeEncrypt(_, recipients) {
|
|
47
63
|
const encryptedPayload = Object.entries(recipients).reduce((acc, [domain, users]) => {
|
|
48
64
|
acc[domain] = Object.entries(users).reduce((userClients, [userId, clients]) => {
|
|
@@ -67,7 +83,9 @@ describe('MessageService', () => {
|
|
|
67
83
|
it('sends a message', async () => {
|
|
68
84
|
spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.returnValue(Promise.resolve(baseMessageSendingStatus));
|
|
69
85
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
70
|
-
await messageService.
|
|
86
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
87
|
+
conversationId: { id: 'convid', domain: '' },
|
|
88
|
+
});
|
|
71
89
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalled();
|
|
72
90
|
});
|
|
73
91
|
describe('client mismatch', () => {
|
|
@@ -88,7 +106,10 @@ describe('MessageService', () => {
|
|
|
88
106
|
});
|
|
89
107
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
90
108
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
91
|
-
await messageService.
|
|
109
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
110
|
+
reportMissing: true,
|
|
111
|
+
conversationId: { id: 'convid', domain: '' },
|
|
112
|
+
});
|
|
92
113
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
|
|
93
114
|
});
|
|
94
115
|
it('continues message sending if onClientMismatch returns true', async () => {
|
|
@@ -109,7 +130,11 @@ describe('MessageService', () => {
|
|
|
109
130
|
});
|
|
110
131
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
111
132
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
112
|
-
await messageService.
|
|
133
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
134
|
+
reportMissing: true,
|
|
135
|
+
onClientMismatch,
|
|
136
|
+
conversationId: { id: 'convid', domain: '' },
|
|
137
|
+
});
|
|
113
138
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
|
|
114
139
|
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
115
140
|
});
|
|
@@ -126,11 +151,158 @@ describe('MessageService', () => {
|
|
|
126
151
|
});
|
|
127
152
|
spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
128
153
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
129
|
-
await messageService.
|
|
154
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
155
|
+
reportMissing: true,
|
|
156
|
+
onClientMismatch,
|
|
157
|
+
conversationId: { id: 'convid', domain: '' },
|
|
158
|
+
});
|
|
130
159
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(1);
|
|
131
160
|
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
132
161
|
});
|
|
133
162
|
});
|
|
134
163
|
});
|
|
164
|
+
describe('sendMessage', () => {
|
|
165
|
+
const generateUsers = (userCount, clientsPerUser) => {
|
|
166
|
+
return Array.from(Array(userCount)).map((_, i) => ({
|
|
167
|
+
id: `user${i}`,
|
|
168
|
+
domain: `${i}.domain`,
|
|
169
|
+
clients: Array.from(Array(clientsPerUser)).map((_, j) => `client${i}${j}`),
|
|
170
|
+
}));
|
|
171
|
+
};
|
|
172
|
+
const clientId = 'sendingClient';
|
|
173
|
+
const conversationId = 'conv1';
|
|
174
|
+
const createMessage = (content) => {
|
|
175
|
+
const customTextMessage = protocol_messaging_1.GenericMessage.create({
|
|
176
|
+
messageId: (0, PayloadHelper_1.getUUID)(),
|
|
177
|
+
text: protocol_messaging_1.Text.create({ content }),
|
|
178
|
+
});
|
|
179
|
+
return protocol_messaging_1.GenericMessage.encode(customTextMessage).finish();
|
|
180
|
+
};
|
|
181
|
+
it('should send regular to conversation', async () => {
|
|
182
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
183
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({}));
|
|
184
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
185
|
+
conversationId,
|
|
186
|
+
});
|
|
187
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(clientId, conversationId, jasmine.any(Object), true);
|
|
188
|
+
});
|
|
189
|
+
it('should send protobuf message to conversation', async () => {
|
|
190
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
191
|
+
spyOn(apiClient.conversation.api, 'postOTRProtobufMessage').and.returnValue(Promise.resolve({}));
|
|
192
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
193
|
+
conversationId,
|
|
194
|
+
sendAsProtobuf: true,
|
|
195
|
+
});
|
|
196
|
+
expect(apiClient.conversation.api.postOTRProtobufMessage).toHaveBeenCalledWith(clientId, conversationId, jasmine.any(Object), true);
|
|
197
|
+
});
|
|
198
|
+
it('should broadcast regular message if no conversationId is given', async () => {
|
|
199
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
200
|
+
spyOn(apiClient.broadcast.api, 'postBroadcastMessage').and.returnValue(Promise.resolve({}));
|
|
201
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message));
|
|
202
|
+
expect(apiClient.broadcast.api.postBroadcastMessage).toHaveBeenCalledWith(clientId, jasmine.any(Object), true);
|
|
203
|
+
});
|
|
204
|
+
it('should broadcast protobuf message if no conversationId is given', async () => {
|
|
205
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
206
|
+
spyOn(apiClient.broadcast.api, 'postBroadcastProtobufMessage').and.returnValue(Promise.resolve({}));
|
|
207
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
208
|
+
sendAsProtobuf: true,
|
|
209
|
+
});
|
|
210
|
+
expect(apiClient.broadcast.api.postBroadcastProtobufMessage).toHaveBeenCalledWith(clientId, jasmine.any(Object), true);
|
|
211
|
+
});
|
|
212
|
+
it('should not send as external if payload small', async () => {
|
|
213
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
214
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({}));
|
|
215
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
216
|
+
conversationId,
|
|
217
|
+
});
|
|
218
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(clientId, conversationId, jasmine.objectContaining({ data: undefined }), true);
|
|
219
|
+
});
|
|
220
|
+
it('should send as external if payload is big', async () => {
|
|
221
|
+
const longMessage = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem';
|
|
222
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({}));
|
|
223
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(30, 10)), createMessage(longMessage), {
|
|
224
|
+
conversationId,
|
|
225
|
+
});
|
|
226
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(clientId, conversationId, jasmine.objectContaining({ data: jasmine.any(String) }), true);
|
|
227
|
+
});
|
|
228
|
+
describe('client mismatch', () => {
|
|
229
|
+
const baseClientMismatch = {
|
|
230
|
+
deleted: {},
|
|
231
|
+
missing: {},
|
|
232
|
+
redundant: {},
|
|
233
|
+
time: new Date().toISOString(),
|
|
234
|
+
};
|
|
235
|
+
it('handles client mismatch internally if no onClientMismatch is given', async () => {
|
|
236
|
+
let spyCounter = 0;
|
|
237
|
+
const clientMismatch = Object.assign(Object.assign({}, baseClientMismatch), { deleted: { [user1.id]: [user1.clients[0]] }, missing: { [user2.id]: ['client22'] } });
|
|
238
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.callFake(() => {
|
|
239
|
+
spyCounter++;
|
|
240
|
+
if (spyCounter === 1) {
|
|
241
|
+
const error = new Error();
|
|
242
|
+
error.response = {
|
|
243
|
+
status: http_status_codes_1.StatusCodes.PRECONDITION_FAILED,
|
|
244
|
+
data: clientMismatch,
|
|
245
|
+
};
|
|
246
|
+
return Promise.reject(error);
|
|
247
|
+
}
|
|
248
|
+
return Promise.resolve(baseClientMismatch);
|
|
249
|
+
});
|
|
250
|
+
spyOn(apiClient.user.api, 'postMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
251
|
+
const recipients = generateRecipients([user1, user2]);
|
|
252
|
+
await messageService.sendMessage('senderclientid', recipients, new Uint8Array(), {
|
|
253
|
+
reportMissing: true,
|
|
254
|
+
conversationId: 'convid',
|
|
255
|
+
});
|
|
256
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledTimes(2);
|
|
257
|
+
});
|
|
258
|
+
it('continues message sending if onClientMismatch returns true', async () => {
|
|
259
|
+
const onClientMismatch = jasmine.createSpy().and.returnValue(Promise.resolve(true));
|
|
260
|
+
const clientMismatch = Object.assign(Object.assign({}, baseClientMismatch), { missing: { [user2.id]: ['client22'] } });
|
|
261
|
+
let spyCounter = 0;
|
|
262
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.callFake(() => {
|
|
263
|
+
spyCounter++;
|
|
264
|
+
if (spyCounter === 1) {
|
|
265
|
+
const error = new Error();
|
|
266
|
+
error.response = {
|
|
267
|
+
status: http_status_codes_1.StatusCodes.PRECONDITION_FAILED,
|
|
268
|
+
data: clientMismatch,
|
|
269
|
+
};
|
|
270
|
+
return Promise.reject(error);
|
|
271
|
+
}
|
|
272
|
+
return Promise.resolve(baseClientMismatch);
|
|
273
|
+
});
|
|
274
|
+
spyOn(apiClient.user.api, 'postMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
275
|
+
const recipients = generateRecipients([user1, user2]);
|
|
276
|
+
await messageService.sendMessage('senderclientid', recipients, new Uint8Array(), {
|
|
277
|
+
reportMissing: true,
|
|
278
|
+
onClientMismatch,
|
|
279
|
+
conversationId: 'convid',
|
|
280
|
+
});
|
|
281
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledTimes(2);
|
|
282
|
+
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
283
|
+
});
|
|
284
|
+
it('stops message sending if onClientMismatch returns false', async () => {
|
|
285
|
+
const onClientMismatch = jasmine.createSpy().and.returnValue(Promise.resolve(false));
|
|
286
|
+
const clientMismatch = Object.assign(Object.assign({}, baseMessageSendingStatus), { missing: { [user2.id]: ['client22'] } });
|
|
287
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.callFake(() => {
|
|
288
|
+
const error = new Error();
|
|
289
|
+
error.response = {
|
|
290
|
+
status: http_status_codes_1.StatusCodes.PRECONDITION_FAILED,
|
|
291
|
+
data: clientMismatch,
|
|
292
|
+
};
|
|
293
|
+
return Promise.reject(error);
|
|
294
|
+
});
|
|
295
|
+
spyOn(apiClient.user.api, 'postMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
296
|
+
const recipients = generateRecipients([user1, user2]);
|
|
297
|
+
await messageService.sendMessage('senderclientid', recipients, new Uint8Array(), {
|
|
298
|
+
reportMissing: true,
|
|
299
|
+
onClientMismatch,
|
|
300
|
+
conversationId: 'convid',
|
|
301
|
+
});
|
|
302
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledTimes(1);
|
|
303
|
+
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
});
|
|
135
307
|
});
|
|
136
308
|
//# sourceMappingURL=MessageService.test.node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageService.test.node.js","sourceRoot":"","sources":["MessageService.test.node.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MessageService.test.node.js","sourceRoot":"","sources":["MessageService.test.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,13 +21,17 @@ import UUID from 'uuidjs';
|
|
|
21
21
|
import {StatusCodes} from 'http-status-codes';
|
|
22
22
|
import {APIClient} from '@wireapp/api-client';
|
|
23
23
|
import {
|
|
24
|
+
ClientMismatch,
|
|
24
25
|
MessageSendingStatus,
|
|
25
26
|
OTRRecipients,
|
|
26
27
|
QualifiedOTRRecipients,
|
|
27
28
|
QualifiedUserClients,
|
|
29
|
+
UserClients,
|
|
28
30
|
} from '@wireapp/api-client/src/conversation';
|
|
31
|
+
import {GenericMessage, Text} from '@wireapp/protocol-messaging';
|
|
29
32
|
import {CryptographyService} from '../../cryptography';
|
|
30
33
|
import {MessageService} from './MessageService';
|
|
34
|
+
import {getUUID} from '../../test/PayloadHelper';
|
|
31
35
|
|
|
32
36
|
const baseMessageSendingStatus: MessageSendingStatus = {
|
|
33
37
|
deleted: {},
|
|
@@ -38,8 +42,16 @@ const baseMessageSendingStatus: MessageSendingStatus = {
|
|
|
38
42
|
};
|
|
39
43
|
|
|
40
44
|
type TestUser = {id: string; domain: string; clients: string[]};
|
|
41
|
-
const user1: TestUser = {
|
|
42
|
-
|
|
45
|
+
const user1: TestUser = {
|
|
46
|
+
id: UUID.genV4().toString(),
|
|
47
|
+
domain: '1.wire.test',
|
|
48
|
+
clients: ['client1.1', 'client1.2', 'client1.3', 'client1.4'],
|
|
49
|
+
};
|
|
50
|
+
const user2: TestUser = {
|
|
51
|
+
id: UUID.genV4().toString(),
|
|
52
|
+
domain: '2.wire.test',
|
|
53
|
+
clients: ['client2.1', 'client2.2', 'client2.3', 'client2.4'],
|
|
54
|
+
};
|
|
43
55
|
|
|
44
56
|
function generateQualifiedRecipients(users: TestUser[]): QualifiedUserClients {
|
|
45
57
|
const payload: QualifiedUserClients = {};
|
|
@@ -50,6 +62,13 @@ function generateQualifiedRecipients(users: TestUser[]): QualifiedUserClients {
|
|
|
50
62
|
return payload;
|
|
51
63
|
}
|
|
52
64
|
|
|
65
|
+
function generateRecipients(users: TestUser[]): UserClients {
|
|
66
|
+
return users.reduce((acc, {id, clients}) => {
|
|
67
|
+
acc[id] = clients;
|
|
68
|
+
return acc;
|
|
69
|
+
}, {} as UserClients);
|
|
70
|
+
}
|
|
71
|
+
|
|
53
72
|
function fakeEncrypt(_: unknown, recipients: QualifiedUserClients): Promise<QualifiedOTRRecipients> {
|
|
54
73
|
const encryptedPayload = Object.entries(recipients).reduce((acc, [domain, users]) => {
|
|
55
74
|
acc[domain] = Object.entries(users).reduce((userClients, [userId, clients]) => {
|
|
@@ -78,12 +97,9 @@ describe('MessageService', () => {
|
|
|
78
97
|
spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.returnValue(Promise.resolve(baseMessageSendingStatus));
|
|
79
98
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
80
99
|
|
|
81
|
-
await messageService.
|
|
82
|
-
'
|
|
83
|
-
|
|
84
|
-
recipients,
|
|
85
|
-
new Uint8Array(),
|
|
86
|
-
);
|
|
100
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
101
|
+
conversationId: {id: 'convid', domain: ''},
|
|
102
|
+
});
|
|
87
103
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalled();
|
|
88
104
|
});
|
|
89
105
|
|
|
@@ -111,13 +127,10 @@ describe('MessageService', () => {
|
|
|
111
127
|
|
|
112
128
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
113
129
|
|
|
114
|
-
await messageService.
|
|
115
|
-
|
|
116
|
-
{id: 'convid', domain: ''},
|
|
117
|
-
|
|
118
|
-
new Uint8Array(),
|
|
119
|
-
{reportMissing: true},
|
|
120
|
-
);
|
|
130
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
131
|
+
reportMissing: true,
|
|
132
|
+
conversationId: {id: 'convid', domain: ''},
|
|
133
|
+
});
|
|
121
134
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
|
|
122
135
|
});
|
|
123
136
|
|
|
@@ -141,13 +154,11 @@ describe('MessageService', () => {
|
|
|
141
154
|
|
|
142
155
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
143
156
|
|
|
144
|
-
await messageService.
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
{reportMissing: true, onClientMismatch},
|
|
150
|
-
);
|
|
157
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
158
|
+
reportMissing: true,
|
|
159
|
+
onClientMismatch,
|
|
160
|
+
conversationId: {id: 'convid', domain: ''},
|
|
161
|
+
});
|
|
151
162
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
|
|
152
163
|
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
153
164
|
});
|
|
@@ -167,16 +178,221 @@ describe('MessageService', () => {
|
|
|
167
178
|
|
|
168
179
|
const recipients = generateQualifiedRecipients([user1, user2]);
|
|
169
180
|
|
|
170
|
-
await messageService.
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
{reportMissing: true, onClientMismatch},
|
|
176
|
-
);
|
|
181
|
+
await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
|
|
182
|
+
reportMissing: true,
|
|
183
|
+
onClientMismatch,
|
|
184
|
+
conversationId: {id: 'convid', domain: ''},
|
|
185
|
+
});
|
|
177
186
|
expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(1);
|
|
178
187
|
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
179
188
|
});
|
|
180
189
|
});
|
|
181
190
|
});
|
|
191
|
+
|
|
192
|
+
describe('sendMessage', () => {
|
|
193
|
+
const generateUsers = (userCount: number, clientsPerUser: number): TestUser[] => {
|
|
194
|
+
return Array.from(Array(userCount)).map<TestUser>((_, i) => ({
|
|
195
|
+
id: `user${i}`,
|
|
196
|
+
domain: `${i}.domain`,
|
|
197
|
+
clients: Array.from(Array(clientsPerUser)).map((_, j) => `client${i}${j}`),
|
|
198
|
+
}));
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
const clientId = 'sendingClient';
|
|
202
|
+
const conversationId = 'conv1';
|
|
203
|
+
const createMessage = (content: string) => {
|
|
204
|
+
const customTextMessage = GenericMessage.create({
|
|
205
|
+
messageId: getUUID(),
|
|
206
|
+
text: Text.create({content}),
|
|
207
|
+
});
|
|
208
|
+
|
|
209
|
+
return GenericMessage.encode(customTextMessage).finish();
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
it('should send regular to conversation', async () => {
|
|
213
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
214
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({} as ClientMismatch));
|
|
215
|
+
|
|
216
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
217
|
+
conversationId,
|
|
218
|
+
});
|
|
219
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(
|
|
220
|
+
clientId,
|
|
221
|
+
conversationId,
|
|
222
|
+
jasmine.any(Object),
|
|
223
|
+
true,
|
|
224
|
+
);
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
it('should send protobuf message to conversation', async () => {
|
|
228
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
229
|
+
spyOn(apiClient.conversation.api, 'postOTRProtobufMessage').and.returnValue(
|
|
230
|
+
Promise.resolve({} as ClientMismatch),
|
|
231
|
+
);
|
|
232
|
+
|
|
233
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
234
|
+
conversationId,
|
|
235
|
+
sendAsProtobuf: true,
|
|
236
|
+
});
|
|
237
|
+
expect(apiClient.conversation.api.postOTRProtobufMessage).toHaveBeenCalledWith(
|
|
238
|
+
clientId,
|
|
239
|
+
conversationId,
|
|
240
|
+
jasmine.any(Object),
|
|
241
|
+
true,
|
|
242
|
+
);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it('should broadcast regular message if no conversationId is given', async () => {
|
|
246
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
247
|
+
spyOn(apiClient.broadcast.api, 'postBroadcastMessage').and.returnValue(Promise.resolve({} as ClientMismatch));
|
|
248
|
+
|
|
249
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message));
|
|
250
|
+
expect(apiClient.broadcast.api.postBroadcastMessage).toHaveBeenCalledWith(clientId, jasmine.any(Object), true);
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
it('should broadcast protobuf message if no conversationId is given', async () => {
|
|
254
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
255
|
+
spyOn(apiClient.broadcast.api, 'postBroadcastProtobufMessage').and.returnValue(
|
|
256
|
+
Promise.resolve({} as ClientMismatch),
|
|
257
|
+
);
|
|
258
|
+
|
|
259
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
260
|
+
sendAsProtobuf: true,
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
expect(apiClient.broadcast.api.postBroadcastProtobufMessage).toHaveBeenCalledWith(
|
|
264
|
+
clientId,
|
|
265
|
+
jasmine.any(Object),
|
|
266
|
+
true,
|
|
267
|
+
);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
it('should not send as external if payload small', async () => {
|
|
271
|
+
const message = 'Lorem ipsum dolor sit amet';
|
|
272
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({} as ClientMismatch));
|
|
273
|
+
|
|
274
|
+
await messageService.sendMessage(clientId, generateRecipients(generateUsers(3, 3)), createMessage(message), {
|
|
275
|
+
conversationId,
|
|
276
|
+
});
|
|
277
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(
|
|
278
|
+
clientId,
|
|
279
|
+
conversationId,
|
|
280
|
+
jasmine.objectContaining({data: undefined}),
|
|
281
|
+
true,
|
|
282
|
+
);
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
it('should send as external if payload is big', async () => {
|
|
286
|
+
const longMessage =
|
|
287
|
+
'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Duis autem';
|
|
288
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.returnValue(Promise.resolve({} as ClientMismatch));
|
|
289
|
+
|
|
290
|
+
await messageService.sendMessage(
|
|
291
|
+
clientId,
|
|
292
|
+
generateRecipients(generateUsers(30, 10)),
|
|
293
|
+
createMessage(longMessage),
|
|
294
|
+
{
|
|
295
|
+
conversationId,
|
|
296
|
+
},
|
|
297
|
+
);
|
|
298
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledWith(
|
|
299
|
+
clientId,
|
|
300
|
+
conversationId,
|
|
301
|
+
jasmine.objectContaining({data: jasmine.any(String)}),
|
|
302
|
+
true,
|
|
303
|
+
);
|
|
304
|
+
});
|
|
305
|
+
|
|
306
|
+
describe('client mismatch', () => {
|
|
307
|
+
const baseClientMismatch: ClientMismatch = {
|
|
308
|
+
deleted: {},
|
|
309
|
+
missing: {},
|
|
310
|
+
redundant: {},
|
|
311
|
+
time: new Date().toISOString(),
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
it('handles client mismatch internally if no onClientMismatch is given', async () => {
|
|
315
|
+
let spyCounter = 0;
|
|
316
|
+
const clientMismatch = {
|
|
317
|
+
...baseClientMismatch,
|
|
318
|
+
deleted: {[user1.id]: [user1.clients[0]]},
|
|
319
|
+
missing: {[user2.id]: ['client22']},
|
|
320
|
+
};
|
|
321
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.callFake(() => {
|
|
322
|
+
spyCounter++;
|
|
323
|
+
if (spyCounter === 1) {
|
|
324
|
+
const error = new Error();
|
|
325
|
+
(error as any).response = {
|
|
326
|
+
status: StatusCodes.PRECONDITION_FAILED,
|
|
327
|
+
data: clientMismatch,
|
|
328
|
+
};
|
|
329
|
+
return Promise.reject(error);
|
|
330
|
+
}
|
|
331
|
+
return Promise.resolve(baseClientMismatch);
|
|
332
|
+
});
|
|
333
|
+
spyOn(apiClient.user.api, 'postMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
334
|
+
|
|
335
|
+
const recipients = generateRecipients([user1, user2]);
|
|
336
|
+
|
|
337
|
+
await messageService.sendMessage('senderclientid', recipients, new Uint8Array(), {
|
|
338
|
+
reportMissing: true,
|
|
339
|
+
conversationId: 'convid',
|
|
340
|
+
});
|
|
341
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledTimes(2);
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
it('continues message sending if onClientMismatch returns true', async () => {
|
|
345
|
+
const onClientMismatch = jasmine.createSpy().and.returnValue(Promise.resolve(true));
|
|
346
|
+
const clientMismatch = {...baseClientMismatch, missing: {[user2.id]: ['client22']}};
|
|
347
|
+
let spyCounter = 0;
|
|
348
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.callFake(() => {
|
|
349
|
+
spyCounter++;
|
|
350
|
+
if (spyCounter === 1) {
|
|
351
|
+
const error = new Error();
|
|
352
|
+
(error as any).response = {
|
|
353
|
+
status: StatusCodes.PRECONDITION_FAILED,
|
|
354
|
+
data: clientMismatch,
|
|
355
|
+
};
|
|
356
|
+
return Promise.reject(error);
|
|
357
|
+
}
|
|
358
|
+
return Promise.resolve(baseClientMismatch);
|
|
359
|
+
});
|
|
360
|
+
spyOn(apiClient.user.api, 'postMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
361
|
+
|
|
362
|
+
const recipients = generateRecipients([user1, user2]);
|
|
363
|
+
|
|
364
|
+
await messageService.sendMessage('senderclientid', recipients, new Uint8Array(), {
|
|
365
|
+
reportMissing: true,
|
|
366
|
+
onClientMismatch,
|
|
367
|
+
conversationId: 'convid',
|
|
368
|
+
});
|
|
369
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledTimes(2);
|
|
370
|
+
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
it('stops message sending if onClientMismatch returns false', async () => {
|
|
374
|
+
const onClientMismatch = jasmine.createSpy().and.returnValue(Promise.resolve(false));
|
|
375
|
+
const clientMismatch = {...baseMessageSendingStatus, missing: {[user2.id]: ['client22']}};
|
|
376
|
+
spyOn(apiClient.conversation.api, 'postOTRMessage').and.callFake(() => {
|
|
377
|
+
const error = new Error();
|
|
378
|
+
(error as any).response = {
|
|
379
|
+
status: StatusCodes.PRECONDITION_FAILED,
|
|
380
|
+
data: clientMismatch,
|
|
381
|
+
};
|
|
382
|
+
return Promise.reject(error);
|
|
383
|
+
});
|
|
384
|
+
spyOn(apiClient.user.api, 'postMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
|
|
385
|
+
|
|
386
|
+
const recipients = generateRecipients([user1, user2]);
|
|
387
|
+
|
|
388
|
+
await messageService.sendMessage('senderclientid', recipients, new Uint8Array(), {
|
|
389
|
+
reportMissing: true,
|
|
390
|
+
onClientMismatch,
|
|
391
|
+
conversationId: 'convid',
|
|
392
|
+
});
|
|
393
|
+
expect(apiClient.conversation.api.postOTRMessage).toHaveBeenCalledTimes(1);
|
|
394
|
+
expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
});
|
|
182
398
|
});
|