diff --git a/package-lock.json b/package-lock.json index 8b7dad397..d53607c0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "middy", - "version": "0.25.0", + "version": "0.25.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 485852170..fee7bb417 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "middy", - "version": "0.25.0", + "version": "0.25.1", "description": "🛵 The stylish Node.js middleware engine for AWS Lambda", "main": "./index.js", "files": [ diff --git a/src/middlewares/__tests__/ssm.js b/src/middlewares/__tests__/ssm.js index 8f731c5b9..9eeaa56ea 100644 --- a/src/middlewares/__tests__/ssm.js +++ b/src/middlewares/__tests__/ssm.js @@ -392,4 +392,27 @@ describe('🔒 SSM Middleware', () => { done }) }) + + test('It should allow multiple option names to point at the same SSM path', (done) => { + testScenario({ + ssmMockResponses: [ + { + Parameters: [{ Name: '/dev/service_name/key_name', Value: 'key-value' }] + } + ], + middlewareOptions: { + names: { + KEY_NAME_1: '/dev/service_name/key_name', + KEY_NAME_2: '/dev/service_name/key_name' + } + }, + callbacks: [ + () => { + expect(process.env.KEY_NAME_1).toEqual('key-value') + expect(process.env.KEY_NAME_2).toEqual('key-value') + } + ], + done + }) + }) }) diff --git a/src/middlewares/ssm.js b/src/middlewares/ssm.js index 33e6ad8c4..473d9f732 100644 --- a/src/middlewares/ssm.js +++ b/src/middlewares/ssm.js @@ -56,7 +56,6 @@ module.exports = opts => { }, [] ) - const ssmParamNames = getSSMParamValues(options.names) if (ssmParamNames.length) { const ssmPromise = ssmInstance @@ -149,7 +148,7 @@ const getTargetObjectToAssign = (handler, options) => options.setToContext ? handler.context : process.env const getSSMParamValues = userParamsMap => - Object.keys(userParamsMap).map(key => userParamsMap[key]) + [...new Set(Object.keys(userParamsMap).map(key => userParamsMap[key]))] /** * Lazily load aws-sdk and initialize SSM constructor @@ -191,11 +190,9 @@ const handleInvalidParams = ({ Parameters, InvalidParameters }) => { * @return {Object} Merged object for assignment to target object */ const getParamsToAssignByName = (userParamsMap, ssmParams) => { - const ssmToUserParamsMap = invertObject(userParamsMap) - - return ssmParams.reduce((aggregator, ssmParam) => { - aggregator[ssmToUserParamsMap[ssmParam.Name]] = ssmParam.Value - return aggregator + return Object.keys(userParamsMap).reduce((acc, key) => { + acc[key] = ssmParams.find(param => param.Name === userParamsMap[key]).Value + return acc }, {}) } @@ -218,9 +215,3 @@ const getParamsToAssignByPath = ( ssmParam.Value return aggregator }, {}) - -const invertObject = obj => - Object.keys(obj).reduce((aggregator, key) => { - aggregator[obj[key]] = key - return aggregator - }, {})