lesgo 0.7.6 → 0.7.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.
Files changed (27) hide show
  1. package/README.md +1 -1
  2. package/package.json +23 -23
  3. package/src/middlewares/__tests__/basicAuthMiddleware.spec.js +225 -0
  4. package/src/middlewares/__tests__/clientAuthMiddleware.spec.js +137 -0
  5. package/src/middlewares/__tests__/errorHttpResponseMiddleware.spec.js +30 -0
  6. package/src/middlewares/__tests__/httpNoOutputMiddleware.spec.js +199 -0
  7. package/src/middlewares/__tests__/normalizeSQSMessageMiddleware.spec.js +89 -1
  8. package/src/middlewares/__tests__/serverAuthMiddleware.spec.js +170 -0
  9. package/src/middlewares/__tests__/successHttpResponseMiddleware.spec.js +32 -0
  10. package/src/middlewares/__tests__/verifyJwtMiddleware.spec.js +49 -1
  11. package/src/middlewares/basicAuthMiddleware.js +145 -0
  12. package/src/middlewares/clientAuthMiddleware.js +82 -0
  13. package/src/middlewares/errorHttpResponseMiddleware.js +9 -2
  14. package/src/middlewares/httpNoOutputMiddleware.js +87 -0
  15. package/src/middlewares/normalizeHttpRequestMiddleware.js +2 -1
  16. package/src/middlewares/normalizeSQSMessageMiddleware.js +30 -1
  17. package/src/middlewares/serverAuthMiddleware.js +29 -0
  18. package/src/middlewares/successHttpResponseMiddleware.js +12 -2
  19. package/src/middlewares/verifyJwtMiddleware.js +10 -4
  20. package/src/services/AuroraDbRDSProxyService.js +2 -3
  21. package/src/services/ElastiCacheService.js +3 -3
  22. package/src/services/__tests__/ElasticsearchService.spec.js +33 -0
  23. package/src/utils/__tests__/cache.spec.js +88 -44
  24. package/src/utils/__tests__/db.spec.js +0 -1
  25. package/src/utils/__tests__/validateFields.spec.js +223 -32
  26. package/src/utils/cache.js +157 -51
  27. package/src/utils/validateFields.js +85 -44
@@ -4,30 +4,44 @@ import isDecimal from './isDecimal';
4
4
 
5
5
  const FILE = 'Utils/validateFields';
6
6
 
7
- export default (params, validFields) => {
7
+ const isValidJSON = json => {
8
+ if (typeof json !== 'string') {
9
+ return false;
10
+ }
11
+
12
+ // Cannot find a regex solution to this
13
+ try {
14
+ JSON.parse(json);
15
+
16
+ return true;
17
+ } catch (_) {
18
+ return false;
19
+ }
20
+ };
21
+
22
+ const validateFields = (params, validFields) => {
8
23
  const validated = {};
9
24
 
10
25
  validFields.forEach(field => {
11
- if (field.required) {
12
- if (typeof params[field.key] === 'object') {
13
- if (
14
- Array.isArray(params[field.key]) &&
15
- params[field.key].length === 0
16
- ) {
26
+ const { required, type, key, isCollection, enumValues = [] } = field;
27
+
28
+ if (required) {
29
+ if (typeof params[key] === 'object') {
30
+ if (Array.isArray(params[key]) && params[key].length === 0) {
17
31
  throw new LesgoException(
18
- `Missing required '${field.key}'`,
19
- `${FILE}::MISSING_REQUIRED_${field.key.toUpperCase()}`,
32
+ `Missing required '${key}'`,
33
+ `${FILE}::MISSING_REQUIRED_${key.toUpperCase()}`,
20
34
  500,
21
35
  { field }
22
36
  );
23
37
  }
24
38
  }
25
39
 
26
- if (!params[field.key]) {
27
- if (typeof params[field.key] !== 'number') {
40
+ if (!params[key]) {
41
+ if (typeof params[key] !== 'number') {
28
42
  throw new LesgoException(
29
- `Missing required '${field.key}'`,
30
- `${FILE}::MISSING_REQUIRED_${field.key.toUpperCase()}`,
43
+ `Missing required '${key}'`,
44
+ `${FILE}::MISSING_REQUIRED_${key.toUpperCase()}`,
31
45
  500,
32
46
  { field }
33
47
  );
@@ -35,41 +49,68 @@ export default (params, validFields) => {
35
49
  }
36
50
  }
37
51
 
38
- if (
39
- (field.type === 'string' &&
40
- typeof params[field.key] !== 'undefined' &&
41
- typeof params[field.key] !== 'string') ||
42
- (field.type === 'object' &&
43
- typeof params[field.key] !== 'undefined' &&
44
- typeof params[field.key] !== 'object') ||
45
- (field.type === 'number' &&
46
- typeof params[field.key] !== 'undefined' &&
47
- typeof params[field.key] !== 'number') ||
48
- (field.type === 'decimal' &&
49
- typeof params[field.key] !== 'undefined' &&
50
- !isDecimal(params[field.key])) ||
51
- (field.type === 'email' &&
52
- typeof params[field.key] !== 'undefined' &&
53
- !isEmail(params[field.key])) ||
54
- (field.type === 'array' &&
55
- typeof params[field.key] !== 'undefined' &&
56
- !Array.isArray(params[field.key])) ||
57
- (field.type === 'enum' &&
58
- typeof params[field.key] !== 'undefined' &&
59
- !field.enumValues.includes(params[field.key]))
60
- ) {
61
- throw new LesgoException(
62
- `Invalid type for '${field.key}', expecting '${field.type}'`,
63
- `${FILE}::INVALID_TYPE_${field.key.toUpperCase()}`,
64
- 500,
65
- { field, value: params[field.key] }
66
- );
52
+ if (isCollection) {
53
+ try {
54
+ validateFields({ [key]: params[key] }, [
55
+ { key, required, type: 'array' },
56
+ ]);
57
+ } catch (_) {
58
+ throw new LesgoException(
59
+ `Invalid type for '${key}', expecting collection of '${type}'`,
60
+ `${FILE}::INVALID_TYPE_${key.toUpperCase()}`,
61
+ 500,
62
+ { field, value: params[key] }
63
+ );
64
+ }
67
65
  }
68
66
 
69
- if (typeof params[field.key] !== 'undefined') {
70
- validated[field.key] = params[field.key];
67
+ (isCollection ? params[key] || [] : [params[key]]).forEach(paramsItem => {
68
+ if (
69
+ (type === 'string' &&
70
+ typeof paramsItem !== 'undefined' &&
71
+ typeof paramsItem !== 'string') ||
72
+ (type === 'object' &&
73
+ typeof paramsItem !== 'undefined' &&
74
+ typeof paramsItem !== 'object') ||
75
+ (type === 'number' &&
76
+ typeof paramsItem !== 'undefined' &&
77
+ typeof paramsItem !== 'number') ||
78
+ (type === 'decimal' &&
79
+ typeof paramsItem !== 'undefined' &&
80
+ !isDecimal(paramsItem)) ||
81
+ (type === 'email' &&
82
+ typeof paramsItem !== 'undefined' &&
83
+ !isEmail(paramsItem)) ||
84
+ (type === 'array' &&
85
+ typeof paramsItem !== 'undefined' &&
86
+ !Array.isArray(paramsItem)) ||
87
+ (type === 'enum' &&
88
+ typeof paramsItem !== 'undefined' &&
89
+ !enumValues.includes(paramsItem)) ||
90
+ (type === 'function' &&
91
+ typeof paramsItem !== 'undefined' &&
92
+ {}.toString.call(paramsItem) !== '[object Function]') ||
93
+ (type === 'json' &&
94
+ typeof paramsItem !== 'undefined' &&
95
+ !isValidJSON(paramsItem))
96
+ ) {
97
+ throw new LesgoException(
98
+ `Invalid type for '${key}', expecting ${
99
+ isCollection ? 'collection of ' : ''
100
+ }'${type}'`,
101
+ `${FILE}::INVALID_TYPE_${key.toUpperCase()}`,
102
+ 500,
103
+ { field, value: paramsItem }
104
+ );
105
+ }
106
+ });
107
+
108
+ if (typeof params[key] !== 'undefined') {
109
+ validated[key] = params[key];
71
110
  }
72
111
  });
73
112
 
74
113
  return validated;
75
114
  };
115
+
116
+ export default validateFields;