@wireapp/core 38.0.0-beta.5 → 38.0.0-beta.7

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.
@@ -1,9 +1,16 @@
1
1
  import { QualifiedId } from '@wireapp/api-client/lib/user';
2
- import logdown from 'logdown';
3
2
  import { DecryptionError } from '../../../../errors/DecryptionError';
4
- declare const generateDecryptionError: (senderInfo: {
3
+ export declare const ProteusErrors: {
4
+ readonly InvalidMessage: 201;
5
+ readonly RemoteIdentityChanged: 204;
6
+ readonly InvalidSignature: 207;
7
+ readonly DuplicateMessage: 209;
8
+ readonly Unknown: 999;
9
+ };
10
+ type SenderInfo = {
5
11
  clientId: string;
6
12
  userId: QualifiedId;
7
- }, error: any, logger: logdown.Logger) => DecryptionError;
8
- export { generateDecryptionError };
13
+ };
14
+ export declare const generateDecryptionError: (senderInfo: SenderInfo, error: any) => DecryptionError;
15
+ export {};
9
16
  //# sourceMappingURL=DecryptionErrorGenerator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DecryptionErrorGenerator.d.ts","sourceRoot":"","sources":["../../../../../src/messagingProtocols/proteus/ProteusService/DecryptionErrorGenerator/DecryptionErrorGenerator.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAC;AACzD,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AAKnE,QAAA,MAAM,uBAAuB,eACf;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAC,SAC5C,GAAG,UACF,QAAQ,MAAM,KACrB,eA6BF,CAAC;AAEF,OAAO,EAAC,uBAAuB,EAAC,CAAC"}
1
+ {"version":3,"file":"DecryptionErrorGenerator.d.ts","sourceRoot":"","sources":["../../../../../src/messagingProtocols/proteus/ProteusService/DecryptionErrorGenerator/DecryptionErrorGenerator.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAC,WAAW,EAAC,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AAEnE,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAwCX,KAAK,UAAU,GAAG;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAC,CAAC;AAC1D,eAAO,MAAM,uBAAuB,eAAgB,UAAU,SAAS,GAAG,KAAG,eAO5E,CAAC"}
@@ -18,32 +18,47 @@
18
18
  *
19
19
  */
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.generateDecryptionError = void 0;
21
+ exports.generateDecryptionError = exports.ProteusErrors = void 0;
22
22
  const DecryptionError_1 = require("../../../../errors/DecryptionError");
23
- const hasErrorCode = (error) => error && error.code;
24
- const generateDecryptionError = (senderInfo, error, logger) => {
23
+ exports.ProteusErrors = {
24
+ InvalidMessage: 201,
25
+ RemoteIdentityChanged: 204,
26
+ InvalidSignature: 207,
27
+ DuplicateMessage: 209,
28
+ Unknown: 999,
29
+ };
30
+ const CoreCryptoErrorMapping = {
31
+ InvalidMessage: exports.ProteusErrors.InvalidMessage,
32
+ RemoteIdentityChanged: exports.ProteusErrors.RemoteIdentityChanged,
33
+ InvalidSignature: exports.ProteusErrors.InvalidSignature,
34
+ DuplicateMessage: exports.ProteusErrors.DuplicateMessage,
35
+ Unknown: exports.ProteusErrors.Unknown,
36
+ };
37
+ const mapCoreCryptoError = (error) => {
25
38
  var _a;
26
- const errorCode = hasErrorCode(error) ? (_a = error.code) !== null && _a !== void 0 ? _a : 999 : 999;
27
- let message = 'Unknown decryption error';
28
- const { clientId: remoteClientId, userId } = senderInfo;
29
- const { id: remoteUserId } = userId;
30
- const isDuplicateMessage = false; // TODO when coreCrypto returns ganular errors
31
- const isOutdatedMessage = false; // TODO when coreCrypto returns ganular errors
32
- // We don't need to show these message errors to the user
33
- if (isDuplicateMessage || isOutdatedMessage) {
34
- message = `Message from user ID "${remoteUserId}" will not be handled because it is outdated or a duplicate.`;
35
- }
36
- const isInvalidMessage = false; // TODO when coreCrypto returns ganular errors
37
- const isInvalidSignature = false; // TODO when coreCrypto returns ganular errors
38
- const isRemoteIdentityChanged = false; // TODO when coreCrypto returns ganular errors
39
- // Session is broken, let's see what's really causing it...
40
- if (isInvalidMessage || isInvalidSignature) {
41
- message = `Session with user '${remoteUserId}' (${remoteClientId}) is broken.\nReset the session for possible fix.`;
42
- }
43
- else if (isRemoteIdentityChanged) {
44
- message = `Remote identity of client '${remoteClientId}' from user '${remoteUserId}' changed`;
39
+ return (_a = CoreCryptoErrorMapping[error.message]) !== null && _a !== void 0 ? _a : exports.ProteusErrors.Unknown;
40
+ };
41
+ const getErrorMessage = (code, userId, clientId, error) => {
42
+ const sender = `${userId.id} (${clientId})`;
43
+ switch (code) {
44
+ case exports.ProteusErrors.InvalidMessage:
45
+ return `Invalid message from ${sender}`;
46
+ case exports.ProteusErrors.InvalidSignature:
47
+ return `Invalid signature from ${sender}`;
48
+ case exports.ProteusErrors.RemoteIdentityChanged:
49
+ return `Remote identity of ${sender} has changed`;
50
+ case exports.ProteusErrors.DuplicateMessage:
51
+ return `Message from ${sender} was decrypted twice`;
52
+ case exports.ProteusErrors.Unknown:
53
+ return `Unknown decryption error from ${sender} (${error.message})`;
54
+ default:
55
+ return `Unhandled error code "${code}" from ${sender} (${error.message})`;
45
56
  }
46
- logger.warn(`Failed to decrypt event from client '${remoteClientId}' of user '${remoteUserId}'.\nError Code: '${errorCode}'\nError Message: ${error.message}`, error);
47
- return new DecryptionError_1.DecryptionError(message, errorCode);
57
+ };
58
+ const generateDecryptionError = (senderInfo, error) => {
59
+ const { clientId: remoteClientId, userId } = senderInfo;
60
+ const code = mapCoreCryptoError(error);
61
+ const message = getErrorMessage(code, userId, remoteClientId, error);
62
+ return new DecryptionError_1.DecryptionError(message, code);
48
63
  };
49
64
  exports.generateDecryptionError = generateDecryptionError;
@@ -20,14 +20,36 @@
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  const DecryptionErrorGenerator_1 = require("./DecryptionErrorGenerator");
22
22
  const DecryptionError_1 = require("../../../../errors/DecryptionError");
23
- const logger = {
24
- warn: jest.fn(),
25
- };
26
23
  const basePayload = { userId: { id: 'user1', domain: 'domain' }, clientId: 'client1' };
27
24
  describe('generateDecryptionError', () => {
28
25
  it('returns a ProteusError.DecryptError', () => {
29
- const error = (0, DecryptionErrorGenerator_1.generateDecryptionError)(basePayload, new Error(), logger);
26
+ const error = (0, DecryptionErrorGenerator_1.generateDecryptionError)(basePayload, new Error());
30
27
  expect(error).toBeInstanceOf(DecryptionError_1.DecryptionError);
31
- expect(error.message).toBe('Unknown decryption error');
28
+ expect(error.message).toBe('Unknown decryption error from user1 (client1)');
29
+ expect(error.code).toBe(DecryptionErrorGenerator_1.ProteusErrors.Unknown);
30
+ });
31
+ it('handles remote identity changed', () => {
32
+ const error = (0, DecryptionErrorGenerator_1.generateDecryptionError)(basePayload, new Error('RemoteIdentityChanged'));
33
+ expect(error).toBeInstanceOf(DecryptionError_1.DecryptionError);
34
+ expect(error.message).toBe('Remote identity of user1 (client1) has changed');
35
+ expect(error.code).toBe(DecryptionErrorGenerator_1.ProteusErrors.RemoteIdentityChanged);
36
+ });
37
+ it('handles invalid message', () => {
38
+ const error = (0, DecryptionErrorGenerator_1.generateDecryptionError)(basePayload, new Error('InvalidMessage'));
39
+ expect(error).toBeInstanceOf(DecryptionError_1.DecryptionError);
40
+ expect(error.message).toBe('Invalid message from user1 (client1)');
41
+ expect(error.code).toBe(DecryptionErrorGenerator_1.ProteusErrors.InvalidMessage);
42
+ });
43
+ it('handles duplicated message', () => {
44
+ const error = (0, DecryptionErrorGenerator_1.generateDecryptionError)(basePayload, new Error('DuplicateMessage'));
45
+ expect(error).toBeInstanceOf(DecryptionError_1.DecryptionError);
46
+ expect(error.message).toBe('Invalid message from user1 (client1)');
47
+ expect(error.code).toBe(DecryptionErrorGenerator_1.ProteusErrors.DuplicateMessage);
48
+ });
49
+ it('handles invalid signature', () => {
50
+ const error = (0, DecryptionErrorGenerator_1.generateDecryptionError)(basePayload, new Error('InvalidSignature'));
51
+ expect(error).toBeInstanceOf(DecryptionError_1.DecryptionError);
52
+ expect(error.message).toBe('Invalid signature from user1 (client1)');
53
+ expect(error.code).toBe(DecryptionErrorGenerator_1.ProteusErrors.InvalidSignature);
32
54
  });
33
55
  });
@@ -162,7 +162,7 @@ class ProteusService {
162
162
  return decryptedMessage;
163
163
  }
164
164
  catch (error) {
165
- throw (0, DecryptionErrorGenerator_1.generateDecryptionError)({ userId, clientId }, error, this.logger);
165
+ throw (0, DecryptionErrorGenerator_1.generateDecryptionError)({ userId, clientId }, error);
166
166
  }
167
167
  }
168
168
  async encrypt(plainText, recipients, domain = '') {
@@ -1,4 +1,5 @@
1
1
  export * from './ProteusService';
2
2
  export * from '../Utility';
3
3
  export * from './ProteusService.types';
4
+ export { ProteusErrors } from './DecryptionErrorGenerator';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/messagingProtocols/proteus/ProteusService/index.ts"],"names":[],"mappings":"AAmBA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/messagingProtocols/proteus/ProteusService/index.ts"],"names":[],"mappings":"AAmBA,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,wBAAwB,CAAC;AACvC,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC"}
@@ -32,6 +32,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
32
32
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
33
33
  };
34
34
  Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.ProteusErrors = void 0;
35
36
  __exportStar(require("./ProteusService"), exports);
36
37
  __exportStar(require("../Utility"), exports);
37
38
  __exportStar(require("./ProteusService.types"), exports);
39
+ var DecryptionErrorGenerator_1 = require("./DecryptionErrorGenerator");
40
+ Object.defineProperty(exports, "ProteusErrors", { enumerable: true, get: function () { return DecryptionErrorGenerator_1.ProteusErrors; } });
package/package.json CHANGED
@@ -59,6 +59,6 @@
59
59
  "test:coverage": "jest --coverage",
60
60
  "watch": "tsc --watch"
61
61
  },
62
- "version": "38.0.0-beta.5",
62
+ "version": "38.0.0-beta.7",
63
63
  "gitHead": "5339f01fe01ef0871da8c8bc8662fbe9e604754a"
64
64
  }