ac-awssecrets 2.2.1 → 2.3.1

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/CHANGELOG.md CHANGED
@@ -1,3 +1,33 @@
1
+ <a name="2.3.1"></a>
2
+
3
+ ## [2.3.1](https://github.com/admiralcloud/ac-awssecrets/compare/v2.3.0..v2.3.1) (2024-08-17 10:57:27)
4
+
5
+
6
+ ### Bug Fix
7
+
8
+ * **App:** Add ignoreInTestmode for secret params | MP | [0065e17890c41d01a2ce47a302ce9f2a818cbce3](https://github.com/admiralcloud/ac-awssecrets/commit/0065e17890c41d01a2ce47a302ce9f2a818cbce3)
9
+ If ignoreInTestmode is true in testmode, the secret parameter is not fetched.
10
+ Related issues: [undefined/undefined#master](undefined/browse/master)
11
+ ### Chores
12
+
13
+ * **App:** Updated packages | MP | [53c458370aba20b633b7ebe33ab3e026bc95a133](https://github.com/admiralcloud/ac-awssecrets/commit/53c458370aba20b633b7ebe33ab3e026bc95a133)
14
+ Updated packages
15
+ Related issues: [undefined/undefined#master](undefined/browse/master)
16
+ <a name="2.3.0"></a>
17
+
18
+ # [2.3.0](https://github.com/admiralcloud/ac-awssecrets/compare/v2.2.1..v2.3.0) (2024-08-12 10:04:48)
19
+
20
+
21
+ ### Feature
22
+
23
+ * **App:** Add option to merge AWS parameters with config | MP | [e000f4b824a44c39f2b4b99c8b20440fefd80fb3](https://github.com/admiralcloud/ac-awssecrets/commit/e000f4b824a44c39f2b4b99c8b20440fefd80fb3)
24
+ Add option to merge AWS parameters with config instead of overwriting (default)
25
+ Related issues: [undefined/undefined#master](undefined/browse/master)
26
+ ### Chores
27
+
28
+ * **App:** Updated packages | MP | [286853f0f9bd9a4456e6b52e79027d7afa645fd5](https://github.com/admiralcloud/ac-awssecrets/commit/286853f0f9bd9a4456e6b52e79027d7afa645fd5)
29
+ Updated packages
30
+ Related issues: [undefined/undefined#master](undefined/browse/master)
1
31
  <a name="2.2.1"></a>
2
32
 
3
33
  ## [2.2.1](https://github.com/admiralcloud/ac-awssecrets/compare/v2.2.0..v2.2.1) (2024-08-09 15:10:41)
package/README.md CHANGED
@@ -59,6 +59,34 @@ const config = {
59
59
  ]
60
60
  }
61
61
  }
62
+ ```
63
+ ```
64
+ // example with merge = true
65
+ const config = {
66
+ aws: {
67
+ account: 123,
68
+ s3: {
69
+ region: 'eu-central-1'
70
+ }
71
+ }
72
+ }
73
+
74
+ /development/aws -> { account: 456 }
75
+ const payload = {
76
+ secretParameters: [
77
+ { name: 'aws', json: true, merge: true },
78
+ ],
79
+ config
80
+ }
81
+ await awsSecrets.loadSecretParameters(payload)
82
+
83
+ // final result
84
+ config.aws = {
85
+ account: 456,
86
+ s3: {
87
+ region: 'eu-central-1'
88
+ }
89
+ }
62
90
 
63
91
  ```
64
92
 
@@ -70,6 +98,7 @@ const config = {
70
98
  |json|boolean|-|If true, the parameter value will be parsed as JSON
71
99
  |array|boolean|-|If true, the the value will be pushed to the array at name or path
72
100
  |property|object|-|If set, instead of pushing the value to an array it will inserted at the object which matches the property
101
+ |merge|boolean|-|If true, objects from AWS parameters will be merged with existing objects
73
102
 
74
103
 
75
104
  # AWS Secrets
package/index.js CHANGED
@@ -31,7 +31,7 @@ const awsSecrets = () => {
31
31
  : setKey(obj[head], rest.join('.'), value)
32
32
  }
33
33
 
34
- const setValue = (config, { path, value, array = false, property }) => {
34
+ const setValue = (config, { path, value, array = false, property, merge = false }) => {
35
35
  // path can be from AWS parametes store (/a/b/c) or a real JSON path (a.b.c)
36
36
  const keys = path.includes('/') ? path.split('/').filter(Boolean) : path.split('.')
37
37
  const lastKey = keys.pop()
@@ -68,7 +68,12 @@ const awsSecrets = () => {
68
68
  }
69
69
  }
70
70
  else {
71
- pointer[lastKey] = value
71
+ if (merge && typeof pointer[lastKey] === 'object' && !Array.isArray(pointer[lastKey]) && typeof value === 'object' && !Array.isArray(value)) {
72
+ pointer[lastKey] = { ...pointer[lastKey], ...value }
73
+ }
74
+ else {
75
+ pointer[lastKey] = value
76
+ }
72
77
  }
73
78
  }
74
79
 
@@ -82,7 +87,7 @@ const awsSecrets = () => {
82
87
  }
83
88
  const ssmClient = new SSMClient(awsConfig)
84
89
 
85
- const getSecretParameter = async({ name, json = false, array = false, path, property, debug }) => {
90
+ const getSecretParameter = async({ name, json = false, array = false, path, property, debug, merge }) => {
86
91
  const parameterName = `/${environment}/${name}`
87
92
  try {
88
93
  let value
@@ -110,7 +115,7 @@ const awsSecrets = () => {
110
115
  if (debug) {
111
116
  console.warn('P %s | T %s | V %j', parameterName, typeof value, value)
112
117
  }
113
- setValue(config, { path: (path || name), value, array, property })
118
+ setValue(config, { path: (path || name), value, array, property, merge })
114
119
 
115
120
  }
116
121
  catch (e) {
@@ -119,6 +124,7 @@ const awsSecrets = () => {
119
124
  }
120
125
 
121
126
  for (const secretParameter of secretParameters) {
127
+ if (environment === 'test' && secretParameter?.ignoreInTestMode) continue
122
128
  await getSecretParameter(secretParameter)
123
129
  }
124
130
  }
package/package.json CHANGED
@@ -3,10 +3,10 @@
3
3
  "author": "Mark Poepping (https://www.admiralcloud.com)",
4
4
  "license": "MIT",
5
5
  "repository": "admiralcloud/ac-awssecrets",
6
- "version": "2.2.1",
6
+ "version": "2.3.1",
7
7
  "dependencies": {
8
- "@aws-sdk/client-secrets-manager": "^3.624.0",
9
- "@aws-sdk/client-ssm": "^3.624.0"
8
+ "@aws-sdk/client-secrets-manager": "^3.632.0",
9
+ "@aws-sdk/client-ssm": "^3.632.0"
10
10
  },
11
11
  "devDependencies": {
12
12
  "ac-semantic-release": "^0.4.2",
package/test/config.js CHANGED
@@ -18,6 +18,7 @@ const config = {
18
18
  }
19
19
  },
20
20
  aws: {
21
+ account: '123',
21
22
  accessKeys: []
22
23
  },
23
24
  configVar7: {
@@ -33,6 +34,7 @@ const secretParameters = [
33
34
  { name: 'configVar4/api', json: true },
34
35
  { name: 'configVar5.path', json: true },
35
36
  { name: 'configVar6', json: true },
37
+ { name: 'aws', json: true, merge: true }
36
38
  ]
37
39
 
38
40
  const parameterStore = [
@@ -66,6 +68,12 @@ const parameterStore = [
66
68
  prop2: 'abc'
67
69
  })
68
70
  },
71
+ {
72
+ name: '/test/aws',
73
+ value: JSON.stringify({
74
+ account: '456'
75
+ })
76
+ }
69
77
  ]
70
78
 
71
79
 
package/test/test.js CHANGED
@@ -67,6 +67,12 @@ describe('Reading secretParameters', () => {
67
67
  it('Check non existing key - should fallback to existing value without error', async() => {
68
68
  expect(config.configVar7).to.have.property('level', 'info')
69
69
  })
70
+
71
+
72
+ it('Check merge config', async() => {
73
+ expect(config.aws).to.have.property('account', '456')
74
+ expect(config.aws).to.have.property('accessKeys').length(0)
75
+ })
70
76
  })
71
77
 
72
78