@medipass/utils 11.80.7 → 11.80.8-feature-masked.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.
@@ -0,0 +1 @@
1
+ export {};
@@ -6,9 +6,9 @@ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'defau
6
6
 
7
7
  var _regeneratorRuntime = _interopDefault(require('@babel/runtime/regenerator'));
8
8
  var _asyncToGenerator = _interopDefault(require('@babel/runtime/helpers/asyncToGenerator'));
9
+ var _forOwn = _interopDefault(require('lodash/forOwn'));
9
10
  var reactPlacesAutocomplete = require('react-places-autocomplete');
10
11
  var _forEach = _interopDefault(require('lodash/forEach'));
11
- var _forOwn = _interopDefault(require('lodash/forOwn'));
12
12
 
13
13
  var ADDRESS_COMPONENT_MAPPINGS = {
14
14
  subpremise: 'subpremise',
package/index.js CHANGED
@@ -21,7 +21,9 @@ require('lodash/isEmpty');
21
21
  var statusTextClasses = require('./status-text-classes.js');
22
22
  require('@sentry/browser');
23
23
  require('redux-sentry-middleware');
24
- require('masked');
24
+ require('lodash/repeat');
25
+ require('lodash/forOwn');
26
+ require('./masked.js');
25
27
  require('lodash/set');
26
28
  var sensitiveKeys = require('./sensitive-keys.js');
27
29
  var sentry = require('./sentry.js');
package/masked.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ declare const masked: (data: Record<string, any> | string, keys: string[] | string, { omitKeys }?: {
2
+ omitKeys?: boolean | undefined;
3
+ }) => any;
4
+ export default masked;
package/masked.js ADDED
@@ -0,0 +1,103 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
+
7
+ var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty'));
8
+ var _repeat = _interopDefault(require('lodash/repeat'));
9
+ var _forOwn = _interopDefault(require('lodash/forOwn'));
10
+
11
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
12
+
13
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
14
+ var MASK_CHAR = '*';
15
+
16
+ var _parse = function _parse(string) {
17
+ if (typeof string === 'string') {
18
+ try {
19
+ return JSON.parse(string);
20
+ } catch (err) {
21
+ return null;
22
+ }
23
+ }
24
+
25
+ return null;
26
+ };
27
+
28
+ var _maskedString = function _maskedString(_ref) {
29
+ var length = _ref.length,
30
+ maskChar = _ref.maskChar;
31
+ return _repeat(maskChar, length);
32
+ };
33
+
34
+ var masked = function masked(data, keys, _temp) {
35
+ var _ref2 = _temp === void 0 ? {} : _temp,
36
+ omitKeys = _ref2.omitKeys;
37
+
38
+ if (!data) {
39
+ return null;
40
+ }
41
+
42
+ if (typeof data !== 'object' && !_parse(data)) {
43
+ return data;
44
+ }
45
+
46
+ if (!keys || !Array.isArray(keys) && typeof keys !== 'string') {
47
+ if (!keys) {
48
+ throw new Error('Second parameter `keys` not given');
49
+ }
50
+
51
+ throw new TypeError("Expected a string or array, got " + typeof keys);
52
+ }
53
+
54
+ var newData = _parse(data) || data;
55
+
56
+ if (Array.isArray(newData)) {
57
+ newData = newData.map(function (newData) {
58
+ if (typeof newData !== 'object') {
59
+ return newData;
60
+ }
61
+
62
+ return masked(newData, keys, {
63
+ omitKeys: omitKeys
64
+ });
65
+ });
66
+ } else {
67
+ newData = _objectSpread({}, newData);
68
+
69
+ _forOwn(newData, function (value, key) {
70
+ if (typeof value === 'object') {
71
+ if (Array.isArray(value) && Array.isArray(keys) && keys.includes(key)) {
72
+ if (omitKeys) {
73
+ delete newData[key];
74
+ } else {
75
+ newData[key] = value.map(function () {
76
+ return _maskedString({
77
+ length: 8,
78
+ maskChar: MASK_CHAR
79
+ });
80
+ });
81
+ }
82
+ } else {
83
+ newData[key] = masked(value, keys, {
84
+ omitKeys: omitKeys
85
+ });
86
+ }
87
+ } else if (key === keys || Array.isArray(keys) && keys.includes(key)) {
88
+ if (omitKeys) {
89
+ delete newData[key];
90
+ } else {
91
+ newData[key] = _maskedString({
92
+ length: 8,
93
+ maskChar: MASK_CHAR
94
+ });
95
+ }
96
+ }
97
+ });
98
+ }
99
+
100
+ return typeof data === 'string' && _parse(data) ? JSON.stringify(newData) : newData;
101
+ };
102
+
103
+ exports.default = masked;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medipass/utils",
3
- "version": "11.80.7",
3
+ "version": "11.80.8-feature-masked.0",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",
@@ -13,7 +13,7 @@
13
13
  "lint:fix": "eslint \"**/*.{ts,tsx}\" --fix",
14
14
  "prepare": "yarn build",
15
15
  "postpublish": "yarn clean",
16
- "test": "yarn lint && jest",
16
+ "test": "jest packages/utils/src/__tests__/masked.test.ts",
17
17
  "test-ci": "yarn lint && jest --silent",
18
18
  "check-types": "tsc --noEmit --project tsconfig.json"
19
19
  },
@@ -35,7 +35,6 @@
35
35
  "google-libphonenumber": "3.2.31",
36
36
  "i18next": "19.6.3",
37
37
  "lodash": "4.17.21",
38
- "masked": "1.1.0",
39
38
  "moment": "2.22.2",
40
39
  "react-i18next": "11.7.0",
41
40
  "react-places-autocomplete": "5.4.3",
@@ -52,5 +51,5 @@
52
51
  "rimraf": "^2.6.2",
53
52
  "typescript": "4.8.4"
54
53
  },
55
- "gitHead": "7db06272444924d1417277655ade56fb649c3887"
54
+ "gitHead": "af095f648bce4ca2558d578c6e35c45465fc5ee1"
56
55
  }
package/sentry.js CHANGED
@@ -4,10 +4,13 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
6
 
7
+ require('@babel/runtime/helpers/defineProperty');
7
8
  var _get = _interopDefault(require('lodash/get'));
8
9
  var Sentry = require('@sentry/browser');
9
10
  var createSentryMiddleware = _interopDefault(require('redux-sentry-middleware'));
10
- var masked = _interopDefault(require('masked'));
11
+ require('lodash/repeat');
12
+ require('lodash/forOwn');
13
+ var masked = require('./masked.js');
11
14
  var _set = _interopDefault(require('lodash/set'));
12
15
  var sensitiveKeys = require('./sensitive-keys.js');
13
16
 
@@ -34,11 +37,11 @@ var createReduxMiddleware = function createReduxMiddleware() {
34
37
  return createSentryMiddleware(Sentry, {
35
38
  // @ts-expect-error TS(7006): Parameter 'action' implicitly has an 'any' type.
36
39
  actionTransformer: function actionTransformer(action) {
37
- return masked(action, sensitiveKeys.default);
40
+ return masked.default(action, sensitiveKeys.default);
38
41
  },
39
42
  // @ts-expect-error TS(7006): Parameter 'state' implicitly has an 'any' type.
40
43
  stateTransformer: function stateTransformer(state) {
41
- return masked(state, sensitiveKeys.default);
44
+ return masked.default(state, sensitiveKeys.default);
42
45
  }
43
46
  });
44
47
  };
@@ -55,14 +58,14 @@ _error, _temp) {
55
58
 
56
59
  // @ts-expect-error TS(2339): Property 'config' does not exist on type 'Error'.
57
60
  var errorHeaders = (_error2 = error) == null ? void 0 : (_error2$config = _error2.config) == null ? void 0 : _error2$config.headers;
58
- var maskedErrorHeaders = masked(errorHeaders, ['Authorization']);
61
+ var maskedErrorHeaders = masked.default(errorHeaders, ['Authorization']);
59
62
  error = _set(error, 'config.headers', maskedErrorHeaders);
60
63
 
61
64
  try {
62
65
  var _error3, _error3$config;
63
66
 
64
67
  var errorData = (_error3 = error) == null ? void 0 : (_error3$config = _error3.config) == null ? void 0 : _error3$config.data;
65
- var maskedErrorData = masked(JSON.parse(errorData), sensitiveKeys.default);
68
+ var maskedErrorData = masked.default(JSON.parse(errorData), sensitiveKeys.default);
66
69
  error = _set(error, 'config.data', JSON.stringify(maskedErrorData));
67
70
  } catch (err) {}
68
71
  }
@@ -73,7 +76,7 @@ _error, _temp) {
73
76
 
74
77
  Sentry.withScope(function (scope) {
75
78
  scope.setExtra('error', error);
76
- scope.setExtra('data', masked(data, sensitiveKeys.default));
79
+ scope.setExtra('data', masked.default(data, sensitiveKeys.default));
77
80
 
78
81
  var message = _get(error, 'data.message', error.message);
79
82
 
@@ -103,7 +106,7 @@ var setup = function setup(_ref2) {
103
106
  }; // @ts-expect-error TS(7006): Parameter 'user' implicitly has an 'any' type.
104
107
 
105
108
  var setUserContext = function setUserContext(user) {
106
- return Sentry.setUser(masked(user, sensitiveKeys.default));
109
+ return Sentry.setUser(masked.default(user, sensitiveKeys.default));
107
110
  }; // @ts-expect-error TS(7006): Parameter 'key' implicitly has an 'any' type.
108
111
 
109
112
  var setTag = function setTag(key, value) {