@wireapp/core 17.29.0 → 17.31.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.
Files changed (243) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/package.json +8 -8
  3. package/src/main/conversation/ConversationMapper.js +2 -0
  4. package/src/main/conversation/ConversationService.d.ts +5 -2
  5. package/src/main/conversation/ConversationService.js +0 -2
  6. package/src/main/conversation/message/PayloadBundle.d.ts +3 -0
  7. package/src/main/cryptography/GenericMessageMapper.d.ts +0 -1
  8. package/src/main/cryptography/GenericMessageMapper.js +23 -158
  9. package/src/main/Account.js.map +0 -1
  10. package/src/main/Account.test.browser.js +0 -114
  11. package/src/main/Account.test.node.d.ts +0 -1
  12. package/src/main/Account.test.node.js +0 -214
  13. package/src/main/Account.test.node.js.map +0 -1
  14. package/src/main/Account.test.node.ts +0 -236
  15. package/src/main/Account.ts +0 -401
  16. package/src/main/CoreError.js.map +0 -1
  17. package/src/main/CoreError.ts +0 -30
  18. package/src/main/auth/LoginSanitizer.js.map +0 -1
  19. package/src/main/auth/LoginSanitizer.test.node.d.ts +0 -1
  20. package/src/main/auth/LoginSanitizer.test.node.js +0 -56
  21. package/src/main/auth/LoginSanitizer.test.node.js.map +0 -1
  22. package/src/main/auth/LoginSanitizer.test.node.ts +0 -68
  23. package/src/main/auth/LoginSanitizer.ts +0 -44
  24. package/src/main/auth/index.js.map +0 -1
  25. package/src/main/auth/index.ts +0 -20
  26. package/src/main/broadcast/AvailabilityType.js.map +0 -1
  27. package/src/main/broadcast/AvailabilityType.ts +0 -22
  28. package/src/main/broadcast/BroadcastService.js.map +0 -1
  29. package/src/main/broadcast/BroadcastService.ts +0 -66
  30. package/src/main/broadcast/index.js.map +0 -1
  31. package/src/main/broadcast/index.ts +0 -21
  32. package/src/main/client/ClientBackendRepository.js.map +0 -1
  33. package/src/main/client/ClientBackendRepository.ts +0 -33
  34. package/src/main/client/ClientDatabaseRepository.js.map +0 -1
  35. package/src/main/client/ClientDatabaseRepository.ts +0 -130
  36. package/src/main/client/ClientInfo.js.map +0 -1
  37. package/src/main/client/ClientInfo.ts +0 -28
  38. package/src/main/client/ClientService.js.map +0 -1
  39. package/src/main/client/ClientService.ts +0 -116
  40. package/src/main/client/index.js.map +0 -1
  41. package/src/main/client/index.ts +0 -23
  42. package/src/main/connection/ConnectionService.js.map +0 -1
  43. package/src/main/connection/ConnectionService.ts +0 -49
  44. package/src/main/connection/index.js.map +0 -1
  45. package/src/main/connection/index.ts +0 -20
  46. package/src/main/conversation/AbortReason.js.map +0 -1
  47. package/src/main/conversation/AbortReason.ts +0 -22
  48. package/src/main/conversation/AssetService.js.map +0 -1
  49. package/src/main/conversation/AssetService.test.node.d.ts +0 -1
  50. package/src/main/conversation/AssetService.test.node.js +0 -61
  51. package/src/main/conversation/AssetService.test.node.js.map +0 -1
  52. package/src/main/conversation/AssetService.test.node.ts +0 -65
  53. package/src/main/conversation/AssetService.ts +0 -60
  54. package/src/main/conversation/AssetTransferState.js.map +0 -1
  55. package/src/main/conversation/AssetTransferState.ts +0 -23
  56. package/src/main/conversation/ClientActionType.js.map +0 -1
  57. package/src/main/conversation/ClientActionType.ts +0 -20
  58. package/src/main/conversation/ConversationMapper.js.map +0 -1
  59. package/src/main/conversation/ConversationMapper.test.node.d.ts +0 -1
  60. package/src/main/conversation/ConversationMapper.test.node.js +0 -111
  61. package/src/main/conversation/ConversationMapper.test.node.js.map +0 -1
  62. package/src/main/conversation/ConversationMapper.test.node.ts +0 -154
  63. package/src/main/conversation/ConversationMapper.ts +0 -54
  64. package/src/main/conversation/ConversationService.js.map +0 -1
  65. package/src/main/conversation/ConversationService.test.node.d.ts +0 -1
  66. package/src/main/conversation/ConversationService.test.node.js +0 -344
  67. package/src/main/conversation/ConversationService.test.node.js.map +0 -1
  68. package/src/main/conversation/ConversationService.test.node.ts +0 -416
  69. package/src/main/conversation/ConversationService.ts +0 -1020
  70. package/src/main/conversation/GenericMessageType.js.map +0 -1
  71. package/src/main/conversation/GenericMessageType.ts +0 -44
  72. package/src/main/conversation/MessageTimer.js.map +0 -1
  73. package/src/main/conversation/MessageTimer.test.node.d.ts +0 -1
  74. package/src/main/conversation/MessageTimer.test.node.js +0 -88
  75. package/src/main/conversation/MessageTimer.test.node.js.map +0 -1
  76. package/src/main/conversation/MessageTimer.test.node.ts +0 -103
  77. package/src/main/conversation/MessageTimer.ts +0 -56
  78. package/src/main/conversation/ReactionType.js.map +0 -1
  79. package/src/main/conversation/ReactionType.ts +0 -23
  80. package/src/main/conversation/content/AssetContent.js.map +0 -1
  81. package/src/main/conversation/content/AssetContent.ts +0 -71
  82. package/src/main/conversation/content/ButtonActionConfirmationContent.js.map +0 -1
  83. package/src/main/conversation/content/ButtonActionConfirmationContent.ts +0 -21
  84. package/src/main/conversation/content/ButtonActionContent.js.map +0 -1
  85. package/src/main/conversation/content/ButtonActionContent.ts +0 -21
  86. package/src/main/conversation/content/CallingContent.js.map +0 -1
  87. package/src/main/conversation/content/CallingContent.ts +0 -20
  88. package/src/main/conversation/content/ClearedContent.js.map +0 -1
  89. package/src/main/conversation/content/ClearedContent.ts +0 -21
  90. package/src/main/conversation/content/ClientActionContent.js.map +0 -1
  91. package/src/main/conversation/content/ClientActionContent.ts +0 -22
  92. package/src/main/conversation/content/ClientAddContent.js.map +0 -1
  93. package/src/main/conversation/content/ClientAddContent.ts +0 -24
  94. package/src/main/conversation/content/ClientRemoveContent.js.map +0 -1
  95. package/src/main/conversation/content/ClientRemoveContent.ts +0 -25
  96. package/src/main/conversation/content/CompositeContent.js.map +0 -1
  97. package/src/main/conversation/content/CompositeContent.ts +0 -21
  98. package/src/main/conversation/content/ConfirmationContent.js.map +0 -1
  99. package/src/main/conversation/content/ConfirmationContent.ts +0 -21
  100. package/src/main/conversation/content/ContentType.js.map +0 -1
  101. package/src/main/conversation/content/ContentType.ts +0 -112
  102. package/src/main/conversation/content/ConversationContent.js.map +0 -1
  103. package/src/main/conversation/content/ConversationContent.ts +0 -71
  104. package/src/main/conversation/content/DeletedContent.js.map +0 -1
  105. package/src/main/conversation/content/DeletedContent.ts +0 -21
  106. package/src/main/conversation/content/EditedTextContent.js.map +0 -1
  107. package/src/main/conversation/content/EditedTextContent.ts +0 -31
  108. package/src/main/conversation/content/FileContent.js.map +0 -1
  109. package/src/main/conversation/content/FileContent.ts +0 -32
  110. package/src/main/conversation/content/HiddenContent.js.map +0 -1
  111. package/src/main/conversation/content/HiddenContent.ts +0 -21
  112. package/src/main/conversation/content/ImageContent.js.map +0 -1
  113. package/src/main/conversation/content/ImageContent.ts +0 -25
  114. package/src/main/conversation/content/KnockContent.js.map +0 -1
  115. package/src/main/conversation/content/KnockContent.ts +0 -21
  116. package/src/main/conversation/content/LinkPreviewContent.js.map +0 -1
  117. package/src/main/conversation/content/LinkPreviewContent.ts +0 -32
  118. package/src/main/conversation/content/LocationContent.js.map +0 -1
  119. package/src/main/conversation/content/LocationContent.ts +0 -29
  120. package/src/main/conversation/content/MentionContent.js.map +0 -1
  121. package/src/main/conversation/content/MentionContent.ts +0 -21
  122. package/src/main/conversation/content/QuoteContent.js.map +0 -1
  123. package/src/main/conversation/content/QuoteContent.ts +0 -29
  124. package/src/main/conversation/content/ReactionContent.js.map +0 -1
  125. package/src/main/conversation/content/ReactionContent.ts +0 -27
  126. package/src/main/conversation/content/TextContent.js.map +0 -1
  127. package/src/main/conversation/content/TextContent.ts +0 -29
  128. package/src/main/conversation/content/TweetContent.js.map +0 -1
  129. package/src/main/conversation/content/TweetContent.ts +0 -21
  130. package/src/main/conversation/content/index.js.map +0 -1
  131. package/src/main/conversation/content/index.ts +0 -49
  132. package/src/main/conversation/index.js.map +0 -1
  133. package/src/main/conversation/index.ts +0 -28
  134. package/src/main/conversation/message/CompositeContentBuilder.js.map +0 -1
  135. package/src/main/conversation/message/CompositeContentBuilder.ts +0 -60
  136. package/src/main/conversation/message/Message.js.map +0 -1
  137. package/src/main/conversation/message/Message.ts +0 -24
  138. package/src/main/conversation/message/MessageBuilder.js.map +0 -1
  139. package/src/main/conversation/message/MessageBuilder.test.browser.js +0 -27
  140. package/src/main/conversation/message/MessageBuilder.ts +0 -488
  141. package/src/main/conversation/message/MessageService.js.map +0 -1
  142. package/src/main/conversation/message/MessageService.test.node.d.ts +0 -1
  143. package/src/main/conversation/message/MessageService.test.node.js +0 -308
  144. package/src/main/conversation/message/MessageService.test.node.js.map +0 -1
  145. package/src/main/conversation/message/MessageService.test.node.ts +0 -398
  146. package/src/main/conversation/message/MessageService.ts +0 -383
  147. package/src/main/conversation/message/MessageToProtoMapper.js.map +0 -1
  148. package/src/main/conversation/message/MessageToProtoMapper.ts +0 -114
  149. package/src/main/conversation/message/OtrMessage.js.map +0 -1
  150. package/src/main/conversation/message/OtrMessage.ts +0 -160
  151. package/src/main/conversation/message/PayloadBundle.js.map +0 -1
  152. package/src/main/conversation/message/PayloadBundle.ts +0 -98
  153. package/src/main/conversation/message/TeamMessage.js.map +0 -1
  154. package/src/main/conversation/message/TeamMessage.ts +0 -72
  155. package/src/main/conversation/message/TextContentBuilder.js.map +0 -1
  156. package/src/main/conversation/message/TextContentBuilder.ts +0 -88
  157. package/src/main/conversation/message/UserClientsUtil.js.map +0 -1
  158. package/src/main/conversation/message/UserClientsUtil.ts +0 -44
  159. package/src/main/conversation/message/UserClientsUtils.test.node.d.ts +0 -1
  160. package/src/main/conversation/message/UserClientsUtils.test.node.js +0 -42
  161. package/src/main/conversation/message/UserClientsUtils.test.node.js.map +0 -1
  162. package/src/main/conversation/message/UserClientsUtils.test.node.ts +0 -44
  163. package/src/main/conversation/message/UserMessage.js.map +0 -1
  164. package/src/main/conversation/message/UserMessage.ts +0 -95
  165. package/src/main/cryptography/AssetCryptography.browser.js.map +0 -1
  166. package/src/main/cryptography/AssetCryptography.browser.ts +0 -76
  167. package/src/main/cryptography/AssetCryptography.node.js.map +0 -1
  168. package/src/main/cryptography/AssetCryptography.node.ts +0 -85
  169. package/src/main/cryptography/CryptographyDatabaseRepository.js.map +0 -1
  170. package/src/main/cryptography/CryptographyDatabaseRepository.ts +0 -44
  171. package/src/main/cryptography/CryptographyService.js.map +0 -1
  172. package/src/main/cryptography/CryptographyService.test.browser.js +0 -195
  173. package/src/main/cryptography/CryptographyService.test.node.d.ts +0 -1
  174. package/src/main/cryptography/CryptographyService.test.node.js +0 -228
  175. package/src/main/cryptography/CryptographyService.test.node.js.map +0 -1
  176. package/src/main/cryptography/CryptographyService.test.node.ts +0 -246
  177. package/src/main/cryptography/CryptographyService.ts +0 -246
  178. package/src/main/cryptography/EncryptedAsset.js.map +0 -1
  179. package/src/main/cryptography/EncryptedAsset.ts +0 -30
  180. package/src/main/cryptography/GenericMessageMapper.js.map +0 -1
  181. package/src/main/cryptography/GenericMessageMapper.ts +0 -364
  182. package/src/main/cryptography/MessageHashService.js.map +0 -1
  183. package/src/main/cryptography/MessageHashService.test.browser.js +0 -176
  184. package/src/main/cryptography/MessageHashService.test.node.d.ts +0 -1
  185. package/src/main/cryptography/MessageHashService.test.node.js +0 -138
  186. package/src/main/cryptography/MessageHashService.test.node.js.map +0 -1
  187. package/src/main/cryptography/MessageHashService.test.node.ts +0 -176
  188. package/src/main/cryptography/MessageHashService.ts +0 -109
  189. package/src/main/cryptography/SessionPayloadBundle.js.map +0 -1
  190. package/src/main/cryptography/SessionPayloadBundle.ts +0 -23
  191. package/src/main/cryptography/index.js.map +0 -1
  192. package/src/main/cryptography/index.ts +0 -23
  193. package/src/main/giphy/GiphyService.js.map +0 -1
  194. package/src/main/giphy/GiphyService.ts +0 -37
  195. package/src/main/giphy/index.js.map +0 -1
  196. package/src/main/giphy/index.ts +0 -20
  197. package/src/main/index.js.map +0 -1
  198. package/src/main/index.test.browser.js +0 -22
  199. package/src/main/index.ts +0 -34
  200. package/src/main/notification/NotificationBackendRepository.js.map +0 -1
  201. package/src/main/notification/NotificationBackendRepository.ts +0 -33
  202. package/src/main/notification/NotificationDatabaseRepository.js.map +0 -1
  203. package/src/main/notification/NotificationDatabaseRepository.ts +0 -74
  204. package/src/main/notification/NotificationService.js.map +0 -1
  205. package/src/main/notification/NotificationService.test.browser.js +0 -179
  206. package/src/main/notification/NotificationService.test.node.d.ts +0 -1
  207. package/src/main/notification/NotificationService.test.node.js +0 -99
  208. package/src/main/notification/NotificationService.test.node.js.map +0 -1
  209. package/src/main/notification/NotificationService.test.node.ts +0 -124
  210. package/src/main/notification/NotificationService.ts +0 -260
  211. package/src/main/notification/index.js.map +0 -1
  212. package/src/main/notification/index.ts +0 -20
  213. package/src/main/self/SelfService.js.map +0 -1
  214. package/src/main/self/SelfService.ts +0 -59
  215. package/src/main/self/index.js.map +0 -1
  216. package/src/main/self/index.ts +0 -20
  217. package/src/main/team/TeamService.js.map +0 -1
  218. package/src/main/team/TeamService.ts +0 -68
  219. package/src/main/team/index.js.map +0 -1
  220. package/src/main/team/index.ts +0 -20
  221. package/src/main/test/CryptographyHelper.js.map +0 -1
  222. package/src/main/test/CryptographyHelper.ts +0 -57
  223. package/src/main/test/PayloadHelper.js.map +0 -1
  224. package/src/main/test/PayloadHelper.ts +0 -60
  225. package/src/main/user/UserMapper.js.map +0 -1
  226. package/src/main/user/UserMapper.test.node.d.ts +0 -1
  227. package/src/main/user/UserMapper.test.node.js +0 -55
  228. package/src/main/user/UserMapper.test.node.js.map +0 -1
  229. package/src/main/user/UserMapper.test.node.ts +0 -63
  230. package/src/main/user/UserMapper.ts +0 -92
  231. package/src/main/user/UserService.js.map +0 -1
  232. package/src/main/user/UserService.test.node.js +0 -141
  233. package/src/main/user/UserService.ts +0 -98
  234. package/src/main/user/index.js.map +0 -1
  235. package/src/main/user/index.ts +0 -20
  236. package/src/main/util/TypePredicateUtil.js.map +0 -1
  237. package/src/main/util/TypePredicateUtil.test.node.d.ts +0 -1
  238. package/src/main/util/TypePredicateUtil.test.node.js +0 -42
  239. package/src/main/util/TypePredicateUtil.test.node.js.map +0 -1
  240. package/src/main/util/TypePredicateUtil.test.node.ts +0 -44
  241. package/src/main/util/TypePredicateUtil.ts +0 -52
  242. package/src/main/util/index.js.map +0 -1
  243. package/src/main/util/index.ts +0 -20
@@ -1,308 +0,0 @@
1
- "use strict";
2
- /*
3
- * Wire
4
- * Copyright (C) 2021 Wire Swiss GmbH
5
- *
6
- * This program is free software: you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation, either version 3 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with this program. If not, see http://www.gnu.org/licenses/.
18
- *
19
- */
20
- var __importDefault = (this && this.__importDefault) || function (mod) {
21
- return (mod && mod.__esModule) ? mod : { "default": mod };
22
- };
23
- Object.defineProperty(exports, "__esModule", { value: true });
24
- const uuidjs_1 = __importDefault(require("uuidjs"));
25
- const http_status_codes_1 = require("http-status-codes");
26
- const api_client_1 = require("@wireapp/api-client");
27
- const protocol_messaging_1 = require("@wireapp/protocol-messaging");
28
- const cryptography_1 = require("../../cryptography");
29
- const MessageService_1 = require("./MessageService");
30
- const PayloadHelper_1 = require("../../test/PayloadHelper");
31
- const baseMessageSendingStatus = {
32
- deleted: {},
33
- missing: {},
34
- failed_to_send: {},
35
- redundant: {},
36
- time: new Date().toISOString(),
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
- };
48
- function generateQualifiedRecipients(users) {
49
- const payload = {};
50
- users.forEach(({ id, domain, clients }) => {
51
- payload[domain] || (payload[domain] = {});
52
- payload[domain][id] = clients;
53
- });
54
- return payload;
55
- }
56
- function generateRecipients(users) {
57
- return users.reduce((acc, { id, clients }) => {
58
- acc[id] = clients;
59
- return acc;
60
- }, {});
61
- }
62
- function fakeEncrypt(_, recipients) {
63
- const encryptedPayload = Object.entries(recipients).reduce((acc, [domain, users]) => {
64
- acc[domain] = Object.entries(users).reduce((userClients, [userId, clients]) => {
65
- userClients[userId] = clients.reduce((payloads, client) => {
66
- payloads[client] = new Uint8Array();
67
- return payloads;
68
- }, {});
69
- return userClients;
70
- }, {});
71
- return acc;
72
- }, {});
73
- return Promise.resolve(encryptedPayload);
74
- }
75
- describe('MessageService', () => {
76
- const apiClient = new api_client_1.APIClient();
77
- const cryptographyService = new cryptography_1.CryptographyService(apiClient, {});
78
- const messageService = new MessageService_1.MessageService(apiClient, cryptographyService);
79
- beforeEach(() => {
80
- spyOn(cryptographyService, 'encryptQualified').and.callFake(fakeEncrypt);
81
- });
82
- describe('sendFederatedMessage', () => {
83
- it('sends a message', async () => {
84
- spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.returnValue(Promise.resolve(baseMessageSendingStatus));
85
- const recipients = generateQualifiedRecipients([user1, user2]);
86
- await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
87
- conversationId: { id: 'convid', domain: '' },
88
- });
89
- expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalled();
90
- });
91
- describe('client mismatch', () => {
92
- it('handles client mismatch internally if no onClientMismatch is given', async () => {
93
- let spyCounter = 0;
94
- const clientMismatch = Object.assign(Object.assign({}, baseMessageSendingStatus), { deleted: { [user1.domain]: { [user1.id]: [user1.clients[0]] } }, missing: { '2.wire.test': { [user2.id]: ['client22'] } } });
95
- spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.callFake(() => {
96
- spyCounter++;
97
- if (spyCounter === 1) {
98
- const error = new Error();
99
- error.response = {
100
- status: http_status_codes_1.StatusCodes.PRECONDITION_FAILED,
101
- data: clientMismatch,
102
- };
103
- return Promise.reject(error);
104
- }
105
- return Promise.resolve(baseMessageSendingStatus);
106
- });
107
- spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
108
- const recipients = generateQualifiedRecipients([user1, user2]);
109
- await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
110
- reportMissing: true,
111
- conversationId: { id: 'convid', domain: '' },
112
- });
113
- expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
114
- });
115
- it('continues message sending if onClientMismatch returns true', async () => {
116
- const onClientMismatch = jasmine.createSpy('onClientMismatch').and.returnValue(true);
117
- const clientMismatch = Object.assign(Object.assign({}, baseMessageSendingStatus), { missing: { '2.wire.test': { [user2.id]: ['client22'] } } });
118
- let spyCounter = 0;
119
- spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.callFake(() => {
120
- spyCounter++;
121
- if (spyCounter === 1) {
122
- const error = new Error();
123
- error.response = {
124
- status: http_status_codes_1.StatusCodes.PRECONDITION_FAILED,
125
- data: clientMismatch,
126
- };
127
- return Promise.reject(error);
128
- }
129
- return Promise.resolve(baseMessageSendingStatus);
130
- });
131
- spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
132
- const recipients = generateQualifiedRecipients([user1, user2]);
133
- await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
134
- reportMissing: true,
135
- onClientMismatch,
136
- conversationId: { id: 'convid', domain: '' },
137
- });
138
- expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(2);
139
- expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
140
- });
141
- it('stops message sending if onClientMismatch returns false', async () => {
142
- const onClientMismatch = jasmine.createSpy('onClientMismatch').and.returnValue(false);
143
- const clientMismatch = Object.assign(Object.assign({}, baseMessageSendingStatus), { missing: { '2.wire.test': { [user2.id]: ['client22'] } } });
144
- spyOn(apiClient.conversation.api, 'postOTRMessageV2').and.callFake(() => {
145
- const error = new Error();
146
- error.response = {
147
- status: http_status_codes_1.StatusCodes.PRECONDITION_FAILED,
148
- data: clientMismatch,
149
- };
150
- return Promise.reject(error);
151
- });
152
- spyOn(apiClient.user.api, 'postQualifiedMultiPreKeyBundles').and.returnValue(Promise.resolve({}));
153
- const recipients = generateQualifiedRecipients([user1, user2]);
154
- await messageService.sendFederatedMessage('senderclientid', recipients, new Uint8Array(), {
155
- reportMissing: true,
156
- onClientMismatch,
157
- conversationId: { id: 'convid', domain: '' },
158
- });
159
- expect(apiClient.conversation.api.postOTRMessageV2).toHaveBeenCalledTimes(1);
160
- expect(onClientMismatch).toHaveBeenCalledWith(clientMismatch);
161
- });
162
- });
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), false);
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), false);
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), false);
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), false);
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 }), false);
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) }), false);
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
- });
307
- });
308
- //# sourceMappingURL=MessageService.test.node.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MessageService.test.node.js","sourceRoot":"","sources":["MessageService.test.node.ts"],"names":[],"mappings":"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"}