@villedemontreal/jwt-validator 5.7.11 → 5.8.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.
@@ -36,7 +36,7 @@ class JwtValidator {
36
36
  const key = await this.getJwtPublicKey(payload);
37
37
  this.validateJwtCreationTimestamp(payload, key);
38
38
  this.validateJwtExpirationTimestamp(payload, key);
39
- return this.verifyJwt(token, key.publicKey);
39
+ return this.verifyJwt(token, key);
40
40
  }
41
41
  parseJwt(token) {
42
42
  const payload = jwt.decode(token);
@@ -52,7 +52,7 @@ class JwtValidator {
52
52
  verifyJwt(token, publicKey) {
53
53
  let payload;
54
54
  try {
55
- payload = jwt.verify(token, publicKey);
55
+ payload = jwt.verify(token, publicKey.parsedPublicKey ?? publicKey.publicKey);
56
56
  }
57
57
  catch (err) {
58
58
  throw (0, customError_1.createInvalidJwtError)({
@@ -1 +1 @@
1
- {"version":3,"file":"jwtValidator.js","sourceRoot":"","sources":["../../src/jwtValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jwtValidator.js","sourceRoot":"","sources":["../../src/jwtValidator.ts"],"names":[],"mappings":"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"}
@@ -4,4 +4,4 @@ import * as express from 'express';
4
4
  *
5
5
  * @param {boolean} mandatoryValidation Defines if the JWT is mandatory. Defaults to true.
6
6
  */
7
- export declare const jwtValidationMiddleware: (mandatoryValidation?: boolean) => (req: express.Request, res: express.Response, next: express.NextFunction) => Promise<void>;
7
+ export declare const jwtValidationMiddleware: (mandatoryValidation?: boolean) => (req: express.Request, res: express.Response, next: express.NextFunction) => void;
@@ -10,14 +10,23 @@ const jwtValidator_1 = require("../jwtValidator");
10
10
  * @param {boolean} mandatoryValidation Defines if the JWT is mandatory. Defaults to true.
11
11
  */
12
12
  const jwtValidationMiddleware = (mandatoryValidation = true) => {
13
- return async (req, res, next) => {
13
+ return (req, res, next) => {
14
14
  try {
15
15
  const authHeader = req.get(http_header_fields_typed_1.default.AUTHORIZATION);
16
16
  if (mandatoryValidation || authHeader) {
17
- req[constants_1.constants.requestExtraVariables.JWT] =
18
- await jwtValidator_1.jwtValidator.verifyAuthorizationHeader(authHeader);
17
+ jwtValidator_1.jwtValidator
18
+ .verifyAuthorizationHeader(authHeader)
19
+ .then((jwt) => {
20
+ req[constants_1.constants.requestExtraVariables.JWT] = jwt;
21
+ next();
22
+ })
23
+ .catch((err) => {
24
+ next(err);
25
+ });
26
+ }
27
+ else {
28
+ next();
19
29
  }
20
- next();
21
30
  }
22
31
  catch (err) {
23
32
  next(err);
@@ -1 +1 @@
1
- {"version":3,"file":"jwtMiddleware.js","sourceRoot":"","sources":["../../../src/middleware/jwtMiddleware.ts"],"names":[],"mappings":";;;AACA,uEAA6D;AAC7D,mDAAgD;AAChD,kDAA+C;AAE/C;;;;GAIG;AACI,MAAM,uBAAuB,GAE8D,CAChG,mBAAmB,GAAG,IAAI,EAC1B,EAAE;IACF,OAAO,KAAK,EACV,GAAoB,EACpB,GAAqB,EACrB,IAA0B,EACX,EAAE;QACjB,IAAI;YACF,MAAM,UAAU,GAAW,GAAG,CAAC,GAAG,CAAC,kCAAqB,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,mBAAmB,IAAI,UAAU,EAAE;gBACpC,GAAW,CAAC,qBAAS,CAAC,qBAAqB,CAAC,GAAG,CAAC;oBAC/C,MAAM,2BAAY,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC;aAC5D;YACD,IAAI,EAAE,CAAC;SACR;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,CAAC;SACX;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,uBAAuB,2BAqBlC"}
1
+ {"version":3,"file":"jwtMiddleware.js","sourceRoot":"","sources":["../../../src/middleware/jwtMiddleware.ts"],"names":[],"mappings":";;;AACA,uEAA6D;AAC7D,mDAAgD;AAChD,kDAA+C;AAE/C;;;;GAIG;AACI,MAAM,uBAAuB,GAEqD,CACvF,mBAAmB,GAAG,IAAI,EAC1B,EAAE;IACF,OAAO,CAAC,GAAoB,EAAE,GAAqB,EAAE,IAA0B,EAAQ,EAAE;QACvF,IAAI;YACF,MAAM,UAAU,GAAW,GAAG,CAAC,GAAG,CAAC,kCAAqB,CAAC,aAAa,CAAC,CAAC;YACxE,IAAI,mBAAmB,IAAI,UAAU,EAAE;gBACrC,2BAAY;qBACT,yBAAyB,CAAC,UAAU,CAAC;qBACrC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBACX,GAAW,CAAC,qBAAS,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;oBACxD,IAAI,EAAE,CAAC;gBACT,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACb,IAAI,CAAC,GAAG,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;aACN;iBAAM;gBACL,IAAI,EAAE,CAAC;aACR;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,GAAG,CAAC,CAAC;SACX;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAzBW,QAAA,uBAAuB,2BAyBlC"}
@@ -1,3 +1,5 @@
1
+ /// <reference types="node" />
2
+ import * as crypto from 'crypto';
1
3
  /**
2
4
  * The content of public key
3
5
  */
@@ -5,6 +7,7 @@ export interface IPublicKey {
5
7
  id: number;
6
8
  algorithm: string;
7
9
  publicKey: string;
10
+ parsedPublicKey?: crypto.KeyObject;
8
11
  state: PublicKeyState;
9
12
  createdAt?: string;
10
13
  expiresAt?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"publicKey.js","sourceRoot":"","sources":["../../../src/models/publicKey.ts"],"names":[],"mappings":";;;AAyBA;;GAEG;AACH,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACrB,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB"}
1
+ {"version":3,"file":"publicKey.js","sourceRoot":"","sources":["../../../src/models/publicKey.ts"],"names":[],"mappings":";;;AA4BA;;GAEG;AACH,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,mCAAiB,CAAA;IACjB,qCAAmB,CAAA;IACnB,qCAAmB,CAAA;AACrB,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.publicKeyRepository = void 0;
4
4
  const http_request_1 = require("@villedemontreal/http-request");
5
+ const crypto = require("crypto");
5
6
  const lodash_1 = require("lodash");
6
7
  const superagent = require("superagent");
7
8
  const general_utils_1 = require("@villedemontreal/general-utils");
@@ -13,11 +14,15 @@ class PublicKeyRepository {
13
14
  const request = superagent.get(url);
14
15
  const response = await http_request_1.httpUtils.send(request);
15
16
  if (!response.ok) {
16
- throw new Error(`An error occured calling ${url} : ${response.error}`);
17
+ throw new Error(`An error occurred calling ${url} : ${response.error}`);
17
18
  }
18
19
  const data = response.body;
19
20
  if (data && data.items && (0, lodash_1.isArray)(data.items)) {
20
- const newKeys = (0, lodash_1.keyBy)(data.items, (item) => item.id);
21
+ const items = data.items.map((key) => ({
22
+ ...key,
23
+ parsedPublicKey: crypto.createPublicKey(key.publicKey),
24
+ }));
25
+ const newKeys = (0, lodash_1.keyBy)(items, (item) => item.id);
21
26
  return newKeys;
22
27
  }
23
28
  return null;
@@ -33,11 +38,14 @@ class PublicKeyRepository {
33
38
  if (response.status === 404) {
34
39
  return null;
35
40
  }
36
- throw (0, general_utils_1.createError)(constants_1.constants.errors.codes.UNABLE_TO_GET_PUBLIC_KEY, `An error occured calling ${url} : ${response.error}`)
41
+ throw (0, general_utils_1.createError)(constants_1.constants.errors.codes.UNABLE_TO_GET_PUBLIC_KEY, `An error occurred calling ${url} : ${response.error}`)
37
42
  .httpStatus(response.status)
38
43
  .build();
39
44
  }
40
- return response.body;
45
+ return {
46
+ ...response.body,
47
+ parsedPublicKey: crypto.createPublicKey(response.body.publicKey),
48
+ };
41
49
  }
42
50
  }
43
51
  exports.publicKeyRepository = new PublicKeyRepository();
@@ -1 +1 @@
1
- {"version":3,"file":"publicKeyRepository.js","sourceRoot":"","sources":["../../../src/repositories/publicKeyRepository.ts"],"names":[],"mappings":";;;AAAA,gEAA0D;AAC1D,mCAAwC;AACxC,yCAAyC;AAEzC,kEAA6D;AAC7D,+CAA4C;AAC5C,mDAAgD;AAuBhD,MAAM,mBAAmB;IAChB,KAAK,CAAC,MAAM;QACjB,MAAM,GAAG,GAAG,GAAG,wBAAS,CAAC,OAAO,CAC9B,iBAAO,CAAC,OAAO,EAAE,EACjB,iBAAO,CAAC,WAAW,EAAE,CACtB,IAAI,iBAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACxE;QAED,MAAM,IAAI,GAAiC,QAAQ,CAAC,IAAI,CAAC;QACzD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC7C,MAAM,OAAO,GAAgB,IAAA,cAAK,EAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClE,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAa;QAC/B,MAAM,GAAG,GAAG,wBAAS,CAAC,OAAO,CAAC,iBAAO,CAAC,OAAO,EAAE,EAAE,iBAAO,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,6CAA6C;YAC7C,4BAA4B;YAC5B,6CAA6C;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,OAAO,IAAI,CAAC;aACb;YAED,MAAM,IAAA,2BAAW,EACf,qBAAS,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAC/C,4BAA4B,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CACtD;iBACE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;iBAC3B,KAAK,EAAE,CAAC;SACZ;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF;AAEY,QAAA,mBAAmB,GAAyB,IAAI,mBAAmB,EAAE,CAAC"}
1
+ {"version":3,"file":"publicKeyRepository.js","sourceRoot":"","sources":["../../../src/repositories/publicKeyRepository.ts"],"names":[],"mappings":";;;AAAA,gEAA0D;AAC1D,iCAAiC;AACjC,mCAAwC;AACxC,yCAAyC;AAEzC,kEAA6D;AAC7D,+CAA4C;AAC5C,mDAAgD;AAuBhD,MAAM,mBAAmB;IAChB,KAAK,CAAC,MAAM;QACjB,MAAM,GAAG,GAAG,GAAG,wBAAS,CAAC,OAAO,CAC9B,iBAAO,CAAC,OAAO,EAAE,EACjB,iBAAO,CAAC,WAAW,EAAE,CACtB,IAAI,iBAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;SACzE;QAED,MAAM,IAAI,GAAiC,QAAQ,CAAC,IAAI,CAAC;QACzD,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAA,gBAAO,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC7C,MAAM,KAAK,GAAiB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACnD,GAAG,GAAG;gBACN,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;aACvD,CAAC,CAAC,CAAC;YACJ,MAAM,OAAO,GAAgB,IAAA,cAAK,EAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7D,OAAO,OAAO,CAAC;SAChB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,KAAa;QAC/B,MAAM,GAAG,GAAG,wBAAS,CAAC,OAAO,CAAC,iBAAO,CAAC,OAAO,EAAE,EAAE,iBAAO,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1F,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,QAAQ,GAAG,MAAM,wBAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,6CAA6C;YAC7C,4BAA4B;YAC5B,6CAA6C;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC3B,OAAO,IAAI,CAAC;aACb;YAED,MAAM,IAAA,2BAAW,EACf,qBAAS,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAC/C,6BAA6B,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CACvD;iBACE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;iBAC3B,KAAK,EAAE,CAAC;SACZ;QACD,OAAO;YACL,GAAG,QAAQ,CAAC,IAAI;YAChB,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;SACjE,CAAC;IACJ,CAAC;CACF;AAEY,QAAA,mBAAmB,GAAyB,IAAI,mBAAmB,EAAE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@villedemontreal/jwt-validator",
3
- "version": "5.7.11",
3
+ "version": "5.8.0",
4
4
  "description": "Module to validate JWT (JSON Web Tokens)",
5
5
  "main": "dist/src/index.js",
6
6
  "typings": "dist/src",
@@ -50,8 +50,8 @@
50
50
  "@types/express": "4.17.17",
51
51
  "@types/http-status-codes": "1.2.0",
52
52
  "@types/jsonwebtoken": "9.0.1",
53
- "@types/lodash": "4.14.191",
54
- "@types/node": "18.15.3",
53
+ "@types/lodash": "4.14.192",
54
+ "@types/node": "18.15.11",
55
55
  "@types/request": "2.48.8",
56
56
  "@types/request-promise-native": "1.0.18",
57
57
  "@types/superagent": "4.1.16",
@@ -60,23 +60,23 @@
60
60
  "@types/mocha": "10.0.1",
61
61
  "@types/sinon": "10.0.13",
62
62
  "@types/validator": "13.7.14",
63
- "@typescript-eslint/eslint-plugin": "5.55.0",
64
- "@typescript-eslint/parser": "5.55.0",
63
+ "@typescript-eslint/eslint-plugin": "5.57.1",
64
+ "@typescript-eslint/parser": "5.57.1",
65
65
  "@villedemontreal/scripting": "2.1.6",
66
66
  "chai": "4.3.7",
67
- "eslint": "8.36.0",
68
- "eslint-config-prettier": "8.7.0",
67
+ "eslint": "8.38.0",
68
+ "eslint-config-prettier": "8.8.0",
69
69
  "eslint-plugin-prettier": "4.2.1",
70
- "fs-extra": "11.1.0",
70
+ "fs-extra": "11.1.1",
71
71
  "mocha": "10.2.0",
72
72
  "mocha-jenkins-reporter": "0.4.8",
73
73
  "mock-express-request": "0.2.2",
74
74
  "node-mocks-http": "1.12.2",
75
75
  "node-notifier": "10.0.1",
76
76
  "nyc": "15.1.0",
77
- "sinon": "15.0.2",
77
+ "sinon": "15.0.3",
78
78
  "superagent-mocker": "0.5.2",
79
- "typescript": "5.0.2",
79
+ "typescript": "5.0.4",
80
80
  "validator": "13.9.0"
81
81
  }
82
82
  }
@@ -61,7 +61,7 @@ class JwtValidator implements IJwtValidator {
61
61
  this.validateJwtCreationTimestamp(payload, key);
62
62
  this.validateJwtExpirationTimestamp(payload, key);
63
63
 
64
- return this.verifyJwt(token, key.publicKey);
64
+ return this.verifyJwt(token, key);
65
65
  }
66
66
 
67
67
  private parseJwt(token: string): IJWTPayload {
@@ -76,10 +76,10 @@ class JwtValidator implements IJwtValidator {
76
76
  return payload;
77
77
  }
78
78
 
79
- private verifyJwt(token: string, publicKey: string): IJWTPayload {
79
+ private verifyJwt(token: string, publicKey: IPublicKey): IJWTPayload {
80
80
  let payload: any;
81
81
  try {
82
- payload = jwt.verify(token, publicKey);
82
+ payload = jwt.verify(token, publicKey.parsedPublicKey ?? publicKey.publicKey);
83
83
  } catch (err) {
84
84
  throw createInvalidJwtError({
85
85
  code: constants.errors.codes.INVALID_VALUE,
@@ -10,21 +10,25 @@ import { jwtValidator } from '../jwtValidator';
10
10
  */
11
11
  export const jwtValidationMiddleware: (
12
12
  mandatoryValidation?: boolean
13
- ) => (req: express.Request, res: express.Response, next: express.NextFunction) => Promise<void> = (
13
+ ) => (req: express.Request, res: express.Response, next: express.NextFunction) => void = (
14
14
  mandatoryValidation = true
15
15
  ) => {
16
- return async (
17
- req: express.Request,
18
- res: express.Response,
19
- next: express.NextFunction
20
- ): Promise<void> => {
16
+ return (req: express.Request, res: express.Response, next: express.NextFunction): void => {
21
17
  try {
22
18
  const authHeader: string = req.get(httpHeaderFieldsTyped.AUTHORIZATION);
23
19
  if (mandatoryValidation || authHeader) {
24
- (req as any)[constants.requestExtraVariables.JWT] =
25
- await jwtValidator.verifyAuthorizationHeader(authHeader);
20
+ jwtValidator
21
+ .verifyAuthorizationHeader(authHeader)
22
+ .then((jwt) => {
23
+ (req as any)[constants.requestExtraVariables.JWT] = jwt;
24
+ next();
25
+ })
26
+ .catch((err) => {
27
+ next(err);
28
+ });
29
+ } else {
30
+ next();
26
31
  }
27
- next();
28
32
  } catch (err) {
29
33
  next(err);
30
34
  }
@@ -1,3 +1,5 @@
1
+ import * as crypto from 'crypto';
2
+
1
3
  /**
2
4
  * The content of public key
3
5
  */
@@ -5,6 +7,7 @@ export interface IPublicKey {
5
7
  id: number;
6
8
  algorithm: string;
7
9
  publicKey: string;
10
+ parsedPublicKey?: crypto.KeyObject;
8
11
  state: PublicKeyState;
9
12
  createdAt?: string;
10
13
  expiresAt?: string;
@@ -1,4 +1,5 @@
1
1
  import { httpUtils } from '@villedemontreal/http-request';
2
+ import * as crypto from 'crypto';
2
3
  import { isArray, keyBy } from 'lodash';
3
4
  import * as superagent from 'superagent';
4
5
 
@@ -37,12 +38,16 @@ class PublicKeyRepository implements IPublicKeyRepository {
37
38
 
38
39
  const response = await httpUtils.send(request);
39
40
  if (!response.ok) {
40
- throw new Error(`An error occured calling ${url} : ${response.error}`);
41
+ throw new Error(`An error occurred calling ${url} : ${response.error}`);
41
42
  }
42
43
 
43
44
  const data: IPaginatedResult<IPublicKey> = response.body;
44
45
  if (data && data.items && isArray(data.items)) {
45
- const newKeys: IPublicKeys = keyBy(data.items, (item) => item.id);
46
+ const items: IPublicKey[] = data.items.map((key) => ({
47
+ ...key,
48
+ parsedPublicKey: crypto.createPublicKey(key.publicKey),
49
+ }));
50
+ const newKeys: IPublicKeys = keyBy(items, (item) => item.id);
46
51
  return newKeys;
47
52
  }
48
53
  return null;
@@ -63,12 +68,15 @@ class PublicKeyRepository implements IPublicKeyRepository {
63
68
 
64
69
  throw createError(
65
70
  constants.errors.codes.UNABLE_TO_GET_PUBLIC_KEY,
66
- `An error occured calling ${url} : ${response.error}`
71
+ `An error occurred calling ${url} : ${response.error}`
67
72
  )
68
73
  .httpStatus(response.status)
69
74
  .build();
70
75
  }
71
- return response.body;
76
+ return {
77
+ ...response.body,
78
+ parsedPublicKey: crypto.createPublicKey(response.body.publicKey),
79
+ };
72
80
  }
73
81
  }
74
82