diff --git a/docs/utilities/parameters.md b/docs/utilities/parameters.md index 9c659e1293..c9d43e7ccc 100644 --- a/docs/utilities/parameters.md +++ b/docs/utilities/parameters.md @@ -43,7 +43,7 @@ Depending on the provider you want to use, install the library and the correspon === "DynamoDBProvider" ```bash - npm install @aws-lambda-powertools/parameters @aws-sdk/client-dynamodb + npm install @aws-lambda-powertools/parameters @aws-sdk/client-dynamodb @aws-sdk/util-dynamodb ``` ???+ tip diff --git a/package-lock.json b/package-lock.json index 5988ec4416..0fef505458 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1862,6 +1862,19 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/util-base64-node": { + "version": "3.209.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.209.0.tgz", + "integrity": "sha512-U6pjb6uF/BameQLmzoSrqeiTxu5otwwGV7fO+TyE/3SJm/lyIsBaO+wr0qsoK0ae1VqggR+KCsUG13pWhdltpw==", + "deprecated": "The package @aws-sdk/util-base64-node has been renamed to @aws-sdk/util-base64. Please install the renamed package.", + "dependencies": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/util-body-length-browser": { "version": "3.188.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", @@ -17240,7 +17253,7 @@ "version": "1.5.0", "license": "MIT-0", "dependencies": { - "@aws-sdk/util-base64": "^3.208.0" + "@aws-sdk/util-base64-node": "^3.209.0" }, "devDependencies": { "@aws-sdk/client-appconfigdata": "^3.241.0", @@ -17532,11 +17545,11 @@ "version": "file:packages/parameters", "requires": { "@aws-sdk/client-appconfigdata": "^3.241.0", - "@aws-sdk/client-dynamodb": "*", + "@aws-sdk/client-dynamodb": "^3.245.0", "@aws-sdk/client-secrets-manager": "^3.238.0", "@aws-sdk/client-ssm": "^3.244.0", - "@aws-sdk/util-base64": "^3.208.0", - "@aws-sdk/util-dynamodb": "*", + "@aws-sdk/util-base64-node": "^3.209.0", + "@aws-sdk/util-dynamodb": "^3.245.0", "aws-sdk-client-mock": "^2.0.1", "aws-sdk-client-mock-jest": "^2.0.1" }, @@ -18872,6 +18885,15 @@ "tslib": "^2.3.1" } }, + "@aws-sdk/util-base64-node": { + "version": "3.209.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-base64-node/-/util-base64-node-3.209.0.tgz", + "integrity": "sha512-U6pjb6uF/BameQLmzoSrqeiTxu5otwwGV7fO+TyE/3SJm/lyIsBaO+wr0qsoK0ae1VqggR+KCsUG13pWhdltpw==", + "requires": { + "@aws-sdk/util-buffer-from": "3.208.0", + "tslib": "^2.3.1" + } + }, "@aws-sdk/util-body-length-browser": { "version": "3.188.0", "resolved": "https://registry.npmjs.org/@aws-sdk/util-body-length-browser/-/util-body-length-browser-3.188.0.tgz", diff --git a/packages/parameters/package.json b/packages/parameters/package.json index 55afcf9166..bc1bf31e9b 100644 --- a/packages/parameters/package.json +++ b/packages/parameters/package.json @@ -60,6 +60,6 @@ "aws-sdk-client-mock-jest": "^2.0.1" }, "dependencies": { - "@aws-sdk/util-base64": "^3.208.0" + "@aws-sdk/util-base64-node": "^3.209.0" } } diff --git a/packages/parameters/src/BaseProvider.ts b/packages/parameters/src/BaseProvider.ts index 2d993c71a2..3e4b2a1474 100644 --- a/packages/parameters/src/BaseProvider.ts +++ b/packages/parameters/src/BaseProvider.ts @@ -1,4 +1,4 @@ -import { fromBase64 } from '@aws-sdk/util-base64'; +import { fromBase64 } from '@aws-sdk/util-base64-node'; import { GetOptions } from './GetOptions'; import { GetMultipleOptions } from './GetMultipleOptions'; import { ExpirableValue } from './ExpirableValue'; diff --git a/packages/parameters/src/dynamodb/DynamoDBProvider.ts b/packages/parameters/src/dynamodb/DynamoDBProvider.ts index f99ab90651..7fb5152553 100644 --- a/packages/parameters/src/dynamodb/DynamoDBProvider.ts +++ b/packages/parameters/src/dynamodb/DynamoDBProvider.ts @@ -49,7 +49,10 @@ class DynamoDBProvider extends BaseProvider { ...(options?.sdkOptions || {}), TableName: this.tableName, Key: marshall({ [this.keyAttr]: name }), - ProjectionExpression: this.valueAttr, + ProjectionExpression: '#value', + ExpressionAttributeNames: { + '#value': this.valueAttr, + } }; const result = await this.client.send(new GetItemCommand(sdkOptions)); @@ -63,9 +66,14 @@ class DynamoDBProvider extends BaseProvider { const sdkOptions: QueryCommandInput = { ...(options?.sdkOptions || {}), TableName: this.tableName, - KeyConditionExpression: `${this.keyAttr} = :key`, + KeyConditionExpression: '#key = :key', ExpressionAttributeValues: marshall({ ':key': path }), - ProjectionExpression: `${this.sortAttr}, ${this.valueAttr}`, + ExpressionAttributeNames: { + '#key': this.keyAttr, + '#sk': this.sortAttr, + '#value': this.valueAttr, + }, + ProjectionExpression: '#sk, #value', }; const paginationOptions: PaginationConfiguration = { client: this.client, diff --git a/packages/parameters/tests/unit/BaseProvider.test.ts b/packages/parameters/tests/unit/BaseProvider.test.ts index bc64b55150..3b8f029d64 100644 --- a/packages/parameters/tests/unit/BaseProvider.test.ts +++ b/packages/parameters/tests/unit/BaseProvider.test.ts @@ -9,7 +9,7 @@ import { GetParameterError, TransformParameterError } from '../../src'; -import { toBase64 } from '@aws-sdk/util-base64'; +import { toBase64 } from '@aws-sdk/util-base64-node'; const encoder = new TextEncoder(); diff --git a/packages/parameters/tests/unit/DynamoDBProvider.test.ts b/packages/parameters/tests/unit/DynamoDBProvider.test.ts index 2ecbd4dd44..05dae38d47 100644 --- a/packages/parameters/tests/unit/DynamoDBProvider.test.ts +++ b/packages/parameters/tests/unit/DynamoDBProvider.test.ts @@ -59,7 +59,10 @@ describe('Class: DynamoDBProvider', () => { Key: marshall({ id: parameterName, }), - ProjectionExpression: 'value', + ExpressionAttributeNames: { + '#value': 'value', + }, + ProjectionExpression: '#value', }); expect(parameter).toEqual(parameterValue); @@ -91,7 +94,10 @@ describe('Class: DynamoDBProvider', () => { Key: marshall({ key: parameterName, }), - ProjectionExpression: 'val', + ExpressionAttributeNames: { + '#value': 'val', + }, + ProjectionExpression: '#value', }); expect(parameter).toEqual(parameterValue); @@ -125,7 +131,10 @@ describe('Class: DynamoDBProvider', () => { Key: marshall({ id: parameterName, }), - ProjectionExpression: 'value', + ExpressionAttributeNames: { + '#value': 'value', + }, + ProjectionExpression: '#value', ConsistentRead: true, }); expect(parameter).toEqual(parameterValue); @@ -164,7 +173,10 @@ describe('Class: DynamoDBProvider', () => { Key: marshall({ id: parameterName, }), - ProjectionExpression: 'value', + ExpressionAttributeNames: { + '#value': 'value', + }, + ProjectionExpression: '#value', }); }); @@ -206,11 +218,16 @@ describe('Class: DynamoDBProvider', () => { // Assess expect(client).toReceiveCommandWith(QueryCommand, { TableName: 'test-table', - KeyConditionExpression: `id = :key`, + KeyConditionExpression: `#key = :key`, ExpressionAttributeValues: marshall({ ':key': parameterPath, }), - ProjectionExpression: 'sk, value', + ExpressionAttributeNames: { + '#key': 'id', + '#sk': 'sk', + '#value': 'value' + }, + ProjectionExpression: '#sk, #value', }); expect(parameters).toEqual({ a: 'parameter-a', @@ -256,11 +273,16 @@ describe('Class: DynamoDBProvider', () => { // Assess expect(client).toReceiveCommandWith(QueryCommand, { TableName: 'test-table', - KeyConditionExpression: `key = :key`, + KeyConditionExpression: `#key = :key`, ExpressionAttributeValues: marshall({ ':key': parameterPath, }), - ProjectionExpression: 'sort, val', + ExpressionAttributeNames: { + '#key': 'key', + '#sk': 'sort', + '#value': 'val' + }, + ProjectionExpression: '#sk, #value', }); expect(parameters).toEqual({ a: 'parameter-a', @@ -308,11 +330,16 @@ describe('Class: DynamoDBProvider', () => { // Assess expect(client).toReceiveCommandWith(QueryCommand, { TableName: 'test-table', - KeyConditionExpression: `id = :key`, + KeyConditionExpression: `#key = :key`, ExpressionAttributeValues: marshall({ ':key': parameterPath, }), - ProjectionExpression: 'sk, value', + ExpressionAttributeNames: { + '#key': 'id', + '#sk': 'sk', + '#value': 'value' + }, + ProjectionExpression: '#sk, #value', ConsistentRead: true, }); expect(parameters).toEqual({ @@ -419,11 +446,16 @@ describe('Class: DynamoDBProvider', () => { // Assess expect(client).toReceiveCommandWith(QueryCommand, { TableName: 'test-table', - KeyConditionExpression: `id = :key`, + KeyConditionExpression: `#key = :key`, ExpressionAttributeValues: marshall({ ':key': parameterPath, }), - ProjectionExpression: 'sk, value', + ExpressionAttributeNames: { + '#key': 'id', + '#sk': 'sk', + '#value': 'value' + }, + ProjectionExpression: '#sk, #value', ConsistentRead: true, Limit: 10, });