@mimik/configuration 5.0.12 → 6.0.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.
- package/README.md +2 -1
- package/eslint.config.js +63 -0
- package/index.js +195 -183
- package/lib/common.js +63 -61
- package/manual-test/test-config.js +47 -0
- package/manual-test/testEnv.js +21 -0
- package/package.json +15 -17
- package/.eslintrc +0 -43
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
## configuration
|
|
4
4
|
**Example**
|
|
5
5
|
```js
|
|
6
|
-
|
|
6
|
+
import config from '@mimik/configuration';
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
* [configuration](#module_configuration)
|
|
@@ -98,6 +98,7 @@ The following environement variables are being used for the configuration:
|
|
|
98
98
|
| MIT_AUDIENCE | audience of mIT | | dependencies.mIT.audience | [2]
|
|
99
99
|
| REGISTRATION_SET | swicht to enable user of registration | on | registration.set | can be `on` or `off`
|
|
100
100
|
| REGISTRATION_RETRY | retry time for registering to mIT | 3000 | registration.retry | in milliseconds
|
|
101
|
+
| REGISTRATION_AFTER_POSTOPS_SET | switch to set the registration of execution the postOps | off | registratiom.afterPostOpsSet | can be `on` or `off`
|
|
101
102
|
| `$_URL`.toUpperCase() | cluster information | self | dependencies.`(SERVER_TYPE)`.url | should not be used
|
|
102
103
|
| `${configuration.serverSettings.type}_AUDIENCE`.toUpperCase() | cluster information | | dependencies.`(SERVER_TYPE)`.audience | [2], but should not be used
|
|
103
104
|
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import importPlugin from 'eslint-plugin-import';
|
|
2
|
+
import js from '@eslint/js';
|
|
3
|
+
import processDoc from '@mimik/eslint-plugin-document-env';
|
|
4
|
+
import stylistic from '@stylistic/eslint-plugin';
|
|
5
|
+
|
|
6
|
+
const MAX_LENGTH_LINE = 180;
|
|
7
|
+
const MAX_FUNCTION_PARAMETERS = 6;
|
|
8
|
+
const MAX_LINES_IN_FILES = 600;
|
|
9
|
+
const MAX_LINES_IN_FUNCTION = 150;
|
|
10
|
+
const MAX_STATEMENTS_IN_FUNCTION = 45;
|
|
11
|
+
const MIN_KEYS_IN_OBJECT = 10;
|
|
12
|
+
const MAX_COMPLEXITY = 30;
|
|
13
|
+
|
|
14
|
+
export default [
|
|
15
|
+
{
|
|
16
|
+
ignores: ['mochawesome-report/**', 'node_modules/**', 'dist/**'],
|
|
17
|
+
},
|
|
18
|
+
importPlugin.flatConfigs.recommended,
|
|
19
|
+
stylistic.configs['recommended-flat'],
|
|
20
|
+
js.configs.all,
|
|
21
|
+
{
|
|
22
|
+
plugins: {
|
|
23
|
+
processDoc,
|
|
24
|
+
},
|
|
25
|
+
languageOptions: {
|
|
26
|
+
ecmaVersion: 2022,
|
|
27
|
+
globals: {
|
|
28
|
+
console: 'readonly',
|
|
29
|
+
describe: 'readonly',
|
|
30
|
+
it: 'readonly',
|
|
31
|
+
require: 'readonly',
|
|
32
|
+
},
|
|
33
|
+
sourceType: 'module',
|
|
34
|
+
},
|
|
35
|
+
rules: {
|
|
36
|
+
'@stylistic/brace-style': ['warn', 'stroustrup', { allowSingleLine: true }],
|
|
37
|
+
'@stylistic/line-comment-position': ['off'],
|
|
38
|
+
'@stylistic/semi': ['error', 'always'],
|
|
39
|
+
'capitalized-comments': ['off'],
|
|
40
|
+
'complexity': ['error', MAX_COMPLEXITY],
|
|
41
|
+
'curly': ['off'],
|
|
42
|
+
'id-length': ['error', { exceptions: ['x', 'y', 'z', 'i', 'j', 'k'] }],
|
|
43
|
+
'import/no-extraneous-dependencies': ['error', { devDependencies: true }],
|
|
44
|
+
'import/no-unresolved': ['error', { amd: true, caseSensitiveStrict: true, commonjs: true }],
|
|
45
|
+
'init-declarations': ['off'],
|
|
46
|
+
'linebreak-style': ['off'],
|
|
47
|
+
'max-len': ['warn', MAX_LENGTH_LINE, { ignoreComments: true }],
|
|
48
|
+
'max-lines': ['warn', { max: MAX_LINES_IN_FILES, skipComments: true }],
|
|
49
|
+
'max-lines-per-function': ['warn', { max: MAX_LINES_IN_FUNCTION, skipComments: true }],
|
|
50
|
+
'max-params': ['error', MAX_FUNCTION_PARAMETERS],
|
|
51
|
+
'max-statements': ['warn', MAX_STATEMENTS_IN_FUNCTION],
|
|
52
|
+
'no-confusing-arrow': ['off'], // arrow isnt confusing
|
|
53
|
+
'no-inline-comments': ['off'],
|
|
54
|
+
'no-process-env': ['error'],
|
|
55
|
+
'no-ternary': ['off'],
|
|
56
|
+
'no-undefined': ['off'],
|
|
57
|
+
'one-var': ['error', 'never'],
|
|
58
|
+
'processDoc/validate-document-env': ['error'],
|
|
59
|
+
'quotes': ['warn', 'single'],
|
|
60
|
+
'sort-keys': ['error', 'asc', { caseSensitive: true, minKeys: MIN_KEYS_IN_OBJECT, natural: false }],
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
];
|
package/index.js
CHANGED
|
@@ -1,106 +1,113 @@
|
|
|
1
1
|
/* eslint no-process-env: "off" */
|
|
2
|
-
|
|
3
|
-
const isNaN = require('lodash.isnan');
|
|
4
|
-
const isNil = require('lodash.isnil');
|
|
5
|
-
const isString = require('lodash.isstring');
|
|
6
|
-
const isUndefined = require('lodash.isundefined');
|
|
7
|
-
const split = require('lodash.split');
|
|
8
|
-
const trim = require('lodash.trim');
|
|
9
|
-
const fs = require('fs');
|
|
10
|
-
const ip = require('ip');
|
|
11
|
-
const uuid = require('uuid');
|
|
12
|
-
const querystring = require('querystring');
|
|
13
|
-
|
|
14
|
-
const logger = require('@mimik/sumologic-winston-logger');
|
|
15
|
-
const { getCorrelationId } = require('@mimik/request-helper');
|
|
16
|
-
const { userDefinitions } = require('@mimik/user-filters');
|
|
17
|
-
/**
|
|
18
|
-
* @module configuration
|
|
19
|
-
* @example
|
|
20
|
-
* const config = require('@mimik/configuration');
|
|
21
|
-
*/
|
|
22
|
-
|
|
23
|
-
const {
|
|
24
|
-
SUMOLOGIC,
|
|
25
|
-
AWS_S3,
|
|
2
|
+
import {
|
|
26
3
|
ALL,
|
|
27
|
-
|
|
28
|
-
SET_OFF,
|
|
29
|
-
NO_PUBLIC_PROVIDER,
|
|
30
|
-
NO_GENERIC,
|
|
31
|
-
ENV_VARIABLE,
|
|
32
|
-
REDIS_BASE_URL,
|
|
33
|
-
MONGO_BASE_URL,
|
|
34
|
-
MONGO_BASE_URL_SRV,
|
|
35
|
-
SWAGGER_EXT,
|
|
36
|
-
SWAGGER_SEP,
|
|
4
|
+
AWS_S3,
|
|
37
5
|
CUSTOMER_CODE_SEP,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
6
|
+
DEFAULT_ADMIN_EXTERNAL_ID,
|
|
7
|
+
DEFAULT_AWS_LOCAL_PROPERTIES,
|
|
8
|
+
DEFAULT_AWS_REGION,
|
|
9
|
+
DEFAULT_BITBUCKET_PASSWORD,
|
|
10
|
+
DEFAULT_BITBUCKET_USERNAME,
|
|
11
|
+
DEFAULT_CACHE_API_ID_TTL,
|
|
12
|
+
DEFAULT_CACHE_API_OPTION_TTL,
|
|
44
13
|
DEFAULT_CACHE_CONNECTION_TIMEOUT,
|
|
14
|
+
DEFAULT_CACHE_IP,
|
|
45
15
|
DEFAULT_CACHE_RECONNECTION_OFFSET,
|
|
46
|
-
DEFAULT_CACHE_VALIDATION_CHECK,
|
|
47
16
|
DEFAULT_CACHE_REQUEST_TTL,
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
DEFAULT_REDIS_SOCKET_KEEPALIVE,
|
|
55
|
-
DEFAULT_REDIS_DISABLE_OFFLINE_QUEUE,
|
|
56
|
-
DEFAULT_AWS_REGION,
|
|
57
|
-
DEFAULT_AWS_LOCAL_PROPERTIES,
|
|
58
|
-
DEFAULT_DYNAMODB_LOCAL_URL,
|
|
59
|
-
DEFAULT_DYNAMO_THROUGHPUT_READ,
|
|
60
|
-
DEFAULT_DYNAMO_THROUGHPUT_WRITE,
|
|
61
|
-
DEFAULT_DYNAMO_THROUGHPUT,
|
|
62
|
-
DEFAULT_MONGO_MAX_POOL_SIZE,
|
|
63
|
-
DEFAULT_MONGO_MIN_POOL_SIZE,
|
|
64
|
-
DEFAULT_MONGO_MAX_IDLE_TIME,
|
|
65
|
-
DEFAULT_MONGO_SOCKET_TIMEOUT,
|
|
66
|
-
DEFAULT_MONGO_FAMILY,
|
|
67
|
-
DEFAULT_MONGO_SERVER_SELECTION_TIMEOUT,
|
|
68
|
-
DEFAULT_MONGO_HEARTBEAT_FREQUENCY,
|
|
17
|
+
DEFAULT_CACHE_SET,
|
|
18
|
+
DEFAULT_CACHE_VALIDATION_CHECK,
|
|
19
|
+
DEFAULT_CLOUD_PROVIDER,
|
|
20
|
+
DEFAULT_CLUSTER_MANAGEMENT,
|
|
21
|
+
DEFAULT_CUSTOMER_CODE,
|
|
22
|
+
DEFAULT_DATABASE_CONNECTION_TIMEOUT,
|
|
69
23
|
DEFAULT_DATABASE_IP,
|
|
70
|
-
DEFAULT_DATABASE_USER,
|
|
71
24
|
DEFAULT_DATABASE_PASSWORD,
|
|
72
|
-
DEFAULT_DATABASE_CONNECTION_TIMEOUT,
|
|
73
25
|
DEFAULT_DATABASE_RECONNECTION_OFFSET,
|
|
26
|
+
DEFAULT_DATABASE_USER,
|
|
74
27
|
DEFAULT_DATABASE_VALIDATION_CHECK,
|
|
28
|
+
DEFAULT_DYNAMODB_LOCAL_URL,
|
|
29
|
+
DEFAULT_DYNAMO_THROUGHPUT,
|
|
30
|
+
DEFAULT_DYNAMO_THROUGHPUT_READ,
|
|
31
|
+
DEFAULT_DYNAMO_THROUGHPUT_WRITE,
|
|
75
32
|
DEFAULT_ENCRYPTION_SET,
|
|
33
|
+
DEFAULT_ENV,
|
|
34
|
+
DEFAULT_EXIT_DELAY,
|
|
35
|
+
DEFAULT_FILTER_FILE,
|
|
36
|
+
DEFAULT_INTERCEPT_ERROR,
|
|
76
37
|
DEFAULT_KMS_PROVIDER,
|
|
38
|
+
DEFAULT_LOCATION_PROVIDER,
|
|
77
39
|
DEFAULT_LOG_LEVEL,
|
|
78
|
-
|
|
79
|
-
|
|
40
|
+
DEFAULT_MONGO_FAMILY,
|
|
41
|
+
DEFAULT_MONGO_HEARTBEAT_FREQUENCY,
|
|
42
|
+
DEFAULT_MONGO_MAX_IDLE_TIME,
|
|
43
|
+
DEFAULT_MONGO_MAX_POOL_SIZE,
|
|
44
|
+
DEFAULT_MONGO_MIN_POOL_SIZE,
|
|
45
|
+
DEFAULT_MONGO_SERVER_SELECTION_TIMEOUT,
|
|
46
|
+
DEFAULT_MONGO_SOCKET_TIMEOUT,
|
|
80
47
|
DEFAULT_NO_STACK,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
DEFAULT_TOPIC_SET,
|
|
89
|
-
DEFAULT_REGISTRATION_SET,
|
|
48
|
+
DEFAULT_REDIS_DISABLE_OFFLINE_QUEUE,
|
|
49
|
+
DEFAULT_REDIS_RECONNECT_INTERVAL,
|
|
50
|
+
DEFAULT_REDIS_RECONNECT_TRIES,
|
|
51
|
+
DEFAULT_REDIS_REQUEST_MAX_MEMORY,
|
|
52
|
+
DEFAULT_REDIS_REQUEST_MAX_MEMORY_POLICY,
|
|
53
|
+
DEFAULT_REDIS_SOCKET_KEEPALIVE,
|
|
54
|
+
DEFAULT_REGISTRATION_AFTER_POSTOPS_SET,
|
|
90
55
|
DEFAULT_REGISTRATION_RETRY,
|
|
56
|
+
DEFAULT_REGISTRATION_SET,
|
|
91
57
|
DEFAULT_REQUEST_TIMEOUT,
|
|
92
|
-
|
|
58
|
+
DEFAULT_S3_AWS_MAX_EVENTS,
|
|
59
|
+
DEFAULT_S3_AWS_MAX_SIZE,
|
|
60
|
+
DEFAULT_S3_AWS_TIMEOUT,
|
|
93
61
|
DEFAULT_SERVER_PUBLIC_DOMAIN_NAME,
|
|
94
|
-
|
|
62
|
+
DEFAULT_SERVER_PUBLIC_PROTOCOL,
|
|
63
|
+
DEFAULT_SERVER_SECURITY_SET,
|
|
95
64
|
DEFAULT_SWAGGER_DIR,
|
|
96
65
|
DEFAULT_SWAGGER_FILE_PROVIDER,
|
|
66
|
+
DEFAULT_TOPIC_SET,
|
|
67
|
+
DEFAULT_USER_DEFINITIONS_FILE,
|
|
68
|
+
ENV_VARIABLE,
|
|
69
|
+
MONGO_BASE_URL,
|
|
70
|
+
MONGO_BASE_URL_SRV,
|
|
71
|
+
NO,
|
|
72
|
+
NO_GENERIC,
|
|
73
|
+
NO_PUBLIC_PROVIDER,
|
|
74
|
+
PRODUCTIONS,
|
|
75
|
+
REDIS_BASE_URL,
|
|
76
|
+
SET_OFF,
|
|
77
|
+
SET_ON,
|
|
78
|
+
SUMOLOGIC,
|
|
97
79
|
SUPPORTED_SWAGGER_FILE_PROVIDERS,
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
DEFAULT_BITBUCKET_PASSWORD,
|
|
80
|
+
SWAGGER_EXT,
|
|
81
|
+
SWAGGER_SEP,
|
|
101
82
|
YES,
|
|
102
|
-
|
|
103
|
-
|
|
83
|
+
} from './lib/common.js';
|
|
84
|
+
import fs from 'fs';
|
|
85
|
+
import { getCorrelationId } from '@mimik/request-helper';
|
|
86
|
+
import includes from 'lodash.includes';
|
|
87
|
+
import ip from 'ip';
|
|
88
|
+
import isNaN from 'lodash.isnan';
|
|
89
|
+
import isNil from 'lodash.isnil';
|
|
90
|
+
import isString from 'lodash.isstring';
|
|
91
|
+
import isUndefined from 'lodash.isundefined';
|
|
92
|
+
import logger from '@mimik/sumologic-winston-logger';
|
|
93
|
+
import process from 'process';
|
|
94
|
+
import querystring from 'querystring';
|
|
95
|
+
import split from 'lodash.split';
|
|
96
|
+
import trim from 'lodash.trim';
|
|
97
|
+
import { userDefinitions } from '@mimik/user-filters';
|
|
98
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
99
|
+
|
|
100
|
+
const DECIMAL = 10;
|
|
101
|
+
const AT_LEAST_ONE = 0;
|
|
102
|
+
const SOME_KEYS = 0;
|
|
103
|
+
const SOME_ERRORS = 0;
|
|
104
|
+
const NO_KEY = 0;
|
|
105
|
+
const ISSUE_EXIT = 1;
|
|
106
|
+
/**
|
|
107
|
+
* @module configuration
|
|
108
|
+
* @example
|
|
109
|
+
* import config from '@mimik/configuration';
|
|
110
|
+
*/
|
|
104
111
|
|
|
105
112
|
let display = true;
|
|
106
113
|
const locParams = [NO_PUBLIC_PROVIDER, ENV_VARIABLE];
|
|
@@ -111,8 +118,8 @@ const setupRedis = () => {
|
|
|
111
118
|
const domain = process.env.CACHE_IP || DEFAULT_CACHE_IP;
|
|
112
119
|
const username = process.env.CACHE_USER;
|
|
113
120
|
const password = process.env.CACHE_PASSWORD;
|
|
114
|
-
const reconnectTries = parseInt(process.env.REDIS_RECONNECT_TRIES,
|
|
115
|
-
const reconnectInterval = parseInt(process.env.REDIS_RECONNECT_INTERVAL,
|
|
121
|
+
const reconnectTries = parseInt(process.env.REDIS_RECONNECT_TRIES, DECIMAL) || DEFAULT_REDIS_RECONNECT_TRIES;
|
|
122
|
+
const reconnectInterval = parseInt(process.env.REDIS_RECONNECT_INTERVAL, DECIMAL) || DEFAULT_REDIS_RECONNECT_INTERVAL;
|
|
116
123
|
let url = REDIS_BASE_URL;
|
|
117
124
|
let noAuthUrl = url;
|
|
118
125
|
if (username && password) url += `${username}:${password}@`;
|
|
@@ -126,26 +133,25 @@ const setupRedis = () => {
|
|
|
126
133
|
};
|
|
127
134
|
|
|
128
135
|
return {
|
|
136
|
+
api: {
|
|
137
|
+
idTTL: parseInt(process.env.CACHE_API_ID_TTL, DECIMAL) || DEFAULT_CACHE_API_ID_TTL,
|
|
138
|
+
optionTTL: parseInt(process.env.CACHE_API_OPTION_TTL, DECIMAL) || DEFAULT_CACHE_API_OPTION_TTL,
|
|
139
|
+
},
|
|
140
|
+
cluster: clusterConfig,
|
|
141
|
+
connectTimeout: parseInt(process.env.CACHE_CONNECTION_TIMEOUT, DECIMAL) || DEFAULT_CACHE_CONNECTION_TIMEOUT,
|
|
129
142
|
domain,
|
|
130
|
-
username,
|
|
131
|
-
password,
|
|
132
|
-
connectTimeout: parseInt(process.env.CACHE_CONNECTION_TIMEOUT, 10) || DEFAULT_CACHE_CONNECTION_TIMEOUT,
|
|
133
|
-
validationCheck: parseInt(process.env.CACHE_VALIDATION_CHECK, 10) || DEFAULT_CACHE_VALIDATION_CHECK,
|
|
134
|
-
reconnectOffset: parseInt(process.env.CACHE_RECONNECTION_OFFSET, 10) || DEFAULT_CACHE_RECONNECTION_OFFSET,
|
|
135
|
-
url,
|
|
136
143
|
noAuthUrl,
|
|
137
|
-
cluster: clusterConfig,
|
|
138
144
|
options: {
|
|
139
145
|
socket: {
|
|
140
146
|
keepAlive: process.env.REDIS_SOCKET_KEEPALIVE || DEFAULT_REDIS_SOCKET_KEEPALIVE,
|
|
141
|
-
reconnectStrategy: function
|
|
142
|
-
if (opts.timesConnected >
|
|
147
|
+
reconnectStrategy: function reconnectStrategy(opts) {
|
|
148
|
+
if (opts.timesConnected > AT_LEAST_ONE && opts.attempt < reconnectTries) {
|
|
143
149
|
return reconnectInterval;
|
|
144
150
|
}
|
|
145
151
|
if (opts.error && opts.error.code === 'ECONNREFUSED') {
|
|
146
152
|
if (display) {
|
|
147
153
|
logger.error('Fatal error: Could not connect to cache', { type: 'redis', error: opts.error.code }, `redis-cache-start@0/${new Date().toISOString()}`);
|
|
148
|
-
logger.flushAndExit(
|
|
154
|
+
logger.flushAndExit(ISSUE_EXIT);
|
|
149
155
|
}
|
|
150
156
|
display = false;
|
|
151
157
|
}
|
|
@@ -156,34 +162,35 @@ const setupRedis = () => {
|
|
|
156
162
|
maxMemory: process.env.REDIS_REQUEST_MAX_MEMORY || DEFAULT_REDIS_REQUEST_MAX_MEMORY,
|
|
157
163
|
maxMemoryPolicy: process.env.REDIS_REQUEST_MAX_MEMORY_POLICY || DEFAULT_REDIS_REQUEST_MAX_MEMORY_POLICY,
|
|
158
164
|
},
|
|
165
|
+
password,
|
|
166
|
+
reconnectOffset: parseInt(process.env.CACHE_RECONNECTION_OFFSET, DECIMAL) || DEFAULT_CACHE_RECONNECTION_OFFSET,
|
|
167
|
+
request: {
|
|
168
|
+
TTL: parseInt(process.env.CACHE_REQUEST_TTL, DECIMAL) || DEFAULT_CACHE_REQUEST_TTL,
|
|
169
|
+
},
|
|
159
170
|
retryStrategyOptions: {
|
|
160
171
|
reconnectTries,
|
|
161
172
|
reconnectInterval,
|
|
162
173
|
},
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
api: {
|
|
167
|
-
idTTL: parseInt(process.env.CACHE_API_ID_TTL, 10) || DEFAULT_CACHE_API_ID_TTL,
|
|
168
|
-
optionTTL: parseInt(process.env.CACHE_API_OPTION_TTL, 10) || DEFAULT_CACHE_API_OPTION_TTL,
|
|
169
|
-
},
|
|
174
|
+
url,
|
|
175
|
+
username,
|
|
176
|
+
validationCheck: parseInt(process.env.CACHE_VALIDATION_CHECK, DECIMAL) || DEFAULT_CACHE_VALIDATION_CHECK,
|
|
170
177
|
};
|
|
171
178
|
};
|
|
172
179
|
|
|
173
180
|
const setupDynamo = (dbOpts) => {
|
|
174
181
|
const dbConfig = {
|
|
175
|
-
connectTimeout: parseInt(process.env.DATABASE_CONNECTION_TIMEOUT,
|
|
176
|
-
validationCheck: parseInt(process.env.DATABASE_VALIDATION_CHECK,
|
|
177
|
-
reconnectOffset: parseInt(process.env.DATABASE_RECONNECTION_OFFSET,
|
|
182
|
+
connectTimeout: parseInt(process.env.DATABASE_CONNECTION_TIMEOUT, DECIMAL) || DEFAULT_DATABASE_CONNECTION_TIMEOUT,
|
|
183
|
+
validationCheck: parseInt(process.env.DATABASE_VALIDATION_CHECK, DECIMAL) || DEFAULT_DATABASE_VALIDATION_CHECK,
|
|
184
|
+
reconnectOffset: parseInt(process.env.DATABASE_RECONNECTION_OFFSET, DECIMAL) || DEFAULT_DATABASE_RECONNECTION_OFFSET,
|
|
178
185
|
region: process.env.DYNAMODB_AWS_REGION || DEFAULT_AWS_REGION,
|
|
179
186
|
url: process.env.DYNAMODB_LOCAL_URL || DEFAULT_DYNAMODB_LOCAL_URL,
|
|
180
187
|
throughput: {
|
|
181
|
-
read: parseInt(process.env.DYNAMO_THROUGHPUT_READ,
|
|
182
|
-
write: parseInt(process.env.DYNAMO_THROUGHPUT_WRITE,
|
|
188
|
+
read: parseInt(process.env.DYNAMO_THROUGHPUT_READ, DECIMAL) || DEFAULT_DYNAMO_THROUGHPUT_READ,
|
|
189
|
+
write: parseInt(process.env.DYNAMO_THROUGHPUT_WRITE, DECIMAL) || DEFAULT_DYNAMO_THROUGHPUT_WRITE,
|
|
183
190
|
},
|
|
184
191
|
schemaThroughput: {
|
|
185
|
-
read: parseInt(process.env.DYNAMO_SCHEMA_THROUGHPUT_READ,
|
|
186
|
-
write: parseInt(process.env.DYNAMO_SCHEMA_THROUGHPUT_WRITE,
|
|
192
|
+
read: parseInt(process.env.DYNAMO_SCHEMA_THROUGHPUT_READ, DECIMAL) || DEFAULT_DYNAMO_THROUGHPUT_READ,
|
|
193
|
+
write: parseInt(process.env.DYNAMO_SCHEMA_THROUGHPUT_WRITE, DECIMAL) || DEFAULT_DYNAMO_THROUGHPUT_WRITE,
|
|
187
194
|
},
|
|
188
195
|
tableName: dbOpts.table,
|
|
189
196
|
};
|
|
@@ -195,7 +202,7 @@ const setupDynamo = (dbOpts) => {
|
|
|
195
202
|
delete dbConfig.throughput;
|
|
196
203
|
}
|
|
197
204
|
else if (!isNil(process.env.DYNAMO_SCHEMA_THROUGHPUT)) {
|
|
198
|
-
const throughput = parseInt(process.env.DYNAMO_SCHEMA_THROUGHPUT,
|
|
205
|
+
const throughput = parseInt(process.env.DYNAMO_SCHEMA_THROUGHPUT, DECIMAL);
|
|
199
206
|
|
|
200
207
|
if (isNil(throughput) || isNaN(throughput)) dbConfig.schemaThroughput = DEFAULT_DYNAMO_THROUGHPUT;
|
|
201
208
|
else dbConfig.schemaThroughput = throughput;
|
|
@@ -207,9 +214,9 @@ const setupMongo = (dbOpts) => {
|
|
|
207
214
|
const processStringOptions = () => {
|
|
208
215
|
// default string variables
|
|
209
216
|
const stringOptions = {
|
|
210
|
-
maxPoolSize: parseInt(process.env.MONGO_MAX_POOL_SIZE,
|
|
211
|
-
minPoolSize: parseInt(process.env.MONGO_MIN_POOL_SIZE,
|
|
212
|
-
maxIdleTimeMS: parseInt(process.env.MONGO_MAX_IDLE_TIME,
|
|
217
|
+
maxPoolSize: parseInt(process.env.MONGO_MAX_POOL_SIZE, DECIMAL) || DEFAULT_MONGO_MAX_POOL_SIZE,
|
|
218
|
+
minPoolSize: parseInt(process.env.MONGO_MIN_POOL_SIZE, DECIMAL) || DEFAULT_MONGO_MIN_POOL_SIZE,
|
|
219
|
+
maxIdleTimeMS: parseInt(process.env.MONGO_MAX_IDLE_TIME, DECIMAL) || DEFAULT_MONGO_MAX_IDLE_TIME,
|
|
213
220
|
};
|
|
214
221
|
// string variables without default
|
|
215
222
|
if (process.env.MONGO_SSL === YES) stringOptions.ssl = true; // default value of mongo driver is false
|
|
@@ -218,10 +225,11 @@ const setupMongo = (dbOpts) => {
|
|
|
218
225
|
// if (process.env.MONGO_SSL_CA) stringOptions.sslCA = process.env.MONGO_SSL_CA; // commented out for now as we're not using a pem file at the moment
|
|
219
226
|
if (process.env.MONGO_REPLICAT_SET) stringOptions.replicaSet = process.env.MONGO_REPLICAT_SET;
|
|
220
227
|
if (process.env.MONGO_AUTH_DATABASE) stringOptions.authSource = process.env.MONGO_AUTH_DATABASE;
|
|
228
|
+
// eslint-disable-next-line id-length
|
|
221
229
|
if (process.env.MONGO_WRITE_CONCERN) stringOptions.w = process.env.MONGO_WRITE_CONCERN;
|
|
222
230
|
if (process.env.MONGO_RETRY_WRITES) stringOptions.retryWrites = process.env.MONGO_RETRY_WRITES;
|
|
223
|
-
if (process.env.MONGO_WAIT_QUEUE_MULTIPLE) stringOptions.waitQueueMultiple = parseInt(process.env.MONGO_WAIT_QUEUE_MULTIPLE,
|
|
224
|
-
if (process.env.MONGO_WAIT_QUEUE_TIMEOUT) stringOptions.waitQueueTimeoutMS = parseInt(process.env.MONGO_WAIT_QUEUE_TIMEOUT,
|
|
231
|
+
if (process.env.MONGO_WAIT_QUEUE_MULTIPLE) stringOptions.waitQueueMultiple = parseInt(process.env.MONGO_WAIT_QUEUE_MULTIPLE, DECIMAL);
|
|
232
|
+
if (process.env.MONGO_WAIT_QUEUE_TIMEOUT) stringOptions.waitQueueTimeoutMS = parseInt(process.env.MONGO_WAIT_QUEUE_TIMEOUT, DECIMAL); // in ms
|
|
225
233
|
return stringOptions ? querystring.stringify(stringOptions) : null;
|
|
226
234
|
};
|
|
227
235
|
const database = process.env.DATABASE_NAME;
|
|
@@ -243,24 +251,24 @@ const setupMongo = (dbOpts) => {
|
|
|
243
251
|
noAuthUrl = `${noAuthUrl}?${qs}`;
|
|
244
252
|
}
|
|
245
253
|
return {
|
|
246
|
-
|
|
254
|
+
connectTimeout: parseInt(process.env.DATABASE_CONNECTION_TIMEOUT, DECIMAL) || DEFAULT_DATABASE_CONNECTION_TIMEOUT,
|
|
247
255
|
database,
|
|
248
|
-
|
|
256
|
+
domain,
|
|
257
|
+
noAuthUrl,
|
|
258
|
+
options: {
|
|
259
|
+
family: parseInt(process.env.MONGO_FAMILY, DECIMAL) || DEFAULT_MONGO_FAMILY,
|
|
260
|
+
socketTimeoutMS: parseInt(process.env.MONGO_SOCKET_TIMEOUT, DECIMAL) || DEFAULT_MONGO_SOCKET_TIMEOUT,
|
|
261
|
+
serverSelectionTimeoutMS: parseInt(process.env.MONGO_SERVER_SELECTION_TIMEOUT, DECIMAL) || DEFAULT_MONGO_SERVER_SELECTION_TIMEOUT,
|
|
262
|
+
heartbeatFrequencyMS: parseInt(process.env.MONGO_HEARTBEAT_FREQUENCY, DECIMAL) || DEFAULT_MONGO_HEARTBEAT_FREQUENCY,
|
|
263
|
+
},
|
|
249
264
|
password,
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
reconnectOffset: parseInt(process.env.DATABASE_RECONNECTION_OFFSET, 10) || DEFAULT_DATABASE_RECONNECTION_OFFSET,
|
|
253
|
-
replicat: !!process.env.MONGO_REPLICAT_SET,
|
|
265
|
+
reconnectOffset: parseInt(process.env.DATABASE_RECONNECTION_OFFSET, DECIMAL) || DEFAULT_DATABASE_RECONNECTION_OFFSET,
|
|
266
|
+
replicat: Boolean(process.env.MONGO_REPLICAT_SET),
|
|
254
267
|
stringOptions: qs,
|
|
255
268
|
table: dbOpts.table,
|
|
256
269
|
url,
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
family: parseInt(process.env.MONGO_FAMILY, 10) || DEFAULT_MONGO_FAMILY,
|
|
260
|
-
socketTimeoutMS: parseInt(process.env.MONGO_SOCKET_TIMEOUT, 10) || DEFAULT_MONGO_SOCKET_TIMEOUT,
|
|
261
|
-
serverSelectionTimeoutMS: parseInt(process.env.MONGO_SERVER_SELECTION_TIMEOUT, 10) || DEFAULT_MONGO_SERVER_SELECTION_TIMEOUT,
|
|
262
|
-
heartbeatFrequencyMS: parseInt(process.env.MONGO_HEARTBEAT_FREQUENCY, 10) || DEFAULT_MONGO_HEARTBEAT_FREQUENCY,
|
|
263
|
-
},
|
|
270
|
+
user,
|
|
271
|
+
validationCheck: parseInt(process.env.DATABASE_VALIDATION_CHECK, DECIMAL) || DEFAULT_DATABASE_VALIDATION_CHECK,
|
|
264
272
|
};
|
|
265
273
|
};
|
|
266
274
|
|
|
@@ -283,7 +291,7 @@ const setupLog = () => {
|
|
|
283
291
|
log: process.env.LOG_LEVEL || DEFAULT_LOG_LEVEL,
|
|
284
292
|
},
|
|
285
293
|
filterFile: process.env.FILTER_FILE || DEFAULT_FILTER_FILE,
|
|
286
|
-
exitDelay: parseInt(process.env.EXIT_DELAY,
|
|
294
|
+
exitDelay: parseInt(process.env.EXIT_DELAY, DECIMAL) || DEFAULT_EXIT_DELAY,
|
|
287
295
|
noStack: process.env.NO_STACK || DEFAULT_NO_STACK,
|
|
288
296
|
};
|
|
289
297
|
|
|
@@ -297,9 +305,9 @@ const setupLog = () => {
|
|
|
297
305
|
logInfo[AWS_S3] = {
|
|
298
306
|
region: process.env.S3_AWS_REGION,
|
|
299
307
|
bucketname: process.env.S3_AWS_BUCKET_NAME,
|
|
300
|
-
timeout: parseInt(process.env.S3_AWS_TIMEOUT,
|
|
301
|
-
maxSize: parseInt(process.env.S3_AWS_MAX_SIZE,
|
|
302
|
-
maxEvents: parseInt(process.env.S3_AWS_MAX_EVENTS,
|
|
308
|
+
timeout: parseInt(process.env.S3_AWS_TIMEOUT, DECIMAL) || DEFAULT_S3_AWS_TIMEOUT,
|
|
309
|
+
maxSize: parseInt(process.env.S3_AWS_MAX_SIZE, DECIMAL) || DEFAULT_S3_AWS_MAX_SIZE,
|
|
310
|
+
maxEvents: parseInt(process.env.S3_AWS_MAX_EVENTS, DECIMAL) || DEFAULT_S3_AWS_MAX_EVENTS,
|
|
303
311
|
};
|
|
304
312
|
if (!isNil(process.env.S3_AWS_ACCESS_KEY_ID)) logInfo[AWS_S3].accessKeyId = process.env.S3_AWS_ACCESS_KEY_ID;
|
|
305
313
|
if (!isNil(process.env.S3_AWS_SECRET_ACCESS_KEY)) logInfo[AWS_S3].secretAccessKey = process.env.S3_AWS_SECRET_ACCESS_KEY;
|
|
@@ -340,7 +348,7 @@ const setupEncryption = (encryptionOpts) => {
|
|
|
340
348
|
}
|
|
341
349
|
else encryptionConfig.localMasterKey = process.env.LOCAL_MASTER_KEY;
|
|
342
350
|
|
|
343
|
-
if (Object.keys(encryptionOpts.keys).length >
|
|
351
|
+
if (Object.keys(encryptionOpts.keys).length > SOME_KEYS) encryptionConfig.keys = encryptionOpts.keys;
|
|
344
352
|
|
|
345
353
|
return encryptionConfig;
|
|
346
354
|
};
|
|
@@ -349,7 +357,9 @@ const setupUserDefinitions = (definitions) => {
|
|
|
349
357
|
const userDefinitionsFile = definitions.file;
|
|
350
358
|
let customDefinitions = {};
|
|
351
359
|
if (userDefinitionsFile && userDefinitionsFile !== DEFAULT_USER_DEFINITIONS_FILE) {
|
|
352
|
-
try {
|
|
360
|
+
try {
|
|
361
|
+
customDefinitions = JSON.parse(fs.readFileSync(userDefinitionsFile).toString());
|
|
362
|
+
}
|
|
353
363
|
catch (err) {
|
|
354
364
|
throw new Error(`Invalid file for user definitions: ${userDefinitionsFile}, error: ${err.message}`);
|
|
355
365
|
}
|
|
@@ -364,20 +374,20 @@ const setupUserDefinitions = (definitions) => {
|
|
|
364
374
|
const checkConfig = (config) => {
|
|
365
375
|
const errors = [];
|
|
366
376
|
|
|
367
|
-
|
|
377
|
+
const traverseNodeSync = (node, path) => {
|
|
368
378
|
Object.keys(node).forEach((prop) => {
|
|
369
379
|
if (typeof node[prop] === 'object' && node[prop]) {
|
|
370
380
|
traverseNodeSync(node[prop], `${path}.${prop}`);
|
|
371
381
|
}
|
|
372
382
|
else if (isUndefined(node[prop])) errors.push({ reason: 'missing', value: `${path}.${prop}` });
|
|
373
383
|
});
|
|
374
|
-
}
|
|
384
|
+
};
|
|
375
385
|
|
|
376
386
|
traverseNodeSync(config, 'configuration');
|
|
377
387
|
// dependency errors
|
|
378
|
-
if (!isMSTSet && config.security.apiKeys.length ===
|
|
388
|
+
if (!isMSTSet && config.security.apiKeys.length === NO_KEY) errors.push({ reason: 'invalid', value: 'config.security.apiKeys', cause: 'isMSTSet' });
|
|
379
389
|
|
|
380
|
-
if (errors.length >
|
|
390
|
+
if (errors.length > SOME_ERRORS) {
|
|
381
391
|
const error = new Error('Errors in configuration');
|
|
382
392
|
|
|
383
393
|
logger.error(error, { errors }, correlationIdStart);
|
|
@@ -405,30 +415,35 @@ const isProd = () => {
|
|
|
405
415
|
|
|
406
416
|
process.env.SERVER_LOCAL_IPV4 = ip.address();
|
|
407
417
|
process.env.AWS_LOCAL_PROPERTIES = DEFAULT_AWS_LOCAL_PROPERTIES;
|
|
408
|
-
process.env.CONSOLE_LEVEL
|
|
409
|
-
process.env.LOG_LEVEL
|
|
410
|
-
process.env.SERVER_ID
|
|
418
|
+
process.env.CONSOLE_LEVEL ||= DEFAULT_LOG_LEVEL;
|
|
419
|
+
process.env.LOG_LEVEL ||= DEFAULT_LOG_LEVEL;
|
|
420
|
+
process.env.SERVER_ID ||= uuidv4();
|
|
411
421
|
|
|
412
422
|
const configuration = {
|
|
413
|
-
|
|
414
|
-
|
|
423
|
+
cache: {
|
|
424
|
+
set: process.env.CACHE_SET || DEFAULT_CACHE_SET,
|
|
425
|
+
},
|
|
415
426
|
cloudProvider: process.env.CLOUD_PROVIDER || DEFAULT_CLOUD_PROVIDER,
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
ip: {
|
|
425
|
-
local: process.env.SERVER_LOCAL_IPV4,
|
|
426
|
-
},
|
|
427
|
-
public: {
|
|
428
|
-
protocol: process.env.SERVER_PUBLIC_PROTOCOL || DEFAULT_SERVER_PUBLIC_PROTOCOL,
|
|
429
|
-
domainName: process.env.SERVER_PUBLIC_DOMAIN_NAME || DEFAULT_SERVER_PUBLIC_DOMAIN_NAME,
|
|
427
|
+
cluster: {
|
|
428
|
+
management: process.env.CLUSTER_MANAGEMENT || DEFAULT_CLUSTER_MANAGEMENT,
|
|
429
|
+
timeout: parseInt(process.env.REQUEST_TIMEOUT, DECIMAL) || DEFAULT_REQUEST_TIMEOUT,
|
|
430
|
+
},
|
|
431
|
+
dependencies: {
|
|
432
|
+
mIT: {
|
|
433
|
+
url: process.env.MIT_URL,
|
|
434
|
+
audience: process.env.MIT_AUDIENCE,
|
|
430
435
|
},
|
|
431
436
|
},
|
|
437
|
+
encryption: {
|
|
438
|
+
set: process.env.ENCRYPTION_SET || DEFAULT_ENCRYPTION_SET,
|
|
439
|
+
},
|
|
440
|
+
locationProvider: process.env.LOCATION_PROVIDER || DEFAULT_LOCATION_PROVIDER,
|
|
441
|
+
nodeEnvironment: process.env.NODE_ENV || DEFAULT_ENV,
|
|
442
|
+
registration: {
|
|
443
|
+
set: process.env.REGISTRATION_SET || DEFAULT_REGISTRATION_SET,
|
|
444
|
+
retry: parseInt(process.env.REGISTRATION_RETRY, DECIMAL) || DEFAULT_REGISTRATION_RETRY,
|
|
445
|
+
afterPostOpsSet: process.env.REGISTRATION_AFTER_POSTOPS_SET || DEFAULT_REGISTRATION_AFTER_POSTOPS_SET,
|
|
446
|
+
},
|
|
432
447
|
security: {
|
|
433
448
|
admin: {
|
|
434
449
|
externalId: process.env.ADMIN_EXTERNAL_ID || DEFAULT_ADMIN_EXTERNAL_ID,
|
|
@@ -444,33 +459,29 @@ const configuration = {
|
|
|
444
459
|
key: process.env.OAUTH_GENERIC_KEY || NO_GENERIC,
|
|
445
460
|
audience: process.env.OAUTH_GENERIC_AUDIENCE || NO_GENERIC,
|
|
446
461
|
},
|
|
447
|
-
apiKeys: process.env.API_KEYS ? split(trim(process.env.API_KEYS), /\s*,\s*/) : [],
|
|
448
|
-
},
|
|
449
|
-
cluster: {
|
|
450
|
-
management: process.env.CLUSTER_MANAGEMENT || DEFAULT_CLUSTER_MANAGEMENT,
|
|
451
|
-
timeout: parseInt(process.env.REQUEST_TIMEOUT, 10) || DEFAULT_REQUEST_TIMEOUT,
|
|
452
|
-
},
|
|
453
|
-
cache: {
|
|
454
|
-
set: process.env.CACHE_SET || DEFAULT_CACHE_SET,
|
|
462
|
+
apiKeys: process.env.API_KEYS ? split(trim(process.env.API_KEYS), /\s*,\s*/u) : [],
|
|
455
463
|
},
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
464
|
+
serverSettings: {
|
|
465
|
+
id: process.env.SERVER_ID,
|
|
466
|
+
customerCode: process.env.CUSTOMER_CODE || DEFAULT_CUSTOMER_CODE,
|
|
467
|
+
customerCodeSep: process.env.CUSTOMER_CODE ? CUSTOMER_CODE_SEP : '',
|
|
468
|
+
securitySet: process.env.SERVER_SECURITY_SET || DEFAULT_SERVER_SECURITY_SET,
|
|
469
|
+
isMSTSet,
|
|
470
|
+
port: parseInt(process.env.SERVER_PORT, DECIMAL),
|
|
471
|
+
interceptError: process.env.INTERCEPT_ERROR || DEFAULT_INTERCEPT_ERROR,
|
|
472
|
+
ip: {
|
|
473
|
+
local: process.env.SERVER_LOCAL_IPV4,
|
|
474
|
+
},
|
|
475
|
+
public: {
|
|
476
|
+
protocol: process.env.SERVER_PUBLIC_PROTOCOL || DEFAULT_SERVER_PUBLIC_PROTOCOL,
|
|
477
|
+
domainName: process.env.SERVER_PUBLIC_DOMAIN_NAME || DEFAULT_SERVER_PUBLIC_DOMAIN_NAME,
|
|
478
|
+
},
|
|
461
479
|
},
|
|
462
480
|
topic: {
|
|
463
481
|
set: process.env.TOPIC_SET || DEFAULT_TOPIC_SET,
|
|
464
482
|
},
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
url: process.env.MIT_URL,
|
|
468
|
-
audience: process.env.MIT_AUDIENCE,
|
|
469
|
-
},
|
|
470
|
-
},
|
|
471
|
-
registration: {
|
|
472
|
-
set: process.env.REGISTRATION_SET || DEFAULT_REGISTRATION_SET,
|
|
473
|
-
retry: parseInt(process.env.REGISTRATION_RETRY, 10) || DEFAULT_REGISTRATION_RETRY,
|
|
483
|
+
userDefinitions: {
|
|
484
|
+
file: process.env.USER_DEFINITIONS_FILE || DEFAULT_USER_DEFINITIONS_FILE,
|
|
474
485
|
},
|
|
475
486
|
};
|
|
476
487
|
|
|
@@ -568,6 +579,7 @@ configuration.locationProvider = setupLocationProvider();
|
|
|
568
579
|
* | MIT_AUDIENCE | audience of mIT | | dependencies.mIT.audience | [2]
|
|
569
580
|
* | REGISTRATION_SET | swicht to enable user of registration | on | registration.set | can be `on` or `off`
|
|
570
581
|
* | REGISTRATION_RETRY | retry time for registering to mIT | 3000 | registration.retry | in milliseconds
|
|
582
|
+
* | REGISTRATION_AFTER_POSTOPS_SET | switch to set the registration of execution the postOps | off | registratiom.afterPostOpsSet | can be `on` or `off`
|
|
571
583
|
* | `${configuration.serverSettings.type}_URL`.toUpperCase() | cluster information | self | dependencies.`(SERVER_TYPE)`.url | should not be used
|
|
572
584
|
* | `${configuration.serverSettings.type}_AUDIENCE`.toUpperCase() | cluster information | | dependencies.`(SERVER_TYPE)`.audience | [2], but should not be used
|
|
573
585
|
*
|
|
@@ -778,21 +790,21 @@ const setConfig = (pack, options) => {
|
|
|
778
790
|
}
|
|
779
791
|
if (options.security) {
|
|
780
792
|
Object.keys(options.security).forEach((securityItem) => {
|
|
781
|
-
if (
|
|
782
|
-
configuration.security[securityItem] = options.security[securityItem];
|
|
783
|
-
}
|
|
784
|
-
else {
|
|
793
|
+
if (configuration.security[securityItem]) {
|
|
785
794
|
Object.keys(options.security[securityItem]).forEach((subSecurityItem) => {
|
|
786
795
|
configuration.security[securityItem][subSecurityItem] = options.security[securityItem][subSecurityItem];
|
|
787
796
|
});
|
|
788
797
|
}
|
|
798
|
+
else {
|
|
799
|
+
configuration.security[securityItem] = options.security[securityItem];
|
|
800
|
+
}
|
|
789
801
|
});
|
|
790
802
|
}
|
|
791
803
|
checkConfig(configuration);
|
|
792
804
|
return configuration;
|
|
793
805
|
};
|
|
794
806
|
|
|
795
|
-
|
|
807
|
+
export {
|
|
796
808
|
setConfig,
|
|
797
809
|
isProd,
|
|
798
810
|
};
|
package/lib/common.js
CHANGED
|
@@ -81,6 +81,7 @@ const DEFAULT_CLUSTER_MANAGEMENT = SET_OFF;
|
|
|
81
81
|
const DEFAULT_CACHE_SET = SET_OFF;
|
|
82
82
|
const DEFAULT_TOPIC_SET = SET_OFF;
|
|
83
83
|
const DEFAULT_REGISTRATION_SET = SET_ON;
|
|
84
|
+
const DEFAULT_REGISTRATION_AFTER_POSTOPS_SET = SET_OFF;
|
|
84
85
|
const DEFAULT_INTERCEPT_ERROR = SET_ON;
|
|
85
86
|
|
|
86
87
|
const DEFAULT_REGISTRATION_RETRY = 3000; // in ms
|
|
@@ -98,84 +99,85 @@ const SUPPORTED_SWAGGER_FILE_PROVIDERS = [DEFAULT_SWAGGER_FILE_PROVIDER, 'swagge
|
|
|
98
99
|
const DEFAULT_BITBUCKET_USERNAME = ' ';
|
|
99
100
|
const DEFAULT_BITBUCKET_PASSWORD = ' ';
|
|
100
101
|
|
|
101
|
-
|
|
102
|
-
SUMOLOGIC,
|
|
103
|
-
AWS_S3,
|
|
102
|
+
export {
|
|
104
103
|
ALL,
|
|
105
|
-
|
|
106
|
-
SET_OFF,
|
|
107
|
-
YES,
|
|
108
|
-
NO,
|
|
104
|
+
AWS_S3,
|
|
109
105
|
CUSTOMER_CODE_SEP,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
SWAGGER_EXT,
|
|
118
|
-
SWAGGER_SEP,
|
|
119
|
-
PRODUCTIONS,
|
|
120
|
-
DEFAULT_ENV,
|
|
121
|
-
DEFAULT_LOCATION_PROVIDER,
|
|
122
|
-
DEFAULT_CLOUD_PROVIDER,
|
|
123
|
-
DEFAULT_CACHE_IP,
|
|
106
|
+
DEFAULT_ADMIN_EXTERNAL_ID,
|
|
107
|
+
DEFAULT_AWS_LOCAL_PROPERTIES,
|
|
108
|
+
DEFAULT_AWS_REGION,
|
|
109
|
+
DEFAULT_BITBUCKET_PASSWORD,
|
|
110
|
+
DEFAULT_BITBUCKET_USERNAME,
|
|
111
|
+
DEFAULT_CACHE_API_ID_TTL,
|
|
112
|
+
DEFAULT_CACHE_API_OPTION_TTL,
|
|
124
113
|
DEFAULT_CACHE_CONNECTION_TIMEOUT,
|
|
114
|
+
DEFAULT_CACHE_IP,
|
|
125
115
|
DEFAULT_CACHE_RECONNECTION_OFFSET,
|
|
126
|
-
DEFAULT_CACHE_VALIDATION_CHECK,
|
|
127
116
|
DEFAULT_CACHE_REQUEST_TTL,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
DEFAULT_REDIS_SOCKET_KEEPALIVE,
|
|
135
|
-
DEFAULT_REDIS_DISABLE_OFFLINE_QUEUE,
|
|
136
|
-
DEFAULT_AWS_REGION,
|
|
137
|
-
DEFAULT_AWS_LOCAL_PROPERTIES,
|
|
138
|
-
DEFAULT_DYNAMODB_LOCAL_URL,
|
|
139
|
-
DEFAULT_DYNAMO_THROUGHPUT_READ,
|
|
140
|
-
DEFAULT_DYNAMO_THROUGHPUT_WRITE,
|
|
141
|
-
DEFAULT_DYNAMO_THROUGHPUT,
|
|
142
|
-
DEFAULT_MONGO_MAX_POOL_SIZE,
|
|
143
|
-
DEFAULT_MONGO_MIN_POOL_SIZE,
|
|
144
|
-
DEFAULT_MONGO_MAX_IDLE_TIME,
|
|
145
|
-
DEFAULT_MONGO_SOCKET_TIMEOUT,
|
|
146
|
-
DEFAULT_MONGO_FAMILY,
|
|
147
|
-
DEFAULT_MONGO_SERVER_SELECTION_TIMEOUT,
|
|
148
|
-
DEFAULT_MONGO_HEARTBEAT_FREQUENCY,
|
|
117
|
+
DEFAULT_CACHE_SET,
|
|
118
|
+
DEFAULT_CACHE_VALIDATION_CHECK,
|
|
119
|
+
DEFAULT_CLOUD_PROVIDER,
|
|
120
|
+
DEFAULT_CLUSTER_MANAGEMENT,
|
|
121
|
+
DEFAULT_CUSTOMER_CODE,
|
|
122
|
+
DEFAULT_DATABASE_CONNECTION_TIMEOUT,
|
|
149
123
|
DEFAULT_DATABASE_IP,
|
|
150
|
-
DEFAULT_DATABASE_USER,
|
|
151
124
|
DEFAULT_DATABASE_PASSWORD,
|
|
152
|
-
DEFAULT_DATABASE_CONNECTION_TIMEOUT,
|
|
153
125
|
DEFAULT_DATABASE_RECONNECTION_OFFSET,
|
|
126
|
+
DEFAULT_DATABASE_USER,
|
|
154
127
|
DEFAULT_DATABASE_VALIDATION_CHECK,
|
|
128
|
+
DEFAULT_DYNAMODB_LOCAL_URL,
|
|
129
|
+
DEFAULT_DYNAMO_THROUGHPUT,
|
|
130
|
+
DEFAULT_DYNAMO_THROUGHPUT_READ,
|
|
131
|
+
DEFAULT_DYNAMO_THROUGHPUT_WRITE,
|
|
155
132
|
DEFAULT_ENCRYPTION_SET,
|
|
133
|
+
DEFAULT_ENV,
|
|
134
|
+
DEFAULT_EXIT_DELAY,
|
|
135
|
+
DEFAULT_FILTER_FILE,
|
|
136
|
+
DEFAULT_INTERCEPT_ERROR,
|
|
156
137
|
DEFAULT_KMS_PROVIDER,
|
|
138
|
+
DEFAULT_LOCATION_PROVIDER,
|
|
157
139
|
DEFAULT_LOG_LEVEL,
|
|
158
|
-
|
|
159
|
-
|
|
140
|
+
DEFAULT_MONGO_FAMILY,
|
|
141
|
+
DEFAULT_MONGO_HEARTBEAT_FREQUENCY,
|
|
142
|
+
DEFAULT_MONGO_MAX_IDLE_TIME,
|
|
143
|
+
DEFAULT_MONGO_MAX_POOL_SIZE,
|
|
144
|
+
DEFAULT_MONGO_MIN_POOL_SIZE,
|
|
145
|
+
DEFAULT_MONGO_SERVER_SELECTION_TIMEOUT,
|
|
146
|
+
DEFAULT_MONGO_SOCKET_TIMEOUT,
|
|
160
147
|
DEFAULT_NO_STACK,
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
DEFAULT_TOPIC_SET,
|
|
169
|
-
DEFAULT_REGISTRATION_SET,
|
|
148
|
+
DEFAULT_REDIS_DISABLE_OFFLINE_QUEUE,
|
|
149
|
+
DEFAULT_REDIS_RECONNECT_INTERVAL,
|
|
150
|
+
DEFAULT_REDIS_RECONNECT_TRIES,
|
|
151
|
+
DEFAULT_REDIS_REQUEST_MAX_MEMORY,
|
|
152
|
+
DEFAULT_REDIS_REQUEST_MAX_MEMORY_POLICY,
|
|
153
|
+
DEFAULT_REDIS_SOCKET_KEEPALIVE,
|
|
154
|
+
DEFAULT_REGISTRATION_AFTER_POSTOPS_SET,
|
|
170
155
|
DEFAULT_REGISTRATION_RETRY,
|
|
156
|
+
DEFAULT_REGISTRATION_SET,
|
|
171
157
|
DEFAULT_REQUEST_TIMEOUT,
|
|
172
|
-
|
|
158
|
+
DEFAULT_S3_AWS_MAX_EVENTS,
|
|
159
|
+
DEFAULT_S3_AWS_MAX_SIZE,
|
|
160
|
+
DEFAULT_S3_AWS_TIMEOUT,
|
|
173
161
|
DEFAULT_SERVER_PUBLIC_DOMAIN_NAME,
|
|
174
|
-
|
|
162
|
+
DEFAULT_SERVER_PUBLIC_PROTOCOL,
|
|
163
|
+
DEFAULT_SERVER_SECURITY_SET,
|
|
175
164
|
DEFAULT_SWAGGER_DIR,
|
|
176
165
|
DEFAULT_SWAGGER_FILE_PROVIDER,
|
|
166
|
+
DEFAULT_TOPIC_SET,
|
|
167
|
+
DEFAULT_USER_DEFINITIONS_FILE,
|
|
168
|
+
ENV_VARIABLE,
|
|
169
|
+
MONGO_BASE_URL,
|
|
170
|
+
MONGO_BASE_URL_SRV,
|
|
171
|
+
NO,
|
|
172
|
+
NO_GENERIC,
|
|
173
|
+
NO_PUBLIC_PROVIDER,
|
|
174
|
+
PRODUCTIONS,
|
|
175
|
+
REDIS_BASE_URL,
|
|
176
|
+
SET_OFF,
|
|
177
|
+
SET_ON,
|
|
178
|
+
SUMOLOGIC,
|
|
177
179
|
SUPPORTED_SWAGGER_FILE_PROVIDERS,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
SWAGGER_EXT,
|
|
181
|
+
SWAGGER_SEP,
|
|
182
|
+
YES,
|
|
181
183
|
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import './testEnv.js';
|
|
3
|
+
import { setConfig } from '../index.js';
|
|
4
|
+
|
|
5
|
+
const pack = {
|
|
6
|
+
swaggerFile: {
|
|
7
|
+
version: '2.0.6',
|
|
8
|
+
account: 'mimiktech',
|
|
9
|
+
name: 'swagger-mds',
|
|
10
|
+
},
|
|
11
|
+
mimik: {
|
|
12
|
+
type: 'test-pack-type',
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
const config = {
|
|
16
|
+
database: {
|
|
17
|
+
type: 'mongodb',
|
|
18
|
+
table: {
|
|
19
|
+
itResource: 'itResource',
|
|
20
|
+
lease: 'lease',
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
dependencies: {
|
|
24
|
+
'mIT': {
|
|
25
|
+
audience: 'test-audience',
|
|
26
|
+
url: 'test-url',
|
|
27
|
+
},
|
|
28
|
+
'test-pack-type': {
|
|
29
|
+
audience: 'test=pack-type-audience',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
security: {
|
|
33
|
+
server: {
|
|
34
|
+
id: 'test-id',
|
|
35
|
+
secret: 'test-secret',
|
|
36
|
+
accessKey: 'test-access-key',
|
|
37
|
+
audience: 'test-scurity-audience',
|
|
38
|
+
issuer: 'test-issuer',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
serverSettings: {
|
|
42
|
+
type: 'test-type',
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const configuration = setConfig(pack, config);
|
|
47
|
+
console.log(configuration);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* eslint no-process-env: "off" */
|
|
2
|
+
import process from 'process';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
*
|
|
6
|
+
* Test configuration Configuration.
|
|
7
|
+
*
|
|
8
|
+
* @description The following environment variables are needed to configure configuration:
|
|
9
|
+
*
|
|
10
|
+
* | Env variable name | Description | Default | Comments |
|
|
11
|
+
* | ----------------- | ----------- | ------- | -------- |
|
|
12
|
+
* | DATABASE_NAME | name of the database to use for mongodb
|
|
13
|
+
* | MONGO_REPLICAT_SET | test for Boolean()
|
|
14
|
+
* | SUMO_LOGIC_ENDPOINT | dummy endpoint for sumologic
|
|
15
|
+
* | SUMO_LOGIC_COLLECTOR_CODE | dummy collector code for sumologic
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
process.env.DATABASE_NAME = 'test-database-name';
|
|
19
|
+
process.env.MONGO_REPLICAT_SET = 'test-mongo-replicat-set';
|
|
20
|
+
process.env.SUMO_LOGIC_ENDPOINT = 'test-logIngo-sumologic-endpoint';
|
|
21
|
+
process.env.SUMO_LOGIC_COLLECTOR_CODE = 'test-logInfo-sumologic-code';
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mimik/configuration",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"description": "Common configuration for mimik services",
|
|
5
|
-
"main": "index.js",
|
|
5
|
+
"main": "./index.js",
|
|
6
|
+
"type": "module",
|
|
6
7
|
"scripts": {
|
|
7
|
-
"lint": "eslint --
|
|
8
|
+
"lint": "eslint . --no-error-on-unmatched-pattern",
|
|
8
9
|
"docs": "jsdoc2md index.js > README.md",
|
|
9
10
|
"test": "echo \"Error: no test specified\" && exit 0",
|
|
10
11
|
"test-ci": "echo \"Error: no test specified\" && exit 0",
|
|
@@ -29,9 +30,9 @@
|
|
|
29
30
|
"url": "https://bitbucket.org/mimiktech/configuration"
|
|
30
31
|
},
|
|
31
32
|
"dependencies": {
|
|
32
|
-
"@mimik/request-helper": "^
|
|
33
|
-
"@mimik/sumologic-winston-logger": "^
|
|
34
|
-
"@mimik/user-filters": "^
|
|
33
|
+
"@mimik/request-helper": "^2.0.0",
|
|
34
|
+
"@mimik/sumologic-winston-logger": "^2.0.1",
|
|
35
|
+
"@mimik/user-filters": "^2.0.0",
|
|
35
36
|
"ip": "2.0.1",
|
|
36
37
|
"lodash.includes": "4.3.0",
|
|
37
38
|
"lodash.isnan": "3.0.2",
|
|
@@ -40,18 +41,15 @@
|
|
|
40
41
|
"lodash.isundefined": "3.0.1",
|
|
41
42
|
"lodash.split": "4.4.2",
|
|
42
43
|
"lodash.trim": "4.5.1",
|
|
43
|
-
"uuid": "
|
|
44
|
+
"uuid": "11.1.0"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
|
-
"@
|
|
47
|
-
"@mimik/eslint-plugin-document-env": "^
|
|
48
|
-
"eslint": "
|
|
49
|
-
"eslint
|
|
50
|
-
"eslint-plugin-import": "2.
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"eslint-plugin-react-hooks": "4.6.0",
|
|
54
|
-
"husky": "9.0.11",
|
|
55
|
-
"jsdoc-to-markdown": "8.0.1"
|
|
47
|
+
"@eslint/js": "9.22.0",
|
|
48
|
+
"@mimik/eslint-plugin-document-env": "^2.0.2",
|
|
49
|
+
"@stylistic/eslint-plugin": "4.2.0",
|
|
50
|
+
"eslint": "9.22.0",
|
|
51
|
+
"eslint-plugin-import": "2.31.0",
|
|
52
|
+
"husky": "9.1.7",
|
|
53
|
+
"jsdoc-to-markdown": "9.1.1"
|
|
56
54
|
}
|
|
57
55
|
}
|
package/.eslintrc
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"plugins": [
|
|
3
|
-
"@mimik/document-env",
|
|
4
|
-
"@mimik/dependencies"
|
|
5
|
-
],
|
|
6
|
-
"env": {
|
|
7
|
-
"node": true
|
|
8
|
-
},
|
|
9
|
-
"parserOptions": {
|
|
10
|
-
"ecmaVersion": 2020
|
|
11
|
-
},
|
|
12
|
-
"extends": "airbnb",
|
|
13
|
-
"rules": {
|
|
14
|
-
"import/no-extraneous-dependencies": ["error", {"devDependencies": true}],
|
|
15
|
-
"import/no-unresolved": ["error", { "amd": true, "commonjs": true, "caseSensitiveStrict": true }],
|
|
16
|
-
"brace-style": [1, "stroustrup", {"allowSingleLine": true}],
|
|
17
|
-
"no-confusing-arrow": [0], // arrow isnt confusing
|
|
18
|
-
"max-len": [1, 180, { "ignoreComments": true }],
|
|
19
|
-
"linebreak-style": 0,
|
|
20
|
-
"quotes": [1, "single"],
|
|
21
|
-
"semi": [1, "always"],
|
|
22
|
-
"no-process-env": ["error"],
|
|
23
|
-
"@mimik/document-env/validate-document-env": 2,
|
|
24
|
-
"@mimik/dependencies/case-sensitive": 2,
|
|
25
|
-
"@mimik/dependencies/no-cycles": 2,
|
|
26
|
-
"@mimik/dependencies/require-json-ext": 2
|
|
27
|
-
},
|
|
28
|
-
"settings":{
|
|
29
|
-
"react": {
|
|
30
|
-
"version": "detect"
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"globals": {
|
|
34
|
-
"module": true,
|
|
35
|
-
"require": true,
|
|
36
|
-
"const": false,
|
|
37
|
-
"it": false,
|
|
38
|
-
"describe": false,
|
|
39
|
-
"before": true,
|
|
40
|
-
"after": true,
|
|
41
|
-
"JSON": true
|
|
42
|
-
}
|
|
43
|
-
}
|