@autofleet/zehut 1.5.6 → 1.5.8

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,5 +1,5 @@
1
+ export declare const getUser: () => any;
2
+ export declare const isUserExist: () => boolean;
1
3
  export declare const checkFleetPermission: (fleetId: any) => boolean;
2
4
  export declare const checkBusinessModelPermission: (businessModelId: any) => boolean;
3
5
  export declare const checkDemandSourcePermission: (demandSourceId: any) => boolean;
4
- export declare const getUser: () => any;
5
- export declare const isUserExist: () => boolean;
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isUserExist = exports.getUser = exports.checkDemandSourcePermission = exports.checkBusinessModelPermission = exports.checkFleetPermission = void 0;
3
+ exports.checkDemandSourcePermission = exports.checkBusinessModelPermission = exports.checkFleetPermission = exports.isUserExist = exports.getUser = void 0;
4
4
  const tracer_1 = require("./tracer");
5
- exports.checkFleetPermission = fleetId => {
5
+ exports.getUser = () => { var _a, _b; return (_b = (_a = tracer_1.getCurrentTrace()) === null || _a === void 0 ? void 0 : _a.context) === null || _b === void 0 ? void 0 : _b.user; };
6
+ exports.isUserExist = () => !!exports.getUser();
7
+ exports.checkFleetPermission = (fleetId) => {
6
8
  if (exports.isUserExist()) {
7
9
  const { context } = tracer_1.getCurrentTrace();
8
10
  const user = context === null || context === void 0 ? void 0 : context.get('userObject');
@@ -10,7 +12,7 @@ exports.checkFleetPermission = fleetId => {
10
12
  }
11
13
  return true;
12
14
  };
13
- exports.checkBusinessModelPermission = businessModelId => {
15
+ exports.checkBusinessModelPermission = (businessModelId) => {
14
16
  if (exports.isUserExist()) {
15
17
  const { context } = tracer_1.getCurrentTrace();
16
18
  const user = context === null || context === void 0 ? void 0 : context.get('userObject');
@@ -18,7 +20,7 @@ exports.checkBusinessModelPermission = businessModelId => {
18
20
  }
19
21
  return true;
20
22
  };
21
- exports.checkDemandSourcePermission = demandSourceId => {
23
+ exports.checkDemandSourcePermission = (demandSourceId) => {
22
24
  if (exports.isUserExist()) {
23
25
  const { context } = tracer_1.getCurrentTrace();
24
26
  const user = context === null || context === void 0 ? void 0 : context.get('userObject');
@@ -26,5 +28,3 @@ exports.checkDemandSourcePermission = demandSourceId => {
26
28
  }
27
29
  return true;
28
30
  };
29
- exports.getUser = () => { var _a, _b; return (_b = (_a = tracer_1.getCurrentTrace()) === null || _a === void 0 ? void 0 : _a.context) === null || _b === void 0 ? void 0 : _b.user; };
30
- exports.isUserExist = () => !!exports.getUser();
package/lib/errors.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import ApiUser from "./user";
1
+ import ApiUser from './user';
2
2
  export declare class UnauthorizedAccessError extends Error {
3
3
  user: ApiUser;
4
4
  constructor(user: any, message: any);
package/lib/errors.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UnauthorizedAccessError = void 0;
4
+ // eslint-disable-next-line import/prefer-default-export
4
5
  class UnauthorizedAccessError extends Error {
5
6
  constructor(user = null, message) {
6
7
  super(message);
@@ -7,8 +7,8 @@ exports.getTokenSecret = exports.getRefreshTokenSecret = void 0;
7
7
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
8
  const moment_1 = __importDefault(require("moment"));
9
9
  const { DEPRECATED_JWT_SECRET, JWT_SECRET, DEPRECATED_REFRESH_JWT_SECRET, REFRESH_JWT_SECRET, DEPRECATION_UNIX_TIMESTAMP, } = process.env;
10
- const deprecationTime = moment_1.default(DEPRECATION_UNIX_TIMESTAMP || undefined);
11
10
  const getRelevantSecret = (token, deprecatedSecret, newSecret) => {
11
+ const deprecationTime = moment_1.default((parseInt(DEPRECATION_UNIX_TIMESTAMP, 10) * 1000) || undefined);
12
12
  try {
13
13
  let unixTime;
14
14
  if (token) {
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ var __importDefault = (this && this.__importDefault) || function (mod) {
31
+ return (mod && mod.__esModule) ? mod : { "default": mod };
32
+ };
33
+ Object.defineProperty(exports, "__esModule", { value: true });
34
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
35
+ const moment_1 = __importDefault(require("moment"));
36
+ const sleep = (ms) => __awaiter(void 0, void 0, void 0, function* () { return new Promise((resolve) => setTimeout(resolve, ms)); });
37
+ process.env.NODE_ENV = 'node-common-test';
38
+ describe('secret getter tests', () => {
39
+ const testSecrets = {
40
+ DEPRECATED_JWT_SECRET: 'test_deprecated_secret',
41
+ JWT_SECRET: 'test_secret',
42
+ DEPRECATED_REFRESH_JWT_SECRET: 'test_deprecated_refresh_secret',
43
+ REFRESH_JWT_SECRET: 'test_refresh_secret',
44
+ };
45
+ beforeEach(() => {
46
+ jest.resetModules();
47
+ process.env = Object.assign(Object.assign({}, (process.env || {})), testSecrets); // Make a copy
48
+ });
49
+ it('test get new refresh token secret when after deprecation timestamp', () => __awaiter(void 0, void 0, void 0, function* () {
50
+ process.env.DEPRECATION_UNIX_TIMESTAMP = moment_1.default().subtract(1, 'days').unix().toString();
51
+ const { getTokenSecret } = yield Promise.resolve().then(() => __importStar(require('./secret-getter')));
52
+ const token = jsonwebtoken_1.default.sign({
53
+ exp: moment_1.default().unix() + (60 * 60 * 24 * 365),
54
+ }, testSecrets.JWT_SECRET);
55
+ const result = getTokenSecret(token);
56
+ expect(result).toBe(testSecrets.JWT_SECRET);
57
+ }));
58
+ it('test get old refresh token secret when before deprecation timestamp', () => __awaiter(void 0, void 0, void 0, function* () {
59
+ process.env.DEPRECATION_UNIX_TIMESTAMP = moment_1.default().add(1, 'days').unix().toString();
60
+ const { getTokenSecret } = yield Promise.resolve().then(() => __importStar(require('./secret-getter')));
61
+ const token = jsonwebtoken_1.default.sign({
62
+ exp: moment_1.default().unix() + (60 * 60 * 24 * 365),
63
+ }, testSecrets.DEPRECATED_JWT_SECRET);
64
+ const result = getTokenSecret(token);
65
+ expect(result).toBe(testSecrets.DEPRECATED_JWT_SECRET);
66
+ }));
67
+ it('test get old refresh token secret when after deprecation timestamp, but token is from before', () => __awaiter(void 0, void 0, void 0, function* () {
68
+ const token = jsonwebtoken_1.default.sign({
69
+ exp: moment_1.default().unix() + (60 * 60 * 24 * 365),
70
+ }, testSecrets.DEPRECATED_JWT_SECRET);
71
+ process.env.DEPRECATION_UNIX_TIMESTAMP = moment_1.default().add(10, 'seconds').unix().toString();
72
+ const { getTokenSecret } = yield Promise.resolve().then(() => __importStar(require('./secret-getter')));
73
+ yield sleep(1000);
74
+ const result = getTokenSecret(token);
75
+ expect(result).toBe(testSecrets.DEPRECATED_JWT_SECRET);
76
+ }));
77
+ it('test malformed token returns new secret', () => __awaiter(void 0, void 0, void 0, function* () {
78
+ const { getTokenSecret } = yield Promise.resolve().then(() => __importStar(require('./secret-getter')));
79
+ const token = 'shit';
80
+ const result = getTokenSecret(token);
81
+ expect(result).toBe(testSecrets.JWT_SECRET);
82
+ }));
83
+ it('test malformed token returns new secret even before deprecation time', () => __awaiter(void 0, void 0, void 0, function* () {
84
+ process.env.DEPRECATION_UNIX_TIMESTAMP = moment_1.default().add(10, 'day').unix().toString();
85
+ const { getTokenSecret } = yield Promise.resolve().then(() => __importStar(require('./secret-getter')));
86
+ const token = 'shit';
87
+ const result = getTokenSecret(token);
88
+ expect(result).toBe(testSecrets.JWT_SECRET);
89
+ }));
90
+ });
package/lib/services.js CHANGED
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.IdentityNetwork = void 0;
7
7
  const network_1 = __importDefault(require("@autofleet/network"));
8
8
  const CACHE_LIFETIME_IN_SEC = 10;
9
+ // eslint-disable-next-line import/prefer-default-export
9
10
  exports.IdentityNetwork = new network_1.default({
10
11
  serviceName: 'IDENTITY_MS',
11
12
  retries: 3,
@@ -9,6 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ /* eslint-disable consistent-return */
12
13
  const services_1 = require("../services");
13
14
  class ApiUser {
14
15
  constructor(id) {
package/lib/user/index.js CHANGED
@@ -81,9 +81,9 @@ exports.middlewareWithDecode = (options = {}) => (req, res, next) => __awaiter(v
81
81
  trace.context.set('userObject', userObject);
82
82
  // Added in order to support outbreak.
83
83
  req.headers['x-af-user-permissions'] = userObject;
84
- const entities = req.user.permissions;
85
84
  }
86
85
  trace.context.set('userObject', {});
86
+ // eslint-disable-next-line consistent-return
87
87
  return next();
88
88
  });
89
89
  exports.eagerLoadPermissionsMiddleware = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
package/lib/utils.js CHANGED
@@ -41,9 +41,8 @@ exports.parsePermissions = (contextId, decodedToken) => {
41
41
  return [];
42
42
  }
43
43
  const contexts = decodedToken.contexts;
44
- const activeContext = contexts.find(context => context.id === contextId);
45
- const permissionsByContext = {};
46
- const permissionsValue = `${(_a = activeContext.permissions) === null || _a === void 0 ? void 0 : _a.map(cp => `${cp},`)}`;
44
+ const activeContext = contexts.find((context) => context.id === contextId);
45
+ const permissionsValue = `${(_a = activeContext.permissions) === null || _a === void 0 ? void 0 : _a.map((cp) => `${cp},`)}`;
47
46
  return {
48
47
  key: activeContext.entityId,
49
48
  value: permissionsValue,
@@ -55,15 +54,15 @@ exports.getEntitiesFromContext = (contextId, decodedToken) => {
55
54
  }
56
55
  let contexts = decodedToken.contexts;
57
56
  if (contextId) {
58
- contexts = contexts.filter(context => context.id === contextId);
57
+ contexts = contexts.filter((context) => context.id === contextId);
59
58
  }
60
59
  const attributes = {};
61
60
  contexts.forEach((context) => {
62
61
  const prop = CONTEXT_MAP_PROPS[context.subSystem || 'business'];
63
62
  const permissions = exports.parsePermissions(context.id, decodedToken);
64
63
  // eslint-disable-next-line no-unused-expressions
65
- attributes[prop] ?
66
- attributes[prop][permissions.key] = permissions.value
64
+ attributes[prop]
65
+ ? attributes[prop][permissions.key] = permissions.value
67
66
  : attributes[prop] = { [permissions.key]: permissions.value };
68
67
  });
69
68
  return attributes;
@@ -74,7 +73,7 @@ exports.getContextAttributes = (contextId, decodedToken) => {
74
73
  }
75
74
  let contexts = decodedToken.contexts;
76
75
  if (contextId) {
77
- contexts = contexts.filter(context => context.id === contextId);
76
+ contexts = contexts.filter((context) => context.id === contextId);
78
77
  }
79
78
  const attributes = {};
80
79
  contexts.forEach((context) => {
@@ -82,9 +81,9 @@ exports.getContextAttributes = (contextId, decodedToken) => {
82
81
  if (context[prop]) {
83
82
  const contextPropWrapped = [context[prop]];
84
83
  // eslint-disable-next-line no-unused-expressions
85
- attributes[prop] ?
86
- attributes[prop] = attributes[prop].concat(contextPropWrapped) :
87
- attributes[prop] = contextPropWrapped;
84
+ attributes[prop]
85
+ ? attributes[prop] = attributes[prop].concat(contextPropWrapped)
86
+ : attributes[prop] = contextPropWrapped;
88
87
  }
89
88
  });
90
89
  });
package/package.json CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "name": "@autofleet/zehut",
3
- "version": "1.5.6",
3
+ "version": "1.5.8",
4
4
  "description": "manage user's identity",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
7
7
  "scripts": {
8
8
  "build": "rm -rf lib && tsc",
9
9
  "prepublish": "npm run build",
10
- "coverage": "jest --coverage --forceExit --runInBand",
10
+ "coverage": "jest --coverage --forceExit --runInBand && rm -rf ./coverage",
11
11
  "test": "jest --forceExit --runInBand",
12
12
  "test-auto": "jest --watch --runInBand",
13
13
  "linter": "./node_modules/.bin/eslint ."
14
14
  },
15
15
  "jest": {
16
- "setupTestFrameworkScriptFile": "jest-extended",
17
- "testURL": "http://localhost:8085/"
16
+ "verbose": true,
17
+ "testURL": "http://localhost/"
18
18
  },
19
19
  "repository": {
20
20
  "type": "git",
@@ -27,15 +27,22 @@
27
27
  },
28
28
  "homepage": "https://github.com/Autofleet/zehut",
29
29
  "dependencies": {
30
- "@autofleet/network": "^1.2.3",
30
+ "@autofleet/network": "^1.1.4",
31
31
  "@autofleet/outbreak": "0.0.7",
32
+ "@types/jest": "^22.0.0",
32
33
  "axios": "^0.19.2",
33
34
  "jsonwebtoken": "^8.5.1",
34
35
  "moment": "^2.29.1",
35
36
  "uuid": "^8.3.2"
36
37
  },
37
38
  "devDependencies": {
38
- "typescript": "^3.9.5"
39
+ "typescript": "^3.9.5",
40
+ "jest": "^22.4.4",
41
+ "ts-jest": "^25.4.0",
42
+ "@typescript-eslint/eslint-plugin": "^4.8.1",
43
+ "eslint": "^7.13.0",
44
+ "eslint-config-airbnb-typescript": "^12.0.0",
45
+ "eslint-plugin-import": "^2.22.1"
39
46
  },
40
47
  "files": [
41
48
  "lib/**/*"